unicode-data-0.6.0/0000755000000000000000000000000007346545000012243 5ustar0000000000000000unicode-data-0.6.0/Changelog.md0000644000000000000000000000700107346545000014452 0ustar0000000000000000# Changelog ## 0.6.0 (July 2024) - Updated to [Unicode 15.1.0](https://www.unicode.org/versions/Unicode15.1.0/). - Added `showCodePoint` to `Unicode.Char`. - Added `intToDigiT` to `Unicode.Char.Numeric`. ### Removed - Removed deprecated `isLetter` and `isSpace` from `Unicode.Char.General`. Use the corresponding functions from `Unicode.Char.General.Compat` instead. - Remove deprecated `isLower` and `isUpper` from `Unicode.Char.Case`. Use the corresponding functions from `Unicode.Char.Case.Compat` instead. - Removed deprecated `Unicode.Char.Numeric.isNumber`. Use `Unicode.Char.Numeric.Compat.isNumber` instead. ### Deprecations - `Unicode.Char.General.isAlphaNum`. Use `Unicode.Char.General.Compat.isAlphaNum` instead. ## 0.5.0 (July 2024) - Fix the inlining of `Addr#` literals and reduce their size. This results in a sensible decrease of the executable size. - Changed `integerValue` from `Char -> Maybe Int` to `(Integral a) => Char -> Maybe a`. ## 0.4.0.1 (December 2022) - Fix [Unicode blocks handling on big-endian architectures](https://github.com/composewell/unicode-data/issues/97). ## 0.4.0 (September 2022) - Update to [Unicode 15.0.0](https://www.unicode.org/versions/Unicode15.0.0/). ## 0.3.1 (September 2022) - Added full case conversions to `Unicode.Char.Case`: - Case folding: `caseFoldMapping` and `toCaseFoldString`. - Lower case: `lowerCaseMapping` and `toLowerString`. - Upper case: `upperCaseMapping` and `toUpperString`. - Title case: `titleCaseMapping` and `toTitleString`. - Stream mechanism: `Unfold` and `Step`. - Added `isNumeric`, `numericValue` and `integerValue` to `Unicode.Char.Numeric`. - Added the module `Unicode.Char.General.Blocks`. - Add compatibility module: - `Unicode.Char.Numeric.Compat` ### Deprecations - `Unicode.Char.Numeric.isNumber`: it will be replaced by `isNumeric` in a _future_ version of this package. Use the function in `Unicode.Char.Numeric.Compat` instead. ## 0.3.0 (December 2021) - Support for big-endian architectures. - Added `unicodeVersion`. - Added `GeneralCategory` data type and corresponding `generalCategoryAbbr`, `generalCategory` functions. - Added the following functions to `Unicode.Char.General`: `isAlphabetic`, `isAlphaNum`, `isControl`, `isMark`, `isPrint`, `isPunctuation`, `isSeparator`, `isSymbol` and `isWhiteSpace`. - Added the module `Unicode.Char.Numeric`. - Add compatibility modules: - `Unicode.Char.General.Compat` - `Unicode.Char.Case.Compat` These modules are compatible with `base:Data.Char`. - Re-export some functions from `Data.Char` in order to make `Unicode.Char` a drop-in replacement in a _future_ version of this package. - Drop support for GHC 7.10.3 ### Deprecations - In `Unicode.Char.Case`: - `isUpper`: use `isUpperCase` instead. - `isLower`: use `isLowerCase` instead. - In `Unicode.Char.General`: - `isLetter`: use `isAlphabetic` instead. - `isSpace`: use `isWhiteSpace` instead. - In `Unicode.Char`: same as hereinabove. These functions will be replaced in a _future_ release with the functions with the same names from `Unicode.Char.Case.Compat` and `Unicode.Char.General.Compat`. ## 0.2.0 (November 2021) * Update to [Unicode 14.0.0](https://www.unicode.org/versions/Unicode14.0.0/). * Add `Unicode.Char.Identifiers` supporting Unicode Identifier and Pattern Syntax. ## 0.1.0.1 (Jul 2021) * Workaround to avoid incorrect display of dependencies on Hackage by moving build-depends of ucd2haskell executable under a build flag conditional. ## 0.1.0 (Jul 2021) * Initial release unicode-data-0.6.0/LICENSE0000644000000000000000000003320007346545000013246 0ustar0000000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work. "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS ------------------------------------------------------------------------------- This distribution includes portions of code from the "unicode-transforms" package (https://github.com/composewell/unicode-transforms/) which is available under BSD-3-Clause license as described below. ------------------------------------------------------------------------------- Copyright (c) 2016, Harendra Kumar All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ------------------------------------------------------------------------------- This distribution includes portions of code from the "unicode-transforms" package (https://github.com/composewell/unicode-transforms/) which included portions of code from the "prose" (https://github.com/llelf/prose) package available under BSD-3-Clause license as described below. ------------------------------------------------------------------------------- Copyright (c) 2014–2015, Antonio Nikishaev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Antonio Nikishaev nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. unicode-data-0.6.0/NOTICE0000644000000000000000000000053207346545000013147 0ustar0000000000000000unicode-data Copyright 2020 Composewell Technologies and Contributors This product includes software developed at Composewell Technologies (http://www.composewell.com). The Initial Developer of some parts of the code, which are copied from https://github.com/composewell/unicode-transforms/, is Andrew Lelechenko (https://github.com/Bodigrim). unicode-data-0.6.0/README.md0000644000000000000000000001114407346545000013523 0ustar0000000000000000# README `unicode-data` provides Haskell APIs to efficiently access the Unicode character database. [Performance](#performance) is the primary goal in the design of this package. The Haskell data structures are generated programmatically from the [Unicode character database](https://www.unicode.org/ucd/) (UCD) files. The latest Unicode version supported by this library is [`15.1.0`](https://www.unicode.org/versions/Unicode15.1.0/). Please see the [Haddock documentation](https://hackage.haskell.org/package/unicode-data) for reference documentation. ## Performance `unicode-data` is up to _5 times faster_ than `base` ≤ 4.17 (see [partial integration to `base`](#partial-integration-of-unicode-data-into-base)). The following benchmark compares the time taken in milliseconds to process all the Unicode code points (except surrogates, private use areas and unassigned), for `base-4.16` (GHC 9.2.6) and this package (v0.4). Machine: 8 × AMD Ryzen 5 2500U on Linux. ``` All Unicode.Char.Case.Compat isLower base: OK (1.19s) 17.1 ms ± 241 μs unicode-data: OK (0.52s) 3.58 ms ± 125 μs, 0.21x isUpper base: OK (0.63s) 17.5 ms ± 359 μs unicode-data: OK (1.02s) 3.58 ms ± 48 μs, 0.21x toLower base: OK (0.59s) 16.3 ms ± 524 μs unicode-data: OK (0.80s) 5.63 ms ± 129 μs, 0.35x toTitle base: OK (3.91s) 14.9 ms ± 427 μs unicode-data: OK (2.84s) 5.31 ms ± 37 μs, 0.36x toUpper base: OK (2.12s) 15.4 ms ± 234 μs unicode-data: OK (0.86s) 5.80 ms ± 159 μs, 0.38x Unicode.Char.General generalCategory base: OK (1.16s) 16.6 ms ± 534 μs unicode-data: OK (0.62s) 4.14 ms ± 103 μs, 0.25x isAlphaNum base: OK (0.62s) 17.1 ms ± 655 μs unicode-data: OK (0.97s) 3.59 ms ± 51 μs, 0.21x isControl base: OK (0.63s) 17.6 ms ± 494 μs unicode-data: OK (0.57s) 3.59 ms ± 90 μs, 0.20x isMark base: OK (0.34s) 17.6 ms ± 695 μs unicode-data: OK (1.00s) 3.59 ms ± 67 μs, 0.20x isPrint base: OK (1.22s) 17.7 ms ± 492 μs unicode-data: OK (1.92s) 3.56 ms ± 27 μs, 0.20x isPunctuation base: OK (2.23s) 16.6 ms ± 619 μs unicode-data: OK (1.05s) 3.60 ms ± 52 μs, 0.22x isSeparator base: OK (1.15s) 16.6 ms ± 439 μs unicode-data: OK (0.49s) 3.60 ms ± 85 μs, 0.22x isSymbol base: OK (2.11s) 16.1 ms ± 553 μs unicode-data: OK (1.05s) 3.58 ms ± 62 μs, 0.22x Unicode.Char.General.Compat isAlpha base: OK (0.58s) 17.2 ms ± 502 μs unicode-data: OK (1.02s) 3.58 ms ± 50 μs, 0.21x isLetter base: OK (8.57s) 16.4 ms ± 553 μs unicode-data: OK (1.05s) 3.58 ms ± 79 μs, 0.22x isSpace base: OK (1.09s) 7.56 ms ± 159 μs unicode-data: OK (0.97s) 3.58 ms ± 46 μs, 0.47x Unicode.Char.Numeric.Compat isNumber base: OK (0.58s) 15.7 ms ± 462 μs unicode-data: OK (0.58s) 3.58 ms ± 107 μs, 0.23x ``` ### Partial integration of `unicode-data` into `base` Since `base` 4.18, `unicode-data` has been _partially_ [integrated to GHC](https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8072), so there should be no relevant difference. However, using `unicode-data` allows to select the _exact_ version of Unicode to support, therefore not relying on the version supported by GHC. ## Unicode database version update To update the Unicode version please update the version number in `ucd.sh`. To download the Unicode database, run `ucd.sh download` from the top level directory of the repo to fetch the database in `./ucd`. ``` $ ./ucd.sh download ``` To generate the Haskell data structure files from the downloaded database files, run `ucd.sh generate` from the top level directory of the repo. ``` $ ./ucd.sh generate ``` ## Running property doctests Temporarily add `QuickCheck` to build depends of library. ``` $ cabal build $ cabal-docspec --check-properties --property-variables c ``` ## Licensing `unicode-data` is an [open source](https://github.com/composewell/unicode-data) project available under a liberal [Apache-2.0 license](LICENSE). ## Contributing As an open project we welcome contributions. unicode-data-0.6.0/bench/0000755000000000000000000000000007346545000013322 5ustar0000000000000000unicode-data-0.6.0/bench/Main.hs0000644000000000000000000000250007346545000014537 0ustar0000000000000000import Data.Proxy (Proxy(..)) import Test.Tasty (askOption) import Test.Tasty.Bench (bgroup, benchIngredients) import Test.Tasty.Ingredients.Basic (includingOptions) import Test.Tasty.Options (OptionDescription(..)) import Test.Tasty.Runners (TestTree, defaultMainWithIngredients) import Unicode.Char.Bench (CharRange(..)) import qualified Unicode.Char.CaseBench as C import qualified Unicode.Char.Case.CompatBench as CC import qualified Unicode.Char.GeneralBench as G import qualified Unicode.Char.General.BlocksBench as B import qualified Unicode.Char.General.CompatBench as GC import qualified Unicode.Char.IdentifiersBench as I import qualified Unicode.Char.NormalizationBench as N import qualified Unicode.Char.NumericBench as Num import qualified Unicode.Char.Numeric.CompatBench as NumCompat main :: IO () main = do let customOpts = [Option (Proxy :: Proxy CharRange)] ingredients = includingOptions customOpts : benchIngredients defaultMainWithIngredients ingredients (askOption benchmarks) benchmarks :: CharRange -> TestTree benchmarks charRange = bgroup "All" [ C.benchmarks charRange , CC.benchmarks charRange , G.benchmarks charRange , B.benchmarks charRange , GC.benchmarks charRange , I.benchmarks charRange , N.benchmarks charRange , Num.benchmarks charRange , NumCompat.benchmarks charRange ] unicode-data-0.6.0/bench/Unicode/Char/0000755000000000000000000000000007346545000015565 5ustar0000000000000000unicode-data-0.6.0/bench/Unicode/Char/Bench.hs0000644000000000000000000002220107346545000017135 0ustar0000000000000000{-# LANGUAGE CPP #-} module Unicode.Char.Bench ( -- Range benchmark benchRange -- Char benchmark , Bench(..) , CharRange(..) , bgroupWithValidCharRange , bgroupWithValidCharRange' , bgroupWithCharRange , bgroupWithCharRange' , bgroupWithChars ) where import Control.DeepSeq (NFData (..), deepseq) import Control.Exception (evaluate, assert) import Data.Char (ord) import qualified Data.Char as Char import Foreign (Storable (..)) import qualified GHC.Exts as Exts import GHC.IO (IO (..)) import Test.Tasty.Bench (Benchmark, bcompare, bench, bgroup, env, nf) import Test.Tasty.Options ( IsOption (defaultValue, optionHelp, optionName, parseValue), ) #if MIN_VERSION_base(4,10,0) && !MIN_VERSION_base(4,15,0) import qualified GHC.Magic as Exts (noinline) #endif import qualified Unicode.Char.General as G import Data.Ix (Ix (..)) -------------------------------------------------------------------------------- -- Range benchmark -------------------------------------------------------------------------------- {-# INLINE benchRange #-} benchRange :: forall a b. (Bounded a, Ix a, NFData b) => String -> (a -> b) -> Benchmark benchRange t f = bench t (nf (fold_ f) (minBound, maxBound)) {-# INLINE fold_ #-} fold_ :: forall a b. (Ix a, NFData b) => (a -> b) -> (a, a) -> () fold_ f = foldr (deepseq . f) () . range -------------------------------------------------------------------------------- -- Char range -------------------------------------------------------------------------------- -- | Characters range data CharRange = CharRange !Char !Char -- | Characters range configurable from CLI instance IsOption CharRange where defaultValue = CharRange minBound maxBound parseValue = \case "ascii" -> Just (CharRange minBound '\x7f') "bmp" -> Just (CharRange minBound '\xffff') "planes0To3" -> Just (CharRange minBound '\x3FFFF') -- [TODO] handle errors s -> let (l, u) = break (== '-') s in Just (CharRange (Char.chr (read l)) (Char.chr (read (drop 1 u)))) optionName = pure "chars" optionHelp = pure "Range of chars to test" -------------------------------------------------------------------------------- -- Characters benchmark -------------------------------------------------------------------------------- -- | A unit benchmark data Bench a = Bench { _title :: !String -- ^ Name , _func :: !(Char -> a) -- ^ Function to benchmark } -- | Helper to compare benchmarks of function from this package to ones in base. {-# INLINE bgroupWithValidCharRange #-} bgroupWithValidCharRange :: String -> CharRange -> (Char -> Bool) -> (Chars -> [Benchmark]) -> Benchmark bgroupWithValidCharRange groupTitle charRange isValid mkBenches = -- Avoid side-effects with garbage collection (see tasty-bench doc for env). -- We use pinned ByteArray# instead of lists to avoid that GC kicks in. env (initialize isValid charRange >>= evaluate) (bgroup groupTitle . mkBenches) -- | Helper to compare benchmarks of function from this package to ones in base. -- Filter out Surrogates, Private Use Areas and unsassigned code points. {-# INLINE bgroupWithCharRange #-} bgroupWithCharRange :: String -> CharRange -> (Chars -> [Benchmark]) -> Benchmark bgroupWithCharRange title charRange = bgroupWithValidCharRange title charRange isValid where isValid c = G.generalCategory c < G.Surrogate -- | Variant of 'bgroupWithValidCharRange' {-# INLINE bgroupWithValidCharRange' #-} bgroupWithValidCharRange' :: (NFData a) => String -> CharRange -> (Char -> Bool) -> [Bench a] -> Benchmark bgroupWithValidCharRange' groupTitle charRange isValid bs = bgroupWithValidCharRange groupTitle charRange isValid $ \chars -> [ benchCharsRange groupTitle title chars f | Bench title f <- bs ] {-# INLINE benchCharsRange #-} benchCharsRange :: NFData a => String -> String -> Chars -> (Char -> a) -> Benchmark benchCharsRange groupTitle title chars = case title of "base" -> benchCharsNF title chars _ -> bcompare' "base" . benchCharsNF title chars where {-# INLINE bcompare' #-} -- [NOTE] Works if groupTitle uniquely identifies the benchmark group. bcompare' ref = bcompare (mconcat ["$NF == \"", ref, "\" && $(NF-1) == \"", groupTitle, "\""]) -- | Variant of 'bgroupWithCharRange' {-# INLINE bgroupWithCharRange' #-} bgroupWithCharRange' :: (NFData a) => String -> CharRange -> [Bench a] -> Benchmark bgroupWithCharRange' groupTitle charRange = bgroupWithValidCharRange' groupTitle charRange isValid where isValid c = G.generalCategory c < G.Surrogate -- | Helper to compare benchmarks of function from this package to ones in base. {-# INLINE bgroupWithChars #-} bgroupWithChars :: (NFData a) => String -> Chars -> [Bench a] -> Benchmark bgroupWithChars groupTitle chars bs = bgroup groupTitle [ benchCharsRange groupTitle title chars f | Bench title f <- bs ] -- | Helper to bench a char function on a filtered char range {-# INLINE benchCharsNF #-} benchCharsNF :: (NFData a) => String -> Chars -> (Char -> a) -> Benchmark benchCharsNF title chars f = bench title (nf (foldrChars f) chars) -------------------------------------------------------------------------------- -- Chars byte array -------------------------------------------------------------------------------- -- | Pinned array of characters data Chars = Chars !Exts.ByteArray# !Int instance NFData Chars where rnf (Chars !_ !_) = () -- | Fold over a chars byte array foldrChars :: NFData a => (Char -> a) -> Chars -> () foldrChars f = go where -- Loop over the pinned char array. The loop itself does not allocate. go (Chars cs len) = foldr (\(Exts.I# k) -> let c = Exts.indexWideCharArray# cs (k Exts.-# 1#) #if MIN_VERSION_base(4,10,0) -- `inline` is necessary to avoid excessive inlining, resulting -- in benchmarking empty loop iterations, i.e. not the function. -- We could use `inline` with more care at call site, but then we -- would have to test the functions one by one and everytime we -- modify them. Using it here is a hammer but more secure and -- maintainable. -- Note that we may improve this by controling the inlining for each -- phase. in deepseq (Exts.noinline f (Exts.C# c))) #else -- HACK: No `inline` for GHC < 8.2. Should we drop support? in deepseq (f (Exts.C# c))) #endif () [1..len] -- | Create a byte array of the chars to bench initialize :: (Char -> Bool) -> CharRange -> IO Chars initialize isValid charRange = IO $ \s1 -> case Exts.newPinnedByteArray# initialLength s1 of { (# s2, ma #) -> -- Write the filtered char range case writeChars isValid ma 0# s2 start end of { (# s3, filteredCount #) -> -- Duplicate to get enough chars to bench case tile ma 0# finalLength filteredLength s3 of { s4 -> case Exts.unsafeFreezeByteArray# ma s4 of { (# s5, a #) -> (# s5, Chars a (Exts.I# (replications Exts.*# filteredCount)) #) }} where -- Ensure to have enough chars replications = case Exts.quotInt# targetCharsCount filteredCount of 0# -> 1# r# -> r# filteredLength = filteredCount Exts.*# wcharSize finalLength = filteredLength Exts.*# replications }} where targetCharsCount = 0x10FFFF# !(CharRange start end) = assert (ord end - ord start + 1 < Exts.I# targetCharsCount) charRange !initialLength = targetCharsCount Exts.*# wcharSize !(Exts.I# wcharSize) = sizeOf 'x' -- | Write a range of chars that match the given predicate writeChars :: (Char -> Bool) -> Exts.MutableByteArray# d -> Exts.Int# -> Exts.State# d -> Char -> Char -> (# Exts.State# d, Exts.Int# #) writeChars isValid ma = go where go i s c1@(Exts.C# c1#) !c2 = if c1 < c2 then go i' s' (succ c1) c2 else (# s', i' #) where !(# s', i' #) = if isValid c1 then (# Exts.writeWideCharArray# ma i c1# s, i Exts.+# 1# #) else (# s, i #) -- | Duplicate a portion of an array -- -- Adapted from Data.Text.Array.tile tile :: -- | Mutable array Exts.MutableByteArray# s -> -- | Start of the portion to duplicate Exts.Int# -> -- | Total length of the duplicate Exts.Int# -> -- | Length of the portion to duplicate Exts.Int# -> Exts.State# s -> Exts.State# s tile dest destOff totalLen = go where go l s | Exts.isTrue# ((2# Exts.*# l) Exts.># totalLen) = Exts.copyMutableByteArray# dest destOff dest (destOff Exts.+# l) (totalLen Exts.-# l) s | otherwise = case Exts.copyMutableByteArray# dest destOff dest (destOff Exts.+# l) l s of s' -> go (2# Exts.*# l) s' unicode-data-0.6.0/bench/Unicode/Char/Case/0000755000000000000000000000000007346545000016440 5ustar0000000000000000unicode-data-0.6.0/bench/Unicode/Char/Case/CompatBench.hs0000644000000000000000000000207307346545000021161 0ustar0000000000000000module Unicode.Char.Case.CompatBench ( benchmarks ) where import qualified Data.Char as Char import Test.Tasty.Bench (Benchmark) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.Case.Compat as CC {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Case.Compat" r $ \chars -> [ bgroupWithChars "isLower" chars [ Bench "base" Char.isLower , Bench "unicode-data" CC.isLower ] , bgroupWithChars "isUpper" chars [ Bench "base" Char.isUpper , Bench "unicode-data" CC.isUpper ] , bgroupWithChars "toLower" chars [ Bench "base" Char.toLower , Bench "unicode-data" CC.toLower ] , bgroupWithChars "toTitle" chars [ Bench "base" Char.toTitle , Bench "unicode-data" CC.toTitle ] , bgroupWithChars "toUpper" chars [ Bench "base" Char.toUpper , Bench "unicode-data" CC.toUpper ] ] unicode-data-0.6.0/bench/Unicode/Char/CaseBench.hs0000644000000000000000000000255207346545000017740 0ustar0000000000000000{-# LANGUAGE CPP #-} module Unicode.Char.CaseBench ( benchmarks ) where import Test.Tasty.Bench (Benchmark) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.Case as C #if MIN_VERSION_base(4,18,0) import qualified Data.Char as Char #endif {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Case" r $ \chars -> [ #if MIN_VERSION_base(4,18,0) bgroupWithChars "isLowerCase" chars [ Bench "base" Char.isLowerCase , Bench "unicode-data" C.isLowerCase ] , bgroupWithChars "isUpperCase" chars [ Bench "base" Char.isUpperCase , Bench "unicode-data" C.isUpperCase ] #else bgroupWithChars "isLowerCase" chars [ Bench "unicode-data" C.isLowerCase ] , bgroupWithChars "isUpperCase" chars [ Bench "unicode-data" C.isUpperCase ] #endif , bgroupWithChars "toCaseFoldString" chars [ Bench "unicode-data" C.toCaseFoldString ] , bgroupWithChars "toLowerString" chars [ Bench "unicode-data" C.toLowerString ] , bgroupWithChars "toTitleString" chars [ Bench "unicode-data" C.toTitleString ] , bgroupWithChars "toUpperString" chars [ Bench "unicode-data" C.toUpperString ] ] unicode-data-0.6.0/bench/Unicode/Char/General/0000755000000000000000000000000007346545000017142 5ustar0000000000000000unicode-data-0.6.0/bench/Unicode/Char/General/BlocksBench.hs0000644000000000000000000000152307346545000021654 0ustar0000000000000000{-# LANGUAGE StandaloneDeriving #-} {-# OPTIONS_GHC -Wno-orphans #-} module Unicode.Char.General.BlocksBench ( benchmarks ) where import Control.DeepSeq (NFData (..)) import Test.Tasty.Bench (Benchmark, bgroup) import Unicode.Char.Bench ( Bench (..), CharRange (..), benchRange, bgroupWithCharRange', ) import qualified Unicode.Char.General.Blocks as B import GHC.Generics (Generic) -- FIXME derive Generic at datatype definition deriving instance Generic B.BlockDefinition instance NFData B.BlockDefinition {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroup "Unicode.Char.General.Blocks" [ bgroupWithCharRange' "block" r [ Bench "unicode-data" (fmap fromEnum . B.block) ] , bgroup "blockDefinition" [ benchRange "unicode-data" B.blockDefinition ] ] unicode-data-0.6.0/bench/Unicode/Char/General/CompatBench.hs0000644000000000000000000000172207346545000021663 0ustar0000000000000000module Unicode.Char.General.CompatBench ( benchmarks ) where import Test.Tasty.Bench ( Benchmark ) import qualified Data.Char as Char import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.General.Compat as GC {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.General.Compat" r $ \chars -> [ bgroupWithChars "isAlpha" chars [ Bench "base" Char.isAlpha , Bench "unicode-data" GC.isAlpha ] , bgroupWithChars "isAlphaNum" chars [ Bench "base" Char.isAlphaNum , Bench "unicode-data" GC.isAlphaNum ] , bgroupWithChars "isLetter" chars [ Bench "base" Char.isLetter , Bench "unicode-data" GC.isLetter ] , bgroupWithChars "isSpace" chars [ Bench "base" Char.isSpace , Bench "unicode-data" GC.isSpace ] ] unicode-data-0.6.0/bench/Unicode/Char/GeneralBench.hs0000644000000000000000000000433007346545000020436 0ustar0000000000000000module Unicode.Char.GeneralBench ( benchmarks ) where import qualified Data.Char as Char import Test.Tasty.Bench (Benchmark) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.General as G {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.General" r $ \chars -> -- Character classification [ bgroupWithChars "generalCategory" chars -- We use `fromEnum` because of incompatible GeneralCategory types [ Bench "base" (fromEnum . Char.generalCategory) , Bench "unicode-data" (fromEnum . G.generalCategory) ] , bgroupWithChars "isAlphabetic" chars [ Bench "unicode-data" G.isAlphabetic ] , bgroupWithChars "isControl" chars [ Bench "base" Char.isControl , Bench "unicode-data" G.isControl ] , bgroupWithChars "isMark" chars [ Bench "base" Char.isMark , Bench "unicode-data" G.isMark ] , bgroupWithChars "isPrint" chars [ Bench "base" Char.isPrint , Bench "unicode-data" G.isPrint ] , bgroupWithChars "isPunctuation" chars [ Bench "base" Char.isPunctuation , Bench "unicode-data" G.isPunctuation ] , bgroupWithChars "isSeparator" chars [ Bench "base" Char.isSeparator , Bench "unicode-data" G.isSeparator ] , bgroupWithChars "isSymbol" chars [ Bench "base" Char.isSymbol , Bench "unicode-data" G.isSymbol ] , bgroupWithChars "isWhiteSpace" chars [ Bench "unicode-data" G.isWhiteSpace ] -- Korean Hangul Characters , bgroupWithChars "isHangul" chars [ Bench "unicode-data" G.isHangul ] , bgroupWithChars "isHangulLV" chars [ Bench "unicode-data" G.isHangul ] , bgroupWithChars "isJamo" chars [ Bench "unicode-data" G.isJamo ] , bgroupWithChars "jamoLIndex" chars [ Bench "unicode-data" G.jamoLIndex ] , bgroupWithChars "jamoVIndex" chars [ Bench "unicode-data" G.jamoVIndex ] , bgroupWithChars "jamoTIndex" chars [ Bench "unicode-data" G.jamoTIndex ] ] unicode-data-0.6.0/bench/Unicode/Char/IdentifiersBench.hs0000644000000000000000000000173507346545000021334 0ustar0000000000000000module Unicode.Char.IdentifiersBench ( benchmarks ) where import Test.Tasty.Bench (Benchmark) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.Identifiers as I {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Identifiers" r $ \chars -> [ bgroupWithChars "isIDContinue" chars [ Bench "unicode-data" I.isIDContinue ] , bgroupWithChars "isIDStart" chars [ Bench "unicode-data" I.isIDStart ] , bgroupWithChars "isXIDContinue" chars [ Bench "unicode-data" I.isXIDContinue ] , bgroupWithChars "isXIDStart" chars [ Bench "unicode-data" I.isXIDStart ] , bgroupWithChars "isPatternSyntax" chars [ Bench "unicode-data" I.isPatternSyntax ] , bgroupWithChars "isPatternWhitespace" chars [ Bench "unicode-data" I.isPatternWhitespace ] ] unicode-data-0.6.0/bench/Unicode/Char/NormalizationBench.hs0000644000000000000000000000331007346545000021704 0ustar0000000000000000module Unicode.Char.NormalizationBench ( benchmarks ) where import Test.Tasty.Bench ( bgroup, Benchmark ) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, bgroupWithValidCharRange', ) import qualified Unicode.Char.General as G import qualified Unicode.Char.Normalization as N {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Normalization" r $ \chars -> [ bgroupWithChars "isCombining" chars [ Bench "unicode-data" N.isCombining ] , bgroupWithChars "combiningClass" chars [ Bench "unicode-data" N.combiningClass ] , bgroupWithChars "isCombiningStarter" chars [ Bench "unicode-data" N.isCombiningStarter ] -- [TODO] compose, composeStarters , bgroup "isDecomposable" [ bgroupWithChars "Canonical" chars [ Bench "unicode-data" (N.isDecomposable N.Canonical) ] , bgroupWithChars "Kompat" chars [ Bench "unicode-data" (N.isDecomposable N.Kompat) ] ] , bgroup "decompose" [ bgroupWithValidCharRange' "Canonical" r (isValid N.Canonical) [ Bench "unicode-data" (N.decompose N.Canonical) ] , bgroupWithValidCharRange' "Kompat" r (isValid N.Kompat) [ Bench "unicode-data" (N.decompose N.Kompat) ] ] , bgroupWithChars "decomposeHangul" chars [ Bench "unicode-data" N.decomposeHangul ] ] -- Filter out: Surrogates, Private Use Areas and unsassigned code points -- and non-decomposable characters isValid :: N.DecomposeMode -> Char -> Bool isValid mode c = G.generalCategory c < G.Surrogate && N.isDecomposable mode c unicode-data-0.6.0/bench/Unicode/Char/Numeric/0000755000000000000000000000000007346545000017167 5ustar0000000000000000unicode-data-0.6.0/bench/Unicode/Char/Numeric/CompatBench.hs0000644000000000000000000000113507346545000021706 0ustar0000000000000000module Unicode.Char.Numeric.CompatBench ( benchmarks ) where import Test.Tasty.Bench ( Benchmark ) import qualified Data.Char as Char import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.Numeric.Compat as NumCompat {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Numeric.Compat" r $ \chars -> [ bgroupWithChars "isNumber" chars [ Bench "base" Char.isNumber , Bench "unicode-data" NumCompat.isNumber ] ] unicode-data-0.6.0/bench/Unicode/Char/NumericBench.hs0000644000000000000000000000211007346545000020455 0ustar0000000000000000module Unicode.Char.NumericBench ( benchmarks ) where import Data.Int (Int64) import Test.Tasty.Bench (Benchmark, bgroup) import Unicode.Char.Bench ( Bench (..), CharRange, bgroupWithCharRange, bgroupWithChars, ) import qualified Unicode.Char.Numeric as Num {-# NOINLINE benchmarks #-} benchmarks :: CharRange -> Benchmark benchmarks r = bgroupWithCharRange "Unicode.Char.Numeric" r $ \chars -> -- [TODO] Replace with 'isNumber' once the migration is done. [ bgroupWithChars "isNumeric" chars [ Bench "unicode-data" Num.isNumeric ] , bgroupWithChars "numericValue" chars [ Bench "unicode-data" Num.numericValue ] , bgroup "integerValue" [ bgroupWithChars "Integer" chars [ Bench "unicode-data" (Num.integerValue :: Char -> Maybe Integer) ] , bgroupWithChars "Int64" chars [ Bench "unicode-data" (Num.integerValue :: Char -> Maybe Int64) ] , bgroupWithChars "Int" chars [ Bench "unicode-data" (Num.integerValue :: Char -> Maybe Int) ] ] ] unicode-data-0.6.0/lib/Unicode/0000755000000000000000000000000007346545000014377 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Char.hs0000644000000000000000000000516707346545000015621 0ustar0000000000000000-- | -- Module : Unicode.Char -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- This module provides APIs to access the Unicode character database (UCD) -- corresponding to [Unicode Standard version -- 15.1.0](https://www.unicode.org/versions/Unicode15.1.0/). -- -- This module re-exports several sub-modules under it. The sub-module -- structure under `Unicode.Char` is largely based on the -- ["Property Index by Scope of Use" in Unicode® Standard Annex #44](https://www.unicode.org/reports/tr44/#Property_Index_Table). -- -- The @Unicode.Char.*@ modules in turn depend on @Unicode.Internal.Char.*@ -- modules which are programmatically generated from the Unicode standard's -- Unicode character database files. The module structure under -- @Unicode.Internal.Char@ is largely based on the UCD text file names from -- which the properties are generated. -- -- For the original UCD files used in this code please refer to the @UCD@ -- section on the Unicode standard page. See -- https://www.unicode.org/reports/tr44/ to understand the contents and the -- format of the unicode database files. -- module Unicode.Char ( unicodeVersion , module Unicode.Char.General , module Unicode.Char.General.Compat , module Unicode.Char.Case , module Unicode.Char.Case.Compat , module Unicode.Char.Numeric , module Unicode.Char.Normalization , module Unicode.Char.Identifiers -- * Utils , showCodePoint -- * Re-export from @base@ , ord , chr ) where import Data.Char (chr, ord) import Unicode.Char.Case hiding (Unfold(..), Step(..)) import Unicode.Char.Case.Compat import Unicode.Char.General hiding (isAlphaNum) import Unicode.Char.General.Compat import Unicode.Char.Identifiers import Unicode.Char.Numeric import Unicode.Char.Normalization import Unicode.Internal.Char.Version (unicodeVersion) -- [NOTE] Code inspired from 'showIntAtBase' -- | Show the code point of a character using the Unicode Standard convention: -- hexadecimal codepoint padded with zeros if inferior to 4 characters. -- -- >>> showCodePoint '\xf' "" -- "000F" -- >>> showCodePoint '\x1ffff' "" -- "1FFFF" -- -- @since 0.6.0 showCodePoint :: Char -> ShowS showCodePoint c = pad . showIt (quotRem cp 16) where cp = ord c pad | cp <= 0x00f = \s -> '0' : '0' : '0' : s | cp <= 0x0ff = \s -> '0' : '0' : s | cp <= 0xfff = ('0' :) | otherwise = id showIt (n, d) r = case intToDigiT d of !c' -> case n of 0 -> c' : r _ -> showIt (quotRem n 16) (c' : r) unicode-data-0.6.0/lib/Unicode/Char/0000755000000000000000000000000007346545000015254 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Char/Case.hs0000644000000000000000000001651707346545000016475 0ustar0000000000000000-- | -- Module : Unicode.Char.Case -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Case and case mapping related functions. -- -- This module provides /full/ predicates and mappings that are /not/ compatible -- with those in "Data.Char", which rely on simple properties. -- See "Unicode.Char.Case.Compat" for a drop-in replacement of the functions in -- "Data.Char". -- module Unicode.Char.Case ( -- * Predicates isLowerCase , isUpperCase -- * Case mappings -- $case -- ** Case folding mapping , caseFoldMapping , toCaseFoldString -- ** Lower case mapping , lowerCaseMapping , toLowerString -- ** Title case mapping , titleCaseMapping , toTitleString -- ** Upper case mapping , upperCaseMapping , toUpperString -- ** Unfold , Unfold(..) , Step(..) ) where import Data.Bits (Bits(..)) import Data.Int (Int64) import GHC.Base (unsafeChr) import Unicode.Internal.Unfold import qualified Unicode.Internal.Char.CaseFolding as C import qualified Unicode.Internal.Char.DerivedCoreProperties as P import qualified Unicode.Internal.Char.SpecialCasing.LowerCaseMapping as C import qualified Unicode.Internal.Char.SpecialCasing.TitleCaseMapping as C import qualified Unicode.Internal.Char.SpecialCasing.UpperCaseMapping as C -- | Returns 'True' for lower-case characters. -- -- It uses the character property -- . -- -- See: 'Unicode.Char.Case.Compat.isLower' for the legacy predicate. -- -- @since 0.3.0 {-# INLINE isLowerCase #-} isLowerCase :: Char -> Bool isLowerCase = P.isLowercase -- | Returns 'True' for upper-case characters. -- -- It uses the character property -- . -- -- Note: it does /not/ match title-cased letters. Those are matched using: -- @'Unicode.Char.General.generalCategory' c == -- 'Unicode.Char.General.TitlecaseLetter'@. -- -- See: 'Unicode.Char.Case.Compat.isUpper' for the legacy predicate. -- -- @since 0.3.0 {-# INLINE isUpperCase #-} isUpperCase :: Char -> Bool isUpperCase = P.isUppercase -- $case -- -- Correct case conversion rules may map one input character to two or three -- output characters. For examples, see the documentation of 'toCaseFoldString', -- 'toLowerString', 'toTitleString' and 'toUpperString'. -- -- __Note:__ In some languages, case conversion is a locale- and -- context-dependent operation. The case conversion functions in this -- module are /not/ locale nor context sensitive. -- | Returns the full /folded/ case mapping of a character if the character is -- changed, else nothing. -- -- It uses the character property @Case_Folding@. -- -- @since 0.3.1 {-# INLINE caseFoldMapping #-} caseFoldMapping :: Unfold Char Char caseFoldMapping = Unfold step inject where inject = step . C.toCasefold -- | Returns the full /lower/ case mapping of a character if the character is -- changed, else nothing. -- -- It uses the character property @Lowercase_Mapping@. -- -- @since 0.3.1 {-# INLINE lowerCaseMapping #-} lowerCaseMapping :: Unfold Char Char lowerCaseMapping = Unfold step inject where inject = step . C.toSpecialLowerCase -- | Returns the full /title/ case mapping of a character if the character is -- changed, else nothing. -- -- It uses the character property @Titlecase_Mapping@. -- -- @since 0.3.1 {-# INLINE titleCaseMapping #-} titleCaseMapping :: Unfold Char Char titleCaseMapping = Unfold step inject where inject = step . C.toSpecialTitleCase -- | Returns the full /upper/ case mapping of a character if the character is -- changed, else nothing. -- -- It uses the character property @Uppercase_Mapping@. -- -- @since 0.3.1 {-# INLINE upperCaseMapping #-} upperCaseMapping :: Unfold Char Char upperCaseMapping = Unfold step inject where inject = step . C.toSpecialUpperCase -- | Convert a character to full /folded/ case if defined, else to itself. -- -- This function is mainly useful for performing caseless (also known -- as case insensitive) string comparisons. -- -- A string @x@ is a caseless match for a string @y@ if and only if: -- -- @foldMap toCaseFoldString x == foldMap toCaseFoldString y@ -- -- The result string may have more than one character, and may -- differ from applying 'toLowerString' to the input string. For instance, -- “ﬓ” (@U+FB13@ Armenian small ligature men now) is case -- folded to the sequence “մ” (@U+0574@ Armenian small letter men) -- followed by “ն” (@U+0576@ Armenian small letter now), while -- “µ” (@U+00B5@ micro sign) is case folded to -- “μ” (@U+03BC@ Greek small letter mu) instead of itself. -- -- It uses the character property @Case_Folding@. -- -- prop> toCaseFoldString c == foldMap toCaseFoldString (toCaseFoldString c) -- -- @since 0.3.1 {-# INLINE toCaseFoldString #-} toCaseFoldString :: Char -> String toCaseFoldString = toList caseFoldMapping -- | Convert a character to full /lower/ case if defined, else to itself. -- -- The result string may have more than one character. For instance, -- “İ” (@U+0130@ Latin capital letter I with dot above) maps -- to the sequence: “i” (@U+0069@ Latin small letter I) -- followed by “ ̇” (@U+0307@ combining dot above). -- -- It uses the character property @Lowercase_Mapping@. -- -- See: 'Unicode.Char.Case.Compat.toLower' for /simple/ lower case conversion. -- -- prop> toLowerString c == foldMap toLowerString (toLowerString c) -- -- @since 0.3.1 {-# INLINE toLowerString #-} toLowerString :: Char -> String toLowerString = toList lowerCaseMapping -- | Convert a character to full /title/ case if defined, else to itself. -- -- The result string may have more than one character. For instance, -- “fl” (@U+FB02@ Latin small ligature FL) is converted to the -- sequence: “F” (@U+0046@ Latin capital letter F) followed by -- “l” (@U+006C@ Latin small letter L). -- -- It uses the character property @Titlecase_Mapping@. -- -- See: 'Unicode.Char.Case.Compat.toTitle' for /simple/ title case conversion. -- -- @since 0.3.1 {-# INLINE toTitleString #-} toTitleString :: Char -> String toTitleString = toList titleCaseMapping -- | Convert a character to full /upper/ case if defined, else to itself. -- -- The result string may have more than one character. For instance, -- the German “ß” (@U+00DF@ Eszett) maps to the -- two-letter sequence “SS”. -- -- It uses the character property @Uppercase_Mapping@. -- -- See: 'Unicode.Char.Case.Compat.toUpper' for /simple/ upper case conversion. -- -- prop> toUpperString c == foldMap toUpperString (toUpperString c) -- -- @since 0.3.1 {-# INLINE toUpperString #-} toUpperString :: Char -> String toUpperString = toList upperCaseMapping -- | Extract the next character from a raw mapping. -- Each character is encoded on 21 bits. {-# INLINE step #-} step :: Int64 -> Step Int64 Char step = \case 0 -> Stop s -> Yield (unsafeChr cp) (s `shiftR` 21) where -- Mask for a single Unicode code point: (1 << 21) - 1 mask = 0x1fffff -- [NOTE] As of GHC 9.4, Int64 is represented internally by Int64#, -- so the previous code `fromIntegral s .&. mask` leads to -- unefficient generated code. cp = fromIntegral s .&. mask unicode-data-0.6.0/lib/Unicode/Char/Case/0000755000000000000000000000000007346545000016127 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Char/Case/Compat.hs0000644000000000000000000000757207346545000017721 0ustar0000000000000000-- | -- Module : Unicode.Char.Case.Compat -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Compatibility module for case and case mapping related functions. -- -- The functions of this module are drop-in replacement for those in "Data.Char". -- They are similar but not identical to some functions in "Unicode.Char.Case", -- therefore they are placed in a separate module in order to avoid ambiguity. -- module Unicode.Char.Case.Compat ( -- * Predicates isUpper , isLower -- * Case conversion , toUpper , toLower , toTitle ) where import Data.Char (ord) import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC import qualified Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping as C import qualified Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping as C import qualified Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping as C -- | Selects upper-case or title-case alphabetic Unicode characters (letters). -- Title case is used by a small number of letter ligatures like the -- single-character form of /Lj/. -- -- It matches characters with general category -- 'Unicode.Char.General.UppercaseLetter' and -- 'Unicode.Char.General.TitlecaseLetter'. -- -- See: 'Unicode.Char.Case.isUpperCase' for the /full upper/ case predicate. -- -- prop> isUpper c == Data.Char.isUpper c -- -- @since 0.3.0 isUpper :: Char -> Bool isUpper c = -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. cp <= UC.MaxIsUpper && case UC.generalCategoryPlanes0To3 cp of UC.UppercaseLetter -> True UC.TitlecaseLetter -> True _ -> False where !cp = ord c -- | Selects lower-case alphabetic Unicode characters (letters). -- -- It matches characters with general category 'Unicode.Char.Case.LowercaseLetter'. -- -- See: 'Unicode.Char.Case.isLowerCase' for the /full/ lower case predicate. -- -- prop> isLower c == Data.Char.isLower c -- -- @since 0.3.0 isLower :: Char -> Bool isLower c = -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. cp <= UC.MaxIsLower && case UC.generalCategoryPlanes0To3 cp of UC.LowercaseLetter -> True _ -> False where !cp = ord c -- | Convert a letter to the corresponding upper-case letter, if any. -- Any other character is returned unchanged. -- -- It uses the character property @Simple_Uppercase_Mapping@. -- -- See: 'Unicode.Char.Case.upperCaseMapping' and -- 'Unicode.Char.Case.toUpperString' for /full/ upper case conversion. -- -- prop> toUpper c == Data.Char.toUpper c -- -- @since 0.3.0 {-# INLINE toUpper #-} toUpper :: Char -> Char toUpper = C.toSimpleUpperCase -- | Convert a letter to the corresponding lower-case letter, if any. -- Any other character is returned unchanged. -- -- It uses the character property @Simple_Lowercase_Mapping@. -- -- See: 'Unicode.Char.Case.lowerCaseMapping' and -- 'Unicode.Char.Case.toLowerString' for /full/ lower case conversion. -- -- prop> toLower c == Data.Char.toLower c -- -- @since 0.3.0 {-# INLINE toLower #-} toLower :: Char -> Char toLower = C.toSimpleLowerCase -- | Convert a letter to the corresponding title-case or upper-case letter, -- if any. (Title case differs from upper case only for a small number of -- ligature letters.) Any other character is returned unchanged. -- -- It uses the character property @Simple_Titlecase_Mapping@. -- -- See: 'Unicode.Char.Case.titleCaseMapping' and -- 'Unicode.Char.Case.toTitleString' for /full/ title case conversion. -- -- prop> toTitle c == Data.Char.toTitle c -- -- @since 0.3.0 {-# INLINE toTitle #-} toTitle :: Char -> Char toTitle = C.toSimpleTitleCase unicode-data-0.6.0/lib/Unicode/Char/General.hs0000644000000000000000000005235307346545000017175 0ustar0000000000000000-- | -- Module : Unicode.Char.General -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- General character property related functions. -- module Unicode.Char.General ( -- * Types of Code Points CodePointType(..) , codePointType -- * Unicode general categories , GeneralCategory(..) , generalCategoryAbbr , generalCategory -- * Character classification , isAlphabetic , isAlphaNum , isControl , isMark , isPrint , isPunctuation , isSeparator , isSymbol , isWhiteSpace , isNoncharacter -- ** Re-export , isAscii , isLatin1 , isAsciiUpper , isAsciiLower -- * Korean Hangul Characters -- | The Hangul script used in the Korean writing system consists of -- individual consonant and vowel letters (jamo) that are visually combined -- into square display cells to form entire syllable blocks. Hangul -- syllables may be encoded directly as precomposed combinations of -- individual jamo or as decomposed sequences of conjoining jamo. Modern -- Hangul syllable blocks can be expressed with either two or three jamo, -- either in the form consonant + vowel or in the form consonant + -- vowel + consonant. The leading consonant is represented as L, the vowel -- as V and the trailing consonant as T. -- -- The Unicode Standard contains both a large set of precomposed modern -- Hangul syllables and a set of conjoining Hangul jamo, which can be used -- to encode archaic Korean syllable blocks as well as modern Korean -- syllable blocks. -- -- Hangul characters can be composed or decomposed algorithmically instead -- of via mappings. These APIs are used mainly for Unicode normalization -- of Hangul text. -- -- Please refer to the following resources for more information: -- -- * The @Hangul@ section of the @East Asia@ chapter of the [Unicode Standard](https://www.unicode.org/versions/latest) -- * Conformance chapter of the [Unicode Standard](https://www.unicode.org/versions/latest) -- * [Unicode® Standard Annex #15 - Unicode Normalization Forms](https://www.unicode.org/reports/tr15) -- * UCD file @HangulSyllableType.txt@ -- * https://en.wikipedia.org/wiki/Hangul_Jamo_(Unicode_block) -- * https://en.wikipedia.org/wiki/List_of_Hangul_jamo -- ** Conjoining Jamo -- | Jamo L, V and T letters. , isJamo , jamoNCount -- *** Jamo Leading (L) , jamoLFirst , jamoLCount , jamoLIndex , jamoLLast -- *** Jamo Vowel (V) , jamoVFirst , jamoVCount , jamoVIndex , jamoVLast -- *** Jamo Trailing (T) , jamoTFirst , jamoTCount , jamoTIndex , jamoTLast -- ** Hangul Syllables -- | Precomposed Hangul syllables. , hangulFirst , hangulLast , isHangul , isHangulLV ) where import Control.Exception (assert) import Data.Bits ((.&.)) import Data.Char (isAscii, isLatin1, isAsciiUpper, isAsciiLower, ord) import Data.Ix (Ix) import qualified Unicode.Char.General.Compat as Compat import qualified Unicode.Internal.Char.DerivedCoreProperties as P import qualified Unicode.Internal.Char.PropList as P import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC import Unicode.Internal.Division (quotRem28) -------------------------------------------------------------------------------- -- General Category -------------------------------------------------------------------------------- {-| Unicode General Categories. These classes are defined in the [Unicode Character Database](http://www.unicode.org/reports/tr44/tr44-14.html#GC_Values_Table), part of the Unicode standard. __Note:__ the classes must be in the same order they are listed in the Unicode Standard, because some functions (e.g. 'generalCategory') rely on the 'Enum' instance. @since 0.3.0 -} data GeneralCategory -- L: Letter = UppercaseLetter -- ^ @Lu@: Letter, Uppercase | LowercaseLetter -- ^ @Ll@: Letter, Lowercase | TitlecaseLetter -- ^ @Lt@: Letter, Titlecase | ModifierLetter -- ^ @Lm@: Letter, Modifier | OtherLetter -- ^ @Lo@: Letter, Other -- M: Mark | NonSpacingMark -- ^ @Mn@: Mark, Non-Spacing | SpacingCombiningMark -- ^ @Mc@: Mark, Spacing Combining | EnclosingMark -- ^ @Me@: Mark, Enclosing -- N: Number | DecimalNumber -- ^ @Nd@: Number, Decimal | LetterNumber -- ^ @Nl@: Number, Letter | OtherNumber -- ^ @No@: Number, Other -- P: Punctuation | ConnectorPunctuation -- ^ @Pc@: Punctuation, Connector | DashPunctuation -- ^ @Pd@: Punctuation, Dash | OpenPunctuation -- ^ @Ps@: Punctuation, Open | ClosePunctuation -- ^ @Pe@: Punctuation, Close | InitialQuote -- ^ @Pi@: Punctuation, Initial quote | FinalQuote -- ^ @Pf@: Punctuation, Final quote | OtherPunctuation -- ^ @Po@: Punctuation, Other -- S: Symbol | MathSymbol -- ^ @Sm@: Symbol, Math | CurrencySymbol -- ^ @Sc@: Symbol, Currency | ModifierSymbol -- ^ @Sk@: Symbol, Modifier | OtherSymbol -- ^ @So@: Symbol, Other -- Z: Separator | Space -- ^ @Zs@: Separator, Space | LineSeparator -- ^ @Zl@: Separator, Line | ParagraphSeparator -- ^ @Zp@: Separator, Paragraph -- C: Other | Control -- ^ @Cc@: Other, Control | Format -- ^ @Cf@: Other, Format | Surrogate -- ^ @Cs@: Other, Surrogate | PrivateUse -- ^ @Co@: Other, Private Use | NotAssigned -- ^ @Cn@: Other, Not Assigned deriving ( Show , Eq , Ord , Enum , Bounded , Ix ) -- | Abbreviation of 'GeneralCategory' used in the Unicode standard. -- -- @since 0.3.0 generalCategoryAbbr :: GeneralCategory -> String generalCategoryAbbr = \case UppercaseLetter -> "Lu" LowercaseLetter -> "Ll" TitlecaseLetter -> "Lt" ModifierLetter -> "Lm" OtherLetter -> "Lo" NonSpacingMark -> "Mn" SpacingCombiningMark -> "Mc" EnclosingMark -> "Me" DecimalNumber -> "Nd" LetterNumber -> "Nl" OtherNumber -> "No" ConnectorPunctuation -> "Pc" DashPunctuation -> "Pd" OpenPunctuation -> "Ps" ClosePunctuation -> "Pe" InitialQuote -> "Pi" FinalQuote -> "Pf" OtherPunctuation -> "Po" MathSymbol -> "Sm" CurrencySymbol -> "Sc" ModifierSymbol -> "Sk" OtherSymbol -> "So" Space -> "Zs" LineSeparator -> "Zl" ParagraphSeparator -> "Zp" Control -> "Cc" Format -> "Cf" Surrogate -> "Cs" PrivateUse -> "Co" NotAssigned -> "Cn" {-| The Unicode general category of the character. This property is defined in the column 2 of the @UnicodeData@ table. This relies on the 'Enum' instance of 'GeneralCategory', which must remain in the same order as the categories are presented in the Unicode standard. prop> show (generalCategory c) == show (Data.Char.generalCategory c) @since 0.3.0 -} {-# INLINE generalCategory #-} generalCategory :: Char -> GeneralCategory generalCategory = toEnum . UC.generalCategory -------------------------------------------------------------------------------- -- Types of Code Points -------------------------------------------------------------------------------- -- | Types of Code Points. -- -- These classes are defined in the section -- [2.4 “Code Points and Characters”](https://www.unicode.org/versions/Unicode15.0.0/ch02.pdf#G14527) -- of the Unicode standard. -- -- @since 0.4.1 data CodePointType = GraphicType -- ^ __Graphic__: defined by the following general categories: -- -- * Letters (L): 'UppercaseLetter', 'LowercaseLetter', 'TitlecaseLetter', -- 'ModifierLetter', 'OtherLetter'. -- * Marks (M): 'NonSpacingMark', 'SpacingCombiningMark', 'EnclosingMark'. -- * Numbers (N): 'DecimalNumber', 'LetterNumber', 'OtherNumber'. -- * Punctuation (P): 'ConnectorPunctuation', 'DashPunctuation', -- 'OpenPunctuation', 'ClosePunctuation', 'InitialQuote', 'FinalQuote', -- 'OtherPunctuation'. -- * Symbol (S): 'MathSymbol', 'CurrencySymbol', 'ModifierSymbol', -- 'OtherSymbol'. -- * Separators: 'Space'. | FormatType -- ^ __Format__: invisible but affects neighboring characters. -- -- Defined by the following general categories: -- 'LineSeparator', 'ParagraphSeparator', 'Format'. | ControlType -- ^ __Control__: usage defined by protocols or standards outside the -- Unicode Standard. -- -- Defined by the general category 'Control'. | PrivateUseType -- ^ __Private-use__: usage defined by private agreement outside the -- Unicode Standard. -- -- Defined by the general category 'PrivateUse'. | SurrogateType -- ^ __Surrogate__: Permanently reserved for UTF-16. -- -- Defined by the general category 'Surrogate'. | NoncharacterType -- ^ __Noncharacter:__ a code point that is permanently reserved for -- internal use (see definition D14 in the section -- [3.4 “Characters and Encoding”](https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf#G2212) -- of the Unicode Standard). -- Noncharacters consist of the values @U+nFFFE@ and @U+nFFFF@ (where @n@ -- is from 0 to 10₁₆) and the values @U+FDD0..U+FDEF@. -- -- They are a subset of the general category 'NotAssigned'. | ReservedType -- ^ __Reserved:__ any code point of the Unicode Standard that is reserved -- for future assignment (see definition D15 in the section -- [3.4 “Characters and Encoding”](https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf#G2212) -- of the Unicode Standard). Also known as an unassigned code point. -- -- They are a subset of the general category 'NotAssigned'. deriving ( Show , Eq , Ord , Enum , Bounded , Ix ) -- | Returns the 'CodePointType' of a character. -- -- @since 0.6.0 codePointType :: Char -> CodePointType codePointType c = case generalCategory c of UppercaseLetter -> GraphicType LowercaseLetter -> GraphicType TitlecaseLetter -> GraphicType ModifierLetter -> GraphicType OtherLetter -> GraphicType NonSpacingMark -> GraphicType SpacingCombiningMark -> GraphicType EnclosingMark -> GraphicType DecimalNumber -> GraphicType LetterNumber -> GraphicType OtherNumber -> GraphicType ConnectorPunctuation -> GraphicType DashPunctuation -> GraphicType OpenPunctuation -> GraphicType ClosePunctuation -> GraphicType InitialQuote -> GraphicType FinalQuote -> GraphicType OtherPunctuation -> GraphicType MathSymbol -> GraphicType CurrencySymbol -> GraphicType ModifierSymbol -> GraphicType OtherSymbol -> GraphicType Space -> GraphicType LineSeparator -> FormatType ParagraphSeparator -> FormatType Control -> ControlType Format -> FormatType Surrogate -> SurrogateType PrivateUse -> PrivateUseType NotAssigned | isNoncharacter c -> NoncharacterType | otherwise -> ReservedType -------------------------------------------------------------------------------- -- Predicates -------------------------------------------------------------------------------- {-| Returns 'True' for alphabetic Unicode characters (lower-case, upper-case and title-case letters, plus letters of caseless scripts and modifiers letters). __Note:__ this function is /not/ equivalent to 'Unicode.Char.General.Compat.isAlpha' / 'Unicode.Char.General.Compat.isLetter': * 'Unicode.Char.General.Compat.isAlpha' matches the following general categories: * 'UppercaseLetter' (@Lu@) * 'LowercaseLetter' (@Ll@) * 'TitlecaseLetter' (@Lt@) * 'ModifierLetter' (@Lm@) * 'OtherLetter' (@Lo@) * whereas 'isAlphabetic' matches: * @Uppercase@ [property](https://www.unicode.org/reports/tr44/#Uppercase) * @Lowercase@ [property](https://www.unicode.org/reports/tr44/#Lowercase) * 'TitlecaseLetter' (@Lt@) * 'ModifierLetter' (@Lm@) * 'OtherLetter' (@Lo@) * 'LetterNumber' (@Nl@) * @Other_Alphabetic@ [property](https://www.unicode.org/reports/tr44/#Other_Alphabetic) @since 0.3.0 -} {-# INLINE isAlphabetic #-} isAlphabetic :: Char -> Bool isAlphabetic = P.isAlphabetic {-| Selects alphabetic or numeric Unicode characters. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'UppercaseLetter' * 'LowercaseLetter' * 'TitlecaseLetter' * 'ModifierLetter' * 'OtherLetter' * 'DecimalNumber' * 'LetterNumber' * 'OtherNumber' prop> isAlphaNum c == Data.Char.isAlphaNum c __Note:__ this function is incompatible with 'isAlphabetic': >>> isAlphabetic '\x345' True >>> isAlphaNum '\x345' False @since 0.3.0 -} {-# INLINE isAlphaNum #-} {-# DEPRECATED isAlphaNum "Use Unicode.Char.General.Compat.isAlphaNum instead." #-} isAlphaNum :: Char -> Bool isAlphaNum = Compat.isAlphaNum {-| Selects control characters, which are the non-printing characters of the Latin-1 subset of Unicode. This function returns 'True' if its argument has the 'GeneralCategory' 'Control'. prop> isControl c == Data.Char.isControl c @since 0.3.0 -} isControl :: Char -> Bool -- By definition (https://www.unicode.org/reports/tr44/#General_Category_Values) -- “a C0 or C1 control code”, i.e. the 0x00-0x1f, 0x7f, and 0x80-0x9f. isControl c = cp <= 0x9F && UC.generalCategoryPlanes0To3 cp == UC.Control where cp = ord c {-| Selects Unicode mark characters, for example accents and the like, which combine with preceding characters. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'NonSpacingMark' * 'SpacingCombiningMark' * 'EnclosingMark' prop> isMark c == Data.Char.isMark c @since 0.3.0 -} isMark :: Char -> Bool isMark c = UC.NonSpacingMark <= gc && gc <= UC.EnclosingMark where gc = UC.generalCategory c {-| Selects printable Unicode characters (letters, numbers, marks, punctuation, symbols and spaces). This function returns 'False' if its argument has one of the following 'GeneralCategory's, or 'True' otherwise: * 'LineSeparator' * 'ParagraphSeparator' * 'Control' * 'Format' * 'Surrogate' * 'PrivateUse' * 'NotAssigned' prop> isPrint c == Data.Char.isPrint c @since 0.3.0 -} isPrint :: Char -> Bool isPrint c = UC.generalCategory c < UC.LineSeparator {-| Selects Unicode punctuation characters, including various kinds of connectors, brackets and quotes. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'ConnectorPunctuation' * 'DashPunctuation' * 'OpenPunctuation' * 'ClosePunctuation' * 'InitialQuote' * 'FinalQuote' * 'OtherPunctuation' prop> isPunctuation c == Data.Char.isPunctuation c @since 0.3.0 -} isPunctuation :: Char -> Bool isPunctuation c = UC.ConnectorPunctuation <= gc && gc <= UC.OtherPunctuation where gc = UC.generalCategory c {- | Returns 'True' for any whitespace characters, and the control characters @\\t@, @\\n@, @\\r@, @\\f@, @\\v@. See: [Unicode @White_Space@](https://www.unicode.org/reports/tr44/#White_Space). __Note:__ 'isWhiteSpace' is /not/ equivalent to 'Unicode.Char.General.Compat.isSpace'. 'isWhiteSpace' selects the same characters from 'isSpace' plus the following: * @U+0085@ NEXT LINE (NEL) * @U+2028@ LINE SEPARATOR * @U+2029@ PARAGRAPH SEPARATOR @since 0.3.0 -} {-# INLINE isWhiteSpace #-} isWhiteSpace :: Char -> Bool isWhiteSpace = P.isWhite_Space {-| Selects Unicode space and separator characters. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'Space' * 'LineSeparator' * 'ParagraphSeparator' prop> isSeparator c == Data.Char.isSeparator c @since 0.3.0 -} isSeparator :: Char -> Bool isSeparator c = let !cp = ord c -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. in cp <= UC.MaxIsSeparator && let !gc = UC.generalCategoryPlanes0To3 cp in UC.Space <= gc && gc <= UC.ParagraphSeparator -- Use the following in case the previous code is not valid anymore: -- UC.Space <= gc && gc <= UC.ParagraphSeparator -- where gc = UC.generalCategory c {-| Selects Unicode symbol characters, including mathematical and currency symbols. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'MathSymbol' * 'CurrencySymbol' * 'ModifierSymbol' * 'OtherSymbol' prop> isSymbol c == Data.Char.isSymbol c @since 0.3.0 -} isSymbol :: Char -> Bool isSymbol c = UC.MathSymbol <= gc && gc <= UC.OtherSymbol where gc = UC.generalCategory c -- | Returns 'True' for any /noncharacter/. -- -- A /noncharacter/ is a code point that is permanently reserved for internal -- use (see definition D14 in the section -- [3.4 “Characters and Encoding”](https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf#G2212) -- of the Unicode Standard). -- -- Noncharacters consist of the values @U+nFFFE@ and @U+nFFFF@ (where @n@ -- is from 0 to 10₁₆) and the values @U+FDD0..U+FDEF@. -- -- @since 0.6.0 isNoncharacter :: Char -> Bool isNoncharacter c = ('\xFDD0' <= c && c <= '\xFDEF') || (ord c .&. 0xFFFF) >= 0xFFFE ------------------------------------------------------------------------------- -- Korean Hangul ------------------------------------------------------------------------------- -- jamo leading jamoLFirst, jamoLCount, jamoLLast :: Int -- | First leading consonant jamo. -- -- @since 0.1.0 jamoLFirst = 0x1100 -- | Total count of leading consonant jamo. -- -- @since 0.3.0 jamoLCount = 19 -- | Last leading consonant jamo. -- -- @since 0.1.0 jamoLLast = jamoLFirst + jamoLCount - 1 -- jamo vowel jamoVFirst, jamoVCount, jamoVLast :: Int -- | First vowel jamo. -- -- @since 0.1.0 jamoVFirst = 0x1161 -- | Total count of vowel jamo. -- -- @since 0.1.0 jamoVCount = 21 -- | Last vowel jamo. -- -- @since 0.1.0 jamoVLast = jamoVFirst + jamoVCount - 1 -- jamo trailing jamoTFirst, jamoTCount :: Int -- | The first trailing consonant jamo. -- -- Note that 'jamoTFirst' does not represent a valid T, it represents a missing -- T i.e. LV without a T. See comments under 'jamoTIndex' . -- -- @since 0.1.0 jamoTFirst = 0x11a7 -- | Total count of trailing consonant jamo. -- -- @since 0.1.0 jamoTCount = 28 -- | Last trailing consonant jamo. -- -- @since 0.1.0 jamoTLast :: Int jamoTLast = jamoTFirst + jamoTCount - 1 -- | Total count of all jamo characters. -- -- @jamoNCount = jamoVCount * jamoTCount@ -- -- @since 0.1.0 jamoNCount :: Int jamoNCount = 588 -- Hangul hangulFirst, hangulLast :: Int -- | Codepoint of the first pre-composed Hangul character. -- -- @since 0.1.0 hangulFirst = 0xac00 -- | Codepoint of the last Hangul character. -- -- @since 0.1.0 hangulLast = hangulFirst + jamoLCount * jamoVCount * jamoTCount - 1 -- | Determine if the given character is a precomposed Hangul syllable. -- -- @since 0.1.0 isHangul :: Char -> Bool isHangul c = n >= hangulFirst && n <= hangulLast where n = ord c -- | Determine if the given character is a Hangul LV syllable. -- -- __Note:__ this function requires a precomposed Hangul syllable but does /not/ -- check it. Use 'isHangul' to check the input character before passing it to -- 'isHangulLV'. -- -- @since 0.1.0 isHangulLV :: Char -> Bool isHangulLV c = assert (jamoTCount == 28) snd (quotRem28 (ord c - hangulFirst)) == 0 -- | Determine whether a character is a jamo L, V or T character. -- -- @since 0.1.0 isJamo :: Char -> Bool isJamo c = n >= jamoLFirst && n <= jamoTLast where n = ord c -- | Given a Unicode character, if it is a leading jamo, return its index in -- the list of leading jamo consonants, otherwise return 'Nothing'. -- -- @since 0.1.0 jamoLIndex :: Char -> Maybe Int jamoLIndex c | index >= 0 && index < jamoLCount = Just index | otherwise = Nothing where index = ord c - jamoLFirst -- | Given a Unicode character, if it is a vowel jamo, return its index in the -- list of vowel jamo, otherwise return 'Nothing'. -- -- @since 0.1.0 jamoVIndex :: Char -> Maybe Int jamoVIndex c | index >= 0 && index < jamoVCount = Just index | otherwise = Nothing where index = ord c - jamoVFirst -- | Given a Unicode character, if it is a trailing jamo consonant, return its -- index in the list of trailing jamo consonants, otherwise return 'Nothing'. -- -- Note that index 0 is not a valid index for a trailing consonant. Index 0 -- corresponds to an LV syllable, without a T. See "Hangul Syllable -- Decomposition" in the Conformance chapter of the Unicode standard for more -- details. -- -- @since 0.1.0 jamoTIndex :: Char -> Maybe Int jamoTIndex c | index > 0 && index < jamoTCount = Just index | otherwise = Nothing where index = ord c - jamoTFirst unicode-data-0.6.0/lib/Unicode/Char/General/0000755000000000000000000000000007346545000016631 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Char/General/Blocks.hs0000644000000000000000000000306507346545000020406 0ustar0000000000000000{-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE DeriveGeneric #-} -- | -- Module : Unicode.Char.General.Blocks -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Unicode [blocks](https://www.unicode.org/glossary/#block) related functions. -- -- @since 0.3.1 module Unicode.Char.General.Blocks ( -- * Blocks B.Block(..) , block -- * Blocks definitions , BlockDefinition(..) , blockDefinition ) where import GHC.Exts (Char (..), Int (..), dataToTag#, tagToEnum#) import Unicode.Internal.Bits (unpackCString#) import qualified Unicode.Internal.Char.Blocks as B -- | Character [block](https://www.unicode.org/glossary/#block), if defined. -- -- @since 0.3.1 {-# INLINE block #-} block :: Char -> Maybe B.Block block (C# c#) = case B.block c# of -1# -> Nothing b# -> Just (tagToEnum# b# :: B.Block) -- | Block definition: range and name. -- -- @since 0.3.1 data BlockDefinition = BlockDefinition { blockRange :: !(Int, Int) -- ^ Range , blockName :: !String -- ^ Name } deriving (Eq, Ord, Show) -- | Block definition -- -- @since 0.3.1 blockDefinition :: B.Block -> BlockDefinition blockDefinition b = case B.blockDefinition (dataToTag# b) of (# lower#, upper#, name# #) -> BlockDefinition range name where !range = (I# lower#, I# upper#) -- Note: names are ASCII. See Unicode Standard 15.0.0, section 3.4. !name = unpackCString# name# unicode-data-0.6.0/lib/Unicode/Char/General/Compat.hs0000644000000000000000000000754007346545000020416 0ustar0000000000000000-- | -- Module : Unicode.Char.General.Compat -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Compatibility module for general character property related functions. -- -- The functions of this module are drop-in replacement for those in "Data.Char". -- They are similar but not identical to some functions in "Unicode.Char.General", -- therefore they are placed in a separate module in order to avoid ambiguity. -- module Unicode.Char.General.Compat ( isAlpha , isAlphaNum , isLetter , isSpace ) where import Data.Char (ord) import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC -- $setup -- import qualified Unicode.Char.General -- | Same as 'isLetter'. -- -- @since 0.3.0 {-# INLINE isAlpha #-} isAlpha :: Char -> Bool isAlpha = isLetter {-| Selects alphabetic or numeric Unicode characters. This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'UppercaseLetter' * 'LowercaseLetter' * 'TitlecaseLetter' * 'ModifierLetter' * 'OtherLetter' * 'DecimalNumber' * 'LetterNumber' * 'OtherNumber' prop> isAlphaNum c == Data.Char.isAlphaNum c __Note:__ this function is incompatible with 'Unicode.Char.General.isAlphabetic': >>> Unicode.Char.General.isAlphabetic '\x345' True >>> isAlphaNum '\x345' False @since 0.6.0 moved to Compat module @since 0.3.0 -} isAlphaNum :: Char -> Bool isAlphaNum c = let !cp = ord c -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. in cp <= UC.MaxIsAlphaNum && let !gc = UC.generalCategoryPlanes0To3 cp in gc <= UC.OtherLetter || (UC.DecimalNumber <= gc && gc <= UC.OtherNumber) -- Use the following in case the previous code is not valid anymore: -- gc <= UC.OtherLetter || (UC.DecimalNumber <= gc && gc <= UC.OtherNumber) -- where !gc = UC.generalCategory c {-| Selects alphabetic Unicode characters (lower-case, upper-case and title-case letters, plus letters of caseless scripts and modifiers letters). This function returns 'True' if its argument has one of the following 'GeneralCategory's, or 'False' otherwise: * 'UppercaseLetter' * 'LowercaseLetter' * 'TitlecaseLetter' * 'ModifierLetter' * 'OtherLetter' __Note:__ this function is /not/ equivalent to 'Unicode.Char.General.isAlphabetic'. See the description of 'Unicode.Char.General.isAlphabetic' for further details. prop> isLetter c == Data.Char.isLetter c @since 0.3.0 -} {-# INLINE isLetter #-} isLetter :: Char -> Bool isLetter c = let !cp = ord c -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. in cp <= UC.MaxIsLetter && let !gc = UC.generalCategoryPlanes0To3 cp in gc <= UC.OtherLetter -- Use the following in case the previous code is not valid anymore: -- UC.generalCategory c <= UC.OtherLetter {-| Selects Unicode space characters (general category 'Space'), and the control characters @\\t@, @\\n@, @\\r@, @\\f@, @\\v@. __Note:__ 'isSpace' is /not/ equivalent to 'Unicode.Char.General.isWhiteSpace'. 'Unicode.Char.General.isWhiteSpace' selects the same characters from 'isSpace' plus the following: * @U+0085@ NEXT LINE (NEL) * @U+2028@ LINE SEPARATOR * @U+2029@ PARAGRAPH SEPARATOR prop> isSpace c == Data.Char.isSpace c @since 0.3.0 -} isSpace :: Char -> Bool -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. isSpace c = cp <= UC.MaxIsSpace && case c of '\t' -> True '\n' -> True '\v' -> True '\f' -> True '\r' -> True _ -> UC.generalCategoryPlanes0To3 cp == UC.Space where cp = ord c unicode-data-0.6.0/lib/Unicode/Char/Identifiers.hs0000644000000000000000000000367107346545000020064 0ustar0000000000000000-- | -- Module : Unicode.Char.Identifiers -- Copyright : (c) 2021 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Unicode Identifier and Pattern Syntax property functions based on -- [Unicode Standard Annex #31](https://www.unicode.org/reports/tr31/) module Unicode.Char.Identifiers ( isIDContinue , isIDStart , isXIDContinue , isXIDStart , isPatternSyntax , isPatternWhitespace ) where import qualified Unicode.Internal.Char.DerivedCoreProperties as P import qualified Unicode.Internal.Char.PropList as P -- | Returns 'True' if a character is an identifier continue character. -- -- @since 0.2.0 {-# INLINE isIDContinue #-} isIDContinue :: Char -> Bool isIDContinue = P.isID_Continue -- | Returns 'True' if a character is an identifier start character. -- -- @since 0.2.0 {-# INLINE isIDStart #-} isIDStart :: Char -> Bool isIDStart = P.isID_Start -- | Returns 'True' if a character is an identifier continue character, -- using the NFKC modifications detailed in -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications). -- -- @since 0.2.0 {-# INLINE isXIDContinue #-} isXIDContinue :: Char -> Bool isXIDContinue = P.isXID_Continue -- | Returns 'True' if a character is an identifier start character, -- using the NFKC modifications detailed in -- [UAX #31, 5.1](https://www.unicode.org/reports/tr31/#NFKC_Modifications). -- -- @since 0.2.0 {-# INLINE isXIDStart #-} isXIDStart :: Char -> Bool isXIDStart = P.isXID_Start -- | Returns 'True' if a character is a pattern syntax character. -- -- @since 0.2.0 {-# INLINE isPatternSyntax #-} isPatternSyntax :: Char -> Bool isPatternSyntax = P.isPattern_Syntax -- | Returns 'True' if a character is a pattern whitespace character. -- -- @since 0.2.0 {-# INLINE isPatternWhitespace #-} isPatternWhitespace :: Char -> Bool isPatternWhitespace = P.isPattern_White_Space unicode-data-0.6.0/lib/Unicode/Char/Normalization.hs0000644000000000000000000001245507346545000020445 0ustar0000000000000000-- | -- Module : Unicode.Char.Normalization -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Low level Unicode database functions to facilitate Unicode normalization. -- -- For more information on Unicode normalization please refer to the following -- sections of the [Unicode standard](https://www.unicode.org/versions/latest/): -- -- * 2 General Structure -- -- * 2.3 Compatibility Characters -- * 2.12 Equivalent Sequences -- -- * 3 Conformance -- -- * 3.6 Combination -- * 3.7 Decomposition -- * 3.11 Normalization Forms -- * 3.12 Conjoining Jamo Behavior -- -- * 4 Character Properties -- -- * 4.3 Combining Classes -- -- * [Unicode® Standard Annex #15 - Unicode Normalization Forms](https://www.unicode.org/reports/tr15) -- * [Unicode® Standard Annex #44 - Unicode Character Database](https://www.unicode.org/reports/tr44/) -- module Unicode.Char.Normalization ( -- * Combining class isCombining , combiningClass , isCombiningStarter -- * Composition , compose , composeStarters -- * Decomposition -- ** Non-Hangul , DecomposeMode(..) , isDecomposable , decompose -- ** Hangul , decomposeHangul ) where import Control.Exception (assert) import Data.Char (ord) import GHC.Base (unsafeChr) import Unicode.Internal.Division (quotRem21, quotRem28) import Unicode.Char.General (hangulFirst, jamoLFirst, jamoTCount, jamoTFirst, jamoVCount, jamoVFirst) import qualified Unicode.Internal.Char.UnicodeData.CombiningClass as CC import qualified Unicode.Internal.Char.UnicodeData.Compositions as C import qualified Unicode.Internal.Char.UnicodeData.Decomposable as D import qualified Unicode.Internal.Char.UnicodeData.DecomposableK as K import qualified Unicode.Internal.Char.UnicodeData.Decompositions as D import qualified Unicode.Internal.Char.UnicodeData.DecompositionsK as K ------------------------------------------------------------------------------- -- Compose ------------------------------------------------------------------------------- -- | Compose a starter character (combining class 0) with a combining character -- (non-zero combining class). Returns the composed character if the starter -- combines with the combining character, returns 'Nothing' otherwise. -- -- @since 0.1.0 {-# INLINE compose #-} compose :: Char -> Char -> Maybe Char compose = C.compose -- | Compose a starter character with another starter character. Returns the -- composed character if the two starters combine, returns 'Nothing' otherwise. -- -- @since 0.1.0 {-# INLINE composeStarters #-} composeStarters :: Char -> Char -> Maybe Char composeStarters = C.composeStarters -- | Return 'True' if a starter character may combine with some preceding -- starter character. -- -- @since 0.1.0 {-# INLINE isCombiningStarter #-} isCombiningStarter :: Char -> Bool isCombiningStarter = C.isSecondStarter ------------------------------------------------------------------------------- -- Decompose ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- Non Hangul decomposition ------------------------------------------------------------------------------- -- | Whether we are decomposing in canonical or compatibility mode. -- -- @since 0.1.0 data DecomposeMode = Canonical | Kompat -- | Decompose a non-Hangul character into its canonical or compatibility -- decompositions. Note that the resulting characters may further decompose. -- -- @since 0.1.0 {-# INLINE decompose #-} decompose :: DecomposeMode -> Char -> [Char] decompose Canonical = D.decompose decompose Kompat = K.decompose -- | Given a non-Hangul character determine if the character is decomposable. -- Note that in case compatibility decompositions a character may decompose -- into a single compatibility character. -- -- @since 0.1.0 {-# INLINE isDecomposable #-} isDecomposable :: DecomposeMode -> Char -> Bool isDecomposable Canonical = D.isDecomposable isDecomposable Kompat = K.isDecomposable ------------------------------------------------------------------------------- -- Hangul decomposition ------------------------------------------------------------------------------- -- | Decompose a Hangul syllable into its corresponding Jamo characters. -- -- @since 0.1.0 {-# INLINE decomposeHangul #-} decomposeHangul :: Char -> (Char, Char, Char) decomposeHangul c = (l, v, t) where i = ord c - hangulFirst !(tn, ti) = assert (jamoTCount == 28) quotRem28 i !(li, vi) = assert (jamoVCount == 21) quotRem21 tn l = unsafeChr (jamoLFirst + li) v = unsafeChr (jamoVFirst + vi) t = unsafeChr (jamoTFirst + ti) ------------------------------------------------------------------------------- -- Combining class ------------------------------------------------------------------------------- -- Determine the combining properties of characters. -- | Returns the combining class of a character. -- -- @since 0.1.0 {-# INLINE combiningClass #-} combiningClass :: Char -> Int combiningClass = CC.combiningClass -- | Returns 'True' if a character is a combining character. -- -- @since 0.1.0 {-# INLINE isCombining #-} isCombining :: Char -> Bool isCombining = CC.isCombining unicode-data-0.6.0/lib/Unicode/Char/Numeric.hs0000644000000000000000000000734307346545000017221 0ustar0000000000000000-- | -- Module : Unicode.Char.Numeric -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Numeric character property related functions. -- -- @since 0.3.0 module Unicode.Char.Numeric ( -- * Predicates isNumeric -- * Numeric values , numericValue , integerValue -- * Single digit characters , intToDigiT -- * Re-export from @base@ , isDigit , isOctDigit , isHexDigit , digitToInt , intToDigit ) where import Data.Char (digitToInt, intToDigit, isDigit, isHexDigit, isOctDigit) import Data.Int (Int64) import Data.Maybe (isJust) import Data.Ratio (denominator, numerator) import GHC.Exts (Char (..), Int (..), chr#, isTrue#, (+#), (<=#), (>=#)) import qualified Unicode.Internal.Char.DerivedNumericValues as V -- $setup -- >>> import Data.Int (Int32, Int64) -- | Selects Unicode character with a numeric value. -- -- __Note:__ a character may have a numeric value but return 'False' with -- the predicate 'Unicode.Char.Numeric.Compat.isNumber', because -- 'Unicode.Char.Numeric.Compat.isNumber' only tests -- 'Unicode.Char.General.GeneralCategory': some CJK characters are -- 'Unicode.Char.General.OtherLetter' and do have a numeric value. -- -- prop> isNumeric c == isJust (numericValue c) -- -- @since 0.3.1 {-# INLINE isNumeric #-} isNumeric :: Char -> Bool isNumeric = isJust . V.numericValue -- | Numeric value of a character, if relevant. -- -- __Note:__ a character may have a numeric value but return 'False' with -- the predicate 'Unicode.Char.Numeric.Compat.isNumber', because -- 'Unicode.Char.Numeric.Compat.isNumber' only tests -- 'Unicode.Char.General.GeneralCategory': some CJK characters are -- 'Unicode.Char.General.OtherLetter' and do have a numeric value. -- -- @since 0.3.1 {-# INLINE numericValue #-} numericValue :: Char -> Maybe Rational numericValue = V.numericValue -- | Integer value of a character, if relevant. -- -- This is a special case of 'numericValue'. -- -- __Warning:__ There is a risk of /integer overflow/ depending of the chosen -- concrete return type. As of Unicode 15.1 the results range from 0 to 1e16. -- -- >>> minimum [v | v@Just{} <- integerValue <$> [minBound..]] :: Maybe Integer -- Just 0 -- >>> maximum (integerValue <$> [minBound..]) :: Maybe Integer -- Just 10000000000000000 -- >>> integerValue '\x4EAC' :: Maybe Int64 -- OK -- Just 10000000000000000 -- >>> integerValue '\x4EAC' :: Maybe Int32 -- Will overflow! -- Just 1874919424 -- -- Therefore it is advised to use: @'integerValue' \@'Int64'@. -- -- __Note:__ A character may have a numeric value but return 'False' with -- the predicate 'Unicode.Char.Numeric.Compat.isNumber', because -- 'Unicode.Char.Numeric.Compat.isNumber' only tests -- 'Unicode.Char.General.GeneralCategory': some CJK characters are -- 'Unicode.Char.General.OtherLetter' and do have a numeric value. -- -- @since 0.3.1 {-# INLINE integerValue #-} {-# SPECIALIZE integerValue :: Char -> Maybe Integer #-} {-# SPECIALIZE integerValue :: Char -> Maybe Int64 #-} {-# SPECIALIZE integerValue :: Char -> Maybe Int #-} integerValue :: (Integral a) => Char -> Maybe a integerValue c = do r <- V.numericValue c if denominator r == 1 then Just (fromInteger (numerator r)) else Nothing -- | Same a 'intToDigit', but with upper case. -- -- >>> intToDigiT <$> [0..15] -- "0123456789ABCDEF" -- -- @since 0.6.0 intToDigiT :: Int -> Char intToDigiT (I# i) | isTrue# (i >=# 0#) && isTrue# (i <=# 9#) = C# (chr# (0x30# +# i)) | isTrue# (i >=# 10#) && isTrue# (i <=# 15#) = C# (chr# (0x37# +# i)) | otherwise = errorWithoutStackTrace ("Unicode.Char.Numeric.intToDigiT: not a digit " ++ show (I# i)) unicode-data-0.6.0/lib/Unicode/Char/Numeric/0000755000000000000000000000000007346545000016656 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Char/Numeric/Compat.hs0000644000000000000000000000332707346545000020442 0ustar0000000000000000-- | -- Module : Unicode.Char.Numeric.Compat -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental -- -- Compatibility module for numeric character property related functions. -- -- @since 0.3.1 -- module Unicode.Char.Numeric.Compat ( -- * Predicates isNumber ) where import Data.Char (ord) import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC -- | Selects Unicode numeric characters, including digits from various -- scripts, Roman numerals, et cetera. -- -- This function returns 'True' if its argument has one of the -- following 'Unicode.Char.General.GeneralCategory's, or 'False' otherwise: -- -- * 'Unicode.Char.General.DecimalNumber' -- * 'Unicode.Char.General.LetterNumber' -- * 'Unicode.Char.General.OtherNumber' -- -- __Note:__ a character may have a numeric value (see -- 'Unicode.Char.Numeric.numericValue') but return 'False', because 'isNumber' -- only tests 'Unicode.Char.General.GeneralCategory': some CJK characters are -- 'Unicode.Char.General.OtherLetter' and do have a numeric value. -- Use 'Unicode.Char.Numeric.isNumeric' to cover those cases as well. -- -- prop> isNumber c == Data.Char.isNumber c -- -- @since 0.3.1 moved to Compat module. -- -- @since 0.3.0 isNumber :: Char -> Bool isNumber c = -- NOTE: The guard constant is updated at each Unicode revision. -- It must be < 0x40000 to be accepted by generalCategoryPlanes0To3. cp <= UC.MaxIsNumber && case UC.generalCategoryPlanes0To3 cp of UC.DecimalNumber -> True UC.LetterNumber -> True UC.OtherNumber -> True _ -> False where !cp = ord c unicode-data-0.6.0/lib/Unicode/Internal/0000755000000000000000000000000007346545000016153 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Internal/Bits.hs0000644000000000000000000001157407346545000017420 0ustar0000000000000000{-# LANGUAGE CPP #-} -- | -- Module : Unicode.Internal.Bits -- Copyright : (c) 2020 Andrew Lelechenko -- (c) 2020 Composewell Technologies -- License : BSD-3-Clause -- Maintainer : streamly@composewell.com -- Stability : experimental -- Portability : GHC -- -- Fast, static bitmap lookup utilities module Unicode.Internal.Bits ( -- * Bitmap lookup lookupBit, lookupWord8AsInt, lookupWord8AsInt#, lookupWord16AsInt, lookupWord16AsInt#, lookupWord32#, -- * CString unpackCString# ) where #include "MachDeps.h" import GHC.Exts (Addr#, Int(..), Int#, Word(..), Word#, indexWord8OffAddr#, indexWord16OffAddr#, indexWord32OffAddr#, and#, word2Int#, uncheckedShiftL#) #if MIN_VERSION_base(4,16,0) import GHC.Exts (word8ToWord#, word16ToWord#, word32ToWord#) #endif #ifdef WORDS_BIGENDIAN import GHC.Exts (narrow16Word#, narrow32Word#, byteSwap16#, byteSwap32#) #endif #if MIN_VERSION_base(4,15,0) import GHC.Exts (unpackCString#) #else import GHC.CString (unpackCString#) #endif -- TODO: remove? -- {- | @lookupBit addr index@ looks up the bit stored at bit index @index@ using -- a bitmap starting at the address @addr@. Looks up the word containing the bit -- and then the bit in that word. The caller must make sure that the word at the -- byte address @(addr + index / wfbs)@, where @wfbs@ is the finite bit size of a -- word, is legally accessible memory. -- -} -- lookupBit :: Addr# -> Int -> Bool -- lookupBit addr# (I# index#) = W# (word## `and#` bitMask##) /= 0 -- where -- !fbs@(I# fbs#) = finiteBitSize (0 :: Word) - 1 -- !(I# log2Fbs) = case fbs of -- 31 -> 5 -- 63 -> 6 -- _ -> popCount fbs -- this is a really weird architecture -- wordIndex# = index# `uncheckedIShiftRL#` log2Fbs -- #ifdef WORDS_BIGENDIAN -- word## = byteSwap# (indexWordOffAddr# addr# wordIndex#) -- #else -- word## = indexWordOffAddr# addr# wordIndex# -- #endif -- -- x % 2^n = x & (2^n - 1) -- bitIndex# = index# `andI#` fbs# -- bitMask## = 1## `uncheckedShiftL#` bitIndex# {- | @lookupBit addr byteIndex bitIndex@ looks up the bit stored in the byte at index @byteIndex@ at the bit index @bitIndex@ using a bitmap starting at the address @addr@. The caller must make sure that the byte at address @(addr + byteIndex)@ is legally accessible memory. -} lookupBit :: Addr# -> Int -> Int -> Bool lookupBit addr# (I# byteIndex#) (I# bitIndex#) = W# (word## `and#` bitMask##) /= 0 where #if MIN_VERSION_base(4,16,0) word## = word8ToWord# (indexWord8OffAddr# addr# byteIndex#) #else word## = indexWord8OffAddr# addr# byteIndex# #endif bitMask## = 1## `uncheckedShiftL#` bitIndex# {-| @lookupWord8AsInt addr index@ looks up for the @index@-th @8@-bits word in the bitmap starting at @addr@, then convert it to an 'Int'. The caller must make sure that: * @ceiling (addr + (n * 8))@ is legally accessible 'GHC.Exts.Word8#'. @since 0.3.0 -} lookupWord8AsInt :: Addr# -- ^ Bitmap address -> Int -- ^ Word index -> Int -- ^ Resulting word as 'Int' lookupWord8AsInt addr# (I# index#) = I# (lookupWord8AsInt# addr# index#) lookupWord8AsInt# :: Addr# -- ^ Bitmap address -> Int# -- ^ Word index -> Int# -- ^ Resulting word as 'Int' lookupWord8AsInt# addr# index# = word2Int# word## where #if MIN_VERSION_base(4,16,0) word## = word8ToWord# (indexWord8OffAddr# addr# index#) #else word## = indexWord8OffAddr# addr# index# #endif lookupWord16AsInt :: Addr# -- ^ Bitmap address -> Int -- ^ Word index -> Int -- ^ Resulting word as `Int` lookupWord16AsInt addr# (I# k#) = I# (lookupWord16AsInt# addr# k#) lookupWord16AsInt# :: Addr# -- ^ Bitmap address -> Int# -- ^ Word index -> Int# -- ^ Resulting word as `Int` lookupWord16AsInt# addr# k# = word2Int# word## where #ifdef WORDS_BIGENDIAN #if MIN_VERSION_base(4,16,0) word## = narrow16Word# (byteSwap16# (word16ToWord# (indexWord16OffAddr# addr# k#))) #else word## = narrow16Word# (byteSwap16# (indexWord16OffAddr# addr# k#)) #endif #elif MIN_VERSION_base(4,16,0) word## = word16ToWord# (indexWord16OffAddr# addr# k#) #else word## = indexWord16OffAddr# addr# k# #endif {-| @lookupWord32# addr index@ looks up for the @index@-th 32-bits word in the bitmap starting at @addr@, then convert it to a 'Word#'. The caller must make sure that: * @ceiling (addr + (n * 32))@ is legally accessible 'GHC.Exts.Word32#'. @since 0.4.1 -} lookupWord32# :: Addr# -- ^ Bitmap address -> Int# -- ^ Word index -> Word# -- ^ Resulting word lookupWord32# #ifdef WORDS_BIGENDIAN #if MIN_VERSION_base(4,16,0) addr# k# = narrow32Word# (byteSwap32# (word32ToWord# (indexWord32OffAddr# addr# k#))) #else addr# k# = narrow32Word# (byteSwap32# (indexWord32OffAddr# addr# k#)) #endif #elif MIN_VERSION_base(4,16,0) addr# k# = word32ToWord# (indexWord32OffAddr# addr# k#) #else = indexWord32OffAddr# #endif unicode-data-0.6.0/lib/Unicode/Internal/Char/0000755000000000000000000000000007346545000017030 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Internal/Char/Blocks.hs0000644000000000000000000014153407346545000020611 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/Blocks.txt -- | -- Module : Unicode.Internal.Char.Blocks -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.Blocks (Block(..), block, blockDefinition) where import Data.Ix (Ix) import Data.Word (Word32) import GHC.Exts import Unicode.Internal.Bits (lookupWord32#) -- | Unicode [block](https://www.unicode.org/glossary/#block). -- -- There is a total of 328 blocks. -- -- @since 0.3.1 data Block = BasicLatin -- ^ @U+0000..U+007F@: Basic Latin. | Latin1Supplement -- ^ @U+0080..U+00FF@: Latin-1 Supplement. | LatinExtendedA -- ^ @U+0100..U+017F@: Latin Extended-A. | LatinExtendedB -- ^ @U+0180..U+024F@: Latin Extended-B. | IPAExtensions -- ^ @U+0250..U+02AF@: IPA Extensions. | SpacingModifierLetters -- ^ @U+02B0..U+02FF@: Spacing Modifier Letters. | CombiningDiacriticalMarks -- ^ @U+0300..U+036F@: Combining Diacritical Marks. | GreekAndCoptic -- ^ @U+0370..U+03FF@: Greek and Coptic. | Cyrillic -- ^ @U+0400..U+04FF@: Cyrillic. | CyrillicSupplement -- ^ @U+0500..U+052F@: Cyrillic Supplement. | Armenian -- ^ @U+0530..U+058F@: Armenian. | Hebrew -- ^ @U+0590..U+05FF@: Hebrew. | Arabic -- ^ @U+0600..U+06FF@: Arabic. | Syriac -- ^ @U+0700..U+074F@: Syriac. | ArabicSupplement -- ^ @U+0750..U+077F@: Arabic Supplement. | Thaana -- ^ @U+0780..U+07BF@: Thaana. | NKo -- ^ @U+07C0..U+07FF@: NKo. | Samaritan -- ^ @U+0800..U+083F@: Samaritan. | Mandaic -- ^ @U+0840..U+085F@: Mandaic. | SyriacSupplement -- ^ @U+0860..U+086F@: Syriac Supplement. | ArabicExtendedB -- ^ @U+0870..U+089F@: Arabic Extended-B. | ArabicExtendedA -- ^ @U+08A0..U+08FF@: Arabic Extended-A. | Devanagari -- ^ @U+0900..U+097F@: Devanagari. | Bengali -- ^ @U+0980..U+09FF@: Bengali. | Gurmukhi -- ^ @U+0A00..U+0A7F@: Gurmukhi. | Gujarati -- ^ @U+0A80..U+0AFF@: Gujarati. | Oriya -- ^ @U+0B00..U+0B7F@: Oriya. | Tamil -- ^ @U+0B80..U+0BFF@: Tamil. | Telugu -- ^ @U+0C00..U+0C7F@: Telugu. | Kannada -- ^ @U+0C80..U+0CFF@: Kannada. | Malayalam -- ^ @U+0D00..U+0D7F@: Malayalam. | Sinhala -- ^ @U+0D80..U+0DFF@: Sinhala. | Thai -- ^ @U+0E00..U+0E7F@: Thai. | Lao -- ^ @U+0E80..U+0EFF@: Lao. | Tibetan -- ^ @U+0F00..U+0FFF@: Tibetan. | Myanmar -- ^ @U+1000..U+109F@: Myanmar. | Georgian -- ^ @U+10A0..U+10FF@: Georgian. | HangulJamo -- ^ @U+1100..U+11FF@: Hangul Jamo. | Ethiopic -- ^ @U+1200..U+137F@: Ethiopic. | EthiopicSupplement -- ^ @U+1380..U+139F@: Ethiopic Supplement. | Cherokee -- ^ @U+13A0..U+13FF@: Cherokee. | UnifiedCanadianAboriginalSyllabics -- ^ @U+1400..U+167F@: Unified Canadian Aboriginal Syllabics. | Ogham -- ^ @U+1680..U+169F@: Ogham. | Runic -- ^ @U+16A0..U+16FF@: Runic. | Tagalog -- ^ @U+1700..U+171F@: Tagalog. | Hanunoo -- ^ @U+1720..U+173F@: Hanunoo. | Buhid -- ^ @U+1740..U+175F@: Buhid. | Tagbanwa -- ^ @U+1760..U+177F@: Tagbanwa. | Khmer -- ^ @U+1780..U+17FF@: Khmer. | Mongolian -- ^ @U+1800..U+18AF@: Mongolian. | UnifiedCanadianAboriginalSyllabicsExtended -- ^ @U+18B0..U+18FF@: Unified Canadian Aboriginal Syllabics Extended. | Limbu -- ^ @U+1900..U+194F@: Limbu. | TaiLe -- ^ @U+1950..U+197F@: Tai Le. | NewTaiLue -- ^ @U+1980..U+19DF@: New Tai Lue. | KhmerSymbols -- ^ @U+19E0..U+19FF@: Khmer Symbols. | Buginese -- ^ @U+1A00..U+1A1F@: Buginese. | TaiTham -- ^ @U+1A20..U+1AAF@: Tai Tham. | CombiningDiacriticalMarksExtended -- ^ @U+1AB0..U+1AFF@: Combining Diacritical Marks Extended. | Balinese -- ^ @U+1B00..U+1B7F@: Balinese. | Sundanese -- ^ @U+1B80..U+1BBF@: Sundanese. | Batak -- ^ @U+1BC0..U+1BFF@: Batak. | Lepcha -- ^ @U+1C00..U+1C4F@: Lepcha. | OlChiki -- ^ @U+1C50..U+1C7F@: Ol Chiki. | CyrillicExtendedC -- ^ @U+1C80..U+1C8F@: Cyrillic Extended-C. | GeorgianExtended -- ^ @U+1C90..U+1CBF@: Georgian Extended. | SundaneseSupplement -- ^ @U+1CC0..U+1CCF@: Sundanese Supplement. | VedicExtensions -- ^ @U+1CD0..U+1CFF@: Vedic Extensions. | PhoneticExtensions -- ^ @U+1D00..U+1D7F@: Phonetic Extensions. | PhoneticExtensionsSupplement -- ^ @U+1D80..U+1DBF@: Phonetic Extensions Supplement. | CombiningDiacriticalMarksSupplement -- ^ @U+1DC0..U+1DFF@: Combining Diacritical Marks Supplement. | LatinExtendedAdditional -- ^ @U+1E00..U+1EFF@: Latin Extended Additional. | GreekExtended -- ^ @U+1F00..U+1FFF@: Greek Extended. | GeneralPunctuation -- ^ @U+2000..U+206F@: General Punctuation. | SuperscriptsAndSubscripts -- ^ @U+2070..U+209F@: Superscripts and Subscripts. | CurrencySymbols -- ^ @U+20A0..U+20CF@: Currency Symbols. | CombiningDiacriticalMarksForSymbols -- ^ @U+20D0..U+20FF@: Combining Diacritical Marks for Symbols. | LetterlikeSymbols -- ^ @U+2100..U+214F@: Letterlike Symbols. | NumberForms -- ^ @U+2150..U+218F@: Number Forms. | Arrows -- ^ @U+2190..U+21FF@: Arrows. | MathematicalOperators -- ^ @U+2200..U+22FF@: Mathematical Operators. | MiscellaneousTechnical -- ^ @U+2300..U+23FF@: Miscellaneous Technical. | ControlPictures -- ^ @U+2400..U+243F@: Control Pictures. | OpticalCharacterRecognition -- ^ @U+2440..U+245F@: Optical Character Recognition. | EnclosedAlphanumerics -- ^ @U+2460..U+24FF@: Enclosed Alphanumerics. | BoxDrawing -- ^ @U+2500..U+257F@: Box Drawing. | BlockElements -- ^ @U+2580..U+259F@: Block Elements. | GeometricShapes -- ^ @U+25A0..U+25FF@: Geometric Shapes. | MiscellaneousSymbols -- ^ @U+2600..U+26FF@: Miscellaneous Symbols. | Dingbats -- ^ @U+2700..U+27BF@: Dingbats. | MiscellaneousMathematicalSymbolsA -- ^ @U+27C0..U+27EF@: Miscellaneous Mathematical Symbols-A. | SupplementalArrowsA -- ^ @U+27F0..U+27FF@: Supplemental Arrows-A. | BraillePatterns -- ^ @U+2800..U+28FF@: Braille Patterns. | SupplementalArrowsB -- ^ @U+2900..U+297F@: Supplemental Arrows-B. | MiscellaneousMathematicalSymbolsB -- ^ @U+2980..U+29FF@: Miscellaneous Mathematical Symbols-B. | SupplementalMathematicalOperators -- ^ @U+2A00..U+2AFF@: Supplemental Mathematical Operators. | MiscellaneousSymbolsAndArrows -- ^ @U+2B00..U+2BFF@: Miscellaneous Symbols and Arrows. | Glagolitic -- ^ @U+2C00..U+2C5F@: Glagolitic. | LatinExtendedC -- ^ @U+2C60..U+2C7F@: Latin Extended-C. | Coptic -- ^ @U+2C80..U+2CFF@: Coptic. | GeorgianSupplement -- ^ @U+2D00..U+2D2F@: Georgian Supplement. | Tifinagh -- ^ @U+2D30..U+2D7F@: Tifinagh. | EthiopicExtended -- ^ @U+2D80..U+2DDF@: Ethiopic Extended. | CyrillicExtendedA -- ^ @U+2DE0..U+2DFF@: Cyrillic Extended-A. | SupplementalPunctuation -- ^ @U+2E00..U+2E7F@: Supplemental Punctuation. | CJKRadicalsSupplement -- ^ @U+2E80..U+2EFF@: CJK Radicals Supplement. | KangxiRadicals -- ^ @U+2F00..U+2FDF@: Kangxi Radicals. | IdeographicDescriptionCharacters -- ^ @U+2FF0..U+2FFF@: Ideographic Description Characters. | CJKSymbolsAndPunctuation -- ^ @U+3000..U+303F@: CJK Symbols and Punctuation. | Hiragana -- ^ @U+3040..U+309F@: Hiragana. | Katakana -- ^ @U+30A0..U+30FF@: Katakana. | Bopomofo -- ^ @U+3100..U+312F@: Bopomofo. | HangulCompatibilityJamo -- ^ @U+3130..U+318F@: Hangul Compatibility Jamo. | Kanbun -- ^ @U+3190..U+319F@: Kanbun. | BopomofoExtended -- ^ @U+31A0..U+31BF@: Bopomofo Extended. | CJKStrokes -- ^ @U+31C0..U+31EF@: CJK Strokes. | KatakanaPhoneticExtensions -- ^ @U+31F0..U+31FF@: Katakana Phonetic Extensions. | EnclosedCJKLettersAndMonths -- ^ @U+3200..U+32FF@: Enclosed CJK Letters and Months. | CJKCompatibility -- ^ @U+3300..U+33FF@: CJK Compatibility. | CJKUnifiedIdeographsExtensionA -- ^ @U+3400..U+4DBF@: CJK Unified Ideographs Extension A. | YijingHexagramSymbols -- ^ @U+4DC0..U+4DFF@: Yijing Hexagram Symbols. | CJKUnifiedIdeographs -- ^ @U+4E00..U+9FFF@: CJK Unified Ideographs. | YiSyllables -- ^ @U+A000..U+A48F@: Yi Syllables. | YiRadicals -- ^ @U+A490..U+A4CF@: Yi Radicals. | Lisu -- ^ @U+A4D0..U+A4FF@: Lisu. | Vai -- ^ @U+A500..U+A63F@: Vai. | CyrillicExtendedB -- ^ @U+A640..U+A69F@: Cyrillic Extended-B. | Bamum -- ^ @U+A6A0..U+A6FF@: Bamum. | ModifierToneLetters -- ^ @U+A700..U+A71F@: Modifier Tone Letters. | LatinExtendedD -- ^ @U+A720..U+A7FF@: Latin Extended-D. | SylotiNagri -- ^ @U+A800..U+A82F@: Syloti Nagri. | CommonIndicNumberForms -- ^ @U+A830..U+A83F@: Common Indic Number Forms. | PhagsPa -- ^ @U+A840..U+A87F@: Phags-pa. | Saurashtra -- ^ @U+A880..U+A8DF@: Saurashtra. | DevanagariExtended -- ^ @U+A8E0..U+A8FF@: Devanagari Extended. | KayahLi -- ^ @U+A900..U+A92F@: Kayah Li. | Rejang -- ^ @U+A930..U+A95F@: Rejang. | HangulJamoExtendedA -- ^ @U+A960..U+A97F@: Hangul Jamo Extended-A. | Javanese -- ^ @U+A980..U+A9DF@: Javanese. | MyanmarExtendedB -- ^ @U+A9E0..U+A9FF@: Myanmar Extended-B. | Cham -- ^ @U+AA00..U+AA5F@: Cham. | MyanmarExtendedA -- ^ @U+AA60..U+AA7F@: Myanmar Extended-A. | TaiViet -- ^ @U+AA80..U+AADF@: Tai Viet. | MeeteiMayekExtensions -- ^ @U+AAE0..U+AAFF@: Meetei Mayek Extensions. | EthiopicExtendedA -- ^ @U+AB00..U+AB2F@: Ethiopic Extended-A. | LatinExtendedE -- ^ @U+AB30..U+AB6F@: Latin Extended-E. | CherokeeSupplement -- ^ @U+AB70..U+ABBF@: Cherokee Supplement. | MeeteiMayek -- ^ @U+ABC0..U+ABFF@: Meetei Mayek. | HangulSyllables -- ^ @U+AC00..U+D7AF@: Hangul Syllables. | HangulJamoExtendedB -- ^ @U+D7B0..U+D7FF@: Hangul Jamo Extended-B. | HighSurrogates -- ^ @U+D800..U+DB7F@: High Surrogates. | HighPrivateUseSurrogates -- ^ @U+DB80..U+DBFF@: High Private Use Surrogates. | LowSurrogates -- ^ @U+DC00..U+DFFF@: Low Surrogates. | PrivateUseArea -- ^ @U+E000..U+F8FF@: Private Use Area. | CJKCompatibilityIdeographs -- ^ @U+F900..U+FAFF@: CJK Compatibility Ideographs. | AlphabeticPresentationForms -- ^ @U+FB00..U+FB4F@: Alphabetic Presentation Forms. | ArabicPresentationFormsA -- ^ @U+FB50..U+FDFF@: Arabic Presentation Forms-A. | VariationSelectors -- ^ @U+FE00..U+FE0F@: Variation Selectors. | VerticalForms -- ^ @U+FE10..U+FE1F@: Vertical Forms. | CombiningHalfMarks -- ^ @U+FE20..U+FE2F@: Combining Half Marks. | CJKCompatibilityForms -- ^ @U+FE30..U+FE4F@: CJK Compatibility Forms. | SmallFormVariants -- ^ @U+FE50..U+FE6F@: Small Form Variants. | ArabicPresentationFormsB -- ^ @U+FE70..U+FEFF@: Arabic Presentation Forms-B. | HalfwidthAndFullwidthForms -- ^ @U+FF00..U+FFEF@: Halfwidth and Fullwidth Forms. | Specials -- ^ @U+FFF0..U+FFFF@: Specials. | LinearBSyllabary -- ^ @U+10000..U+1007F@: Linear B Syllabary. | LinearBIdeograms -- ^ @U+10080..U+100FF@: Linear B Ideograms. | AegeanNumbers -- ^ @U+10100..U+1013F@: Aegean Numbers. | AncientGreekNumbers -- ^ @U+10140..U+1018F@: Ancient Greek Numbers. | AncientSymbols -- ^ @U+10190..U+101CF@: Ancient Symbols. | PhaistosDisc -- ^ @U+101D0..U+101FF@: Phaistos Disc. | Lycian -- ^ @U+10280..U+1029F@: Lycian. | Carian -- ^ @U+102A0..U+102DF@: Carian. | CopticEpactNumbers -- ^ @U+102E0..U+102FF@: Coptic Epact Numbers. | OldItalic -- ^ @U+10300..U+1032F@: Old Italic. | Gothic -- ^ @U+10330..U+1034F@: Gothic. | OldPermic -- ^ @U+10350..U+1037F@: Old Permic. | Ugaritic -- ^ @U+10380..U+1039F@: Ugaritic. | OldPersian -- ^ @U+103A0..U+103DF@: Old Persian. | Deseret -- ^ @U+10400..U+1044F@: Deseret. | Shavian -- ^ @U+10450..U+1047F@: Shavian. | Osmanya -- ^ @U+10480..U+104AF@: Osmanya. | Osage -- ^ @U+104B0..U+104FF@: Osage. | Elbasan -- ^ @U+10500..U+1052F@: Elbasan. | CaucasianAlbanian -- ^ @U+10530..U+1056F@: Caucasian Albanian. | Vithkuqi -- ^ @U+10570..U+105BF@: Vithkuqi. | LinearA -- ^ @U+10600..U+1077F@: Linear A. | LatinExtendedF -- ^ @U+10780..U+107BF@: Latin Extended-F. | CypriotSyllabary -- ^ @U+10800..U+1083F@: Cypriot Syllabary. | ImperialAramaic -- ^ @U+10840..U+1085F@: Imperial Aramaic. | Palmyrene -- ^ @U+10860..U+1087F@: Palmyrene. | Nabataean -- ^ @U+10880..U+108AF@: Nabataean. | Hatran -- ^ @U+108E0..U+108FF@: Hatran. | Phoenician -- ^ @U+10900..U+1091F@: Phoenician. | Lydian -- ^ @U+10920..U+1093F@: Lydian. | MeroiticHieroglyphs -- ^ @U+10980..U+1099F@: Meroitic Hieroglyphs. | MeroiticCursive -- ^ @U+109A0..U+109FF@: Meroitic Cursive. | Kharoshthi -- ^ @U+10A00..U+10A5F@: Kharoshthi. | OldSouthArabian -- ^ @U+10A60..U+10A7F@: Old South Arabian. | OldNorthArabian -- ^ @U+10A80..U+10A9F@: Old North Arabian. | Manichaean -- ^ @U+10AC0..U+10AFF@: Manichaean. | Avestan -- ^ @U+10B00..U+10B3F@: Avestan. | InscriptionalParthian -- ^ @U+10B40..U+10B5F@: Inscriptional Parthian. | InscriptionalPahlavi -- ^ @U+10B60..U+10B7F@: Inscriptional Pahlavi. | PsalterPahlavi -- ^ @U+10B80..U+10BAF@: Psalter Pahlavi. | OldTurkic -- ^ @U+10C00..U+10C4F@: Old Turkic. | OldHungarian -- ^ @U+10C80..U+10CFF@: Old Hungarian. | HanifiRohingya -- ^ @U+10D00..U+10D3F@: Hanifi Rohingya. | RumiNumeralSymbols -- ^ @U+10E60..U+10E7F@: Rumi Numeral Symbols. | Yezidi -- ^ @U+10E80..U+10EBF@: Yezidi. | ArabicExtendedC -- ^ @U+10EC0..U+10EFF@: Arabic Extended-C. | OldSogdian -- ^ @U+10F00..U+10F2F@: Old Sogdian. | Sogdian -- ^ @U+10F30..U+10F6F@: Sogdian. | OldUyghur -- ^ @U+10F70..U+10FAF@: Old Uyghur. | Chorasmian -- ^ @U+10FB0..U+10FDF@: Chorasmian. | Elymaic -- ^ @U+10FE0..U+10FFF@: Elymaic. | Brahmi -- ^ @U+11000..U+1107F@: Brahmi. | Kaithi -- ^ @U+11080..U+110CF@: Kaithi. | SoraSompeng -- ^ @U+110D0..U+110FF@: Sora Sompeng. | Chakma -- ^ @U+11100..U+1114F@: Chakma. | Mahajani -- ^ @U+11150..U+1117F@: Mahajani. | Sharada -- ^ @U+11180..U+111DF@: Sharada. | SinhalaArchaicNumbers -- ^ @U+111E0..U+111FF@: Sinhala Archaic Numbers. | Khojki -- ^ @U+11200..U+1124F@: Khojki. | Multani -- ^ @U+11280..U+112AF@: Multani. | Khudawadi -- ^ @U+112B0..U+112FF@: Khudawadi. | Grantha -- ^ @U+11300..U+1137F@: Grantha. | Newa -- ^ @U+11400..U+1147F@: Newa. | Tirhuta -- ^ @U+11480..U+114DF@: Tirhuta. | Siddham -- ^ @U+11580..U+115FF@: Siddham. | Modi -- ^ @U+11600..U+1165F@: Modi. | MongolianSupplement -- ^ @U+11660..U+1167F@: Mongolian Supplement. | Takri -- ^ @U+11680..U+116CF@: Takri. | Ahom -- ^ @U+11700..U+1174F@: Ahom. | Dogra -- ^ @U+11800..U+1184F@: Dogra. | WarangCiti -- ^ @U+118A0..U+118FF@: Warang Citi. | DivesAkuru -- ^ @U+11900..U+1195F@: Dives Akuru. | Nandinagari -- ^ @U+119A0..U+119FF@: Nandinagari. | ZanabazarSquare -- ^ @U+11A00..U+11A4F@: Zanabazar Square. | Soyombo -- ^ @U+11A50..U+11AAF@: Soyombo. | UnifiedCanadianAboriginalSyllabicsExtendedA -- ^ @U+11AB0..U+11ABF@: Unified Canadian Aboriginal Syllabics Extended-A. | PauCinHau -- ^ @U+11AC0..U+11AFF@: Pau Cin Hau. | DevanagariExtendedA -- ^ @U+11B00..U+11B5F@: Devanagari Extended-A. | Bhaiksuki -- ^ @U+11C00..U+11C6F@: Bhaiksuki. | Marchen -- ^ @U+11C70..U+11CBF@: Marchen. | MasaramGondi -- ^ @U+11D00..U+11D5F@: Masaram Gondi. | GunjalaGondi -- ^ @U+11D60..U+11DAF@: Gunjala Gondi. | Makasar -- ^ @U+11EE0..U+11EFF@: Makasar. | Kawi -- ^ @U+11F00..U+11F5F@: Kawi. | LisuSupplement -- ^ @U+11FB0..U+11FBF@: Lisu Supplement. | TamilSupplement -- ^ @U+11FC0..U+11FFF@: Tamil Supplement. | Cuneiform -- ^ @U+12000..U+123FF@: Cuneiform. | CuneiformNumbersAndPunctuation -- ^ @U+12400..U+1247F@: Cuneiform Numbers and Punctuation. | EarlyDynasticCuneiform -- ^ @U+12480..U+1254F@: Early Dynastic Cuneiform. | CyproMinoan -- ^ @U+12F90..U+12FFF@: Cypro-Minoan. | EgyptianHieroglyphs -- ^ @U+13000..U+1342F@: Egyptian Hieroglyphs. | EgyptianHieroglyphFormatControls -- ^ @U+13430..U+1345F@: Egyptian Hieroglyph Format Controls. | AnatolianHieroglyphs -- ^ @U+14400..U+1467F@: Anatolian Hieroglyphs. | BamumSupplement -- ^ @U+16800..U+16A3F@: Bamum Supplement. | Mro -- ^ @U+16A40..U+16A6F@: Mro. | Tangsa -- ^ @U+16A70..U+16ACF@: Tangsa. | BassaVah -- ^ @U+16AD0..U+16AFF@: Bassa Vah. | PahawhHmong -- ^ @U+16B00..U+16B8F@: Pahawh Hmong. | Medefaidrin -- ^ @U+16E40..U+16E9F@: Medefaidrin. | Miao -- ^ @U+16F00..U+16F9F@: Miao. | IdeographicSymbolsAndPunctuation -- ^ @U+16FE0..U+16FFF@: Ideographic Symbols and Punctuation. | Tangut -- ^ @U+17000..U+187FF@: Tangut. | TangutComponents -- ^ @U+18800..U+18AFF@: Tangut Components. | KhitanSmallScript -- ^ @U+18B00..U+18CFF@: Khitan Small Script. | TangutSupplement -- ^ @U+18D00..U+18D7F@: Tangut Supplement. | KanaExtendedB -- ^ @U+1AFF0..U+1AFFF@: Kana Extended-B. | KanaSupplement -- ^ @U+1B000..U+1B0FF@: Kana Supplement. | KanaExtendedA -- ^ @U+1B100..U+1B12F@: Kana Extended-A. | SmallKanaExtension -- ^ @U+1B130..U+1B16F@: Small Kana Extension. | Nushu -- ^ @U+1B170..U+1B2FF@: Nushu. | Duployan -- ^ @U+1BC00..U+1BC9F@: Duployan. | ShorthandFormatControls -- ^ @U+1BCA0..U+1BCAF@: Shorthand Format Controls. | ZnamennyMusicalNotation -- ^ @U+1CF00..U+1CFCF@: Znamenny Musical Notation. | ByzantineMusicalSymbols -- ^ @U+1D000..U+1D0FF@: Byzantine Musical Symbols. | MusicalSymbols -- ^ @U+1D100..U+1D1FF@: Musical Symbols. | AncientGreekMusicalNotation -- ^ @U+1D200..U+1D24F@: Ancient Greek Musical Notation. | KaktovikNumerals -- ^ @U+1D2C0..U+1D2DF@: Kaktovik Numerals. | MayanNumerals -- ^ @U+1D2E0..U+1D2FF@: Mayan Numerals. | TaiXuanJingSymbols -- ^ @U+1D300..U+1D35F@: Tai Xuan Jing Symbols. | CountingRodNumerals -- ^ @U+1D360..U+1D37F@: Counting Rod Numerals. | MathematicalAlphanumericSymbols -- ^ @U+1D400..U+1D7FF@: Mathematical Alphanumeric Symbols. | SuttonSignWriting -- ^ @U+1D800..U+1DAAF@: Sutton SignWriting. | LatinExtendedG -- ^ @U+1DF00..U+1DFFF@: Latin Extended-G. | GlagoliticSupplement -- ^ @U+1E000..U+1E02F@: Glagolitic Supplement. | CyrillicExtendedD -- ^ @U+1E030..U+1E08F@: Cyrillic Extended-D. | NyiakengPuachueHmong -- ^ @U+1E100..U+1E14F@: Nyiakeng Puachue Hmong. | Toto -- ^ @U+1E290..U+1E2BF@: Toto. | Wancho -- ^ @U+1E2C0..U+1E2FF@: Wancho. | NagMundari -- ^ @U+1E4D0..U+1E4FF@: Nag Mundari. | EthiopicExtendedB -- ^ @U+1E7E0..U+1E7FF@: Ethiopic Extended-B. | MendeKikakui -- ^ @U+1E800..U+1E8DF@: Mende Kikakui. | Adlam -- ^ @U+1E900..U+1E95F@: Adlam. | IndicSiyaqNumbers -- ^ @U+1EC70..U+1ECBF@: Indic Siyaq Numbers. | OttomanSiyaqNumbers -- ^ @U+1ED00..U+1ED4F@: Ottoman Siyaq Numbers. | ArabicMathematicalAlphabeticSymbols -- ^ @U+1EE00..U+1EEFF@: Arabic Mathematical Alphabetic Symbols. | MahjongTiles -- ^ @U+1F000..U+1F02F@: Mahjong Tiles. | DominoTiles -- ^ @U+1F030..U+1F09F@: Domino Tiles. | PlayingCards -- ^ @U+1F0A0..U+1F0FF@: Playing Cards. | EnclosedAlphanumericSupplement -- ^ @U+1F100..U+1F1FF@: Enclosed Alphanumeric Supplement. | EnclosedIdeographicSupplement -- ^ @U+1F200..U+1F2FF@: Enclosed Ideographic Supplement. | MiscellaneousSymbolsAndPictographs -- ^ @U+1F300..U+1F5FF@: Miscellaneous Symbols and Pictographs. | Emoticons -- ^ @U+1F600..U+1F64F@: Emoticons. | OrnamentalDingbats -- ^ @U+1F650..U+1F67F@: Ornamental Dingbats. | TransportAndMapSymbols -- ^ @U+1F680..U+1F6FF@: Transport and Map Symbols. | AlchemicalSymbols -- ^ @U+1F700..U+1F77F@: Alchemical Symbols. | GeometricShapesExtended -- ^ @U+1F780..U+1F7FF@: Geometric Shapes Extended. | SupplementalArrowsC -- ^ @U+1F800..U+1F8FF@: Supplemental Arrows-C. | SupplementalSymbolsAndPictographs -- ^ @U+1F900..U+1F9FF@: Supplemental Symbols and Pictographs. | ChessSymbols -- ^ @U+1FA00..U+1FA6F@: Chess Symbols. | SymbolsAndPictographsExtendedA -- ^ @U+1FA70..U+1FAFF@: Symbols and Pictographs Extended-A. | SymbolsForLegacyComputing -- ^ @U+1FB00..U+1FBFF@: Symbols for Legacy Computing. | CJKUnifiedIdeographsExtensionB -- ^ @U+20000..U+2A6DF@: CJK Unified Ideographs Extension B. | CJKUnifiedIdeographsExtensionC -- ^ @U+2A700..U+2B73F@: CJK Unified Ideographs Extension C. | CJKUnifiedIdeographsExtensionD -- ^ @U+2B740..U+2B81F@: CJK Unified Ideographs Extension D. | CJKUnifiedIdeographsExtensionE -- ^ @U+2B820..U+2CEAF@: CJK Unified Ideographs Extension E. | CJKUnifiedIdeographsExtensionF -- ^ @U+2CEB0..U+2EBEF@: CJK Unified Ideographs Extension F. | CJKUnifiedIdeographsExtensionI -- ^ @U+2EBF0..U+2EE5F@: CJK Unified Ideographs Extension I. | CJKCompatibilityIdeographsSupplement -- ^ @U+2F800..U+2FA1F@: CJK Compatibility Ideographs Supplement. | CJKUnifiedIdeographsExtensionG -- ^ @U+30000..U+3134F@: CJK Unified Ideographs Extension G. | CJKUnifiedIdeographsExtensionH -- ^ @U+31350..U+323AF@: CJK Unified Ideographs Extension H. | Tags -- ^ @U+E0000..U+E007F@: Tags. | VariationSelectorsSupplement -- ^ @U+E0100..U+E01EF@: Variation Selectors Supplement. | SupplementaryPrivateUseAreaA -- ^ @U+F0000..U+FFFFF@: Supplementary Private Use Area-A. | SupplementaryPrivateUseAreaB -- ^ @U+100000..U+10FFFF@: Supplementary Private Use Area-B. deriving (Enum, Bounded, Eq, Ord, Ix, Show) -- | Block definition -- -- Undefined for values greater than 327. -- -- Returned value: -- -- * Lower bound -- * Upper bound -- * Name (null terminated ASCII string) -- -- @since 0.3.1 blockDefinition :: Int# -> (# Int#, Int#, Addr# #) blockDefinition = \case 0# -> (# 0x0000#, 0x007f#, "Basic Latin\0"# #) 1# -> (# 0x0080#, 0x00ff#, "Latin-1 Supplement\0"# #) 2# -> (# 0x0100#, 0x017f#, "Latin Extended-A\0"# #) 3# -> (# 0x0180#, 0x024f#, "Latin Extended-B\0"# #) 4# -> (# 0x0250#, 0x02af#, "IPA Extensions\0"# #) 5# -> (# 0x02b0#, 0x02ff#, "Spacing Modifier Letters\0"# #) 6# -> (# 0x0300#, 0x036f#, "Combining Diacritical Marks\0"# #) 7# -> (# 0x0370#, 0x03ff#, "Greek and Coptic\0"# #) 8# -> (# 0x0400#, 0x04ff#, "Cyrillic\0"# #) 9# -> (# 0x0500#, 0x052f#, "Cyrillic Supplement\0"# #) 10# -> (# 0x0530#, 0x058f#, "Armenian\0"# #) 11# -> (# 0x0590#, 0x05ff#, "Hebrew\0"# #) 12# -> (# 0x0600#, 0x06ff#, "Arabic\0"# #) 13# -> (# 0x0700#, 0x074f#, "Syriac\0"# #) 14# -> (# 0x0750#, 0x077f#, "Arabic Supplement\0"# #) 15# -> (# 0x0780#, 0x07bf#, "Thaana\0"# #) 16# -> (# 0x07c0#, 0x07ff#, "NKo\0"# #) 17# -> (# 0x0800#, 0x083f#, "Samaritan\0"# #) 18# -> (# 0x0840#, 0x085f#, "Mandaic\0"# #) 19# -> (# 0x0860#, 0x086f#, "Syriac Supplement\0"# #) 20# -> (# 0x0870#, 0x089f#, "Arabic Extended-B\0"# #) 21# -> (# 0x08a0#, 0x08ff#, "Arabic Extended-A\0"# #) 22# -> (# 0x0900#, 0x097f#, "Devanagari\0"# #) 23# -> (# 0x0980#, 0x09ff#, "Bengali\0"# #) 24# -> (# 0x0a00#, 0x0a7f#, "Gurmukhi\0"# #) 25# -> (# 0x0a80#, 0x0aff#, "Gujarati\0"# #) 26# -> (# 0x0b00#, 0x0b7f#, "Oriya\0"# #) 27# -> (# 0x0b80#, 0x0bff#, "Tamil\0"# #) 28# -> (# 0x0c00#, 0x0c7f#, "Telugu\0"# #) 29# -> (# 0x0c80#, 0x0cff#, "Kannada\0"# #) 30# -> (# 0x0d00#, 0x0d7f#, "Malayalam\0"# #) 31# -> (# 0x0d80#, 0x0dff#, "Sinhala\0"# #) 32# -> (# 0x0e00#, 0x0e7f#, "Thai\0"# #) 33# -> (# 0x0e80#, 0x0eff#, "Lao\0"# #) 34# -> (# 0x0f00#, 0x0fff#, "Tibetan\0"# #) 35# -> (# 0x1000#, 0x109f#, "Myanmar\0"# #) 36# -> (# 0x10a0#, 0x10ff#, "Georgian\0"# #) 37# -> (# 0x1100#, 0x11ff#, "Hangul Jamo\0"# #) 38# -> (# 0x1200#, 0x137f#, "Ethiopic\0"# #) 39# -> (# 0x1380#, 0x139f#, "Ethiopic Supplement\0"# #) 40# -> (# 0x13a0#, 0x13ff#, "Cherokee\0"# #) 41# -> (# 0x1400#, 0x167f#, "Unified Canadian Aboriginal Syllabics\0"# #) 42# -> (# 0x1680#, 0x169f#, "Ogham\0"# #) 43# -> (# 0x16a0#, 0x16ff#, "Runic\0"# #) 44# -> (# 0x1700#, 0x171f#, "Tagalog\0"# #) 45# -> (# 0x1720#, 0x173f#, "Hanunoo\0"# #) 46# -> (# 0x1740#, 0x175f#, "Buhid\0"# #) 47# -> (# 0x1760#, 0x177f#, "Tagbanwa\0"# #) 48# -> (# 0x1780#, 0x17ff#, "Khmer\0"# #) 49# -> (# 0x1800#, 0x18af#, "Mongolian\0"# #) 50# -> (# 0x18b0#, 0x18ff#, "Unified Canadian Aboriginal Syllabics Extended\0"# #) 51# -> (# 0x1900#, 0x194f#, "Limbu\0"# #) 52# -> (# 0x1950#, 0x197f#, "Tai Le\0"# #) 53# -> (# 0x1980#, 0x19df#, "New Tai Lue\0"# #) 54# -> (# 0x19e0#, 0x19ff#, "Khmer Symbols\0"# #) 55# -> (# 0x1a00#, 0x1a1f#, "Buginese\0"# #) 56# -> (# 0x1a20#, 0x1aaf#, "Tai Tham\0"# #) 57# -> (# 0x1ab0#, 0x1aff#, "Combining Diacritical Marks Extended\0"# #) 58# -> (# 0x1b00#, 0x1b7f#, "Balinese\0"# #) 59# -> (# 0x1b80#, 0x1bbf#, "Sundanese\0"# #) 60# -> (# 0x1bc0#, 0x1bff#, "Batak\0"# #) 61# -> (# 0x1c00#, 0x1c4f#, "Lepcha\0"# #) 62# -> (# 0x1c50#, 0x1c7f#, "Ol Chiki\0"# #) 63# -> (# 0x1c80#, 0x1c8f#, "Cyrillic Extended-C\0"# #) 64# -> (# 0x1c90#, 0x1cbf#, "Georgian Extended\0"# #) 65# -> (# 0x1cc0#, 0x1ccf#, "Sundanese Supplement\0"# #) 66# -> (# 0x1cd0#, 0x1cff#, "Vedic Extensions\0"# #) 67# -> (# 0x1d00#, 0x1d7f#, "Phonetic Extensions\0"# #) 68# -> (# 0x1d80#, 0x1dbf#, "Phonetic Extensions Supplement\0"# #) 69# -> (# 0x1dc0#, 0x1dff#, "Combining Diacritical Marks Supplement\0"# #) 70# -> (# 0x1e00#, 0x1eff#, "Latin Extended Additional\0"# #) 71# -> (# 0x1f00#, 0x1fff#, "Greek Extended\0"# #) 72# -> (# 0x2000#, 0x206f#, "General Punctuation\0"# #) 73# -> (# 0x2070#, 0x209f#, "Superscripts and Subscripts\0"# #) 74# -> (# 0x20a0#, 0x20cf#, "Currency Symbols\0"# #) 75# -> (# 0x20d0#, 0x20ff#, "Combining Diacritical Marks for Symbols\0"# #) 76# -> (# 0x2100#, 0x214f#, "Letterlike Symbols\0"# #) 77# -> (# 0x2150#, 0x218f#, "Number Forms\0"# #) 78# -> (# 0x2190#, 0x21ff#, "Arrows\0"# #) 79# -> (# 0x2200#, 0x22ff#, "Mathematical Operators\0"# #) 80# -> (# 0x2300#, 0x23ff#, "Miscellaneous Technical\0"# #) 81# -> (# 0x2400#, 0x243f#, "Control Pictures\0"# #) 82# -> (# 0x2440#, 0x245f#, "Optical Character Recognition\0"# #) 83# -> (# 0x2460#, 0x24ff#, "Enclosed Alphanumerics\0"# #) 84# -> (# 0x2500#, 0x257f#, "Box Drawing\0"# #) 85# -> (# 0x2580#, 0x259f#, "Block Elements\0"# #) 86# -> (# 0x25a0#, 0x25ff#, "Geometric Shapes\0"# #) 87# -> (# 0x2600#, 0x26ff#, "Miscellaneous Symbols\0"# #) 88# -> (# 0x2700#, 0x27bf#, "Dingbats\0"# #) 89# -> (# 0x27c0#, 0x27ef#, "Miscellaneous Mathematical Symbols-A\0"# #) 90# -> (# 0x27f0#, 0x27ff#, "Supplemental Arrows-A\0"# #) 91# -> (# 0x2800#, 0x28ff#, "Braille Patterns\0"# #) 92# -> (# 0x2900#, 0x297f#, "Supplemental Arrows-B\0"# #) 93# -> (# 0x2980#, 0x29ff#, "Miscellaneous Mathematical Symbols-B\0"# #) 94# -> (# 0x2a00#, 0x2aff#, "Supplemental Mathematical Operators\0"# #) 95# -> (# 0x2b00#, 0x2bff#, "Miscellaneous Symbols and Arrows\0"# #) 96# -> (# 0x2c00#, 0x2c5f#, "Glagolitic\0"# #) 97# -> (# 0x2c60#, 0x2c7f#, "Latin Extended-C\0"# #) 98# -> (# 0x2c80#, 0x2cff#, "Coptic\0"# #) 99# -> (# 0x2d00#, 0x2d2f#, "Georgian Supplement\0"# #) 100# -> (# 0x2d30#, 0x2d7f#, "Tifinagh\0"# #) 101# -> (# 0x2d80#, 0x2ddf#, "Ethiopic Extended\0"# #) 102# -> (# 0x2de0#, 0x2dff#, "Cyrillic Extended-A\0"# #) 103# -> (# 0x2e00#, 0x2e7f#, "Supplemental Punctuation\0"# #) 104# -> (# 0x2e80#, 0x2eff#, "CJK Radicals Supplement\0"# #) 105# -> (# 0x2f00#, 0x2fdf#, "Kangxi Radicals\0"# #) 106# -> (# 0x2ff0#, 0x2fff#, "Ideographic Description Characters\0"# #) 107# -> (# 0x3000#, 0x303f#, "CJK Symbols and Punctuation\0"# #) 108# -> (# 0x3040#, 0x309f#, "Hiragana\0"# #) 109# -> (# 0x30a0#, 0x30ff#, "Katakana\0"# #) 110# -> (# 0x3100#, 0x312f#, "Bopomofo\0"# #) 111# -> (# 0x3130#, 0x318f#, "Hangul Compatibility Jamo\0"# #) 112# -> (# 0x3190#, 0x319f#, "Kanbun\0"# #) 113# -> (# 0x31a0#, 0x31bf#, "Bopomofo Extended\0"# #) 114# -> (# 0x31c0#, 0x31ef#, "CJK Strokes\0"# #) 115# -> (# 0x31f0#, 0x31ff#, "Katakana Phonetic Extensions\0"# #) 116# -> (# 0x3200#, 0x32ff#, "Enclosed CJK Letters and Months\0"# #) 117# -> (# 0x3300#, 0x33ff#, "CJK Compatibility\0"# #) 118# -> (# 0x3400#, 0x4dbf#, "CJK Unified Ideographs Extension A\0"# #) 119# -> (# 0x4dc0#, 0x4dff#, "Yijing Hexagram Symbols\0"# #) 120# -> (# 0x4e00#, 0x9fff#, "CJK Unified Ideographs\0"# #) 121# -> (# 0xa000#, 0xa48f#, "Yi Syllables\0"# #) 122# -> (# 0xa490#, 0xa4cf#, "Yi Radicals\0"# #) 123# -> (# 0xa4d0#, 0xa4ff#, "Lisu\0"# #) 124# -> (# 0xa500#, 0xa63f#, "Vai\0"# #) 125# -> (# 0xa640#, 0xa69f#, "Cyrillic Extended-B\0"# #) 126# -> (# 0xa6a0#, 0xa6ff#, "Bamum\0"# #) 127# -> (# 0xa700#, 0xa71f#, "Modifier Tone Letters\0"# #) 128# -> (# 0xa720#, 0xa7ff#, "Latin Extended-D\0"# #) 129# -> (# 0xa800#, 0xa82f#, "Syloti Nagri\0"# #) 130# -> (# 0xa830#, 0xa83f#, "Common Indic Number Forms\0"# #) 131# -> (# 0xa840#, 0xa87f#, "Phags-pa\0"# #) 132# -> (# 0xa880#, 0xa8df#, "Saurashtra\0"# #) 133# -> (# 0xa8e0#, 0xa8ff#, "Devanagari Extended\0"# #) 134# -> (# 0xa900#, 0xa92f#, "Kayah Li\0"# #) 135# -> (# 0xa930#, 0xa95f#, "Rejang\0"# #) 136# -> (# 0xa960#, 0xa97f#, "Hangul Jamo Extended-A\0"# #) 137# -> (# 0xa980#, 0xa9df#, "Javanese\0"# #) 138# -> (# 0xa9e0#, 0xa9ff#, "Myanmar Extended-B\0"# #) 139# -> (# 0xaa00#, 0xaa5f#, "Cham\0"# #) 140# -> (# 0xaa60#, 0xaa7f#, "Myanmar Extended-A\0"# #) 141# -> (# 0xaa80#, 0xaadf#, "Tai Viet\0"# #) 142# -> (# 0xaae0#, 0xaaff#, "Meetei Mayek Extensions\0"# #) 143# -> (# 0xab00#, 0xab2f#, "Ethiopic Extended-A\0"# #) 144# -> (# 0xab30#, 0xab6f#, "Latin Extended-E\0"# #) 145# -> (# 0xab70#, 0xabbf#, "Cherokee Supplement\0"# #) 146# -> (# 0xabc0#, 0xabff#, "Meetei Mayek\0"# #) 147# -> (# 0xac00#, 0xd7af#, "Hangul Syllables\0"# #) 148# -> (# 0xd7b0#, 0xd7ff#, "Hangul Jamo Extended-B\0"# #) 149# -> (# 0xd800#, 0xdb7f#, "High Surrogates\0"# #) 150# -> (# 0xdb80#, 0xdbff#, "High Private Use Surrogates\0"# #) 151# -> (# 0xdc00#, 0xdfff#, "Low Surrogates\0"# #) 152# -> (# 0xe000#, 0xf8ff#, "Private Use Area\0"# #) 153# -> (# 0xf900#, 0xfaff#, "CJK Compatibility Ideographs\0"# #) 154# -> (# 0xfb00#, 0xfb4f#, "Alphabetic Presentation Forms\0"# #) 155# -> (# 0xfb50#, 0xfdff#, "Arabic Presentation Forms-A\0"# #) 156# -> (# 0xfe00#, 0xfe0f#, "Variation Selectors\0"# #) 157# -> (# 0xfe10#, 0xfe1f#, "Vertical Forms\0"# #) 158# -> (# 0xfe20#, 0xfe2f#, "Combining Half Marks\0"# #) 159# -> (# 0xfe30#, 0xfe4f#, "CJK Compatibility Forms\0"# #) 160# -> (# 0xfe50#, 0xfe6f#, "Small Form Variants\0"# #) 161# -> (# 0xfe70#, 0xfeff#, "Arabic Presentation Forms-B\0"# #) 162# -> (# 0xff00#, 0xffef#, "Halfwidth and Fullwidth Forms\0"# #) 163# -> (# 0xfff0#, 0xffff#, "Specials\0"# #) 164# -> (# 0x10000#, 0x1007f#, "Linear B Syllabary\0"# #) 165# -> (# 0x10080#, 0x100ff#, "Linear B Ideograms\0"# #) 166# -> (# 0x10100#, 0x1013f#, "Aegean Numbers\0"# #) 167# -> (# 0x10140#, 0x1018f#, "Ancient Greek Numbers\0"# #) 168# -> (# 0x10190#, 0x101cf#, "Ancient Symbols\0"# #) 169# -> (# 0x101d0#, 0x101ff#, "Phaistos Disc\0"# #) 170# -> (# 0x10280#, 0x1029f#, "Lycian\0"# #) 171# -> (# 0x102a0#, 0x102df#, "Carian\0"# #) 172# -> (# 0x102e0#, 0x102ff#, "Coptic Epact Numbers\0"# #) 173# -> (# 0x10300#, 0x1032f#, "Old Italic\0"# #) 174# -> (# 0x10330#, 0x1034f#, "Gothic\0"# #) 175# -> (# 0x10350#, 0x1037f#, "Old Permic\0"# #) 176# -> (# 0x10380#, 0x1039f#, "Ugaritic\0"# #) 177# -> (# 0x103a0#, 0x103df#, "Old Persian\0"# #) 178# -> (# 0x10400#, 0x1044f#, "Deseret\0"# #) 179# -> (# 0x10450#, 0x1047f#, "Shavian\0"# #) 180# -> (# 0x10480#, 0x104af#, "Osmanya\0"# #) 181# -> (# 0x104b0#, 0x104ff#, "Osage\0"# #) 182# -> (# 0x10500#, 0x1052f#, "Elbasan\0"# #) 183# -> (# 0x10530#, 0x1056f#, "Caucasian Albanian\0"# #) 184# -> (# 0x10570#, 0x105bf#, "Vithkuqi\0"# #) 185# -> (# 0x10600#, 0x1077f#, "Linear A\0"# #) 186# -> (# 0x10780#, 0x107bf#, "Latin Extended-F\0"# #) 187# -> (# 0x10800#, 0x1083f#, "Cypriot Syllabary\0"# #) 188# -> (# 0x10840#, 0x1085f#, "Imperial Aramaic\0"# #) 189# -> (# 0x10860#, 0x1087f#, "Palmyrene\0"# #) 190# -> (# 0x10880#, 0x108af#, "Nabataean\0"# #) 191# -> (# 0x108e0#, 0x108ff#, "Hatran\0"# #) 192# -> (# 0x10900#, 0x1091f#, "Phoenician\0"# #) 193# -> (# 0x10920#, 0x1093f#, "Lydian\0"# #) 194# -> (# 0x10980#, 0x1099f#, "Meroitic Hieroglyphs\0"# #) 195# -> (# 0x109a0#, 0x109ff#, "Meroitic Cursive\0"# #) 196# -> (# 0x10a00#, 0x10a5f#, "Kharoshthi\0"# #) 197# -> (# 0x10a60#, 0x10a7f#, "Old South Arabian\0"# #) 198# -> (# 0x10a80#, 0x10a9f#, "Old North Arabian\0"# #) 199# -> (# 0x10ac0#, 0x10aff#, "Manichaean\0"# #) 200# -> (# 0x10b00#, 0x10b3f#, "Avestan\0"# #) 201# -> (# 0x10b40#, 0x10b5f#, "Inscriptional Parthian\0"# #) 202# -> (# 0x10b60#, 0x10b7f#, "Inscriptional Pahlavi\0"# #) 203# -> (# 0x10b80#, 0x10baf#, "Psalter Pahlavi\0"# #) 204# -> (# 0x10c00#, 0x10c4f#, "Old Turkic\0"# #) 205# -> (# 0x10c80#, 0x10cff#, "Old Hungarian\0"# #) 206# -> (# 0x10d00#, 0x10d3f#, "Hanifi Rohingya\0"# #) 207# -> (# 0x10e60#, 0x10e7f#, "Rumi Numeral Symbols\0"# #) 208# -> (# 0x10e80#, 0x10ebf#, "Yezidi\0"# #) 209# -> (# 0x10ec0#, 0x10eff#, "Arabic Extended-C\0"# #) 210# -> (# 0x10f00#, 0x10f2f#, "Old Sogdian\0"# #) 211# -> (# 0x10f30#, 0x10f6f#, "Sogdian\0"# #) 212# -> (# 0x10f70#, 0x10faf#, "Old Uyghur\0"# #) 213# -> (# 0x10fb0#, 0x10fdf#, "Chorasmian\0"# #) 214# -> (# 0x10fe0#, 0x10fff#, "Elymaic\0"# #) 215# -> (# 0x11000#, 0x1107f#, "Brahmi\0"# #) 216# -> (# 0x11080#, 0x110cf#, "Kaithi\0"# #) 217# -> (# 0x110d0#, 0x110ff#, "Sora Sompeng\0"# #) 218# -> (# 0x11100#, 0x1114f#, "Chakma\0"# #) 219# -> (# 0x11150#, 0x1117f#, "Mahajani\0"# #) 220# -> (# 0x11180#, 0x111df#, "Sharada\0"# #) 221# -> (# 0x111e0#, 0x111ff#, "Sinhala Archaic Numbers\0"# #) 222# -> (# 0x11200#, 0x1124f#, "Khojki\0"# #) 223# -> (# 0x11280#, 0x112af#, "Multani\0"# #) 224# -> (# 0x112b0#, 0x112ff#, "Khudawadi\0"# #) 225# -> (# 0x11300#, 0x1137f#, "Grantha\0"# #) 226# -> (# 0x11400#, 0x1147f#, "Newa\0"# #) 227# -> (# 0x11480#, 0x114df#, "Tirhuta\0"# #) 228# -> (# 0x11580#, 0x115ff#, "Siddham\0"# #) 229# -> (# 0x11600#, 0x1165f#, "Modi\0"# #) 230# -> (# 0x11660#, 0x1167f#, "Mongolian Supplement\0"# #) 231# -> (# 0x11680#, 0x116cf#, "Takri\0"# #) 232# -> (# 0x11700#, 0x1174f#, "Ahom\0"# #) 233# -> (# 0x11800#, 0x1184f#, "Dogra\0"# #) 234# -> (# 0x118a0#, 0x118ff#, "Warang Citi\0"# #) 235# -> (# 0x11900#, 0x1195f#, "Dives Akuru\0"# #) 236# -> (# 0x119a0#, 0x119ff#, "Nandinagari\0"# #) 237# -> (# 0x11a00#, 0x11a4f#, "Zanabazar Square\0"# #) 238# -> (# 0x11a50#, 0x11aaf#, "Soyombo\0"# #) 239# -> (# 0x11ab0#, 0x11abf#, "Unified Canadian Aboriginal Syllabics Extended-A\0"# #) 240# -> (# 0x11ac0#, 0x11aff#, "Pau Cin Hau\0"# #) 241# -> (# 0x11b00#, 0x11b5f#, "Devanagari Extended-A\0"# #) 242# -> (# 0x11c00#, 0x11c6f#, "Bhaiksuki\0"# #) 243# -> (# 0x11c70#, 0x11cbf#, "Marchen\0"# #) 244# -> (# 0x11d00#, 0x11d5f#, "Masaram Gondi\0"# #) 245# -> (# 0x11d60#, 0x11daf#, "Gunjala Gondi\0"# #) 246# -> (# 0x11ee0#, 0x11eff#, "Makasar\0"# #) 247# -> (# 0x11f00#, 0x11f5f#, "Kawi\0"# #) 248# -> (# 0x11fb0#, 0x11fbf#, "Lisu Supplement\0"# #) 249# -> (# 0x11fc0#, 0x11fff#, "Tamil Supplement\0"# #) 250# -> (# 0x12000#, 0x123ff#, "Cuneiform\0"# #) 251# -> (# 0x12400#, 0x1247f#, "Cuneiform Numbers and Punctuation\0"# #) 252# -> (# 0x12480#, 0x1254f#, "Early Dynastic Cuneiform\0"# #) 253# -> (# 0x12f90#, 0x12fff#, "Cypro-Minoan\0"# #) 254# -> (# 0x13000#, 0x1342f#, "Egyptian Hieroglyphs\0"# #) 255# -> (# 0x13430#, 0x1345f#, "Egyptian Hieroglyph Format Controls\0"# #) 256# -> (# 0x14400#, 0x1467f#, "Anatolian Hieroglyphs\0"# #) 257# -> (# 0x16800#, 0x16a3f#, "Bamum Supplement\0"# #) 258# -> (# 0x16a40#, 0x16a6f#, "Mro\0"# #) 259# -> (# 0x16a70#, 0x16acf#, "Tangsa\0"# #) 260# -> (# 0x16ad0#, 0x16aff#, "Bassa Vah\0"# #) 261# -> (# 0x16b00#, 0x16b8f#, "Pahawh Hmong\0"# #) 262# -> (# 0x16e40#, 0x16e9f#, "Medefaidrin\0"# #) 263# -> (# 0x16f00#, 0x16f9f#, "Miao\0"# #) 264# -> (# 0x16fe0#, 0x16fff#, "Ideographic Symbols and Punctuation\0"# #) 265# -> (# 0x17000#, 0x187ff#, "Tangut\0"# #) 266# -> (# 0x18800#, 0x18aff#, "Tangut Components\0"# #) 267# -> (# 0x18b00#, 0x18cff#, "Khitan Small Script\0"# #) 268# -> (# 0x18d00#, 0x18d7f#, "Tangut Supplement\0"# #) 269# -> (# 0x1aff0#, 0x1afff#, "Kana Extended-B\0"# #) 270# -> (# 0x1b000#, 0x1b0ff#, "Kana Supplement\0"# #) 271# -> (# 0x1b100#, 0x1b12f#, "Kana Extended-A\0"# #) 272# -> (# 0x1b130#, 0x1b16f#, "Small Kana Extension\0"# #) 273# -> (# 0x1b170#, 0x1b2ff#, "Nushu\0"# #) 274# -> (# 0x1bc00#, 0x1bc9f#, "Duployan\0"# #) 275# -> (# 0x1bca0#, 0x1bcaf#, "Shorthand Format Controls\0"# #) 276# -> (# 0x1cf00#, 0x1cfcf#, "Znamenny Musical Notation\0"# #) 277# -> (# 0x1d000#, 0x1d0ff#, "Byzantine Musical Symbols\0"# #) 278# -> (# 0x1d100#, 0x1d1ff#, "Musical Symbols\0"# #) 279# -> (# 0x1d200#, 0x1d24f#, "Ancient Greek Musical Notation\0"# #) 280# -> (# 0x1d2c0#, 0x1d2df#, "Kaktovik Numerals\0"# #) 281# -> (# 0x1d2e0#, 0x1d2ff#, "Mayan Numerals\0"# #) 282# -> (# 0x1d300#, 0x1d35f#, "Tai Xuan Jing Symbols\0"# #) 283# -> (# 0x1d360#, 0x1d37f#, "Counting Rod Numerals\0"# #) 284# -> (# 0x1d400#, 0x1d7ff#, "Mathematical Alphanumeric Symbols\0"# #) 285# -> (# 0x1d800#, 0x1daaf#, "Sutton SignWriting\0"# #) 286# -> (# 0x1df00#, 0x1dfff#, "Latin Extended-G\0"# #) 287# -> (# 0x1e000#, 0x1e02f#, "Glagolitic Supplement\0"# #) 288# -> (# 0x1e030#, 0x1e08f#, "Cyrillic Extended-D\0"# #) 289# -> (# 0x1e100#, 0x1e14f#, "Nyiakeng Puachue Hmong\0"# #) 290# -> (# 0x1e290#, 0x1e2bf#, "Toto\0"# #) 291# -> (# 0x1e2c0#, 0x1e2ff#, "Wancho\0"# #) 292# -> (# 0x1e4d0#, 0x1e4ff#, "Nag Mundari\0"# #) 293# -> (# 0x1e7e0#, 0x1e7ff#, "Ethiopic Extended-B\0"# #) 294# -> (# 0x1e800#, 0x1e8df#, "Mende Kikakui\0"# #) 295# -> (# 0x1e900#, 0x1e95f#, "Adlam\0"# #) 296# -> (# 0x1ec70#, 0x1ecbf#, "Indic Siyaq Numbers\0"# #) 297# -> (# 0x1ed00#, 0x1ed4f#, "Ottoman Siyaq Numbers\0"# #) 298# -> (# 0x1ee00#, 0x1eeff#, "Arabic Mathematical Alphabetic Symbols\0"# #) 299# -> (# 0x1f000#, 0x1f02f#, "Mahjong Tiles\0"# #) 300# -> (# 0x1f030#, 0x1f09f#, "Domino Tiles\0"# #) 301# -> (# 0x1f0a0#, 0x1f0ff#, "Playing Cards\0"# #) 302# -> (# 0x1f100#, 0x1f1ff#, "Enclosed Alphanumeric Supplement\0"# #) 303# -> (# 0x1f200#, 0x1f2ff#, "Enclosed Ideographic Supplement\0"# #) 304# -> (# 0x1f300#, 0x1f5ff#, "Miscellaneous Symbols and Pictographs\0"# #) 305# -> (# 0x1f600#, 0x1f64f#, "Emoticons\0"# #) 306# -> (# 0x1f650#, 0x1f67f#, "Ornamental Dingbats\0"# #) 307# -> (# 0x1f680#, 0x1f6ff#, "Transport and Map Symbols\0"# #) 308# -> (# 0x1f700#, 0x1f77f#, "Alchemical Symbols\0"# #) 309# -> (# 0x1f780#, 0x1f7ff#, "Geometric Shapes Extended\0"# #) 310# -> (# 0x1f800#, 0x1f8ff#, "Supplemental Arrows-C\0"# #) 311# -> (# 0x1f900#, 0x1f9ff#, "Supplemental Symbols and Pictographs\0"# #) 312# -> (# 0x1fa00#, 0x1fa6f#, "Chess Symbols\0"# #) 313# -> (# 0x1fa70#, 0x1faff#, "Symbols and Pictographs Extended-A\0"# #) 314# -> (# 0x1fb00#, 0x1fbff#, "Symbols for Legacy Computing\0"# #) 315# -> (# 0x20000#, 0x2a6df#, "CJK Unified Ideographs Extension B\0"# #) 316# -> (# 0x2a700#, 0x2b73f#, "CJK Unified Ideographs Extension C\0"# #) 317# -> (# 0x2b740#, 0x2b81f#, "CJK Unified Ideographs Extension D\0"# #) 318# -> (# 0x2b820#, 0x2ceaf#, "CJK Unified Ideographs Extension E\0"# #) 319# -> (# 0x2ceb0#, 0x2ebef#, "CJK Unified Ideographs Extension F\0"# #) 320# -> (# 0x2ebf0#, 0x2ee5f#, "CJK Unified Ideographs Extension I\0"# #) 321# -> (# 0x2f800#, 0x2fa1f#, "CJK Compatibility Ideographs Supplement\0"# #) 322# -> (# 0x30000#, 0x3134f#, "CJK Unified Ideographs Extension G\0"# #) 323# -> (# 0x31350#, 0x323af#, "CJK Unified Ideographs Extension H\0"# #) 324# -> (# 0xe0000#, 0xe007f#, "Tags\0"# #) 325# -> (# 0xe0100#, 0xe01ef#, "Variation Selectors Supplement\0"# #) 326# -> (# 0xf0000#, 0xfffff#, "Supplementary Private Use Area-A\0"# #) _ -> (# 0x100000#, 0x10ffff#, "Supplementary Private Use Area-B\0"# #) -- | Character block, if defined, else -1. -- -- @since 0.3.1 block :: Char# -> Int# block c# = getBlock 0# 327# where -- [NOTE] Encoding -- A range is encoded as two LE Word32: -- • First one is the lower bound, where the higher 11 bits are the block -- index and the lower 21 bits are the codepoint. -- • Second one is the upper bound, which correspond to the codepoint. cp# = int2Word# (ord# c#) -- Binary search getBlock l# u# = if isTrue# (l# ># u#) then -1# else let k# = l# +# uncheckedIShiftRL# (u# -# l#) 1# j# = k# `uncheckedIShiftL#` 1# cpL0# = getRawCodePoint# j# cpL# = cpL0# `and#` 0x1fffff## -- Mask for codepoint: [0..0x10fff] cpU# = getRawCodePoint# (j# +# 1#) in if isTrue# (cpU# `ltWord#` cp#) -- cp > upper bound then getBlock (k# +# 1#) u# -- check lower bound else if isTrue# (cp# `ltWord#` cpL#) -- cp < lower bound then getBlock l# (k# -# 1#) -- cp in block: get block index else let block# = cpL0# `uncheckedShiftRL#` 21# in word2Int# block# getRawCodePoint# = lookupWord32# ranges# -- Encoded ranges !(Ptr ranges#) = rangesBitmap rangesBitmap :: Ptr Word32 rangesBitmap = Ptr "\0\0\0\0\127\0\0\0\128\0\32\0\255\0\0\0\0\1\64\0\127\1\0\0\128\1\96\0\79\2\0\0\80\2\128\0\175\2\0\0\176\2\160\0\255\2\0\0\0\3\192\0\111\3\0\0\112\3\224\0\255\3\0\0\0\4\0\1\255\4\0\0\0\5\32\1\47\5\0\0\48\5\64\1\143\5\0\0\144\5\96\1\255\5\0\0\0\6\128\1\255\6\0\0\0\7\160\1\79\7\0\0\80\7\192\1\127\7\0\0\128\7\224\1\191\7\0\0\192\7\0\2\255\7\0\0\0\8\32\2\63\8\0\0\64\8\64\2\95\8\0\0\96\8\96\2\111\8\0\0\112\8\128\2\159\8\0\0\160\8\160\2\255\8\0\0\0\9\192\2\127\9\0\0\128\9\224\2\255\9\0\0\0\10\0\3\127\10\0\0\128\10\32\3\255\10\0\0\0\11\64\3\127\11\0\0\128\11\96\3\255\11\0\0\0\12\128\3\127\12\0\0\128\12\160\3\255\12\0\0\0\13\192\3\127\13\0\0\128\13\224\3\255\13\0\ \\0\0\14\0\4\127\14\0\0\128\14\32\4\255\14\0\0\0\15\64\4\255\15\0\0\0\16\96\4\159\16\0\0\160\16\128\4\255\16\0\0\0\17\160\4\255\17\0\0\0\18\192\4\127\19\0\0\128\19\224\4\159\19\0\0\160\19\0\5\255\19\0\0\0\20\32\5\127\22\0\0\128\22\64\5\159\22\0\0\160\22\96\5\255\22\0\0\0\23\128\5\31\23\0\0\32\23\160\5\63\23\0\0\64\23\192\5\95\23\0\0\96\23\224\5\127\23\0\0\128\23\0\6\255\23\0\0\0\24\32\6\175\24\0\0\176\24\64\6\255\24\0\0\0\25\96\6\79\25\0\0\80\25\128\6\127\25\0\0\128\25\160\6\223\25\0\0\224\25\192\6\255\25\0\0\0\26\224\6\31\26\0\0\32\26\0\7\175\26\0\0\176\26\32\7\255\26\0\0\0\27\64\7\127\27\0\0\128\27\96\7\191\27\0\0\192\27\128\7\255\27\0\0\0\28\160\7\79\28\0\0\80\28\192\7\127\28\0\0\128\28\224\7\143\28\ \\0\0\144\28\0\8\191\28\0\0\192\28\32\8\207\28\0\0\208\28\64\8\255\28\0\0\0\29\96\8\127\29\0\0\128\29\128\8\191\29\0\0\192\29\160\8\255\29\0\0\0\30\192\8\255\30\0\0\0\31\224\8\255\31\0\0\0\32\0\9\111\32\0\0\112\32\32\9\159\32\0\0\160\32\64\9\207\32\0\0\208\32\96\9\255\32\0\0\0\33\128\9\79\33\0\0\80\33\160\9\143\33\0\0\144\33\192\9\255\33\0\0\0\34\224\9\255\34\0\0\0\35\0\10\255\35\0\0\0\36\32\10\63\36\0\0\64\36\64\10\95\36\0\0\96\36\96\10\255\36\0\0\0\37\128\10\127\37\0\0\128\37\160\10\159\37\0\0\160\37\192\10\255\37\0\0\0\38\224\10\255\38\0\0\0\39\0\11\191\39\0\0\192\39\32\11\239\39\0\0\240\39\64\11\255\39\0\0\0\40\96\11\255\40\0\0\0\41\128\11\127\41\0\0\128\41\160\11\255\41\0\0\0\42\192\11\255\42\0\0\0\43\224\11\255\ \\43\0\0\0\44\0\12\95\44\0\0\96\44\32\12\127\44\0\0\128\44\64\12\255\44\0\0\0\45\96\12\47\45\0\0\48\45\128\12\127\45\0\0\128\45\160\12\223\45\0\0\224\45\192\12\255\45\0\0\0\46\224\12\127\46\0\0\128\46\0\13\255\46\0\0\0\47\32\13\223\47\0\0\240\47\64\13\255\47\0\0\0\48\96\13\63\48\0\0\64\48\128\13\159\48\0\0\160\48\160\13\255\48\0\0\0\49\192\13\47\49\0\0\48\49\224\13\143\49\0\0\144\49\0\14\159\49\0\0\160\49\32\14\191\49\0\0\192\49\64\14\239\49\0\0\240\49\96\14\255\49\0\0\0\50\128\14\255\50\0\0\0\51\160\14\255\51\0\0\0\52\192\14\191\77\0\0\192\77\224\14\255\77\0\0\0\78\0\15\255\159\0\0\0\160\32\15\143\164\0\0\144\164\64\15\207\164\0\0\208\164\96\15\255\164\0\0\0\165\128\15\63\166\0\0\64\166\160\15\159\166\0\0\160\166\192\15\255\166\0\0\0\167\224\15\ \\31\167\0\0\32\167\0\16\255\167\0\0\0\168\32\16\47\168\0\0\48\168\64\16\63\168\0\0\64\168\96\16\127\168\0\0\128\168\128\16\223\168\0\0\224\168\160\16\255\168\0\0\0\169\192\16\47\169\0\0\48\169\224\16\95\169\0\0\96\169\0\17\127\169\0\0\128\169\32\17\223\169\0\0\224\169\64\17\255\169\0\0\0\170\96\17\95\170\0\0\96\170\128\17\127\170\0\0\128\170\160\17\223\170\0\0\224\170\192\17\255\170\0\0\0\171\224\17\47\171\0\0\48\171\0\18\111\171\0\0\112\171\32\18\191\171\0\0\192\171\64\18\255\171\0\0\0\172\96\18\175\215\0\0\176\215\128\18\255\215\0\0\0\216\160\18\127\219\0\0\128\219\192\18\255\219\0\0\0\220\224\18\255\223\0\0\0\224\0\19\255\248\0\0\0\249\32\19\255\250\0\0\0\251\64\19\79\251\0\0\80\251\96\19\255\253\0\0\0\254\128\19\15\254\0\0\16\254\160\19\31\254\0\0\32\254\192\19\47\254\0\0\48\254\224\ \\19\79\254\0\0\80\254\0\20\111\254\0\0\112\254\32\20\255\254\0\0\0\255\64\20\239\255\0\0\240\255\96\20\255\255\0\0\0\0\129\20\127\0\1\0\128\0\161\20\255\0\1\0\0\1\193\20\63\1\1\0\64\1\225\20\143\1\1\0\144\1\1\21\207\1\1\0\208\1\33\21\255\1\1\0\128\2\65\21\159\2\1\0\160\2\97\21\223\2\1\0\224\2\129\21\255\2\1\0\0\3\161\21\47\3\1\0\48\3\193\21\79\3\1\0\80\3\225\21\127\3\1\0\128\3\1\22\159\3\1\0\160\3\33\22\223\3\1\0\0\4\65\22\79\4\1\0\80\4\97\22\127\4\1\0\128\4\129\22\175\4\1\0\176\4\161\22\255\4\1\0\0\5\193\22\47\5\1\0\48\5\225\22\111\5\1\0\112\5\1\23\191\5\1\0\0\6\33\23\127\7\1\0\128\7\65\23\191\7\1\0\0\8\97\23\63\8\1\0\64\8\129\23\95\8\1\0\96\8\161\23\127\8\1\0\128\8\193\23\175\8\1\0\224\8\ \\225\23\255\8\1\0\0\9\1\24\31\9\1\0\32\9\33\24\63\9\1\0\128\9\65\24\159\9\1\0\160\9\97\24\255\9\1\0\0\10\129\24\95\10\1\0\96\10\161\24\127\10\1\0\128\10\193\24\159\10\1\0\192\10\225\24\255\10\1\0\0\11\1\25\63\11\1\0\64\11\33\25\95\11\1\0\96\11\65\25\127\11\1\0\128\11\97\25\175\11\1\0\0\12\129\25\79\12\1\0\128\12\161\25\255\12\1\0\0\13\193\25\63\13\1\0\96\14\225\25\127\14\1\0\128\14\1\26\191\14\1\0\192\14\33\26\255\14\1\0\0\15\65\26\47\15\1\0\48\15\97\26\111\15\1\0\112\15\129\26\175\15\1\0\176\15\161\26\223\15\1\0\224\15\193\26\255\15\1\0\0\16\225\26\127\16\1\0\128\16\1\27\207\16\1\0\208\16\33\27\255\16\1\0\0\17\65\27\79\17\1\0\80\17\97\27\127\17\1\0\128\17\129\27\223\17\1\0\224\17\161\27\255\17\1\0\0\18\193\27\79\18\1\0\128\ \\18\225\27\175\18\1\0\176\18\1\28\255\18\1\0\0\19\33\28\127\19\1\0\0\20\65\28\127\20\1\0\128\20\97\28\223\20\1\0\128\21\129\28\255\21\1\0\0\22\161\28\95\22\1\0\96\22\193\28\127\22\1\0\128\22\225\28\207\22\1\0\0\23\1\29\79\23\1\0\0\24\33\29\79\24\1\0\160\24\65\29\255\24\1\0\0\25\97\29\95\25\1\0\160\25\129\29\255\25\1\0\0\26\161\29\79\26\1\0\80\26\193\29\175\26\1\0\176\26\225\29\191\26\1\0\192\26\1\30\255\26\1\0\0\27\33\30\95\27\1\0\0\28\65\30\111\28\1\0\112\28\97\30\191\28\1\0\0\29\129\30\95\29\1\0\96\29\161\30\175\29\1\0\224\30\193\30\255\30\1\0\0\31\225\30\95\31\1\0\176\31\1\31\191\31\1\0\192\31\33\31\255\31\1\0\0\32\65\31\255\35\1\0\0\36\97\31\127\36\1\0\128\36\129\31\79\37\1\0\144\47\161\31\255\47\1\0\0\48\193\31\47\52\1\0\ \\48\52\225\31\95\52\1\0\0\68\1\32\127\70\1\0\0\104\33\32\63\106\1\0\64\106\65\32\111\106\1\0\112\106\97\32\207\106\1\0\208\106\129\32\255\106\1\0\0\107\161\32\143\107\1\0\64\110\193\32\159\110\1\0\0\111\225\32\159\111\1\0\224\111\1\33\255\111\1\0\0\112\33\33\255\135\1\0\0\136\65\33\255\138\1\0\0\139\97\33\255\140\1\0\0\141\129\33\127\141\1\0\240\175\161\33\255\175\1\0\0\176\193\33\255\176\1\0\0\177\225\33\47\177\1\0\48\177\1\34\111\177\1\0\112\177\33\34\255\178\1\0\0\188\65\34\159\188\1\0\160\188\97\34\175\188\1\0\0\207\129\34\207\207\1\0\0\208\161\34\255\208\1\0\0\209\193\34\255\209\1\0\0\210\225\34\79\210\1\0\192\210\1\35\223\210\1\0\224\210\33\35\255\210\1\0\0\211\65\35\95\211\1\0\96\211\97\35\127\211\1\0\0\212\129\35\255\215\1\0\0\216\161\35\175\218\1\0\0\223\193\35\255\223\1\ \\0\0\224\225\35\47\224\1\0\48\224\1\36\143\224\1\0\0\225\33\36\79\225\1\0\144\226\65\36\191\226\1\0\192\226\97\36\255\226\1\0\208\228\129\36\255\228\1\0\224\231\161\36\255\231\1\0\0\232\193\36\223\232\1\0\0\233\225\36\95\233\1\0\112\236\1\37\191\236\1\0\0\237\33\37\79\237\1\0\0\238\65\37\255\238\1\0\0\240\97\37\47\240\1\0\48\240\129\37\159\240\1\0\160\240\161\37\255\240\1\0\0\241\193\37\255\241\1\0\0\242\225\37\255\242\1\0\0\243\1\38\255\245\1\0\0\246\33\38\79\246\1\0\80\246\65\38\127\246\1\0\128\246\97\38\255\246\1\0\0\247\129\38\127\247\1\0\128\247\161\38\255\247\1\0\0\248\193\38\255\248\1\0\0\249\225\38\255\249\1\0\0\250\1\39\111\250\1\0\112\250\33\39\255\250\1\0\0\251\65\39\255\251\1\0\0\0\98\39\223\166\2\0\0\167\130\39\63\183\2\0\64\183\162\39\31\184\2\0\32\184\194\39\175\206\ \\2\0\176\206\226\39\239\235\2\0\240\235\2\40\95\238\2\0\0\248\34\40\31\250\2\0\0\0\67\40\79\19\3\0\80\19\99\40\175\35\3\0\0\0\142\40\127\0\14\0\0\1\174\40\239\1\14\0\0\0\207\40\255\255\15\0\0\0\240\40\255\255\16\0"# unicode-data-0.6.0/lib/Unicode/Internal/Char/CaseFolding.hs0000644000000000000000000007552607346545000021561 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/CaseFolding.txt -- | -- Module : Unicode.Internal.Char.CaseFolding -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.CaseFolding (toCasefold) where import Data.Int (Int64) {-# NOINLINE toCasefold #-} toCasefold :: Char -> Int64 toCasefold = \case 'A' -> 0x61 'B' -> 0x62 'C' -> 0x63 'D' -> 0x64 'E' -> 0x65 'F' -> 0x66 'G' -> 0x67 'H' -> 0x68 'I' -> 0x69 'J' -> 0x6a 'K' -> 0x6b 'L' -> 0x6c 'M' -> 0x6d 'N' -> 0x6e 'O' -> 0x6f 'P' -> 0x70 'Q' -> 0x71 'R' -> 0x72 'S' -> 0x73 'T' -> 0x74 'U' -> 0x75 'V' -> 0x76 'W' -> 0x77 'X' -> 0x78 'Y' -> 0x79 'Z' -> 0x7a '\181' -> 0x3bc '\192' -> 0xe0 '\193' -> 0xe1 '\194' -> 0xe2 '\195' -> 0xe3 '\196' -> 0xe4 '\197' -> 0xe5 '\198' -> 0xe6 '\199' -> 0xe7 '\200' -> 0xe8 '\201' -> 0xe9 '\202' -> 0xea '\203' -> 0xeb '\204' -> 0xec '\205' -> 0xed '\206' -> 0xee '\207' -> 0xef '\208' -> 0xf0 '\209' -> 0xf1 '\210' -> 0xf2 '\211' -> 0xf3 '\212' -> 0xf4 '\213' -> 0xf5 '\214' -> 0xf6 '\216' -> 0xf8 '\217' -> 0xf9 '\218' -> 0xfa '\219' -> 0xfb '\220' -> 0xfc '\221' -> 0xfd '\222' -> 0xfe '\223' -> 0xe600073 '\256' -> 0x101 '\258' -> 0x103 '\260' -> 0x105 '\262' -> 0x107 '\264' -> 0x109 '\266' -> 0x10b '\268' -> 0x10d '\270' -> 0x10f '\272' -> 0x111 '\274' -> 0x113 '\276' -> 0x115 '\278' -> 0x117 '\280' -> 0x119 '\282' -> 0x11b '\284' -> 0x11d '\286' -> 0x11f '\288' -> 0x121 '\290' -> 0x123 '\292' -> 0x125 '\294' -> 0x127 '\296' -> 0x129 '\298' -> 0x12b '\300' -> 0x12d '\302' -> 0x12f '\304' -> 0x60e00069 '\306' -> 0x133 '\308' -> 0x135 '\310' -> 0x137 '\313' -> 0x13a '\315' -> 0x13c '\317' -> 0x13e '\319' -> 0x140 '\321' -> 0x142 '\323' -> 0x144 '\325' -> 0x146 '\327' -> 0x148 '\329' -> 0xdc002bc '\330' -> 0x14b '\332' -> 0x14d '\334' -> 0x14f '\336' -> 0x151 '\338' -> 0x153 '\340' -> 0x155 '\342' -> 0x157 '\344' -> 0x159 '\346' -> 0x15b '\348' -> 0x15d '\350' -> 0x15f '\352' -> 0x161 '\354' -> 0x163 '\356' -> 0x165 '\358' -> 0x167 '\360' -> 0x169 '\362' -> 0x16b '\364' -> 0x16d '\366' -> 0x16f '\368' -> 0x171 '\370' -> 0x173 '\372' -> 0x175 '\374' -> 0x177 '\376' -> 0xff '\377' -> 0x17a '\379' -> 0x17c '\381' -> 0x17e '\383' -> 0x73 '\385' -> 0x253 '\386' -> 0x183 '\388' -> 0x185 '\390' -> 0x254 '\391' -> 0x188 '\393' -> 0x256 '\394' -> 0x257 '\395' -> 0x18c '\398' -> 0x1dd '\399' -> 0x259 '\400' -> 0x25b '\401' -> 0x192 '\403' -> 0x260 '\404' -> 0x263 '\406' -> 0x269 '\407' -> 0x268 '\408' -> 0x199 '\412' -> 0x26f '\413' -> 0x272 '\415' -> 0x275 '\416' -> 0x1a1 '\418' -> 0x1a3 '\420' -> 0x1a5 '\422' -> 0x280 '\423' -> 0x1a8 '\425' -> 0x283 '\428' -> 0x1ad '\430' -> 0x288 '\431' -> 0x1b0 '\433' -> 0x28a '\434' -> 0x28b '\435' -> 0x1b4 '\437' -> 0x1b6 '\439' -> 0x292 '\440' -> 0x1b9 '\444' -> 0x1bd '\452' -> 0x1c6 '\453' -> 0x1c6 '\455' -> 0x1c9 '\456' -> 0x1c9 '\458' -> 0x1cc '\459' -> 0x1cc '\461' -> 0x1ce '\463' -> 0x1d0 '\465' -> 0x1d2 '\467' -> 0x1d4 '\469' -> 0x1d6 '\471' -> 0x1d8 '\473' -> 0x1da '\475' -> 0x1dc '\478' -> 0x1df '\480' -> 0x1e1 '\482' -> 0x1e3 '\484' -> 0x1e5 '\486' -> 0x1e7 '\488' -> 0x1e9 '\490' -> 0x1eb '\492' -> 0x1ed '\494' -> 0x1ef '\496' -> 0x6180006a '\497' -> 0x1f3 '\498' -> 0x1f3 '\500' -> 0x1f5 '\502' -> 0x195 '\503' -> 0x1bf '\504' -> 0x1f9 '\506' -> 0x1fb '\508' -> 0x1fd '\510' -> 0x1ff '\512' -> 0x201 '\514' -> 0x203 '\516' -> 0x205 '\518' -> 0x207 '\520' -> 0x209 '\522' -> 0x20b '\524' -> 0x20d '\526' -> 0x20f '\528' -> 0x211 '\530' -> 0x213 '\532' -> 0x215 '\534' -> 0x217 '\536' -> 0x219 '\538' -> 0x21b '\540' -> 0x21d '\542' -> 0x21f '\544' -> 0x19e '\546' -> 0x223 '\548' -> 0x225 '\550' -> 0x227 '\552' -> 0x229 '\554' -> 0x22b '\556' -> 0x22d '\558' -> 0x22f '\560' -> 0x231 '\562' -> 0x233 '\570' -> 0x2c65 '\571' -> 0x23c '\573' -> 0x19a '\574' -> 0x2c66 '\577' -> 0x242 '\579' -> 0x180 '\580' -> 0x289 '\581' -> 0x28c '\582' -> 0x247 '\584' -> 0x249 '\586' -> 0x24b '\588' -> 0x24d '\590' -> 0x24f '\837' -> 0x3b9 '\880' -> 0x371 '\882' -> 0x373 '\886' -> 0x377 '\895' -> 0x3f3 '\902' -> 0x3ac '\904' -> 0x3ad '\905' -> 0x3ae '\906' -> 0x3af '\908' -> 0x3cc '\910' -> 0x3cd '\911' -> 0x3ce '\912' -> 0xc0400610003b9 '\913' -> 0x3b1 '\914' -> 0x3b2 '\915' -> 0x3b3 '\916' -> 0x3b4 '\917' -> 0x3b5 '\918' -> 0x3b6 '\919' -> 0x3b7 '\920' -> 0x3b8 '\921' -> 0x3b9 '\922' -> 0x3ba '\923' -> 0x3bb '\924' -> 0x3bc '\925' -> 0x3bd '\926' -> 0x3be '\927' -> 0x3bf '\928' -> 0x3c0 '\929' -> 0x3c1 '\931' -> 0x3c3 '\932' -> 0x3c4 '\933' -> 0x3c5 '\934' -> 0x3c6 '\935' -> 0x3c7 '\936' -> 0x3c8 '\937' -> 0x3c9 '\938' -> 0x3ca '\939' -> 0x3cb '\944' -> 0xc0400610003c5 '\962' -> 0x3c3 '\975' -> 0x3d7 '\976' -> 0x3b2 '\977' -> 0x3b8 '\981' -> 0x3c6 '\982' -> 0x3c0 '\984' -> 0x3d9 '\986' -> 0x3db '\988' -> 0x3dd '\990' -> 0x3df '\992' -> 0x3e1 '\994' -> 0x3e3 '\996' -> 0x3e5 '\998' -> 0x3e7 '\1000' -> 0x3e9 '\1002' -> 0x3eb '\1004' -> 0x3ed '\1006' -> 0x3ef '\1008' -> 0x3ba '\1009' -> 0x3c1 '\1012' -> 0x3b8 '\1013' -> 0x3b5 '\1015' -> 0x3f8 '\1017' -> 0x3f2 '\1018' -> 0x3fb '\1021' -> 0x37b '\1022' -> 0x37c '\1023' -> 0x37d '\1024' -> 0x450 '\1025' -> 0x451 '\1026' -> 0x452 '\1027' -> 0x453 '\1028' -> 0x454 '\1029' -> 0x455 '\1030' -> 0x456 '\1031' -> 0x457 '\1032' -> 0x458 '\1033' -> 0x459 '\1034' -> 0x45a '\1035' -> 0x45b '\1036' -> 0x45c '\1037' -> 0x45d '\1038' -> 0x45e '\1039' -> 0x45f '\1040' -> 0x430 '\1041' -> 0x431 '\1042' -> 0x432 '\1043' -> 0x433 '\1044' -> 0x434 '\1045' -> 0x435 '\1046' -> 0x436 '\1047' -> 0x437 '\1048' -> 0x438 '\1049' -> 0x439 '\1050' -> 0x43a '\1051' -> 0x43b '\1052' -> 0x43c '\1053' -> 0x43d '\1054' -> 0x43e '\1055' -> 0x43f '\1056' -> 0x440 '\1057' -> 0x441 '\1058' -> 0x442 '\1059' -> 0x443 '\1060' -> 0x444 '\1061' -> 0x445 '\1062' -> 0x446 '\1063' -> 0x447 '\1064' -> 0x448 '\1065' -> 0x449 '\1066' -> 0x44a '\1067' -> 0x44b '\1068' -> 0x44c '\1069' -> 0x44d '\1070' -> 0x44e '\1071' -> 0x44f '\1120' -> 0x461 '\1122' -> 0x463 '\1124' -> 0x465 '\1126' -> 0x467 '\1128' -> 0x469 '\1130' -> 0x46b '\1132' -> 0x46d '\1134' -> 0x46f '\1136' -> 0x471 '\1138' -> 0x473 '\1140' -> 0x475 '\1142' -> 0x477 '\1144' -> 0x479 '\1146' -> 0x47b '\1148' -> 0x47d '\1150' -> 0x47f '\1152' -> 0x481 '\1162' -> 0x48b '\1164' -> 0x48d '\1166' -> 0x48f '\1168' -> 0x491 '\1170' -> 0x493 '\1172' -> 0x495 '\1174' -> 0x497 '\1176' -> 0x499 '\1178' -> 0x49b '\1180' -> 0x49d '\1182' -> 0x49f '\1184' -> 0x4a1 '\1186' -> 0x4a3 '\1188' -> 0x4a5 '\1190' -> 0x4a7 '\1192' -> 0x4a9 '\1194' -> 0x4ab '\1196' -> 0x4ad '\1198' -> 0x4af '\1200' -> 0x4b1 '\1202' -> 0x4b3 '\1204' -> 0x4b5 '\1206' -> 0x4b7 '\1208' -> 0x4b9 '\1210' -> 0x4bb '\1212' -> 0x4bd '\1214' -> 0x4bf '\1216' -> 0x4cf '\1217' -> 0x4c2 '\1219' -> 0x4c4 '\1221' -> 0x4c6 '\1223' -> 0x4c8 '\1225' -> 0x4ca '\1227' -> 0x4cc '\1229' -> 0x4ce '\1232' -> 0x4d1 '\1234' -> 0x4d3 '\1236' -> 0x4d5 '\1238' -> 0x4d7 '\1240' -> 0x4d9 '\1242' -> 0x4db '\1244' -> 0x4dd '\1246' -> 0x4df '\1248' -> 0x4e1 '\1250' -> 0x4e3 '\1252' -> 0x4e5 '\1254' -> 0x4e7 '\1256' -> 0x4e9 '\1258' -> 0x4eb '\1260' -> 0x4ed '\1262' -> 0x4ef '\1264' -> 0x4f1 '\1266' -> 0x4f3 '\1268' -> 0x4f5 '\1270' -> 0x4f7 '\1272' -> 0x4f9 '\1274' -> 0x4fb '\1276' -> 0x4fd '\1278' -> 0x4ff '\1280' -> 0x501 '\1282' -> 0x503 '\1284' -> 0x505 '\1286' -> 0x507 '\1288' -> 0x509 '\1290' -> 0x50b '\1292' -> 0x50d '\1294' -> 0x50f '\1296' -> 0x511 '\1298' -> 0x513 '\1300' -> 0x515 '\1302' -> 0x517 '\1304' -> 0x519 '\1306' -> 0x51b '\1308' -> 0x51d '\1310' -> 0x51f '\1312' -> 0x521 '\1314' -> 0x523 '\1316' -> 0x525 '\1318' -> 0x527 '\1320' -> 0x529 '\1322' -> 0x52b '\1324' -> 0x52d '\1326' -> 0x52f '\1329' -> 0x561 '\1330' -> 0x562 '\1331' -> 0x563 '\1332' -> 0x564 '\1333' -> 0x565 '\1334' -> 0x566 '\1335' -> 0x567 '\1336' -> 0x568 '\1337' -> 0x569 '\1338' -> 0x56a '\1339' -> 0x56b '\1340' -> 0x56c '\1341' -> 0x56d '\1342' -> 0x56e '\1343' -> 0x56f '\1344' -> 0x570 '\1345' -> 0x571 '\1346' -> 0x572 '\1347' -> 0x573 '\1348' -> 0x574 '\1349' -> 0x575 '\1350' -> 0x576 '\1351' -> 0x577 '\1352' -> 0x578 '\1353' -> 0x579 '\1354' -> 0x57a '\1355' -> 0x57b '\1356' -> 0x57c '\1357' -> 0x57d '\1358' -> 0x57e '\1359' -> 0x57f '\1360' -> 0x580 '\1361' -> 0x581 '\1362' -> 0x582 '\1363' -> 0x583 '\1364' -> 0x584 '\1365' -> 0x585 '\1366' -> 0x586 '\1415' -> 0xb0400565 '\4256' -> 0x2d00 '\4257' -> 0x2d01 '\4258' -> 0x2d02 '\4259' -> 0x2d03 '\4260' -> 0x2d04 '\4261' -> 0x2d05 '\4262' -> 0x2d06 '\4263' -> 0x2d07 '\4264' -> 0x2d08 '\4265' -> 0x2d09 '\4266' -> 0x2d0a '\4267' -> 0x2d0b '\4268' -> 0x2d0c '\4269' -> 0x2d0d '\4270' -> 0x2d0e '\4271' -> 0x2d0f '\4272' -> 0x2d10 '\4273' -> 0x2d11 '\4274' -> 0x2d12 '\4275' -> 0x2d13 '\4276' -> 0x2d14 '\4277' -> 0x2d15 '\4278' -> 0x2d16 '\4279' -> 0x2d17 '\4280' -> 0x2d18 '\4281' -> 0x2d19 '\4282' -> 0x2d1a '\4283' -> 0x2d1b '\4284' -> 0x2d1c '\4285' -> 0x2d1d '\4286' -> 0x2d1e '\4287' -> 0x2d1f '\4288' -> 0x2d20 '\4289' -> 0x2d21 '\4290' -> 0x2d22 '\4291' -> 0x2d23 '\4292' -> 0x2d24 '\4293' -> 0x2d25 '\4295' -> 0x2d27 '\4301' -> 0x2d2d '\5112' -> 0x13f0 '\5113' -> 0x13f1 '\5114' -> 0x13f2 '\5115' -> 0x13f3 '\5116' -> 0x13f4 '\5117' -> 0x13f5 '\7296' -> 0x432 '\7297' -> 0x434 '\7298' -> 0x43e '\7299' -> 0x441 '\7300' -> 0x442 '\7301' -> 0x442 '\7302' -> 0x44a '\7303' -> 0x463 '\7304' -> 0xa64b '\7312' -> 0x10d0 '\7313' -> 0x10d1 '\7314' -> 0x10d2 '\7315' -> 0x10d3 '\7316' -> 0x10d4 '\7317' -> 0x10d5 '\7318' -> 0x10d6 '\7319' -> 0x10d7 '\7320' -> 0x10d8 '\7321' -> 0x10d9 '\7322' -> 0x10da '\7323' -> 0x10db '\7324' -> 0x10dc '\7325' -> 0x10dd '\7326' -> 0x10de '\7327' -> 0x10df '\7328' -> 0x10e0 '\7329' -> 0x10e1 '\7330' -> 0x10e2 '\7331' -> 0x10e3 '\7332' -> 0x10e4 '\7333' -> 0x10e5 '\7334' -> 0x10e6 '\7335' -> 0x10e7 '\7336' -> 0x10e8 '\7337' -> 0x10e9 '\7338' -> 0x10ea '\7339' -> 0x10eb '\7340' -> 0x10ec '\7341' -> 0x10ed '\7342' -> 0x10ee '\7343' -> 0x10ef '\7344' -> 0x10f0 '\7345' -> 0x10f1 '\7346' -> 0x10f2 '\7347' -> 0x10f3 '\7348' -> 0x10f4 '\7349' -> 0x10f5 '\7350' -> 0x10f6 '\7351' -> 0x10f7 '\7352' -> 0x10f8 '\7353' -> 0x10f9 '\7354' -> 0x10fa '\7357' -> 0x10fd '\7358' -> 0x10fe '\7359' -> 0x10ff '\7680' -> 0x1e01 '\7682' -> 0x1e03 '\7684' -> 0x1e05 '\7686' -> 0x1e07 '\7688' -> 0x1e09 '\7690' -> 0x1e0b '\7692' -> 0x1e0d '\7694' -> 0x1e0f '\7696' -> 0x1e11 '\7698' -> 0x1e13 '\7700' -> 0x1e15 '\7702' -> 0x1e17 '\7704' -> 0x1e19 '\7706' -> 0x1e1b '\7708' -> 0x1e1d '\7710' -> 0x1e1f '\7712' -> 0x1e21 '\7714' -> 0x1e23 '\7716' -> 0x1e25 '\7718' -> 0x1e27 '\7720' -> 0x1e29 '\7722' -> 0x1e2b '\7724' -> 0x1e2d '\7726' -> 0x1e2f '\7728' -> 0x1e31 '\7730' -> 0x1e33 '\7732' -> 0x1e35 '\7734' -> 0x1e37 '\7736' -> 0x1e39 '\7738' -> 0x1e3b '\7740' -> 0x1e3d '\7742' -> 0x1e3f '\7744' -> 0x1e41 '\7746' -> 0x1e43 '\7748' -> 0x1e45 '\7750' -> 0x1e47 '\7752' -> 0x1e49 '\7754' -> 0x1e4b '\7756' -> 0x1e4d '\7758' -> 0x1e4f '\7760' -> 0x1e51 '\7762' -> 0x1e53 '\7764' -> 0x1e55 '\7766' -> 0x1e57 '\7768' -> 0x1e59 '\7770' -> 0x1e5b '\7772' -> 0x1e5d '\7774' -> 0x1e5f '\7776' -> 0x1e61 '\7778' -> 0x1e63 '\7780' -> 0x1e65 '\7782' -> 0x1e67 '\7784' -> 0x1e69 '\7786' -> 0x1e6b '\7788' -> 0x1e6d '\7790' -> 0x1e6f '\7792' -> 0x1e71 '\7794' -> 0x1e73 '\7796' -> 0x1e75 '\7798' -> 0x1e77 '\7800' -> 0x1e79 '\7802' -> 0x1e7b '\7804' -> 0x1e7d '\7806' -> 0x1e7f '\7808' -> 0x1e81 '\7810' -> 0x1e83 '\7812' -> 0x1e85 '\7814' -> 0x1e87 '\7816' -> 0x1e89 '\7818' -> 0x1e8b '\7820' -> 0x1e8d '\7822' -> 0x1e8f '\7824' -> 0x1e91 '\7826' -> 0x1e93 '\7828' -> 0x1e95 '\7830' -> 0x66200068 '\7831' -> 0x61000074 '\7832' -> 0x61400077 '\7833' -> 0x61400079 '\7834' -> 0x57c00061 '\7835' -> 0x1e61 '\7838' -> 0xe600073 '\7840' -> 0x1ea1 '\7842' -> 0x1ea3 '\7844' -> 0x1ea5 '\7846' -> 0x1ea7 '\7848' -> 0x1ea9 '\7850' -> 0x1eab '\7852' -> 0x1ead '\7854' -> 0x1eaf '\7856' -> 0x1eb1 '\7858' -> 0x1eb3 '\7860' -> 0x1eb5 '\7862' -> 0x1eb7 '\7864' -> 0x1eb9 '\7866' -> 0x1ebb '\7868' -> 0x1ebd '\7870' -> 0x1ebf '\7872' -> 0x1ec1 '\7874' -> 0x1ec3 '\7876' -> 0x1ec5 '\7878' -> 0x1ec7 '\7880' -> 0x1ec9 '\7882' -> 0x1ecb '\7884' -> 0x1ecd '\7886' -> 0x1ecf '\7888' -> 0x1ed1 '\7890' -> 0x1ed3 '\7892' -> 0x1ed5 '\7894' -> 0x1ed7 '\7896' -> 0x1ed9 '\7898' -> 0x1edb '\7900' -> 0x1edd '\7902' -> 0x1edf '\7904' -> 0x1ee1 '\7906' -> 0x1ee3 '\7908' -> 0x1ee5 '\7910' -> 0x1ee7 '\7912' -> 0x1ee9 '\7914' -> 0x1eeb '\7916' -> 0x1eed '\7918' -> 0x1eef '\7920' -> 0x1ef1 '\7922' -> 0x1ef3 '\7924' -> 0x1ef5 '\7926' -> 0x1ef7 '\7928' -> 0x1ef9 '\7930' -> 0x1efb '\7932' -> 0x1efd '\7934' -> 0x1eff '\7944' -> 0x1f00 '\7945' -> 0x1f01 '\7946' -> 0x1f02 '\7947' -> 0x1f03 '\7948' -> 0x1f04 '\7949' -> 0x1f05 '\7950' -> 0x1f06 '\7951' -> 0x1f07 '\7960' -> 0x1f10 '\7961' -> 0x1f11 '\7962' -> 0x1f12 '\7963' -> 0x1f13 '\7964' -> 0x1f14 '\7965' -> 0x1f15 '\7976' -> 0x1f20 '\7977' -> 0x1f21 '\7978' -> 0x1f22 '\7979' -> 0x1f23 '\7980' -> 0x1f24 '\7981' -> 0x1f25 '\7982' -> 0x1f26 '\7983' -> 0x1f27 '\7992' -> 0x1f30 '\7993' -> 0x1f31 '\7994' -> 0x1f32 '\7995' -> 0x1f33 '\7996' -> 0x1f34 '\7997' -> 0x1f35 '\7998' -> 0x1f36 '\7999' -> 0x1f37 '\8008' -> 0x1f40 '\8009' -> 0x1f41 '\8010' -> 0x1f42 '\8011' -> 0x1f43 '\8012' -> 0x1f44 '\8013' -> 0x1f45 '\8016' -> 0x626003c5 '\8018' -> 0xc0000626003c5 '\8020' -> 0xc0400626003c5 '\8022' -> 0xd0800626003c5 '\8025' -> 0x1f51 '\8027' -> 0x1f53 '\8029' -> 0x1f55 '\8031' -> 0x1f57 '\8040' -> 0x1f60 '\8041' -> 0x1f61 '\8042' -> 0x1f62 '\8043' -> 0x1f63 '\8044' -> 0x1f64 '\8045' -> 0x1f65 '\8046' -> 0x1f66 '\8047' -> 0x1f67 '\8064' -> 0x77201f00 '\8065' -> 0x77201f01 '\8066' -> 0x77201f02 '\8067' -> 0x77201f03 '\8068' -> 0x77201f04 '\8069' -> 0x77201f05 '\8070' -> 0x77201f06 '\8071' -> 0x77201f07 '\8072' -> 0x77201f00 '\8073' -> 0x77201f01 '\8074' -> 0x77201f02 '\8075' -> 0x77201f03 '\8076' -> 0x77201f04 '\8077' -> 0x77201f05 '\8078' -> 0x77201f06 '\8079' -> 0x77201f07 '\8080' -> 0x77201f20 '\8081' -> 0x77201f21 '\8082' -> 0x77201f22 '\8083' -> 0x77201f23 '\8084' -> 0x77201f24 '\8085' -> 0x77201f25 '\8086' -> 0x77201f26 '\8087' -> 0x77201f27 '\8088' -> 0x77201f20 '\8089' -> 0x77201f21 '\8090' -> 0x77201f22 '\8091' -> 0x77201f23 '\8092' -> 0x77201f24 '\8093' -> 0x77201f25 '\8094' -> 0x77201f26 '\8095' -> 0x77201f27 '\8096' -> 0x77201f60 '\8097' -> 0x77201f61 '\8098' -> 0x77201f62 '\8099' -> 0x77201f63 '\8100' -> 0x77201f64 '\8101' -> 0x77201f65 '\8102' -> 0x77201f66 '\8103' -> 0x77201f67 '\8104' -> 0x77201f60 '\8105' -> 0x77201f61 '\8106' -> 0x77201f62 '\8107' -> 0x77201f63 '\8108' -> 0x77201f64 '\8109' -> 0x77201f65 '\8110' -> 0x77201f66 '\8111' -> 0x77201f67 '\8114' -> 0x77201f70 '\8115' -> 0x772003b1 '\8116' -> 0x772003ac '\8118' -> 0x684003b1 '\8119' -> 0xee400684003b1 '\8120' -> 0x1fb0 '\8121' -> 0x1fb1 '\8122' -> 0x1f70 '\8123' -> 0x1f71 '\8124' -> 0x772003b1 '\8126' -> 0x3b9 '\8130' -> 0x77201f74 '\8131' -> 0x772003b7 '\8132' -> 0x772003ae '\8134' -> 0x684003b7 '\8135' -> 0xee400684003b7 '\8136' -> 0x1f72 '\8137' -> 0x1f73 '\8138' -> 0x1f74 '\8139' -> 0x1f75 '\8140' -> 0x772003b7 '\8146' -> 0xc0000610003b9 '\8147' -> 0xc0400610003b9 '\8150' -> 0x684003b9 '\8151' -> 0xd0800610003b9 '\8152' -> 0x1fd0 '\8153' -> 0x1fd1 '\8154' -> 0x1f76 '\8155' -> 0x1f77 '\8162' -> 0xc0000610003c5 '\8163' -> 0xc0400610003c5 '\8164' -> 0x626003c1 '\8166' -> 0x684003c5 '\8167' -> 0xd0800610003c5 '\8168' -> 0x1fe0 '\8169' -> 0x1fe1 '\8170' -> 0x1f7a '\8171' -> 0x1f7b '\8172' -> 0x1fe5 '\8178' -> 0x77201f7c '\8179' -> 0x772003c9 '\8180' -> 0x772003ce '\8182' -> 0x684003c9 '\8183' -> 0xee400684003c9 '\8184' -> 0x1f78 '\8185' -> 0x1f79 '\8186' -> 0x1f7c '\8187' -> 0x1f7d '\8188' -> 0x772003c9 '\8486' -> 0x3c9 '\8490' -> 0x6b '\8491' -> 0xe5 '\8498' -> 0x214e '\8544' -> 0x2170 '\8545' -> 0x2171 '\8546' -> 0x2172 '\8547' -> 0x2173 '\8548' -> 0x2174 '\8549' -> 0x2175 '\8550' -> 0x2176 '\8551' -> 0x2177 '\8552' -> 0x2178 '\8553' -> 0x2179 '\8554' -> 0x217a '\8555' -> 0x217b '\8556' -> 0x217c '\8557' -> 0x217d '\8558' -> 0x217e '\8559' -> 0x217f '\8579' -> 0x2184 '\9398' -> 0x24d0 '\9399' -> 0x24d1 '\9400' -> 0x24d2 '\9401' -> 0x24d3 '\9402' -> 0x24d4 '\9403' -> 0x24d5 '\9404' -> 0x24d6 '\9405' -> 0x24d7 '\9406' -> 0x24d8 '\9407' -> 0x24d9 '\9408' -> 0x24da '\9409' -> 0x24db '\9410' -> 0x24dc '\9411' -> 0x24dd '\9412' -> 0x24de '\9413' -> 0x24df '\9414' -> 0x24e0 '\9415' -> 0x24e1 '\9416' -> 0x24e2 '\9417' -> 0x24e3 '\9418' -> 0x24e4 '\9419' -> 0x24e5 '\9420' -> 0x24e6 '\9421' -> 0x24e7 '\9422' -> 0x24e8 '\9423' -> 0x24e9 '\11264' -> 0x2c30 '\11265' -> 0x2c31 '\11266' -> 0x2c32 '\11267' -> 0x2c33 '\11268' -> 0x2c34 '\11269' -> 0x2c35 '\11270' -> 0x2c36 '\11271' -> 0x2c37 '\11272' -> 0x2c38 '\11273' -> 0x2c39 '\11274' -> 0x2c3a '\11275' -> 0x2c3b '\11276' -> 0x2c3c '\11277' -> 0x2c3d '\11278' -> 0x2c3e '\11279' -> 0x2c3f '\11280' -> 0x2c40 '\11281' -> 0x2c41 '\11282' -> 0x2c42 '\11283' -> 0x2c43 '\11284' -> 0x2c44 '\11285' -> 0x2c45 '\11286' -> 0x2c46 '\11287' -> 0x2c47 '\11288' -> 0x2c48 '\11289' -> 0x2c49 '\11290' -> 0x2c4a '\11291' -> 0x2c4b '\11292' -> 0x2c4c '\11293' -> 0x2c4d '\11294' -> 0x2c4e '\11295' -> 0x2c4f '\11296' -> 0x2c50 '\11297' -> 0x2c51 '\11298' -> 0x2c52 '\11299' -> 0x2c53 '\11300' -> 0x2c54 '\11301' -> 0x2c55 '\11302' -> 0x2c56 '\11303' -> 0x2c57 '\11304' -> 0x2c58 '\11305' -> 0x2c59 '\11306' -> 0x2c5a '\11307' -> 0x2c5b '\11308' -> 0x2c5c '\11309' -> 0x2c5d '\11310' -> 0x2c5e '\11311' -> 0x2c5f '\11360' -> 0x2c61 '\11362' -> 0x26b '\11363' -> 0x1d7d '\11364' -> 0x27d '\11367' -> 0x2c68 '\11369' -> 0x2c6a '\11371' -> 0x2c6c '\11373' -> 0x251 '\11374' -> 0x271 '\11375' -> 0x250 '\11376' -> 0x252 '\11378' -> 0x2c73 '\11381' -> 0x2c76 '\11390' -> 0x23f '\11391' -> 0x240 '\11392' -> 0x2c81 '\11394' -> 0x2c83 '\11396' -> 0x2c85 '\11398' -> 0x2c87 '\11400' -> 0x2c89 '\11402' -> 0x2c8b '\11404' -> 0x2c8d '\11406' -> 0x2c8f '\11408' -> 0x2c91 '\11410' -> 0x2c93 '\11412' -> 0x2c95 '\11414' -> 0x2c97 '\11416' -> 0x2c99 '\11418' -> 0x2c9b '\11420' -> 0x2c9d '\11422' -> 0x2c9f '\11424' -> 0x2ca1 '\11426' -> 0x2ca3 '\11428' -> 0x2ca5 '\11430' -> 0x2ca7 '\11432' -> 0x2ca9 '\11434' -> 0x2cab '\11436' -> 0x2cad '\11438' -> 0x2caf '\11440' -> 0x2cb1 '\11442' -> 0x2cb3 '\11444' -> 0x2cb5 '\11446' -> 0x2cb7 '\11448' -> 0x2cb9 '\11450' -> 0x2cbb '\11452' -> 0x2cbd '\11454' -> 0x2cbf '\11456' -> 0x2cc1 '\11458' -> 0x2cc3 '\11460' -> 0x2cc5 '\11462' -> 0x2cc7 '\11464' -> 0x2cc9 '\11466' -> 0x2ccb '\11468' -> 0x2ccd '\11470' -> 0x2ccf '\11472' -> 0x2cd1 '\11474' -> 0x2cd3 '\11476' -> 0x2cd5 '\11478' -> 0x2cd7 '\11480' -> 0x2cd9 '\11482' -> 0x2cdb '\11484' -> 0x2cdd '\11486' -> 0x2cdf '\11488' -> 0x2ce1 '\11490' -> 0x2ce3 '\11499' -> 0x2cec '\11501' -> 0x2cee '\11506' -> 0x2cf3 '\42560' -> 0xa641 '\42562' -> 0xa643 '\42564' -> 0xa645 '\42566' -> 0xa647 '\42568' -> 0xa649 '\42570' -> 0xa64b '\42572' -> 0xa64d '\42574' -> 0xa64f '\42576' -> 0xa651 '\42578' -> 0xa653 '\42580' -> 0xa655 '\42582' -> 0xa657 '\42584' -> 0xa659 '\42586' -> 0xa65b '\42588' -> 0xa65d '\42590' -> 0xa65f '\42592' -> 0xa661 '\42594' -> 0xa663 '\42596' -> 0xa665 '\42598' -> 0xa667 '\42600' -> 0xa669 '\42602' -> 0xa66b '\42604' -> 0xa66d '\42624' -> 0xa681 '\42626' -> 0xa683 '\42628' -> 0xa685 '\42630' -> 0xa687 '\42632' -> 0xa689 '\42634' -> 0xa68b '\42636' -> 0xa68d '\42638' -> 0xa68f '\42640' -> 0xa691 '\42642' -> 0xa693 '\42644' -> 0xa695 '\42646' -> 0xa697 '\42648' -> 0xa699 '\42650' -> 0xa69b '\42786' -> 0xa723 '\42788' -> 0xa725 '\42790' -> 0xa727 '\42792' -> 0xa729 '\42794' -> 0xa72b '\42796' -> 0xa72d '\42798' -> 0xa72f '\42802' -> 0xa733 '\42804' -> 0xa735 '\42806' -> 0xa737 '\42808' -> 0xa739 '\42810' -> 0xa73b '\42812' -> 0xa73d '\42814' -> 0xa73f '\42816' -> 0xa741 '\42818' -> 0xa743 '\42820' -> 0xa745 '\42822' -> 0xa747 '\42824' -> 0xa749 '\42826' -> 0xa74b '\42828' -> 0xa74d '\42830' -> 0xa74f '\42832' -> 0xa751 '\42834' -> 0xa753 '\42836' -> 0xa755 '\42838' -> 0xa757 '\42840' -> 0xa759 '\42842' -> 0xa75b '\42844' -> 0xa75d '\42846' -> 0xa75f '\42848' -> 0xa761 '\42850' -> 0xa763 '\42852' -> 0xa765 '\42854' -> 0xa767 '\42856' -> 0xa769 '\42858' -> 0xa76b '\42860' -> 0xa76d '\42862' -> 0xa76f '\42873' -> 0xa77a '\42875' -> 0xa77c '\42877' -> 0x1d79 '\42878' -> 0xa77f '\42880' -> 0xa781 '\42882' -> 0xa783 '\42884' -> 0xa785 '\42886' -> 0xa787 '\42891' -> 0xa78c '\42893' -> 0x265 '\42896' -> 0xa791 '\42898' -> 0xa793 '\42902' -> 0xa797 '\42904' -> 0xa799 '\42906' -> 0xa79b '\42908' -> 0xa79d '\42910' -> 0xa79f '\42912' -> 0xa7a1 '\42914' -> 0xa7a3 '\42916' -> 0xa7a5 '\42918' -> 0xa7a7 '\42920' -> 0xa7a9 '\42922' -> 0x266 '\42923' -> 0x25c '\42924' -> 0x261 '\42925' -> 0x26c '\42926' -> 0x26a '\42928' -> 0x29e '\42929' -> 0x287 '\42930' -> 0x29d '\42931' -> 0xab53 '\42932' -> 0xa7b5 '\42934' -> 0xa7b7 '\42936' -> 0xa7b9 '\42938' -> 0xa7bb '\42940' -> 0xa7bd '\42942' -> 0xa7bf '\42944' -> 0xa7c1 '\42946' -> 0xa7c3 '\42948' -> 0xa794 '\42949' -> 0x282 '\42950' -> 0x1d8e '\42951' -> 0xa7c8 '\42953' -> 0xa7ca '\42960' -> 0xa7d1 '\42966' -> 0xa7d7 '\42968' -> 0xa7d9 '\42997' -> 0xa7f6 '\43888' -> 0x13a0 '\43889' -> 0x13a1 '\43890' -> 0x13a2 '\43891' -> 0x13a3 '\43892' -> 0x13a4 '\43893' -> 0x13a5 '\43894' -> 0x13a6 '\43895' -> 0x13a7 '\43896' -> 0x13a8 '\43897' -> 0x13a9 '\43898' -> 0x13aa '\43899' -> 0x13ab '\43900' -> 0x13ac '\43901' -> 0x13ad '\43902' -> 0x13ae '\43903' -> 0x13af '\43904' -> 0x13b0 '\43905' -> 0x13b1 '\43906' -> 0x13b2 '\43907' -> 0x13b3 '\43908' -> 0x13b4 '\43909' -> 0x13b5 '\43910' -> 0x13b6 '\43911' -> 0x13b7 '\43912' -> 0x13b8 '\43913' -> 0x13b9 '\43914' -> 0x13ba '\43915' -> 0x13bb '\43916' -> 0x13bc '\43917' -> 0x13bd '\43918' -> 0x13be '\43919' -> 0x13bf '\43920' -> 0x13c0 '\43921' -> 0x13c1 '\43922' -> 0x13c2 '\43923' -> 0x13c3 '\43924' -> 0x13c4 '\43925' -> 0x13c5 '\43926' -> 0x13c6 '\43927' -> 0x13c7 '\43928' -> 0x13c8 '\43929' -> 0x13c9 '\43930' -> 0x13ca '\43931' -> 0x13cb '\43932' -> 0x13cc '\43933' -> 0x13cd '\43934' -> 0x13ce '\43935' -> 0x13cf '\43936' -> 0x13d0 '\43937' -> 0x13d1 '\43938' -> 0x13d2 '\43939' -> 0x13d3 '\43940' -> 0x13d4 '\43941' -> 0x13d5 '\43942' -> 0x13d6 '\43943' -> 0x13d7 '\43944' -> 0x13d8 '\43945' -> 0x13d9 '\43946' -> 0x13da '\43947' -> 0x13db '\43948' -> 0x13dc '\43949' -> 0x13dd '\43950' -> 0x13de '\43951' -> 0x13df '\43952' -> 0x13e0 '\43953' -> 0x13e1 '\43954' -> 0x13e2 '\43955' -> 0x13e3 '\43956' -> 0x13e4 '\43957' -> 0x13e5 '\43958' -> 0x13e6 '\43959' -> 0x13e7 '\43960' -> 0x13e8 '\43961' -> 0x13e9 '\43962' -> 0x13ea '\43963' -> 0x13eb '\43964' -> 0x13ec '\43965' -> 0x13ed '\43966' -> 0x13ee '\43967' -> 0x13ef '\64256' -> 0xcc00066 '\64257' -> 0xd200066 '\64258' -> 0xd800066 '\64259' -> 0x1a4000cc00066 '\64260' -> 0x1b0000cc00066 '\64261' -> 0xe800073 '\64262' -> 0xe800073 '\64275' -> 0xaec00574 '\64276' -> 0xaca00574 '\64277' -> 0xad600574 '\64278' -> 0xaec0057e '\64279' -> 0xada00574 '\65313' -> 0xff41 '\65314' -> 0xff42 '\65315' -> 0xff43 '\65316' -> 0xff44 '\65317' -> 0xff45 '\65318' -> 0xff46 '\65319' -> 0xff47 '\65320' -> 0xff48 '\65321' -> 0xff49 '\65322' -> 0xff4a '\65323' -> 0xff4b '\65324' -> 0xff4c '\65325' -> 0xff4d '\65326' -> 0xff4e '\65327' -> 0xff4f '\65328' -> 0xff50 '\65329' -> 0xff51 '\65330' -> 0xff52 '\65331' -> 0xff53 '\65332' -> 0xff54 '\65333' -> 0xff55 '\65334' -> 0xff56 '\65335' -> 0xff57 '\65336' -> 0xff58 '\65337' -> 0xff59 '\65338' -> 0xff5a '\66560' -> 0x10428 '\66561' -> 0x10429 '\66562' -> 0x1042a '\66563' -> 0x1042b '\66564' -> 0x1042c '\66565' -> 0x1042d '\66566' -> 0x1042e '\66567' -> 0x1042f '\66568' -> 0x10430 '\66569' -> 0x10431 '\66570' -> 0x10432 '\66571' -> 0x10433 '\66572' -> 0x10434 '\66573' -> 0x10435 '\66574' -> 0x10436 '\66575' -> 0x10437 '\66576' -> 0x10438 '\66577' -> 0x10439 '\66578' -> 0x1043a '\66579' -> 0x1043b '\66580' -> 0x1043c '\66581' -> 0x1043d '\66582' -> 0x1043e '\66583' -> 0x1043f '\66584' -> 0x10440 '\66585' -> 0x10441 '\66586' -> 0x10442 '\66587' -> 0x10443 '\66588' -> 0x10444 '\66589' -> 0x10445 '\66590' -> 0x10446 '\66591' -> 0x10447 '\66592' -> 0x10448 '\66593' -> 0x10449 '\66594' -> 0x1044a '\66595' -> 0x1044b '\66596' -> 0x1044c '\66597' -> 0x1044d '\66598' -> 0x1044e '\66599' -> 0x1044f '\66736' -> 0x104d8 '\66737' -> 0x104d9 '\66738' -> 0x104da '\66739' -> 0x104db '\66740' -> 0x104dc '\66741' -> 0x104dd '\66742' -> 0x104de '\66743' -> 0x104df '\66744' -> 0x104e0 '\66745' -> 0x104e1 '\66746' -> 0x104e2 '\66747' -> 0x104e3 '\66748' -> 0x104e4 '\66749' -> 0x104e5 '\66750' -> 0x104e6 '\66751' -> 0x104e7 '\66752' -> 0x104e8 '\66753' -> 0x104e9 '\66754' -> 0x104ea '\66755' -> 0x104eb '\66756' -> 0x104ec '\66757' -> 0x104ed '\66758' -> 0x104ee '\66759' -> 0x104ef '\66760' -> 0x104f0 '\66761' -> 0x104f1 '\66762' -> 0x104f2 '\66763' -> 0x104f3 '\66764' -> 0x104f4 '\66765' -> 0x104f5 '\66766' -> 0x104f6 '\66767' -> 0x104f7 '\66768' -> 0x104f8 '\66769' -> 0x104f9 '\66770' -> 0x104fa '\66771' -> 0x104fb '\66928' -> 0x10597 '\66929' -> 0x10598 '\66930' -> 0x10599 '\66931' -> 0x1059a '\66932' -> 0x1059b '\66933' -> 0x1059c '\66934' -> 0x1059d '\66935' -> 0x1059e '\66936' -> 0x1059f '\66937' -> 0x105a0 '\66938' -> 0x105a1 '\66940' -> 0x105a3 '\66941' -> 0x105a4 '\66942' -> 0x105a5 '\66943' -> 0x105a6 '\66944' -> 0x105a7 '\66945' -> 0x105a8 '\66946' -> 0x105a9 '\66947' -> 0x105aa '\66948' -> 0x105ab '\66949' -> 0x105ac '\66950' -> 0x105ad '\66951' -> 0x105ae '\66952' -> 0x105af '\66953' -> 0x105b0 '\66954' -> 0x105b1 '\66956' -> 0x105b3 '\66957' -> 0x105b4 '\66958' -> 0x105b5 '\66959' -> 0x105b6 '\66960' -> 0x105b7 '\66961' -> 0x105b8 '\66962' -> 0x105b9 '\66964' -> 0x105bb '\66965' -> 0x105bc '\68736' -> 0x10cc0 '\68737' -> 0x10cc1 '\68738' -> 0x10cc2 '\68739' -> 0x10cc3 '\68740' -> 0x10cc4 '\68741' -> 0x10cc5 '\68742' -> 0x10cc6 '\68743' -> 0x10cc7 '\68744' -> 0x10cc8 '\68745' -> 0x10cc9 '\68746' -> 0x10cca '\68747' -> 0x10ccb '\68748' -> 0x10ccc '\68749' -> 0x10ccd '\68750' -> 0x10cce '\68751' -> 0x10ccf '\68752' -> 0x10cd0 '\68753' -> 0x10cd1 '\68754' -> 0x10cd2 '\68755' -> 0x10cd3 '\68756' -> 0x10cd4 '\68757' -> 0x10cd5 '\68758' -> 0x10cd6 '\68759' -> 0x10cd7 '\68760' -> 0x10cd8 '\68761' -> 0x10cd9 '\68762' -> 0x10cda '\68763' -> 0x10cdb '\68764' -> 0x10cdc '\68765' -> 0x10cdd '\68766' -> 0x10cde '\68767' -> 0x10cdf '\68768' -> 0x10ce0 '\68769' -> 0x10ce1 '\68770' -> 0x10ce2 '\68771' -> 0x10ce3 '\68772' -> 0x10ce4 '\68773' -> 0x10ce5 '\68774' -> 0x10ce6 '\68775' -> 0x10ce7 '\68776' -> 0x10ce8 '\68777' -> 0x10ce9 '\68778' -> 0x10cea '\68779' -> 0x10ceb '\68780' -> 0x10cec '\68781' -> 0x10ced '\68782' -> 0x10cee '\68783' -> 0x10cef '\68784' -> 0x10cf0 '\68785' -> 0x10cf1 '\68786' -> 0x10cf2 '\71840' -> 0x118c0 '\71841' -> 0x118c1 '\71842' -> 0x118c2 '\71843' -> 0x118c3 '\71844' -> 0x118c4 '\71845' -> 0x118c5 '\71846' -> 0x118c6 '\71847' -> 0x118c7 '\71848' -> 0x118c8 '\71849' -> 0x118c9 '\71850' -> 0x118ca '\71851' -> 0x118cb '\71852' -> 0x118cc '\71853' -> 0x118cd '\71854' -> 0x118ce '\71855' -> 0x118cf '\71856' -> 0x118d0 '\71857' -> 0x118d1 '\71858' -> 0x118d2 '\71859' -> 0x118d3 '\71860' -> 0x118d4 '\71861' -> 0x118d5 '\71862' -> 0x118d6 '\71863' -> 0x118d7 '\71864' -> 0x118d8 '\71865' -> 0x118d9 '\71866' -> 0x118da '\71867' -> 0x118db '\71868' -> 0x118dc '\71869' -> 0x118dd '\71870' -> 0x118de '\71871' -> 0x118df '\93760' -> 0x16e60 '\93761' -> 0x16e61 '\93762' -> 0x16e62 '\93763' -> 0x16e63 '\93764' -> 0x16e64 '\93765' -> 0x16e65 '\93766' -> 0x16e66 '\93767' -> 0x16e67 '\93768' -> 0x16e68 '\93769' -> 0x16e69 '\93770' -> 0x16e6a '\93771' -> 0x16e6b '\93772' -> 0x16e6c '\93773' -> 0x16e6d '\93774' -> 0x16e6e '\93775' -> 0x16e6f '\93776' -> 0x16e70 '\93777' -> 0x16e71 '\93778' -> 0x16e72 '\93779' -> 0x16e73 '\93780' -> 0x16e74 '\93781' -> 0x16e75 '\93782' -> 0x16e76 '\93783' -> 0x16e77 '\93784' -> 0x16e78 '\93785' -> 0x16e79 '\93786' -> 0x16e7a '\93787' -> 0x16e7b '\93788' -> 0x16e7c '\93789' -> 0x16e7d '\93790' -> 0x16e7e '\93791' -> 0x16e7f '\125184' -> 0x1e922 '\125185' -> 0x1e923 '\125186' -> 0x1e924 '\125187' -> 0x1e925 '\125188' -> 0x1e926 '\125189' -> 0x1e927 '\125190' -> 0x1e928 '\125191' -> 0x1e929 '\125192' -> 0x1e92a '\125193' -> 0x1e92b '\125194' -> 0x1e92c '\125195' -> 0x1e92d '\125196' -> 0x1e92e '\125197' -> 0x1e92f '\125198' -> 0x1e930 '\125199' -> 0x1e931 '\125200' -> 0x1e932 '\125201' -> 0x1e933 '\125202' -> 0x1e934 '\125203' -> 0x1e935 '\125204' -> 0x1e936 '\125205' -> 0x1e937 '\125206' -> 0x1e938 '\125207' -> 0x1e939 '\125208' -> 0x1e93a '\125209' -> 0x1e93b '\125210' -> 0x1e93c '\125211' -> 0x1e93d '\125212' -> 0x1e93e '\125213' -> 0x1e93f '\125214' -> 0x1e940 '\125215' -> 0x1e941 '\125216' -> 0x1e942 '\125217' -> 0x1e943 _ -> 0 unicode-data-0.6.0/lib/Unicode/Internal/Char/DerivedCoreProperties.hs0000644000000000000000000030103607346545000023637 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/DerivedCoreProperties.txt -- | -- Module : Unicode.Internal.Char.DerivedCoreProperties -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use camelCase" #-} module Unicode.Internal.Char.DerivedCoreProperties ( isXID_Continue , isXID_Start , isID_Continue , isID_Start , isUppercase , isLowercase , isAlphabetic ) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord16AsInt) {-# INLINE isXID_Continue #-} isXID_Continue :: Char -> Bool isXID_Continue c | c < '\x002F' = False | c < '\x323B0' = lookupIsXID_ContinueBitMap (ord c) | c < '\xE0000' = False | c < '\xE01F0' = lookupIsXID_ContinueBitMap (ord c - 0xADC50) | otherwise = False {-# INLINE lookupIsXID_ContinueBitMap #-} lookupIsXID_ContinueBitMap :: Int -> Bool lookupIsXID_ContinueBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isXID_ContinueDataBitMap !(Ptr offsets#) = isXID_ContinueOffsetsBitMap isXID_ContinueDataBitMap :: Ptr Int8 isXID_ContinueDataBitMap = Ptr "\132\252\47\63\80\253\255\243\224\67\0\0\255\255\255\255\255\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\239\111\ \\240\239\254\255\255\63\135\0\0\0\0\255\255\255\31\255\255\255\31\0\0\0\0\255\254\255\255\127\0\0\0\48\0\0\0\0\0\128\1\0\16\0\0\0\2\128\0\0\255\31\ \\0\0\0\0\0\0\255\31\226\255\1\0\224\0\0\0\254\255\62\31\254\255\255\255\255\255\255\255\255\255\127\230\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\255\7\255\255\255\255\255\255\255\255\255\195\255\255\255\255\255\255\255\255\255\255\255\255\239\159\255\ \\253\255\159\238\159\249\255\255\253\237\243\159\57\224\176\207\255\2\0\236\199\61\214\24\199\255\195\199\61\129\0\192\255\0\0\184\255\3\255\255\255\255\255\255\255\255\255\255\255\1\ \\255\255\255\255\255\7\255\255\255\255\255\255\255\255\63\0\0\255\255\255\15\255\7\255\255\255\126\0\255\255\255\255\255\255\255\255\255\251\255\255\255\255\191\32\255\255\255\255\255\255\ \\255\128\0\128\255\255\127\0\127\127\127\127\127\127\127\127\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\255\255\255\255\61\127\61\255\127\255\255\255\255\255\255\255\ \\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\ \\255\63\255\1\0\0\63\0\0\0\0\255\255\255\255\255\255\255\231\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\63\36\255\239\255\255\127\255\255\183\255\ \\63\255\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\ \\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\255\3\254\255\255\135\254\255\255\7\0\0\0\0\0\4\160\4\ \\255\255\127\255\255\255\127\255\15\255\15\192\255\255\255\255\63\31\0\255\255\255\255\255\15\255\255\255\3\255\7\0\0\0\0\128\255\252\255\255\255\255\255\255\255\255\255\255\255\255\ \\249\255\255\255\255\255\255\255\7\235\3\0\0\252\255\223\253\255\255\253\255\243\223\61\96\39\207\255\0\0\239\223\253\255\255\253\239\243\223\61\96\96\207\255\14\0\191\231\223\223\ \\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\253\255\255\247\255\255\255\247\224\255\255\255\255\255\254\255\255\255\ \\255\255\255\255\255\255\255\127\0\0\255\255\255\255\0\0\0\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\207\255\254\255\239\159\249\255\255\253\197\243\159\121\128\176\207\255\3\80\255\255\0\0\255\255\24\0\0\224\0\0\0\0\ \\138\170\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\255\3\0\248\15\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\255\255\255\255\255\255\7\0\255\255\255\255\255\255\7\0\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\3\255\3\160\194\255\254\255\255\255\31\254\255\223\255\255\254\255\255\255\31\64\0\0\0\0\0\0\0\255\3\ \\254\255\255\135\254\255\255\7\224\255\255\255\255\255\255\255\255\255\255\127\252\252\252\28\0\0\0\0\255\255\255\255\255\255\255\0\255\227\255\255\255\255\255\63\255\1\255\255\255\255\ \\255\231\0\0\247\255\255\255\255\7\0\4\0\0\0\39\0\240\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\15\0\255\255\127\248\255\255\255\255\255\15\255\255\255\255\255\255\255\127\255\255\255\159\255\3\255\3\128\0\255\191\255\127\0\0\0\0\0\0\255\255\255\255\255\31\255\63\255\67\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\127\0\0\255\255\255\255\255\255\255\3\255\255\255\255\255\0\255\3\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\27\3\0\0\0\0\0\0\0\0\224\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\1\0\1\0\ \\0\0\255\255\255\255\255\255\255\255\255\255\255\63\240\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\251\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\223\184\192\215\255\255\251\255\255\255\255\255\255\255\255\255\191\255\223\253\255\255\255\255\255\223\125\240\128\207\255\0\252\238\255\127\252\255\255\251\47\127\132\95\255\192\255\12\0\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\255\255\255\255\255\63\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\224\227\7\248\231\15\0\0\0\60\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\255\255\255\255\255\3\255\ \\255\255\255\255\0\255\255\255\255\255\255\15\0\255\247\255\247\183\255\251\255\251\27\0\0\0\0\0\0\0\0\28\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\224\227\7\248\231\15\0\0\0\60\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\127\111\255\127\242\111\255\ \\255\255\191\249\15\0\255\3\0\0\0\0\0\0\0\0\255\252\255\255\255\255\255\252\27\0\0\0\255\255\255\255\255\63\255\255\255\255\15\0\255\255\255\31\255\255\255\255\255\255\ \\255\255\1\128\255\3\255\255\255\127\251\255\255\255\255\127\180\255\0\255\3\191\253\255\255\255\127\251\1\255\3\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\255\255\127\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\ \\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\63\255\255\255\255\191\32\255\255\255\255\255\247\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\61\255\255\255\ \\255\255\255\255\255\231\0\254\3\0\255\255\0\0\255\255\255\255\255\255\255\255\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\95\220\31\207\15\ \\255\31\220\31\255\255\253\255\255\255\255\199\7\0\255\3\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\255\255\127\0\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\255\255\255\255\255\255\127\0\15\0\255\ \\3\248\255\255\224\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\31\248\15\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\251\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\254\255\255\255\127\2\255\255\ \\255\255\255\1\254\255\255\255\255\191\182\0\255\255\255\135\7\0\255\255\223\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\247\207\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\253\255\255\247\255\255\255\247\255\255\223\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\ \\247\207\255\255\255\255\255\255\127\248\255\255\255\255\255\31\32\0\16\0\0\248\254\255\0\0\0\0\0\0\0\0\0\0\255\255\255\31\128\0\255\255\255\255\1\0\0\0\255\255\ \\63\0\0\0\0\0\255\255\31\0\0\0\255\255\127\0\248\224\255\253\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\1\0\255\255\255\255\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\ \\184\192\215\255\255\251\255\255\255\255\255\255\255\255\255\191\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\255\255\ \\255\255\255\255\255\255\255\135\255\255\255\255\255\255\255\128\255\255\0\0\0\0\0\0\0\0\27\0\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\238\135\249\255\255\253\109\211\135\57\2\94\192\255\63\0\238\191\251\255\255\253\237\243\191\59\1\0\207\255\0\254\254\255\255\255\255\255\255\ \\7\255\127\255\3\0\0\0\0\214\247\255\255\175\255\255\63\95\127\255\243\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\159\255\255\254\255\255\7\255\255\255\255\255\ \\255\255\255\255\199\255\1\255\255\63\128\255\255\31\0\255\255\15\0\255\223\13\0\255\255\255\255\255\255\255\255\255\255\143\48\255\3\0\0\255\31\255\255\255\15\0\0\255\255\255\ \\255\255\255\240\191\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\16\0\0\255\255\255\255\255\255\15\0\255\255\255\255\255\255\255\255\63\0\255\3\255\ \\255\255\232\255\255\255\255\255\255\127\0\255\63\255\3\255\255\127\252\255\255\255\255\255\255\255\255\7\0\0\56\255\255\124\0\126\126\126\0\127\127\255\255\255\255\255\247\255\3\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\55\255\3\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\255\255\252\255\255\255\255\255\255\0\0\0\0\0\255\3\255\ \\255\255\255\0\224\255\255\255\7\255\255\255\255\255\7\255\255\255\63\255\255\255\255\15\255\62\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\63\255\3\255\255\255\255\15\255\255\255\255\15\255\255\255\255\255\255\127\0\255\255\63\0\255\0\0\0\191\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\63\253\255\255\255\ \\255\191\145\255\255\63\0\255\255\127\0\255\255\255\127\0\0\0\0\0\0\0\0\255\255\55\0\255\255\63\0\255\255\255\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\ \\192\0\0\0\0\0\0\0\0\255\255\255\255\255\255\63\0\255\255\63\0\255\255\7\0\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\127\ \\0\0\0\192\255\63\128\255\255\255\255\255\255\255\7\4\0\255\255\255\1\255\3\255\255\255\255\255\255\223\255\240\0\255\255\255\255\79\0\255\255\255\255\255\255\255\255\31\222\255\ \\23\0\0\0\0\255\255\251\255\255\255\255\192\3\0\0\0\0\0\0\0\127\189\255\191\255\1\255\255\255\255\255\255\255\7\255\3\239\159\249\255\255\253\237\251\159\57\129\224\207\ \\31\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\7\255\195\3\0\0\0\255\255\255\255\255\255\255\255\191\0\255\3\0\0\0\ \\0\255\255\255\255\255\255\255\255\17\0\255\3\0\0\0\0\255\255\255\255\255\255\255\1\255\3\0\0\0\0\0\0\255\255\255\231\255\15\255\3\127\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\3\0\128\255\255\255\ \\255\255\255\255\127\128\0\255\255\255\255\255\255\255\255\255\35\0\0\255\255\255\255\255\255\255\255\255\1\255\253\255\255\255\255\127\255\1\0\255\3\0\0\252\255\255\255\252\255\255\ \\254\127\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\ \\1\255\255\255\127\255\3\255\255\255\255\255\255\255\255\255\127\255\3\255\255\255\63\31\0\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\31\255\1\255\99\0\0\0\0\0\ \\0\0\0\0\0\0\0\255\255\255\127\224\7\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\127\255\255\249\219\7\255\255\255\255\255\ \\255\255\63\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\0\127\0\0\ \\0\0\0\255\255\255\255\255\255\255\255\255\15\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\255\255\255\150\254\247\10\132\234\150\170\150\247\247\ \\94\255\251\255\15\238\251\255\15\0\0\0\0\0\0\0\0"# isXID_ContinueOffsetsBitMap :: Ptr Word16 isXID_ContinueOffsetsBitMap = Ptr "\14\2\133\0\141\0\56\5\38\5\138\8\171\0\153\1\3\1\242\2\51\10\203\0\102\2\87\5\83\10\198\3\224\6\133\0\60\1\52\7\132\0\133\0\115\10\147\10\234\0\41\2\84\4\40\3\4\4\133\0\133\0\80\7\80\0\0\0\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\80\8\32\1\244\1\244\1\112\0\178\2\ \\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\99\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\119\5\133\0\179\10\71\2\211\10\92\6\243\10\19\11\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\56\4\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\ \\87\9\60\9\22\5\51\11\18\3\228\3\185\1\215\7\246\4\83\11\115\11\219\5\133\0\147\11\179\11\211\11\49\0\243\11\97\3\162\4\178\4\30\9\19\12\51\12\83\12\115\12\147\12\123\1\179\12\211\12\243\12\60\6\19\13\244\1\51\13\123\6\145\6\112\7\133\0\133\0\133\0\226\4\210\4\62\3\244\1\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\76\3\133\0\133\0\133\0\133\0\154\3\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\83\13\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\115\13\247\7\244\1\244\1\15\8\244\9\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\129\3\133\0\133\0\133\0\133\0\217\1\16\0\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\18\0\133\0\31\4\45\4\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\147\13\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\145\5\244\1\165\5\243\5\244\1\199\6\134\2\146\2\170\8\244\1\244\1\254\8\244\1\244\1\244\1\244\1\179\13\211\13\116\4\130\4\244\1\187\5\244\1\244\1\29\6\243\13\19\14\244\1\244\1\244\1\244\1\51\14\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\246\1\244\1\244\1\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\95\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\87\1\208\2\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\220\2\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\22\7\133\0\133\0\ \\232\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\240\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\207\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\101\1\72\3\133\0"# {-# INLINE isXID_Start #-} isXID_Start :: Char -> Bool isXID_Start c = c >= '\x0041' && c <= '\x323AF' && lookupIsXID_StartBitMap (ord c) {-# INLINE lookupIsXID_StartBitMap #-} lookupIsXID_StartBitMap :: Int -> Bool lookupIsXID_StartBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isXID_StartDataBitMap !(Ptr offsets#) = isXID_StartOffsetsBitMap isXID_StartDataBitMap :: Ptr Int8 isXID_StartDataBitMap = Ptr "\132\252\47\63\80\253\255\243\224\67\0\0\255\255\255\255\255\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\239\111\ \\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\224\255\255\255\255\255\254\255\255\ \\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\0\0\0\0\0\0\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\254\255\255\7\254\255\255\7\0\0\0\0\0\4\32\4\255\255\127\255\255\255\127\255\255\255\255\191\32\255\255\255\255\255\255\ \\255\128\0\0\255\255\127\0\127\127\127\127\127\127\127\127\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\63\240\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\63\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\255\255\7\0\255\239\255\255\ \\127\255\255\183\255\63\255\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\31\120\12\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\253\255\255\247\ \\255\255\255\247\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\255\255\255\255\255\63\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\255\159\255\255\254\255\255\7\255\255\255\255\255\255\255\ \\255\255\199\255\1\0\239\254\255\255\63\0\0\0\0\0\255\255\255\31\255\255\255\31\0\0\0\0\255\254\255\255\31\0\0\0\255\255\255\255\255\255\255\255\15\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\255\255\255\255\255\255\7\0\255\255\255\255\255\ \\255\7\0\128\0\0\63\60\98\192\225\255\3\64\0\0\255\255\255\255\191\32\255\255\255\255\255\247\255\31\255\255\0\12\0\0\255\255\255\255\255\127\0\128\255\255\255\63\255\255\ \\255\255\255\255\255\255\255\255\0\0\126\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\247\ \\15\0\0\255\255\127\196\255\255\255\255\255\255\98\62\5\0\0\56\255\7\28\0\255\255\255\255\7\0\4\0\0\0\39\0\240\0\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\255\255\127\248\255\255\255\255\255\15\0\0\0\0\224\0\252\255\255\255\63\255\1\255\255\255\255\255\231\0\ \\0\0\0\0\222\111\4\255\255\255\255\255\31\128\63\0\64\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\0\0\255\255\255\255\255\ \\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\128\255\252\255\255\255\255\255\255\255\255\255\255\255\255\249\255\255\255\255\255\255\255\7\ \\235\3\0\0\252\255\255\63\0\255\255\127\0\0\0\255\255\255\31\240\255\255\255\255\255\7\0\0\128\0\0\223\255\0\124\224\159\249\255\255\253\237\35\0\0\0\176\3\0\2\ \\0\232\199\61\214\24\199\255\3\0\0\1\0\0\0\0\0\0\0\255\254\255\255\255\31\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\31\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\1\0\0\0\0\0\255\255\255\255\255\7\0\0\0\192\254\255\255\255\255\255\255\ \\255\255\255\255\255\47\0\96\192\0\156\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\255\255\255\255\15\255\255\255\255\15\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\255\255\255\255\255\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\128\0\0\255\31\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\138\170\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\128\0\255\255\63\0\0\0\0\0\255\255\3\0\0\0\0\0\255\255\31\ \\0\0\0\255\255\127\0\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\254\255\255\7\254\255\255\7\192\255\255\255\255\255\255\ \\63\255\255\255\127\252\252\252\28\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\184\64\215\255\255\251\255\255\255\255\255\255\255\255\255\191\255\ \\255\255\255\255\255\127\0\255\255\63\0\255\0\0\0\191\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\255\255\255\255\ \\61\127\61\255\127\255\255\255\255\255\255\254\255\255\255\127\2\255\255\255\255\255\1\0\0\0\0\0\0\0\0\255\255\255\135\7\0\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\61\255\255\255\255\255\255\255\255\ \\7\0\0\0\0\255\255\0\0\255\255\255\255\255\255\255\255\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\95\220\31\207\15\255\31\220\31\255\ \\255\255\255\255\255\0\0\16\0\0\0\0\0\0\0\255\255\255\255\255\7\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\127\0\0\0\0\0\ \\15\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\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\255\255\255\15\0\0\255\255\255\255\255\255\0\0\15\0\0\0\248\255\255\224\255\255\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\255\255\255\255\255\255\255\255\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\127\111\255\127\242\111\255\255\255\0\128\2\ \\0\0\0\0\0\0\0\0\0\0\0\255\252\255\255\255\255\1\0\10\0\0\0\255\255\255\255\255\255\31\0\128\7\0\128\3\0\0\0\255\255\255\255\255\255\0\0\176\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\127\0\0\0\0\0\15\0\0\0\0\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\ \\100\222\255\235\239\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\31\255\1\255\3\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\0\255\255\255\255\255\255\15\0\255\247\255\247\183\255\251\255\251\27\0\0\0\0\0\0\0\0\255\255\255\127\224\7\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\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\31\128\63\0\64\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\127\0\248\160\255\253\ \\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\ \\0\0\0\255\255\255\255\0\224\255\255\255\7\255\255\255\255\63\0\255\255\255\63\255\255\255\255\15\255\62\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\ \\255\255\255\255\255\255\1\0\0\0\0\0\255\255\3\128\255\255\3\0\255\255\3\0\255\223\1\0\255\255\255\255\255\255\15\0\0\0\128\16\0\0\0\0\255\255\255\255\255\255\ \\255\255\255\255\255\1\255\255\255\255\255\5\255\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\255\255\252\255\255\255\255\255\255\0\0\0\0\0\255\3\255\255\251\255\255\ \\15\0\128\1\0\0\0\0\0\0\0\127\189\255\191\255\1\255\255\255\255\255\127\0\0\0\0\0\0\255\255\255\63\31\0\255\255\255\255\255\15\255\255\255\3\0\0\0\0\0\ \\0\255\255\255\255\255\255\255\255\255\255\255\1\255\255\255\255\255\5\255\255\255\255\255\255\255\255\63\0\255\255\63\0\255\255\7\0\255\255\3\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\255\255\255\255\255\255\255\255\255\7\1\0\0\0\0\0\0\0\248\255\0\0\0\0\0\0\0\0\11\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\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\255\255\63\4\16\1\0\0\255\255\255\1\255\7\255\255\255\126\0\0\255\255\255\255\255\ \\3\0\0\0\0\0\0\253\255\255\255\0\0\0\224\255\255\255\255\255\255\255\255\255\255\63\0\2\0\0\252\255\255\255\7\48\4\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\255\255\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\ \\255\255\255\255\255\255\35\0\0\1\255\3\0\254\255\225\159\249\255\255\253\197\35\0\64\0\176\3\0\3\16\224\135\249\255\255\253\109\3\0\0\0\94\0\0\28\0\224\191\251\ \\255\255\253\237\35\0\0\1\0\3\0\0\2\224\223\253\255\255\253\255\35\0\0\0\39\3\0\0\0\225\223\253\255\255\253\239\35\0\0\0\96\3\0\6\0\240\223\253\255\255\ \\255\255\39\0\64\112\128\3\0\0\252\224\255\127\252\255\255\251\47\127\0\0\0\0\0\0\0\254\255\255\255\255\255\5\0\127\0\0\0\0\0\0\0\214\247\255\255\175\255\5\ \\32\95\0\0\240\0\0\0\0\224\255\255\255\255\255\15\0\224\31\0\0\0\0\0\0\248\255\255\255\1\192\0\252\255\255\255\255\63\0\0\0\224\0\0\0\254\3\62\31\254\ \\255\255\255\255\255\255\255\255\255\127\224\254\255\255\255\255\255\255\255\255\255\255\247\187\247\255\255\7\0\0\0\255\255\255\255\255\255\15\0\252\255\255\255\255\255\15\0\0\0\0\ \\0\0\0\252\104\126\126\126\0\127\127\255\255\255\255\255\247\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\0\0\0\63\253\255\255\255\255\191\145\255\255\63\0\255\ \\255\127\0\255\255\255\127\0\0\0\0\0\0\0\0\255\255\55\0\255\255\63\0\255\255\255\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\192\0\0\0\0\0\0\0\ \\0\248\255\255\255\255\255\255\0\0\0\0\0\0\0\38\0\248\255\255\255\255\255\0\0\0\0\255\255\255\1\0\0\248\255\255\255\127\0\0\0\144\0\255\255\255\255\71\0\248\ \\255\255\255\255\255\7\0\30\0\0\20\0\0\0\0\224\159\249\255\255\253\237\35\0\0\1\224\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\ \\7\0\0\0\0\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\248\255\255\255\255\7\4\0\0\1\240\255\255\255\255\255\3\0\32\0\ \\0\255\255\255\255\255\255\255\255\255\1\255\253\255\255\255\127\0\0\1\0\0\0\0\0\252\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\127\251\255\255\255\255\1\ \\0\64\0\0\0\191\253\255\255\255\3\0\1\0\0\0\0\0\0\0\0\0\0\0\0\244\255\253\255\255\255\15\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\255\255\255\255\255\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\1\255\255\255\ \\127\0\0\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\63\0\0\255\255\223\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\247\15\0\0\0\ \\0\0\0\255\255\255\255\255\255\255\255\15\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\255\255\255\150\254\247\10\132\234\150\170\150\247\247\ \\94\255\251\255\15\238\251\255\15\0\0\0\0\0\0\0\0"# isXID_StartOffsetsBitMap :: Ptr Word16 isXID_StartOffsetsBitMap = Ptr "\157\0\51\0\59\0\38\5\239\4\175\5\5\4\45\10\15\10\139\10\171\10\167\3\203\10\235\10\11\11\193\3\84\2\51\0\148\5\3\6\50\0\51\0\217\1\214\8\242\8\65\9\179\4\43\11\7\3\133\0\51\0\31\6\103\4\0\0\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\72\1\188\0\4\1\4\1\75\11\91\0\ \\4\1\4\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\133\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\155\1\51\0\116\2\106\3\107\11\135\3\179\2\139\11\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\236\2\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\51\0\ \\123\8\96\8\220\0\9\9\123\4\207\4\40\1\217\3\233\3\155\8\37\4\204\7\51\0\69\5\171\11\203\11\248\1\117\9\59\2\64\4\80\4\151\4\235\11\11\12\41\9\43\12\31\7\87\6\63\6\75\12\77\3\255\6\107\12\4\1\139\12\171\12\8\1\203\12\51\0\51\0\51\0\18\5\2\5\24\2\4\1\4\1\4\1\4\1\4\1\4\1\ \\4\1\4\1\4\1\38\2\51\0\51\0\51\0\51\0\140\2\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\51\0\51\0\235\12\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\ \\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\51\0\51\0\11\13\184\6\4\1\4\1\208\6\149\9\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\178\7\51\0\51\0\51\0\51\0\233\0\16\0\4\1\4\1\ \\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\18\0\51\0\211\2\225\2\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\113\7\4\1\4\1\4\1\4\1\4\1\ \\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\123\5\104\1\116\1\43\13\4\1\4\1\4\1\4\1\4\1\4\1\4\1\236\7\6\8\39\3\53\3\4\1\152\6\4\1\4\1\224\6\148\1\75\13\4\1\4\1\4\1\4\1\107\13\4\1\4\1\4\1\4\1\4\1\ \\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\129\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\121\0\183\1\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\195\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\229\5\51\0\51\0\ \\248\0\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\4\1\51\0\51\0\0\1\4\1\4\1\4\1\4\1\4\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\62\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\72\1"# {-# INLINE isID_Continue #-} isID_Continue :: Char -> Bool isID_Continue c | c < '\x002F' = False | c < '\x323B0' = lookupIsID_ContinueBitMap (ord c) | c < '\xE0000' = False | c < '\xE01F0' = lookupIsID_ContinueBitMap (ord c - 0xADC50) | otherwise = False {-# INLINE lookupIsID_ContinueBitMap #-} lookupIsID_ContinueBitMap :: Int -> Bool lookupIsID_ContinueBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isID_ContinueDataBitMap !(Ptr offsets#) = isID_ContinueOffsetsBitMap isID_ContinueDataBitMap :: Ptr Int8 isID_ContinueDataBitMap = Ptr "\132\252\47\63\80\253\255\243\224\67\0\0\255\255\255\255\255\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\239\111\ \\240\239\254\255\255\63\135\0\0\0\0\255\255\255\31\255\255\255\31\0\0\0\0\255\254\255\255\127\0\0\0\48\0\0\0\0\0\128\1\0\16\0\0\0\2\128\0\0\255\31\ \\0\0\0\0\0\0\255\31\226\255\1\0\224\0\0\0\254\255\62\31\254\255\255\255\255\255\255\255\255\255\127\254\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\255\7\255\255\255\255\255\255\255\255\255\195\255\255\255\255\255\255\255\255\255\255\255\255\239\159\255\ \\253\255\159\238\159\249\255\255\253\237\243\159\57\224\176\207\255\2\0\236\199\61\214\24\199\255\195\199\61\129\0\192\255\0\0\184\255\3\255\255\255\255\255\255\255\255\255\255\255\1\ \\255\255\255\255\255\7\255\255\255\255\255\255\255\255\63\0\0\255\255\255\15\255\7\255\255\255\126\0\255\255\255\255\255\255\255\255\255\251\255\255\255\255\191\32\255\255\255\255\255\255\ \\255\128\0\128\255\255\127\0\127\127\127\127\127\127\127\127\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\255\255\255\255\61\127\61\255\127\255\255\255\255\255\255\255\ \\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\ \\255\63\255\1\0\0\63\0\0\0\0\255\255\255\255\255\255\255\231\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\63\36\255\239\255\255\127\255\255\183\255\ \\63\255\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\ \\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\255\3\254\255\255\135\254\255\255\7\0\0\0\0\0\4\160\4\ \\255\255\127\255\255\255\127\255\15\255\15\192\255\255\255\255\63\31\0\255\255\255\255\255\15\255\255\255\3\255\7\0\0\0\0\128\255\252\255\255\255\255\255\255\255\255\255\255\255\255\ \\249\255\255\255\255\255\255\255\7\235\3\0\0\252\255\223\253\255\255\253\255\243\223\61\96\39\207\255\0\0\239\223\253\255\255\253\239\243\223\61\96\96\207\255\14\0\191\231\223\223\ \\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\253\255\255\247\255\255\255\247\224\255\255\255\255\255\254\255\255\255\ \\255\255\255\255\255\255\255\127\0\0\255\255\255\255\0\0\0\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\207\255\254\255\239\159\249\255\255\253\197\243\159\121\128\176\207\255\3\80\255\255\0\0\255\255\24\0\0\224\0\0\0\0\ \\223\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\255\3\0\248\15\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\255\255\255\255\255\255\7\0\255\255\255\255\255\255\7\0\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\3\255\3\160\194\255\254\255\255\255\31\254\255\223\255\255\254\255\255\255\31\64\0\0\0\0\0\0\0\255\3\ \\254\255\255\135\254\255\255\7\224\255\255\255\255\255\255\255\255\255\255\127\252\252\252\28\0\0\0\0\255\255\255\255\255\255\255\0\255\227\255\255\255\255\255\63\255\1\255\255\255\255\ \\255\231\0\0\247\255\255\255\255\7\0\4\0\0\0\39\0\240\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\15\0\255\255\127\248\255\255\255\255\255\15\255\255\255\255\255\255\255\127\255\255\255\159\255\3\255\3\128\0\255\191\255\127\0\0\0\0\0\0\255\255\255\255\255\31\255\63\255\67\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\127\0\0\255\255\255\255\255\255\255\3\255\255\255\255\255\0\255\3\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\27\3\0\0\0\0\0\0\0\0\224\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\1\0\1\0\ \\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\251\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\188\192\215\255\255\251\255\255\255\255\255\255\255\255\255\ \\191\255\223\253\255\255\255\255\255\223\125\240\128\207\255\0\252\238\255\127\252\255\255\251\47\127\132\95\255\192\255\12\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\31\0\0\0\0\0\0\0\0\255\255\255\255\255\63\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\224\227\7\248\231\15\0\0\0\ \\60\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\255\255\255\255\255\3\255\255\255\255\255\0\255\255\255\255\255\255\15\0\255\247\255\ \\247\183\255\251\255\251\27\0\0\0\0\0\0\0\0\28\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\224\227\7\248\231\15\0\0\0\60\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\127\111\255\127\242\111\255\255\255\191\249\15\0\255\3\0\0\0\0\0\0\0\0\ \\255\252\255\255\255\255\255\252\27\0\0\0\255\255\255\255\255\63\255\255\255\255\15\0\255\255\255\31\255\255\255\255\255\255\255\255\1\128\255\3\255\255\255\127\251\255\255\255\255\127\ \\180\255\0\255\3\191\253\255\255\255\127\251\1\255\3\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\255\255\127\0\191\231\223\ \\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\ \\255\255\255\3\255\255\255\255\255\255\255\255\255\63\255\255\255\255\191\32\255\255\255\255\255\247\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\61\255\255\255\255\255\255\255\255\231\0\254\3\0\255\255\0\0\255\255\ \\255\255\255\255\255\255\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\95\220\31\207\15\255\31\220\31\255\255\253\255\255\255\255\199\7\0\255\3\ \\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\255\255\127\0\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\ \\255\255\255\255\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\255\255\255\255\255\255\127\0\15\0\255\3\248\255\255\224\255\255\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\248\15\0\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\251\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\254\255\255\255\127\2\255\255\255\255\255\1\254\255\255\255\255\191\182\0\255\255\255\135\ \\7\0\255\255\223\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\247\207\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\ \\255\255\253\255\255\247\255\255\255\247\255\255\223\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\247\207\255\255\255\255\255\255\127\248\255\255\255\255\255\31\ \\32\0\16\0\0\248\254\255\0\0\0\0\0\0\0\0\0\0\255\255\255\31\128\0\255\255\255\255\1\0\0\0\255\255\63\0\0\0\0\0\255\255\31\0\0\0\255\255\127\0\ \\248\224\255\253\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\3\0\0\0\0\127\0\248\224\255\253\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\ \\255\255\252\255\255\255\255\255\255\0\0\0\0\0\255\15\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\255\255\ \\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\188\192\215\255\255\251\255\ \\255\255\255\255\255\255\255\255\191\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\255\255\255\255\255\255\255\255\255\ \\135\255\255\255\255\255\255\255\128\255\255\0\0\0\0\0\0\0\0\27\0\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\238\135\249\255\255\253\109\211\135\57\2\94\192\255\63\0\238\191\251\255\255\253\237\243\191\59\1\0\207\255\0\254\254\255\255\255\255\255\255\7\255\127\255\3\0\0\ \\0\0\214\247\255\255\175\255\255\63\95\127\255\243\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\159\255\255\254\255\255\7\255\255\255\255\255\255\255\255\255\199\255\1\ \\255\255\63\128\255\255\31\0\255\255\15\0\255\223\13\0\255\255\255\255\255\255\255\255\255\255\143\48\255\3\0\0\255\31\255\255\255\15\0\0\255\255\255\255\255\255\240\191\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\16\0\0\255\255\255\255\255\255\15\0\255\255\255\255\255\255\255\255\63\0\255\3\255\255\255\232\255\255\255\255\ \\255\255\127\0\255\63\255\3\255\255\127\252\255\255\255\255\255\255\255\255\7\0\0\56\255\255\124\0\126\126\126\0\127\127\255\255\255\255\255\247\255\3\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\55\255\3\255\255\255\255\0\224\255\255\255\7\255\255\255\255\255\7\255\255\255\63\255\255\255\255\15\255\62\0\0\0\0\0\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\63\255\3\255\255\255\255\15\255\255\255\255\15\255\255\255\255\255\255\127\0\255\255\63\0\255\0\0\0\191\255\255\255\255\255\253\7\0\0\ \\0\0\0\0\0\0\63\253\255\255\255\255\191\145\255\255\63\0\255\255\127\0\255\255\255\127\0\0\0\0\0\0\0\0\255\255\55\0\255\255\63\0\255\255\255\3\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\192\0\0\0\0\0\0\0\0\255\255\255\255\255\255\63\0\255\255\63\0\255\255\7\0\255\255\3\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\255\255\255\255\255\255\255\255\127\0\0\0\192\255\63\128\255\255\255\255\255\255\255\7\4\0\255\255\255\1\255\3\255\255\255\255\255\255\223\255\240\0\255\255\255\255\79\0\ \\255\255\255\255\255\255\255\255\31\222\255\23\0\0\0\0\255\255\251\255\255\255\255\192\3\0\0\0\0\0\0\0\127\189\255\191\255\1\255\255\255\255\255\255\255\7\255\3\239\159\ \\249\255\255\253\237\251\159\57\129\224\207\31\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\7\255\195\3\0\0\0\255\255\255\255\ \\255\255\255\255\191\0\255\3\0\0\0\0\255\255\255\255\255\255\255\255\17\0\255\3\0\0\0\0\255\255\255\255\255\255\255\1\255\3\0\0\0\0\0\0\255\255\255\231\255\15\ \\255\3\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\ \\255\255\255\255\255\3\0\128\255\255\255\255\255\255\255\127\128\0\255\255\255\255\255\255\255\255\255\35\0\0\255\255\255\255\255\255\255\255\255\1\255\253\255\255\255\255\127\255\1\0\ \\255\3\0\0\252\255\255\255\252\255\255\254\127\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\1\255\255\255\127\255\3\255\255\255\255\255\255\255\255\255\127\255\3\255\255\255\63\31\0\255\255\255\255\255\255\255\255\255\255\255\255\255\7\ \\255\31\255\1\255\99\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\127\224\7\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\ \\127\255\255\249\219\7\255\255\255\255\255\255\255\63\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\31\0\127\0\0\0\0\0\255\255\255\255\255\255\255\255\255\15\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\255\255\255\ \\150\254\247\10\132\234\150\170\150\247\247\94\255\251\255\15\238\251\255\15\0\0\0\0\0\0\0\0"# isID_ContinueOffsetsBitMap :: Ptr Word16 isID_ContinueOffsetsBitMap = Ptr "\14\2\133\0\141\0\40\5\22\5\122\8\171\0\153\1\3\1\242\2\94\10\203\0\102\2\71\5\126\10\198\3\208\6\133\0\60\1\36\7\132\0\133\0\158\10\190\10\234\0\41\2\84\4\40\3\4\4\133\0\133\0\64\7\80\0\0\0\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\64\8\32\1\244\1\244\1\112\0\178\2\ \\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\99\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\103\5\133\0\222\10\71\2\254\10\76\6\30\11\62\11\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\56\4\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\ \\71\9\44\9\133\0\130\9\18\3\228\3\185\1\199\7\246\4\94\11\126\11\203\5\133\0\158\11\190\11\222\11\49\0\254\11\97\3\162\4\178\4\14\9\30\12\62\12\94\12\126\12\158\12\123\1\190\12\222\12\254\12\44\6\30\13\244\1\62\13\107\6\129\6\96\7\133\0\133\0\133\0\226\4\210\4\62\3\244\1\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\76\3\133\0\133\0\133\0\133\0\154\3\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\94\13\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\126\13\231\7\244\1\244\1\255\7\31\10\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\129\3\133\0\133\0\133\0\133\0\217\1\16\0\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\18\0\133\0\31\4\45\4\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\158\13\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\129\5\244\1\149\5\227\5\244\1\183\6\134\2\146\2\154\8\244\1\244\1\238\8\244\1\244\1\244\1\244\1\190\13\222\13\116\4\130\4\244\1\171\5\244\1\244\1\13\6\254\13\30\14\244\1\244\1\244\1\244\1\62\14\244\1\244\1\244\1\244\1\244\1\ \\244\1\244\1\244\1\244\1\244\1\244\1\244\1\246\1\244\1\244\1\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\95\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\87\1\208\2\133\0\133\0\133\0\ \\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\220\2\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\6\7\133\0\133\0\ \\232\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\240\1\244\1\244\1\244\1\244\1\244\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\207\1\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\133\0\ \\133\0\133\0\133\0\101\1\72\3\133\0"# {-# INLINE isID_Start #-} isID_Start :: Char -> Bool isID_Start c = c >= '\x0041' && c <= '\x323AF' && lookupIsID_StartBitMap (ord c) {-# INLINE lookupIsID_StartBitMap #-} lookupIsID_StartBitMap :: Int -> Bool lookupIsID_StartBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isID_StartDataBitMap !(Ptr offsets#) = isID_StartOffsetsBitMap isID_StartDataBitMap :: Ptr Int8 isID_StartDataBitMap = Ptr "\132\252\47\63\80\253\255\243\224\67\0\0\255\255\255\255\255\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\239\111\ \\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\224\255\255\255\255\255\254\255\255\ \\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\0\0\0\0\0\0\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\254\255\255\7\254\255\255\7\0\0\0\0\0\4\32\4\255\255\127\255\255\255\127\255\255\255\255\191\32\255\255\255\255\255\255\ \\255\128\0\0\255\255\127\0\127\127\127\127\127\127\127\127\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\252\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\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\255\255\7\ \\0\255\239\255\255\127\255\255\183\255\63\255\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\31\120\12\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\ \\255\253\255\255\247\255\255\255\247\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\255\255\255\255\255\63\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\255\159\255\255\254\255\255\7\255\255\ \\255\255\255\255\255\255\255\199\255\1\0\239\254\255\255\63\0\0\0\0\0\255\255\255\31\255\255\255\31\0\0\0\0\255\254\255\255\31\0\0\0\255\255\255\255\255\255\255\255\15\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\255\255\255\255\255\255\7\0\ \\255\255\255\255\255\255\7\0\128\0\0\63\60\98\192\225\255\3\64\0\0\255\255\255\255\191\32\255\255\255\255\255\247\255\31\255\255\0\12\0\0\255\255\255\255\255\127\0\128\255\ \\255\255\63\255\255\255\255\255\255\255\255\255\255\0\0\126\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\ \\255\1\0\0\247\15\0\0\255\255\127\196\255\255\255\255\255\255\98\62\5\0\0\56\255\7\28\0\255\255\255\255\7\0\4\0\0\0\39\0\240\0\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\255\255\127\248\255\255\255\255\255\15\0\0\0\0\224\0\252\255\255\255\63\255\1\255\255\ \\255\255\255\231\0\0\0\0\0\222\111\4\255\255\255\255\255\31\128\63\0\64\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\0\0\ \\255\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\128\255\252\255\255\255\255\255\255\255\255\255\255\255\255\249\255\255\255\ \\255\255\255\255\7\235\3\0\0\252\255\255\63\0\255\255\127\0\0\0\255\255\255\31\240\255\255\255\255\255\7\0\0\128\0\0\223\255\0\124\224\159\249\255\255\253\237\35\0\0\ \\0\176\3\0\2\0\232\199\61\214\24\199\255\3\0\0\1\0\0\0\0\0\0\0\255\254\255\255\255\31\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\ \\255\255\255\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\1\0\0\0\0\0\255\255\255\255\255\7\0\0\0\192\254\255\ \\255\255\255\255\255\255\255\255\255\255\47\0\96\192\0\156\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\255\255\255\255\15\255\255\255\255\15\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\255\255\255\255\255\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\128\0\0\ \\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\128\0\255\255\63\0\0\0\0\0\255\255\3\0\0\0\ \\0\0\255\255\31\0\0\0\255\255\127\0\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\254\255\255\7\254\255\255\7\192\255\ \\255\255\255\255\255\255\255\255\255\127\252\252\252\28\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\188\64\215\255\255\251\255\255\255\255\255\255\255\255\255\191\255\255\255\255\255\255\127\0\255\255\63\0\255\0\0\ \\0\191\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\ \\255\255\255\255\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\255\255\255\255\61\127\61\255\127\255\255\255\255\255\255\254\255\255\ \\255\127\2\255\255\255\255\255\1\0\0\0\0\0\0\0\0\255\255\255\135\7\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\61\255\255\255\255\255\255\255\255\7\0\0\0\0\255\255\0\0\255\255\255\255\255\ \\255\255\255\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\95\220\31\207\15\255\31\220\31\255\255\255\255\255\255\0\0\16\0\0\0\0\0\0\ \\0\255\255\255\255\255\7\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\127\0\0\0\0\0\15\0\0\0\0\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\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\ \\255\255\255\15\0\0\255\255\255\255\255\255\0\0\15\0\0\0\248\255\255\224\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\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\127\111\255\127\242\111\255\255\255\0\128\2\0\0\0\0\0\0\0\0\0\0\0\255\252\255\ \\255\255\255\1\0\10\0\0\0\255\255\255\255\255\255\31\0\128\7\0\128\3\0\0\0\255\255\255\255\255\255\0\0\176\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\255\255\255\255\255\127\0\0\0\0\0\15\0\0\0\0\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\7\255\31\255\1\255\3\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\255\255\255\255\255\255\15\0\255\247\255\247\ \\183\255\251\255\251\27\0\0\0\0\0\0\0\0\255\255\255\127\224\7\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\255\255\255\255\ \\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\31\128\63\0\64\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\127\0\248\160\255\253\127\95\219\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\3\0\0\0\248\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\127\0\248\160\255\253\127\95\219\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\255\255\252\255\255\255\255\255\255\0\0\0\0\0\255\15\255\255\ \\255\255\0\224\255\255\255\7\255\255\255\255\63\0\255\255\255\63\255\255\255\255\15\255\62\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\ \\255\1\0\0\0\0\0\255\255\3\128\255\255\3\0\255\255\3\0\255\223\1\0\255\255\255\255\255\255\15\0\0\0\128\16\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\ \\1\255\255\255\255\255\5\255\255\255\255\255\255\255\255\63\0\255\255\63\0\255\255\7\0\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\251\255\255\15\0\128\1\ \\0\0\0\0\0\0\0\127\189\255\191\255\1\255\255\255\255\255\127\0\0\0\0\0\0\255\255\255\63\31\0\255\255\255\255\255\15\255\255\255\3\0\0\0\0\0\0\255\255\255\ \\255\255\255\255\255\255\255\255\1\255\255\255\255\255\5\255\255\255\255\255\255\255\255\63\0\255\255\255\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\192\0\0\0\0\0\ \\0\0\0\255\255\255\255\255\255\255\255\255\7\1\0\0\0\0\0\0\0\248\255\0\0\0\0\0\0\0\0\11\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\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\255\255\63\4\16\1\0\0\255\255\255\1\255\7\255\255\255\126\0\0\255\255\255\255\255\ \\3\0\0\0\0\0\0\253\255\255\255\0\0\0\224\255\255\255\255\255\255\255\255\255\255\63\0\2\0\0\252\255\255\255\7\48\4\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\255\255\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\ \\255\255\255\255\255\255\35\0\0\1\255\3\0\254\255\225\159\249\255\255\253\197\35\0\64\0\176\3\0\3\16\224\135\249\255\255\253\109\3\0\0\0\94\0\0\28\0\224\191\251\ \\255\255\253\237\35\0\0\1\0\3\0\0\2\224\223\253\255\255\253\255\35\0\0\0\39\3\0\0\0\225\223\253\255\255\253\239\35\0\0\0\96\3\0\6\0\240\223\253\255\255\ \\255\255\39\0\64\112\128\3\0\0\252\224\255\127\252\255\255\251\47\127\0\0\0\0\0\0\0\254\255\255\255\255\255\13\0\127\0\0\0\0\0\0\0\214\247\255\255\175\255\13\ \\32\95\0\0\240\0\0\0\0\224\255\255\255\255\255\15\0\224\31\0\0\0\0\0\0\248\255\255\255\1\192\0\252\255\255\255\255\63\0\0\0\224\0\0\0\254\3\62\31\254\ \\255\255\255\255\255\255\255\255\255\127\248\254\255\255\255\255\255\255\255\255\255\255\247\187\247\255\255\7\0\0\0\255\255\255\255\255\255\15\0\252\255\255\255\255\255\15\0\0\0\0\ \\0\0\0\252\104\126\126\126\0\127\127\255\255\255\255\255\247\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\0\0\0\63\253\255\255\255\255\191\145\255\255\63\0\255\ \\255\127\0\255\255\255\127\0\0\0\0\0\0\0\0\255\255\55\0\248\255\255\255\255\255\255\0\0\0\0\0\0\0\38\0\248\255\255\255\255\255\0\0\0\0\255\255\255\1\0\ \\0\248\255\255\255\127\0\0\0\144\0\255\255\255\255\71\0\248\255\255\255\255\255\7\0\30\0\0\20\0\0\0\0\224\159\249\255\255\253\237\35\0\0\1\224\3\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\7\0\0\0\0\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\248\255\ \\255\255\255\7\4\0\0\1\240\255\255\255\255\255\3\0\32\0\0\255\255\255\255\255\255\255\255\255\1\255\253\255\255\255\127\0\0\1\0\0\0\0\0\252\255\255\255\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\127\251\255\255\255\255\1\0\64\0\0\0\191\253\255\255\255\3\0\1\0\0\0\0\0\0\0\0\0\0\0\0\244\255\253\255\255\255\15\ \\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\255\255\255\255\255\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\255\255\255\255\255\255\255\1\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\63\0\0\255\255\223\255\255\255\223\255\255\127\255\ \\255\255\127\255\255\255\253\255\255\255\253\255\255\247\15\0\0\0\0\0\0\255\255\255\255\255\255\255\255\15\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\239\255\255\255\150\254\247\10\132\234\150\170\150\247\247\94\255\251\255\15\238\251\255\15\0\0\0\0\0\0\0\0"# isID_StartOffsetsBitMap :: Ptr Word16 isID_StartOffsetsBitMap = Ptr "\157\0\51\0\59\0\24\5\220\0\161\5\10\4\95\10\65\10\189\10\221\10\172\3\253\10\29\11\61\11\198\3\89\2\51\0\134\5\245\5\50\0\51\0\222\1\3\9\31\9\111\9\184\4\93\11\12\3\133\0\51\0\17\6\108\4\0\0\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\77\1\188\0\9\1\9\1\125\11\91\0\ \\9\1\9\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\133\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\160\1\51\0\121\2\111\3\157\11\140\3\184\2\189\11\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\241\2\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\51\0\ \\109\8\82\8\51\0\168\8\128\4\212\4\45\1\222\3\238\3\200\8\42\4\190\7\51\0\55\5\221\11\167\9\253\1\55\9\64\2\69\4\85\4\156\4\253\11\29\12\87\9\61\12\17\7\73\6\49\6\93\12\82\3\241\6\125\12\9\1\157\12\189\12\13\1\221\12\51\0\51\0\51\0\4\5\244\4\29\2\9\1\9\1\9\1\9\1\9\1\9\1\ \\9\1\9\1\9\1\43\2\51\0\51\0\51\0\51\0\145\2\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\51\0\51\0\253\12\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\ \\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\51\0\51\0\29\13\170\6\9\1\9\1\194\6\199\9\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\164\7\51\0\51\0\51\0\51\0\238\0\16\0\9\1\9\1\ \\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\18\0\51\0\216\2\230\2\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\99\7\9\1\9\1\9\1\9\1\9\1\ \\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\109\5\109\1\121\1\61\13\9\1\9\1\9\1\9\1\9\1\9\1\9\1\222\7\248\7\44\3\58\3\9\1\138\6\9\1\9\1\210\6\153\1\93\13\9\1\9\1\9\1\9\1\125\13\9\1\9\1\9\1\9\1\9\1\ \\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\129\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\121\0\188\1\51\0\51\0\51\0\ \\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\200\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\215\5\51\0\51\0\ \\253\0\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\9\1\51\0\51\0\5\1\9\1\9\1\9\1\9\1\9\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\67\1\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\51\0\ \\51\0\51\0\51\0\77\1"# {-# INLINE isUppercase #-} isUppercase :: Char -> Bool isUppercase c = c >= '\x0041' && c <= '\x1F189' && lookupIsUppercaseBitMap (ord c) {-# INLINE lookupIsUppercaseBitMap #-} lookupIsUppercaseBitMap :: Int -> Bool lookupIsUppercaseBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isUppercaseDataBitMap !(Ptr offsets#) = isUppercaseOffsetsBitMap isUppercaseDataBitMap :: Ptr Int8 isUppercaseDataBitMap = Ptr "\255\255\255\255\255\255\0\0\0\0\0\0\85\85\85\85\1\84\85\85\85\85\85\85\171\42\85\85\85\85\85\85\254\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\255\255\255\255\255\231\0\0\0\0\0\0\0\0\85\85\85\85\85\21\0\0\85\85\85\5\0\0\0\0\0\0\0\0\0\0\0\0\240\255\255\31\ \\0\0\0\192\255\255\127\0\0\0\0\255\255\255\1\0\0\0\4\0\0\0\0\0\0\254\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\255\255\255\255\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\254\255\255\7\0\0\0\0\ \\0\0\0\0\0\0\0\0\255\255\127\127\0\0\0\0\255\0\63\0\255\0\255\0\63\0\170\0\255\0\0\0\0\0\0\0\0\0\15\0\15\0\15\0\31\0\15\85\85\85\ \\85\85\85\85\170\170\84\85\85\85\85\85\43\214\206\219\177\213\210\174\17\144\164\170\74\85\85\210\85\85\85\85\85\85\85\85\85\85\85\85\85\85\85\85\85\85\21\64\85\85\ \\85\85\85\85\85\85\85\85\85\85\254\255\255\255\127\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\192\255\255\ \\255\0\0\0\0\0\0\255\255\255\3\255\255\255\3\255\255\255\3\255\255\255\255\3\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\255\255\255\255\191\32\0\0\0\0\0\0\84\85\84\85\85\85\85\85\85\85\0\106\85\40\69\85\85\125\95\85\245\2\65\1\0\0\32\0\85\85\85\85\ \\85\85\5\108\122\85\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\255\255\255\255\255\255\255\255\255\255\63\0\132\56\39\62\80\61\15\192\32\0\0\0\255\255\0\0\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\247\255\247\ \\55\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\69\128\64\215\254\255\251\15\0\0\0\128\ \\28\85\85\85\144\230\176\231\223\31\0\0\0\123\95\252\1\0\0\240\255\255\63\0\0\0\255\255\255\3\0\0\240\255\255\63\0\0\0\255\255\255\3\0\0\0\255\255\255\1\ \\0\0\0\252\255\255\7\176\231\223\31\0\0\0\123\95\252\1\0\0\240\255\255\63\0\0\0\255\255\255\3\0\0\240\255\255\63\0\0\0\255\255\255\3\0\0\208\100\222\63\ \\0\0\0\255\255\255\3\0\0\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\255\247\255\247\55\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\3\0\0\240\255\255\63\0\0\0\255\255\255\3\0\0\208\100\222\63\0\0\0\255\255\255\3\0\0\ \\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\0\0\0\0\0\0\157\234\37\192\85\85\85\85\ \\85\85\85\85\85\85\85\85\5\40\4\0"# isUppercaseOffsetsBitMap :: Ptr Word16 isUppercaseOffsetsBitMap = Ptr "\184\0\247\0\190\1\62\2\0\0\26\0\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\130\1\59\1\59\1\226\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\40\0\59\1\22\1\215\0\59\1\2\2\59\1\59\1\69\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\62\3\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\64\0\158\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\121\0\59\1\59\1\59\1\59\1\197\2\20\2\59\1\59\1\59\1\59\1\59\1\59\1\137\0\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\160\0\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\214\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\ \\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\165\2\94\2\113\2\93\0\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\113\1\59\1\59\1\59\1\59\1\59\1\59\1\59\1\95\1"# {-# INLINE isLowercase #-} isLowercase :: Char -> Bool isLowercase c = c >= '\x0061' && c <= '\x1E943' && lookupIsLowercaseBitMap (ord c) {-# INLINE lookupIsLowercaseBitMap #-} lookupIsLowercaseBitMap :: Int -> Bool lookupIsLowercaseBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isLowercaseDataBitMap !(Ptr offsets#) = isLowercaseOffsetsBitMap isLowercaseDataBitMap :: Ptr Int8 isLowercaseDataBitMap = Ptr "\170\170\170\170\170\170\170\85\85\171\170\170\170\170\170\212\41\49\36\78\42\45\81\230\64\82\85\181\170\170\41\170\170\170\170\170\170\250\147\133\170\255\255\255\255\255\255\255\255\239\ \\255\255\255\255\1\3\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\255\255\15\0\0\192\223\ \\255\255\0\0\0\252\255\255\15\0\0\192\235\239\255\0\0\0\252\255\255\223\15\0\0\192\255\255\127\63\0\0\0\255\255\255\253\0\0\0\252\255\255\247\11\0\0\0\0\0\ \\0\255\255\255\255\255\255\170\170\170\170\2\168\170\170\170\170\170\170\84\213\170\170\170\170\170\170\0\0\0\0\0\0\255\255\255\255\255\1\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\15\255\251\255\127\224\7\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\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\255\255\255\15\127\0\248\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\255\255\255\255\255\247\255\3\255\255\255\255\255\255\255\255\255\255\0\0\0\0\ \\0\0\0\0\32\0\0\0\0\0\138\60\0\0\1\0\0\240\255\255\255\127\227\170\170\170\47\25\255\255\255\255\191\32\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\255\255\255\255\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\63\0\196\8\0\ \\0\128\16\50\192\67\0\0\0\0\255\255\16\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\255\255\255\3\0\0\0\0\168\170\171\ \\170\170\170\170\170\170\170\255\149\170\80\186\170\170\130\160\170\10\5\170\2\0\0\92\7\170\170\170\170\170\170\170\170\170\170\170\170\170\170\170\170\170\170\234\191\170\170\170\170\170\ \\170\170\170\170\170\170\170\0\0\0\0\0\0\255\255\255\255\255\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\255\255\255\255\255\255\7\0\0\196\8\0\0\128\16\50\192\67\0\0\0\0\255\255\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\128\0\0\255\31\0\0\0\ \\0\0\0\0\0\0\0\0\0\254\255\255\7\0\0\0\0\0\4\32\4\0\0\0\128\255\255\127\255\15\0\0\192\255\255\255\0\0\0\252\255\255\15\0\0\192\255\255\255\0\ \\0\0\252\255\255\15\0\0\192\255\255\255\0\0\0\252\255\255\63\0\0\0\252\255\255\247\3\0\0\240\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\255\251\255\251\27\0\0\0\0\ \\0\0\0\0\170\170\170\170\170\42\0\0\170\170\170\58\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\185\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\254\255\ \\255\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\98\21\218\63\170\170\170\170\170\170\170\170\170\170\170\170\26\80\8\0\255\0\ \\63\0\255\0\255\0\63\0\255\0\255\0\255\63\255\0\255\0\255\0\223\64\220\0\207\0\255\0\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\128\0\0\255\31\0\ \\0\0\0\0\0\0\0\0\0\0\0"# isLowercaseOffsetsBitMap :: Ptr Word16 isLowercaseOffsetsBitMap = Ptr "\135\2\0\0\31\0\90\1\145\0\171\0\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\46\1\40\1\40\1\158\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\242\2\218\2\13\2\130\3\115\2\190\1\40\1\40\1\207\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\98\3\122\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\28\3\237\1\40\1\40\1\40\1\66\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\37\1\40\1\40\1\40\1\72\3\40\1\40\1\40\1\40\1\198\0\4\3\40\1\48\3\40\1\40\1\40\1\40\1\65\2\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\130\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\60\0\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\ \\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\89\0\167\2\186\2\119\0\40\1\40\1\40\1\40\1\40\1\40\1\40\1\230\0\0\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\40\1\28\1"# {-# INLINE isAlphabetic #-} isAlphabetic :: Char -> Bool isAlphabetic c = c >= '\x0041' && c <= '\x323AF' && lookupIsAlphabeticBitMap (ord c) {-# INLINE lookupIsAlphabeticBitMap #-} lookupIsAlphabeticBitMap :: Int -> Bool lookupIsAlphabeticBitMap n = lookupBit data# ( lookupWord16AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isAlphabeticDataBitMap !(Ptr offsets#) = isAlphabeticOffsetsBitMap isAlphabeticDataBitMap :: Ptr Int8 isAlphabeticDataBitMap = Ptr "\132\252\47\62\80\189\255\243\224\67\0\0\255\255\255\255\255\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\239\111\ \\240\239\254\255\255\63\0\0\0\0\0\255\255\255\31\255\255\255\31\0\0\0\0\255\254\255\255\31\0\0\0\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\195\255\3\0\31\80\0\0\255\7\255\255\255\255\255\255\255\254\0\192\255\255\255\255\255\255\255\255\255\255\255\255\239\31\254\225\ \\0\156\224\255\255\255\255\255\254\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\0\0\0\0\0\0\255\255\255\252\255\31\0\0\255\255\255\1\255\7\255\255\255\126\ \\0\0\255\255\255\255\255\3\240\255\248\3\255\255\255\255\191\32\255\255\255\255\255\255\255\128\0\0\255\255\127\0\127\127\127\127\127\127\127\127\255\255\255\255\255\255\255\3\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\128\255\31\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\3\252\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\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\255\255\127\0\255\239\255\255\127\255\255\183\255\63\255\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\120\12\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\253\255\255\247\255\255\255\247\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\0\0\ \\0\0\0\0\0\0\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\159\255\255\254\255\255\7\255\255\255\255\255\255\255\255\255\199\255\1\255\255\255\255\255\255\255\255\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\255\255\255\255\255\255\7\0\255\255\255\255\255\255\7\0\240\0\255\255\255\255\71\0\255\ \\255\255\255\255\255\255\255\30\192\0\20\0\0\0\0\254\255\255\7\254\255\255\7\192\255\255\255\255\255\255\255\255\255\255\127\252\252\252\28\0\0\0\0\255\255\255\255\255\255\0\ \\224\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\252\255\255\255\7\48\4\255\31\255\255\0\12\0\0\255\255\255\255\255\127\240\143\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\0\0\126\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\1\0\0\0\0\0\0\0\0\ \\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\128\255\252\255\255\255\255\255\255\255\255\255\255\255\255\249\255\255\255\255\255\255\255\7\235\3\0\0\252\255\255\255\7\255\255\ \\255\255\7\0\255\255\255\31\255\255\255\255\255\255\247\255\0\128\0\0\255\255\0\124\255\255\255\255\7\0\4\0\0\0\39\0\240\0\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\15\0\255\255\127\248\255\255\255\255\255\15\255\255\255\255\255\255\255\127\254\255\31\0\0\0\0\0\128\0\0\ \\128\1\112\0\0\0\0\0\0\255\255\255\255\255\31\128\63\0\64\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\63\0\0\255\255\255\ \\255\255\15\0\0\255\255\251\255\255\255\159\192\3\0\0\0\0\0\0\0\127\189\255\191\255\1\255\255\255\255\255\255\255\1\0\0\0\0\0\0\0\255\254\255\255\255\31\254\255\ \\15\255\255\254\255\255\255\31\0\0\0\0\0\0\0\0\255\255\255\255\255\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\ \\1\0\0\0\0\0\238\159\249\255\255\253\237\227\159\25\192\176\15\0\2\0\236\199\61\214\24\199\255\195\199\29\129\0\0\0\0\0\128\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\255\255\255\255\255\255\255\255\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\ \\255\255\255\255\255\27\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\223\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\128\0\255\255\63\0\0\0\0\0\255\ \\255\3\0\0\0\0\0\255\255\31\0\0\0\255\255\127\0\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\128\0\0\255\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\192\255\255\255\255\ \\255\255\3\0\0\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\100\222\255\ \\235\239\255\255\255\255\255\255\255\239\255\223\225\255\15\0\254\255\239\159\249\255\255\253\197\227\159\89\128\176\15\0\3\16\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\3\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\255\255\255\255\254\255\255\255\127\2\255\255\ \\255\255\255\1\0\0\0\0\255\191\182\0\255\255\255\135\7\0\255\255\255\255\255\255\255\127\17\0\0\0\0\0\0\0\255\255\255\255\255\255\63\1\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\255\255\255\255\255\255\63\127\0\0\0\63\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\15\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\255\255\255\15\0\0\255\255\255\255\255\255\255\255\187\7\0\ \\128\3\0\0\0\255\255\255\255\255\255\255\255\179\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\63\127\0\0\0\63\0\0\0\0\255\255\255\255\ \\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\100\222\255\235\239\255\255\255\255\255\255\255\255\255\255\255\255\255\7\255\31\255\1\255\67\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\127\111\255\127\242\111\255\255\255\191\153\7\0\0\0\0\0\0\0\0\0\0\0\255\252\255\255\255\255\255\252\ \\26\0\0\0\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\3\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\254\255\255\7\254\255\255\7\0\0\0\0\0\4\32\4\255\255\127\255\255\255\127\255\15\255\1\0\0\255\255\ \\255\63\31\0\255\255\255\255\255\15\255\255\255\3\0\0\0\0\0\0\239\255\255\255\150\254\247\10\132\234\150\170\150\247\247\94\255\251\255\15\238\251\255\15\0\0\0\0\0\0\ \\0\0\255\255\255\3\255\255\255\3\255\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\0\0\0\0\0\223\188\64\215\255\255\251\255\255\255\255\255\255\255\255\255\ \\191\255\255\255\255\0\0\0\255\255\255\255\255\255\15\0\255\255\255\255\255\255\255\255\47\0\0\0\0\0\252\232\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\ \\255\255\255\255\61\127\61\255\127\255\255\255\255\255\255\127\249\0\0\255\255\255\255\255\255\255\255\0\60\255\255\255\255\191\32\255\255\255\255\255\247\127\0\248\224\255\253\127\95\219\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\ \\127\0\248\224\255\253\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\255\255\252\255\255\255\255\ \\255\255\0\0\0\0\0\255\15\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\224\255\255\255\7\255\255\255\255\ \\255\7\255\255\255\63\255\255\255\255\15\255\62\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\31\255\255\255\255\255\255\1\0\0\0\0\0\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\255\255\255\255\15\255\255\255\255\15\128\255\255\15\0\255\255\15\0\255\223\13\0\255\255\255\255\255\255\207\255\255\1\ \\128\16\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\1\255\255\255\255\255\7\255\255\255\255\255\255\255\255\63\0\0\0\0\0\62\0\255\255\255\255\255\255\255\1\4\0\ \\255\255\255\1\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\255\255\255\3\255\255\255\3\255\255\ \\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\7\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\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\255\255\255\255\255\255\255\255\255\61\127\61\255\255\255\255\255\61\255\255\255\255\61\ \\127\61\255\127\255\255\255\255\255\61\255\255\255\255\255\255\255\255\7\0\0\0\0\255\255\0\0\255\255\255\255\255\255\255\255\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\ \\63\255\255\255\255\255\255\223\95\220\31\207\15\255\31\220\31\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\1\0\255\255\255\ \\255\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\238\135\249\255\255\253\109\195\135\25\2\94\0\0\63\0\238\191\251\255\255\ \\253\237\227\191\27\1\0\15\0\0\30\255\223\253\255\255\253\255\227\223\29\96\39\15\0\0\0\239\223\253\255\255\253\239\227\223\29\96\96\15\0\14\0\255\223\253\255\255\255\255\ \\231\223\93\240\128\15\0\0\252\238\255\127\252\255\255\251\47\127\128\95\255\0\0\12\0\254\255\255\255\255\255\255\7\127\32\0\0\0\0\0\0\214\247\255\255\175\255\255\59\95\ \\32\0\240\0\0\0\0\255\255\255\255\255\255\239\255\239\31\0\0\0\0\0\0\255\255\255\255\255\243\0\252\255\255\255\255\191\255\3\0\255\255\255\255\255\255\127\0\0\224\0\ \\252\255\255\255\63\255\1\255\255\255\255\255\231\0\0\0\0\0\222\111\4\224\0\0\0\254\3\62\31\254\255\255\255\255\255\255\255\255\255\127\224\254\255\255\255\255\255\255\255\255\ \\255\255\247\255\255\255\255\255\255\127\0\255\63\0\0\255\255\127\252\255\255\255\255\255\255\255\127\5\0\0\56\255\255\60\0\126\126\126\0\127\127\255\255\255\255\255\247\255\3\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\0\0\255\255\255\255\255\0\255\255\255\255\255\255\15\0\255\247\255\247\183\255\251\255\251\27\0\0\0\0\0\0\0\0\255\ \\255\255\255\255\255\127\0\255\255\63\0\255\0\0\0\191\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\63\253\255\255\255\255\191\145\255\255\63\0\255\255\127\0\255\255\255\ \\127\0\0\0\0\0\0\0\0\255\255\55\0\255\255\63\0\255\255\255\3\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\192\0\0\0\0\0\0\0\0\255\255\255\255\255\ \\255\63\0\255\255\63\0\255\255\7\0\255\255\3\0\0\0\0\0\0\0\0\0\0\0\0\0\239\159\249\255\255\253\237\227\159\25\129\224\15\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\255\255\255\231\255\7\0\0\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\231\127\0\ \\0\255\255\255\255\255\255\255\255\255\32\0\0\255\255\255\255\255\255\255\255\255\1\255\253\255\255\255\255\127\127\1\0\0\0\0\0\252\255\255\255\252\255\255\254\127\0\0\0\0\ \\0\0\0\0\0\127\251\255\255\255\255\127\180\203\0\0\0\191\253\255\255\255\127\123\1\0\0\0\0\0\0\0\0\0\0\0\0\255\255\253\255\255\255\255\199\1\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\255\255\255\255\255\255\255\1\255\255\255\127\0\0\255\255\255\255\255\255\255\255\255\127\0\0\255\255\255\63\0\0\255\255\255\255\255\255\0\0\15\0\0\0\248\255\255\224\255\ \\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\135\255\255\255\255\255\255\255\128\255\255\0\0\0\0\0\0\0\0\11\0\3\0\255\255\223\ \\255\255\255\223\255\255\127\255\255\255\127\255\255\255\253\255\255\255\253\255\255\247\15\0\0\0\0\0\0\255\255\255\127\224\7\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\127\255\255\249\219\7\255\255\255\255\255\255\255\63\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\ \\255\143\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"# isAlphabeticOffsetsBitMap :: Ptr Word16 isAlphabeticOffsetsBitMap = Ptr "\69\7\82\0\90\0\178\7\28\1\206\5\120\0\179\2\182\0\122\5\119\10\82\4\151\10\183\10\215\10\10\4\11\8\82\0\240\7\253\9\81\0\82\0\30\2\20\9\48\9\96\7\159\3\247\10\23\11\252\0\82\0\25\10\23\5\0\0\73\1\73\1\43\5\73\1\73\1\73\1\73\1\73\1\73\1\73\1\141\1\212\0\109\4\73\1\55\11\152\0\ \\73\1\73\1\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\45\7\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\224\1\82\0\211\2\45\3\208\7\74\3\87\11\119\11\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\131\3\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\82\0\ \\70\8\43\8\82\0\129\8\183\4\149\2\109\1\34\4\50\4\188\8\247\8\151\11\82\0\183\11\215\11\247\11\49\0\23\12\97\2\144\4\160\4\211\4\70\9\121\2\237\3\55\12\103\6\6\6\238\5\87\12\16\3\236\6\119\12\73\1\151\12\183\12\77\1\215\12\82\0\82\0\82\0\3\5\243\4\62\2\73\1\73\1\73\1\73\1\73\1\73\1\ \\73\1\73\1\73\1\76\2\82\0\82\0\82\0\82\0\235\2\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\82\0\82\0\247\12\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\ \\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\82\0\82\0\23\13\55\13\73\1\73\1\133\4\87\13\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\161\8\82\0\82\0\82\0\82\0\46\1\16\0\73\1\73\1\ \\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\18\0\82\0\106\3\120\3\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\185\6\73\1\73\1\73\1\73\1\73\1\ \\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\97\5\173\1\185\1\119\13\73\1\73\1\73\1\73\1\73\1\73\1\73\1\151\13\183\13\191\3\205\3\73\1\71\6\73\1\73\1\205\6\217\1\215\13\73\1\73\1\73\1\73\1\128\7\73\1\73\1\154\7\73\1\73\1\ \\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\248\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\240\0\252\1\82\0\82\0\82\0\ \\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\8\2\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\176\5\82\0\82\0\ \\61\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\73\1\82\0\82\0\69\1\73\1\73\1\73\1\73\1\73\1\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\131\1\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\82\0\ \\82\0\82\0\82\0\141\1"# unicode-data-0.6.0/lib/Unicode/Internal/Char/DerivedNumericValues.hs0000644000000000000000000012302407346545000023453 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/extracted/DerivedNumericValues.txt -- | -- Module : Unicode.Internal.Char.DerivedNumericValues -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.DerivedNumericValues (numericValue) where import Data.Ratio ((%)) {-# NOINLINE numericValue #-} numericValue :: Char -> Maybe Rational numericValue = \case '0' -> Just 0 '1' -> Just 1 '2' -> Just 2 '3' -> Just 3 '4' -> Just 4 '5' -> Just 5 '6' -> Just 6 '7' -> Just 7 '8' -> Just 8 '9' -> Just 9 '\178' -> Just 2 '\179' -> Just 3 '\185' -> Just 1 '\188' -> Just (1 % 4) '\189' -> Just (1 % 2) '\190' -> Just (3 % 4) '\1632' -> Just 0 '\1633' -> Just 1 '\1634' -> Just 2 '\1635' -> Just 3 '\1636' -> Just 4 '\1637' -> Just 5 '\1638' -> Just 6 '\1639' -> Just 7 '\1640' -> Just 8 '\1641' -> Just 9 '\1776' -> Just 0 '\1777' -> Just 1 '\1778' -> Just 2 '\1779' -> Just 3 '\1780' -> Just 4 '\1781' -> Just 5 '\1782' -> Just 6 '\1783' -> Just 7 '\1784' -> Just 8 '\1785' -> Just 9 '\1984' -> Just 0 '\1985' -> Just 1 '\1986' -> Just 2 '\1987' -> Just 3 '\1988' -> Just 4 '\1989' -> Just 5 '\1990' -> Just 6 '\1991' -> Just 7 '\1992' -> Just 8 '\1993' -> Just 9 '\2406' -> Just 0 '\2407' -> Just 1 '\2408' -> Just 2 '\2409' -> Just 3 '\2410' -> Just 4 '\2411' -> Just 5 '\2412' -> Just 6 '\2413' -> Just 7 '\2414' -> Just 8 '\2415' -> Just 9 '\2534' -> Just 0 '\2535' -> Just 1 '\2536' -> Just 2 '\2537' -> Just 3 '\2538' -> Just 4 '\2539' -> Just 5 '\2540' -> Just 6 '\2541' -> Just 7 '\2542' -> Just 8 '\2543' -> Just 9 '\2548' -> Just (1 % 16) '\2549' -> Just (1 % 8) '\2550' -> Just (3 % 16) '\2551' -> Just (1 % 4) '\2552' -> Just (3 % 4) '\2553' -> Just 16 '\2662' -> Just 0 '\2663' -> Just 1 '\2664' -> Just 2 '\2665' -> Just 3 '\2666' -> Just 4 '\2667' -> Just 5 '\2668' -> Just 6 '\2669' -> Just 7 '\2670' -> Just 8 '\2671' -> Just 9 '\2790' -> Just 0 '\2791' -> Just 1 '\2792' -> Just 2 '\2793' -> Just 3 '\2794' -> Just 4 '\2795' -> Just 5 '\2796' -> Just 6 '\2797' -> Just 7 '\2798' -> Just 8 '\2799' -> Just 9 '\2918' -> Just 0 '\2919' -> Just 1 '\2920' -> Just 2 '\2921' -> Just 3 '\2922' -> Just 4 '\2923' -> Just 5 '\2924' -> Just 6 '\2925' -> Just 7 '\2926' -> Just 8 '\2927' -> Just 9 '\2930' -> Just (1 % 4) '\2931' -> Just (1 % 2) '\2932' -> Just (3 % 4) '\2933' -> Just (1 % 16) '\2934' -> Just (1 % 8) '\2935' -> Just (3 % 16) '\3046' -> Just 0 '\3047' -> Just 1 '\3048' -> Just 2 '\3049' -> Just 3 '\3050' -> Just 4 '\3051' -> Just 5 '\3052' -> Just 6 '\3053' -> Just 7 '\3054' -> Just 8 '\3055' -> Just 9 '\3056' -> Just 10 '\3057' -> Just 100 '\3058' -> Just 1000 '\3174' -> Just 0 '\3175' -> Just 1 '\3176' -> Just 2 '\3177' -> Just 3 '\3178' -> Just 4 '\3179' -> Just 5 '\3180' -> Just 6 '\3181' -> Just 7 '\3182' -> Just 8 '\3183' -> Just 9 '\3192' -> Just 0 '\3193' -> Just 1 '\3194' -> Just 2 '\3195' -> Just 3 '\3196' -> Just 1 '\3197' -> Just 2 '\3198' -> Just 3 '\3302' -> Just 0 '\3303' -> Just 1 '\3304' -> Just 2 '\3305' -> Just 3 '\3306' -> Just 4 '\3307' -> Just 5 '\3308' -> Just 6 '\3309' -> Just 7 '\3310' -> Just 8 '\3311' -> Just 9 '\3416' -> Just (1 % 160) '\3417' -> Just (1 % 40) '\3418' -> Just (3 % 80) '\3419' -> Just (1 % 20) '\3420' -> Just (1 % 10) '\3421' -> Just (3 % 20) '\3422' -> Just (1 % 5) '\3430' -> Just 0 '\3431' -> Just 1 '\3432' -> Just 2 '\3433' -> Just 3 '\3434' -> Just 4 '\3435' -> Just 5 '\3436' -> Just 6 '\3437' -> Just 7 '\3438' -> Just 8 '\3439' -> Just 9 '\3440' -> Just 10 '\3441' -> Just 100 '\3442' -> Just 1000 '\3443' -> Just (1 % 4) '\3444' -> Just (1 % 2) '\3445' -> Just (3 % 4) '\3446' -> Just (1 % 16) '\3447' -> Just (1 % 8) '\3448' -> Just (3 % 16) '\3558' -> Just 0 '\3559' -> Just 1 '\3560' -> Just 2 '\3561' -> Just 3 '\3562' -> Just 4 '\3563' -> Just 5 '\3564' -> Just 6 '\3565' -> Just 7 '\3566' -> Just 8 '\3567' -> Just 9 '\3664' -> Just 0 '\3665' -> Just 1 '\3666' -> Just 2 '\3667' -> Just 3 '\3668' -> Just 4 '\3669' -> Just 5 '\3670' -> Just 6 '\3671' -> Just 7 '\3672' -> Just 8 '\3673' -> Just 9 '\3792' -> Just 0 '\3793' -> Just 1 '\3794' -> Just 2 '\3795' -> Just 3 '\3796' -> Just 4 '\3797' -> Just 5 '\3798' -> Just 6 '\3799' -> Just 7 '\3800' -> Just 8 '\3801' -> Just 9 '\3872' -> Just 0 '\3873' -> Just 1 '\3874' -> Just 2 '\3875' -> Just 3 '\3876' -> Just 4 '\3877' -> Just 5 '\3878' -> Just 6 '\3879' -> Just 7 '\3880' -> Just 8 '\3881' -> Just 9 '\3882' -> Just (1 % 2) '\3883' -> Just (3 % 2) '\3884' -> Just (5 % 2) '\3885' -> Just (7 % 2) '\3886' -> Just (9 % 2) '\3887' -> Just (11 % 2) '\3888' -> Just (13 % 2) '\3889' -> Just (15 % 2) '\3890' -> Just (17 % 2) '\3891' -> Just ((-1) % 2) '\4160' -> Just 0 '\4161' -> Just 1 '\4162' -> Just 2 '\4163' -> Just 3 '\4164' -> Just 4 '\4165' -> Just 5 '\4166' -> Just 6 '\4167' -> Just 7 '\4168' -> Just 8 '\4169' -> Just 9 '\4240' -> Just 0 '\4241' -> Just 1 '\4242' -> Just 2 '\4243' -> Just 3 '\4244' -> Just 4 '\4245' -> Just 5 '\4246' -> Just 6 '\4247' -> Just 7 '\4248' -> Just 8 '\4249' -> Just 9 '\4969' -> Just 1 '\4970' -> Just 2 '\4971' -> Just 3 '\4972' -> Just 4 '\4973' -> Just 5 '\4974' -> Just 6 '\4975' -> Just 7 '\4976' -> Just 8 '\4977' -> Just 9 '\4978' -> Just 10 '\4979' -> Just 20 '\4980' -> Just 30 '\4981' -> Just 40 '\4982' -> Just 50 '\4983' -> Just 60 '\4984' -> Just 70 '\4985' -> Just 80 '\4986' -> Just 90 '\4987' -> Just 100 '\4988' -> Just 10000 '\5870' -> Just 17 '\5871' -> Just 18 '\5872' -> Just 19 '\6112' -> Just 0 '\6113' -> Just 1 '\6114' -> Just 2 '\6115' -> Just 3 '\6116' -> Just 4 '\6117' -> Just 5 '\6118' -> Just 6 '\6119' -> Just 7 '\6120' -> Just 8 '\6121' -> Just 9 '\6128' -> Just 0 '\6129' -> Just 1 '\6130' -> Just 2 '\6131' -> Just 3 '\6132' -> Just 4 '\6133' -> Just 5 '\6134' -> Just 6 '\6135' -> Just 7 '\6136' -> Just 8 '\6137' -> Just 9 '\6160' -> Just 0 '\6161' -> Just 1 '\6162' -> Just 2 '\6163' -> Just 3 '\6164' -> Just 4 '\6165' -> Just 5 '\6166' -> Just 6 '\6167' -> Just 7 '\6168' -> Just 8 '\6169' -> Just 9 '\6470' -> Just 0 '\6471' -> Just 1 '\6472' -> Just 2 '\6473' -> Just 3 '\6474' -> Just 4 '\6475' -> Just 5 '\6476' -> Just 6 '\6477' -> Just 7 '\6478' -> Just 8 '\6479' -> Just 9 '\6608' -> Just 0 '\6609' -> Just 1 '\6610' -> Just 2 '\6611' -> Just 3 '\6612' -> Just 4 '\6613' -> Just 5 '\6614' -> Just 6 '\6615' -> Just 7 '\6616' -> Just 8 '\6617' -> Just 9 '\6618' -> Just 1 '\6784' -> Just 0 '\6785' -> Just 1 '\6786' -> Just 2 '\6787' -> Just 3 '\6788' -> Just 4 '\6789' -> Just 5 '\6790' -> Just 6 '\6791' -> Just 7 '\6792' -> Just 8 '\6793' -> Just 9 '\6800' -> Just 0 '\6801' -> Just 1 '\6802' -> Just 2 '\6803' -> Just 3 '\6804' -> Just 4 '\6805' -> Just 5 '\6806' -> Just 6 '\6807' -> Just 7 '\6808' -> Just 8 '\6809' -> Just 9 '\6992' -> Just 0 '\6993' -> Just 1 '\6994' -> Just 2 '\6995' -> Just 3 '\6996' -> Just 4 '\6997' -> Just 5 '\6998' -> Just 6 '\6999' -> Just 7 '\7000' -> Just 8 '\7001' -> Just 9 '\7088' -> Just 0 '\7089' -> Just 1 '\7090' -> Just 2 '\7091' -> Just 3 '\7092' -> Just 4 '\7093' -> Just 5 '\7094' -> Just 6 '\7095' -> Just 7 '\7096' -> Just 8 '\7097' -> Just 9 '\7232' -> Just 0 '\7233' -> Just 1 '\7234' -> Just 2 '\7235' -> Just 3 '\7236' -> Just 4 '\7237' -> Just 5 '\7238' -> Just 6 '\7239' -> Just 7 '\7240' -> Just 8 '\7241' -> Just 9 '\7248' -> Just 0 '\7249' -> Just 1 '\7250' -> Just 2 '\7251' -> Just 3 '\7252' -> Just 4 '\7253' -> Just 5 '\7254' -> Just 6 '\7255' -> Just 7 '\7256' -> Just 8 '\7257' -> Just 9 '\8304' -> Just 0 '\8308' -> Just 4 '\8309' -> Just 5 '\8310' -> Just 6 '\8311' -> Just 7 '\8312' -> Just 8 '\8313' -> Just 9 '\8320' -> Just 0 '\8321' -> Just 1 '\8322' -> Just 2 '\8323' -> Just 3 '\8324' -> Just 4 '\8325' -> Just 5 '\8326' -> Just 6 '\8327' -> Just 7 '\8328' -> Just 8 '\8329' -> Just 9 '\8528' -> Just (1 % 7) '\8529' -> Just (1 % 9) '\8530' -> Just (1 % 10) '\8531' -> Just (1 % 3) '\8532' -> Just (2 % 3) '\8533' -> Just (1 % 5) '\8534' -> Just (2 % 5) '\8535' -> Just (3 % 5) '\8536' -> Just (4 % 5) '\8537' -> Just (1 % 6) '\8538' -> Just (5 % 6) '\8539' -> Just (1 % 8) '\8540' -> Just (3 % 8) '\8541' -> Just (5 % 8) '\8542' -> Just (7 % 8) '\8543' -> Just 1 '\8544' -> Just 1 '\8545' -> Just 2 '\8546' -> Just 3 '\8547' -> Just 4 '\8548' -> Just 5 '\8549' -> Just 6 '\8550' -> Just 7 '\8551' -> Just 8 '\8552' -> Just 9 '\8553' -> Just 10 '\8554' -> Just 11 '\8555' -> Just 12 '\8556' -> Just 50 '\8557' -> Just 100 '\8558' -> Just 500 '\8559' -> Just 1000 '\8560' -> Just 1 '\8561' -> Just 2 '\8562' -> Just 3 '\8563' -> Just 4 '\8564' -> Just 5 '\8565' -> Just 6 '\8566' -> Just 7 '\8567' -> Just 8 '\8568' -> Just 9 '\8569' -> Just 10 '\8570' -> Just 11 '\8571' -> Just 12 '\8572' -> Just 50 '\8573' -> Just 100 '\8574' -> Just 500 '\8575' -> Just 1000 '\8576' -> Just 1000 '\8577' -> Just 5000 '\8578' -> Just 10000 '\8581' -> Just 6 '\8582' -> Just 50 '\8583' -> Just 50000 '\8584' -> Just 100000 '\8585' -> Just 0 '\9312' -> Just 1 '\9313' -> Just 2 '\9314' -> Just 3 '\9315' -> Just 4 '\9316' -> Just 5 '\9317' -> Just 6 '\9318' -> Just 7 '\9319' -> Just 8 '\9320' -> Just 9 '\9321' -> Just 10 '\9322' -> Just 11 '\9323' -> Just 12 '\9324' -> Just 13 '\9325' -> Just 14 '\9326' -> Just 15 '\9327' -> Just 16 '\9328' -> Just 17 '\9329' -> Just 18 '\9330' -> Just 19 '\9331' -> Just 20 '\9332' -> Just 1 '\9333' -> Just 2 '\9334' -> Just 3 '\9335' -> Just 4 '\9336' -> Just 5 '\9337' -> Just 6 '\9338' -> Just 7 '\9339' -> Just 8 '\9340' -> Just 9 '\9341' -> Just 10 '\9342' -> Just 11 '\9343' -> Just 12 '\9344' -> Just 13 '\9345' -> Just 14 '\9346' -> Just 15 '\9347' -> Just 16 '\9348' -> Just 17 '\9349' -> Just 18 '\9350' -> Just 19 '\9351' -> Just 20 '\9352' -> Just 1 '\9353' -> Just 2 '\9354' -> Just 3 '\9355' -> Just 4 '\9356' -> Just 5 '\9357' -> Just 6 '\9358' -> Just 7 '\9359' -> Just 8 '\9360' -> Just 9 '\9361' -> Just 10 '\9362' -> Just 11 '\9363' -> Just 12 '\9364' -> Just 13 '\9365' -> Just 14 '\9366' -> Just 15 '\9367' -> Just 16 '\9368' -> Just 17 '\9369' -> Just 18 '\9370' -> Just 19 '\9371' -> Just 20 '\9450' -> Just 0 '\9451' -> Just 11 '\9452' -> Just 12 '\9453' -> Just 13 '\9454' -> Just 14 '\9455' -> Just 15 '\9456' -> Just 16 '\9457' -> Just 17 '\9458' -> Just 18 '\9459' -> Just 19 '\9460' -> Just 20 '\9461' -> Just 1 '\9462' -> Just 2 '\9463' -> Just 3 '\9464' -> Just 4 '\9465' -> Just 5 '\9466' -> Just 6 '\9467' -> Just 7 '\9468' -> Just 8 '\9469' -> Just 9 '\9470' -> Just 10 '\9471' -> Just 0 '\10102' -> Just 1 '\10103' -> Just 2 '\10104' -> Just 3 '\10105' -> Just 4 '\10106' -> Just 5 '\10107' -> Just 6 '\10108' -> Just 7 '\10109' -> Just 8 '\10110' -> Just 9 '\10111' -> Just 10 '\10112' -> Just 1 '\10113' -> Just 2 '\10114' -> Just 3 '\10115' -> Just 4 '\10116' -> Just 5 '\10117' -> Just 6 '\10118' -> Just 7 '\10119' -> Just 8 '\10120' -> Just 9 '\10121' -> Just 10 '\10122' -> Just 1 '\10123' -> Just 2 '\10124' -> Just 3 '\10125' -> Just 4 '\10126' -> Just 5 '\10127' -> Just 6 '\10128' -> Just 7 '\10129' -> Just 8 '\10130' -> Just 9 '\10131' -> Just 10 '\11517' -> Just (1 % 2) '\12295' -> Just 0 '\12321' -> Just 1 '\12322' -> Just 2 '\12323' -> Just 3 '\12324' -> Just 4 '\12325' -> Just 5 '\12326' -> Just 6 '\12327' -> Just 7 '\12328' -> Just 8 '\12329' -> Just 9 '\12344' -> Just 10 '\12345' -> Just 20 '\12346' -> Just 30 '\12690' -> Just 1 '\12691' -> Just 2 '\12692' -> Just 3 '\12693' -> Just 4 '\12832' -> Just 1 '\12833' -> Just 2 '\12834' -> Just 3 '\12835' -> Just 4 '\12836' -> Just 5 '\12837' -> Just 6 '\12838' -> Just 7 '\12839' -> Just 8 '\12840' -> Just 9 '\12841' -> Just 10 '\12872' -> Just 10 '\12873' -> Just 20 '\12874' -> Just 30 '\12875' -> Just 40 '\12876' -> Just 50 '\12877' -> Just 60 '\12878' -> Just 70 '\12879' -> Just 80 '\12881' -> Just 21 '\12882' -> Just 22 '\12883' -> Just 23 '\12884' -> Just 24 '\12885' -> Just 25 '\12886' -> Just 26 '\12887' -> Just 27 '\12888' -> Just 28 '\12889' -> Just 29 '\12890' -> Just 30 '\12891' -> Just 31 '\12892' -> Just 32 '\12893' -> Just 33 '\12894' -> Just 34 '\12895' -> Just 35 '\12928' -> Just 1 '\12929' -> Just 2 '\12930' -> Just 3 '\12931' -> Just 4 '\12932' -> Just 5 '\12933' -> Just 6 '\12934' -> Just 7 '\12935' -> Just 8 '\12936' -> Just 9 '\12937' -> Just 10 '\12977' -> Just 36 '\12978' -> Just 37 '\12979' -> Just 38 '\12980' -> Just 39 '\12981' -> Just 40 '\12982' -> Just 41 '\12983' -> Just 42 '\12984' -> Just 43 '\12985' -> Just 44 '\12986' -> Just 45 '\12987' -> Just 46 '\12988' -> Just 47 '\12989' -> Just 48 '\12990' -> Just 49 '\12991' -> Just 50 '\13317' -> Just 5 '\13443' -> Just 2 '\14378' -> Just 5 '\15181' -> Just 7 '\19968' -> Just 1 '\19971' -> Just 7 '\19975' -> Just 10000 '\19977' -> Just 3 '\20004' -> Just 2 '\20061' -> Just 9 '\20108' -> Just 2 '\20116' -> Just 5 '\20118' -> Just 4 '\20140' -> Just 10000000000000000 '\20159' -> Just 100000000 '\20160' -> Just 10 '\20191' -> Just 1000 '\20200' -> Just 3 '\20237' -> Just 5 '\20336' -> Just 100 '\20457' -> Just 2 '\20486' -> Just 2 '\20740' -> Just 100000000 '\20806' -> Just 1000000 '\20841' -> Just 2 '\20843' -> Just 8 '\20845' -> Just 6 '\21313' -> Just 10 '\21315' -> Just 1000 '\21316' -> Just 20 '\21317' -> Just 30 '\21324' -> Just 40 '\21441' -> Just 3 '\21442' -> Just 3 '\21443' -> Just 3 '\21444' -> Just 3 '\22235' -> Just 4 '\22769' -> Just 1 '\22777' -> Just 1 '\24186' -> Just 1 '\24318' -> Just 9 '\24319' -> Just 20 '\24332' -> Just 1 '\24333' -> Just 2 '\24334' -> Just 3 '\24336' -> Just 2 '\25296' -> Just 7 '\25342' -> Just 10 '\25420' -> Just 8 '\26578' -> Just 7 '\27934' -> Just 0 '\28422' -> Just 7 '\29590' -> Just 9 '\30334' -> Just 100 '\30357' -> Just 200 '\31213' -> Just 1000000000 '\32902' -> Just 4 '\33836' -> Just 10000 '\36014' -> Just 2 '\36019' -> Just 2 '\36144' -> Just 2 '\37390' -> Just 9 '\38057' -> Just 9 '\38433' -> Just 1000 '\38470' -> Just 6 '\38476' -> Just 100 '\38520' -> Just 6 '\38646' -> Just 0 '\42528' -> Just 0 '\42529' -> Just 1 '\42530' -> Just 2 '\42531' -> Just 3 '\42532' -> Just 4 '\42533' -> Just 5 '\42534' -> Just 6 '\42535' -> Just 7 '\42536' -> Just 8 '\42537' -> Just 9 '\42726' -> Just 1 '\42727' -> Just 2 '\42728' -> Just 3 '\42729' -> Just 4 '\42730' -> Just 5 '\42731' -> Just 6 '\42732' -> Just 7 '\42733' -> Just 8 '\42734' -> Just 9 '\42735' -> Just 0 '\43056' -> Just (1 % 4) '\43057' -> Just (1 % 2) '\43058' -> Just (3 % 4) '\43059' -> Just (1 % 16) '\43060' -> Just (1 % 8) '\43061' -> Just (3 % 16) '\43216' -> Just 0 '\43217' -> Just 1 '\43218' -> Just 2 '\43219' -> Just 3 '\43220' -> Just 4 '\43221' -> Just 5 '\43222' -> Just 6 '\43223' -> Just 7 '\43224' -> Just 8 '\43225' -> Just 9 '\43264' -> Just 0 '\43265' -> Just 1 '\43266' -> Just 2 '\43267' -> Just 3 '\43268' -> Just 4 '\43269' -> Just 5 '\43270' -> Just 6 '\43271' -> Just 7 '\43272' -> Just 8 '\43273' -> Just 9 '\43472' -> Just 0 '\43473' -> Just 1 '\43474' -> Just 2 '\43475' -> Just 3 '\43476' -> Just 4 '\43477' -> Just 5 '\43478' -> Just 6 '\43479' -> Just 7 '\43480' -> Just 8 '\43481' -> Just 9 '\43504' -> Just 0 '\43505' -> Just 1 '\43506' -> Just 2 '\43507' -> Just 3 '\43508' -> Just 4 '\43509' -> Just 5 '\43510' -> Just 6 '\43511' -> Just 7 '\43512' -> Just 8 '\43513' -> Just 9 '\43600' -> Just 0 '\43601' -> Just 1 '\43602' -> Just 2 '\43603' -> Just 3 '\43604' -> Just 4 '\43605' -> Just 5 '\43606' -> Just 6 '\43607' -> Just 7 '\43608' -> Just 8 '\43609' -> Just 9 '\44016' -> Just 0 '\44017' -> Just 1 '\44018' -> Just 2 '\44019' -> Just 3 '\44020' -> Just 4 '\44021' -> Just 5 '\44022' -> Just 6 '\44023' -> Just 7 '\44024' -> Just 8 '\44025' -> Just 9 '\63851' -> Just 3 '\63859' -> Just 10 '\63864' -> Just 2 '\63922' -> Just 0 '\63953' -> Just 6 '\63955' -> Just 6 '\63997' -> Just 10 '\65296' -> Just 0 '\65297' -> Just 1 '\65298' -> Just 2 '\65299' -> Just 3 '\65300' -> Just 4 '\65301' -> Just 5 '\65302' -> Just 6 '\65303' -> Just 7 '\65304' -> Just 8 '\65305' -> Just 9 '\65799' -> Just 1 '\65800' -> Just 2 '\65801' -> Just 3 '\65802' -> Just 4 '\65803' -> Just 5 '\65804' -> Just 6 '\65805' -> Just 7 '\65806' -> Just 8 '\65807' -> Just 9 '\65808' -> Just 10 '\65809' -> Just 20 '\65810' -> Just 30 '\65811' -> Just 40 '\65812' -> Just 50 '\65813' -> Just 60 '\65814' -> Just 70 '\65815' -> Just 80 '\65816' -> Just 90 '\65817' -> Just 100 '\65818' -> Just 200 '\65819' -> Just 300 '\65820' -> Just 400 '\65821' -> Just 500 '\65822' -> Just 600 '\65823' -> Just 700 '\65824' -> Just 800 '\65825' -> Just 900 '\65826' -> Just 1000 '\65827' -> Just 2000 '\65828' -> Just 3000 '\65829' -> Just 4000 '\65830' -> Just 5000 '\65831' -> Just 6000 '\65832' -> Just 7000 '\65833' -> Just 8000 '\65834' -> Just 9000 '\65835' -> Just 10000 '\65836' -> Just 20000 '\65837' -> Just 30000 '\65838' -> Just 40000 '\65839' -> Just 50000 '\65840' -> Just 60000 '\65841' -> Just 70000 '\65842' -> Just 80000 '\65843' -> Just 90000 '\65856' -> Just (1 % 4) '\65857' -> Just (1 % 2) '\65858' -> Just 1 '\65859' -> Just 5 '\65860' -> Just 50 '\65861' -> Just 500 '\65862' -> Just 5000 '\65863' -> Just 50000 '\65864' -> Just 5 '\65865' -> Just 10 '\65866' -> Just 50 '\65867' -> Just 100 '\65868' -> Just 500 '\65869' -> Just 1000 '\65870' -> Just 5000 '\65871' -> Just 5 '\65872' -> Just 10 '\65873' -> Just 50 '\65874' -> Just 100 '\65875' -> Just 500 '\65876' -> Just 1000 '\65877' -> Just 10000 '\65878' -> Just 50000 '\65879' -> Just 10 '\65880' -> Just 1 '\65881' -> Just 1 '\65882' -> Just 1 '\65883' -> Just 2 '\65884' -> Just 2 '\65885' -> Just 2 '\65886' -> Just 2 '\65887' -> Just 5 '\65888' -> Just 10 '\65889' -> Just 10 '\65890' -> Just 10 '\65891' -> Just 10 '\65892' -> Just 10 '\65893' -> Just 30 '\65894' -> Just 50 '\65895' -> Just 50 '\65896' -> Just 50 '\65897' -> Just 50 '\65898' -> Just 100 '\65899' -> Just 300 '\65900' -> Just 500 '\65901' -> Just 500 '\65902' -> Just 500 '\65903' -> Just 500 '\65904' -> Just 500 '\65905' -> Just 1000 '\65906' -> Just 5000 '\65907' -> Just 5 '\65908' -> Just 50 '\65909' -> Just (1 % 2) '\65910' -> Just (1 % 2) '\65911' -> Just (2 % 3) '\65912' -> Just (3 % 4) '\65930' -> Just 0 '\65931' -> Just (1 % 4) '\66273' -> Just 1 '\66274' -> Just 2 '\66275' -> Just 3 '\66276' -> Just 4 '\66277' -> Just 5 '\66278' -> Just 6 '\66279' -> Just 7 '\66280' -> Just 8 '\66281' -> Just 9 '\66282' -> Just 10 '\66283' -> Just 20 '\66284' -> Just 30 '\66285' -> Just 40 '\66286' -> Just 50 '\66287' -> Just 60 '\66288' -> Just 70 '\66289' -> Just 80 '\66290' -> Just 90 '\66291' -> Just 100 '\66292' -> Just 200 '\66293' -> Just 300 '\66294' -> Just 400 '\66295' -> Just 500 '\66296' -> Just 600 '\66297' -> Just 700 '\66298' -> Just 800 '\66299' -> Just 900 '\66336' -> Just 1 '\66337' -> Just 5 '\66338' -> Just 10 '\66339' -> Just 50 '\66369' -> Just 90 '\66378' -> Just 900 '\66513' -> Just 1 '\66514' -> Just 2 '\66515' -> Just 10 '\66516' -> Just 20 '\66517' -> Just 100 '\66720' -> Just 0 '\66721' -> Just 1 '\66722' -> Just 2 '\66723' -> Just 3 '\66724' -> Just 4 '\66725' -> Just 5 '\66726' -> Just 6 '\66727' -> Just 7 '\66728' -> Just 8 '\66729' -> Just 9 '\67672' -> Just 1 '\67673' -> Just 2 '\67674' -> Just 3 '\67675' -> Just 10 '\67676' -> Just 20 '\67677' -> Just 100 '\67678' -> Just 1000 '\67679' -> Just 10000 '\67705' -> Just 1 '\67706' -> Just 2 '\67707' -> Just 3 '\67708' -> Just 4 '\67709' -> Just 5 '\67710' -> Just 10 '\67711' -> Just 20 '\67751' -> Just 1 '\67752' -> Just 2 '\67753' -> Just 3 '\67754' -> Just 4 '\67755' -> Just 4 '\67756' -> Just 5 '\67757' -> Just 10 '\67758' -> Just 20 '\67759' -> Just 100 '\67835' -> Just 1 '\67836' -> Just 5 '\67837' -> Just 10 '\67838' -> Just 20 '\67839' -> Just 100 '\67862' -> Just 1 '\67863' -> Just 10 '\67864' -> Just 20 '\67865' -> Just 100 '\67866' -> Just 2 '\67867' -> Just 3 '\68028' -> Just (11 % 12) '\68029' -> Just (1 % 2) '\68032' -> Just 1 '\68033' -> Just 2 '\68034' -> Just 3 '\68035' -> Just 4 '\68036' -> Just 5 '\68037' -> Just 6 '\68038' -> Just 7 '\68039' -> Just 8 '\68040' -> Just 9 '\68041' -> Just 10 '\68042' -> Just 20 '\68043' -> Just 30 '\68044' -> Just 40 '\68045' -> Just 50 '\68046' -> Just 60 '\68047' -> Just 70 '\68050' -> Just 100 '\68051' -> Just 200 '\68052' -> Just 300 '\68053' -> Just 400 '\68054' -> Just 500 '\68055' -> Just 600 '\68056' -> Just 700 '\68057' -> Just 800 '\68058' -> Just 900 '\68059' -> Just 1000 '\68060' -> Just 2000 '\68061' -> Just 3000 '\68062' -> Just 4000 '\68063' -> Just 5000 '\68064' -> Just 6000 '\68065' -> Just 7000 '\68066' -> Just 8000 '\68067' -> Just 9000 '\68068' -> Just 10000 '\68069' -> Just 20000 '\68070' -> Just 30000 '\68071' -> Just 40000 '\68072' -> Just 50000 '\68073' -> Just 60000 '\68074' -> Just 70000 '\68075' -> Just 80000 '\68076' -> Just 90000 '\68077' -> Just 100000 '\68078' -> Just 200000 '\68079' -> Just 300000 '\68080' -> Just 400000 '\68081' -> Just 500000 '\68082' -> Just 600000 '\68083' -> Just 700000 '\68084' -> Just 800000 '\68085' -> Just 900000 '\68086' -> Just (1 % 12) '\68087' -> Just (1 % 6) '\68088' -> Just (1 % 4) '\68089' -> Just (1 % 3) '\68090' -> Just (5 % 12) '\68091' -> Just (1 % 2) '\68092' -> Just (7 % 12) '\68093' -> Just (2 % 3) '\68094' -> Just (3 % 4) '\68095' -> Just (5 % 6) '\68160' -> Just 1 '\68161' -> Just 2 '\68162' -> Just 3 '\68163' -> Just 4 '\68164' -> Just 10 '\68165' -> Just 20 '\68166' -> Just 100 '\68167' -> Just 1000 '\68168' -> Just (1 % 2) '\68221' -> Just 1 '\68222' -> Just 50 '\68253' -> Just 1 '\68254' -> Just 10 '\68255' -> Just 20 '\68331' -> Just 1 '\68332' -> Just 5 '\68333' -> Just 10 '\68334' -> Just 20 '\68335' -> Just 100 '\68440' -> Just 1 '\68441' -> Just 2 '\68442' -> Just 3 '\68443' -> Just 4 '\68444' -> Just 10 '\68445' -> Just 20 '\68446' -> Just 100 '\68447' -> Just 1000 '\68472' -> Just 1 '\68473' -> Just 2 '\68474' -> Just 3 '\68475' -> Just 4 '\68476' -> Just 10 '\68477' -> Just 20 '\68478' -> Just 100 '\68479' -> Just 1000 '\68521' -> Just 1 '\68522' -> Just 2 '\68523' -> Just 3 '\68524' -> Just 4 '\68525' -> Just 10 '\68526' -> Just 20 '\68527' -> Just 100 '\68858' -> Just 1 '\68859' -> Just 5 '\68860' -> Just 10 '\68861' -> Just 50 '\68862' -> Just 100 '\68863' -> Just 1000 '\68912' -> Just 0 '\68913' -> Just 1 '\68914' -> Just 2 '\68915' -> Just 3 '\68916' -> Just 4 '\68917' -> Just 5 '\68918' -> Just 6 '\68919' -> Just 7 '\68920' -> Just 8 '\68921' -> Just 9 '\69216' -> Just 1 '\69217' -> Just 2 '\69218' -> Just 3 '\69219' -> Just 4 '\69220' -> Just 5 '\69221' -> Just 6 '\69222' -> Just 7 '\69223' -> Just 8 '\69224' -> Just 9 '\69225' -> Just 10 '\69226' -> Just 20 '\69227' -> Just 30 '\69228' -> Just 40 '\69229' -> Just 50 '\69230' -> Just 60 '\69231' -> Just 70 '\69232' -> Just 80 '\69233' -> Just 90 '\69234' -> Just 100 '\69235' -> Just 200 '\69236' -> Just 300 '\69237' -> Just 400 '\69238' -> Just 500 '\69239' -> Just 600 '\69240' -> Just 700 '\69241' -> Just 800 '\69242' -> Just 900 '\69243' -> Just (1 % 2) '\69244' -> Just (1 % 4) '\69245' -> Just (1 % 3) '\69246' -> Just (2 % 3) '\69405' -> Just 1 '\69406' -> Just 2 '\69407' -> Just 3 '\69408' -> Just 4 '\69409' -> Just 5 '\69410' -> Just 10 '\69411' -> Just 20 '\69412' -> Just 30 '\69413' -> Just 100 '\69414' -> Just (1 % 2) '\69457' -> Just 1 '\69458' -> Just 10 '\69459' -> Just 20 '\69460' -> Just 100 '\69573' -> Just 1 '\69574' -> Just 2 '\69575' -> Just 3 '\69576' -> Just 4 '\69577' -> Just 10 '\69578' -> Just 20 '\69579' -> Just 100 '\69714' -> Just 1 '\69715' -> Just 2 '\69716' -> Just 3 '\69717' -> Just 4 '\69718' -> Just 5 '\69719' -> Just 6 '\69720' -> Just 7 '\69721' -> Just 8 '\69722' -> Just 9 '\69723' -> Just 10 '\69724' -> Just 20 '\69725' -> Just 30 '\69726' -> Just 40 '\69727' -> Just 50 '\69728' -> Just 60 '\69729' -> Just 70 '\69730' -> Just 80 '\69731' -> Just 90 '\69732' -> Just 100 '\69733' -> Just 1000 '\69734' -> Just 0 '\69735' -> Just 1 '\69736' -> Just 2 '\69737' -> Just 3 '\69738' -> Just 4 '\69739' -> Just 5 '\69740' -> Just 6 '\69741' -> Just 7 '\69742' -> Just 8 '\69743' -> Just 9 '\69872' -> Just 0 '\69873' -> Just 1 '\69874' -> Just 2 '\69875' -> Just 3 '\69876' -> Just 4 '\69877' -> Just 5 '\69878' -> Just 6 '\69879' -> Just 7 '\69880' -> Just 8 '\69881' -> Just 9 '\69942' -> Just 0 '\69943' -> Just 1 '\69944' -> Just 2 '\69945' -> Just 3 '\69946' -> Just 4 '\69947' -> Just 5 '\69948' -> Just 6 '\69949' -> Just 7 '\69950' -> Just 8 '\69951' -> Just 9 '\70096' -> Just 0 '\70097' -> Just 1 '\70098' -> Just 2 '\70099' -> Just 3 '\70100' -> Just 4 '\70101' -> Just 5 '\70102' -> Just 6 '\70103' -> Just 7 '\70104' -> Just 8 '\70105' -> Just 9 '\70113' -> Just 1 '\70114' -> Just 2 '\70115' -> Just 3 '\70116' -> Just 4 '\70117' -> Just 5 '\70118' -> Just 6 '\70119' -> Just 7 '\70120' -> Just 8 '\70121' -> Just 9 '\70122' -> Just 10 '\70123' -> Just 20 '\70124' -> Just 30 '\70125' -> Just 40 '\70126' -> Just 50 '\70127' -> Just 60 '\70128' -> Just 70 '\70129' -> Just 80 '\70130' -> Just 90 '\70131' -> Just 100 '\70132' -> Just 1000 '\70384' -> Just 0 '\70385' -> Just 1 '\70386' -> Just 2 '\70387' -> Just 3 '\70388' -> Just 4 '\70389' -> Just 5 '\70390' -> Just 6 '\70391' -> Just 7 '\70392' -> Just 8 '\70393' -> Just 9 '\70736' -> Just 0 '\70737' -> Just 1 '\70738' -> Just 2 '\70739' -> Just 3 '\70740' -> Just 4 '\70741' -> Just 5 '\70742' -> Just 6 '\70743' -> Just 7 '\70744' -> Just 8 '\70745' -> Just 9 '\70864' -> Just 0 '\70865' -> Just 1 '\70866' -> Just 2 '\70867' -> Just 3 '\70868' -> Just 4 '\70869' -> Just 5 '\70870' -> Just 6 '\70871' -> Just 7 '\70872' -> Just 8 '\70873' -> Just 9 '\71248' -> Just 0 '\71249' -> Just 1 '\71250' -> Just 2 '\71251' -> Just 3 '\71252' -> Just 4 '\71253' -> Just 5 '\71254' -> Just 6 '\71255' -> Just 7 '\71256' -> Just 8 '\71257' -> Just 9 '\71360' -> Just 0 '\71361' -> Just 1 '\71362' -> Just 2 '\71363' -> Just 3 '\71364' -> Just 4 '\71365' -> Just 5 '\71366' -> Just 6 '\71367' -> Just 7 '\71368' -> Just 8 '\71369' -> Just 9 '\71472' -> Just 0 '\71473' -> Just 1 '\71474' -> Just 2 '\71475' -> Just 3 '\71476' -> Just 4 '\71477' -> Just 5 '\71478' -> Just 6 '\71479' -> Just 7 '\71480' -> Just 8 '\71481' -> Just 9 '\71482' -> Just 10 '\71483' -> Just 20 '\71904' -> Just 0 '\71905' -> Just 1 '\71906' -> Just 2 '\71907' -> Just 3 '\71908' -> Just 4 '\71909' -> Just 5 '\71910' -> Just 6 '\71911' -> Just 7 '\71912' -> Just 8 '\71913' -> Just 9 '\71914' -> Just 10 '\71915' -> Just 20 '\71916' -> Just 30 '\71917' -> Just 40 '\71918' -> Just 50 '\71919' -> Just 60 '\71920' -> Just 70 '\71921' -> Just 80 '\71922' -> Just 90 '\72016' -> Just 0 '\72017' -> Just 1 '\72018' -> Just 2 '\72019' -> Just 3 '\72020' -> Just 4 '\72021' -> Just 5 '\72022' -> Just 6 '\72023' -> Just 7 '\72024' -> Just 8 '\72025' -> Just 9 '\72784' -> Just 0 '\72785' -> Just 1 '\72786' -> Just 2 '\72787' -> Just 3 '\72788' -> Just 4 '\72789' -> Just 5 '\72790' -> Just 6 '\72791' -> Just 7 '\72792' -> Just 8 '\72793' -> Just 9 '\72794' -> Just 1 '\72795' -> Just 2 '\72796' -> Just 3 '\72797' -> Just 4 '\72798' -> Just 5 '\72799' -> Just 6 '\72800' -> Just 7 '\72801' -> Just 8 '\72802' -> Just 9 '\72803' -> Just 10 '\72804' -> Just 20 '\72805' -> Just 30 '\72806' -> Just 40 '\72807' -> Just 50 '\72808' -> Just 60 '\72809' -> Just 70 '\72810' -> Just 80 '\72811' -> Just 90 '\72812' -> Just 100 '\73040' -> Just 0 '\73041' -> Just 1 '\73042' -> Just 2 '\73043' -> Just 3 '\73044' -> Just 4 '\73045' -> Just 5 '\73046' -> Just 6 '\73047' -> Just 7 '\73048' -> Just 8 '\73049' -> Just 9 '\73120' -> Just 0 '\73121' -> Just 1 '\73122' -> Just 2 '\73123' -> Just 3 '\73124' -> Just 4 '\73125' -> Just 5 '\73126' -> Just 6 '\73127' -> Just 7 '\73128' -> Just 8 '\73129' -> Just 9 '\73552' -> Just 0 '\73553' -> Just 1 '\73554' -> Just 2 '\73555' -> Just 3 '\73556' -> Just 4 '\73557' -> Just 5 '\73558' -> Just 6 '\73559' -> Just 7 '\73560' -> Just 8 '\73561' -> Just 9 '\73664' -> Just (1 % 320) '\73665' -> Just (1 % 160) '\73666' -> Just (1 % 80) '\73667' -> Just (1 % 64) '\73668' -> Just (1 % 40) '\73669' -> Just (1 % 32) '\73670' -> Just (3 % 80) '\73671' -> Just (3 % 64) '\73672' -> Just (1 % 20) '\73673' -> Just (1 % 16) '\73674' -> Just (1 % 16) '\73675' -> Just (1 % 10) '\73676' -> Just (1 % 8) '\73677' -> Just (3 % 20) '\73678' -> Just (3 % 16) '\73679' -> Just (1 % 5) '\73680' -> Just (1 % 4) '\73681' -> Just (1 % 2) '\73682' -> Just (1 % 2) '\73683' -> Just (3 % 4) '\73684' -> Just (1 % 320) '\74752' -> Just 2 '\74753' -> Just 3 '\74754' -> Just 4 '\74755' -> Just 5 '\74756' -> Just 6 '\74757' -> Just 7 '\74758' -> Just 8 '\74759' -> Just 9 '\74760' -> Just 3 '\74761' -> Just 4 '\74762' -> Just 5 '\74763' -> Just 6 '\74764' -> Just 7 '\74765' -> Just 8 '\74766' -> Just 9 '\74767' -> Just 4 '\74768' -> Just 5 '\74769' -> Just 6 '\74770' -> Just 7 '\74771' -> Just 8 '\74772' -> Just 9 '\74773' -> Just 1 '\74774' -> Just 2 '\74775' -> Just 3 '\74776' -> Just 4 '\74777' -> Just 5 '\74778' -> Just 6 '\74779' -> Just 7 '\74780' -> Just 8 '\74781' -> Just 9 '\74782' -> Just 1 '\74783' -> Just 2 '\74784' -> Just 3 '\74785' -> Just 4 '\74786' -> Just 5 '\74787' -> Just 2 '\74788' -> Just 3 '\74789' -> Just 3 '\74790' -> Just 4 '\74791' -> Just 5 '\74792' -> Just 6 '\74793' -> Just 7 '\74794' -> Just 8 '\74795' -> Just 9 '\74796' -> Just 1 '\74797' -> Just 2 '\74798' -> Just 3 '\74799' -> Just 3 '\74800' -> Just 4 '\74801' -> Just 5 '\74802' -> Just 216000 '\74803' -> Just 432000 '\74804' -> Just 1 '\74805' -> Just 2 '\74806' -> Just 3 '\74807' -> Just 3 '\74808' -> Just 4 '\74809' -> Just 5 '\74810' -> Just 3 '\74811' -> Just 3 '\74812' -> Just 4 '\74813' -> Just 4 '\74814' -> Just 4 '\74815' -> Just 4 '\74816' -> Just 6 '\74817' -> Just 7 '\74818' -> Just 7 '\74819' -> Just 7 '\74820' -> Just 8 '\74821' -> Just 8 '\74822' -> Just 9 '\74823' -> Just 9 '\74824' -> Just 9 '\74825' -> Just 9 '\74826' -> Just 2 '\74827' -> Just 3 '\74828' -> Just 4 '\74829' -> Just 5 '\74830' -> Just 6 '\74831' -> Just 1 '\74832' -> Just 2 '\74833' -> Just 3 '\74834' -> Just 4 '\74835' -> Just 4 '\74836' -> Just 5 '\74837' -> Just 5 '\74838' -> Just 2 '\74839' -> Just 3 '\74840' -> Just 1 '\74841' -> Just 2 '\74842' -> Just (1 % 3) '\74843' -> Just (2 % 3) '\74844' -> Just (5 % 6) '\74845' -> Just (1 % 3) '\74846' -> Just (2 % 3) '\74847' -> Just (1 % 8) '\74848' -> Just (1 % 4) '\74849' -> Just (1 % 6) '\74850' -> Just (1 % 4) '\74851' -> Just (1 % 4) '\74852' -> Just (1 % 2) '\74853' -> Just (1 % 3) '\74854' -> Just (2 % 3) '\74855' -> Just 40 '\74856' -> Just 50 '\74857' -> Just 4 '\74858' -> Just 5 '\74859' -> Just 6 '\74860' -> Just 7 '\74861' -> Just 8 '\74862' -> Just 9 '\92768' -> Just 0 '\92769' -> Just 1 '\92770' -> Just 2 '\92771' -> Just 3 '\92772' -> Just 4 '\92773' -> Just 5 '\92774' -> Just 6 '\92775' -> Just 7 '\92776' -> Just 8 '\92777' -> Just 9 '\92864' -> Just 0 '\92865' -> Just 1 '\92866' -> Just 2 '\92867' -> Just 3 '\92868' -> Just 4 '\92869' -> Just 5 '\92870' -> Just 6 '\92871' -> Just 7 '\92872' -> Just 8 '\92873' -> Just 9 '\93008' -> Just 0 '\93009' -> Just 1 '\93010' -> Just 2 '\93011' -> Just 3 '\93012' -> Just 4 '\93013' -> Just 5 '\93014' -> Just 6 '\93015' -> Just 7 '\93016' -> Just 8 '\93017' -> Just 9 '\93019' -> Just 10 '\93020' -> Just 100 '\93021' -> Just 10000 '\93022' -> Just 1000000 '\93023' -> Just 100000000 '\93024' -> Just 10000000000 '\93025' -> Just 1000000000000 '\93824' -> Just 0 '\93825' -> Just 1 '\93826' -> Just 2 '\93827' -> Just 3 '\93828' -> Just 4 '\93829' -> Just 5 '\93830' -> Just 6 '\93831' -> Just 7 '\93832' -> Just 8 '\93833' -> Just 9 '\93834' -> Just 10 '\93835' -> Just 11 '\93836' -> Just 12 '\93837' -> Just 13 '\93838' -> Just 14 '\93839' -> Just 15 '\93840' -> Just 16 '\93841' -> Just 17 '\93842' -> Just 18 '\93843' -> Just 19 '\93844' -> Just 1 '\93845' -> Just 2 '\93846' -> Just 3 '\119488' -> Just 0 '\119489' -> Just 1 '\119490' -> Just 2 '\119491' -> Just 3 '\119492' -> Just 4 '\119493' -> Just 5 '\119494' -> Just 6 '\119495' -> Just 7 '\119496' -> Just 8 '\119497' -> Just 9 '\119498' -> Just 10 '\119499' -> Just 11 '\119500' -> Just 12 '\119501' -> Just 13 '\119502' -> Just 14 '\119503' -> Just 15 '\119504' -> Just 16 '\119505' -> Just 17 '\119506' -> Just 18 '\119507' -> Just 19 '\119520' -> Just 0 '\119521' -> Just 1 '\119522' -> Just 2 '\119523' -> Just 3 '\119524' -> Just 4 '\119525' -> Just 5 '\119526' -> Just 6 '\119527' -> Just 7 '\119528' -> Just 8 '\119529' -> Just 9 '\119530' -> Just 10 '\119531' -> Just 11 '\119532' -> Just 12 '\119533' -> Just 13 '\119534' -> Just 14 '\119535' -> Just 15 '\119536' -> Just 16 '\119537' -> Just 17 '\119538' -> Just 18 '\119539' -> Just 19 '\119648' -> Just 1 '\119649' -> Just 2 '\119650' -> Just 3 '\119651' -> Just 4 '\119652' -> Just 5 '\119653' -> Just 6 '\119654' -> Just 7 '\119655' -> Just 8 '\119656' -> Just 9 '\119657' -> Just 10 '\119658' -> Just 20 '\119659' -> Just 30 '\119660' -> Just 40 '\119661' -> Just 50 '\119662' -> Just 60 '\119663' -> Just 70 '\119664' -> Just 80 '\119665' -> Just 90 '\119666' -> Just 1 '\119667' -> Just 2 '\119668' -> Just 3 '\119669' -> Just 4 '\119670' -> Just 5 '\119671' -> Just 1 '\119672' -> Just 5 '\120782' -> Just 0 '\120783' -> Just 1 '\120784' -> Just 2 '\120785' -> Just 3 '\120786' -> Just 4 '\120787' -> Just 5 '\120788' -> Just 6 '\120789' -> Just 7 '\120790' -> Just 8 '\120791' -> Just 9 '\120792' -> Just 0 '\120793' -> Just 1 '\120794' -> Just 2 '\120795' -> Just 3 '\120796' -> Just 4 '\120797' -> Just 5 '\120798' -> Just 6 '\120799' -> Just 7 '\120800' -> Just 8 '\120801' -> Just 9 '\120802' -> Just 0 '\120803' -> Just 1 '\120804' -> Just 2 '\120805' -> Just 3 '\120806' -> Just 4 '\120807' -> Just 5 '\120808' -> Just 6 '\120809' -> Just 7 '\120810' -> Just 8 '\120811' -> Just 9 '\120812' -> Just 0 '\120813' -> Just 1 '\120814' -> Just 2 '\120815' -> Just 3 '\120816' -> Just 4 '\120817' -> Just 5 '\120818' -> Just 6 '\120819' -> Just 7 '\120820' -> Just 8 '\120821' -> Just 9 '\120822' -> Just 0 '\120823' -> Just 1 '\120824' -> Just 2 '\120825' -> Just 3 '\120826' -> Just 4 '\120827' -> Just 5 '\120828' -> Just 6 '\120829' -> Just 7 '\120830' -> Just 8 '\120831' -> Just 9 '\123200' -> Just 0 '\123201' -> Just 1 '\123202' -> Just 2 '\123203' -> Just 3 '\123204' -> Just 4 '\123205' -> Just 5 '\123206' -> Just 6 '\123207' -> Just 7 '\123208' -> Just 8 '\123209' -> Just 9 '\123632' -> Just 0 '\123633' -> Just 1 '\123634' -> Just 2 '\123635' -> Just 3 '\123636' -> Just 4 '\123637' -> Just 5 '\123638' -> Just 6 '\123639' -> Just 7 '\123640' -> Just 8 '\123641' -> Just 9 '\124144' -> Just 0 '\124145' -> Just 1 '\124146' -> Just 2 '\124147' -> Just 3 '\124148' -> Just 4 '\124149' -> Just 5 '\124150' -> Just 6 '\124151' -> Just 7 '\124152' -> Just 8 '\124153' -> Just 9 '\125127' -> Just 1 '\125128' -> Just 2 '\125129' -> Just 3 '\125130' -> Just 4 '\125131' -> Just 5 '\125132' -> Just 6 '\125133' -> Just 7 '\125134' -> Just 8 '\125135' -> Just 9 '\125264' -> Just 0 '\125265' -> Just 1 '\125266' -> Just 2 '\125267' -> Just 3 '\125268' -> Just 4 '\125269' -> Just 5 '\125270' -> Just 6 '\125271' -> Just 7 '\125272' -> Just 8 '\125273' -> Just 9 '\126065' -> Just 1 '\126066' -> Just 2 '\126067' -> Just 3 '\126068' -> Just 4 '\126069' -> Just 5 '\126070' -> Just 6 '\126071' -> Just 7 '\126072' -> Just 8 '\126073' -> Just 9 '\126074' -> Just 10 '\126075' -> Just 20 '\126076' -> Just 30 '\126077' -> Just 40 '\126078' -> Just 50 '\126079' -> Just 60 '\126080' -> Just 70 '\126081' -> Just 80 '\126082' -> Just 90 '\126083' -> Just 100 '\126084' -> Just 200 '\126085' -> Just 300 '\126086' -> Just 400 '\126087' -> Just 500 '\126088' -> Just 600 '\126089' -> Just 700 '\126090' -> Just 800 '\126091' -> Just 900 '\126092' -> Just 1000 '\126093' -> Just 2000 '\126094' -> Just 3000 '\126095' -> Just 4000 '\126096' -> Just 5000 '\126097' -> Just 6000 '\126098' -> Just 7000 '\126099' -> Just 8000 '\126100' -> Just 9000 '\126101' -> Just 10000 '\126102' -> Just 20000 '\126103' -> Just 30000 '\126104' -> Just 40000 '\126105' -> Just 50000 '\126106' -> Just 60000 '\126107' -> Just 70000 '\126108' -> Just 80000 '\126109' -> Just 90000 '\126110' -> Just 100000 '\126111' -> Just 200000 '\126112' -> Just 100000 '\126113' -> Just 10000000 '\126114' -> Just 20000000 '\126115' -> Just 1 '\126116' -> Just 2 '\126117' -> Just 3 '\126118' -> Just 4 '\126119' -> Just 5 '\126120' -> Just 6 '\126121' -> Just 7 '\126122' -> Just 8 '\126123' -> Just 9 '\126125' -> Just (1 % 4) '\126126' -> Just (1 % 2) '\126127' -> Just (3 % 4) '\126129' -> Just 1 '\126130' -> Just 2 '\126131' -> Just 10000 '\126132' -> Just 100000 '\126209' -> Just 1 '\126210' -> Just 2 '\126211' -> Just 3 '\126212' -> Just 4 '\126213' -> Just 5 '\126214' -> Just 6 '\126215' -> Just 7 '\126216' -> Just 8 '\126217' -> Just 9 '\126218' -> Just 10 '\126219' -> Just 20 '\126220' -> Just 30 '\126221' -> Just 40 '\126222' -> Just 50 '\126223' -> Just 60 '\126224' -> Just 70 '\126225' -> Just 80 '\126226' -> Just 90 '\126227' -> Just 100 '\126228' -> Just 200 '\126229' -> Just 300 '\126230' -> Just 400 '\126231' -> Just 500 '\126232' -> Just 600 '\126233' -> Just 700 '\126234' -> Just 800 '\126235' -> Just 900 '\126236' -> Just 1000 '\126237' -> Just 2000 '\126238' -> Just 3000 '\126239' -> Just 4000 '\126240' -> Just 5000 '\126241' -> Just 6000 '\126242' -> Just 7000 '\126243' -> Just 8000 '\126244' -> Just 9000 '\126245' -> Just 10000 '\126246' -> Just 20000 '\126247' -> Just 30000 '\126248' -> Just 40000 '\126249' -> Just 50000 '\126250' -> Just 60000 '\126251' -> Just 70000 '\126252' -> Just 80000 '\126253' -> Just 90000 '\126255' -> Just 2 '\126256' -> Just 3 '\126257' -> Just 4 '\126258' -> Just 5 '\126259' -> Just 6 '\126260' -> Just 7 '\126261' -> Just 8 '\126262' -> Just 9 '\126263' -> Just 10 '\126264' -> Just 400 '\126265' -> Just 600 '\126266' -> Just 2000 '\126267' -> Just 10000 '\126268' -> Just (1 % 2) '\126269' -> Just (1 % 6) '\127232' -> Just 0 '\127233' -> Just 0 '\127234' -> Just 1 '\127235' -> Just 2 '\127236' -> Just 3 '\127237' -> Just 4 '\127238' -> Just 5 '\127239' -> Just 6 '\127240' -> Just 7 '\127241' -> Just 8 '\127242' -> Just 9 '\127243' -> Just 0 '\127244' -> Just 0 '\130032' -> Just 0 '\130033' -> Just 1 '\130034' -> Just 2 '\130035' -> Just 3 '\130036' -> Just 4 '\130037' -> Just 5 '\130038' -> Just 6 '\130039' -> Just 7 '\130040' -> Just 8 '\130041' -> Just 9 '\131073' -> Just 7 '\131172' -> Just 4 '\131298' -> Just 4 '\131361' -> Just 5 '\133418' -> Just 1 '\133507' -> Just 30 '\133516' -> Just 40 '\133532' -> Just 40 '\133866' -> Just 6 '\133885' -> Just 3 '\133913' -> Just 3 '\140176' -> Just 2 '\141720' -> Just 3 '\146203' -> Just 3 '\156269' -> Just 4 '\194704' -> Just 9 _ -> Nothing unicode-data-0.6.0/lib/Unicode/Internal/Char/PropList.hs0000644000000000000000000001176707346545000021154 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/PropList.txt -- | -- Module : Unicode.Internal.Char.PropList -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use camelCase" #-} module Unicode.Internal.Char.PropList ( isPattern_Syntax , isPattern_White_Space , isWhite_Space ) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word8) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord8AsInt) {-# INLINE isPattern_Syntax #-} isPattern_Syntax :: Char -> Bool isPattern_Syntax c = c >= '\x0021' && c <= '\xFE46' && lookupIsPattern_SyntaxBitMap (ord c) {-# INLINE lookupIsPattern_SyntaxBitMap #-} lookupIsPattern_SyntaxBitMap :: Int -> Bool lookupIsPattern_SyntaxBitMap n = lookupBit data# ( lookupWord8AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isPattern_SyntaxDataBitMap !(Ptr offsets#) = isPattern_SyntaxOffsetsBitMap isPattern_SyntaxDataBitMap :: Ptr Int8 isPattern_SyntaxDataBitMap = Ptr "\0\0\255\255\255\0\255\127\254\255\239\127\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\254\255\0\252\1\0\ \\0\120\1\0\0\120\0\0\0\0\254\90\67\136\0\0\128\0\0\0\128\0\14\255\255\255\1\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\192\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\96\0\0\255\255\255\0\255\127\254\255\239\127\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\0\240\255\255\255\255\255\255\255\255\255\255\255\255\255"# isPattern_SyntaxOffsetsBitMap :: Ptr Word8 isPattern_SyntaxOffsetsBitMap = Ptr "\40\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\0\144\162\162\182\162\162\214\162\162\162\162\12\12\178\12\72\12\ \\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\ \\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\ \\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\ \\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\ \\12\12\12\97\121"# {-# INLINE isPattern_White_Space #-} isPattern_White_Space :: Char -> Bool isPattern_White_Space c = c >= '\x0009' && c <= '\x2029' && lookupIsPattern_White_SpaceBitMap (ord c) {-# INLINE lookupIsPattern_White_SpaceBitMap #-} lookupIsPattern_White_SpaceBitMap :: Int -> Bool lookupIsPattern_White_SpaceBitMap n = lookupBit data# ( lookupWord8AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isPattern_White_SpaceDataBitMap !(Ptr offsets#) = isPattern_White_SpaceOffsetsBitMap isPattern_White_SpaceDataBitMap :: Ptr Int8 isPattern_White_SpaceDataBitMap = Ptr "\0\62\0\0\1\0\0\0\0\0\0\0\0\0\0\0\32\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\192\0\0\0\3"# isPattern_White_SpaceOffsetsBitMap :: Ptr Word8 isPattern_White_SpaceOffsetsBitMap = Ptr "\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\80"# {-# INLINE isWhite_Space #-} isWhite_Space :: Char -> Bool isWhite_Space c = c >= '\x0009' && c <= '\x3000' && lookupIsWhite_SpaceBitMap (ord c) {-# INLINE lookupIsWhite_SpaceBitMap #-} lookupIsWhite_SpaceBitMap :: Int -> Bool lookupIsWhite_SpaceBitMap n = lookupBit data# ( lookupWord8AsInt offsets# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. mask) ) (n .&. 7) where mask = (1 `shiftL` 5) - 1 !(Ptr data#) = isWhite_SpaceDataBitMap !(Ptr offsets#) = isWhite_SpaceOffsetsBitMap isWhite_SpaceDataBitMap :: Ptr Int8 isWhite_SpaceDataBitMap = Ptr "\255\7\0\0\0\131\0\0\0\0\0\128\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\62\0\0\1\0\0\0\0\0\0\0\0\0\0\0\32\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"# isWhite_SpaceOffsetsBitMap :: Ptr Word8 isWhite_SpaceOffsetsBitMap = Ptr "\60\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\28\12\12\12\12\12\12\12\12\12\0\12\12\12\12\12\12\12\12\12\12\12\12\12\12\12\44"# unicode-data-0.6.0/lib/Unicode/Internal/Char/SpecialCasing/0000755000000000000000000000000007346545000021535 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Internal/Char/SpecialCasing/LowerCaseMapping.hs0000644000000000000000000007370407346545000025304 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.SpecialCasing.LowerCaseMapping -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.SpecialCasing.LowerCaseMapping (toSpecialLowerCase) where import Data.Int (Int64) {-# NOINLINE toSpecialLowerCase #-} toSpecialLowerCase :: Char -> Int64 toSpecialLowerCase = \case 'A' -> 0x61 'B' -> 0x62 'C' -> 0x63 'D' -> 0x64 'E' -> 0x65 'F' -> 0x66 'G' -> 0x67 'H' -> 0x68 'I' -> 0x69 'J' -> 0x6a 'K' -> 0x6b 'L' -> 0x6c 'M' -> 0x6d 'N' -> 0x6e 'O' -> 0x6f 'P' -> 0x70 'Q' -> 0x71 'R' -> 0x72 'S' -> 0x73 'T' -> 0x74 'U' -> 0x75 'V' -> 0x76 'W' -> 0x77 'X' -> 0x78 'Y' -> 0x79 'Z' -> 0x7a '\192' -> 0xe0 '\193' -> 0xe1 '\194' -> 0xe2 '\195' -> 0xe3 '\196' -> 0xe4 '\197' -> 0xe5 '\198' -> 0xe6 '\199' -> 0xe7 '\200' -> 0xe8 '\201' -> 0xe9 '\202' -> 0xea '\203' -> 0xeb '\204' -> 0xec '\205' -> 0xed '\206' -> 0xee '\207' -> 0xef '\208' -> 0xf0 '\209' -> 0xf1 '\210' -> 0xf2 '\211' -> 0xf3 '\212' -> 0xf4 '\213' -> 0xf5 '\214' -> 0xf6 '\216' -> 0xf8 '\217' -> 0xf9 '\218' -> 0xfa '\219' -> 0xfb '\220' -> 0xfc '\221' -> 0xfd '\222' -> 0xfe '\223' -> 0xdf '\256' -> 0x101 '\258' -> 0x103 '\260' -> 0x105 '\262' -> 0x107 '\264' -> 0x109 '\266' -> 0x10b '\268' -> 0x10d '\270' -> 0x10f '\272' -> 0x111 '\274' -> 0x113 '\276' -> 0x115 '\278' -> 0x117 '\280' -> 0x119 '\282' -> 0x11b '\284' -> 0x11d '\286' -> 0x11f '\288' -> 0x121 '\290' -> 0x123 '\292' -> 0x125 '\294' -> 0x127 '\296' -> 0x129 '\298' -> 0x12b '\300' -> 0x12d '\302' -> 0x12f '\304' -> 0x60e00069 '\306' -> 0x133 '\308' -> 0x135 '\310' -> 0x137 '\313' -> 0x13a '\315' -> 0x13c '\317' -> 0x13e '\319' -> 0x140 '\321' -> 0x142 '\323' -> 0x144 '\325' -> 0x146 '\327' -> 0x148 '\329' -> 0x149 '\330' -> 0x14b '\332' -> 0x14d '\334' -> 0x14f '\336' -> 0x151 '\338' -> 0x153 '\340' -> 0x155 '\342' -> 0x157 '\344' -> 0x159 '\346' -> 0x15b '\348' -> 0x15d '\350' -> 0x15f '\352' -> 0x161 '\354' -> 0x163 '\356' -> 0x165 '\358' -> 0x167 '\360' -> 0x169 '\362' -> 0x16b '\364' -> 0x16d '\366' -> 0x16f '\368' -> 0x171 '\370' -> 0x173 '\372' -> 0x175 '\374' -> 0x177 '\376' -> 0xff '\377' -> 0x17a '\379' -> 0x17c '\381' -> 0x17e '\385' -> 0x253 '\386' -> 0x183 '\388' -> 0x185 '\390' -> 0x254 '\391' -> 0x188 '\393' -> 0x256 '\394' -> 0x257 '\395' -> 0x18c '\398' -> 0x1dd '\399' -> 0x259 '\400' -> 0x25b '\401' -> 0x192 '\403' -> 0x260 '\404' -> 0x263 '\406' -> 0x269 '\407' -> 0x268 '\408' -> 0x199 '\412' -> 0x26f '\413' -> 0x272 '\415' -> 0x275 '\416' -> 0x1a1 '\418' -> 0x1a3 '\420' -> 0x1a5 '\422' -> 0x280 '\423' -> 0x1a8 '\425' -> 0x283 '\428' -> 0x1ad '\430' -> 0x288 '\431' -> 0x1b0 '\433' -> 0x28a '\434' -> 0x28b '\435' -> 0x1b4 '\437' -> 0x1b6 '\439' -> 0x292 '\440' -> 0x1b9 '\444' -> 0x1bd '\452' -> 0x1c6 '\453' -> 0x1c6 '\455' -> 0x1c9 '\456' -> 0x1c9 '\458' -> 0x1cc '\459' -> 0x1cc '\461' -> 0x1ce '\463' -> 0x1d0 '\465' -> 0x1d2 '\467' -> 0x1d4 '\469' -> 0x1d6 '\471' -> 0x1d8 '\473' -> 0x1da '\475' -> 0x1dc '\478' -> 0x1df '\480' -> 0x1e1 '\482' -> 0x1e3 '\484' -> 0x1e5 '\486' -> 0x1e7 '\488' -> 0x1e9 '\490' -> 0x1eb '\492' -> 0x1ed '\494' -> 0x1ef '\496' -> 0x1f0 '\497' -> 0x1f3 '\498' -> 0x1f3 '\500' -> 0x1f5 '\502' -> 0x195 '\503' -> 0x1bf '\504' -> 0x1f9 '\506' -> 0x1fb '\508' -> 0x1fd '\510' -> 0x1ff '\512' -> 0x201 '\514' -> 0x203 '\516' -> 0x205 '\518' -> 0x207 '\520' -> 0x209 '\522' -> 0x20b '\524' -> 0x20d '\526' -> 0x20f '\528' -> 0x211 '\530' -> 0x213 '\532' -> 0x215 '\534' -> 0x217 '\536' -> 0x219 '\538' -> 0x21b '\540' -> 0x21d '\542' -> 0x21f '\544' -> 0x19e '\546' -> 0x223 '\548' -> 0x225 '\550' -> 0x227 '\552' -> 0x229 '\554' -> 0x22b '\556' -> 0x22d '\558' -> 0x22f '\560' -> 0x231 '\562' -> 0x233 '\570' -> 0x2c65 '\571' -> 0x23c '\573' -> 0x19a '\574' -> 0x2c66 '\577' -> 0x242 '\579' -> 0x180 '\580' -> 0x289 '\581' -> 0x28c '\582' -> 0x247 '\584' -> 0x249 '\586' -> 0x24b '\588' -> 0x24d '\590' -> 0x24f '\880' -> 0x371 '\882' -> 0x373 '\886' -> 0x377 '\895' -> 0x3f3 '\902' -> 0x3ac '\904' -> 0x3ad '\905' -> 0x3ae '\906' -> 0x3af '\908' -> 0x3cc '\910' -> 0x3cd '\911' -> 0x3ce '\912' -> 0x390 '\913' -> 0x3b1 '\914' -> 0x3b2 '\915' -> 0x3b3 '\916' -> 0x3b4 '\917' -> 0x3b5 '\918' -> 0x3b6 '\919' -> 0x3b7 '\920' -> 0x3b8 '\921' -> 0x3b9 '\922' -> 0x3ba '\923' -> 0x3bb '\924' -> 0x3bc '\925' -> 0x3bd '\926' -> 0x3be '\927' -> 0x3bf '\928' -> 0x3c0 '\929' -> 0x3c1 '\931' -> 0x3c3 '\932' -> 0x3c4 '\933' -> 0x3c5 '\934' -> 0x3c6 '\935' -> 0x3c7 '\936' -> 0x3c8 '\937' -> 0x3c9 '\938' -> 0x3ca '\939' -> 0x3cb '\944' -> 0x3b0 '\975' -> 0x3d7 '\984' -> 0x3d9 '\986' -> 0x3db '\988' -> 0x3dd '\990' -> 0x3df '\992' -> 0x3e1 '\994' -> 0x3e3 '\996' -> 0x3e5 '\998' -> 0x3e7 '\1000' -> 0x3e9 '\1002' -> 0x3eb '\1004' -> 0x3ed '\1006' -> 0x3ef '\1012' -> 0x3b8 '\1015' -> 0x3f8 '\1017' -> 0x3f2 '\1018' -> 0x3fb '\1021' -> 0x37b '\1022' -> 0x37c '\1023' -> 0x37d '\1024' -> 0x450 '\1025' -> 0x451 '\1026' -> 0x452 '\1027' -> 0x453 '\1028' -> 0x454 '\1029' -> 0x455 '\1030' -> 0x456 '\1031' -> 0x457 '\1032' -> 0x458 '\1033' -> 0x459 '\1034' -> 0x45a '\1035' -> 0x45b '\1036' -> 0x45c '\1037' -> 0x45d '\1038' -> 0x45e '\1039' -> 0x45f '\1040' -> 0x430 '\1041' -> 0x431 '\1042' -> 0x432 '\1043' -> 0x433 '\1044' -> 0x434 '\1045' -> 0x435 '\1046' -> 0x436 '\1047' -> 0x437 '\1048' -> 0x438 '\1049' -> 0x439 '\1050' -> 0x43a '\1051' -> 0x43b '\1052' -> 0x43c '\1053' -> 0x43d '\1054' -> 0x43e '\1055' -> 0x43f '\1056' -> 0x440 '\1057' -> 0x441 '\1058' -> 0x442 '\1059' -> 0x443 '\1060' -> 0x444 '\1061' -> 0x445 '\1062' -> 0x446 '\1063' -> 0x447 '\1064' -> 0x448 '\1065' -> 0x449 '\1066' -> 0x44a '\1067' -> 0x44b '\1068' -> 0x44c '\1069' -> 0x44d '\1070' -> 0x44e '\1071' -> 0x44f '\1120' -> 0x461 '\1122' -> 0x463 '\1124' -> 0x465 '\1126' -> 0x467 '\1128' -> 0x469 '\1130' -> 0x46b '\1132' -> 0x46d '\1134' -> 0x46f '\1136' -> 0x471 '\1138' -> 0x473 '\1140' -> 0x475 '\1142' -> 0x477 '\1144' -> 0x479 '\1146' -> 0x47b '\1148' -> 0x47d '\1150' -> 0x47f '\1152' -> 0x481 '\1162' -> 0x48b '\1164' -> 0x48d '\1166' -> 0x48f '\1168' -> 0x491 '\1170' -> 0x493 '\1172' -> 0x495 '\1174' -> 0x497 '\1176' -> 0x499 '\1178' -> 0x49b '\1180' -> 0x49d '\1182' -> 0x49f '\1184' -> 0x4a1 '\1186' -> 0x4a3 '\1188' -> 0x4a5 '\1190' -> 0x4a7 '\1192' -> 0x4a9 '\1194' -> 0x4ab '\1196' -> 0x4ad '\1198' -> 0x4af '\1200' -> 0x4b1 '\1202' -> 0x4b3 '\1204' -> 0x4b5 '\1206' -> 0x4b7 '\1208' -> 0x4b9 '\1210' -> 0x4bb '\1212' -> 0x4bd '\1214' -> 0x4bf '\1216' -> 0x4cf '\1217' -> 0x4c2 '\1219' -> 0x4c4 '\1221' -> 0x4c6 '\1223' -> 0x4c8 '\1225' -> 0x4ca '\1227' -> 0x4cc '\1229' -> 0x4ce '\1232' -> 0x4d1 '\1234' -> 0x4d3 '\1236' -> 0x4d5 '\1238' -> 0x4d7 '\1240' -> 0x4d9 '\1242' -> 0x4db '\1244' -> 0x4dd '\1246' -> 0x4df '\1248' -> 0x4e1 '\1250' -> 0x4e3 '\1252' -> 0x4e5 '\1254' -> 0x4e7 '\1256' -> 0x4e9 '\1258' -> 0x4eb '\1260' -> 0x4ed '\1262' -> 0x4ef '\1264' -> 0x4f1 '\1266' -> 0x4f3 '\1268' -> 0x4f5 '\1270' -> 0x4f7 '\1272' -> 0x4f9 '\1274' -> 0x4fb '\1276' -> 0x4fd '\1278' -> 0x4ff '\1280' -> 0x501 '\1282' -> 0x503 '\1284' -> 0x505 '\1286' -> 0x507 '\1288' -> 0x509 '\1290' -> 0x50b '\1292' -> 0x50d '\1294' -> 0x50f '\1296' -> 0x511 '\1298' -> 0x513 '\1300' -> 0x515 '\1302' -> 0x517 '\1304' -> 0x519 '\1306' -> 0x51b '\1308' -> 0x51d '\1310' -> 0x51f '\1312' -> 0x521 '\1314' -> 0x523 '\1316' -> 0x525 '\1318' -> 0x527 '\1320' -> 0x529 '\1322' -> 0x52b '\1324' -> 0x52d '\1326' -> 0x52f '\1329' -> 0x561 '\1330' -> 0x562 '\1331' -> 0x563 '\1332' -> 0x564 '\1333' -> 0x565 '\1334' -> 0x566 '\1335' -> 0x567 '\1336' -> 0x568 '\1337' -> 0x569 '\1338' -> 0x56a '\1339' -> 0x56b '\1340' -> 0x56c '\1341' -> 0x56d '\1342' -> 0x56e '\1343' -> 0x56f '\1344' -> 0x570 '\1345' -> 0x571 '\1346' -> 0x572 '\1347' -> 0x573 '\1348' -> 0x574 '\1349' -> 0x575 '\1350' -> 0x576 '\1351' -> 0x577 '\1352' -> 0x578 '\1353' -> 0x579 '\1354' -> 0x57a '\1355' -> 0x57b '\1356' -> 0x57c '\1357' -> 0x57d '\1358' -> 0x57e '\1359' -> 0x57f '\1360' -> 0x580 '\1361' -> 0x581 '\1362' -> 0x582 '\1363' -> 0x583 '\1364' -> 0x584 '\1365' -> 0x585 '\1366' -> 0x586 '\1415' -> 0x587 '\4256' -> 0x2d00 '\4257' -> 0x2d01 '\4258' -> 0x2d02 '\4259' -> 0x2d03 '\4260' -> 0x2d04 '\4261' -> 0x2d05 '\4262' -> 0x2d06 '\4263' -> 0x2d07 '\4264' -> 0x2d08 '\4265' -> 0x2d09 '\4266' -> 0x2d0a '\4267' -> 0x2d0b '\4268' -> 0x2d0c '\4269' -> 0x2d0d '\4270' -> 0x2d0e '\4271' -> 0x2d0f '\4272' -> 0x2d10 '\4273' -> 0x2d11 '\4274' -> 0x2d12 '\4275' -> 0x2d13 '\4276' -> 0x2d14 '\4277' -> 0x2d15 '\4278' -> 0x2d16 '\4279' -> 0x2d17 '\4280' -> 0x2d18 '\4281' -> 0x2d19 '\4282' -> 0x2d1a '\4283' -> 0x2d1b '\4284' -> 0x2d1c '\4285' -> 0x2d1d '\4286' -> 0x2d1e '\4287' -> 0x2d1f '\4288' -> 0x2d20 '\4289' -> 0x2d21 '\4290' -> 0x2d22 '\4291' -> 0x2d23 '\4292' -> 0x2d24 '\4293' -> 0x2d25 '\4295' -> 0x2d27 '\4301' -> 0x2d2d '\5024' -> 0xab70 '\5025' -> 0xab71 '\5026' -> 0xab72 '\5027' -> 0xab73 '\5028' -> 0xab74 '\5029' -> 0xab75 '\5030' -> 0xab76 '\5031' -> 0xab77 '\5032' -> 0xab78 '\5033' -> 0xab79 '\5034' -> 0xab7a '\5035' -> 0xab7b '\5036' -> 0xab7c '\5037' -> 0xab7d '\5038' -> 0xab7e '\5039' -> 0xab7f '\5040' -> 0xab80 '\5041' -> 0xab81 '\5042' -> 0xab82 '\5043' -> 0xab83 '\5044' -> 0xab84 '\5045' -> 0xab85 '\5046' -> 0xab86 '\5047' -> 0xab87 '\5048' -> 0xab88 '\5049' -> 0xab89 '\5050' -> 0xab8a '\5051' -> 0xab8b '\5052' -> 0xab8c '\5053' -> 0xab8d '\5054' -> 0xab8e '\5055' -> 0xab8f '\5056' -> 0xab90 '\5057' -> 0xab91 '\5058' -> 0xab92 '\5059' -> 0xab93 '\5060' -> 0xab94 '\5061' -> 0xab95 '\5062' -> 0xab96 '\5063' -> 0xab97 '\5064' -> 0xab98 '\5065' -> 0xab99 '\5066' -> 0xab9a '\5067' -> 0xab9b '\5068' -> 0xab9c '\5069' -> 0xab9d '\5070' -> 0xab9e '\5071' -> 0xab9f '\5072' -> 0xaba0 '\5073' -> 0xaba1 '\5074' -> 0xaba2 '\5075' -> 0xaba3 '\5076' -> 0xaba4 '\5077' -> 0xaba5 '\5078' -> 0xaba6 '\5079' -> 0xaba7 '\5080' -> 0xaba8 '\5081' -> 0xaba9 '\5082' -> 0xabaa '\5083' -> 0xabab '\5084' -> 0xabac '\5085' -> 0xabad '\5086' -> 0xabae '\5087' -> 0xabaf '\5088' -> 0xabb0 '\5089' -> 0xabb1 '\5090' -> 0xabb2 '\5091' -> 0xabb3 '\5092' -> 0xabb4 '\5093' -> 0xabb5 '\5094' -> 0xabb6 '\5095' -> 0xabb7 '\5096' -> 0xabb8 '\5097' -> 0xabb9 '\5098' -> 0xabba '\5099' -> 0xabbb '\5100' -> 0xabbc '\5101' -> 0xabbd '\5102' -> 0xabbe '\5103' -> 0xabbf '\5104' -> 0x13f8 '\5105' -> 0x13f9 '\5106' -> 0x13fa '\5107' -> 0x13fb '\5108' -> 0x13fc '\5109' -> 0x13fd '\7312' -> 0x10d0 '\7313' -> 0x10d1 '\7314' -> 0x10d2 '\7315' -> 0x10d3 '\7316' -> 0x10d4 '\7317' -> 0x10d5 '\7318' -> 0x10d6 '\7319' -> 0x10d7 '\7320' -> 0x10d8 '\7321' -> 0x10d9 '\7322' -> 0x10da '\7323' -> 0x10db '\7324' -> 0x10dc '\7325' -> 0x10dd '\7326' -> 0x10de '\7327' -> 0x10df '\7328' -> 0x10e0 '\7329' -> 0x10e1 '\7330' -> 0x10e2 '\7331' -> 0x10e3 '\7332' -> 0x10e4 '\7333' -> 0x10e5 '\7334' -> 0x10e6 '\7335' -> 0x10e7 '\7336' -> 0x10e8 '\7337' -> 0x10e9 '\7338' -> 0x10ea '\7339' -> 0x10eb '\7340' -> 0x10ec '\7341' -> 0x10ed '\7342' -> 0x10ee '\7343' -> 0x10ef '\7344' -> 0x10f0 '\7345' -> 0x10f1 '\7346' -> 0x10f2 '\7347' -> 0x10f3 '\7348' -> 0x10f4 '\7349' -> 0x10f5 '\7350' -> 0x10f6 '\7351' -> 0x10f7 '\7352' -> 0x10f8 '\7353' -> 0x10f9 '\7354' -> 0x10fa '\7357' -> 0x10fd '\7358' -> 0x10fe '\7359' -> 0x10ff '\7680' -> 0x1e01 '\7682' -> 0x1e03 '\7684' -> 0x1e05 '\7686' -> 0x1e07 '\7688' -> 0x1e09 '\7690' -> 0x1e0b '\7692' -> 0x1e0d '\7694' -> 0x1e0f '\7696' -> 0x1e11 '\7698' -> 0x1e13 '\7700' -> 0x1e15 '\7702' -> 0x1e17 '\7704' -> 0x1e19 '\7706' -> 0x1e1b '\7708' -> 0x1e1d '\7710' -> 0x1e1f '\7712' -> 0x1e21 '\7714' -> 0x1e23 '\7716' -> 0x1e25 '\7718' -> 0x1e27 '\7720' -> 0x1e29 '\7722' -> 0x1e2b '\7724' -> 0x1e2d '\7726' -> 0x1e2f '\7728' -> 0x1e31 '\7730' -> 0x1e33 '\7732' -> 0x1e35 '\7734' -> 0x1e37 '\7736' -> 0x1e39 '\7738' -> 0x1e3b '\7740' -> 0x1e3d '\7742' -> 0x1e3f '\7744' -> 0x1e41 '\7746' -> 0x1e43 '\7748' -> 0x1e45 '\7750' -> 0x1e47 '\7752' -> 0x1e49 '\7754' -> 0x1e4b '\7756' -> 0x1e4d '\7758' -> 0x1e4f '\7760' -> 0x1e51 '\7762' -> 0x1e53 '\7764' -> 0x1e55 '\7766' -> 0x1e57 '\7768' -> 0x1e59 '\7770' -> 0x1e5b '\7772' -> 0x1e5d '\7774' -> 0x1e5f '\7776' -> 0x1e61 '\7778' -> 0x1e63 '\7780' -> 0x1e65 '\7782' -> 0x1e67 '\7784' -> 0x1e69 '\7786' -> 0x1e6b '\7788' -> 0x1e6d '\7790' -> 0x1e6f '\7792' -> 0x1e71 '\7794' -> 0x1e73 '\7796' -> 0x1e75 '\7798' -> 0x1e77 '\7800' -> 0x1e79 '\7802' -> 0x1e7b '\7804' -> 0x1e7d '\7806' -> 0x1e7f '\7808' -> 0x1e81 '\7810' -> 0x1e83 '\7812' -> 0x1e85 '\7814' -> 0x1e87 '\7816' -> 0x1e89 '\7818' -> 0x1e8b '\7820' -> 0x1e8d '\7822' -> 0x1e8f '\7824' -> 0x1e91 '\7826' -> 0x1e93 '\7828' -> 0x1e95 '\7830' -> 0x1e96 '\7831' -> 0x1e97 '\7832' -> 0x1e98 '\7833' -> 0x1e99 '\7834' -> 0x1e9a '\7838' -> 0xdf '\7840' -> 0x1ea1 '\7842' -> 0x1ea3 '\7844' -> 0x1ea5 '\7846' -> 0x1ea7 '\7848' -> 0x1ea9 '\7850' -> 0x1eab '\7852' -> 0x1ead '\7854' -> 0x1eaf '\7856' -> 0x1eb1 '\7858' -> 0x1eb3 '\7860' -> 0x1eb5 '\7862' -> 0x1eb7 '\7864' -> 0x1eb9 '\7866' -> 0x1ebb '\7868' -> 0x1ebd '\7870' -> 0x1ebf '\7872' -> 0x1ec1 '\7874' -> 0x1ec3 '\7876' -> 0x1ec5 '\7878' -> 0x1ec7 '\7880' -> 0x1ec9 '\7882' -> 0x1ecb '\7884' -> 0x1ecd '\7886' -> 0x1ecf '\7888' -> 0x1ed1 '\7890' -> 0x1ed3 '\7892' -> 0x1ed5 '\7894' -> 0x1ed7 '\7896' -> 0x1ed9 '\7898' -> 0x1edb '\7900' -> 0x1edd '\7902' -> 0x1edf '\7904' -> 0x1ee1 '\7906' -> 0x1ee3 '\7908' -> 0x1ee5 '\7910' -> 0x1ee7 '\7912' -> 0x1ee9 '\7914' -> 0x1eeb '\7916' -> 0x1eed '\7918' -> 0x1eef '\7920' -> 0x1ef1 '\7922' -> 0x1ef3 '\7924' -> 0x1ef5 '\7926' -> 0x1ef7 '\7928' -> 0x1ef9 '\7930' -> 0x1efb '\7932' -> 0x1efd '\7934' -> 0x1eff '\7944' -> 0x1f00 '\7945' -> 0x1f01 '\7946' -> 0x1f02 '\7947' -> 0x1f03 '\7948' -> 0x1f04 '\7949' -> 0x1f05 '\7950' -> 0x1f06 '\7951' -> 0x1f07 '\7960' -> 0x1f10 '\7961' -> 0x1f11 '\7962' -> 0x1f12 '\7963' -> 0x1f13 '\7964' -> 0x1f14 '\7965' -> 0x1f15 '\7976' -> 0x1f20 '\7977' -> 0x1f21 '\7978' -> 0x1f22 '\7979' -> 0x1f23 '\7980' -> 0x1f24 '\7981' -> 0x1f25 '\7982' -> 0x1f26 '\7983' -> 0x1f27 '\7992' -> 0x1f30 '\7993' -> 0x1f31 '\7994' -> 0x1f32 '\7995' -> 0x1f33 '\7996' -> 0x1f34 '\7997' -> 0x1f35 '\7998' -> 0x1f36 '\7999' -> 0x1f37 '\8008' -> 0x1f40 '\8009' -> 0x1f41 '\8010' -> 0x1f42 '\8011' -> 0x1f43 '\8012' -> 0x1f44 '\8013' -> 0x1f45 '\8016' -> 0x1f50 '\8018' -> 0x1f52 '\8020' -> 0x1f54 '\8022' -> 0x1f56 '\8025' -> 0x1f51 '\8027' -> 0x1f53 '\8029' -> 0x1f55 '\8031' -> 0x1f57 '\8040' -> 0x1f60 '\8041' -> 0x1f61 '\8042' -> 0x1f62 '\8043' -> 0x1f63 '\8044' -> 0x1f64 '\8045' -> 0x1f65 '\8046' -> 0x1f66 '\8047' -> 0x1f67 '\8064' -> 0x1f80 '\8065' -> 0x1f81 '\8066' -> 0x1f82 '\8067' -> 0x1f83 '\8068' -> 0x1f84 '\8069' -> 0x1f85 '\8070' -> 0x1f86 '\8071' -> 0x1f87 '\8072' -> 0x1f80 '\8073' -> 0x1f81 '\8074' -> 0x1f82 '\8075' -> 0x1f83 '\8076' -> 0x1f84 '\8077' -> 0x1f85 '\8078' -> 0x1f86 '\8079' -> 0x1f87 '\8080' -> 0x1f90 '\8081' -> 0x1f91 '\8082' -> 0x1f92 '\8083' -> 0x1f93 '\8084' -> 0x1f94 '\8085' -> 0x1f95 '\8086' -> 0x1f96 '\8087' -> 0x1f97 '\8088' -> 0x1f90 '\8089' -> 0x1f91 '\8090' -> 0x1f92 '\8091' -> 0x1f93 '\8092' -> 0x1f94 '\8093' -> 0x1f95 '\8094' -> 0x1f96 '\8095' -> 0x1f97 '\8096' -> 0x1fa0 '\8097' -> 0x1fa1 '\8098' -> 0x1fa2 '\8099' -> 0x1fa3 '\8100' -> 0x1fa4 '\8101' -> 0x1fa5 '\8102' -> 0x1fa6 '\8103' -> 0x1fa7 '\8104' -> 0x1fa0 '\8105' -> 0x1fa1 '\8106' -> 0x1fa2 '\8107' -> 0x1fa3 '\8108' -> 0x1fa4 '\8109' -> 0x1fa5 '\8110' -> 0x1fa6 '\8111' -> 0x1fa7 '\8114' -> 0x1fb2 '\8115' -> 0x1fb3 '\8116' -> 0x1fb4 '\8118' -> 0x1fb6 '\8119' -> 0x1fb7 '\8120' -> 0x1fb0 '\8121' -> 0x1fb1 '\8122' -> 0x1f70 '\8123' -> 0x1f71 '\8124' -> 0x1fb3 '\8130' -> 0x1fc2 '\8131' -> 0x1fc3 '\8132' -> 0x1fc4 '\8134' -> 0x1fc6 '\8135' -> 0x1fc7 '\8136' -> 0x1f72 '\8137' -> 0x1f73 '\8138' -> 0x1f74 '\8139' -> 0x1f75 '\8140' -> 0x1fc3 '\8146' -> 0x1fd2 '\8147' -> 0x1fd3 '\8150' -> 0x1fd6 '\8151' -> 0x1fd7 '\8152' -> 0x1fd0 '\8153' -> 0x1fd1 '\8154' -> 0x1f76 '\8155' -> 0x1f77 '\8162' -> 0x1fe2 '\8163' -> 0x1fe3 '\8164' -> 0x1fe4 '\8166' -> 0x1fe6 '\8167' -> 0x1fe7 '\8168' -> 0x1fe0 '\8169' -> 0x1fe1 '\8170' -> 0x1f7a '\8171' -> 0x1f7b '\8172' -> 0x1fe5 '\8178' -> 0x1ff2 '\8179' -> 0x1ff3 '\8180' -> 0x1ff4 '\8182' -> 0x1ff6 '\8183' -> 0x1ff7 '\8184' -> 0x1f78 '\8185' -> 0x1f79 '\8186' -> 0x1f7c '\8187' -> 0x1f7d '\8188' -> 0x1ff3 '\8486' -> 0x3c9 '\8490' -> 0x6b '\8491' -> 0xe5 '\8498' -> 0x214e '\8544' -> 0x2170 '\8545' -> 0x2171 '\8546' -> 0x2172 '\8547' -> 0x2173 '\8548' -> 0x2174 '\8549' -> 0x2175 '\8550' -> 0x2176 '\8551' -> 0x2177 '\8552' -> 0x2178 '\8553' -> 0x2179 '\8554' -> 0x217a '\8555' -> 0x217b '\8556' -> 0x217c '\8557' -> 0x217d '\8558' -> 0x217e '\8559' -> 0x217f '\8579' -> 0x2184 '\9398' -> 0x24d0 '\9399' -> 0x24d1 '\9400' -> 0x24d2 '\9401' -> 0x24d3 '\9402' -> 0x24d4 '\9403' -> 0x24d5 '\9404' -> 0x24d6 '\9405' -> 0x24d7 '\9406' -> 0x24d8 '\9407' -> 0x24d9 '\9408' -> 0x24da '\9409' -> 0x24db '\9410' -> 0x24dc '\9411' -> 0x24dd '\9412' -> 0x24de '\9413' -> 0x24df '\9414' -> 0x24e0 '\9415' -> 0x24e1 '\9416' -> 0x24e2 '\9417' -> 0x24e3 '\9418' -> 0x24e4 '\9419' -> 0x24e5 '\9420' -> 0x24e6 '\9421' -> 0x24e7 '\9422' -> 0x24e8 '\9423' -> 0x24e9 '\11264' -> 0x2c30 '\11265' -> 0x2c31 '\11266' -> 0x2c32 '\11267' -> 0x2c33 '\11268' -> 0x2c34 '\11269' -> 0x2c35 '\11270' -> 0x2c36 '\11271' -> 0x2c37 '\11272' -> 0x2c38 '\11273' -> 0x2c39 '\11274' -> 0x2c3a '\11275' -> 0x2c3b '\11276' -> 0x2c3c '\11277' -> 0x2c3d '\11278' -> 0x2c3e '\11279' -> 0x2c3f '\11280' -> 0x2c40 '\11281' -> 0x2c41 '\11282' -> 0x2c42 '\11283' -> 0x2c43 '\11284' -> 0x2c44 '\11285' -> 0x2c45 '\11286' -> 0x2c46 '\11287' -> 0x2c47 '\11288' -> 0x2c48 '\11289' -> 0x2c49 '\11290' -> 0x2c4a '\11291' -> 0x2c4b '\11292' -> 0x2c4c '\11293' -> 0x2c4d '\11294' -> 0x2c4e '\11295' -> 0x2c4f '\11296' -> 0x2c50 '\11297' -> 0x2c51 '\11298' -> 0x2c52 '\11299' -> 0x2c53 '\11300' -> 0x2c54 '\11301' -> 0x2c55 '\11302' -> 0x2c56 '\11303' -> 0x2c57 '\11304' -> 0x2c58 '\11305' -> 0x2c59 '\11306' -> 0x2c5a '\11307' -> 0x2c5b '\11308' -> 0x2c5c '\11309' -> 0x2c5d '\11310' -> 0x2c5e '\11311' -> 0x2c5f '\11360' -> 0x2c61 '\11362' -> 0x26b '\11363' -> 0x1d7d '\11364' -> 0x27d '\11367' -> 0x2c68 '\11369' -> 0x2c6a '\11371' -> 0x2c6c '\11373' -> 0x251 '\11374' -> 0x271 '\11375' -> 0x250 '\11376' -> 0x252 '\11378' -> 0x2c73 '\11381' -> 0x2c76 '\11390' -> 0x23f '\11391' -> 0x240 '\11392' -> 0x2c81 '\11394' -> 0x2c83 '\11396' -> 0x2c85 '\11398' -> 0x2c87 '\11400' -> 0x2c89 '\11402' -> 0x2c8b '\11404' -> 0x2c8d '\11406' -> 0x2c8f '\11408' -> 0x2c91 '\11410' -> 0x2c93 '\11412' -> 0x2c95 '\11414' -> 0x2c97 '\11416' -> 0x2c99 '\11418' -> 0x2c9b '\11420' -> 0x2c9d '\11422' -> 0x2c9f '\11424' -> 0x2ca1 '\11426' -> 0x2ca3 '\11428' -> 0x2ca5 '\11430' -> 0x2ca7 '\11432' -> 0x2ca9 '\11434' -> 0x2cab '\11436' -> 0x2cad '\11438' -> 0x2caf '\11440' -> 0x2cb1 '\11442' -> 0x2cb3 '\11444' -> 0x2cb5 '\11446' -> 0x2cb7 '\11448' -> 0x2cb9 '\11450' -> 0x2cbb '\11452' -> 0x2cbd '\11454' -> 0x2cbf '\11456' -> 0x2cc1 '\11458' -> 0x2cc3 '\11460' -> 0x2cc5 '\11462' -> 0x2cc7 '\11464' -> 0x2cc9 '\11466' -> 0x2ccb '\11468' -> 0x2ccd '\11470' -> 0x2ccf '\11472' -> 0x2cd1 '\11474' -> 0x2cd3 '\11476' -> 0x2cd5 '\11478' -> 0x2cd7 '\11480' -> 0x2cd9 '\11482' -> 0x2cdb '\11484' -> 0x2cdd '\11486' -> 0x2cdf '\11488' -> 0x2ce1 '\11490' -> 0x2ce3 '\11499' -> 0x2cec '\11501' -> 0x2cee '\11506' -> 0x2cf3 '\42560' -> 0xa641 '\42562' -> 0xa643 '\42564' -> 0xa645 '\42566' -> 0xa647 '\42568' -> 0xa649 '\42570' -> 0xa64b '\42572' -> 0xa64d '\42574' -> 0xa64f '\42576' -> 0xa651 '\42578' -> 0xa653 '\42580' -> 0xa655 '\42582' -> 0xa657 '\42584' -> 0xa659 '\42586' -> 0xa65b '\42588' -> 0xa65d '\42590' -> 0xa65f '\42592' -> 0xa661 '\42594' -> 0xa663 '\42596' -> 0xa665 '\42598' -> 0xa667 '\42600' -> 0xa669 '\42602' -> 0xa66b '\42604' -> 0xa66d '\42624' -> 0xa681 '\42626' -> 0xa683 '\42628' -> 0xa685 '\42630' -> 0xa687 '\42632' -> 0xa689 '\42634' -> 0xa68b '\42636' -> 0xa68d '\42638' -> 0xa68f '\42640' -> 0xa691 '\42642' -> 0xa693 '\42644' -> 0xa695 '\42646' -> 0xa697 '\42648' -> 0xa699 '\42650' -> 0xa69b '\42786' -> 0xa723 '\42788' -> 0xa725 '\42790' -> 0xa727 '\42792' -> 0xa729 '\42794' -> 0xa72b '\42796' -> 0xa72d '\42798' -> 0xa72f '\42802' -> 0xa733 '\42804' -> 0xa735 '\42806' -> 0xa737 '\42808' -> 0xa739 '\42810' -> 0xa73b '\42812' -> 0xa73d '\42814' -> 0xa73f '\42816' -> 0xa741 '\42818' -> 0xa743 '\42820' -> 0xa745 '\42822' -> 0xa747 '\42824' -> 0xa749 '\42826' -> 0xa74b '\42828' -> 0xa74d '\42830' -> 0xa74f '\42832' -> 0xa751 '\42834' -> 0xa753 '\42836' -> 0xa755 '\42838' -> 0xa757 '\42840' -> 0xa759 '\42842' -> 0xa75b '\42844' -> 0xa75d '\42846' -> 0xa75f '\42848' -> 0xa761 '\42850' -> 0xa763 '\42852' -> 0xa765 '\42854' -> 0xa767 '\42856' -> 0xa769 '\42858' -> 0xa76b '\42860' -> 0xa76d '\42862' -> 0xa76f '\42873' -> 0xa77a '\42875' -> 0xa77c '\42877' -> 0x1d79 '\42878' -> 0xa77f '\42880' -> 0xa781 '\42882' -> 0xa783 '\42884' -> 0xa785 '\42886' -> 0xa787 '\42891' -> 0xa78c '\42893' -> 0x265 '\42896' -> 0xa791 '\42898' -> 0xa793 '\42902' -> 0xa797 '\42904' -> 0xa799 '\42906' -> 0xa79b '\42908' -> 0xa79d '\42910' -> 0xa79f '\42912' -> 0xa7a1 '\42914' -> 0xa7a3 '\42916' -> 0xa7a5 '\42918' -> 0xa7a7 '\42920' -> 0xa7a9 '\42922' -> 0x266 '\42923' -> 0x25c '\42924' -> 0x261 '\42925' -> 0x26c '\42926' -> 0x26a '\42928' -> 0x29e '\42929' -> 0x287 '\42930' -> 0x29d '\42931' -> 0xab53 '\42932' -> 0xa7b5 '\42934' -> 0xa7b7 '\42936' -> 0xa7b9 '\42938' -> 0xa7bb '\42940' -> 0xa7bd '\42942' -> 0xa7bf '\42944' -> 0xa7c1 '\42946' -> 0xa7c3 '\42948' -> 0xa794 '\42949' -> 0x282 '\42950' -> 0x1d8e '\42951' -> 0xa7c8 '\42953' -> 0xa7ca '\42960' -> 0xa7d1 '\42966' -> 0xa7d7 '\42968' -> 0xa7d9 '\42997' -> 0xa7f6 '\64256' -> 0xfb00 '\64257' -> 0xfb01 '\64258' -> 0xfb02 '\64259' -> 0xfb03 '\64260' -> 0xfb04 '\64261' -> 0xfb05 '\64262' -> 0xfb06 '\64275' -> 0xfb13 '\64276' -> 0xfb14 '\64277' -> 0xfb15 '\64278' -> 0xfb16 '\64279' -> 0xfb17 '\65313' -> 0xff41 '\65314' -> 0xff42 '\65315' -> 0xff43 '\65316' -> 0xff44 '\65317' -> 0xff45 '\65318' -> 0xff46 '\65319' -> 0xff47 '\65320' -> 0xff48 '\65321' -> 0xff49 '\65322' -> 0xff4a '\65323' -> 0xff4b '\65324' -> 0xff4c '\65325' -> 0xff4d '\65326' -> 0xff4e '\65327' -> 0xff4f '\65328' -> 0xff50 '\65329' -> 0xff51 '\65330' -> 0xff52 '\65331' -> 0xff53 '\65332' -> 0xff54 '\65333' -> 0xff55 '\65334' -> 0xff56 '\65335' -> 0xff57 '\65336' -> 0xff58 '\65337' -> 0xff59 '\65338' -> 0xff5a '\66560' -> 0x10428 '\66561' -> 0x10429 '\66562' -> 0x1042a '\66563' -> 0x1042b '\66564' -> 0x1042c '\66565' -> 0x1042d '\66566' -> 0x1042e '\66567' -> 0x1042f '\66568' -> 0x10430 '\66569' -> 0x10431 '\66570' -> 0x10432 '\66571' -> 0x10433 '\66572' -> 0x10434 '\66573' -> 0x10435 '\66574' -> 0x10436 '\66575' -> 0x10437 '\66576' -> 0x10438 '\66577' -> 0x10439 '\66578' -> 0x1043a '\66579' -> 0x1043b '\66580' -> 0x1043c '\66581' -> 0x1043d '\66582' -> 0x1043e '\66583' -> 0x1043f '\66584' -> 0x10440 '\66585' -> 0x10441 '\66586' -> 0x10442 '\66587' -> 0x10443 '\66588' -> 0x10444 '\66589' -> 0x10445 '\66590' -> 0x10446 '\66591' -> 0x10447 '\66592' -> 0x10448 '\66593' -> 0x10449 '\66594' -> 0x1044a '\66595' -> 0x1044b '\66596' -> 0x1044c '\66597' -> 0x1044d '\66598' -> 0x1044e '\66599' -> 0x1044f '\66736' -> 0x104d8 '\66737' -> 0x104d9 '\66738' -> 0x104da '\66739' -> 0x104db '\66740' -> 0x104dc '\66741' -> 0x104dd '\66742' -> 0x104de '\66743' -> 0x104df '\66744' -> 0x104e0 '\66745' -> 0x104e1 '\66746' -> 0x104e2 '\66747' -> 0x104e3 '\66748' -> 0x104e4 '\66749' -> 0x104e5 '\66750' -> 0x104e6 '\66751' -> 0x104e7 '\66752' -> 0x104e8 '\66753' -> 0x104e9 '\66754' -> 0x104ea '\66755' -> 0x104eb '\66756' -> 0x104ec '\66757' -> 0x104ed '\66758' -> 0x104ee '\66759' -> 0x104ef '\66760' -> 0x104f0 '\66761' -> 0x104f1 '\66762' -> 0x104f2 '\66763' -> 0x104f3 '\66764' -> 0x104f4 '\66765' -> 0x104f5 '\66766' -> 0x104f6 '\66767' -> 0x104f7 '\66768' -> 0x104f8 '\66769' -> 0x104f9 '\66770' -> 0x104fa '\66771' -> 0x104fb '\66928' -> 0x10597 '\66929' -> 0x10598 '\66930' -> 0x10599 '\66931' -> 0x1059a '\66932' -> 0x1059b '\66933' -> 0x1059c '\66934' -> 0x1059d '\66935' -> 0x1059e '\66936' -> 0x1059f '\66937' -> 0x105a0 '\66938' -> 0x105a1 '\66940' -> 0x105a3 '\66941' -> 0x105a4 '\66942' -> 0x105a5 '\66943' -> 0x105a6 '\66944' -> 0x105a7 '\66945' -> 0x105a8 '\66946' -> 0x105a9 '\66947' -> 0x105aa '\66948' -> 0x105ab '\66949' -> 0x105ac '\66950' -> 0x105ad '\66951' -> 0x105ae '\66952' -> 0x105af '\66953' -> 0x105b0 '\66954' -> 0x105b1 '\66956' -> 0x105b3 '\66957' -> 0x105b4 '\66958' -> 0x105b5 '\66959' -> 0x105b6 '\66960' -> 0x105b7 '\66961' -> 0x105b8 '\66962' -> 0x105b9 '\66964' -> 0x105bb '\66965' -> 0x105bc '\68736' -> 0x10cc0 '\68737' -> 0x10cc1 '\68738' -> 0x10cc2 '\68739' -> 0x10cc3 '\68740' -> 0x10cc4 '\68741' -> 0x10cc5 '\68742' -> 0x10cc6 '\68743' -> 0x10cc7 '\68744' -> 0x10cc8 '\68745' -> 0x10cc9 '\68746' -> 0x10cca '\68747' -> 0x10ccb '\68748' -> 0x10ccc '\68749' -> 0x10ccd '\68750' -> 0x10cce '\68751' -> 0x10ccf '\68752' -> 0x10cd0 '\68753' -> 0x10cd1 '\68754' -> 0x10cd2 '\68755' -> 0x10cd3 '\68756' -> 0x10cd4 '\68757' -> 0x10cd5 '\68758' -> 0x10cd6 '\68759' -> 0x10cd7 '\68760' -> 0x10cd8 '\68761' -> 0x10cd9 '\68762' -> 0x10cda '\68763' -> 0x10cdb '\68764' -> 0x10cdc '\68765' -> 0x10cdd '\68766' -> 0x10cde '\68767' -> 0x10cdf '\68768' -> 0x10ce0 '\68769' -> 0x10ce1 '\68770' -> 0x10ce2 '\68771' -> 0x10ce3 '\68772' -> 0x10ce4 '\68773' -> 0x10ce5 '\68774' -> 0x10ce6 '\68775' -> 0x10ce7 '\68776' -> 0x10ce8 '\68777' -> 0x10ce9 '\68778' -> 0x10cea '\68779' -> 0x10ceb '\68780' -> 0x10cec '\68781' -> 0x10ced '\68782' -> 0x10cee '\68783' -> 0x10cef '\68784' -> 0x10cf0 '\68785' -> 0x10cf1 '\68786' -> 0x10cf2 '\71840' -> 0x118c0 '\71841' -> 0x118c1 '\71842' -> 0x118c2 '\71843' -> 0x118c3 '\71844' -> 0x118c4 '\71845' -> 0x118c5 '\71846' -> 0x118c6 '\71847' -> 0x118c7 '\71848' -> 0x118c8 '\71849' -> 0x118c9 '\71850' -> 0x118ca '\71851' -> 0x118cb '\71852' -> 0x118cc '\71853' -> 0x118cd '\71854' -> 0x118ce '\71855' -> 0x118cf '\71856' -> 0x118d0 '\71857' -> 0x118d1 '\71858' -> 0x118d2 '\71859' -> 0x118d3 '\71860' -> 0x118d4 '\71861' -> 0x118d5 '\71862' -> 0x118d6 '\71863' -> 0x118d7 '\71864' -> 0x118d8 '\71865' -> 0x118d9 '\71866' -> 0x118da '\71867' -> 0x118db '\71868' -> 0x118dc '\71869' -> 0x118dd '\71870' -> 0x118de '\71871' -> 0x118df '\93760' -> 0x16e60 '\93761' -> 0x16e61 '\93762' -> 0x16e62 '\93763' -> 0x16e63 '\93764' -> 0x16e64 '\93765' -> 0x16e65 '\93766' -> 0x16e66 '\93767' -> 0x16e67 '\93768' -> 0x16e68 '\93769' -> 0x16e69 '\93770' -> 0x16e6a '\93771' -> 0x16e6b '\93772' -> 0x16e6c '\93773' -> 0x16e6d '\93774' -> 0x16e6e '\93775' -> 0x16e6f '\93776' -> 0x16e70 '\93777' -> 0x16e71 '\93778' -> 0x16e72 '\93779' -> 0x16e73 '\93780' -> 0x16e74 '\93781' -> 0x16e75 '\93782' -> 0x16e76 '\93783' -> 0x16e77 '\93784' -> 0x16e78 '\93785' -> 0x16e79 '\93786' -> 0x16e7a '\93787' -> 0x16e7b '\93788' -> 0x16e7c '\93789' -> 0x16e7d '\93790' -> 0x16e7e '\93791' -> 0x16e7f '\125184' -> 0x1e922 '\125185' -> 0x1e923 '\125186' -> 0x1e924 '\125187' -> 0x1e925 '\125188' -> 0x1e926 '\125189' -> 0x1e927 '\125190' -> 0x1e928 '\125191' -> 0x1e929 '\125192' -> 0x1e92a '\125193' -> 0x1e92b '\125194' -> 0x1e92c '\125195' -> 0x1e92d '\125196' -> 0x1e92e '\125197' -> 0x1e92f '\125198' -> 0x1e930 '\125199' -> 0x1e931 '\125200' -> 0x1e932 '\125201' -> 0x1e933 '\125202' -> 0x1e934 '\125203' -> 0x1e935 '\125204' -> 0x1e936 '\125205' -> 0x1e937 '\125206' -> 0x1e938 '\125207' -> 0x1e939 '\125208' -> 0x1e93a '\125209' -> 0x1e93b '\125210' -> 0x1e93c '\125211' -> 0x1e93d '\125212' -> 0x1e93e '\125213' -> 0x1e93f '\125214' -> 0x1e940 '\125215' -> 0x1e941 '\125216' -> 0x1e942 '\125217' -> 0x1e943 _ -> 0 unicode-data-0.6.0/lib/Unicode/Internal/Char/SpecialCasing/TitleCaseMapping.hs0000644000000000000000000007531307346545000025273 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.SpecialCasing.TitleCaseMapping -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.SpecialCasing.TitleCaseMapping (toSpecialTitleCase) where import Data.Int (Int64) {-# NOINLINE toSpecialTitleCase #-} toSpecialTitleCase :: Char -> Int64 toSpecialTitleCase = \case 'a' -> 0x41 'b' -> 0x42 'c' -> 0x43 'd' -> 0x44 'e' -> 0x45 'f' -> 0x46 'g' -> 0x47 'h' -> 0x48 'i' -> 0x49 'j' -> 0x4a 'k' -> 0x4b 'l' -> 0x4c 'm' -> 0x4d 'n' -> 0x4e 'o' -> 0x4f 'p' -> 0x50 'q' -> 0x51 'r' -> 0x52 's' -> 0x53 't' -> 0x54 'u' -> 0x55 'v' -> 0x56 'w' -> 0x57 'x' -> 0x58 'y' -> 0x59 'z' -> 0x5a '\181' -> 0x39c '\223' -> 0xe600053 '\224' -> 0xc0 '\225' -> 0xc1 '\226' -> 0xc2 '\227' -> 0xc3 '\228' -> 0xc4 '\229' -> 0xc5 '\230' -> 0xc6 '\231' -> 0xc7 '\232' -> 0xc8 '\233' -> 0xc9 '\234' -> 0xca '\235' -> 0xcb '\236' -> 0xcc '\237' -> 0xcd '\238' -> 0xce '\239' -> 0xcf '\240' -> 0xd0 '\241' -> 0xd1 '\242' -> 0xd2 '\243' -> 0xd3 '\244' -> 0xd4 '\245' -> 0xd5 '\246' -> 0xd6 '\248' -> 0xd8 '\249' -> 0xd9 '\250' -> 0xda '\251' -> 0xdb '\252' -> 0xdc '\253' -> 0xdd '\254' -> 0xde '\255' -> 0x178 '\257' -> 0x100 '\259' -> 0x102 '\261' -> 0x104 '\263' -> 0x106 '\265' -> 0x108 '\267' -> 0x10a '\269' -> 0x10c '\271' -> 0x10e '\273' -> 0x110 '\275' -> 0x112 '\277' -> 0x114 '\279' -> 0x116 '\281' -> 0x118 '\283' -> 0x11a '\285' -> 0x11c '\287' -> 0x11e '\289' -> 0x120 '\291' -> 0x122 '\293' -> 0x124 '\295' -> 0x126 '\297' -> 0x128 '\299' -> 0x12a '\301' -> 0x12c '\303' -> 0x12e '\304' -> 0x130 '\305' -> 0x49 '\307' -> 0x132 '\309' -> 0x134 '\311' -> 0x136 '\314' -> 0x139 '\316' -> 0x13b '\318' -> 0x13d '\320' -> 0x13f '\322' -> 0x141 '\324' -> 0x143 '\326' -> 0x145 '\328' -> 0x147 '\329' -> 0x9c002bc '\331' -> 0x14a '\333' -> 0x14c '\335' -> 0x14e '\337' -> 0x150 '\339' -> 0x152 '\341' -> 0x154 '\343' -> 0x156 '\345' -> 0x158 '\347' -> 0x15a '\349' -> 0x15c '\351' -> 0x15e '\353' -> 0x160 '\355' -> 0x162 '\357' -> 0x164 '\359' -> 0x166 '\361' -> 0x168 '\363' -> 0x16a '\365' -> 0x16c '\367' -> 0x16e '\369' -> 0x170 '\371' -> 0x172 '\373' -> 0x174 '\375' -> 0x176 '\378' -> 0x179 '\380' -> 0x17b '\382' -> 0x17d '\383' -> 0x53 '\384' -> 0x243 '\387' -> 0x182 '\389' -> 0x184 '\392' -> 0x187 '\396' -> 0x18b '\402' -> 0x191 '\405' -> 0x1f6 '\409' -> 0x198 '\410' -> 0x23d '\414' -> 0x220 '\417' -> 0x1a0 '\419' -> 0x1a2 '\421' -> 0x1a4 '\424' -> 0x1a7 '\429' -> 0x1ac '\432' -> 0x1af '\436' -> 0x1b3 '\438' -> 0x1b5 '\441' -> 0x1b8 '\445' -> 0x1bc '\447' -> 0x1f7 '\452' -> 0x1c5 '\453' -> 0x1c5 '\454' -> 0x1c5 '\455' -> 0x1c8 '\456' -> 0x1c8 '\457' -> 0x1c8 '\458' -> 0x1cb '\459' -> 0x1cb '\460' -> 0x1cb '\462' -> 0x1cd '\464' -> 0x1cf '\466' -> 0x1d1 '\468' -> 0x1d3 '\470' -> 0x1d5 '\472' -> 0x1d7 '\474' -> 0x1d9 '\476' -> 0x1db '\477' -> 0x18e '\479' -> 0x1de '\481' -> 0x1e0 '\483' -> 0x1e2 '\485' -> 0x1e4 '\487' -> 0x1e6 '\489' -> 0x1e8 '\491' -> 0x1ea '\493' -> 0x1ec '\495' -> 0x1ee '\496' -> 0x6180004a '\497' -> 0x1f2 '\498' -> 0x1f2 '\499' -> 0x1f2 '\501' -> 0x1f4 '\505' -> 0x1f8 '\507' -> 0x1fa '\509' -> 0x1fc '\511' -> 0x1fe '\513' -> 0x200 '\515' -> 0x202 '\517' -> 0x204 '\519' -> 0x206 '\521' -> 0x208 '\523' -> 0x20a '\525' -> 0x20c '\527' -> 0x20e '\529' -> 0x210 '\531' -> 0x212 '\533' -> 0x214 '\535' -> 0x216 '\537' -> 0x218 '\539' -> 0x21a '\541' -> 0x21c '\543' -> 0x21e '\547' -> 0x222 '\549' -> 0x224 '\551' -> 0x226 '\553' -> 0x228 '\555' -> 0x22a '\557' -> 0x22c '\559' -> 0x22e '\561' -> 0x230 '\563' -> 0x232 '\572' -> 0x23b '\575' -> 0x2c7e '\576' -> 0x2c7f '\578' -> 0x241 '\583' -> 0x246 '\585' -> 0x248 '\587' -> 0x24a '\589' -> 0x24c '\591' -> 0x24e '\592' -> 0x2c6f '\593' -> 0x2c6d '\594' -> 0x2c70 '\595' -> 0x181 '\596' -> 0x186 '\598' -> 0x189 '\599' -> 0x18a '\601' -> 0x18f '\603' -> 0x190 '\604' -> 0xa7ab '\608' -> 0x193 '\609' -> 0xa7ac '\611' -> 0x194 '\613' -> 0xa78d '\614' -> 0xa7aa '\616' -> 0x197 '\617' -> 0x196 '\618' -> 0xa7ae '\619' -> 0x2c62 '\620' -> 0xa7ad '\623' -> 0x19c '\625' -> 0x2c6e '\626' -> 0x19d '\629' -> 0x19f '\637' -> 0x2c64 '\640' -> 0x1a6 '\642' -> 0xa7c5 '\643' -> 0x1a9 '\647' -> 0xa7b1 '\648' -> 0x1ae '\649' -> 0x244 '\650' -> 0x1b1 '\651' -> 0x1b2 '\652' -> 0x245 '\658' -> 0x1b7 '\669' -> 0xa7b2 '\670' -> 0xa7b0 '\837' -> 0x399 '\881' -> 0x370 '\883' -> 0x372 '\887' -> 0x376 '\891' -> 0x3fd '\892' -> 0x3fe '\893' -> 0x3ff '\912' -> 0xc040061000399 '\940' -> 0x386 '\941' -> 0x388 '\942' -> 0x389 '\943' -> 0x38a '\944' -> 0xc0400610003a5 '\945' -> 0x391 '\946' -> 0x392 '\947' -> 0x393 '\948' -> 0x394 '\949' -> 0x395 '\950' -> 0x396 '\951' -> 0x397 '\952' -> 0x398 '\953' -> 0x399 '\954' -> 0x39a '\955' -> 0x39b '\956' -> 0x39c '\957' -> 0x39d '\958' -> 0x39e '\959' -> 0x39f '\960' -> 0x3a0 '\961' -> 0x3a1 '\962' -> 0x3a3 '\963' -> 0x3a3 '\964' -> 0x3a4 '\965' -> 0x3a5 '\966' -> 0x3a6 '\967' -> 0x3a7 '\968' -> 0x3a8 '\969' -> 0x3a9 '\970' -> 0x3aa '\971' -> 0x3ab '\972' -> 0x38c '\973' -> 0x38e '\974' -> 0x38f '\976' -> 0x392 '\977' -> 0x398 '\981' -> 0x3a6 '\982' -> 0x3a0 '\983' -> 0x3cf '\985' -> 0x3d8 '\987' -> 0x3da '\989' -> 0x3dc '\991' -> 0x3de '\993' -> 0x3e0 '\995' -> 0x3e2 '\997' -> 0x3e4 '\999' -> 0x3e6 '\1001' -> 0x3e8 '\1003' -> 0x3ea '\1005' -> 0x3ec '\1007' -> 0x3ee '\1008' -> 0x39a '\1009' -> 0x3a1 '\1010' -> 0x3f9 '\1011' -> 0x37f '\1013' -> 0x395 '\1016' -> 0x3f7 '\1019' -> 0x3fa '\1072' -> 0x410 '\1073' -> 0x411 '\1074' -> 0x412 '\1075' -> 0x413 '\1076' -> 0x414 '\1077' -> 0x415 '\1078' -> 0x416 '\1079' -> 0x417 '\1080' -> 0x418 '\1081' -> 0x419 '\1082' -> 0x41a '\1083' -> 0x41b '\1084' -> 0x41c '\1085' -> 0x41d '\1086' -> 0x41e '\1087' -> 0x41f '\1088' -> 0x420 '\1089' -> 0x421 '\1090' -> 0x422 '\1091' -> 0x423 '\1092' -> 0x424 '\1093' -> 0x425 '\1094' -> 0x426 '\1095' -> 0x427 '\1096' -> 0x428 '\1097' -> 0x429 '\1098' -> 0x42a '\1099' -> 0x42b '\1100' -> 0x42c '\1101' -> 0x42d '\1102' -> 0x42e '\1103' -> 0x42f '\1104' -> 0x400 '\1105' -> 0x401 '\1106' -> 0x402 '\1107' -> 0x403 '\1108' -> 0x404 '\1109' -> 0x405 '\1110' -> 0x406 '\1111' -> 0x407 '\1112' -> 0x408 '\1113' -> 0x409 '\1114' -> 0x40a '\1115' -> 0x40b '\1116' -> 0x40c '\1117' -> 0x40d '\1118' -> 0x40e '\1119' -> 0x40f '\1121' -> 0x460 '\1123' -> 0x462 '\1125' -> 0x464 '\1127' -> 0x466 '\1129' -> 0x468 '\1131' -> 0x46a '\1133' -> 0x46c '\1135' -> 0x46e '\1137' -> 0x470 '\1139' -> 0x472 '\1141' -> 0x474 '\1143' -> 0x476 '\1145' -> 0x478 '\1147' -> 0x47a '\1149' -> 0x47c '\1151' -> 0x47e '\1153' -> 0x480 '\1163' -> 0x48a '\1165' -> 0x48c '\1167' -> 0x48e '\1169' -> 0x490 '\1171' -> 0x492 '\1173' -> 0x494 '\1175' -> 0x496 '\1177' -> 0x498 '\1179' -> 0x49a '\1181' -> 0x49c '\1183' -> 0x49e '\1185' -> 0x4a0 '\1187' -> 0x4a2 '\1189' -> 0x4a4 '\1191' -> 0x4a6 '\1193' -> 0x4a8 '\1195' -> 0x4aa '\1197' -> 0x4ac '\1199' -> 0x4ae '\1201' -> 0x4b0 '\1203' -> 0x4b2 '\1205' -> 0x4b4 '\1207' -> 0x4b6 '\1209' -> 0x4b8 '\1211' -> 0x4ba '\1213' -> 0x4bc '\1215' -> 0x4be '\1218' -> 0x4c1 '\1220' -> 0x4c3 '\1222' -> 0x4c5 '\1224' -> 0x4c7 '\1226' -> 0x4c9 '\1228' -> 0x4cb '\1230' -> 0x4cd '\1231' -> 0x4c0 '\1233' -> 0x4d0 '\1235' -> 0x4d2 '\1237' -> 0x4d4 '\1239' -> 0x4d6 '\1241' -> 0x4d8 '\1243' -> 0x4da '\1245' -> 0x4dc '\1247' -> 0x4de '\1249' -> 0x4e0 '\1251' -> 0x4e2 '\1253' -> 0x4e4 '\1255' -> 0x4e6 '\1257' -> 0x4e8 '\1259' -> 0x4ea '\1261' -> 0x4ec '\1263' -> 0x4ee '\1265' -> 0x4f0 '\1267' -> 0x4f2 '\1269' -> 0x4f4 '\1271' -> 0x4f6 '\1273' -> 0x4f8 '\1275' -> 0x4fa '\1277' -> 0x4fc '\1279' -> 0x4fe '\1281' -> 0x500 '\1283' -> 0x502 '\1285' -> 0x504 '\1287' -> 0x506 '\1289' -> 0x508 '\1291' -> 0x50a '\1293' -> 0x50c '\1295' -> 0x50e '\1297' -> 0x510 '\1299' -> 0x512 '\1301' -> 0x514 '\1303' -> 0x516 '\1305' -> 0x518 '\1307' -> 0x51a '\1309' -> 0x51c '\1311' -> 0x51e '\1313' -> 0x520 '\1315' -> 0x522 '\1317' -> 0x524 '\1319' -> 0x526 '\1321' -> 0x528 '\1323' -> 0x52a '\1325' -> 0x52c '\1327' -> 0x52e '\1377' -> 0x531 '\1378' -> 0x532 '\1379' -> 0x533 '\1380' -> 0x534 '\1381' -> 0x535 '\1382' -> 0x536 '\1383' -> 0x537 '\1384' -> 0x538 '\1385' -> 0x539 '\1386' -> 0x53a '\1387' -> 0x53b '\1388' -> 0x53c '\1389' -> 0x53d '\1390' -> 0x53e '\1391' -> 0x53f '\1392' -> 0x540 '\1393' -> 0x541 '\1394' -> 0x542 '\1395' -> 0x543 '\1396' -> 0x544 '\1397' -> 0x545 '\1398' -> 0x546 '\1399' -> 0x547 '\1400' -> 0x548 '\1401' -> 0x549 '\1402' -> 0x54a '\1403' -> 0x54b '\1404' -> 0x54c '\1405' -> 0x54d '\1406' -> 0x54e '\1407' -> 0x54f '\1408' -> 0x550 '\1409' -> 0x551 '\1410' -> 0x552 '\1411' -> 0x553 '\1412' -> 0x554 '\1413' -> 0x555 '\1414' -> 0x556 '\1415' -> 0xb0400535 '\4304' -> 0x10d0 '\4305' -> 0x10d1 '\4306' -> 0x10d2 '\4307' -> 0x10d3 '\4308' -> 0x10d4 '\4309' -> 0x10d5 '\4310' -> 0x10d6 '\4311' -> 0x10d7 '\4312' -> 0x10d8 '\4313' -> 0x10d9 '\4314' -> 0x10da '\4315' -> 0x10db '\4316' -> 0x10dc '\4317' -> 0x10dd '\4318' -> 0x10de '\4319' -> 0x10df '\4320' -> 0x10e0 '\4321' -> 0x10e1 '\4322' -> 0x10e2 '\4323' -> 0x10e3 '\4324' -> 0x10e4 '\4325' -> 0x10e5 '\4326' -> 0x10e6 '\4327' -> 0x10e7 '\4328' -> 0x10e8 '\4329' -> 0x10e9 '\4330' -> 0x10ea '\4331' -> 0x10eb '\4332' -> 0x10ec '\4333' -> 0x10ed '\4334' -> 0x10ee '\4335' -> 0x10ef '\4336' -> 0x10f0 '\4337' -> 0x10f1 '\4338' -> 0x10f2 '\4339' -> 0x10f3 '\4340' -> 0x10f4 '\4341' -> 0x10f5 '\4342' -> 0x10f6 '\4343' -> 0x10f7 '\4344' -> 0x10f8 '\4345' -> 0x10f9 '\4346' -> 0x10fa '\4349' -> 0x10fd '\4350' -> 0x10fe '\4351' -> 0x10ff '\5112' -> 0x13f0 '\5113' -> 0x13f1 '\5114' -> 0x13f2 '\5115' -> 0x13f3 '\5116' -> 0x13f4 '\5117' -> 0x13f5 '\7296' -> 0x412 '\7297' -> 0x414 '\7298' -> 0x41e '\7299' -> 0x421 '\7300' -> 0x422 '\7301' -> 0x422 '\7302' -> 0x42a '\7303' -> 0x462 '\7304' -> 0xa64a '\7545' -> 0xa77d '\7549' -> 0x2c63 '\7566' -> 0xa7c6 '\7681' -> 0x1e00 '\7683' -> 0x1e02 '\7685' -> 0x1e04 '\7687' -> 0x1e06 '\7689' -> 0x1e08 '\7691' -> 0x1e0a '\7693' -> 0x1e0c '\7695' -> 0x1e0e '\7697' -> 0x1e10 '\7699' -> 0x1e12 '\7701' -> 0x1e14 '\7703' -> 0x1e16 '\7705' -> 0x1e18 '\7707' -> 0x1e1a '\7709' -> 0x1e1c '\7711' -> 0x1e1e '\7713' -> 0x1e20 '\7715' -> 0x1e22 '\7717' -> 0x1e24 '\7719' -> 0x1e26 '\7721' -> 0x1e28 '\7723' -> 0x1e2a '\7725' -> 0x1e2c '\7727' -> 0x1e2e '\7729' -> 0x1e30 '\7731' -> 0x1e32 '\7733' -> 0x1e34 '\7735' -> 0x1e36 '\7737' -> 0x1e38 '\7739' -> 0x1e3a '\7741' -> 0x1e3c '\7743' -> 0x1e3e '\7745' -> 0x1e40 '\7747' -> 0x1e42 '\7749' -> 0x1e44 '\7751' -> 0x1e46 '\7753' -> 0x1e48 '\7755' -> 0x1e4a '\7757' -> 0x1e4c '\7759' -> 0x1e4e '\7761' -> 0x1e50 '\7763' -> 0x1e52 '\7765' -> 0x1e54 '\7767' -> 0x1e56 '\7769' -> 0x1e58 '\7771' -> 0x1e5a '\7773' -> 0x1e5c '\7775' -> 0x1e5e '\7777' -> 0x1e60 '\7779' -> 0x1e62 '\7781' -> 0x1e64 '\7783' -> 0x1e66 '\7785' -> 0x1e68 '\7787' -> 0x1e6a '\7789' -> 0x1e6c '\7791' -> 0x1e6e '\7793' -> 0x1e70 '\7795' -> 0x1e72 '\7797' -> 0x1e74 '\7799' -> 0x1e76 '\7801' -> 0x1e78 '\7803' -> 0x1e7a '\7805' -> 0x1e7c '\7807' -> 0x1e7e '\7809' -> 0x1e80 '\7811' -> 0x1e82 '\7813' -> 0x1e84 '\7815' -> 0x1e86 '\7817' -> 0x1e88 '\7819' -> 0x1e8a '\7821' -> 0x1e8c '\7823' -> 0x1e8e '\7825' -> 0x1e90 '\7827' -> 0x1e92 '\7829' -> 0x1e94 '\7830' -> 0x66200048 '\7831' -> 0x61000054 '\7832' -> 0x61400057 '\7833' -> 0x61400059 '\7834' -> 0x57c00041 '\7835' -> 0x1e60 '\7841' -> 0x1ea0 '\7843' -> 0x1ea2 '\7845' -> 0x1ea4 '\7847' -> 0x1ea6 '\7849' -> 0x1ea8 '\7851' -> 0x1eaa '\7853' -> 0x1eac '\7855' -> 0x1eae '\7857' -> 0x1eb0 '\7859' -> 0x1eb2 '\7861' -> 0x1eb4 '\7863' -> 0x1eb6 '\7865' -> 0x1eb8 '\7867' -> 0x1eba '\7869' -> 0x1ebc '\7871' -> 0x1ebe '\7873' -> 0x1ec0 '\7875' -> 0x1ec2 '\7877' -> 0x1ec4 '\7879' -> 0x1ec6 '\7881' -> 0x1ec8 '\7883' -> 0x1eca '\7885' -> 0x1ecc '\7887' -> 0x1ece '\7889' -> 0x1ed0 '\7891' -> 0x1ed2 '\7893' -> 0x1ed4 '\7895' -> 0x1ed6 '\7897' -> 0x1ed8 '\7899' -> 0x1eda '\7901' -> 0x1edc '\7903' -> 0x1ede '\7905' -> 0x1ee0 '\7907' -> 0x1ee2 '\7909' -> 0x1ee4 '\7911' -> 0x1ee6 '\7913' -> 0x1ee8 '\7915' -> 0x1eea '\7917' -> 0x1eec '\7919' -> 0x1eee '\7921' -> 0x1ef0 '\7923' -> 0x1ef2 '\7925' -> 0x1ef4 '\7927' -> 0x1ef6 '\7929' -> 0x1ef8 '\7931' -> 0x1efa '\7933' -> 0x1efc '\7935' -> 0x1efe '\7936' -> 0x1f08 '\7937' -> 0x1f09 '\7938' -> 0x1f0a '\7939' -> 0x1f0b '\7940' -> 0x1f0c '\7941' -> 0x1f0d '\7942' -> 0x1f0e '\7943' -> 0x1f0f '\7952' -> 0x1f18 '\7953' -> 0x1f19 '\7954' -> 0x1f1a '\7955' -> 0x1f1b '\7956' -> 0x1f1c '\7957' -> 0x1f1d '\7968' -> 0x1f28 '\7969' -> 0x1f29 '\7970' -> 0x1f2a '\7971' -> 0x1f2b '\7972' -> 0x1f2c '\7973' -> 0x1f2d '\7974' -> 0x1f2e '\7975' -> 0x1f2f '\7984' -> 0x1f38 '\7985' -> 0x1f39 '\7986' -> 0x1f3a '\7987' -> 0x1f3b '\7988' -> 0x1f3c '\7989' -> 0x1f3d '\7990' -> 0x1f3e '\7991' -> 0x1f3f '\8000' -> 0x1f48 '\8001' -> 0x1f49 '\8002' -> 0x1f4a '\8003' -> 0x1f4b '\8004' -> 0x1f4c '\8005' -> 0x1f4d '\8016' -> 0x626003a5 '\8017' -> 0x1f59 '\8018' -> 0xc0000626003a5 '\8019' -> 0x1f5b '\8020' -> 0xc0400626003a5 '\8021' -> 0x1f5d '\8022' -> 0xd0800626003a5 '\8023' -> 0x1f5f '\8032' -> 0x1f68 '\8033' -> 0x1f69 '\8034' -> 0x1f6a '\8035' -> 0x1f6b '\8036' -> 0x1f6c '\8037' -> 0x1f6d '\8038' -> 0x1f6e '\8039' -> 0x1f6f '\8048' -> 0x1fba '\8049' -> 0x1fbb '\8050' -> 0x1fc8 '\8051' -> 0x1fc9 '\8052' -> 0x1fca '\8053' -> 0x1fcb '\8054' -> 0x1fda '\8055' -> 0x1fdb '\8056' -> 0x1ff8 '\8057' -> 0x1ff9 '\8058' -> 0x1fea '\8059' -> 0x1feb '\8060' -> 0x1ffa '\8061' -> 0x1ffb '\8064' -> 0x1f88 '\8065' -> 0x1f89 '\8066' -> 0x1f8a '\8067' -> 0x1f8b '\8068' -> 0x1f8c '\8069' -> 0x1f8d '\8070' -> 0x1f8e '\8071' -> 0x1f8f '\8072' -> 0x1f88 '\8073' -> 0x1f89 '\8074' -> 0x1f8a '\8075' -> 0x1f8b '\8076' -> 0x1f8c '\8077' -> 0x1f8d '\8078' -> 0x1f8e '\8079' -> 0x1f8f '\8080' -> 0x1f98 '\8081' -> 0x1f99 '\8082' -> 0x1f9a '\8083' -> 0x1f9b '\8084' -> 0x1f9c '\8085' -> 0x1f9d '\8086' -> 0x1f9e '\8087' -> 0x1f9f '\8088' -> 0x1f98 '\8089' -> 0x1f99 '\8090' -> 0x1f9a '\8091' -> 0x1f9b '\8092' -> 0x1f9c '\8093' -> 0x1f9d '\8094' -> 0x1f9e '\8095' -> 0x1f9f '\8096' -> 0x1fa8 '\8097' -> 0x1fa9 '\8098' -> 0x1faa '\8099' -> 0x1fab '\8100' -> 0x1fac '\8101' -> 0x1fad '\8102' -> 0x1fae '\8103' -> 0x1faf '\8104' -> 0x1fa8 '\8105' -> 0x1fa9 '\8106' -> 0x1faa '\8107' -> 0x1fab '\8108' -> 0x1fac '\8109' -> 0x1fad '\8110' -> 0x1fae '\8111' -> 0x1faf '\8112' -> 0x1fb8 '\8113' -> 0x1fb9 '\8114' -> 0x68a01fba '\8115' -> 0x1fbc '\8116' -> 0x68a00386 '\8118' -> 0x68400391 '\8119' -> 0xd140068400391 '\8124' -> 0x1fbc '\8126' -> 0x399 '\8130' -> 0x68a01fca '\8131' -> 0x1fcc '\8132' -> 0x68a00389 '\8134' -> 0x68400397 '\8135' -> 0xd140068400397 '\8140' -> 0x1fcc '\8144' -> 0x1fd8 '\8145' -> 0x1fd9 '\8146' -> 0xc000061000399 '\8147' -> 0xc040061000399 '\8150' -> 0x68400399 '\8151' -> 0xd080061000399 '\8160' -> 0x1fe8 '\8161' -> 0x1fe9 '\8162' -> 0xc0000610003a5 '\8163' -> 0xc0400610003a5 '\8164' -> 0x626003a1 '\8165' -> 0x1fec '\8166' -> 0x684003a5 '\8167' -> 0xd0800610003a5 '\8178' -> 0x68a01ffa '\8179' -> 0x1ffc '\8180' -> 0x68a0038f '\8182' -> 0x684003a9 '\8183' -> 0xd1400684003a9 '\8188' -> 0x1ffc '\8526' -> 0x2132 '\8560' -> 0x2160 '\8561' -> 0x2161 '\8562' -> 0x2162 '\8563' -> 0x2163 '\8564' -> 0x2164 '\8565' -> 0x2165 '\8566' -> 0x2166 '\8567' -> 0x2167 '\8568' -> 0x2168 '\8569' -> 0x2169 '\8570' -> 0x216a '\8571' -> 0x216b '\8572' -> 0x216c '\8573' -> 0x216d '\8574' -> 0x216e '\8575' -> 0x216f '\8580' -> 0x2183 '\9424' -> 0x24b6 '\9425' -> 0x24b7 '\9426' -> 0x24b8 '\9427' -> 0x24b9 '\9428' -> 0x24ba '\9429' -> 0x24bb '\9430' -> 0x24bc '\9431' -> 0x24bd '\9432' -> 0x24be '\9433' -> 0x24bf '\9434' -> 0x24c0 '\9435' -> 0x24c1 '\9436' -> 0x24c2 '\9437' -> 0x24c3 '\9438' -> 0x24c4 '\9439' -> 0x24c5 '\9440' -> 0x24c6 '\9441' -> 0x24c7 '\9442' -> 0x24c8 '\9443' -> 0x24c9 '\9444' -> 0x24ca '\9445' -> 0x24cb '\9446' -> 0x24cc '\9447' -> 0x24cd '\9448' -> 0x24ce '\9449' -> 0x24cf '\11312' -> 0x2c00 '\11313' -> 0x2c01 '\11314' -> 0x2c02 '\11315' -> 0x2c03 '\11316' -> 0x2c04 '\11317' -> 0x2c05 '\11318' -> 0x2c06 '\11319' -> 0x2c07 '\11320' -> 0x2c08 '\11321' -> 0x2c09 '\11322' -> 0x2c0a '\11323' -> 0x2c0b '\11324' -> 0x2c0c '\11325' -> 0x2c0d '\11326' -> 0x2c0e '\11327' -> 0x2c0f '\11328' -> 0x2c10 '\11329' -> 0x2c11 '\11330' -> 0x2c12 '\11331' -> 0x2c13 '\11332' -> 0x2c14 '\11333' -> 0x2c15 '\11334' -> 0x2c16 '\11335' -> 0x2c17 '\11336' -> 0x2c18 '\11337' -> 0x2c19 '\11338' -> 0x2c1a '\11339' -> 0x2c1b '\11340' -> 0x2c1c '\11341' -> 0x2c1d '\11342' -> 0x2c1e '\11343' -> 0x2c1f '\11344' -> 0x2c20 '\11345' -> 0x2c21 '\11346' -> 0x2c22 '\11347' -> 0x2c23 '\11348' -> 0x2c24 '\11349' -> 0x2c25 '\11350' -> 0x2c26 '\11351' -> 0x2c27 '\11352' -> 0x2c28 '\11353' -> 0x2c29 '\11354' -> 0x2c2a '\11355' -> 0x2c2b '\11356' -> 0x2c2c '\11357' -> 0x2c2d '\11358' -> 0x2c2e '\11359' -> 0x2c2f '\11361' -> 0x2c60 '\11365' -> 0x23a '\11366' -> 0x23e '\11368' -> 0x2c67 '\11370' -> 0x2c69 '\11372' -> 0x2c6b '\11379' -> 0x2c72 '\11382' -> 0x2c75 '\11393' -> 0x2c80 '\11395' -> 0x2c82 '\11397' -> 0x2c84 '\11399' -> 0x2c86 '\11401' -> 0x2c88 '\11403' -> 0x2c8a '\11405' -> 0x2c8c '\11407' -> 0x2c8e '\11409' -> 0x2c90 '\11411' -> 0x2c92 '\11413' -> 0x2c94 '\11415' -> 0x2c96 '\11417' -> 0x2c98 '\11419' -> 0x2c9a '\11421' -> 0x2c9c '\11423' -> 0x2c9e '\11425' -> 0x2ca0 '\11427' -> 0x2ca2 '\11429' -> 0x2ca4 '\11431' -> 0x2ca6 '\11433' -> 0x2ca8 '\11435' -> 0x2caa '\11437' -> 0x2cac '\11439' -> 0x2cae '\11441' -> 0x2cb0 '\11443' -> 0x2cb2 '\11445' -> 0x2cb4 '\11447' -> 0x2cb6 '\11449' -> 0x2cb8 '\11451' -> 0x2cba '\11453' -> 0x2cbc '\11455' -> 0x2cbe '\11457' -> 0x2cc0 '\11459' -> 0x2cc2 '\11461' -> 0x2cc4 '\11463' -> 0x2cc6 '\11465' -> 0x2cc8 '\11467' -> 0x2cca '\11469' -> 0x2ccc '\11471' -> 0x2cce '\11473' -> 0x2cd0 '\11475' -> 0x2cd2 '\11477' -> 0x2cd4 '\11479' -> 0x2cd6 '\11481' -> 0x2cd8 '\11483' -> 0x2cda '\11485' -> 0x2cdc '\11487' -> 0x2cde '\11489' -> 0x2ce0 '\11491' -> 0x2ce2 '\11500' -> 0x2ceb '\11502' -> 0x2ced '\11507' -> 0x2cf2 '\11520' -> 0x10a0 '\11521' -> 0x10a1 '\11522' -> 0x10a2 '\11523' -> 0x10a3 '\11524' -> 0x10a4 '\11525' -> 0x10a5 '\11526' -> 0x10a6 '\11527' -> 0x10a7 '\11528' -> 0x10a8 '\11529' -> 0x10a9 '\11530' -> 0x10aa '\11531' -> 0x10ab '\11532' -> 0x10ac '\11533' -> 0x10ad '\11534' -> 0x10ae '\11535' -> 0x10af '\11536' -> 0x10b0 '\11537' -> 0x10b1 '\11538' -> 0x10b2 '\11539' -> 0x10b3 '\11540' -> 0x10b4 '\11541' -> 0x10b5 '\11542' -> 0x10b6 '\11543' -> 0x10b7 '\11544' -> 0x10b8 '\11545' -> 0x10b9 '\11546' -> 0x10ba '\11547' -> 0x10bb '\11548' -> 0x10bc '\11549' -> 0x10bd '\11550' -> 0x10be '\11551' -> 0x10bf '\11552' -> 0x10c0 '\11553' -> 0x10c1 '\11554' -> 0x10c2 '\11555' -> 0x10c3 '\11556' -> 0x10c4 '\11557' -> 0x10c5 '\11559' -> 0x10c7 '\11565' -> 0x10cd '\42561' -> 0xa640 '\42563' -> 0xa642 '\42565' -> 0xa644 '\42567' -> 0xa646 '\42569' -> 0xa648 '\42571' -> 0xa64a '\42573' -> 0xa64c '\42575' -> 0xa64e '\42577' -> 0xa650 '\42579' -> 0xa652 '\42581' -> 0xa654 '\42583' -> 0xa656 '\42585' -> 0xa658 '\42587' -> 0xa65a '\42589' -> 0xa65c '\42591' -> 0xa65e '\42593' -> 0xa660 '\42595' -> 0xa662 '\42597' -> 0xa664 '\42599' -> 0xa666 '\42601' -> 0xa668 '\42603' -> 0xa66a '\42605' -> 0xa66c '\42625' -> 0xa680 '\42627' -> 0xa682 '\42629' -> 0xa684 '\42631' -> 0xa686 '\42633' -> 0xa688 '\42635' -> 0xa68a '\42637' -> 0xa68c '\42639' -> 0xa68e '\42641' -> 0xa690 '\42643' -> 0xa692 '\42645' -> 0xa694 '\42647' -> 0xa696 '\42649' -> 0xa698 '\42651' -> 0xa69a '\42787' -> 0xa722 '\42789' -> 0xa724 '\42791' -> 0xa726 '\42793' -> 0xa728 '\42795' -> 0xa72a '\42797' -> 0xa72c '\42799' -> 0xa72e '\42803' -> 0xa732 '\42805' -> 0xa734 '\42807' -> 0xa736 '\42809' -> 0xa738 '\42811' -> 0xa73a '\42813' -> 0xa73c '\42815' -> 0xa73e '\42817' -> 0xa740 '\42819' -> 0xa742 '\42821' -> 0xa744 '\42823' -> 0xa746 '\42825' -> 0xa748 '\42827' -> 0xa74a '\42829' -> 0xa74c '\42831' -> 0xa74e '\42833' -> 0xa750 '\42835' -> 0xa752 '\42837' -> 0xa754 '\42839' -> 0xa756 '\42841' -> 0xa758 '\42843' -> 0xa75a '\42845' -> 0xa75c '\42847' -> 0xa75e '\42849' -> 0xa760 '\42851' -> 0xa762 '\42853' -> 0xa764 '\42855' -> 0xa766 '\42857' -> 0xa768 '\42859' -> 0xa76a '\42861' -> 0xa76c '\42863' -> 0xa76e '\42874' -> 0xa779 '\42876' -> 0xa77b '\42879' -> 0xa77e '\42881' -> 0xa780 '\42883' -> 0xa782 '\42885' -> 0xa784 '\42887' -> 0xa786 '\42892' -> 0xa78b '\42897' -> 0xa790 '\42899' -> 0xa792 '\42900' -> 0xa7c4 '\42903' -> 0xa796 '\42905' -> 0xa798 '\42907' -> 0xa79a '\42909' -> 0xa79c '\42911' -> 0xa79e '\42913' -> 0xa7a0 '\42915' -> 0xa7a2 '\42917' -> 0xa7a4 '\42919' -> 0xa7a6 '\42921' -> 0xa7a8 '\42933' -> 0xa7b4 '\42935' -> 0xa7b6 '\42937' -> 0xa7b8 '\42939' -> 0xa7ba '\42941' -> 0xa7bc '\42943' -> 0xa7be '\42945' -> 0xa7c0 '\42947' -> 0xa7c2 '\42952' -> 0xa7c7 '\42954' -> 0xa7c9 '\42961' -> 0xa7d0 '\42967' -> 0xa7d6 '\42969' -> 0xa7d8 '\42998' -> 0xa7f5 '\43859' -> 0xa7b3 '\43888' -> 0x13a0 '\43889' -> 0x13a1 '\43890' -> 0x13a2 '\43891' -> 0x13a3 '\43892' -> 0x13a4 '\43893' -> 0x13a5 '\43894' -> 0x13a6 '\43895' -> 0x13a7 '\43896' -> 0x13a8 '\43897' -> 0x13a9 '\43898' -> 0x13aa '\43899' -> 0x13ab '\43900' -> 0x13ac '\43901' -> 0x13ad '\43902' -> 0x13ae '\43903' -> 0x13af '\43904' -> 0x13b0 '\43905' -> 0x13b1 '\43906' -> 0x13b2 '\43907' -> 0x13b3 '\43908' -> 0x13b4 '\43909' -> 0x13b5 '\43910' -> 0x13b6 '\43911' -> 0x13b7 '\43912' -> 0x13b8 '\43913' -> 0x13b9 '\43914' -> 0x13ba '\43915' -> 0x13bb '\43916' -> 0x13bc '\43917' -> 0x13bd '\43918' -> 0x13be '\43919' -> 0x13bf '\43920' -> 0x13c0 '\43921' -> 0x13c1 '\43922' -> 0x13c2 '\43923' -> 0x13c3 '\43924' -> 0x13c4 '\43925' -> 0x13c5 '\43926' -> 0x13c6 '\43927' -> 0x13c7 '\43928' -> 0x13c8 '\43929' -> 0x13c9 '\43930' -> 0x13ca '\43931' -> 0x13cb '\43932' -> 0x13cc '\43933' -> 0x13cd '\43934' -> 0x13ce '\43935' -> 0x13cf '\43936' -> 0x13d0 '\43937' -> 0x13d1 '\43938' -> 0x13d2 '\43939' -> 0x13d3 '\43940' -> 0x13d4 '\43941' -> 0x13d5 '\43942' -> 0x13d6 '\43943' -> 0x13d7 '\43944' -> 0x13d8 '\43945' -> 0x13d9 '\43946' -> 0x13da '\43947' -> 0x13db '\43948' -> 0x13dc '\43949' -> 0x13dd '\43950' -> 0x13de '\43951' -> 0x13df '\43952' -> 0x13e0 '\43953' -> 0x13e1 '\43954' -> 0x13e2 '\43955' -> 0x13e3 '\43956' -> 0x13e4 '\43957' -> 0x13e5 '\43958' -> 0x13e6 '\43959' -> 0x13e7 '\43960' -> 0x13e8 '\43961' -> 0x13e9 '\43962' -> 0x13ea '\43963' -> 0x13eb '\43964' -> 0x13ec '\43965' -> 0x13ed '\43966' -> 0x13ee '\43967' -> 0x13ef '\64256' -> 0xcc00046 '\64257' -> 0xd200046 '\64258' -> 0xd800046 '\64259' -> 0x1a4000cc00046 '\64260' -> 0x1b0000cc00046 '\64261' -> 0xe800053 '\64262' -> 0xe800053 '\64275' -> 0xaec00544 '\64276' -> 0xaca00544 '\64277' -> 0xad600544 '\64278' -> 0xaec0054e '\64279' -> 0xada00544 '\65345' -> 0xff21 '\65346' -> 0xff22 '\65347' -> 0xff23 '\65348' -> 0xff24 '\65349' -> 0xff25 '\65350' -> 0xff26 '\65351' -> 0xff27 '\65352' -> 0xff28 '\65353' -> 0xff29 '\65354' -> 0xff2a '\65355' -> 0xff2b '\65356' -> 0xff2c '\65357' -> 0xff2d '\65358' -> 0xff2e '\65359' -> 0xff2f '\65360' -> 0xff30 '\65361' -> 0xff31 '\65362' -> 0xff32 '\65363' -> 0xff33 '\65364' -> 0xff34 '\65365' -> 0xff35 '\65366' -> 0xff36 '\65367' -> 0xff37 '\65368' -> 0xff38 '\65369' -> 0xff39 '\65370' -> 0xff3a '\66600' -> 0x10400 '\66601' -> 0x10401 '\66602' -> 0x10402 '\66603' -> 0x10403 '\66604' -> 0x10404 '\66605' -> 0x10405 '\66606' -> 0x10406 '\66607' -> 0x10407 '\66608' -> 0x10408 '\66609' -> 0x10409 '\66610' -> 0x1040a '\66611' -> 0x1040b '\66612' -> 0x1040c '\66613' -> 0x1040d '\66614' -> 0x1040e '\66615' -> 0x1040f '\66616' -> 0x10410 '\66617' -> 0x10411 '\66618' -> 0x10412 '\66619' -> 0x10413 '\66620' -> 0x10414 '\66621' -> 0x10415 '\66622' -> 0x10416 '\66623' -> 0x10417 '\66624' -> 0x10418 '\66625' -> 0x10419 '\66626' -> 0x1041a '\66627' -> 0x1041b '\66628' -> 0x1041c '\66629' -> 0x1041d '\66630' -> 0x1041e '\66631' -> 0x1041f '\66632' -> 0x10420 '\66633' -> 0x10421 '\66634' -> 0x10422 '\66635' -> 0x10423 '\66636' -> 0x10424 '\66637' -> 0x10425 '\66638' -> 0x10426 '\66639' -> 0x10427 '\66776' -> 0x104b0 '\66777' -> 0x104b1 '\66778' -> 0x104b2 '\66779' -> 0x104b3 '\66780' -> 0x104b4 '\66781' -> 0x104b5 '\66782' -> 0x104b6 '\66783' -> 0x104b7 '\66784' -> 0x104b8 '\66785' -> 0x104b9 '\66786' -> 0x104ba '\66787' -> 0x104bb '\66788' -> 0x104bc '\66789' -> 0x104bd '\66790' -> 0x104be '\66791' -> 0x104bf '\66792' -> 0x104c0 '\66793' -> 0x104c1 '\66794' -> 0x104c2 '\66795' -> 0x104c3 '\66796' -> 0x104c4 '\66797' -> 0x104c5 '\66798' -> 0x104c6 '\66799' -> 0x104c7 '\66800' -> 0x104c8 '\66801' -> 0x104c9 '\66802' -> 0x104ca '\66803' -> 0x104cb '\66804' -> 0x104cc '\66805' -> 0x104cd '\66806' -> 0x104ce '\66807' -> 0x104cf '\66808' -> 0x104d0 '\66809' -> 0x104d1 '\66810' -> 0x104d2 '\66811' -> 0x104d3 '\66967' -> 0x10570 '\66968' -> 0x10571 '\66969' -> 0x10572 '\66970' -> 0x10573 '\66971' -> 0x10574 '\66972' -> 0x10575 '\66973' -> 0x10576 '\66974' -> 0x10577 '\66975' -> 0x10578 '\66976' -> 0x10579 '\66977' -> 0x1057a '\66979' -> 0x1057c '\66980' -> 0x1057d '\66981' -> 0x1057e '\66982' -> 0x1057f '\66983' -> 0x10580 '\66984' -> 0x10581 '\66985' -> 0x10582 '\66986' -> 0x10583 '\66987' -> 0x10584 '\66988' -> 0x10585 '\66989' -> 0x10586 '\66990' -> 0x10587 '\66991' -> 0x10588 '\66992' -> 0x10589 '\66993' -> 0x1058a '\66995' -> 0x1058c '\66996' -> 0x1058d '\66997' -> 0x1058e '\66998' -> 0x1058f '\66999' -> 0x10590 '\67000' -> 0x10591 '\67001' -> 0x10592 '\67003' -> 0x10594 '\67004' -> 0x10595 '\68800' -> 0x10c80 '\68801' -> 0x10c81 '\68802' -> 0x10c82 '\68803' -> 0x10c83 '\68804' -> 0x10c84 '\68805' -> 0x10c85 '\68806' -> 0x10c86 '\68807' -> 0x10c87 '\68808' -> 0x10c88 '\68809' -> 0x10c89 '\68810' -> 0x10c8a '\68811' -> 0x10c8b '\68812' -> 0x10c8c '\68813' -> 0x10c8d '\68814' -> 0x10c8e '\68815' -> 0x10c8f '\68816' -> 0x10c90 '\68817' -> 0x10c91 '\68818' -> 0x10c92 '\68819' -> 0x10c93 '\68820' -> 0x10c94 '\68821' -> 0x10c95 '\68822' -> 0x10c96 '\68823' -> 0x10c97 '\68824' -> 0x10c98 '\68825' -> 0x10c99 '\68826' -> 0x10c9a '\68827' -> 0x10c9b '\68828' -> 0x10c9c '\68829' -> 0x10c9d '\68830' -> 0x10c9e '\68831' -> 0x10c9f '\68832' -> 0x10ca0 '\68833' -> 0x10ca1 '\68834' -> 0x10ca2 '\68835' -> 0x10ca3 '\68836' -> 0x10ca4 '\68837' -> 0x10ca5 '\68838' -> 0x10ca6 '\68839' -> 0x10ca7 '\68840' -> 0x10ca8 '\68841' -> 0x10ca9 '\68842' -> 0x10caa '\68843' -> 0x10cab '\68844' -> 0x10cac '\68845' -> 0x10cad '\68846' -> 0x10cae '\68847' -> 0x10caf '\68848' -> 0x10cb0 '\68849' -> 0x10cb1 '\68850' -> 0x10cb2 '\71872' -> 0x118a0 '\71873' -> 0x118a1 '\71874' -> 0x118a2 '\71875' -> 0x118a3 '\71876' -> 0x118a4 '\71877' -> 0x118a5 '\71878' -> 0x118a6 '\71879' -> 0x118a7 '\71880' -> 0x118a8 '\71881' -> 0x118a9 '\71882' -> 0x118aa '\71883' -> 0x118ab '\71884' -> 0x118ac '\71885' -> 0x118ad '\71886' -> 0x118ae '\71887' -> 0x118af '\71888' -> 0x118b0 '\71889' -> 0x118b1 '\71890' -> 0x118b2 '\71891' -> 0x118b3 '\71892' -> 0x118b4 '\71893' -> 0x118b5 '\71894' -> 0x118b6 '\71895' -> 0x118b7 '\71896' -> 0x118b8 '\71897' -> 0x118b9 '\71898' -> 0x118ba '\71899' -> 0x118bb '\71900' -> 0x118bc '\71901' -> 0x118bd '\71902' -> 0x118be '\71903' -> 0x118bf '\93792' -> 0x16e40 '\93793' -> 0x16e41 '\93794' -> 0x16e42 '\93795' -> 0x16e43 '\93796' -> 0x16e44 '\93797' -> 0x16e45 '\93798' -> 0x16e46 '\93799' -> 0x16e47 '\93800' -> 0x16e48 '\93801' -> 0x16e49 '\93802' -> 0x16e4a '\93803' -> 0x16e4b '\93804' -> 0x16e4c '\93805' -> 0x16e4d '\93806' -> 0x16e4e '\93807' -> 0x16e4f '\93808' -> 0x16e50 '\93809' -> 0x16e51 '\93810' -> 0x16e52 '\93811' -> 0x16e53 '\93812' -> 0x16e54 '\93813' -> 0x16e55 '\93814' -> 0x16e56 '\93815' -> 0x16e57 '\93816' -> 0x16e58 '\93817' -> 0x16e59 '\93818' -> 0x16e5a '\93819' -> 0x16e5b '\93820' -> 0x16e5c '\93821' -> 0x16e5d '\93822' -> 0x16e5e '\93823' -> 0x16e5f '\125218' -> 0x1e900 '\125219' -> 0x1e901 '\125220' -> 0x1e902 '\125221' -> 0x1e903 '\125222' -> 0x1e904 '\125223' -> 0x1e905 '\125224' -> 0x1e906 '\125225' -> 0x1e907 '\125226' -> 0x1e908 '\125227' -> 0x1e909 '\125228' -> 0x1e90a '\125229' -> 0x1e90b '\125230' -> 0x1e90c '\125231' -> 0x1e90d '\125232' -> 0x1e90e '\125233' -> 0x1e90f '\125234' -> 0x1e910 '\125235' -> 0x1e911 '\125236' -> 0x1e912 '\125237' -> 0x1e913 '\125238' -> 0x1e914 '\125239' -> 0x1e915 '\125240' -> 0x1e916 '\125241' -> 0x1e917 '\125242' -> 0x1e918 '\125243' -> 0x1e919 '\125244' -> 0x1e91a '\125245' -> 0x1e91b '\125246' -> 0x1e91c '\125247' -> 0x1e91d '\125248' -> 0x1e91e '\125249' -> 0x1e91f '\125250' -> 0x1e920 '\125251' -> 0x1e921 _ -> 0 unicode-data-0.6.0/lib/Unicode/Internal/Char/SpecialCasing/UpperCaseMapping.hs0000644000000000000000000007553307346545000025311 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.SpecialCasing.UpperCaseMapping -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.SpecialCasing.UpperCaseMapping (toSpecialUpperCase) where import Data.Int (Int64) {-# NOINLINE toSpecialUpperCase #-} toSpecialUpperCase :: Char -> Int64 toSpecialUpperCase = \case 'a' -> 0x41 'b' -> 0x42 'c' -> 0x43 'd' -> 0x44 'e' -> 0x45 'f' -> 0x46 'g' -> 0x47 'h' -> 0x48 'i' -> 0x49 'j' -> 0x4a 'k' -> 0x4b 'l' -> 0x4c 'm' -> 0x4d 'n' -> 0x4e 'o' -> 0x4f 'p' -> 0x50 'q' -> 0x51 'r' -> 0x52 's' -> 0x53 't' -> 0x54 'u' -> 0x55 'v' -> 0x56 'w' -> 0x57 'x' -> 0x58 'y' -> 0x59 'z' -> 0x5a '\181' -> 0x39c '\223' -> 0xa600053 '\224' -> 0xc0 '\225' -> 0xc1 '\226' -> 0xc2 '\227' -> 0xc3 '\228' -> 0xc4 '\229' -> 0xc5 '\230' -> 0xc6 '\231' -> 0xc7 '\232' -> 0xc8 '\233' -> 0xc9 '\234' -> 0xca '\235' -> 0xcb '\236' -> 0xcc '\237' -> 0xcd '\238' -> 0xce '\239' -> 0xcf '\240' -> 0xd0 '\241' -> 0xd1 '\242' -> 0xd2 '\243' -> 0xd3 '\244' -> 0xd4 '\245' -> 0xd5 '\246' -> 0xd6 '\248' -> 0xd8 '\249' -> 0xd9 '\250' -> 0xda '\251' -> 0xdb '\252' -> 0xdc '\253' -> 0xdd '\254' -> 0xde '\255' -> 0x178 '\257' -> 0x100 '\259' -> 0x102 '\261' -> 0x104 '\263' -> 0x106 '\265' -> 0x108 '\267' -> 0x10a '\269' -> 0x10c '\271' -> 0x10e '\273' -> 0x110 '\275' -> 0x112 '\277' -> 0x114 '\279' -> 0x116 '\281' -> 0x118 '\283' -> 0x11a '\285' -> 0x11c '\287' -> 0x11e '\289' -> 0x120 '\291' -> 0x122 '\293' -> 0x124 '\295' -> 0x126 '\297' -> 0x128 '\299' -> 0x12a '\301' -> 0x12c '\303' -> 0x12e '\304' -> 0x130 '\305' -> 0x49 '\307' -> 0x132 '\309' -> 0x134 '\311' -> 0x136 '\314' -> 0x139 '\316' -> 0x13b '\318' -> 0x13d '\320' -> 0x13f '\322' -> 0x141 '\324' -> 0x143 '\326' -> 0x145 '\328' -> 0x147 '\329' -> 0x9c002bc '\331' -> 0x14a '\333' -> 0x14c '\335' -> 0x14e '\337' -> 0x150 '\339' -> 0x152 '\341' -> 0x154 '\343' -> 0x156 '\345' -> 0x158 '\347' -> 0x15a '\349' -> 0x15c '\351' -> 0x15e '\353' -> 0x160 '\355' -> 0x162 '\357' -> 0x164 '\359' -> 0x166 '\361' -> 0x168 '\363' -> 0x16a '\365' -> 0x16c '\367' -> 0x16e '\369' -> 0x170 '\371' -> 0x172 '\373' -> 0x174 '\375' -> 0x176 '\378' -> 0x179 '\380' -> 0x17b '\382' -> 0x17d '\383' -> 0x53 '\384' -> 0x243 '\387' -> 0x182 '\389' -> 0x184 '\392' -> 0x187 '\396' -> 0x18b '\402' -> 0x191 '\405' -> 0x1f6 '\409' -> 0x198 '\410' -> 0x23d '\414' -> 0x220 '\417' -> 0x1a0 '\419' -> 0x1a2 '\421' -> 0x1a4 '\424' -> 0x1a7 '\429' -> 0x1ac '\432' -> 0x1af '\436' -> 0x1b3 '\438' -> 0x1b5 '\441' -> 0x1b8 '\445' -> 0x1bc '\447' -> 0x1f7 '\453' -> 0x1c4 '\454' -> 0x1c4 '\456' -> 0x1c7 '\457' -> 0x1c7 '\459' -> 0x1ca '\460' -> 0x1ca '\462' -> 0x1cd '\464' -> 0x1cf '\466' -> 0x1d1 '\468' -> 0x1d3 '\470' -> 0x1d5 '\472' -> 0x1d7 '\474' -> 0x1d9 '\476' -> 0x1db '\477' -> 0x18e '\479' -> 0x1de '\481' -> 0x1e0 '\483' -> 0x1e2 '\485' -> 0x1e4 '\487' -> 0x1e6 '\489' -> 0x1e8 '\491' -> 0x1ea '\493' -> 0x1ec '\495' -> 0x1ee '\496' -> 0x6180004a '\498' -> 0x1f1 '\499' -> 0x1f1 '\501' -> 0x1f4 '\505' -> 0x1f8 '\507' -> 0x1fa '\509' -> 0x1fc '\511' -> 0x1fe '\513' -> 0x200 '\515' -> 0x202 '\517' -> 0x204 '\519' -> 0x206 '\521' -> 0x208 '\523' -> 0x20a '\525' -> 0x20c '\527' -> 0x20e '\529' -> 0x210 '\531' -> 0x212 '\533' -> 0x214 '\535' -> 0x216 '\537' -> 0x218 '\539' -> 0x21a '\541' -> 0x21c '\543' -> 0x21e '\547' -> 0x222 '\549' -> 0x224 '\551' -> 0x226 '\553' -> 0x228 '\555' -> 0x22a '\557' -> 0x22c '\559' -> 0x22e '\561' -> 0x230 '\563' -> 0x232 '\572' -> 0x23b '\575' -> 0x2c7e '\576' -> 0x2c7f '\578' -> 0x241 '\583' -> 0x246 '\585' -> 0x248 '\587' -> 0x24a '\589' -> 0x24c '\591' -> 0x24e '\592' -> 0x2c6f '\593' -> 0x2c6d '\594' -> 0x2c70 '\595' -> 0x181 '\596' -> 0x186 '\598' -> 0x189 '\599' -> 0x18a '\601' -> 0x18f '\603' -> 0x190 '\604' -> 0xa7ab '\608' -> 0x193 '\609' -> 0xa7ac '\611' -> 0x194 '\613' -> 0xa78d '\614' -> 0xa7aa '\616' -> 0x197 '\617' -> 0x196 '\618' -> 0xa7ae '\619' -> 0x2c62 '\620' -> 0xa7ad '\623' -> 0x19c '\625' -> 0x2c6e '\626' -> 0x19d '\629' -> 0x19f '\637' -> 0x2c64 '\640' -> 0x1a6 '\642' -> 0xa7c5 '\643' -> 0x1a9 '\647' -> 0xa7b1 '\648' -> 0x1ae '\649' -> 0x244 '\650' -> 0x1b1 '\651' -> 0x1b2 '\652' -> 0x245 '\658' -> 0x1b7 '\669' -> 0xa7b2 '\670' -> 0xa7b0 '\837' -> 0x399 '\881' -> 0x370 '\883' -> 0x372 '\887' -> 0x376 '\891' -> 0x3fd '\892' -> 0x3fe '\893' -> 0x3ff '\912' -> 0xc040061000399 '\940' -> 0x386 '\941' -> 0x388 '\942' -> 0x389 '\943' -> 0x38a '\944' -> 0xc0400610003a5 '\945' -> 0x391 '\946' -> 0x392 '\947' -> 0x393 '\948' -> 0x394 '\949' -> 0x395 '\950' -> 0x396 '\951' -> 0x397 '\952' -> 0x398 '\953' -> 0x399 '\954' -> 0x39a '\955' -> 0x39b '\956' -> 0x39c '\957' -> 0x39d '\958' -> 0x39e '\959' -> 0x39f '\960' -> 0x3a0 '\961' -> 0x3a1 '\962' -> 0x3a3 '\963' -> 0x3a3 '\964' -> 0x3a4 '\965' -> 0x3a5 '\966' -> 0x3a6 '\967' -> 0x3a7 '\968' -> 0x3a8 '\969' -> 0x3a9 '\970' -> 0x3aa '\971' -> 0x3ab '\972' -> 0x38c '\973' -> 0x38e '\974' -> 0x38f '\976' -> 0x392 '\977' -> 0x398 '\981' -> 0x3a6 '\982' -> 0x3a0 '\983' -> 0x3cf '\985' -> 0x3d8 '\987' -> 0x3da '\989' -> 0x3dc '\991' -> 0x3de '\993' -> 0x3e0 '\995' -> 0x3e2 '\997' -> 0x3e4 '\999' -> 0x3e6 '\1001' -> 0x3e8 '\1003' -> 0x3ea '\1005' -> 0x3ec '\1007' -> 0x3ee '\1008' -> 0x39a '\1009' -> 0x3a1 '\1010' -> 0x3f9 '\1011' -> 0x37f '\1013' -> 0x395 '\1016' -> 0x3f7 '\1019' -> 0x3fa '\1072' -> 0x410 '\1073' -> 0x411 '\1074' -> 0x412 '\1075' -> 0x413 '\1076' -> 0x414 '\1077' -> 0x415 '\1078' -> 0x416 '\1079' -> 0x417 '\1080' -> 0x418 '\1081' -> 0x419 '\1082' -> 0x41a '\1083' -> 0x41b '\1084' -> 0x41c '\1085' -> 0x41d '\1086' -> 0x41e '\1087' -> 0x41f '\1088' -> 0x420 '\1089' -> 0x421 '\1090' -> 0x422 '\1091' -> 0x423 '\1092' -> 0x424 '\1093' -> 0x425 '\1094' -> 0x426 '\1095' -> 0x427 '\1096' -> 0x428 '\1097' -> 0x429 '\1098' -> 0x42a '\1099' -> 0x42b '\1100' -> 0x42c '\1101' -> 0x42d '\1102' -> 0x42e '\1103' -> 0x42f '\1104' -> 0x400 '\1105' -> 0x401 '\1106' -> 0x402 '\1107' -> 0x403 '\1108' -> 0x404 '\1109' -> 0x405 '\1110' -> 0x406 '\1111' -> 0x407 '\1112' -> 0x408 '\1113' -> 0x409 '\1114' -> 0x40a '\1115' -> 0x40b '\1116' -> 0x40c '\1117' -> 0x40d '\1118' -> 0x40e '\1119' -> 0x40f '\1121' -> 0x460 '\1123' -> 0x462 '\1125' -> 0x464 '\1127' -> 0x466 '\1129' -> 0x468 '\1131' -> 0x46a '\1133' -> 0x46c '\1135' -> 0x46e '\1137' -> 0x470 '\1139' -> 0x472 '\1141' -> 0x474 '\1143' -> 0x476 '\1145' -> 0x478 '\1147' -> 0x47a '\1149' -> 0x47c '\1151' -> 0x47e '\1153' -> 0x480 '\1163' -> 0x48a '\1165' -> 0x48c '\1167' -> 0x48e '\1169' -> 0x490 '\1171' -> 0x492 '\1173' -> 0x494 '\1175' -> 0x496 '\1177' -> 0x498 '\1179' -> 0x49a '\1181' -> 0x49c '\1183' -> 0x49e '\1185' -> 0x4a0 '\1187' -> 0x4a2 '\1189' -> 0x4a4 '\1191' -> 0x4a6 '\1193' -> 0x4a8 '\1195' -> 0x4aa '\1197' -> 0x4ac '\1199' -> 0x4ae '\1201' -> 0x4b0 '\1203' -> 0x4b2 '\1205' -> 0x4b4 '\1207' -> 0x4b6 '\1209' -> 0x4b8 '\1211' -> 0x4ba '\1213' -> 0x4bc '\1215' -> 0x4be '\1218' -> 0x4c1 '\1220' -> 0x4c3 '\1222' -> 0x4c5 '\1224' -> 0x4c7 '\1226' -> 0x4c9 '\1228' -> 0x4cb '\1230' -> 0x4cd '\1231' -> 0x4c0 '\1233' -> 0x4d0 '\1235' -> 0x4d2 '\1237' -> 0x4d4 '\1239' -> 0x4d6 '\1241' -> 0x4d8 '\1243' -> 0x4da '\1245' -> 0x4dc '\1247' -> 0x4de '\1249' -> 0x4e0 '\1251' -> 0x4e2 '\1253' -> 0x4e4 '\1255' -> 0x4e6 '\1257' -> 0x4e8 '\1259' -> 0x4ea '\1261' -> 0x4ec '\1263' -> 0x4ee '\1265' -> 0x4f0 '\1267' -> 0x4f2 '\1269' -> 0x4f4 '\1271' -> 0x4f6 '\1273' -> 0x4f8 '\1275' -> 0x4fa '\1277' -> 0x4fc '\1279' -> 0x4fe '\1281' -> 0x500 '\1283' -> 0x502 '\1285' -> 0x504 '\1287' -> 0x506 '\1289' -> 0x508 '\1291' -> 0x50a '\1293' -> 0x50c '\1295' -> 0x50e '\1297' -> 0x510 '\1299' -> 0x512 '\1301' -> 0x514 '\1303' -> 0x516 '\1305' -> 0x518 '\1307' -> 0x51a '\1309' -> 0x51c '\1311' -> 0x51e '\1313' -> 0x520 '\1315' -> 0x522 '\1317' -> 0x524 '\1319' -> 0x526 '\1321' -> 0x528 '\1323' -> 0x52a '\1325' -> 0x52c '\1327' -> 0x52e '\1377' -> 0x531 '\1378' -> 0x532 '\1379' -> 0x533 '\1380' -> 0x534 '\1381' -> 0x535 '\1382' -> 0x536 '\1383' -> 0x537 '\1384' -> 0x538 '\1385' -> 0x539 '\1386' -> 0x53a '\1387' -> 0x53b '\1388' -> 0x53c '\1389' -> 0x53d '\1390' -> 0x53e '\1391' -> 0x53f '\1392' -> 0x540 '\1393' -> 0x541 '\1394' -> 0x542 '\1395' -> 0x543 '\1396' -> 0x544 '\1397' -> 0x545 '\1398' -> 0x546 '\1399' -> 0x547 '\1400' -> 0x548 '\1401' -> 0x549 '\1402' -> 0x54a '\1403' -> 0x54b '\1404' -> 0x54c '\1405' -> 0x54d '\1406' -> 0x54e '\1407' -> 0x54f '\1408' -> 0x550 '\1409' -> 0x551 '\1410' -> 0x552 '\1411' -> 0x553 '\1412' -> 0x554 '\1413' -> 0x555 '\1414' -> 0x556 '\1415' -> 0xaa400535 '\4304' -> 0x1c90 '\4305' -> 0x1c91 '\4306' -> 0x1c92 '\4307' -> 0x1c93 '\4308' -> 0x1c94 '\4309' -> 0x1c95 '\4310' -> 0x1c96 '\4311' -> 0x1c97 '\4312' -> 0x1c98 '\4313' -> 0x1c99 '\4314' -> 0x1c9a '\4315' -> 0x1c9b '\4316' -> 0x1c9c '\4317' -> 0x1c9d '\4318' -> 0x1c9e '\4319' -> 0x1c9f '\4320' -> 0x1ca0 '\4321' -> 0x1ca1 '\4322' -> 0x1ca2 '\4323' -> 0x1ca3 '\4324' -> 0x1ca4 '\4325' -> 0x1ca5 '\4326' -> 0x1ca6 '\4327' -> 0x1ca7 '\4328' -> 0x1ca8 '\4329' -> 0x1ca9 '\4330' -> 0x1caa '\4331' -> 0x1cab '\4332' -> 0x1cac '\4333' -> 0x1cad '\4334' -> 0x1cae '\4335' -> 0x1caf '\4336' -> 0x1cb0 '\4337' -> 0x1cb1 '\4338' -> 0x1cb2 '\4339' -> 0x1cb3 '\4340' -> 0x1cb4 '\4341' -> 0x1cb5 '\4342' -> 0x1cb6 '\4343' -> 0x1cb7 '\4344' -> 0x1cb8 '\4345' -> 0x1cb9 '\4346' -> 0x1cba '\4349' -> 0x1cbd '\4350' -> 0x1cbe '\4351' -> 0x1cbf '\5112' -> 0x13f0 '\5113' -> 0x13f1 '\5114' -> 0x13f2 '\5115' -> 0x13f3 '\5116' -> 0x13f4 '\5117' -> 0x13f5 '\7296' -> 0x412 '\7297' -> 0x414 '\7298' -> 0x41e '\7299' -> 0x421 '\7300' -> 0x422 '\7301' -> 0x422 '\7302' -> 0x42a '\7303' -> 0x462 '\7304' -> 0xa64a '\7545' -> 0xa77d '\7549' -> 0x2c63 '\7566' -> 0xa7c6 '\7681' -> 0x1e00 '\7683' -> 0x1e02 '\7685' -> 0x1e04 '\7687' -> 0x1e06 '\7689' -> 0x1e08 '\7691' -> 0x1e0a '\7693' -> 0x1e0c '\7695' -> 0x1e0e '\7697' -> 0x1e10 '\7699' -> 0x1e12 '\7701' -> 0x1e14 '\7703' -> 0x1e16 '\7705' -> 0x1e18 '\7707' -> 0x1e1a '\7709' -> 0x1e1c '\7711' -> 0x1e1e '\7713' -> 0x1e20 '\7715' -> 0x1e22 '\7717' -> 0x1e24 '\7719' -> 0x1e26 '\7721' -> 0x1e28 '\7723' -> 0x1e2a '\7725' -> 0x1e2c '\7727' -> 0x1e2e '\7729' -> 0x1e30 '\7731' -> 0x1e32 '\7733' -> 0x1e34 '\7735' -> 0x1e36 '\7737' -> 0x1e38 '\7739' -> 0x1e3a '\7741' -> 0x1e3c '\7743' -> 0x1e3e '\7745' -> 0x1e40 '\7747' -> 0x1e42 '\7749' -> 0x1e44 '\7751' -> 0x1e46 '\7753' -> 0x1e48 '\7755' -> 0x1e4a '\7757' -> 0x1e4c '\7759' -> 0x1e4e '\7761' -> 0x1e50 '\7763' -> 0x1e52 '\7765' -> 0x1e54 '\7767' -> 0x1e56 '\7769' -> 0x1e58 '\7771' -> 0x1e5a '\7773' -> 0x1e5c '\7775' -> 0x1e5e '\7777' -> 0x1e60 '\7779' -> 0x1e62 '\7781' -> 0x1e64 '\7783' -> 0x1e66 '\7785' -> 0x1e68 '\7787' -> 0x1e6a '\7789' -> 0x1e6c '\7791' -> 0x1e6e '\7793' -> 0x1e70 '\7795' -> 0x1e72 '\7797' -> 0x1e74 '\7799' -> 0x1e76 '\7801' -> 0x1e78 '\7803' -> 0x1e7a '\7805' -> 0x1e7c '\7807' -> 0x1e7e '\7809' -> 0x1e80 '\7811' -> 0x1e82 '\7813' -> 0x1e84 '\7815' -> 0x1e86 '\7817' -> 0x1e88 '\7819' -> 0x1e8a '\7821' -> 0x1e8c '\7823' -> 0x1e8e '\7825' -> 0x1e90 '\7827' -> 0x1e92 '\7829' -> 0x1e94 '\7830' -> 0x66200048 '\7831' -> 0x61000054 '\7832' -> 0x61400057 '\7833' -> 0x61400059 '\7834' -> 0x57c00041 '\7835' -> 0x1e60 '\7841' -> 0x1ea0 '\7843' -> 0x1ea2 '\7845' -> 0x1ea4 '\7847' -> 0x1ea6 '\7849' -> 0x1ea8 '\7851' -> 0x1eaa '\7853' -> 0x1eac '\7855' -> 0x1eae '\7857' -> 0x1eb0 '\7859' -> 0x1eb2 '\7861' -> 0x1eb4 '\7863' -> 0x1eb6 '\7865' -> 0x1eb8 '\7867' -> 0x1eba '\7869' -> 0x1ebc '\7871' -> 0x1ebe '\7873' -> 0x1ec0 '\7875' -> 0x1ec2 '\7877' -> 0x1ec4 '\7879' -> 0x1ec6 '\7881' -> 0x1ec8 '\7883' -> 0x1eca '\7885' -> 0x1ecc '\7887' -> 0x1ece '\7889' -> 0x1ed0 '\7891' -> 0x1ed2 '\7893' -> 0x1ed4 '\7895' -> 0x1ed6 '\7897' -> 0x1ed8 '\7899' -> 0x1eda '\7901' -> 0x1edc '\7903' -> 0x1ede '\7905' -> 0x1ee0 '\7907' -> 0x1ee2 '\7909' -> 0x1ee4 '\7911' -> 0x1ee6 '\7913' -> 0x1ee8 '\7915' -> 0x1eea '\7917' -> 0x1eec '\7919' -> 0x1eee '\7921' -> 0x1ef0 '\7923' -> 0x1ef2 '\7925' -> 0x1ef4 '\7927' -> 0x1ef6 '\7929' -> 0x1ef8 '\7931' -> 0x1efa '\7933' -> 0x1efc '\7935' -> 0x1efe '\7936' -> 0x1f08 '\7937' -> 0x1f09 '\7938' -> 0x1f0a '\7939' -> 0x1f0b '\7940' -> 0x1f0c '\7941' -> 0x1f0d '\7942' -> 0x1f0e '\7943' -> 0x1f0f '\7952' -> 0x1f18 '\7953' -> 0x1f19 '\7954' -> 0x1f1a '\7955' -> 0x1f1b '\7956' -> 0x1f1c '\7957' -> 0x1f1d '\7968' -> 0x1f28 '\7969' -> 0x1f29 '\7970' -> 0x1f2a '\7971' -> 0x1f2b '\7972' -> 0x1f2c '\7973' -> 0x1f2d '\7974' -> 0x1f2e '\7975' -> 0x1f2f '\7984' -> 0x1f38 '\7985' -> 0x1f39 '\7986' -> 0x1f3a '\7987' -> 0x1f3b '\7988' -> 0x1f3c '\7989' -> 0x1f3d '\7990' -> 0x1f3e '\7991' -> 0x1f3f '\8000' -> 0x1f48 '\8001' -> 0x1f49 '\8002' -> 0x1f4a '\8003' -> 0x1f4b '\8004' -> 0x1f4c '\8005' -> 0x1f4d '\8016' -> 0x626003a5 '\8017' -> 0x1f59 '\8018' -> 0xc0000626003a5 '\8019' -> 0x1f5b '\8020' -> 0xc0400626003a5 '\8021' -> 0x1f5d '\8022' -> 0xd0800626003a5 '\8023' -> 0x1f5f '\8032' -> 0x1f68 '\8033' -> 0x1f69 '\8034' -> 0x1f6a '\8035' -> 0x1f6b '\8036' -> 0x1f6c '\8037' -> 0x1f6d '\8038' -> 0x1f6e '\8039' -> 0x1f6f '\8048' -> 0x1fba '\8049' -> 0x1fbb '\8050' -> 0x1fc8 '\8051' -> 0x1fc9 '\8052' -> 0x1fca '\8053' -> 0x1fcb '\8054' -> 0x1fda '\8055' -> 0x1fdb '\8056' -> 0x1ff8 '\8057' -> 0x1ff9 '\8058' -> 0x1fea '\8059' -> 0x1feb '\8060' -> 0x1ffa '\8061' -> 0x1ffb '\8064' -> 0x73201f08 '\8065' -> 0x73201f09 '\8066' -> 0x73201f0a '\8067' -> 0x73201f0b '\8068' -> 0x73201f0c '\8069' -> 0x73201f0d '\8070' -> 0x73201f0e '\8071' -> 0x73201f0f '\8072' -> 0x73201f08 '\8073' -> 0x73201f09 '\8074' -> 0x73201f0a '\8075' -> 0x73201f0b '\8076' -> 0x73201f0c '\8077' -> 0x73201f0d '\8078' -> 0x73201f0e '\8079' -> 0x73201f0f '\8080' -> 0x73201f28 '\8081' -> 0x73201f29 '\8082' -> 0x73201f2a '\8083' -> 0x73201f2b '\8084' -> 0x73201f2c '\8085' -> 0x73201f2d '\8086' -> 0x73201f2e '\8087' -> 0x73201f2f '\8088' -> 0x73201f28 '\8089' -> 0x73201f29 '\8090' -> 0x73201f2a '\8091' -> 0x73201f2b '\8092' -> 0x73201f2c '\8093' -> 0x73201f2d '\8094' -> 0x73201f2e '\8095' -> 0x73201f2f '\8096' -> 0x73201f68 '\8097' -> 0x73201f69 '\8098' -> 0x73201f6a '\8099' -> 0x73201f6b '\8100' -> 0x73201f6c '\8101' -> 0x73201f6d '\8102' -> 0x73201f6e '\8103' -> 0x73201f6f '\8104' -> 0x73201f68 '\8105' -> 0x73201f69 '\8106' -> 0x73201f6a '\8107' -> 0x73201f6b '\8108' -> 0x73201f6c '\8109' -> 0x73201f6d '\8110' -> 0x73201f6e '\8111' -> 0x73201f6f '\8112' -> 0x1fb8 '\8113' -> 0x1fb9 '\8114' -> 0x73201fba '\8115' -> 0x73200391 '\8116' -> 0x73200386 '\8118' -> 0x68400391 '\8119' -> 0xe640068400391 '\8124' -> 0x73200391 '\8126' -> 0x399 '\8130' -> 0x73201fca '\8131' -> 0x73200397 '\8132' -> 0x73200389 '\8134' -> 0x68400397 '\8135' -> 0xe640068400397 '\8140' -> 0x73200397 '\8144' -> 0x1fd8 '\8145' -> 0x1fd9 '\8146' -> 0xc000061000399 '\8147' -> 0xc040061000399 '\8150' -> 0x68400399 '\8151' -> 0xd080061000399 '\8160' -> 0x1fe8 '\8161' -> 0x1fe9 '\8162' -> 0xc0000610003a5 '\8163' -> 0xc0400610003a5 '\8164' -> 0x626003a1 '\8165' -> 0x1fec '\8166' -> 0x684003a5 '\8167' -> 0xd0800610003a5 '\8178' -> 0x73201ffa '\8179' -> 0x732003a9 '\8180' -> 0x7320038f '\8182' -> 0x684003a9 '\8183' -> 0xe6400684003a9 '\8188' -> 0x732003a9 '\8526' -> 0x2132 '\8560' -> 0x2160 '\8561' -> 0x2161 '\8562' -> 0x2162 '\8563' -> 0x2163 '\8564' -> 0x2164 '\8565' -> 0x2165 '\8566' -> 0x2166 '\8567' -> 0x2167 '\8568' -> 0x2168 '\8569' -> 0x2169 '\8570' -> 0x216a '\8571' -> 0x216b '\8572' -> 0x216c '\8573' -> 0x216d '\8574' -> 0x216e '\8575' -> 0x216f '\8580' -> 0x2183 '\9424' -> 0x24b6 '\9425' -> 0x24b7 '\9426' -> 0x24b8 '\9427' -> 0x24b9 '\9428' -> 0x24ba '\9429' -> 0x24bb '\9430' -> 0x24bc '\9431' -> 0x24bd '\9432' -> 0x24be '\9433' -> 0x24bf '\9434' -> 0x24c0 '\9435' -> 0x24c1 '\9436' -> 0x24c2 '\9437' -> 0x24c3 '\9438' -> 0x24c4 '\9439' -> 0x24c5 '\9440' -> 0x24c6 '\9441' -> 0x24c7 '\9442' -> 0x24c8 '\9443' -> 0x24c9 '\9444' -> 0x24ca '\9445' -> 0x24cb '\9446' -> 0x24cc '\9447' -> 0x24cd '\9448' -> 0x24ce '\9449' -> 0x24cf '\11312' -> 0x2c00 '\11313' -> 0x2c01 '\11314' -> 0x2c02 '\11315' -> 0x2c03 '\11316' -> 0x2c04 '\11317' -> 0x2c05 '\11318' -> 0x2c06 '\11319' -> 0x2c07 '\11320' -> 0x2c08 '\11321' -> 0x2c09 '\11322' -> 0x2c0a '\11323' -> 0x2c0b '\11324' -> 0x2c0c '\11325' -> 0x2c0d '\11326' -> 0x2c0e '\11327' -> 0x2c0f '\11328' -> 0x2c10 '\11329' -> 0x2c11 '\11330' -> 0x2c12 '\11331' -> 0x2c13 '\11332' -> 0x2c14 '\11333' -> 0x2c15 '\11334' -> 0x2c16 '\11335' -> 0x2c17 '\11336' -> 0x2c18 '\11337' -> 0x2c19 '\11338' -> 0x2c1a '\11339' -> 0x2c1b '\11340' -> 0x2c1c '\11341' -> 0x2c1d '\11342' -> 0x2c1e '\11343' -> 0x2c1f '\11344' -> 0x2c20 '\11345' -> 0x2c21 '\11346' -> 0x2c22 '\11347' -> 0x2c23 '\11348' -> 0x2c24 '\11349' -> 0x2c25 '\11350' -> 0x2c26 '\11351' -> 0x2c27 '\11352' -> 0x2c28 '\11353' -> 0x2c29 '\11354' -> 0x2c2a '\11355' -> 0x2c2b '\11356' -> 0x2c2c '\11357' -> 0x2c2d '\11358' -> 0x2c2e '\11359' -> 0x2c2f '\11361' -> 0x2c60 '\11365' -> 0x23a '\11366' -> 0x23e '\11368' -> 0x2c67 '\11370' -> 0x2c69 '\11372' -> 0x2c6b '\11379' -> 0x2c72 '\11382' -> 0x2c75 '\11393' -> 0x2c80 '\11395' -> 0x2c82 '\11397' -> 0x2c84 '\11399' -> 0x2c86 '\11401' -> 0x2c88 '\11403' -> 0x2c8a '\11405' -> 0x2c8c '\11407' -> 0x2c8e '\11409' -> 0x2c90 '\11411' -> 0x2c92 '\11413' -> 0x2c94 '\11415' -> 0x2c96 '\11417' -> 0x2c98 '\11419' -> 0x2c9a '\11421' -> 0x2c9c '\11423' -> 0x2c9e '\11425' -> 0x2ca0 '\11427' -> 0x2ca2 '\11429' -> 0x2ca4 '\11431' -> 0x2ca6 '\11433' -> 0x2ca8 '\11435' -> 0x2caa '\11437' -> 0x2cac '\11439' -> 0x2cae '\11441' -> 0x2cb0 '\11443' -> 0x2cb2 '\11445' -> 0x2cb4 '\11447' -> 0x2cb6 '\11449' -> 0x2cb8 '\11451' -> 0x2cba '\11453' -> 0x2cbc '\11455' -> 0x2cbe '\11457' -> 0x2cc0 '\11459' -> 0x2cc2 '\11461' -> 0x2cc4 '\11463' -> 0x2cc6 '\11465' -> 0x2cc8 '\11467' -> 0x2cca '\11469' -> 0x2ccc '\11471' -> 0x2cce '\11473' -> 0x2cd0 '\11475' -> 0x2cd2 '\11477' -> 0x2cd4 '\11479' -> 0x2cd6 '\11481' -> 0x2cd8 '\11483' -> 0x2cda '\11485' -> 0x2cdc '\11487' -> 0x2cde '\11489' -> 0x2ce0 '\11491' -> 0x2ce2 '\11500' -> 0x2ceb '\11502' -> 0x2ced '\11507' -> 0x2cf2 '\11520' -> 0x10a0 '\11521' -> 0x10a1 '\11522' -> 0x10a2 '\11523' -> 0x10a3 '\11524' -> 0x10a4 '\11525' -> 0x10a5 '\11526' -> 0x10a6 '\11527' -> 0x10a7 '\11528' -> 0x10a8 '\11529' -> 0x10a9 '\11530' -> 0x10aa '\11531' -> 0x10ab '\11532' -> 0x10ac '\11533' -> 0x10ad '\11534' -> 0x10ae '\11535' -> 0x10af '\11536' -> 0x10b0 '\11537' -> 0x10b1 '\11538' -> 0x10b2 '\11539' -> 0x10b3 '\11540' -> 0x10b4 '\11541' -> 0x10b5 '\11542' -> 0x10b6 '\11543' -> 0x10b7 '\11544' -> 0x10b8 '\11545' -> 0x10b9 '\11546' -> 0x10ba '\11547' -> 0x10bb '\11548' -> 0x10bc '\11549' -> 0x10bd '\11550' -> 0x10be '\11551' -> 0x10bf '\11552' -> 0x10c0 '\11553' -> 0x10c1 '\11554' -> 0x10c2 '\11555' -> 0x10c3 '\11556' -> 0x10c4 '\11557' -> 0x10c5 '\11559' -> 0x10c7 '\11565' -> 0x10cd '\42561' -> 0xa640 '\42563' -> 0xa642 '\42565' -> 0xa644 '\42567' -> 0xa646 '\42569' -> 0xa648 '\42571' -> 0xa64a '\42573' -> 0xa64c '\42575' -> 0xa64e '\42577' -> 0xa650 '\42579' -> 0xa652 '\42581' -> 0xa654 '\42583' -> 0xa656 '\42585' -> 0xa658 '\42587' -> 0xa65a '\42589' -> 0xa65c '\42591' -> 0xa65e '\42593' -> 0xa660 '\42595' -> 0xa662 '\42597' -> 0xa664 '\42599' -> 0xa666 '\42601' -> 0xa668 '\42603' -> 0xa66a '\42605' -> 0xa66c '\42625' -> 0xa680 '\42627' -> 0xa682 '\42629' -> 0xa684 '\42631' -> 0xa686 '\42633' -> 0xa688 '\42635' -> 0xa68a '\42637' -> 0xa68c '\42639' -> 0xa68e '\42641' -> 0xa690 '\42643' -> 0xa692 '\42645' -> 0xa694 '\42647' -> 0xa696 '\42649' -> 0xa698 '\42651' -> 0xa69a '\42787' -> 0xa722 '\42789' -> 0xa724 '\42791' -> 0xa726 '\42793' -> 0xa728 '\42795' -> 0xa72a '\42797' -> 0xa72c '\42799' -> 0xa72e '\42803' -> 0xa732 '\42805' -> 0xa734 '\42807' -> 0xa736 '\42809' -> 0xa738 '\42811' -> 0xa73a '\42813' -> 0xa73c '\42815' -> 0xa73e '\42817' -> 0xa740 '\42819' -> 0xa742 '\42821' -> 0xa744 '\42823' -> 0xa746 '\42825' -> 0xa748 '\42827' -> 0xa74a '\42829' -> 0xa74c '\42831' -> 0xa74e '\42833' -> 0xa750 '\42835' -> 0xa752 '\42837' -> 0xa754 '\42839' -> 0xa756 '\42841' -> 0xa758 '\42843' -> 0xa75a '\42845' -> 0xa75c '\42847' -> 0xa75e '\42849' -> 0xa760 '\42851' -> 0xa762 '\42853' -> 0xa764 '\42855' -> 0xa766 '\42857' -> 0xa768 '\42859' -> 0xa76a '\42861' -> 0xa76c '\42863' -> 0xa76e '\42874' -> 0xa779 '\42876' -> 0xa77b '\42879' -> 0xa77e '\42881' -> 0xa780 '\42883' -> 0xa782 '\42885' -> 0xa784 '\42887' -> 0xa786 '\42892' -> 0xa78b '\42897' -> 0xa790 '\42899' -> 0xa792 '\42900' -> 0xa7c4 '\42903' -> 0xa796 '\42905' -> 0xa798 '\42907' -> 0xa79a '\42909' -> 0xa79c '\42911' -> 0xa79e '\42913' -> 0xa7a0 '\42915' -> 0xa7a2 '\42917' -> 0xa7a4 '\42919' -> 0xa7a6 '\42921' -> 0xa7a8 '\42933' -> 0xa7b4 '\42935' -> 0xa7b6 '\42937' -> 0xa7b8 '\42939' -> 0xa7ba '\42941' -> 0xa7bc '\42943' -> 0xa7be '\42945' -> 0xa7c0 '\42947' -> 0xa7c2 '\42952' -> 0xa7c7 '\42954' -> 0xa7c9 '\42961' -> 0xa7d0 '\42967' -> 0xa7d6 '\42969' -> 0xa7d8 '\42998' -> 0xa7f5 '\43859' -> 0xa7b3 '\43888' -> 0x13a0 '\43889' -> 0x13a1 '\43890' -> 0x13a2 '\43891' -> 0x13a3 '\43892' -> 0x13a4 '\43893' -> 0x13a5 '\43894' -> 0x13a6 '\43895' -> 0x13a7 '\43896' -> 0x13a8 '\43897' -> 0x13a9 '\43898' -> 0x13aa '\43899' -> 0x13ab '\43900' -> 0x13ac '\43901' -> 0x13ad '\43902' -> 0x13ae '\43903' -> 0x13af '\43904' -> 0x13b0 '\43905' -> 0x13b1 '\43906' -> 0x13b2 '\43907' -> 0x13b3 '\43908' -> 0x13b4 '\43909' -> 0x13b5 '\43910' -> 0x13b6 '\43911' -> 0x13b7 '\43912' -> 0x13b8 '\43913' -> 0x13b9 '\43914' -> 0x13ba '\43915' -> 0x13bb '\43916' -> 0x13bc '\43917' -> 0x13bd '\43918' -> 0x13be '\43919' -> 0x13bf '\43920' -> 0x13c0 '\43921' -> 0x13c1 '\43922' -> 0x13c2 '\43923' -> 0x13c3 '\43924' -> 0x13c4 '\43925' -> 0x13c5 '\43926' -> 0x13c6 '\43927' -> 0x13c7 '\43928' -> 0x13c8 '\43929' -> 0x13c9 '\43930' -> 0x13ca '\43931' -> 0x13cb '\43932' -> 0x13cc '\43933' -> 0x13cd '\43934' -> 0x13ce '\43935' -> 0x13cf '\43936' -> 0x13d0 '\43937' -> 0x13d1 '\43938' -> 0x13d2 '\43939' -> 0x13d3 '\43940' -> 0x13d4 '\43941' -> 0x13d5 '\43942' -> 0x13d6 '\43943' -> 0x13d7 '\43944' -> 0x13d8 '\43945' -> 0x13d9 '\43946' -> 0x13da '\43947' -> 0x13db '\43948' -> 0x13dc '\43949' -> 0x13dd '\43950' -> 0x13de '\43951' -> 0x13df '\43952' -> 0x13e0 '\43953' -> 0x13e1 '\43954' -> 0x13e2 '\43955' -> 0x13e3 '\43956' -> 0x13e4 '\43957' -> 0x13e5 '\43958' -> 0x13e6 '\43959' -> 0x13e7 '\43960' -> 0x13e8 '\43961' -> 0x13e9 '\43962' -> 0x13ea '\43963' -> 0x13eb '\43964' -> 0x13ec '\43965' -> 0x13ed '\43966' -> 0x13ee '\43967' -> 0x13ef '\64256' -> 0x8c00046 '\64257' -> 0x9200046 '\64258' -> 0x9800046 '\64259' -> 0x1240008c00046 '\64260' -> 0x1300008c00046 '\64261' -> 0xa800053 '\64262' -> 0xa800053 '\64275' -> 0xa8c00544 '\64276' -> 0xa6a00544 '\64277' -> 0xa7600544 '\64278' -> 0xa8c0054e '\64279' -> 0xa7a00544 '\65345' -> 0xff21 '\65346' -> 0xff22 '\65347' -> 0xff23 '\65348' -> 0xff24 '\65349' -> 0xff25 '\65350' -> 0xff26 '\65351' -> 0xff27 '\65352' -> 0xff28 '\65353' -> 0xff29 '\65354' -> 0xff2a '\65355' -> 0xff2b '\65356' -> 0xff2c '\65357' -> 0xff2d '\65358' -> 0xff2e '\65359' -> 0xff2f '\65360' -> 0xff30 '\65361' -> 0xff31 '\65362' -> 0xff32 '\65363' -> 0xff33 '\65364' -> 0xff34 '\65365' -> 0xff35 '\65366' -> 0xff36 '\65367' -> 0xff37 '\65368' -> 0xff38 '\65369' -> 0xff39 '\65370' -> 0xff3a '\66600' -> 0x10400 '\66601' -> 0x10401 '\66602' -> 0x10402 '\66603' -> 0x10403 '\66604' -> 0x10404 '\66605' -> 0x10405 '\66606' -> 0x10406 '\66607' -> 0x10407 '\66608' -> 0x10408 '\66609' -> 0x10409 '\66610' -> 0x1040a '\66611' -> 0x1040b '\66612' -> 0x1040c '\66613' -> 0x1040d '\66614' -> 0x1040e '\66615' -> 0x1040f '\66616' -> 0x10410 '\66617' -> 0x10411 '\66618' -> 0x10412 '\66619' -> 0x10413 '\66620' -> 0x10414 '\66621' -> 0x10415 '\66622' -> 0x10416 '\66623' -> 0x10417 '\66624' -> 0x10418 '\66625' -> 0x10419 '\66626' -> 0x1041a '\66627' -> 0x1041b '\66628' -> 0x1041c '\66629' -> 0x1041d '\66630' -> 0x1041e '\66631' -> 0x1041f '\66632' -> 0x10420 '\66633' -> 0x10421 '\66634' -> 0x10422 '\66635' -> 0x10423 '\66636' -> 0x10424 '\66637' -> 0x10425 '\66638' -> 0x10426 '\66639' -> 0x10427 '\66776' -> 0x104b0 '\66777' -> 0x104b1 '\66778' -> 0x104b2 '\66779' -> 0x104b3 '\66780' -> 0x104b4 '\66781' -> 0x104b5 '\66782' -> 0x104b6 '\66783' -> 0x104b7 '\66784' -> 0x104b8 '\66785' -> 0x104b9 '\66786' -> 0x104ba '\66787' -> 0x104bb '\66788' -> 0x104bc '\66789' -> 0x104bd '\66790' -> 0x104be '\66791' -> 0x104bf '\66792' -> 0x104c0 '\66793' -> 0x104c1 '\66794' -> 0x104c2 '\66795' -> 0x104c3 '\66796' -> 0x104c4 '\66797' -> 0x104c5 '\66798' -> 0x104c6 '\66799' -> 0x104c7 '\66800' -> 0x104c8 '\66801' -> 0x104c9 '\66802' -> 0x104ca '\66803' -> 0x104cb '\66804' -> 0x104cc '\66805' -> 0x104cd '\66806' -> 0x104ce '\66807' -> 0x104cf '\66808' -> 0x104d0 '\66809' -> 0x104d1 '\66810' -> 0x104d2 '\66811' -> 0x104d3 '\66967' -> 0x10570 '\66968' -> 0x10571 '\66969' -> 0x10572 '\66970' -> 0x10573 '\66971' -> 0x10574 '\66972' -> 0x10575 '\66973' -> 0x10576 '\66974' -> 0x10577 '\66975' -> 0x10578 '\66976' -> 0x10579 '\66977' -> 0x1057a '\66979' -> 0x1057c '\66980' -> 0x1057d '\66981' -> 0x1057e '\66982' -> 0x1057f '\66983' -> 0x10580 '\66984' -> 0x10581 '\66985' -> 0x10582 '\66986' -> 0x10583 '\66987' -> 0x10584 '\66988' -> 0x10585 '\66989' -> 0x10586 '\66990' -> 0x10587 '\66991' -> 0x10588 '\66992' -> 0x10589 '\66993' -> 0x1058a '\66995' -> 0x1058c '\66996' -> 0x1058d '\66997' -> 0x1058e '\66998' -> 0x1058f '\66999' -> 0x10590 '\67000' -> 0x10591 '\67001' -> 0x10592 '\67003' -> 0x10594 '\67004' -> 0x10595 '\68800' -> 0x10c80 '\68801' -> 0x10c81 '\68802' -> 0x10c82 '\68803' -> 0x10c83 '\68804' -> 0x10c84 '\68805' -> 0x10c85 '\68806' -> 0x10c86 '\68807' -> 0x10c87 '\68808' -> 0x10c88 '\68809' -> 0x10c89 '\68810' -> 0x10c8a '\68811' -> 0x10c8b '\68812' -> 0x10c8c '\68813' -> 0x10c8d '\68814' -> 0x10c8e '\68815' -> 0x10c8f '\68816' -> 0x10c90 '\68817' -> 0x10c91 '\68818' -> 0x10c92 '\68819' -> 0x10c93 '\68820' -> 0x10c94 '\68821' -> 0x10c95 '\68822' -> 0x10c96 '\68823' -> 0x10c97 '\68824' -> 0x10c98 '\68825' -> 0x10c99 '\68826' -> 0x10c9a '\68827' -> 0x10c9b '\68828' -> 0x10c9c '\68829' -> 0x10c9d '\68830' -> 0x10c9e '\68831' -> 0x10c9f '\68832' -> 0x10ca0 '\68833' -> 0x10ca1 '\68834' -> 0x10ca2 '\68835' -> 0x10ca3 '\68836' -> 0x10ca4 '\68837' -> 0x10ca5 '\68838' -> 0x10ca6 '\68839' -> 0x10ca7 '\68840' -> 0x10ca8 '\68841' -> 0x10ca9 '\68842' -> 0x10caa '\68843' -> 0x10cab '\68844' -> 0x10cac '\68845' -> 0x10cad '\68846' -> 0x10cae '\68847' -> 0x10caf '\68848' -> 0x10cb0 '\68849' -> 0x10cb1 '\68850' -> 0x10cb2 '\71872' -> 0x118a0 '\71873' -> 0x118a1 '\71874' -> 0x118a2 '\71875' -> 0x118a3 '\71876' -> 0x118a4 '\71877' -> 0x118a5 '\71878' -> 0x118a6 '\71879' -> 0x118a7 '\71880' -> 0x118a8 '\71881' -> 0x118a9 '\71882' -> 0x118aa '\71883' -> 0x118ab '\71884' -> 0x118ac '\71885' -> 0x118ad '\71886' -> 0x118ae '\71887' -> 0x118af '\71888' -> 0x118b0 '\71889' -> 0x118b1 '\71890' -> 0x118b2 '\71891' -> 0x118b3 '\71892' -> 0x118b4 '\71893' -> 0x118b5 '\71894' -> 0x118b6 '\71895' -> 0x118b7 '\71896' -> 0x118b8 '\71897' -> 0x118b9 '\71898' -> 0x118ba '\71899' -> 0x118bb '\71900' -> 0x118bc '\71901' -> 0x118bd '\71902' -> 0x118be '\71903' -> 0x118bf '\93792' -> 0x16e40 '\93793' -> 0x16e41 '\93794' -> 0x16e42 '\93795' -> 0x16e43 '\93796' -> 0x16e44 '\93797' -> 0x16e45 '\93798' -> 0x16e46 '\93799' -> 0x16e47 '\93800' -> 0x16e48 '\93801' -> 0x16e49 '\93802' -> 0x16e4a '\93803' -> 0x16e4b '\93804' -> 0x16e4c '\93805' -> 0x16e4d '\93806' -> 0x16e4e '\93807' -> 0x16e4f '\93808' -> 0x16e50 '\93809' -> 0x16e51 '\93810' -> 0x16e52 '\93811' -> 0x16e53 '\93812' -> 0x16e54 '\93813' -> 0x16e55 '\93814' -> 0x16e56 '\93815' -> 0x16e57 '\93816' -> 0x16e58 '\93817' -> 0x16e59 '\93818' -> 0x16e5a '\93819' -> 0x16e5b '\93820' -> 0x16e5c '\93821' -> 0x16e5d '\93822' -> 0x16e5e '\93823' -> 0x16e5f '\125218' -> 0x1e900 '\125219' -> 0x1e901 '\125220' -> 0x1e902 '\125221' -> 0x1e903 '\125222' -> 0x1e904 '\125223' -> 0x1e905 '\125224' -> 0x1e906 '\125225' -> 0x1e907 '\125226' -> 0x1e908 '\125227' -> 0x1e909 '\125228' -> 0x1e90a '\125229' -> 0x1e90b '\125230' -> 0x1e90c '\125231' -> 0x1e90d '\125232' -> 0x1e90e '\125233' -> 0x1e90f '\125234' -> 0x1e910 '\125235' -> 0x1e911 '\125236' -> 0x1e912 '\125237' -> 0x1e913 '\125238' -> 0x1e914 '\125239' -> 0x1e915 '\125240' -> 0x1e916 '\125241' -> 0x1e917 '\125242' -> 0x1e918 '\125243' -> 0x1e919 '\125244' -> 0x1e91a '\125245' -> 0x1e91b '\125246' -> 0x1e91c '\125247' -> 0x1e91d '\125248' -> 0x1e91e '\125249' -> 0x1e91f '\125250' -> 0x1e920 '\125251' -> 0x1e921 _ -> 0 unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/0000755000000000000000000000000007346545000021210 5ustar0000000000000000unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/CombiningClass.hs0000644000000000000000000005602607346545000024450 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.CombiningClass -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.CombiningClass (combiningClass, isCombining) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16, Word8) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord16AsInt, lookupWord8AsInt) combiningClass :: Char -> Int combiningClass = \case '\768' -> 230 '\769' -> 230 '\770' -> 230 '\771' -> 230 '\772' -> 230 '\773' -> 230 '\774' -> 230 '\775' -> 230 '\776' -> 230 '\777' -> 230 '\778' -> 230 '\779' -> 230 '\780' -> 230 '\781' -> 230 '\782' -> 230 '\783' -> 230 '\784' -> 230 '\785' -> 230 '\786' -> 230 '\787' -> 230 '\788' -> 230 '\789' -> 232 '\790' -> 220 '\791' -> 220 '\792' -> 220 '\793' -> 220 '\794' -> 232 '\795' -> 216 '\796' -> 220 '\797' -> 220 '\798' -> 220 '\799' -> 220 '\800' -> 220 '\801' -> 202 '\802' -> 202 '\803' -> 220 '\804' -> 220 '\805' -> 220 '\806' -> 220 '\807' -> 202 '\808' -> 202 '\809' -> 220 '\810' -> 220 '\811' -> 220 '\812' -> 220 '\813' -> 220 '\814' -> 220 '\815' -> 220 '\816' -> 220 '\817' -> 220 '\818' -> 220 '\819' -> 220 '\820' -> 1 '\821' -> 1 '\822' -> 1 '\823' -> 1 '\824' -> 1 '\825' -> 220 '\826' -> 220 '\827' -> 220 '\828' -> 220 '\829' -> 230 '\830' -> 230 '\831' -> 230 '\832' -> 230 '\833' -> 230 '\834' -> 230 '\835' -> 230 '\836' -> 230 '\837' -> 240 '\838' -> 230 '\839' -> 220 '\840' -> 220 '\841' -> 220 '\842' -> 230 '\843' -> 230 '\844' -> 230 '\845' -> 220 '\846' -> 220 '\848' -> 230 '\849' -> 230 '\850' -> 230 '\851' -> 220 '\852' -> 220 '\853' -> 220 '\854' -> 220 '\855' -> 230 '\856' -> 232 '\857' -> 220 '\858' -> 220 '\859' -> 230 '\860' -> 233 '\861' -> 234 '\862' -> 234 '\863' -> 233 '\864' -> 234 '\865' -> 234 '\866' -> 233 '\867' -> 230 '\868' -> 230 '\869' -> 230 '\870' -> 230 '\871' -> 230 '\872' -> 230 '\873' -> 230 '\874' -> 230 '\875' -> 230 '\876' -> 230 '\877' -> 230 '\878' -> 230 '\879' -> 230 '\1155' -> 230 '\1156' -> 230 '\1157' -> 230 '\1158' -> 230 '\1159' -> 230 '\1425' -> 220 '\1426' -> 230 '\1427' -> 230 '\1428' -> 230 '\1429' -> 230 '\1430' -> 220 '\1431' -> 230 '\1432' -> 230 '\1433' -> 230 '\1434' -> 222 '\1435' -> 220 '\1436' -> 230 '\1437' -> 230 '\1438' -> 230 '\1439' -> 230 '\1440' -> 230 '\1441' -> 230 '\1442' -> 220 '\1443' -> 220 '\1444' -> 220 '\1445' -> 220 '\1446' -> 220 '\1447' -> 220 '\1448' -> 230 '\1449' -> 230 '\1450' -> 220 '\1451' -> 230 '\1452' -> 230 '\1453' -> 222 '\1454' -> 228 '\1455' -> 230 '\1456' -> 10 '\1457' -> 11 '\1458' -> 12 '\1459' -> 13 '\1460' -> 14 '\1461' -> 15 '\1462' -> 16 '\1463' -> 17 '\1464' -> 18 '\1465' -> 19 '\1466' -> 19 '\1467' -> 20 '\1468' -> 21 '\1469' -> 22 '\1471' -> 23 '\1473' -> 24 '\1474' -> 25 '\1476' -> 230 '\1477' -> 220 '\1479' -> 18 '\1552' -> 230 '\1553' -> 230 '\1554' -> 230 '\1555' -> 230 '\1556' -> 230 '\1557' -> 230 '\1558' -> 230 '\1559' -> 230 '\1560' -> 30 '\1561' -> 31 '\1562' -> 32 '\1611' -> 27 '\1612' -> 28 '\1613' -> 29 '\1614' -> 30 '\1615' -> 31 '\1616' -> 32 '\1617' -> 33 '\1618' -> 34 '\1619' -> 230 '\1620' -> 230 '\1621' -> 220 '\1622' -> 220 '\1623' -> 230 '\1624' -> 230 '\1625' -> 230 '\1626' -> 230 '\1627' -> 230 '\1628' -> 220 '\1629' -> 230 '\1630' -> 230 '\1631' -> 220 '\1648' -> 35 '\1750' -> 230 '\1751' -> 230 '\1752' -> 230 '\1753' -> 230 '\1754' -> 230 '\1755' -> 230 '\1756' -> 230 '\1759' -> 230 '\1760' -> 230 '\1761' -> 230 '\1762' -> 230 '\1763' -> 220 '\1764' -> 230 '\1767' -> 230 '\1768' -> 230 '\1770' -> 220 '\1771' -> 230 '\1772' -> 230 '\1773' -> 220 '\1809' -> 36 '\1840' -> 230 '\1841' -> 220 '\1842' -> 230 '\1843' -> 230 '\1844' -> 220 '\1845' -> 230 '\1846' -> 230 '\1847' -> 220 '\1848' -> 220 '\1849' -> 220 '\1850' -> 230 '\1851' -> 220 '\1852' -> 220 '\1853' -> 230 '\1854' -> 220 '\1855' -> 230 '\1856' -> 230 '\1857' -> 230 '\1858' -> 220 '\1859' -> 230 '\1860' -> 220 '\1861' -> 230 '\1862' -> 220 '\1863' -> 230 '\1864' -> 220 '\1865' -> 230 '\1866' -> 230 '\2027' -> 230 '\2028' -> 230 '\2029' -> 230 '\2030' -> 230 '\2031' -> 230 '\2032' -> 230 '\2033' -> 230 '\2034' -> 220 '\2035' -> 230 '\2045' -> 220 '\2070' -> 230 '\2071' -> 230 '\2072' -> 230 '\2073' -> 230 '\2075' -> 230 '\2076' -> 230 '\2077' -> 230 '\2078' -> 230 '\2079' -> 230 '\2080' -> 230 '\2081' -> 230 '\2082' -> 230 '\2083' -> 230 '\2085' -> 230 '\2086' -> 230 '\2087' -> 230 '\2089' -> 230 '\2090' -> 230 '\2091' -> 230 '\2092' -> 230 '\2093' -> 230 '\2137' -> 220 '\2138' -> 220 '\2139' -> 220 '\2200' -> 230 '\2201' -> 220 '\2202' -> 220 '\2203' -> 220 '\2204' -> 230 '\2205' -> 230 '\2206' -> 230 '\2207' -> 230 '\2250' -> 230 '\2251' -> 230 '\2252' -> 230 '\2253' -> 230 '\2254' -> 230 '\2255' -> 220 '\2256' -> 220 '\2257' -> 220 '\2258' -> 220 '\2259' -> 220 '\2260' -> 230 '\2261' -> 230 '\2262' -> 230 '\2263' -> 230 '\2264' -> 230 '\2265' -> 230 '\2266' -> 230 '\2267' -> 230 '\2268' -> 230 '\2269' -> 230 '\2270' -> 230 '\2271' -> 230 '\2272' -> 230 '\2273' -> 230 '\2275' -> 220 '\2276' -> 230 '\2277' -> 230 '\2278' -> 220 '\2279' -> 230 '\2280' -> 230 '\2281' -> 220 '\2282' -> 230 '\2283' -> 230 '\2284' -> 230 '\2285' -> 220 '\2286' -> 220 '\2287' -> 220 '\2288' -> 27 '\2289' -> 28 '\2290' -> 29 '\2291' -> 230 '\2292' -> 230 '\2293' -> 230 '\2294' -> 220 '\2295' -> 230 '\2296' -> 230 '\2297' -> 220 '\2298' -> 220 '\2299' -> 230 '\2300' -> 230 '\2301' -> 230 '\2302' -> 230 '\2303' -> 230 '\2364' -> 7 '\2381' -> 9 '\2385' -> 230 '\2386' -> 220 '\2387' -> 230 '\2388' -> 230 '\2492' -> 7 '\2509' -> 9 '\2558' -> 230 '\2620' -> 7 '\2637' -> 9 '\2748' -> 7 '\2765' -> 9 '\2876' -> 7 '\2893' -> 9 '\3021' -> 9 '\3132' -> 7 '\3149' -> 9 '\3157' -> 84 '\3158' -> 91 '\3260' -> 7 '\3277' -> 9 '\3387' -> 9 '\3388' -> 9 '\3405' -> 9 '\3530' -> 9 '\3640' -> 103 '\3641' -> 103 '\3642' -> 9 '\3656' -> 107 '\3657' -> 107 '\3658' -> 107 '\3659' -> 107 '\3768' -> 118 '\3769' -> 118 '\3770' -> 9 '\3784' -> 122 '\3785' -> 122 '\3786' -> 122 '\3787' -> 122 '\3864' -> 220 '\3865' -> 220 '\3893' -> 220 '\3895' -> 220 '\3897' -> 216 '\3953' -> 129 '\3954' -> 130 '\3956' -> 132 '\3962' -> 130 '\3963' -> 130 '\3964' -> 130 '\3965' -> 130 '\3968' -> 130 '\3970' -> 230 '\3971' -> 230 '\3972' -> 9 '\3974' -> 230 '\3975' -> 230 '\4038' -> 220 '\4151' -> 7 '\4153' -> 9 '\4154' -> 9 '\4237' -> 220 '\4957' -> 230 '\4958' -> 230 '\4959' -> 230 '\5908' -> 9 '\5909' -> 9 '\5940' -> 9 '\6098' -> 9 '\6109' -> 230 '\6313' -> 228 '\6457' -> 222 '\6458' -> 230 '\6459' -> 220 '\6679' -> 230 '\6680' -> 220 '\6752' -> 9 '\6773' -> 230 '\6774' -> 230 '\6775' -> 230 '\6776' -> 230 '\6777' -> 230 '\6778' -> 230 '\6779' -> 230 '\6780' -> 230 '\6783' -> 220 '\6832' -> 230 '\6833' -> 230 '\6834' -> 230 '\6835' -> 230 '\6836' -> 230 '\6837' -> 220 '\6838' -> 220 '\6839' -> 220 '\6840' -> 220 '\6841' -> 220 '\6842' -> 220 '\6843' -> 230 '\6844' -> 230 '\6845' -> 220 '\6847' -> 220 '\6848' -> 220 '\6849' -> 230 '\6850' -> 230 '\6851' -> 220 '\6852' -> 220 '\6853' -> 230 '\6854' -> 230 '\6855' -> 230 '\6856' -> 230 '\6857' -> 230 '\6858' -> 220 '\6859' -> 230 '\6860' -> 230 '\6861' -> 230 '\6862' -> 230 '\6964' -> 7 '\6980' -> 9 '\7019' -> 230 '\7020' -> 220 '\7021' -> 230 '\7022' -> 230 '\7023' -> 230 '\7024' -> 230 '\7025' -> 230 '\7026' -> 230 '\7027' -> 230 '\7082' -> 9 '\7083' -> 9 '\7142' -> 7 '\7154' -> 9 '\7155' -> 9 '\7223' -> 7 '\7376' -> 230 '\7377' -> 230 '\7378' -> 230 '\7380' -> 1 '\7381' -> 220 '\7382' -> 220 '\7383' -> 220 '\7384' -> 220 '\7385' -> 220 '\7386' -> 230 '\7387' -> 230 '\7388' -> 220 '\7389' -> 220 '\7390' -> 220 '\7391' -> 220 '\7392' -> 230 '\7394' -> 1 '\7395' -> 1 '\7396' -> 1 '\7397' -> 1 '\7398' -> 1 '\7399' -> 1 '\7400' -> 1 '\7405' -> 220 '\7412' -> 230 '\7416' -> 230 '\7417' -> 230 '\7616' -> 230 '\7617' -> 230 '\7618' -> 220 '\7619' -> 230 '\7620' -> 230 '\7621' -> 230 '\7622' -> 230 '\7623' -> 230 '\7624' -> 230 '\7625' -> 230 '\7626' -> 220 '\7627' -> 230 '\7628' -> 230 '\7629' -> 234 '\7630' -> 214 '\7631' -> 220 '\7632' -> 202 '\7633' -> 230 '\7634' -> 230 '\7635' -> 230 '\7636' -> 230 '\7637' -> 230 '\7638' -> 230 '\7639' -> 230 '\7640' -> 230 '\7641' -> 230 '\7642' -> 230 '\7643' -> 230 '\7644' -> 230 '\7645' -> 230 '\7646' -> 230 '\7647' -> 230 '\7648' -> 230 '\7649' -> 230 '\7650' -> 230 '\7651' -> 230 '\7652' -> 230 '\7653' -> 230 '\7654' -> 230 '\7655' -> 230 '\7656' -> 230 '\7657' -> 230 '\7658' -> 230 '\7659' -> 230 '\7660' -> 230 '\7661' -> 230 '\7662' -> 230 '\7663' -> 230 '\7664' -> 230 '\7665' -> 230 '\7666' -> 230 '\7667' -> 230 '\7668' -> 230 '\7669' -> 230 '\7670' -> 232 '\7671' -> 228 '\7672' -> 228 '\7673' -> 220 '\7674' -> 218 '\7675' -> 230 '\7676' -> 233 '\7677' -> 220 '\7678' -> 230 '\7679' -> 220 '\8400' -> 230 '\8401' -> 230 '\8402' -> 1 '\8403' -> 1 '\8404' -> 230 '\8405' -> 230 '\8406' -> 230 '\8407' -> 230 '\8408' -> 1 '\8409' -> 1 '\8410' -> 1 '\8411' -> 230 '\8412' -> 230 '\8417' -> 230 '\8421' -> 1 '\8422' -> 1 '\8423' -> 230 '\8424' -> 220 '\8425' -> 230 '\8426' -> 1 '\8427' -> 1 '\8428' -> 220 '\8429' -> 220 '\8430' -> 220 '\8431' -> 220 '\8432' -> 230 '\11503' -> 230 '\11504' -> 230 '\11505' -> 230 '\11647' -> 9 '\11744' -> 230 '\11745' -> 230 '\11746' -> 230 '\11747' -> 230 '\11748' -> 230 '\11749' -> 230 '\11750' -> 230 '\11751' -> 230 '\11752' -> 230 '\11753' -> 230 '\11754' -> 230 '\11755' -> 230 '\11756' -> 230 '\11757' -> 230 '\11758' -> 230 '\11759' -> 230 '\11760' -> 230 '\11761' -> 230 '\11762' -> 230 '\11763' -> 230 '\11764' -> 230 '\11765' -> 230 '\11766' -> 230 '\11767' -> 230 '\11768' -> 230 '\11769' -> 230 '\11770' -> 230 '\11771' -> 230 '\11772' -> 230 '\11773' -> 230 '\11774' -> 230 '\11775' -> 230 '\12330' -> 218 '\12331' -> 228 '\12332' -> 232 '\12333' -> 222 '\12334' -> 224 '\12335' -> 224 '\12441' -> 8 '\12442' -> 8 '\42607' -> 230 '\42612' -> 230 '\42613' -> 230 '\42614' -> 230 '\42615' -> 230 '\42616' -> 230 '\42617' -> 230 '\42618' -> 230 '\42619' -> 230 '\42620' -> 230 '\42621' -> 230 '\42654' -> 230 '\42655' -> 230 '\42736' -> 230 '\42737' -> 230 '\43014' -> 9 '\43052' -> 9 '\43204' -> 9 '\43232' -> 230 '\43233' -> 230 '\43234' -> 230 '\43235' -> 230 '\43236' -> 230 '\43237' -> 230 '\43238' -> 230 '\43239' -> 230 '\43240' -> 230 '\43241' -> 230 '\43242' -> 230 '\43243' -> 230 '\43244' -> 230 '\43245' -> 230 '\43246' -> 230 '\43247' -> 230 '\43248' -> 230 '\43249' -> 230 '\43307' -> 220 '\43308' -> 220 '\43309' -> 220 '\43347' -> 9 '\43443' -> 7 '\43456' -> 9 '\43696' -> 230 '\43698' -> 230 '\43699' -> 230 '\43700' -> 220 '\43703' -> 230 '\43704' -> 230 '\43710' -> 230 '\43711' -> 230 '\43713' -> 230 '\43766' -> 9 '\44013' -> 9 '\64286' -> 26 '\65056' -> 230 '\65057' -> 230 '\65058' -> 230 '\65059' -> 230 '\65060' -> 230 '\65061' -> 230 '\65062' -> 230 '\65063' -> 220 '\65064' -> 220 '\65065' -> 220 '\65066' -> 220 '\65067' -> 220 '\65068' -> 220 '\65069' -> 220 '\65070' -> 230 '\65071' -> 230 '\66045' -> 220 '\66272' -> 220 '\66422' -> 230 '\66423' -> 230 '\66424' -> 230 '\66425' -> 230 '\66426' -> 230 '\68109' -> 220 '\68111' -> 230 '\68152' -> 230 '\68153' -> 1 '\68154' -> 220 '\68159' -> 9 '\68325' -> 230 '\68326' -> 220 '\68900' -> 230 '\68901' -> 230 '\68902' -> 230 '\68903' -> 230 '\69291' -> 230 '\69292' -> 230 '\69373' -> 220 '\69374' -> 220 '\69375' -> 220 '\69446' -> 220 '\69447' -> 220 '\69448' -> 230 '\69449' -> 230 '\69450' -> 230 '\69451' -> 220 '\69452' -> 230 '\69453' -> 220 '\69454' -> 220 '\69455' -> 220 '\69456' -> 220 '\69506' -> 230 '\69507' -> 220 '\69508' -> 230 '\69509' -> 220 '\69702' -> 9 '\69744' -> 9 '\69759' -> 9 '\69817' -> 9 '\69818' -> 7 '\69888' -> 230 '\69889' -> 230 '\69890' -> 230 '\69939' -> 9 '\69940' -> 9 '\70003' -> 7 '\70080' -> 9 '\70090' -> 7 '\70197' -> 9 '\70198' -> 7 '\70377' -> 7 '\70378' -> 9 '\70459' -> 7 '\70460' -> 7 '\70477' -> 9 '\70502' -> 230 '\70503' -> 230 '\70504' -> 230 '\70505' -> 230 '\70506' -> 230 '\70507' -> 230 '\70508' -> 230 '\70512' -> 230 '\70513' -> 230 '\70514' -> 230 '\70515' -> 230 '\70516' -> 230 '\70722' -> 9 '\70726' -> 7 '\70750' -> 230 '\70850' -> 9 '\70851' -> 7 '\71103' -> 9 '\71104' -> 7 '\71231' -> 9 '\71350' -> 9 '\71351' -> 7 '\71467' -> 9 '\71737' -> 9 '\71738' -> 7 '\71997' -> 9 '\71998' -> 9 '\72003' -> 7 '\72160' -> 9 '\72244' -> 9 '\72263' -> 9 '\72345' -> 9 '\72767' -> 9 '\73026' -> 7 '\73028' -> 9 '\73029' -> 9 '\73111' -> 9 '\73537' -> 9 '\73538' -> 9 '\92912' -> 1 '\92913' -> 1 '\92914' -> 1 '\92915' -> 1 '\92916' -> 1 '\92976' -> 230 '\92977' -> 230 '\92978' -> 230 '\92979' -> 230 '\92980' -> 230 '\92981' -> 230 '\92982' -> 230 '\94192' -> 6 '\94193' -> 6 '\113822' -> 1 '\119141' -> 216 '\119142' -> 216 '\119143' -> 1 '\119144' -> 1 '\119145' -> 1 '\119149' -> 226 '\119150' -> 216 '\119151' -> 216 '\119152' -> 216 '\119153' -> 216 '\119154' -> 216 '\119163' -> 220 '\119164' -> 220 '\119165' -> 220 '\119166' -> 220 '\119167' -> 220 '\119168' -> 220 '\119169' -> 220 '\119170' -> 220 '\119173' -> 230 '\119174' -> 230 '\119175' -> 230 '\119176' -> 230 '\119177' -> 230 '\119178' -> 220 '\119179' -> 220 '\119210' -> 230 '\119211' -> 230 '\119212' -> 230 '\119213' -> 230 '\119362' -> 230 '\119363' -> 230 '\119364' -> 230 '\122880' -> 230 '\122881' -> 230 '\122882' -> 230 '\122883' -> 230 '\122884' -> 230 '\122885' -> 230 '\122886' -> 230 '\122888' -> 230 '\122889' -> 230 '\122890' -> 230 '\122891' -> 230 '\122892' -> 230 '\122893' -> 230 '\122894' -> 230 '\122895' -> 230 '\122896' -> 230 '\122897' -> 230 '\122898' -> 230 '\122899' -> 230 '\122900' -> 230 '\122901' -> 230 '\122902' -> 230 '\122903' -> 230 '\122904' -> 230 '\122907' -> 230 '\122908' -> 230 '\122909' -> 230 '\122910' -> 230 '\122911' -> 230 '\122912' -> 230 '\122913' -> 230 '\122915' -> 230 '\122916' -> 230 '\122918' -> 230 '\122919' -> 230 '\122920' -> 230 '\122921' -> 230 '\122922' -> 230 '\123023' -> 230 '\123184' -> 230 '\123185' -> 230 '\123186' -> 230 '\123187' -> 230 '\123188' -> 230 '\123189' -> 230 '\123190' -> 230 '\123566' -> 230 '\123628' -> 230 '\123629' -> 230 '\123630' -> 230 '\123631' -> 230 '\124140' -> 232 '\124141' -> 232 '\124142' -> 220 '\124143' -> 230 '\125136' -> 220 '\125137' -> 220 '\125138' -> 220 '\125139' -> 220 '\125140' -> 220 '\125141' -> 220 '\125142' -> 220 '\125252' -> 230 '\125253' -> 230 '\125254' -> 230 '\125255' -> 230 '\125256' -> 230 '\125257' -> 230 '\125258' -> 7 _ -> 0 {-# INLINE isCombining #-} isCombining :: Char -> Bool isCombining c = c >= '\x0300' && c <= '\x1E94A' && lookupIsCombiningBitMap (ord c) {-# INLINE lookupIsCombiningBitMap #-} lookupIsCombiningBitMap :: Int -> Bool lookupIsCombiningBitMap n = lookupBit data# ( lookupWord16AsInt offsets1# ( lookupWord8AsInt offsets2# ( n `shiftR` 12 ) + ((n `shiftR` 9) .&. maskOffsets) ) + ((n `shiftR` 3) .&. maskData) ) (n .&. 7) where maskData = (1 `shiftL` 6) - 1 maskOffsets = (1 `shiftL` 3) - 1 !(Ptr data#) = isCombiningDataBitMap !(Ptr offsets1#) = isCombiningOffsets1BitMap !(Ptr offsets2#) = isCombiningOffsets2BitMap isCombiningDataBitMap :: Ptr Int8 isCombiningDataBitMap = Ptr "\0\0\0\0\0\0\16\0\128\0\0\0\0\0\0\0\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\0\0\0\0\0\0\0\0\0\31\0\0\0\0\0\0\0\127\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\6\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\96\8\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\252\0\0\0\0\0\0\0\0\0\0\0\0\0\6\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\64\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\3\0\0\192\251\239\62\0\0\0\0\0\14\0\0\0\0\0\0\0\255\0\0\0\0\0\252\255\255\251\255\255\255\0\0\0\ \\0\0\0\0\16\0\32\30\0\0\0\0\0\0\0\0\0\0\0\0\16\0\32\0\0\0\0\0\64\0\160\0\0\0\0\0\135\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\96\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\240\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\48\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\4\32\0\0\0\0\0\0\128\6\0\0\0\0\0\0\0\0\0\32\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\224\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\255\255\255\255\255\255\255\255\255\127\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\157\193\2\0\0\0\0\0\64\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\32\0\0\255\7\0\0\0\0\0\248\255\255\0\0\1\0\0\0\0\0\0\0\ \\0\0\0\0\192\159\159\61\0\0\0\0\2\0\0\0\255\255\255\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\248\15\32\0\0\0\0\0\0\128\6\ \\0\0\0\0\0\0\0\0\0\32\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\7\0\15\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\15\0\0\0\0\0\0\0\0\0\3\0\0\160\2\0\0\0\0\0\0\22\60\221\0\0\ \\0\0\0\0\0\64\0\0\0\0\0\0\0\16\0\32\96\0\0\0\0\0\0\0\0\0\0\0\0\16\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\32\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\0\0\0\255\255\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\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\24\0\0\0\0\0\0\0\0\0\224\0\0\0\0\0\0\0\0\192\255\1\0\0\0\0\0\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\64\0\0\0\0\0\1\128\0\0\0\0\0\0\0\6\0\0\0\0\0\0\0\0\7\0\0\0\0\0\24\0\0\0\0\0\0\0\8\0\0\0\0\0\0\0\0\0\1\4\ \\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\192\7\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\32\64\0\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\0\0\255\255\3\0\0\0\0\0\0\56\ \\0\0\0\0\8\0\0\0\0\0\0\0\0\0\0\0\8\0\1\0\0\0\0\0\0\0\0\28\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\224\227\7\248\231\15\0\0\0\60\0\0\0\0\0\0\0\ \\0\0\0\16\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\16\0\32\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\32\0\0\0\0\0\0\96\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0\0\0\0\0\0\0\0\0\24\0\32\0\0\192\31\ \\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\64\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\224\227\7\248\231\15\0\0\0\60\0\0\0\0\0\0\0\0\0\0\68\0\0\64\0\0\0\0\0\0\0\0\0\0\0\ \\0\12\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\128\1\0\0\0\0\0\0\0\0\1\0\224\159\0\0\0\0\ \\0\0\255\191\255\127\0\0\0\0\0\0\0\0\0\0\0\0\16\0\16\0\0\0\0\248\15\0\0\0\0\0\0\12\0\0\0\0\0\0\64\0\12\0\0\160\0\0\0\0\ \\0\135\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\96\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\192\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\248\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\254\255\255\255\255\191\182\0\0\0\0\0\0\0\0\0\0\0\0\0\128\240\ \\63\0\0\0\192\0\0\0\0\0\0\0\0\0\0\3\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\255\ \\31\226\255\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\128\3\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\127\255\255\249\219\7\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\127\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\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\64\0\0\0\0\0\0\0\240\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\31\0\0\0\0\0\0\0\127\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\3\0\0\0\0\0\0\ \\0\0\128\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\52\0\0\0\0\0\0\0\0\0\128\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\192\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\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\240\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\24\0\0\0\0\0\0\0\0\0\ \\224\0\0\0\0\0\0\0\0\192\255\1\0\0\0\0\0\60\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\127\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\240\7\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\255\31\226\255\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\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\247\255\253\33\16\3\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255"# isCombiningOffsets1BitMap :: Ptr Word16 isCombiningOffsets1BitMap = Ptr "\167\0\187\0\187\0\187\0\187\0\187\0\187\0\187\0\187\0\216\0\187\0\148\3\9\5\245\4\187\0\187\0\187\0\187\0\187\0\187\0\232\0\187\0\31\7\187\0\187\0\187\0\187\0\187\0\66\7\187\0\187\0\187\0\187\0\187\0\187\0\187\0\187\0\249\6\188\4\104\2\187\0\187\0\187\0\187\0\187\0\34\0\187\0\252\0\249\1\14\2\ \\187\0\189\1\173\7\44\6\114\9\187\0\58\2\192\6\166\2\59\1\66\5\88\3\31\3\154\3\76\4\187\0\187\0\187\0\123\1\152\1\218\3\18\4\124\5\247\5\140\8\106\0\0\0\97\8\73\0\130\7\216\7\159\1\187\0\14\9"# isCombiningOffsets2BitMap :: Ptr Word8 isCombiningOffsets2BitMap = Ptr "\55\48\22\0\1\1\1\1\1\1\34\1\1\1\1\4\63\71\1\1\1\1\40\1\1\1\1\14\1\12\79"# unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/Compositions.hs0000644000000000000000000011370207346545000024236 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.Compositions -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.Compositions (compose, composeStarters, isSecondStarter) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16, Word8) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord16AsInt, lookupWord8AsInt) {-# NOINLINE compose #-} compose :: Char -> Char -> Maybe Char compose 'A' '\768' = Just '\192' compose 'A' '\769' = Just '\193' compose 'A' '\770' = Just '\194' compose 'A' '\771' = Just '\195' compose 'A' '\776' = Just '\196' compose 'A' '\778' = Just '\197' compose 'C' '\807' = Just '\199' compose 'E' '\768' = Just '\200' compose 'E' '\769' = Just '\201' compose 'E' '\770' = Just '\202' compose 'E' '\776' = Just '\203' compose 'I' '\768' = Just '\204' compose 'I' '\769' = Just '\205' compose 'I' '\770' = Just '\206' compose 'I' '\776' = Just '\207' compose 'N' '\771' = Just '\209' compose 'O' '\768' = Just '\210' compose 'O' '\769' = Just '\211' compose 'O' '\770' = Just '\212' compose 'O' '\771' = Just '\213' compose 'O' '\776' = Just '\214' compose 'U' '\768' = Just '\217' compose 'U' '\769' = Just '\218' compose 'U' '\770' = Just '\219' compose 'U' '\776' = Just '\220' compose 'Y' '\769' = Just '\221' compose 'a' '\768' = Just '\224' compose 'a' '\769' = Just '\225' compose 'a' '\770' = Just '\226' compose 'a' '\771' = Just '\227' compose 'a' '\776' = Just '\228' compose 'a' '\778' = Just '\229' compose 'c' '\807' = Just '\231' compose 'e' '\768' = Just '\232' compose 'e' '\769' = Just '\233' compose 'e' '\770' = Just '\234' compose 'e' '\776' = Just '\235' compose 'i' '\768' = Just '\236' compose 'i' '\769' = Just '\237' compose 'i' '\770' = Just '\238' compose 'i' '\776' = Just '\239' compose 'n' '\771' = Just '\241' compose 'o' '\768' = Just '\242' compose 'o' '\769' = Just '\243' compose 'o' '\770' = Just '\244' compose 'o' '\771' = Just '\245' compose 'o' '\776' = Just '\246' compose 'u' '\768' = Just '\249' compose 'u' '\769' = Just '\250' compose 'u' '\770' = Just '\251' compose 'u' '\776' = Just '\252' compose 'y' '\769' = Just '\253' compose 'y' '\776' = Just '\255' compose 'A' '\772' = Just '\256' compose 'a' '\772' = Just '\257' compose 'A' '\774' = Just '\258' compose 'a' '\774' = Just '\259' compose 'A' '\808' = Just '\260' compose 'a' '\808' = Just '\261' compose 'C' '\769' = Just '\262' compose 'c' '\769' = Just '\263' compose 'C' '\770' = Just '\264' compose 'c' '\770' = Just '\265' compose 'C' '\775' = Just '\266' compose 'c' '\775' = Just '\267' compose 'C' '\780' = Just '\268' compose 'c' '\780' = Just '\269' compose 'D' '\780' = Just '\270' compose 'd' '\780' = Just '\271' compose 'E' '\772' = Just '\274' compose 'e' '\772' = Just '\275' compose 'E' '\774' = Just '\276' compose 'e' '\774' = Just '\277' compose 'E' '\775' = Just '\278' compose 'e' '\775' = Just '\279' compose 'E' '\808' = Just '\280' compose 'e' '\808' = Just '\281' compose 'E' '\780' = Just '\282' compose 'e' '\780' = Just '\283' compose 'G' '\770' = Just '\284' compose 'g' '\770' = Just '\285' compose 'G' '\774' = Just '\286' compose 'g' '\774' = Just '\287' compose 'G' '\775' = Just '\288' compose 'g' '\775' = Just '\289' compose 'G' '\807' = Just '\290' compose 'g' '\807' = Just '\291' compose 'H' '\770' = Just '\292' compose 'h' '\770' = Just '\293' compose 'I' '\771' = Just '\296' compose 'i' '\771' = Just '\297' compose 'I' '\772' = Just '\298' compose 'i' '\772' = Just '\299' compose 'I' '\774' = Just '\300' compose 'i' '\774' = Just '\301' compose 'I' '\808' = Just '\302' compose 'i' '\808' = Just '\303' compose 'I' '\775' = Just '\304' compose 'J' '\770' = Just '\308' compose 'j' '\770' = Just '\309' compose 'K' '\807' = Just '\310' compose 'k' '\807' = Just '\311' compose 'L' '\769' = Just '\313' compose 'l' '\769' = Just '\314' compose 'L' '\807' = Just '\315' compose 'l' '\807' = Just '\316' compose 'L' '\780' = Just '\317' compose 'l' '\780' = Just '\318' compose 'N' '\769' = Just '\323' compose 'n' '\769' = Just '\324' compose 'N' '\807' = Just '\325' compose 'n' '\807' = Just '\326' compose 'N' '\780' = Just '\327' compose 'n' '\780' = Just '\328' compose 'O' '\772' = Just '\332' compose 'o' '\772' = Just '\333' compose 'O' '\774' = Just '\334' compose 'o' '\774' = Just '\335' compose 'O' '\779' = Just '\336' compose 'o' '\779' = Just '\337' compose 'R' '\769' = Just '\340' compose 'r' '\769' = Just '\341' compose 'R' '\807' = Just '\342' compose 'r' '\807' = Just '\343' compose 'R' '\780' = Just '\344' compose 'r' '\780' = Just '\345' compose 'S' '\769' = Just '\346' compose 's' '\769' = Just '\347' compose 'S' '\770' = Just '\348' compose 's' '\770' = Just '\349' compose 'S' '\807' = Just '\350' compose 's' '\807' = Just '\351' compose 'S' '\780' = Just '\352' compose 's' '\780' = Just '\353' compose 'T' '\807' = Just '\354' compose 't' '\807' = Just '\355' compose 'T' '\780' = Just '\356' compose 't' '\780' = Just '\357' compose 'U' '\771' = Just '\360' compose 'u' '\771' = Just '\361' compose 'U' '\772' = Just '\362' compose 'u' '\772' = Just '\363' compose 'U' '\774' = Just '\364' compose 'u' '\774' = Just '\365' compose 'U' '\778' = Just '\366' compose 'u' '\778' = Just '\367' compose 'U' '\779' = Just '\368' compose 'u' '\779' = Just '\369' compose 'U' '\808' = Just '\370' compose 'u' '\808' = Just '\371' compose 'W' '\770' = Just '\372' compose 'w' '\770' = Just '\373' compose 'Y' '\770' = Just '\374' compose 'y' '\770' = Just '\375' compose 'Y' '\776' = Just '\376' compose 'Z' '\769' = Just '\377' compose 'z' '\769' = Just '\378' compose 'Z' '\775' = Just '\379' compose 'z' '\775' = Just '\380' compose 'Z' '\780' = Just '\381' compose 'z' '\780' = Just '\382' compose 'O' '\795' = Just '\416' compose 'o' '\795' = Just '\417' compose 'U' '\795' = Just '\431' compose 'u' '\795' = Just '\432' compose 'A' '\780' = Just '\461' compose 'a' '\780' = Just '\462' compose 'I' '\780' = Just '\463' compose 'i' '\780' = Just '\464' compose 'O' '\780' = Just '\465' compose 'o' '\780' = Just '\466' compose 'U' '\780' = Just '\467' compose 'u' '\780' = Just '\468' compose '\220' '\772' = Just '\469' compose '\252' '\772' = Just '\470' compose '\220' '\769' = Just '\471' compose '\252' '\769' = Just '\472' compose '\220' '\780' = Just '\473' compose '\252' '\780' = Just '\474' compose '\220' '\768' = Just '\475' compose '\252' '\768' = Just '\476' compose '\196' '\772' = Just '\478' compose '\228' '\772' = Just '\479' compose '\550' '\772' = Just '\480' compose '\551' '\772' = Just '\481' compose '\198' '\772' = Just '\482' compose '\230' '\772' = Just '\483' compose 'G' '\780' = Just '\486' compose 'g' '\780' = Just '\487' compose 'K' '\780' = Just '\488' compose 'k' '\780' = Just '\489' compose 'O' '\808' = Just '\490' compose 'o' '\808' = Just '\491' compose '\490' '\772' = Just '\492' compose '\491' '\772' = Just '\493' compose '\439' '\780' = Just '\494' compose '\658' '\780' = Just '\495' compose 'j' '\780' = Just '\496' compose 'G' '\769' = Just '\500' compose 'g' '\769' = Just '\501' compose 'N' '\768' = Just '\504' compose 'n' '\768' = Just '\505' compose '\197' '\769' = Just '\506' compose '\229' '\769' = Just '\507' compose '\198' '\769' = Just '\508' compose '\230' '\769' = Just '\509' compose '\216' '\769' = Just '\510' compose '\248' '\769' = Just '\511' compose 'A' '\783' = Just '\512' compose 'a' '\783' = Just '\513' compose 'A' '\785' = Just '\514' compose 'a' '\785' = Just '\515' compose 'E' '\783' = Just '\516' compose 'e' '\783' = Just '\517' compose 'E' '\785' = Just '\518' compose 'e' '\785' = Just '\519' compose 'I' '\783' = Just '\520' compose 'i' '\783' = Just '\521' compose 'I' '\785' = Just '\522' compose 'i' '\785' = Just '\523' compose 'O' '\783' = Just '\524' compose 'o' '\783' = Just '\525' compose 'O' '\785' = Just '\526' compose 'o' '\785' = Just '\527' compose 'R' '\783' = Just '\528' compose 'r' '\783' = Just '\529' compose 'R' '\785' = Just '\530' compose 'r' '\785' = Just '\531' compose 'U' '\783' = Just '\532' compose 'u' '\783' = Just '\533' compose 'U' '\785' = Just '\534' compose 'u' '\785' = Just '\535' compose 'S' '\806' = Just '\536' compose 's' '\806' = Just '\537' compose 'T' '\806' = Just '\538' compose 't' '\806' = Just '\539' compose 'H' '\780' = Just '\542' compose 'h' '\780' = Just '\543' compose 'A' '\775' = Just '\550' compose 'a' '\775' = Just '\551' compose 'E' '\807' = Just '\552' compose 'e' '\807' = Just '\553' compose '\214' '\772' = Just '\554' compose '\246' '\772' = Just '\555' compose '\213' '\772' = Just '\556' compose '\245' '\772' = Just '\557' compose 'O' '\775' = Just '\558' compose 'o' '\775' = Just '\559' compose '\558' '\772' = Just '\560' compose '\559' '\772' = Just '\561' compose 'Y' '\772' = Just '\562' compose 'y' '\772' = Just '\563' compose '\168' '\769' = Just '\901' compose '\913' '\769' = Just '\902' compose '\917' '\769' = Just '\904' compose '\919' '\769' = Just '\905' compose '\921' '\769' = Just '\906' compose '\927' '\769' = Just '\908' compose '\933' '\769' = Just '\910' compose '\937' '\769' = Just '\911' compose '\970' '\769' = Just '\912' compose '\921' '\776' = Just '\938' compose '\933' '\776' = Just '\939' compose '\945' '\769' = Just '\940' compose '\949' '\769' = Just '\941' compose '\951' '\769' = Just '\942' compose '\953' '\769' = Just '\943' compose '\971' '\769' = Just '\944' compose '\953' '\776' = Just '\970' compose '\965' '\776' = Just '\971' compose '\959' '\769' = Just '\972' compose '\965' '\769' = Just '\973' compose '\969' '\769' = Just '\974' compose '\978' '\769' = Just '\979' compose '\978' '\776' = Just '\980' compose '\1045' '\768' = Just '\1024' compose '\1045' '\776' = Just '\1025' compose '\1043' '\769' = Just '\1027' compose '\1030' '\776' = Just '\1031' compose '\1050' '\769' = Just '\1036' compose '\1048' '\768' = Just '\1037' compose '\1059' '\774' = Just '\1038' compose '\1048' '\774' = Just '\1049' compose '\1080' '\774' = Just '\1081' compose '\1077' '\768' = Just '\1104' compose '\1077' '\776' = Just '\1105' compose '\1075' '\769' = Just '\1107' compose '\1110' '\776' = Just '\1111' compose '\1082' '\769' = Just '\1116' compose '\1080' '\768' = Just '\1117' compose '\1091' '\774' = Just '\1118' compose '\1140' '\783' = Just '\1142' compose '\1141' '\783' = Just '\1143' compose '\1046' '\774' = Just '\1217' compose '\1078' '\774' = Just '\1218' compose '\1040' '\774' = Just '\1232' compose '\1072' '\774' = Just '\1233' compose '\1040' '\776' = Just '\1234' compose '\1072' '\776' = Just '\1235' compose '\1045' '\774' = Just '\1238' compose '\1077' '\774' = Just '\1239' compose '\1240' '\776' = Just '\1242' compose '\1241' '\776' = Just '\1243' compose '\1046' '\776' = Just '\1244' compose '\1078' '\776' = Just '\1245' compose '\1047' '\776' = Just '\1246' compose '\1079' '\776' = Just '\1247' compose '\1048' '\772' = Just '\1250' compose '\1080' '\772' = Just '\1251' compose '\1048' '\776' = Just '\1252' compose '\1080' '\776' = Just '\1253' compose '\1054' '\776' = Just '\1254' compose '\1086' '\776' = Just '\1255' compose '\1256' '\776' = Just '\1258' compose '\1257' '\776' = Just '\1259' compose '\1069' '\776' = Just '\1260' compose '\1101' '\776' = Just '\1261' compose '\1059' '\772' = Just '\1262' compose '\1091' '\772' = Just '\1263' compose '\1059' '\776' = Just '\1264' compose '\1091' '\776' = Just '\1265' compose '\1059' '\779' = Just '\1266' compose '\1091' '\779' = Just '\1267' compose '\1063' '\776' = Just '\1268' compose '\1095' '\776' = Just '\1269' compose '\1067' '\776' = Just '\1272' compose '\1099' '\776' = Just '\1273' compose '\1575' '\1619' = Just '\1570' compose '\1575' '\1620' = Just '\1571' compose '\1608' '\1620' = Just '\1572' compose '\1575' '\1621' = Just '\1573' compose '\1610' '\1620' = Just '\1574' compose '\1749' '\1620' = Just '\1728' compose '\1729' '\1620' = Just '\1730' compose '\1746' '\1620' = Just '\1747' compose '\2344' '\2364' = Just '\2345' compose '\2352' '\2364' = Just '\2353' compose '\2355' '\2364' = Just '\2356' compose '\2503' '\2494' = Just '\2507' compose '\2503' '\2519' = Just '\2508' compose '\2887' '\2902' = Just '\2888' compose '\2887' '\2878' = Just '\2891' compose '\2887' '\2903' = Just '\2892' compose '\2962' '\3031' = Just '\2964' compose '\3014' '\3006' = Just '\3018' compose '\3015' '\3006' = Just '\3019' compose '\3014' '\3031' = Just '\3020' compose '\3142' '\3158' = Just '\3144' compose '\3263' '\3285' = Just '\3264' compose '\3270' '\3285' = Just '\3271' compose '\3270' '\3286' = Just '\3272' compose '\3270' '\3266' = Just '\3274' compose '\3274' '\3285' = Just '\3275' compose '\3398' '\3390' = Just '\3402' compose '\3399' '\3390' = Just '\3403' compose '\3398' '\3415' = Just '\3404' compose '\3545' '\3530' = Just '\3546' compose '\3545' '\3535' = Just '\3548' compose '\3548' '\3530' = Just '\3549' compose '\3545' '\3551' = Just '\3550' compose '\4133' '\4142' = Just '\4134' compose '\6917' '\6965' = Just '\6918' compose '\6919' '\6965' = Just '\6920' compose '\6921' '\6965' = Just '\6922' compose '\6923' '\6965' = Just '\6924' compose '\6925' '\6965' = Just '\6926' compose '\6929' '\6965' = Just '\6930' compose '\6970' '\6965' = Just '\6971' compose '\6972' '\6965' = Just '\6973' compose '\6974' '\6965' = Just '\6976' compose '\6975' '\6965' = Just '\6977' compose '\6978' '\6965' = Just '\6979' compose 'A' '\805' = Just '\7680' compose 'a' '\805' = Just '\7681' compose 'B' '\775' = Just '\7682' compose 'b' '\775' = Just '\7683' compose 'B' '\803' = Just '\7684' compose 'b' '\803' = Just '\7685' compose 'B' '\817' = Just '\7686' compose 'b' '\817' = Just '\7687' compose '\199' '\769' = Just '\7688' compose '\231' '\769' = Just '\7689' compose 'D' '\775' = Just '\7690' compose 'd' '\775' = Just '\7691' compose 'D' '\803' = Just '\7692' compose 'd' '\803' = Just '\7693' compose 'D' '\817' = Just '\7694' compose 'd' '\817' = Just '\7695' compose 'D' '\807' = Just '\7696' compose 'd' '\807' = Just '\7697' compose 'D' '\813' = Just '\7698' compose 'd' '\813' = Just '\7699' compose '\274' '\768' = Just '\7700' compose '\275' '\768' = Just '\7701' compose '\274' '\769' = Just '\7702' compose '\275' '\769' = Just '\7703' compose 'E' '\813' = Just '\7704' compose 'e' '\813' = Just '\7705' compose 'E' '\816' = Just '\7706' compose 'e' '\816' = Just '\7707' compose '\552' '\774' = Just '\7708' compose '\553' '\774' = Just '\7709' compose 'F' '\775' = Just '\7710' compose 'f' '\775' = Just '\7711' compose 'G' '\772' = Just '\7712' compose 'g' '\772' = Just '\7713' compose 'H' '\775' = Just '\7714' compose 'h' '\775' = Just '\7715' compose 'H' '\803' = Just '\7716' compose 'h' '\803' = Just '\7717' compose 'H' '\776' = Just '\7718' compose 'h' '\776' = Just '\7719' compose 'H' '\807' = Just '\7720' compose 'h' '\807' = Just '\7721' compose 'H' '\814' = Just '\7722' compose 'h' '\814' = Just '\7723' compose 'I' '\816' = Just '\7724' compose 'i' '\816' = Just '\7725' compose '\207' '\769' = Just '\7726' compose '\239' '\769' = Just '\7727' compose 'K' '\769' = Just '\7728' compose 'k' '\769' = Just '\7729' compose 'K' '\803' = Just '\7730' compose 'k' '\803' = Just '\7731' compose 'K' '\817' = Just '\7732' compose 'k' '\817' = Just '\7733' compose 'L' '\803' = Just '\7734' compose 'l' '\803' = Just '\7735' compose '\7734' '\772' = Just '\7736' compose '\7735' '\772' = Just '\7737' compose 'L' '\817' = Just '\7738' compose 'l' '\817' = Just '\7739' compose 'L' '\813' = Just '\7740' compose 'l' '\813' = Just '\7741' compose 'M' '\769' = Just '\7742' compose 'm' '\769' = Just '\7743' compose 'M' '\775' = Just '\7744' compose 'm' '\775' = Just '\7745' compose 'M' '\803' = Just '\7746' compose 'm' '\803' = Just '\7747' compose 'N' '\775' = Just '\7748' compose 'n' '\775' = Just '\7749' compose 'N' '\803' = Just '\7750' compose 'n' '\803' = Just '\7751' compose 'N' '\817' = Just '\7752' compose 'n' '\817' = Just '\7753' compose 'N' '\813' = Just '\7754' compose 'n' '\813' = Just '\7755' compose '\213' '\769' = Just '\7756' compose '\245' '\769' = Just '\7757' compose '\213' '\776' = Just '\7758' compose '\245' '\776' = Just '\7759' compose '\332' '\768' = Just '\7760' compose '\333' '\768' = Just '\7761' compose '\332' '\769' = Just '\7762' compose '\333' '\769' = Just '\7763' compose 'P' '\769' = Just '\7764' compose 'p' '\769' = Just '\7765' compose 'P' '\775' = Just '\7766' compose 'p' '\775' = Just '\7767' compose 'R' '\775' = Just '\7768' compose 'r' '\775' = Just '\7769' compose 'R' '\803' = Just '\7770' compose 'r' '\803' = Just '\7771' compose '\7770' '\772' = Just '\7772' compose '\7771' '\772' = Just '\7773' compose 'R' '\817' = Just '\7774' compose 'r' '\817' = Just '\7775' compose 'S' '\775' = Just '\7776' compose 's' '\775' = Just '\7777' compose 'S' '\803' = Just '\7778' compose 's' '\803' = Just '\7779' compose '\346' '\775' = Just '\7780' compose '\347' '\775' = Just '\7781' compose '\352' '\775' = Just '\7782' compose '\353' '\775' = Just '\7783' compose '\7778' '\775' = Just '\7784' compose '\7779' '\775' = Just '\7785' compose 'T' '\775' = Just '\7786' compose 't' '\775' = Just '\7787' compose 'T' '\803' = Just '\7788' compose 't' '\803' = Just '\7789' compose 'T' '\817' = Just '\7790' compose 't' '\817' = Just '\7791' compose 'T' '\813' = Just '\7792' compose 't' '\813' = Just '\7793' compose 'U' '\804' = Just '\7794' compose 'u' '\804' = Just '\7795' compose 'U' '\816' = Just '\7796' compose 'u' '\816' = Just '\7797' compose 'U' '\813' = Just '\7798' compose 'u' '\813' = Just '\7799' compose '\360' '\769' = Just '\7800' compose '\361' '\769' = Just '\7801' compose '\362' '\776' = Just '\7802' compose '\363' '\776' = Just '\7803' compose 'V' '\771' = Just '\7804' compose 'v' '\771' = Just '\7805' compose 'V' '\803' = Just '\7806' compose 'v' '\803' = Just '\7807' compose 'W' '\768' = Just '\7808' compose 'w' '\768' = Just '\7809' compose 'W' '\769' = Just '\7810' compose 'w' '\769' = Just '\7811' compose 'W' '\776' = Just '\7812' compose 'w' '\776' = Just '\7813' compose 'W' '\775' = Just '\7814' compose 'w' '\775' = Just '\7815' compose 'W' '\803' = Just '\7816' compose 'w' '\803' = Just '\7817' compose 'X' '\775' = Just '\7818' compose 'x' '\775' = Just '\7819' compose 'X' '\776' = Just '\7820' compose 'x' '\776' = Just '\7821' compose 'Y' '\775' = Just '\7822' compose 'y' '\775' = Just '\7823' compose 'Z' '\770' = Just '\7824' compose 'z' '\770' = Just '\7825' compose 'Z' '\803' = Just '\7826' compose 'z' '\803' = Just '\7827' compose 'Z' '\817' = Just '\7828' compose 'z' '\817' = Just '\7829' compose 'h' '\817' = Just '\7830' compose 't' '\776' = Just '\7831' compose 'w' '\778' = Just '\7832' compose 'y' '\778' = Just '\7833' compose '\383' '\775' = Just '\7835' compose 'A' '\803' = Just '\7840' compose 'a' '\803' = Just '\7841' compose 'A' '\777' = Just '\7842' compose 'a' '\777' = Just '\7843' compose '\194' '\769' = Just '\7844' compose '\226' '\769' = Just '\7845' compose '\194' '\768' = Just '\7846' compose '\226' '\768' = Just '\7847' compose '\194' '\777' = Just '\7848' compose '\226' '\777' = Just '\7849' compose '\194' '\771' = Just '\7850' compose '\226' '\771' = Just '\7851' compose '\7840' '\770' = Just '\7852' compose '\7841' '\770' = Just '\7853' compose '\258' '\769' = Just '\7854' compose '\259' '\769' = Just '\7855' compose '\258' '\768' = Just '\7856' compose '\259' '\768' = Just '\7857' compose '\258' '\777' = Just '\7858' compose '\259' '\777' = Just '\7859' compose '\258' '\771' = Just '\7860' compose '\259' '\771' = Just '\7861' compose '\7840' '\774' = Just '\7862' compose '\7841' '\774' = Just '\7863' compose 'E' '\803' = Just '\7864' compose 'e' '\803' = Just '\7865' compose 'E' '\777' = Just '\7866' compose 'e' '\777' = Just '\7867' compose 'E' '\771' = Just '\7868' compose 'e' '\771' = Just '\7869' compose '\202' '\769' = Just '\7870' compose '\234' '\769' = Just '\7871' compose '\202' '\768' = Just '\7872' compose '\234' '\768' = Just '\7873' compose '\202' '\777' = Just '\7874' compose '\234' '\777' = Just '\7875' compose '\202' '\771' = Just '\7876' compose '\234' '\771' = Just '\7877' compose '\7864' '\770' = Just '\7878' compose '\7865' '\770' = Just '\7879' compose 'I' '\777' = Just '\7880' compose 'i' '\777' = Just '\7881' compose 'I' '\803' = Just '\7882' compose 'i' '\803' = Just '\7883' compose 'O' '\803' = Just '\7884' compose 'o' '\803' = Just '\7885' compose 'O' '\777' = Just '\7886' compose 'o' '\777' = Just '\7887' compose '\212' '\769' = Just '\7888' compose '\244' '\769' = Just '\7889' compose '\212' '\768' = Just '\7890' compose '\244' '\768' = Just '\7891' compose '\212' '\777' = Just '\7892' compose '\244' '\777' = Just '\7893' compose '\212' '\771' = Just '\7894' compose '\244' '\771' = Just '\7895' compose '\7884' '\770' = Just '\7896' compose '\7885' '\770' = Just '\7897' compose '\416' '\769' = Just '\7898' compose '\417' '\769' = Just '\7899' compose '\416' '\768' = Just '\7900' compose '\417' '\768' = Just '\7901' compose '\416' '\777' = Just '\7902' compose '\417' '\777' = Just '\7903' compose '\416' '\771' = Just '\7904' compose '\417' '\771' = Just '\7905' compose '\416' '\803' = Just '\7906' compose '\417' '\803' = Just '\7907' compose 'U' '\803' = Just '\7908' compose 'u' '\803' = Just '\7909' compose 'U' '\777' = Just '\7910' compose 'u' '\777' = Just '\7911' compose '\431' '\769' = Just '\7912' compose '\432' '\769' = Just '\7913' compose '\431' '\768' = Just '\7914' compose '\432' '\768' = Just '\7915' compose '\431' '\777' = Just '\7916' compose '\432' '\777' = Just '\7917' compose '\431' '\771' = Just '\7918' compose '\432' '\771' = Just '\7919' compose '\431' '\803' = Just '\7920' compose '\432' '\803' = Just '\7921' compose 'Y' '\768' = Just '\7922' compose 'y' '\768' = Just '\7923' compose 'Y' '\803' = Just '\7924' compose 'y' '\803' = Just '\7925' compose 'Y' '\777' = Just '\7926' compose 'y' '\777' = Just '\7927' compose 'Y' '\771' = Just '\7928' compose 'y' '\771' = Just '\7929' compose '\945' '\787' = Just '\7936' compose '\945' '\788' = Just '\7937' compose '\7936' '\768' = Just '\7938' compose '\7937' '\768' = Just '\7939' compose '\7936' '\769' = Just '\7940' compose '\7937' '\769' = Just '\7941' compose '\7936' '\834' = Just '\7942' compose '\7937' '\834' = Just '\7943' compose '\913' '\787' = Just '\7944' compose '\913' '\788' = Just '\7945' compose '\7944' '\768' = Just '\7946' compose '\7945' '\768' = Just '\7947' compose '\7944' '\769' = Just '\7948' compose '\7945' '\769' = Just '\7949' compose '\7944' '\834' = Just '\7950' compose '\7945' '\834' = Just '\7951' compose '\949' '\787' = Just '\7952' compose '\949' '\788' = Just '\7953' compose '\7952' '\768' = Just '\7954' compose '\7953' '\768' = Just '\7955' compose '\7952' '\769' = Just '\7956' compose '\7953' '\769' = Just '\7957' compose '\917' '\787' = Just '\7960' compose '\917' '\788' = Just '\7961' compose '\7960' '\768' = Just '\7962' compose '\7961' '\768' = Just '\7963' compose '\7960' '\769' = Just '\7964' compose '\7961' '\769' = Just '\7965' compose '\951' '\787' = Just '\7968' compose '\951' '\788' = Just '\7969' compose '\7968' '\768' = Just '\7970' compose '\7969' '\768' = Just '\7971' compose '\7968' '\769' = Just '\7972' compose '\7969' '\769' = Just '\7973' compose '\7968' '\834' = Just '\7974' compose '\7969' '\834' = Just '\7975' compose '\919' '\787' = Just '\7976' compose '\919' '\788' = Just '\7977' compose '\7976' '\768' = Just '\7978' compose '\7977' '\768' = Just '\7979' compose '\7976' '\769' = Just '\7980' compose '\7977' '\769' = Just '\7981' compose '\7976' '\834' = Just '\7982' compose '\7977' '\834' = Just '\7983' compose '\953' '\787' = Just '\7984' compose '\953' '\788' = Just '\7985' compose '\7984' '\768' = Just '\7986' compose '\7985' '\768' = Just '\7987' compose '\7984' '\769' = Just '\7988' compose '\7985' '\769' = Just '\7989' compose '\7984' '\834' = Just '\7990' compose '\7985' '\834' = Just '\7991' compose '\921' '\787' = Just '\7992' compose '\921' '\788' = Just '\7993' compose '\7992' '\768' = Just '\7994' compose '\7993' '\768' = Just '\7995' compose '\7992' '\769' = Just '\7996' compose '\7993' '\769' = Just '\7997' compose '\7992' '\834' = Just '\7998' compose '\7993' '\834' = Just '\7999' compose '\959' '\787' = Just '\8000' compose '\959' '\788' = Just '\8001' compose '\8000' '\768' = Just '\8002' compose '\8001' '\768' = Just '\8003' compose '\8000' '\769' = Just '\8004' compose '\8001' '\769' = Just '\8005' compose '\927' '\787' = Just '\8008' compose '\927' '\788' = Just '\8009' compose '\8008' '\768' = Just '\8010' compose '\8009' '\768' = Just '\8011' compose '\8008' '\769' = Just '\8012' compose '\8009' '\769' = Just '\8013' compose '\965' '\787' = Just '\8016' compose '\965' '\788' = Just '\8017' compose '\8016' '\768' = Just '\8018' compose '\8017' '\768' = Just '\8019' compose '\8016' '\769' = Just '\8020' compose '\8017' '\769' = Just '\8021' compose '\8016' '\834' = Just '\8022' compose '\8017' '\834' = Just '\8023' compose '\933' '\788' = Just '\8025' compose '\8025' '\768' = Just '\8027' compose '\8025' '\769' = Just '\8029' compose '\8025' '\834' = Just '\8031' compose '\969' '\787' = Just '\8032' compose '\969' '\788' = Just '\8033' compose '\8032' '\768' = Just '\8034' compose '\8033' '\768' = Just '\8035' compose '\8032' '\769' = Just '\8036' compose '\8033' '\769' = Just '\8037' compose '\8032' '\834' = Just '\8038' compose '\8033' '\834' = Just '\8039' compose '\937' '\787' = Just '\8040' compose '\937' '\788' = Just '\8041' compose '\8040' '\768' = Just '\8042' compose '\8041' '\768' = Just '\8043' compose '\8040' '\769' = Just '\8044' compose '\8041' '\769' = Just '\8045' compose '\8040' '\834' = Just '\8046' compose '\8041' '\834' = Just '\8047' compose '\945' '\768' = Just '\8048' compose '\949' '\768' = Just '\8050' compose '\951' '\768' = Just '\8052' compose '\953' '\768' = Just '\8054' compose '\959' '\768' = Just '\8056' compose '\965' '\768' = Just '\8058' compose '\969' '\768' = Just '\8060' compose '\7936' '\837' = Just '\8064' compose '\7937' '\837' = Just '\8065' compose '\7938' '\837' = Just '\8066' compose '\7939' '\837' = Just '\8067' compose '\7940' '\837' = Just '\8068' compose '\7941' '\837' = Just '\8069' compose '\7942' '\837' = Just '\8070' compose '\7943' '\837' = Just '\8071' compose '\7944' '\837' = Just '\8072' compose '\7945' '\837' = Just '\8073' compose '\7946' '\837' = Just '\8074' compose '\7947' '\837' = Just '\8075' compose '\7948' '\837' = Just '\8076' compose '\7949' '\837' = Just '\8077' compose '\7950' '\837' = Just '\8078' compose '\7951' '\837' = Just '\8079' compose '\7968' '\837' = Just '\8080' compose '\7969' '\837' = Just '\8081' compose '\7970' '\837' = Just '\8082' compose '\7971' '\837' = Just '\8083' compose '\7972' '\837' = Just '\8084' compose '\7973' '\837' = Just '\8085' compose '\7974' '\837' = Just '\8086' compose '\7975' '\837' = Just '\8087' compose '\7976' '\837' = Just '\8088' compose '\7977' '\837' = Just '\8089' compose '\7978' '\837' = Just '\8090' compose '\7979' '\837' = Just '\8091' compose '\7980' '\837' = Just '\8092' compose '\7981' '\837' = Just '\8093' compose '\7982' '\837' = Just '\8094' compose '\7983' '\837' = Just '\8095' compose '\8032' '\837' = Just '\8096' compose '\8033' '\837' = Just '\8097' compose '\8034' '\837' = Just '\8098' compose '\8035' '\837' = Just '\8099' compose '\8036' '\837' = Just '\8100' compose '\8037' '\837' = Just '\8101' compose '\8038' '\837' = Just '\8102' compose '\8039' '\837' = Just '\8103' compose '\8040' '\837' = Just '\8104' compose '\8041' '\837' = Just '\8105' compose '\8042' '\837' = Just '\8106' compose '\8043' '\837' = Just '\8107' compose '\8044' '\837' = Just '\8108' compose '\8045' '\837' = Just '\8109' compose '\8046' '\837' = Just '\8110' compose '\8047' '\837' = Just '\8111' compose '\945' '\774' = Just '\8112' compose '\945' '\772' = Just '\8113' compose '\8048' '\837' = Just '\8114' compose '\945' '\837' = Just '\8115' compose '\940' '\837' = Just '\8116' compose '\945' '\834' = Just '\8118' compose '\8118' '\837' = Just '\8119' compose '\913' '\774' = Just '\8120' compose '\913' '\772' = Just '\8121' compose '\913' '\768' = Just '\8122' compose '\913' '\837' = Just '\8124' compose '\168' '\834' = Just '\8129' compose '\8052' '\837' = Just '\8130' compose '\951' '\837' = Just '\8131' compose '\942' '\837' = Just '\8132' compose '\951' '\834' = Just '\8134' compose '\8134' '\837' = Just '\8135' compose '\917' '\768' = Just '\8136' compose '\919' '\768' = Just '\8138' compose '\919' '\837' = Just '\8140' compose '\8127' '\768' = Just '\8141' compose '\8127' '\769' = Just '\8142' compose '\8127' '\834' = Just '\8143' compose '\953' '\774' = Just '\8144' compose '\953' '\772' = Just '\8145' compose '\970' '\768' = Just '\8146' compose '\953' '\834' = Just '\8150' compose '\970' '\834' = Just '\8151' compose '\921' '\774' = Just '\8152' compose '\921' '\772' = Just '\8153' compose '\921' '\768' = Just '\8154' compose '\8190' '\768' = Just '\8157' compose '\8190' '\769' = Just '\8158' compose '\8190' '\834' = Just '\8159' compose '\965' '\774' = Just '\8160' compose '\965' '\772' = Just '\8161' compose '\971' '\768' = Just '\8162' compose '\961' '\787' = Just '\8164' compose '\961' '\788' = Just '\8165' compose '\965' '\834' = Just '\8166' compose '\971' '\834' = Just '\8167' compose '\933' '\774' = Just '\8168' compose '\933' '\772' = Just '\8169' compose '\933' '\768' = Just '\8170' compose '\929' '\788' = Just '\8172' compose '\168' '\768' = Just '\8173' compose '\8060' '\837' = Just '\8178' compose '\969' '\837' = Just '\8179' compose '\974' '\837' = Just '\8180' compose '\969' '\834' = Just '\8182' compose '\8182' '\837' = Just '\8183' compose '\927' '\768' = Just '\8184' compose '\937' '\768' = Just '\8186' compose '\937' '\837' = Just '\8188' compose '\8592' '\824' = Just '\8602' compose '\8594' '\824' = Just '\8603' compose '\8596' '\824' = Just '\8622' compose '\8656' '\824' = Just '\8653' compose '\8660' '\824' = Just '\8654' compose '\8658' '\824' = Just '\8655' compose '\8707' '\824' = Just '\8708' compose '\8712' '\824' = Just '\8713' compose '\8715' '\824' = Just '\8716' compose '\8739' '\824' = Just '\8740' compose '\8741' '\824' = Just '\8742' compose '\8764' '\824' = Just '\8769' compose '\8771' '\824' = Just '\8772' compose '\8773' '\824' = Just '\8775' compose '\8776' '\824' = Just '\8777' compose '=' '\824' = Just '\8800' compose '\8801' '\824' = Just '\8802' compose '\8781' '\824' = Just '\8813' compose '<' '\824' = Just '\8814' compose '>' '\824' = Just '\8815' compose '\8804' '\824' = Just '\8816' compose '\8805' '\824' = Just '\8817' compose '\8818' '\824' = Just '\8820' compose '\8819' '\824' = Just '\8821' compose '\8822' '\824' = Just '\8824' compose '\8823' '\824' = Just '\8825' compose '\8826' '\824' = Just '\8832' compose '\8827' '\824' = Just '\8833' compose '\8834' '\824' = Just '\8836' compose '\8835' '\824' = Just '\8837' compose '\8838' '\824' = Just '\8840' compose '\8839' '\824' = Just '\8841' compose '\8866' '\824' = Just '\8876' compose '\8872' '\824' = Just '\8877' compose '\8873' '\824' = Just '\8878' compose '\8875' '\824' = Just '\8879' compose '\8828' '\824' = Just '\8928' compose '\8829' '\824' = Just '\8929' compose '\8849' '\824' = Just '\8930' compose '\8850' '\824' = Just '\8931' compose '\8882' '\824' = Just '\8938' compose '\8883' '\824' = Just '\8939' compose '\8884' '\824' = Just '\8940' compose '\8885' '\824' = Just '\8941' compose '\12363' '\12441' = Just '\12364' compose '\12365' '\12441' = Just '\12366' compose '\12367' '\12441' = Just '\12368' compose '\12369' '\12441' = Just '\12370' compose '\12371' '\12441' = Just '\12372' compose '\12373' '\12441' = Just '\12374' compose '\12375' '\12441' = Just '\12376' compose '\12377' '\12441' = Just '\12378' compose '\12379' '\12441' = Just '\12380' compose '\12381' '\12441' = Just '\12382' compose '\12383' '\12441' = Just '\12384' compose '\12385' '\12441' = Just '\12386' compose '\12388' '\12441' = Just '\12389' compose '\12390' '\12441' = Just '\12391' compose '\12392' '\12441' = Just '\12393' compose '\12399' '\12441' = Just '\12400' compose '\12399' '\12442' = Just '\12401' compose '\12402' '\12441' = Just '\12403' compose '\12402' '\12442' = Just '\12404' compose '\12405' '\12441' = Just '\12406' compose '\12405' '\12442' = Just '\12407' compose '\12408' '\12441' = Just '\12409' compose '\12408' '\12442' = Just '\12410' compose '\12411' '\12441' = Just '\12412' compose '\12411' '\12442' = Just '\12413' compose '\12358' '\12441' = Just '\12436' compose '\12445' '\12441' = Just '\12446' compose '\12459' '\12441' = Just '\12460' compose '\12461' '\12441' = Just '\12462' compose '\12463' '\12441' = Just '\12464' compose '\12465' '\12441' = Just '\12466' compose '\12467' '\12441' = Just '\12468' compose '\12469' '\12441' = Just '\12470' compose '\12471' '\12441' = Just '\12472' compose '\12473' '\12441' = Just '\12474' compose '\12475' '\12441' = Just '\12476' compose '\12477' '\12441' = Just '\12478' compose '\12479' '\12441' = Just '\12480' compose '\12481' '\12441' = Just '\12482' compose '\12484' '\12441' = Just '\12485' compose '\12486' '\12441' = Just '\12487' compose '\12488' '\12441' = Just '\12489' compose '\12495' '\12441' = Just '\12496' compose '\12495' '\12442' = Just '\12497' compose '\12498' '\12441' = Just '\12499' compose '\12498' '\12442' = Just '\12500' compose '\12501' '\12441' = Just '\12502' compose '\12501' '\12442' = Just '\12503' compose '\12504' '\12441' = Just '\12505' compose '\12504' '\12442' = Just '\12506' compose '\12507' '\12441' = Just '\12508' compose '\12507' '\12442' = Just '\12509' compose '\12454' '\12441' = Just '\12532' compose '\12527' '\12441' = Just '\12535' compose '\12528' '\12441' = Just '\12536' compose '\12529' '\12441' = Just '\12537' compose '\12530' '\12441' = Just '\12538' compose '\12541' '\12441' = Just '\12542' compose '\69785' '\69818' = Just '\69786' compose '\69787' '\69818' = Just '\69788' compose '\69797' '\69818' = Just '\69803' compose '\69937' '\69927' = Just '\69934' compose '\69938' '\69927' = Just '\69935' compose '\70471' '\70462' = Just '\70475' compose '\70471' '\70487' = Just '\70476' compose '\70841' '\70842' = Just '\70843' compose '\70841' '\70832' = Just '\70844' compose '\70841' '\70845' = Just '\70846' compose '\71096' '\71087' = Just '\71098' compose '\71097' '\71087' = Just '\71099' compose '\71989' '\71984' = Just '\71992' compose _ _ = Nothing composeStarters :: Char -> Char -> Maybe Char composeStarters '\2503' '\2494' = Just '\2507' composeStarters '\2503' '\2519' = Just '\2508' composeStarters '\2887' '\2902' = Just '\2888' composeStarters '\2887' '\2878' = Just '\2891' composeStarters '\2887' '\2903' = Just '\2892' composeStarters '\2962' '\3031' = Just '\2964' composeStarters '\3014' '\3006' = Just '\3018' composeStarters '\3015' '\3006' = Just '\3019' composeStarters '\3014' '\3031' = Just '\3020' composeStarters '\3263' '\3285' = Just '\3264' composeStarters '\3270' '\3285' = Just '\3271' composeStarters '\3270' '\3286' = Just '\3272' composeStarters '\3270' '\3266' = Just '\3274' composeStarters '\3274' '\3285' = Just '\3275' composeStarters '\3398' '\3390' = Just '\3402' composeStarters '\3399' '\3390' = Just '\3403' composeStarters '\3398' '\3415' = Just '\3404' composeStarters '\3545' '\3535' = Just '\3548' composeStarters '\3545' '\3551' = Just '\3550' composeStarters '\4133' '\4142' = Just '\4134' composeStarters '\6917' '\6965' = Just '\6918' composeStarters '\6919' '\6965' = Just '\6920' composeStarters '\6921' '\6965' = Just '\6922' composeStarters '\6923' '\6965' = Just '\6924' composeStarters '\6925' '\6965' = Just '\6926' composeStarters '\6929' '\6965' = Just '\6930' composeStarters '\6970' '\6965' = Just '\6971' composeStarters '\6972' '\6965' = Just '\6973' composeStarters '\6974' '\6965' = Just '\6976' composeStarters '\6975' '\6965' = Just '\6977' composeStarters '\6978' '\6965' = Just '\6979' composeStarters '\69937' '\69927' = Just '\69934' composeStarters '\69938' '\69927' = Just '\69935' composeStarters '\70471' '\70462' = Just '\70475' composeStarters '\70471' '\70487' = Just '\70476' composeStarters '\70841' '\70842' = Just '\70843' composeStarters '\70841' '\70832' = Just '\70844' composeStarters '\70841' '\70845' = Just '\70846' composeStarters '\71096' '\71087' = Just '\71098' composeStarters '\71097' '\71087' = Just '\71099' composeStarters '\71989' '\71984' = Just '\71992' composeStarters _ _ = Nothing {-# INLINE isSecondStarter #-} isSecondStarter :: Char -> Bool isSecondStarter c = c >= '\x09BE' && c <= '\x11930' && lookupIsSecondStarterBitMap (ord c) {-# INLINE lookupIsSecondStarterBitMap #-} lookupIsSecondStarterBitMap :: Int -> Bool lookupIsSecondStarterBitMap n = lookupBit data# ( lookupWord16AsInt offsets1# ( lookupWord8AsInt offsets2# ( n `shiftR` 11 ) + ((n `shiftR` 9) .&. maskOffsets) ) + ((n `shiftR` 3) .&. maskData) ) (n .&. 7) where maskData = (1 `shiftL` 6) - 1 maskOffsets = (1 `shiftL` 2) - 1 !(Ptr data#) = isSecondStarterDataBitMap !(Ptr offsets1#) = isSecondStarterOffsets1BitMap !(Ptr offsets2#) = isSecondStarterOffsets2BitMap isSecondStarterDataBitMap :: Ptr Int8 isSecondStarterDataBitMap = Ptr "\0\0\0\0\0\64\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\64\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\ \\96\0\0\0\0\0\0\0\0\0\0\0\0\64\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\128\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\128\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\32\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\64\0\0\192\0\0\0\0\0\0\0\0\0\0\0\0\64\0\0\128\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\1\36\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\128\0\0\ \\0\0\0\0\0\0\0\0"# isSecondStarterOffsets1BitMap :: Ptr Word16 isSecondStarterOffsets1BitMap = Ptr "\15\0\214\0\74\0\6\0\6\0\6\0\6\0\0\0\6\0\6\0\6\0\175\0\6\0\6\0\138\0\31\0\38\1\6\0\175\0\6\0\6\0\22\1"# isSecondStarterOffsets2BitMap :: Ptr Word8 isSecondStarterOffsets2BitMap = Ptr "\3\0\7\10\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\14\21"# unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/Decomposable.hs0000644000000000000000000001327307346545000024147 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.Decomposable -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.Decomposable (isDecomposable) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16, Word8) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord16AsInt, lookupWord8AsInt) {-# INLINE isDecomposable #-} isDecomposable :: Char -> Bool isDecomposable c = c >= '\x00C0' && c <= '\x2FA1D' && lookupIsDecomposableBitMap (ord c) {-# INLINE lookupIsDecomposableBitMap #-} lookupIsDecomposableBitMap :: Int -> Bool lookupIsDecomposableBitMap n = lookupBit data# ( lookupWord16AsInt offsets1# ( lookupWord8AsInt offsets2# ( n `shiftR` 12 ) + ((n `shiftR` 9) .&. maskOffsets) ) + ((n `shiftR` 3) .&. maskData) ) (n .&. 7) where maskData = (1 `shiftL` 6) - 1 maskOffsets = (1 `shiftL` 3) - 1 !(Ptr data#) = isDecomposableDataBitMap !(Ptr offsets1#) = isDecomposableOffsets1BitMap !(Ptr offsets2#) = isDecomposableOffsets2BitMap isDecomposableDataBitMap :: Ptr Int8 isDecomposableDataBitMap = Ptr "\16\18\0\0\80\0\0\0\146\2\0\0\5\224\51\3\51\3\0\0\0\240\0\0\0\0\0\0\15\60\0\0\0\0\0\0\0\6\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\88\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\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\20\0\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\192\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\24\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\129\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\28\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\116\0\0\0\0\255\63\229\127\101\252\255\255\ \\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\0\0\0\160\0\252\127\95\219\127\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\20\0\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\192\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\24\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\88\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\12\0\0\0\0\0\0\0\0\0\0\0\0\64\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\ \\192\31\0\0\0\0\0\0\0\0\0\0\248\1\0\0\0\0\0\0\0\0\0\0\0\64\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\8\32\132\16\0\2\104\1\2\0\8\32\132\16\0\ \\2\0\0\0\0\0\0\0\0\0\0\0\0\124\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\8\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\18\0\0\0\0\255\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\176\0\0\0\0\ \\139\112\0\2\0\0\0\2\0\0\139\112\0\0\192\0\0\0\0\0\0\0\0\0\6\0\207\252\252\252\63\3\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\16\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\64\85\4\0\0\0\0\40\11\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\191\255\126\62\191\255\126\190\255\255\252\255\63\255\241\126\248\241\243\255\63\255\255\127\0\0\0\0\3\128\1\0\0\224\255\223\207\255\ \\49\255\3\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\64\12\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\12\0\64\0\0\0\224\0\0\0\0\0\0\0\0\0\80\85\85\165\2\219\54\0\0\16\64\0\80\85\85\165\2\219\54\0\0\144\71\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\11\255\255\255\255\255\255\255\255\255\255\255\ \\3\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\95\222\255\207\239\255\255\220\63\255\63\229\127\101\252\255\255\255\255\255\255\255\63\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\0\0\0\160\0\252\127\95\219\127\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\207\192\255\15\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\27\0\0\0\0\0\16\64\224\215\1\0\0\252\1\0\0\124\24\0\0\ \\0\0\0\0\72\0\0\0\0\78\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\25\0\48\0\0\0\0\0\0\16\0\ \\0\0\0\0\0\28\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\18\0\0\0\0\255\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\24\0\176\0\0\0\0"# isDecomposableOffsets1BitMap :: Ptr Word16 isDecomposableOffsets1BitMap = Ptr "\242\3\230\1\230\1\230\1\230\1\230\1\230\1\230\1\230\1\18\4\36\1\230\1\230\1\251\1\230\1\230\1\230\1\230\1\230\1\230\1\230\1\50\4\46\1\135\0\173\0\79\0\230\1\38\0\230\1\230\1\230\1\230\1\18\4\36\1\230\1\230\1\120\3\9\5\238\2\147\2\174\2\68\5\228\0\83\2\225\1\230\1\230\1\230\1\230\1\79\3\ \\230\1\95\4\184\3\0\0\230\1\230\1\230\1\19\3\230\1\230\1"# isDecomposableOffsets2BitMap :: Ptr Word8 isDecomposableOffsets2BitMap = Ptr "\36\44\52\0\1\1\1\1\1\1\1\1\1\1\1\5\1\23\1\1\1\1\1\1\1\1\1\1\1\13\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\17"# unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/DecomposableK.hs0000644000000000000000000002144507346545000024262 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.DecomposableK -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.DecomposableK (isDecomposable) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16, Word8) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupBit, lookupWord16AsInt, lookupWord8AsInt) {-# INLINE isDecomposable #-} isDecomposable :: Char -> Bool isDecomposable c = c >= '\x00A0' && c <= '\x2FA1D' && lookupIsDecomposableBitMap (ord c) {-# INLINE lookupIsDecomposableBitMap #-} lookupIsDecomposableBitMap :: Int -> Bool lookupIsDecomposableBitMap n = lookupBit data# ( lookupWord16AsInt offsets1# ( lookupWord8AsInt offsets2# ( n `shiftR` 12 ) + ((n `shiftR` 9) .&. maskOffsets) ) + ((n `shiftR` 3) .&. maskData) ) (n .&. 7) where maskData = (1 `shiftL` 6) - 1 maskOffsets = (1 `shiftL` 3) - 1 !(Ptr data#) = isDecomposableDataBitMap !(Ptr offsets1#) = isDecomposableOffsets1BitMap !(Ptr offsets2#) = isDecomposableOffsets2BitMap isDecomposableDataBitMap :: Ptr Int8 isDecomposableDataBitMap = Ptr "\1\0\0\0\0\0\64\7\0\80\85\85\165\2\219\54\0\0\16\216\0\80\85\85\165\2\219\54\0\0\144\199\0\0\0\0\0\0\254\255\255\255\255\255\255\255\255\255\255\127\ \\252\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\8\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\48\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\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\8\0\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\0\0\0\124\0\0\0\0\0\0\0\0\0\224\1\0\0\0\0\0\0\0\0\5\0\8\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\18\0\0\0\0\255\0\0\0\0\0\0\0\0\0\0\0\0\ \\0\24\0\176\0\0\0\0\64\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\16\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\ \\190\255\255\255\255\255\253\7\0\0\0\0\0\0\0\0\0\16\0\0\0\0\0\0\0\0\0\0\0\0\112\0\0\0\0\0\0\0\0\0\0\0\0\16\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\192\31\0\0\0\0\0\0\0\0\0\0\248\1\0\0\0\0\0\0\0\8\0\ \\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\0\0\0\0\48\0\0\0\0\0\16\0\0\0\0\0\0\8\32\132\16\0\2\232\3\2\0\8\32\132\16\0\2\0\0\ \\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\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\64\85\4\0\0\0\0\40\11\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\112\255\247\255\191\255\255\255\7\0\1\0\0\0\248\255\255\255\255\0\0\0\0\0\0\0\0\16\18\0\0\80\176\1\0\146\2\0\0\5\224\51\ \\3\51\3\0\0\0\240\0\0\0\0\0\0\15\60\0\0\0\0\0\0\0\6\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\88\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\12\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\24\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\88\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\12\0\0\0\0\0\0\0\0\7\0\255\255\255\255\255\15\255\1\3\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\255\ \\3\0\0\255\255\159\255\247\255\127\15\215\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\31\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\127\252\252\252\28\127\127\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\7\130\0\112\128\216\80\128\3\128\128\0\0\243\255\255\127\255\31\0\1\0\0\0\0\ \\0\0\0\0\0\0\239\254\111\62\87\189\251\251\225\3\255\255\255\255\255\255\0\2\0\12\0\64\0\0\0\224\0\0\0\0\0\0\255\255\255\255\255\255\255\63\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\64\85\4\0\0\0\0\40\11\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\240\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\133\60\119\191\255\126\62\191\255\126\190\255\255\252\ \\255\63\255\253\254\249\243\243\255\63\255\255\255\0\0\0\0\3\128\1\0\240\255\255\223\207\255\63\255\255\255\207\192\255\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ \\255\1\0\0\0\63\31\0\0\0\0\0\0\0\0\0\0\0\27\0\0\0\0\0\16\68\240\215\1\0\0\252\1\0\0\124\127\0\0\0\55\2\239\255\255\255\150\254\247\10\ \\132\234\150\170\150\247\247\94\255\251\255\15\238\251\255\15\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\255\7\255\255\255\127\255\255\255\255\0\0\0\28\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\48\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\28\3\7\0\255\255\255\255\255\15\255\1\3\ \\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\255\7\255\255\255\127\255\255\255\255\0\0\0\28\0\0\0\0\1\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\ \\129\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\28\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\116\0\0\0\0\139\112\0\2\0\0\0\2\0\0\ \\139\112\0\0\192\0\0\0\0\0\0\0\0\0\6\0\207\252\252\252\63\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\ \\0\0\0\0\0\0\0\0\20\0\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\192\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\24\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\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\0\0\255\255\255\255\255\255\255\ \\255\252\255\255\255\255\255\255\0\0\0\0\0\255\31\255\63\229\127\101\252\255\255\255\255\255\255\255\63\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\0\127\0\248\ \\160\255\255\127\95\219\255\255\255\255\255\255\255\255\255\255\255\255\255\3\0\0\0\248\255\255\255\255\255\127\255\255\255\255\255\0\255\255\255\255\255\127\255\255\255\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\255\255\255\255\255\255\255\255\223\ \\100\222\255\235\239\255\255\255\255\255\255\255\191\231\223\223\255\255\255\123\95\252\253\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\63\255\255\255\255\255\ \\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\207\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \\255\15\255\255\255\255\255\255\255\255\255\255\255\3\255\255\63\63\255\255\255\255\63\63\255\170\255\255\255\63\255\255\255\255\255\255\223\255\223\255\207\239\255\255\220\127\0\0\0\0\ \\0\0\72\0\0\0\0\78\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\25\0\48\0\0\0\0\0\0\16\0\0\0\ \\0\0\0\28\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\18\0\0\0\0\255\0\0\ \\0\0\0\0\0\0\0\0\0\0\0\24\0\176\0\0\0\0"# isDecomposableOffsets1BitMap :: Ptr Word16 isDecomposableOffsets1BitMap = Ptr "\47\7\102\3\46\3\80\1\188\1\80\1\80\1\80\1\96\1\80\1\80\1\80\1\80\1\39\6\80\1\39\5\80\1\80\1\80\1\80\1\127\7\223\7\159\7\23\4\0\0\28\8\80\1\80\1\80\1\80\1\80\1\80\1\80\1\80\1\87\4\107\0\244\5\208\3\80\1\80\1\80\1\219\3\80\1\80\1\80\1\96\1\80\1\80\1\80\1\80\1\ \\127\7\223\7\159\7\23\4\228\1\80\1\82\8\126\8\80\1\80\1\80\1\80\1\80\1\80\1\80\1\80\1\39\6\80\1\39\5\80\1\80\1\85\5\148\5\254\6\217\0\244\0\248\8\190\6\30\2\48\1\80\1\80\1\80\1\80\1\118\2\159\2\184\8\150\4\223\2\86\2\80\1\80\1\160\1\111\0\52\0\208\4\80\1\80\1\80\1\80\1\ \\80\1\80\1\212\5"# isDecomposableOffsets2BitMap :: Ptr Word8 isDecomposableOffsets2BitMap = Ptr "\71\79\87\24\26\26\26\26\26\26\10\26\26\26\26\16\5\0\26\26\26\26\26\26\26\26\26\26\26\54\95\36\26\26\26\26\26\26\26\26\26\26\26\26\26\26\26\30"# unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/Decompositions.hs0000644000000000000000000013762507346545000024561 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.Decompositions -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.Decompositions (decompose) where {-# NOINLINE decompose #-} decompose :: Char -> [Char] decompose = \case '\192' -> "A\768" '\193' -> "A\769" '\194' -> "A\770" '\195' -> "A\771" '\196' -> "A\776" '\197' -> "A\778" '\199' -> "C\807" '\200' -> "E\768" '\201' -> "E\769" '\202' -> "E\770" '\203' -> "E\776" '\204' -> "I\768" '\205' -> "I\769" '\206' -> "I\770" '\207' -> "I\776" '\209' -> "N\771" '\210' -> "O\768" '\211' -> "O\769" '\212' -> "O\770" '\213' -> "O\771" '\214' -> "O\776" '\217' -> "U\768" '\218' -> "U\769" '\219' -> "U\770" '\220' -> "U\776" '\221' -> "Y\769" '\224' -> "a\768" '\225' -> "a\769" '\226' -> "a\770" '\227' -> "a\771" '\228' -> "a\776" '\229' -> "a\778" '\231' -> "c\807" '\232' -> "e\768" '\233' -> "e\769" '\234' -> "e\770" '\235' -> "e\776" '\236' -> "i\768" '\237' -> "i\769" '\238' -> "i\770" '\239' -> "i\776" '\241' -> "n\771" '\242' -> "o\768" '\243' -> "o\769" '\244' -> "o\770" '\245' -> "o\771" '\246' -> "o\776" '\249' -> "u\768" '\250' -> "u\769" '\251' -> "u\770" '\252' -> "u\776" '\253' -> "y\769" '\255' -> "y\776" '\256' -> "A\772" '\257' -> "a\772" '\258' -> "A\774" '\259' -> "a\774" '\260' -> "A\808" '\261' -> "a\808" '\262' -> "C\769" '\263' -> "c\769" '\264' -> "C\770" '\265' -> "c\770" '\266' -> "C\775" '\267' -> "c\775" '\268' -> "C\780" '\269' -> "c\780" '\270' -> "D\780" '\271' -> "d\780" '\274' -> "E\772" '\275' -> "e\772" '\276' -> "E\774" '\277' -> "e\774" '\278' -> "E\775" '\279' -> "e\775" '\280' -> "E\808" '\281' -> "e\808" '\282' -> "E\780" '\283' -> "e\780" '\284' -> "G\770" '\285' -> "g\770" '\286' -> "G\774" '\287' -> "g\774" '\288' -> "G\775" '\289' -> "g\775" '\290' -> "G\807" '\291' -> "g\807" '\292' -> "H\770" '\293' -> "h\770" '\296' -> "I\771" '\297' -> "i\771" '\298' -> "I\772" '\299' -> "i\772" '\300' -> "I\774" '\301' -> "i\774" '\302' -> "I\808" '\303' -> "i\808" '\304' -> "I\775" '\308' -> "J\770" '\309' -> "j\770" '\310' -> "K\807" '\311' -> "k\807" '\313' -> "L\769" '\314' -> "l\769" '\315' -> "L\807" '\316' -> "l\807" '\317' -> "L\780" '\318' -> "l\780" '\323' -> "N\769" '\324' -> "n\769" '\325' -> "N\807" '\326' -> "n\807" '\327' -> "N\780" '\328' -> "n\780" '\332' -> "O\772" '\333' -> "o\772" '\334' -> "O\774" '\335' -> "o\774" '\336' -> "O\779" '\337' -> "o\779" '\340' -> "R\769" '\341' -> "r\769" '\342' -> "R\807" '\343' -> "r\807" '\344' -> "R\780" '\345' -> "r\780" '\346' -> "S\769" '\347' -> "s\769" '\348' -> "S\770" '\349' -> "s\770" '\350' -> "S\807" '\351' -> "s\807" '\352' -> "S\780" '\353' -> "s\780" '\354' -> "T\807" '\355' -> "t\807" '\356' -> "T\780" '\357' -> "t\780" '\360' -> "U\771" '\361' -> "u\771" '\362' -> "U\772" '\363' -> "u\772" '\364' -> "U\774" '\365' -> "u\774" '\366' -> "U\778" '\367' -> "u\778" '\368' -> "U\779" '\369' -> "u\779" '\370' -> "U\808" '\371' -> "u\808" '\372' -> "W\770" '\373' -> "w\770" '\374' -> "Y\770" '\375' -> "y\770" '\376' -> "Y\776" '\377' -> "Z\769" '\378' -> "z\769" '\379' -> "Z\775" '\380' -> "z\775" '\381' -> "Z\780" '\382' -> "z\780" '\416' -> "O\795" '\417' -> "o\795" '\431' -> "U\795" '\432' -> "u\795" '\461' -> "A\780" '\462' -> "a\780" '\463' -> "I\780" '\464' -> "i\780" '\465' -> "O\780" '\466' -> "o\780" '\467' -> "U\780" '\468' -> "u\780" '\469' -> "\220\772" '\470' -> "\252\772" '\471' -> "\220\769" '\472' -> "\252\769" '\473' -> "\220\780" '\474' -> "\252\780" '\475' -> "\220\768" '\476' -> "\252\768" '\478' -> "\196\772" '\479' -> "\228\772" '\480' -> "\550\772" '\481' -> "\551\772" '\482' -> "\198\772" '\483' -> "\230\772" '\486' -> "G\780" '\487' -> "g\780" '\488' -> "K\780" '\489' -> "k\780" '\490' -> "O\808" '\491' -> "o\808" '\492' -> "\490\772" '\493' -> "\491\772" '\494' -> "\439\780" '\495' -> "\658\780" '\496' -> "j\780" '\500' -> "G\769" '\501' -> "g\769" '\504' -> "N\768" '\505' -> "n\768" '\506' -> "\197\769" '\507' -> "\229\769" '\508' -> "\198\769" '\509' -> "\230\769" '\510' -> "\216\769" '\511' -> "\248\769" '\512' -> "A\783" '\513' -> "a\783" '\514' -> "A\785" '\515' -> "a\785" '\516' -> "E\783" '\517' -> "e\783" '\518' -> "E\785" '\519' -> "e\785" '\520' -> "I\783" '\521' -> "i\783" '\522' -> "I\785" '\523' -> "i\785" '\524' -> "O\783" '\525' -> "o\783" '\526' -> "O\785" '\527' -> "o\785" '\528' -> "R\783" '\529' -> "r\783" '\530' -> "R\785" '\531' -> "r\785" '\532' -> "U\783" '\533' -> "u\783" '\534' -> "U\785" '\535' -> "u\785" '\536' -> "S\806" '\537' -> "s\806" '\538' -> "T\806" '\539' -> "t\806" '\542' -> "H\780" '\543' -> "h\780" '\550' -> "A\775" '\551' -> "a\775" '\552' -> "E\807" '\553' -> "e\807" '\554' -> "\214\772" '\555' -> "\246\772" '\556' -> "\213\772" '\557' -> "\245\772" '\558' -> "O\775" '\559' -> "o\775" '\560' -> "\558\772" '\561' -> "\559\772" '\562' -> "Y\772" '\563' -> "y\772" '\832' -> "\768" '\833' -> "\769" '\835' -> "\787" '\836' -> "\776\769" '\884' -> "\697" '\894' -> ";" '\901' -> "\168\769" '\902' -> "\913\769" '\903' -> "\183" '\904' -> "\917\769" '\905' -> "\919\769" '\906' -> "\921\769" '\908' -> "\927\769" '\910' -> "\933\769" '\911' -> "\937\769" '\912' -> "\970\769" '\938' -> "\921\776" '\939' -> "\933\776" '\940' -> "\945\769" '\941' -> "\949\769" '\942' -> "\951\769" '\943' -> "\953\769" '\944' -> "\971\769" '\970' -> "\953\776" '\971' -> "\965\776" '\972' -> "\959\769" '\973' -> "\965\769" '\974' -> "\969\769" '\979' -> "\978\769" '\980' -> "\978\776" '\1024' -> "\1045\768" '\1025' -> "\1045\776" '\1027' -> "\1043\769" '\1031' -> "\1030\776" '\1036' -> "\1050\769" '\1037' -> "\1048\768" '\1038' -> "\1059\774" '\1049' -> "\1048\774" '\1081' -> "\1080\774" '\1104' -> "\1077\768" '\1105' -> "\1077\776" '\1107' -> "\1075\769" '\1111' -> "\1110\776" '\1116' -> "\1082\769" '\1117' -> "\1080\768" '\1118' -> "\1091\774" '\1142' -> "\1140\783" '\1143' -> "\1141\783" '\1217' -> "\1046\774" '\1218' -> "\1078\774" '\1232' -> "\1040\774" '\1233' -> "\1072\774" '\1234' -> "\1040\776" '\1235' -> "\1072\776" '\1238' -> "\1045\774" '\1239' -> "\1077\774" '\1242' -> "\1240\776" '\1243' -> "\1241\776" '\1244' -> "\1046\776" '\1245' -> "\1078\776" '\1246' -> "\1047\776" '\1247' -> "\1079\776" '\1250' -> "\1048\772" '\1251' -> "\1080\772" '\1252' -> "\1048\776" '\1253' -> "\1080\776" '\1254' -> "\1054\776" '\1255' -> "\1086\776" '\1258' -> "\1256\776" '\1259' -> "\1257\776" '\1260' -> "\1069\776" '\1261' -> "\1101\776" '\1262' -> "\1059\772" '\1263' -> "\1091\772" '\1264' -> "\1059\776" '\1265' -> "\1091\776" '\1266' -> "\1059\779" '\1267' -> "\1091\779" '\1268' -> "\1063\776" '\1269' -> "\1095\776" '\1272' -> "\1067\776" '\1273' -> "\1099\776" '\1570' -> "\1575\1619" '\1571' -> "\1575\1620" '\1572' -> "\1608\1620" '\1573' -> "\1575\1621" '\1574' -> "\1610\1620" '\1728' -> "\1749\1620" '\1730' -> "\1729\1620" '\1747' -> "\1746\1620" '\2345' -> "\2344\2364" '\2353' -> "\2352\2364" '\2356' -> "\2355\2364" '\2392' -> "\2325\2364" '\2393' -> "\2326\2364" '\2394' -> "\2327\2364" '\2395' -> "\2332\2364" '\2396' -> "\2337\2364" '\2397' -> "\2338\2364" '\2398' -> "\2347\2364" '\2399' -> "\2351\2364" '\2507' -> "\2503\2494" '\2508' -> "\2503\2519" '\2524' -> "\2465\2492" '\2525' -> "\2466\2492" '\2527' -> "\2479\2492" '\2611' -> "\2610\2620" '\2614' -> "\2616\2620" '\2649' -> "\2582\2620" '\2650' -> "\2583\2620" '\2651' -> "\2588\2620" '\2654' -> "\2603\2620" '\2888' -> "\2887\2902" '\2891' -> "\2887\2878" '\2892' -> "\2887\2903" '\2908' -> "\2849\2876" '\2909' -> "\2850\2876" '\2964' -> "\2962\3031" '\3018' -> "\3014\3006" '\3019' -> "\3015\3006" '\3020' -> "\3014\3031" '\3144' -> "\3142\3158" '\3264' -> "\3263\3285" '\3271' -> "\3270\3285" '\3272' -> "\3270\3286" '\3274' -> "\3270\3266" '\3275' -> "\3274\3285" '\3402' -> "\3398\3390" '\3403' -> "\3399\3390" '\3404' -> "\3398\3415" '\3546' -> "\3545\3530" '\3548' -> "\3545\3535" '\3549' -> "\3548\3530" '\3550' -> "\3545\3551" '\3907' -> "\3906\4023" '\3917' -> "\3916\4023" '\3922' -> "\3921\4023" '\3927' -> "\3926\4023" '\3932' -> "\3931\4023" '\3945' -> "\3904\4021" '\3955' -> "\3953\3954" '\3957' -> "\3953\3956" '\3958' -> "\4018\3968" '\3960' -> "\4019\3968" '\3969' -> "\3953\3968" '\3987' -> "\3986\4023" '\3997' -> "\3996\4023" '\4002' -> "\4001\4023" '\4007' -> "\4006\4023" '\4012' -> "\4011\4023" '\4025' -> "\3984\4021" '\4134' -> "\4133\4142" '\6918' -> "\6917\6965" '\6920' -> "\6919\6965" '\6922' -> "\6921\6965" '\6924' -> "\6923\6965" '\6926' -> "\6925\6965" '\6930' -> "\6929\6965" '\6971' -> "\6970\6965" '\6973' -> "\6972\6965" '\6976' -> "\6974\6965" '\6977' -> "\6975\6965" '\6979' -> "\6978\6965" '\7680' -> "A\805" '\7681' -> "a\805" '\7682' -> "B\775" '\7683' -> "b\775" '\7684' -> "B\803" '\7685' -> "b\803" '\7686' -> "B\817" '\7687' -> "b\817" '\7688' -> "\199\769" '\7689' -> "\231\769" '\7690' -> "D\775" '\7691' -> "d\775" '\7692' -> "D\803" '\7693' -> "d\803" '\7694' -> "D\817" '\7695' -> "d\817" '\7696' -> "D\807" '\7697' -> "d\807" '\7698' -> "D\813" '\7699' -> "d\813" '\7700' -> "\274\768" '\7701' -> "\275\768" '\7702' -> "\274\769" '\7703' -> "\275\769" '\7704' -> "E\813" '\7705' -> "e\813" '\7706' -> "E\816" '\7707' -> "e\816" '\7708' -> "\552\774" '\7709' -> "\553\774" '\7710' -> "F\775" '\7711' -> "f\775" '\7712' -> "G\772" '\7713' -> "g\772" '\7714' -> "H\775" '\7715' -> "h\775" '\7716' -> "H\803" '\7717' -> "h\803" '\7718' -> "H\776" '\7719' -> "h\776" '\7720' -> "H\807" '\7721' -> "h\807" '\7722' -> "H\814" '\7723' -> "h\814" '\7724' -> "I\816" '\7725' -> "i\816" '\7726' -> "\207\769" '\7727' -> "\239\769" '\7728' -> "K\769" '\7729' -> "k\769" '\7730' -> "K\803" '\7731' -> "k\803" '\7732' -> "K\817" '\7733' -> "k\817" '\7734' -> "L\803" '\7735' -> "l\803" '\7736' -> "\7734\772" '\7737' -> "\7735\772" '\7738' -> "L\817" '\7739' -> "l\817" '\7740' -> "L\813" '\7741' -> "l\813" '\7742' -> "M\769" '\7743' -> "m\769" '\7744' -> "M\775" '\7745' -> "m\775" '\7746' -> "M\803" '\7747' -> "m\803" '\7748' -> "N\775" '\7749' -> "n\775" '\7750' -> "N\803" '\7751' -> "n\803" '\7752' -> "N\817" '\7753' -> "n\817" '\7754' -> "N\813" '\7755' -> "n\813" '\7756' -> "\213\769" '\7757' -> "\245\769" '\7758' -> "\213\776" '\7759' -> "\245\776" '\7760' -> "\332\768" '\7761' -> "\333\768" '\7762' -> "\332\769" '\7763' -> "\333\769" '\7764' -> "P\769" '\7765' -> "p\769" '\7766' -> "P\775" '\7767' -> "p\775" '\7768' -> "R\775" '\7769' -> "r\775" '\7770' -> "R\803" '\7771' -> "r\803" '\7772' -> "\7770\772" '\7773' -> "\7771\772" '\7774' -> "R\817" '\7775' -> "r\817" '\7776' -> "S\775" '\7777' -> "s\775" '\7778' -> "S\803" '\7779' -> "s\803" '\7780' -> "\346\775" '\7781' -> "\347\775" '\7782' -> "\352\775" '\7783' -> "\353\775" '\7784' -> "\7778\775" '\7785' -> "\7779\775" '\7786' -> "T\775" '\7787' -> "t\775" '\7788' -> "T\803" '\7789' -> "t\803" '\7790' -> "T\817" '\7791' -> "t\817" '\7792' -> "T\813" '\7793' -> "t\813" '\7794' -> "U\804" '\7795' -> "u\804" '\7796' -> "U\816" '\7797' -> "u\816" '\7798' -> "U\813" '\7799' -> "u\813" '\7800' -> "\360\769" '\7801' -> "\361\769" '\7802' -> "\362\776" '\7803' -> "\363\776" '\7804' -> "V\771" '\7805' -> "v\771" '\7806' -> "V\803" '\7807' -> "v\803" '\7808' -> "W\768" '\7809' -> "w\768" '\7810' -> "W\769" '\7811' -> "w\769" '\7812' -> "W\776" '\7813' -> "w\776" '\7814' -> "W\775" '\7815' -> "w\775" '\7816' -> "W\803" '\7817' -> "w\803" '\7818' -> "X\775" '\7819' -> "x\775" '\7820' -> "X\776" '\7821' -> "x\776" '\7822' -> "Y\775" '\7823' -> "y\775" '\7824' -> "Z\770" '\7825' -> "z\770" '\7826' -> "Z\803" '\7827' -> "z\803" '\7828' -> "Z\817" '\7829' -> "z\817" '\7830' -> "h\817" '\7831' -> "t\776" '\7832' -> "w\778" '\7833' -> "y\778" '\7835' -> "\383\775" '\7840' -> "A\803" '\7841' -> "a\803" '\7842' -> "A\777" '\7843' -> "a\777" '\7844' -> "\194\769" '\7845' -> "\226\769" '\7846' -> "\194\768" '\7847' -> "\226\768" '\7848' -> "\194\777" '\7849' -> "\226\777" '\7850' -> "\194\771" '\7851' -> "\226\771" '\7852' -> "\7840\770" '\7853' -> "\7841\770" '\7854' -> "\258\769" '\7855' -> "\259\769" '\7856' -> "\258\768" '\7857' -> "\259\768" '\7858' -> "\258\777" '\7859' -> "\259\777" '\7860' -> "\258\771" '\7861' -> "\259\771" '\7862' -> "\7840\774" '\7863' -> "\7841\774" '\7864' -> "E\803" '\7865' -> "e\803" '\7866' -> "E\777" '\7867' -> "e\777" '\7868' -> "E\771" '\7869' -> "e\771" '\7870' -> "\202\769" '\7871' -> "\234\769" '\7872' -> "\202\768" '\7873' -> "\234\768" '\7874' -> "\202\777" '\7875' -> "\234\777" '\7876' -> "\202\771" '\7877' -> "\234\771" '\7878' -> "\7864\770" '\7879' -> "\7865\770" '\7880' -> "I\777" '\7881' -> "i\777" '\7882' -> "I\803" '\7883' -> "i\803" '\7884' -> "O\803" '\7885' -> "o\803" '\7886' -> "O\777" '\7887' -> "o\777" '\7888' -> "\212\769" '\7889' -> "\244\769" '\7890' -> "\212\768" '\7891' -> "\244\768" '\7892' -> "\212\777" '\7893' -> "\244\777" '\7894' -> "\212\771" '\7895' -> "\244\771" '\7896' -> "\7884\770" '\7897' -> "\7885\770" '\7898' -> "\416\769" '\7899' -> "\417\769" '\7900' -> "\416\768" '\7901' -> "\417\768" '\7902' -> "\416\777" '\7903' -> "\417\777" '\7904' -> "\416\771" '\7905' -> "\417\771" '\7906' -> "\416\803" '\7907' -> "\417\803" '\7908' -> "U\803" '\7909' -> "u\803" '\7910' -> "U\777" '\7911' -> "u\777" '\7912' -> "\431\769" '\7913' -> "\432\769" '\7914' -> "\431\768" '\7915' -> "\432\768" '\7916' -> "\431\777" '\7917' -> "\432\777" '\7918' -> "\431\771" '\7919' -> "\432\771" '\7920' -> "\431\803" '\7921' -> "\432\803" '\7922' -> "Y\768" '\7923' -> "y\768" '\7924' -> "Y\803" '\7925' -> "y\803" '\7926' -> "Y\777" '\7927' -> "y\777" '\7928' -> "Y\771" '\7929' -> "y\771" '\7936' -> "\945\787" '\7937' -> "\945\788" '\7938' -> "\7936\768" '\7939' -> "\7937\768" '\7940' -> "\7936\769" '\7941' -> "\7937\769" '\7942' -> "\7936\834" '\7943' -> "\7937\834" '\7944' -> "\913\787" '\7945' -> "\913\788" '\7946' -> "\7944\768" '\7947' -> "\7945\768" '\7948' -> "\7944\769" '\7949' -> "\7945\769" '\7950' -> "\7944\834" '\7951' -> "\7945\834" '\7952' -> "\949\787" '\7953' -> "\949\788" '\7954' -> "\7952\768" '\7955' -> "\7953\768" '\7956' -> "\7952\769" '\7957' -> "\7953\769" '\7960' -> "\917\787" '\7961' -> "\917\788" '\7962' -> "\7960\768" '\7963' -> "\7961\768" '\7964' -> "\7960\769" '\7965' -> "\7961\769" '\7968' -> "\951\787" '\7969' -> "\951\788" '\7970' -> "\7968\768" '\7971' -> "\7969\768" '\7972' -> "\7968\769" '\7973' -> "\7969\769" '\7974' -> "\7968\834" '\7975' -> "\7969\834" '\7976' -> "\919\787" '\7977' -> "\919\788" '\7978' -> "\7976\768" '\7979' -> "\7977\768" '\7980' -> "\7976\769" '\7981' -> "\7977\769" '\7982' -> "\7976\834" '\7983' -> "\7977\834" '\7984' -> "\953\787" '\7985' -> "\953\788" '\7986' -> "\7984\768" '\7987' -> "\7985\768" '\7988' -> "\7984\769" '\7989' -> "\7985\769" '\7990' -> "\7984\834" '\7991' -> "\7985\834" '\7992' -> "\921\787" '\7993' -> "\921\788" '\7994' -> "\7992\768" '\7995' -> "\7993\768" '\7996' -> "\7992\769" '\7997' -> "\7993\769" '\7998' -> "\7992\834" '\7999' -> "\7993\834" '\8000' -> "\959\787" '\8001' -> "\959\788" '\8002' -> "\8000\768" '\8003' -> "\8001\768" '\8004' -> "\8000\769" '\8005' -> "\8001\769" '\8008' -> "\927\787" '\8009' -> "\927\788" '\8010' -> "\8008\768" '\8011' -> "\8009\768" '\8012' -> "\8008\769" '\8013' -> "\8009\769" '\8016' -> "\965\787" '\8017' -> "\965\788" '\8018' -> "\8016\768" '\8019' -> "\8017\768" '\8020' -> "\8016\769" '\8021' -> "\8017\769" '\8022' -> "\8016\834" '\8023' -> "\8017\834" '\8025' -> "\933\788" '\8027' -> "\8025\768" '\8029' -> "\8025\769" '\8031' -> "\8025\834" '\8032' -> "\969\787" '\8033' -> "\969\788" '\8034' -> "\8032\768" '\8035' -> "\8033\768" '\8036' -> "\8032\769" '\8037' -> "\8033\769" '\8038' -> "\8032\834" '\8039' -> "\8033\834" '\8040' -> "\937\787" '\8041' -> "\937\788" '\8042' -> "\8040\768" '\8043' -> "\8041\768" '\8044' -> "\8040\769" '\8045' -> "\8041\769" '\8046' -> "\8040\834" '\8047' -> "\8041\834" '\8048' -> "\945\768" '\8049' -> "\940" '\8050' -> "\949\768" '\8051' -> "\941" '\8052' -> "\951\768" '\8053' -> "\942" '\8054' -> "\953\768" '\8055' -> "\943" '\8056' -> "\959\768" '\8057' -> "\972" '\8058' -> "\965\768" '\8059' -> "\973" '\8060' -> "\969\768" '\8061' -> "\974" '\8064' -> "\7936\837" '\8065' -> "\7937\837" '\8066' -> "\7938\837" '\8067' -> "\7939\837" '\8068' -> "\7940\837" '\8069' -> "\7941\837" '\8070' -> "\7942\837" '\8071' -> "\7943\837" '\8072' -> "\7944\837" '\8073' -> "\7945\837" '\8074' -> "\7946\837" '\8075' -> "\7947\837" '\8076' -> "\7948\837" '\8077' -> "\7949\837" '\8078' -> "\7950\837" '\8079' -> "\7951\837" '\8080' -> "\7968\837" '\8081' -> "\7969\837" '\8082' -> "\7970\837" '\8083' -> "\7971\837" '\8084' -> "\7972\837" '\8085' -> "\7973\837" '\8086' -> "\7974\837" '\8087' -> "\7975\837" '\8088' -> "\7976\837" '\8089' -> "\7977\837" '\8090' -> "\7978\837" '\8091' -> "\7979\837" '\8092' -> "\7980\837" '\8093' -> "\7981\837" '\8094' -> "\7982\837" '\8095' -> "\7983\837" '\8096' -> "\8032\837" '\8097' -> "\8033\837" '\8098' -> "\8034\837" '\8099' -> "\8035\837" '\8100' -> "\8036\837" '\8101' -> "\8037\837" '\8102' -> "\8038\837" '\8103' -> "\8039\837" '\8104' -> "\8040\837" '\8105' -> "\8041\837" '\8106' -> "\8042\837" '\8107' -> "\8043\837" '\8108' -> "\8044\837" '\8109' -> "\8045\837" '\8110' -> "\8046\837" '\8111' -> "\8047\837" '\8112' -> "\945\774" '\8113' -> "\945\772" '\8114' -> "\8048\837" '\8115' -> "\945\837" '\8116' -> "\940\837" '\8118' -> "\945\834" '\8119' -> "\8118\837" '\8120' -> "\913\774" '\8121' -> "\913\772" '\8122' -> "\913\768" '\8123' -> "\902" '\8124' -> "\913\837" '\8126' -> "\953" '\8129' -> "\168\834" '\8130' -> "\8052\837" '\8131' -> "\951\837" '\8132' -> "\942\837" '\8134' -> "\951\834" '\8135' -> "\8134\837" '\8136' -> "\917\768" '\8137' -> "\904" '\8138' -> "\919\768" '\8139' -> "\905" '\8140' -> "\919\837" '\8141' -> "\8127\768" '\8142' -> "\8127\769" '\8143' -> "\8127\834" '\8144' -> "\953\774" '\8145' -> "\953\772" '\8146' -> "\970\768" '\8147' -> "\912" '\8150' -> "\953\834" '\8151' -> "\970\834" '\8152' -> "\921\774" '\8153' -> "\921\772" '\8154' -> "\921\768" '\8155' -> "\906" '\8157' -> "\8190\768" '\8158' -> "\8190\769" '\8159' -> "\8190\834" '\8160' -> "\965\774" '\8161' -> "\965\772" '\8162' -> "\971\768" '\8163' -> "\944" '\8164' -> "\961\787" '\8165' -> "\961\788" '\8166' -> "\965\834" '\8167' -> "\971\834" '\8168' -> "\933\774" '\8169' -> "\933\772" '\8170' -> "\933\768" '\8171' -> "\910" '\8172' -> "\929\788" '\8173' -> "\168\768" '\8174' -> "\901" '\8175' -> "`" '\8178' -> "\8060\837" '\8179' -> "\969\837" '\8180' -> "\974\837" '\8182' -> "\969\834" '\8183' -> "\8182\837" '\8184' -> "\927\768" '\8185' -> "\908" '\8186' -> "\937\768" '\8187' -> "\911" '\8188' -> "\937\837" '\8189' -> "\180" '\8192' -> "\8194" '\8193' -> "\8195" '\8486' -> "\937" '\8490' -> "K" '\8491' -> "\197" '\8602' -> "\8592\824" '\8603' -> "\8594\824" '\8622' -> "\8596\824" '\8653' -> "\8656\824" '\8654' -> "\8660\824" '\8655' -> "\8658\824" '\8708' -> "\8707\824" '\8713' -> "\8712\824" '\8716' -> "\8715\824" '\8740' -> "\8739\824" '\8742' -> "\8741\824" '\8769' -> "\8764\824" '\8772' -> "\8771\824" '\8775' -> "\8773\824" '\8777' -> "\8776\824" '\8800' -> "=\824" '\8802' -> "\8801\824" '\8813' -> "\8781\824" '\8814' -> "<\824" '\8815' -> ">\824" '\8816' -> "\8804\824" '\8817' -> "\8805\824" '\8820' -> "\8818\824" '\8821' -> "\8819\824" '\8824' -> "\8822\824" '\8825' -> "\8823\824" '\8832' -> "\8826\824" '\8833' -> "\8827\824" '\8836' -> "\8834\824" '\8837' -> "\8835\824" '\8840' -> "\8838\824" '\8841' -> "\8839\824" '\8876' -> "\8866\824" '\8877' -> "\8872\824" '\8878' -> "\8873\824" '\8879' -> "\8875\824" '\8928' -> "\8828\824" '\8929' -> "\8829\824" '\8930' -> "\8849\824" '\8931' -> "\8850\824" '\8938' -> "\8882\824" '\8939' -> "\8883\824" '\8940' -> "\8884\824" '\8941' -> "\8885\824" '\9001' -> "\12296" '\9002' -> "\12297" '\10972' -> "\10973\824" '\12364' -> "\12363\12441" '\12366' -> "\12365\12441" '\12368' -> "\12367\12441" '\12370' -> "\12369\12441" '\12372' -> "\12371\12441" '\12374' -> "\12373\12441" '\12376' -> "\12375\12441" '\12378' -> "\12377\12441" '\12380' -> "\12379\12441" '\12382' -> "\12381\12441" '\12384' -> "\12383\12441" '\12386' -> "\12385\12441" '\12389' -> "\12388\12441" '\12391' -> "\12390\12441" '\12393' -> "\12392\12441" '\12400' -> "\12399\12441" '\12401' -> "\12399\12442" '\12403' -> "\12402\12441" '\12404' -> "\12402\12442" '\12406' -> "\12405\12441" '\12407' -> "\12405\12442" '\12409' -> "\12408\12441" '\12410' -> "\12408\12442" '\12412' -> "\12411\12441" '\12413' -> "\12411\12442" '\12436' -> "\12358\12441" '\12446' -> "\12445\12441" '\12460' -> "\12459\12441" '\12462' -> "\12461\12441" '\12464' -> "\12463\12441" '\12466' -> "\12465\12441" '\12468' -> "\12467\12441" '\12470' -> "\12469\12441" '\12472' -> "\12471\12441" '\12474' -> "\12473\12441" '\12476' -> "\12475\12441" '\12478' -> "\12477\12441" '\12480' -> "\12479\12441" '\12482' -> "\12481\12441" '\12485' -> "\12484\12441" '\12487' -> "\12486\12441" '\12489' -> "\12488\12441" '\12496' -> "\12495\12441" '\12497' -> "\12495\12442" '\12499' -> "\12498\12441" '\12500' -> "\12498\12442" '\12502' -> "\12501\12441" '\12503' -> "\12501\12442" '\12505' -> "\12504\12441" '\12506' -> "\12504\12442" '\12508' -> "\12507\12441" '\12509' -> "\12507\12442" '\12532' -> "\12454\12441" '\12535' -> "\12527\12441" '\12536' -> "\12528\12441" '\12537' -> "\12529\12441" '\12538' -> "\12530\12441" '\12542' -> "\12541\12441" '\63744' -> "\35912" '\63745' -> "\26356" '\63746' -> "\36554" '\63747' -> "\36040" '\63748' -> "\28369" '\63749' -> "\20018" '\63750' -> "\21477" '\63751' -> "\40860" '\63752' -> "\40860" '\63753' -> "\22865" '\63754' -> "\37329" '\63755' -> "\21895" '\63756' -> "\22856" '\63757' -> "\25078" '\63758' -> "\30313" '\63759' -> "\32645" '\63760' -> "\34367" '\63761' -> "\34746" '\63762' -> "\35064" '\63763' -> "\37007" '\63764' -> "\27138" '\63765' -> "\27931" '\63766' -> "\28889" '\63767' -> "\29662" '\63768' -> "\33853" '\63769' -> "\37226" '\63770' -> "\39409" '\63771' -> "\20098" '\63772' -> "\21365" '\63773' -> "\27396" '\63774' -> "\29211" '\63775' -> "\34349" '\63776' -> "\40478" '\63777' -> "\23888" '\63778' -> "\28651" '\63779' -> "\34253" '\63780' -> "\35172" '\63781' -> "\25289" '\63782' -> "\33240" '\63783' -> "\34847" '\63784' -> "\24266" '\63785' -> "\26391" '\63786' -> "\28010" '\63787' -> "\29436" '\63788' -> "\37070" '\63789' -> "\20358" '\63790' -> "\20919" '\63791' -> "\21214" '\63792' -> "\25796" '\63793' -> "\27347" '\63794' -> "\29200" '\63795' -> "\30439" '\63796' -> "\32769" '\63797' -> "\34310" '\63798' -> "\34396" '\63799' -> "\36335" '\63800' -> "\38706" '\63801' -> "\39791" '\63802' -> "\40442" '\63803' -> "\30860" '\63804' -> "\31103" '\63805' -> "\32160" '\63806' -> "\33737" '\63807' -> "\37636" '\63808' -> "\40575" '\63809' -> "\35542" '\63810' -> "\22751" '\63811' -> "\24324" '\63812' -> "\31840" '\63813' -> "\32894" '\63814' -> "\29282" '\63815' -> "\30922" '\63816' -> "\36034" '\63817' -> "\38647" '\63818' -> "\22744" '\63819' -> "\23650" '\63820' -> "\27155" '\63821' -> "\28122" '\63822' -> "\28431" '\63823' -> "\32047" '\63824' -> "\32311" '\63825' -> "\38475" '\63826' -> "\21202" '\63827' -> "\32907" '\63828' -> "\20956" '\63829' -> "\20940" '\63830' -> "\31260" '\63831' -> "\32190" '\63832' -> "\33777" '\63833' -> "\38517" '\63834' -> "\35712" '\63835' -> "\25295" '\63836' -> "\27138" '\63837' -> "\35582" '\63838' -> "\20025" '\63839' -> "\23527" '\63840' -> "\24594" '\63841' -> "\29575" '\63842' -> "\30064" '\63843' -> "\21271" '\63844' -> "\30971" '\63845' -> "\20415" '\63846' -> "\24489" '\63847' -> "\19981" '\63848' -> "\27852" '\63849' -> "\25976" '\63850' -> "\32034" '\63851' -> "\21443" '\63852' -> "\22622" '\63853' -> "\30465" '\63854' -> "\33865" '\63855' -> "\35498" '\63856' -> "\27578" '\63857' -> "\36784" '\63858' -> "\27784" '\63859' -> "\25342" '\63860' -> "\33509" '\63861' -> "\25504" '\63862' -> "\30053" '\63863' -> "\20142" '\63864' -> "\20841" '\63865' -> "\20937" '\63866' -> "\26753" '\63867' -> "\31975" '\63868' -> "\33391" '\63869' -> "\35538" '\63870' -> "\37327" '\63871' -> "\21237" '\63872' -> "\21570" '\63873' -> "\22899" '\63874' -> "\24300" '\63875' -> "\26053" '\63876' -> "\28670" '\63877' -> "\31018" '\63878' -> "\38317" '\63879' -> "\39530" '\63880' -> "\40599" '\63881' -> "\40654" '\63882' -> "\21147" '\63883' -> "\26310" '\63884' -> "\27511" '\63885' -> "\36706" '\63886' -> "\24180" '\63887' -> "\24976" '\63888' -> "\25088" '\63889' -> "\25754" '\63890' -> "\28451" '\63891' -> "\29001" '\63892' -> "\29833" '\63893' -> "\31178" '\63894' -> "\32244" '\63895' -> "\32879" '\63896' -> "\36646" '\63897' -> "\34030" '\63898' -> "\36899" '\63899' -> "\37706" '\63900' -> "\21015" '\63901' -> "\21155" '\63902' -> "\21693" '\63903' -> "\28872" '\63904' -> "\35010" '\63905' -> "\35498" '\63906' -> "\24265" '\63907' -> "\24565" '\63908' -> "\25467" '\63909' -> "\27566" '\63910' -> "\31806" '\63911' -> "\29557" '\63912' -> "\20196" '\63913' -> "\22265" '\63914' -> "\23527" '\63915' -> "\23994" '\63916' -> "\24604" '\63917' -> "\29618" '\63918' -> "\29801" '\63919' -> "\32666" '\63920' -> "\32838" '\63921' -> "\37428" '\63922' -> "\38646" '\63923' -> "\38728" '\63924' -> "\38936" '\63925' -> "\20363" '\63926' -> "\31150" '\63927' -> "\37300" '\63928' -> "\38584" '\63929' -> "\24801" '\63930' -> "\20102" '\63931' -> "\20698" '\63932' -> "\23534" '\63933' -> "\23615" '\63934' -> "\26009" '\63935' -> "\27138" '\63936' -> "\29134" '\63937' -> "\30274" '\63938' -> "\34044" '\63939' -> "\36988" '\63940' -> "\40845" '\63941' -> "\26248" '\63942' -> "\38446" '\63943' -> "\21129" '\63944' -> "\26491" '\63945' -> "\26611" '\63946' -> "\27969" '\63947' -> "\28316" '\63948' -> "\29705" '\63949' -> "\30041" '\63950' -> "\30827" '\63951' -> "\32016" '\63952' -> "\39006" '\63953' -> "\20845" '\63954' -> "\25134" '\63955' -> "\38520" '\63956' -> "\20523" '\63957' -> "\23833" '\63958' -> "\28138" '\63959' -> "\36650" '\63960' -> "\24459" '\63961' -> "\24900" '\63962' -> "\26647" '\63963' -> "\29575" '\63964' -> "\38534" '\63965' -> "\21033" '\63966' -> "\21519" '\63967' -> "\23653" '\63968' -> "\26131" '\63969' -> "\26446" '\63970' -> "\26792" '\63971' -> "\27877" '\63972' -> "\29702" '\63973' -> "\30178" '\63974' -> "\32633" '\63975' -> "\35023" '\63976' -> "\35041" '\63977' -> "\37324" '\63978' -> "\38626" '\63979' -> "\21311" '\63980' -> "\28346" '\63981' -> "\21533" '\63982' -> "\29136" '\63983' -> "\29848" '\63984' -> "\34298" '\63985' -> "\38563" '\63986' -> "\40023" '\63987' -> "\40607" '\63988' -> "\26519" '\63989' -> "\28107" '\63990' -> "\33256" '\63991' -> "\31435" '\63992' -> "\31520" '\63993' -> "\31890" '\63994' -> "\29376" '\63995' -> "\28825" '\63996' -> "\35672" '\63997' -> "\20160" '\63998' -> "\33590" '\63999' -> "\21050" '\64000' -> "\20999" '\64001' -> "\24230" '\64002' -> "\25299" '\64003' -> "\31958" '\64004' -> "\23429" '\64005' -> "\27934" '\64006' -> "\26292" '\64007' -> "\36667" '\64008' -> "\34892" '\64009' -> "\38477" '\64010' -> "\35211" '\64011' -> "\24275" '\64012' -> "\20800" '\64013' -> "\21952" '\64016' -> "\22618" '\64018' -> "\26228" '\64021' -> "\20958" '\64022' -> "\29482" '\64023' -> "\30410" '\64024' -> "\31036" '\64025' -> "\31070" '\64026' -> "\31077" '\64027' -> "\31119" '\64028' -> "\38742" '\64029' -> "\31934" '\64030' -> "\32701" '\64032' -> "\34322" '\64034' -> "\35576" '\64037' -> "\36920" '\64038' -> "\37117" '\64042' -> "\39151" '\64043' -> "\39164" '\64044' -> "\39208" '\64045' -> "\40372" '\64046' -> "\37086" '\64047' -> "\38583" '\64048' -> "\20398" '\64049' -> "\20711" '\64050' -> "\20813" '\64051' -> "\21193" '\64052' -> "\21220" '\64053' -> "\21329" '\64054' -> "\21917" '\64055' -> "\22022" '\64056' -> "\22120" '\64057' -> "\22592" '\64058' -> "\22696" '\64059' -> "\23652" '\64060' -> "\23662" '\64061' -> "\24724" '\64062' -> "\24936" '\64063' -> "\24974" '\64064' -> "\25074" '\64065' -> "\25935" '\64066' -> "\26082" '\64067' -> "\26257" '\64068' -> "\26757" '\64069' -> "\28023" '\64070' -> "\28186" '\64071' -> "\28450" '\64072' -> "\29038" '\64073' -> "\29227" '\64074' -> "\29730" '\64075' -> "\30865" '\64076' -> "\31038" '\64077' -> "\31049" '\64078' -> "\31048" '\64079' -> "\31056" '\64080' -> "\31062" '\64081' -> "\31069" '\64082' -> "\31117" '\64083' -> "\31118" '\64084' -> "\31296" '\64085' -> "\31361" '\64086' -> "\31680" '\64087' -> "\32244" '\64088' -> "\32265" '\64089' -> "\32321" '\64090' -> "\32626" '\64091' -> "\32773" '\64092' -> "\33261" '\64093' -> "\33401" '\64094' -> "\33401" '\64095' -> "\33879" '\64096' -> "\35088" '\64097' -> "\35222" '\64098' -> "\35585" '\64099' -> "\35641" '\64100' -> "\36051" '\64101' -> "\36104" '\64102' -> "\36790" '\64103' -> "\36920" '\64104' -> "\38627" '\64105' -> "\38911" '\64106' -> "\38971" '\64107' -> "\24693" '\64108' -> "\148206" '\64109' -> "\33304" '\64112' -> "\20006" '\64113' -> "\20917" '\64114' -> "\20840" '\64115' -> "\20352" '\64116' -> "\20805" '\64117' -> "\20864" '\64118' -> "\21191" '\64119' -> "\21242" '\64120' -> "\21917" '\64121' -> "\21845" '\64122' -> "\21913" '\64123' -> "\21986" '\64124' -> "\22618" '\64125' -> "\22707" '\64126' -> "\22852" '\64127' -> "\22868" '\64128' -> "\23138" '\64129' -> "\23336" '\64130' -> "\24274" '\64131' -> "\24281" '\64132' -> "\24425" '\64133' -> "\24493" '\64134' -> "\24792" '\64135' -> "\24910" '\64136' -> "\24840" '\64137' -> "\24974" '\64138' -> "\24928" '\64139' -> "\25074" '\64140' -> "\25140" '\64141' -> "\25540" '\64142' -> "\25628" '\64143' -> "\25682" '\64144' -> "\25942" '\64145' -> "\26228" '\64146' -> "\26391" '\64147' -> "\26395" '\64148' -> "\26454" '\64149' -> "\27513" '\64150' -> "\27578" '\64151' -> "\27969" '\64152' -> "\28379" '\64153' -> "\28363" '\64154' -> "\28450" '\64155' -> "\28702" '\64156' -> "\29038" '\64157' -> "\30631" '\64158' -> "\29237" '\64159' -> "\29359" '\64160' -> "\29482" '\64161' -> "\29809" '\64162' -> "\29958" '\64163' -> "\30011" '\64164' -> "\30237" '\64165' -> "\30239" '\64166' -> "\30410" '\64167' -> "\30427" '\64168' -> "\30452" '\64169' -> "\30538" '\64170' -> "\30528" '\64171' -> "\30924" '\64172' -> "\31409" '\64173' -> "\31680" '\64174' -> "\31867" '\64175' -> "\32091" '\64176' -> "\32244" '\64177' -> "\32574" '\64178' -> "\32773" '\64179' -> "\33618" '\64180' -> "\33775" '\64181' -> "\34681" '\64182' -> "\35137" '\64183' -> "\35206" '\64184' -> "\35222" '\64185' -> "\35519" '\64186' -> "\35576" '\64187' -> "\35531" '\64188' -> "\35585" '\64189' -> "\35582" '\64190' -> "\35565" '\64191' -> "\35641" '\64192' -> "\35722" '\64193' -> "\36104" '\64194' -> "\36664" '\64195' -> "\36978" '\64196' -> "\37273" '\64197' -> "\37494" '\64198' -> "\38524" '\64199' -> "\38627" '\64200' -> "\38742" '\64201' -> "\38875" '\64202' -> "\38911" '\64203' -> "\38923" '\64204' -> "\38971" '\64205' -> "\39698" '\64206' -> "\40860" '\64207' -> "\141386" '\64208' -> "\141380" '\64209' -> "\144341" '\64210' -> "\15261" '\64211' -> "\16408" '\64212' -> "\16441" '\64213' -> "\152137" '\64214' -> "\154832" '\64215' -> "\163539" '\64216' -> "\40771" '\64217' -> "\40846" '\64285' -> "\1497\1460" '\64287' -> "\1522\1463" '\64298' -> "\1513\1473" '\64299' -> "\1513\1474" '\64300' -> "\64329\1473" '\64301' -> "\64329\1474" '\64302' -> "\1488\1463" '\64303' -> "\1488\1464" '\64304' -> "\1488\1468" '\64305' -> "\1489\1468" '\64306' -> "\1490\1468" '\64307' -> "\1491\1468" '\64308' -> "\1492\1468" '\64309' -> "\1493\1468" '\64310' -> "\1494\1468" '\64312' -> "\1496\1468" '\64313' -> "\1497\1468" '\64314' -> "\1498\1468" '\64315' -> "\1499\1468" '\64316' -> "\1500\1468" '\64318' -> "\1502\1468" '\64320' -> "\1504\1468" '\64321' -> "\1505\1468" '\64323' -> "\1507\1468" '\64324' -> "\1508\1468" '\64326' -> "\1510\1468" '\64327' -> "\1511\1468" '\64328' -> "\1512\1468" '\64329' -> "\1513\1468" '\64330' -> "\1514\1468" '\64331' -> "\1493\1465" '\64332' -> "\1489\1471" '\64333' -> "\1499\1471" '\64334' -> "\1508\1471" '\69786' -> "\69785\69818" '\69788' -> "\69787\69818" '\69803' -> "\69797\69818" '\69934' -> "\69937\69927" '\69935' -> "\69938\69927" '\70475' -> "\70471\70462" '\70476' -> "\70471\70487" '\70843' -> "\70841\70842" '\70844' -> "\70841\70832" '\70846' -> "\70841\70845" '\71098' -> "\71096\71087" '\71099' -> "\71097\71087" '\71992' -> "\71989\71984" '\119134' -> "\119127\119141" '\119135' -> "\119128\119141" '\119136' -> "\119135\119150" '\119137' -> "\119135\119151" '\119138' -> "\119135\119152" '\119139' -> "\119135\119153" '\119140' -> "\119135\119154" '\119227' -> "\119225\119141" '\119228' -> "\119226\119141" '\119229' -> "\119227\119150" '\119230' -> "\119228\119150" '\119231' -> "\119227\119151" '\119232' -> "\119228\119151" '\194560' -> "\20029" '\194561' -> "\20024" '\194562' -> "\20033" '\194563' -> "\131362" '\194564' -> "\20320" '\194565' -> "\20398" '\194566' -> "\20411" '\194567' -> "\20482" '\194568' -> "\20602" '\194569' -> "\20633" '\194570' -> "\20711" '\194571' -> "\20687" '\194572' -> "\13470" '\194573' -> "\132666" '\194574' -> "\20813" '\194575' -> "\20820" '\194576' -> "\20836" '\194577' -> "\20855" '\194578' -> "\132380" '\194579' -> "\13497" '\194580' -> "\20839" '\194581' -> "\20877" '\194582' -> "\132427" '\194583' -> "\20887" '\194584' -> "\20900" '\194585' -> "\20172" '\194586' -> "\20908" '\194587' -> "\20917" '\194588' -> "\168415" '\194589' -> "\20981" '\194590' -> "\20995" '\194591' -> "\13535" '\194592' -> "\21051" '\194593' -> "\21062" '\194594' -> "\21106" '\194595' -> "\21111" '\194596' -> "\13589" '\194597' -> "\21191" '\194598' -> "\21193" '\194599' -> "\21220" '\194600' -> "\21242" '\194601' -> "\21253" '\194602' -> "\21254" '\194603' -> "\21271" '\194604' -> "\21321" '\194605' -> "\21329" '\194606' -> "\21338" '\194607' -> "\21363" '\194608' -> "\21373" '\194609' -> "\21375" '\194610' -> "\21375" '\194611' -> "\21375" '\194612' -> "\133676" '\194613' -> "\28784" '\194614' -> "\21450" '\194615' -> "\21471" '\194616' -> "\133987" '\194617' -> "\21483" '\194618' -> "\21489" '\194619' -> "\21510" '\194620' -> "\21662" '\194621' -> "\21560" '\194622' -> "\21576" '\194623' -> "\21608" '\194624' -> "\21666" '\194625' -> "\21750" '\194626' -> "\21776" '\194627' -> "\21843" '\194628' -> "\21859" '\194629' -> "\21892" '\194630' -> "\21892" '\194631' -> "\21913" '\194632' -> "\21931" '\194633' -> "\21939" '\194634' -> "\21954" '\194635' -> "\22294" '\194636' -> "\22022" '\194637' -> "\22295" '\194638' -> "\22097" '\194639' -> "\22132" '\194640' -> "\20999" '\194641' -> "\22766" '\194642' -> "\22478" '\194643' -> "\22516" '\194644' -> "\22541" '\194645' -> "\22411" '\194646' -> "\22578" '\194647' -> "\22577" '\194648' -> "\22700" '\194649' -> "\136420" '\194650' -> "\22770" '\194651' -> "\22775" '\194652' -> "\22790" '\194653' -> "\22810" '\194654' -> "\22818" '\194655' -> "\22882" '\194656' -> "\136872" '\194657' -> "\136938" '\194658' -> "\23020" '\194659' -> "\23067" '\194660' -> "\23079" '\194661' -> "\23000" '\194662' -> "\23142" '\194663' -> "\14062" '\194664' -> "\14076" '\194665' -> "\23304" '\194666' -> "\23358" '\194667' -> "\23358" '\194668' -> "\137672" '\194669' -> "\23491" '\194670' -> "\23512" '\194671' -> "\23527" '\194672' -> "\23539" '\194673' -> "\138008" '\194674' -> "\23551" '\194675' -> "\23558" '\194676' -> "\24403" '\194677' -> "\23586" '\194678' -> "\14209" '\194679' -> "\23648" '\194680' -> "\23662" '\194681' -> "\23744" '\194682' -> "\23693" '\194683' -> "\138724" '\194684' -> "\23875" '\194685' -> "\138726" '\194686' -> "\23918" '\194687' -> "\23915" '\194688' -> "\23932" '\194689' -> "\24033" '\194690' -> "\24034" '\194691' -> "\14383" '\194692' -> "\24061" '\194693' -> "\24104" '\194694' -> "\24125" '\194695' -> "\24169" '\194696' -> "\14434" '\194697' -> "\139651" '\194698' -> "\14460" '\194699' -> "\24240" '\194700' -> "\24243" '\194701' -> "\24246" '\194702' -> "\24266" '\194703' -> "\172946" '\194704' -> "\24318" '\194705' -> "\140081" '\194706' -> "\140081" '\194707' -> "\33281" '\194708' -> "\24354" '\194709' -> "\24354" '\194710' -> "\14535" '\194711' -> "\144056" '\194712' -> "\156122" '\194713' -> "\24418" '\194714' -> "\24427" '\194715' -> "\14563" '\194716' -> "\24474" '\194717' -> "\24525" '\194718' -> "\24535" '\194719' -> "\24569" '\194720' -> "\24705" '\194721' -> "\14650" '\194722' -> "\14620" '\194723' -> "\24724" '\194724' -> "\141012" '\194725' -> "\24775" '\194726' -> "\24904" '\194727' -> "\24908" '\194728' -> "\24910" '\194729' -> "\24908" '\194730' -> "\24954" '\194731' -> "\24974" '\194732' -> "\25010" '\194733' -> "\24996" '\194734' -> "\25007" '\194735' -> "\25054" '\194736' -> "\25074" '\194737' -> "\25078" '\194738' -> "\25104" '\194739' -> "\25115" '\194740' -> "\25181" '\194741' -> "\25265" '\194742' -> "\25300" '\194743' -> "\25424" '\194744' -> "\142092" '\194745' -> "\25405" '\194746' -> "\25340" '\194747' -> "\25448" '\194748' -> "\25475" '\194749' -> "\25572" '\194750' -> "\142321" '\194751' -> "\25634" '\194752' -> "\25541" '\194753' -> "\25513" '\194754' -> "\14894" '\194755' -> "\25705" '\194756' -> "\25726" '\194757' -> "\25757" '\194758' -> "\25719" '\194759' -> "\14956" '\194760' -> "\25935" '\194761' -> "\25964" '\194762' -> "\143370" '\194763' -> "\26083" '\194764' -> "\26360" '\194765' -> "\26185" '\194766' -> "\15129" '\194767' -> "\26257" '\194768' -> "\15112" '\194769' -> "\15076" '\194770' -> "\20882" '\194771' -> "\20885" '\194772' -> "\26368" '\194773' -> "\26268" '\194774' -> "\32941" '\194775' -> "\17369" '\194776' -> "\26391" '\194777' -> "\26395" '\194778' -> "\26401" '\194779' -> "\26462" '\194780' -> "\26451" '\194781' -> "\144323" '\194782' -> "\15177" '\194783' -> "\26618" '\194784' -> "\26501" '\194785' -> "\26706" '\194786' -> "\26757" '\194787' -> "\144493" '\194788' -> "\26766" '\194789' -> "\26655" '\194790' -> "\26900" '\194791' -> "\15261" '\194792' -> "\26946" '\194793' -> "\27043" '\194794' -> "\27114" '\194795' -> "\27304" '\194796' -> "\145059" '\194797' -> "\27355" '\194798' -> "\15384" '\194799' -> "\27425" '\194800' -> "\145575" '\194801' -> "\27476" '\194802' -> "\15438" '\194803' -> "\27506" '\194804' -> "\27551" '\194805' -> "\27578" '\194806' -> "\27579" '\194807' -> "\146061" '\194808' -> "\138507" '\194809' -> "\146170" '\194810' -> "\27726" '\194811' -> "\146620" '\194812' -> "\27839" '\194813' -> "\27853" '\194814' -> "\27751" '\194815' -> "\27926" '\194816' -> "\27966" '\194817' -> "\28023" '\194818' -> "\27969" '\194819' -> "\28009" '\194820' -> "\28024" '\194821' -> "\28037" '\194822' -> "\146718" '\194823' -> "\27956" '\194824' -> "\28207" '\194825' -> "\28270" '\194826' -> "\15667" '\194827' -> "\28363" '\194828' -> "\28359" '\194829' -> "\147153" '\194830' -> "\28153" '\194831' -> "\28526" '\194832' -> "\147294" '\194833' -> "\147342" '\194834' -> "\28614" '\194835' -> "\28729" '\194836' -> "\28702" '\194837' -> "\28699" '\194838' -> "\15766" '\194839' -> "\28746" '\194840' -> "\28797" '\194841' -> "\28791" '\194842' -> "\28845" '\194843' -> "\132389" '\194844' -> "\28997" '\194845' -> "\148067" '\194846' -> "\29084" '\194847' -> "\148395" '\194848' -> "\29224" '\194849' -> "\29237" '\194850' -> "\29264" '\194851' -> "\149000" '\194852' -> "\29312" '\194853' -> "\29333" '\194854' -> "\149301" '\194855' -> "\149524" '\194856' -> "\29562" '\194857' -> "\29579" '\194858' -> "\16044" '\194859' -> "\29605" '\194860' -> "\16056" '\194861' -> "\16056" '\194862' -> "\29767" '\194863' -> "\29788" '\194864' -> "\29809" '\194865' -> "\29829" '\194866' -> "\29898" '\194867' -> "\16155" '\194868' -> "\29988" '\194869' -> "\150582" '\194870' -> "\30014" '\194871' -> "\150674" '\194872' -> "\30064" '\194873' -> "\139679" '\194874' -> "\30224" '\194875' -> "\151457" '\194876' -> "\151480" '\194877' -> "\151620" '\194878' -> "\16380" '\194879' -> "\16392" '\194880' -> "\30452" '\194881' -> "\151795" '\194882' -> "\151794" '\194883' -> "\151833" '\194884' -> "\151859" '\194885' -> "\30494" '\194886' -> "\30495" '\194887' -> "\30495" '\194888' -> "\30538" '\194889' -> "\16441" '\194890' -> "\30603" '\194891' -> "\16454" '\194892' -> "\16534" '\194893' -> "\152605" '\194894' -> "\30798" '\194895' -> "\30860" '\194896' -> "\30924" '\194897' -> "\16611" '\194898' -> "\153126" '\194899' -> "\31062" '\194900' -> "\153242" '\194901' -> "\153285" '\194902' -> "\31119" '\194903' -> "\31211" '\194904' -> "\16687" '\194905' -> "\31296" '\194906' -> "\31306" '\194907' -> "\31311" '\194908' -> "\153980" '\194909' -> "\154279" '\194910' -> "\154279" '\194911' -> "\31470" '\194912' -> "\16898" '\194913' -> "\154539" '\194914' -> "\31686" '\194915' -> "\31689" '\194916' -> "\16935" '\194917' -> "\154752" '\194918' -> "\31954" '\194919' -> "\17056" '\194920' -> "\31976" '\194921' -> "\31971" '\194922' -> "\32000" '\194923' -> "\155526" '\194924' -> "\32099" '\194925' -> "\17153" '\194926' -> "\32199" '\194927' -> "\32258" '\194928' -> "\32325" '\194929' -> "\17204" '\194930' -> "\156200" '\194931' -> "\156231" '\194932' -> "\17241" '\194933' -> "\156377" '\194934' -> "\32634" '\194935' -> "\156478" '\194936' -> "\32661" '\194937' -> "\32762" '\194938' -> "\32773" '\194939' -> "\156890" '\194940' -> "\156963" '\194941' -> "\32864" '\194942' -> "\157096" '\194943' -> "\32880" '\194944' -> "\144223" '\194945' -> "\17365" '\194946' -> "\32946" '\194947' -> "\33027" '\194948' -> "\17419" '\194949' -> "\33086" '\194950' -> "\23221" '\194951' -> "\157607" '\194952' -> "\157621" '\194953' -> "\144275" '\194954' -> "\144284" '\194955' -> "\33281" '\194956' -> "\33284" '\194957' -> "\36766" '\194958' -> "\17515" '\194959' -> "\33425" '\194960' -> "\33419" '\194961' -> "\33437" '\194962' -> "\21171" '\194963' -> "\33457" '\194964' -> "\33459" '\194965' -> "\33469" '\194966' -> "\33510" '\194967' -> "\158524" '\194968' -> "\33509" '\194969' -> "\33565" '\194970' -> "\33635" '\194971' -> "\33709" '\194972' -> "\33571" '\194973' -> "\33725" '\194974' -> "\33767" '\194975' -> "\33879" '\194976' -> "\33619" '\194977' -> "\33738" '\194978' -> "\33740" '\194979' -> "\33756" '\194980' -> "\158774" '\194981' -> "\159083" '\194982' -> "\158933" '\194983' -> "\17707" '\194984' -> "\34033" '\194985' -> "\34035" '\194986' -> "\34070" '\194987' -> "\160714" '\194988' -> "\34148" '\194989' -> "\159532" '\194990' -> "\17757" '\194991' -> "\17761" '\194992' -> "\159665" '\194993' -> "\159954" '\194994' -> "\17771" '\194995' -> "\34384" '\194996' -> "\34396" '\194997' -> "\34407" '\194998' -> "\34409" '\194999' -> "\34473" '\195000' -> "\34440" '\195001' -> "\34574" '\195002' -> "\34530" '\195003' -> "\34681" '\195004' -> "\34600" '\195005' -> "\34667" '\195006' -> "\34694" '\195007' -> "\17879" '\195008' -> "\34785" '\195009' -> "\34817" '\195010' -> "\17913" '\195011' -> "\34912" '\195012' -> "\34915" '\195013' -> "\161383" '\195014' -> "\35031" '\195015' -> "\35038" '\195016' -> "\17973" '\195017' -> "\35066" '\195018' -> "\13499" '\195019' -> "\161966" '\195020' -> "\162150" '\195021' -> "\18110" '\195022' -> "\18119" '\195023' -> "\35488" '\195024' -> "\35565" '\195025' -> "\35722" '\195026' -> "\35925" '\195027' -> "\162984" '\195028' -> "\36011" '\195029' -> "\36033" '\195030' -> "\36123" '\195031' -> "\36215" '\195032' -> "\163631" '\195033' -> "\133124" '\195034' -> "\36299" '\195035' -> "\36284" '\195036' -> "\36336" '\195037' -> "\133342" '\195038' -> "\36564" '\195039' -> "\36664" '\195040' -> "\165330" '\195041' -> "\165357" '\195042' -> "\37012" '\195043' -> "\37105" '\195044' -> "\37137" '\195045' -> "\165678" '\195046' -> "\37147" '\195047' -> "\37432" '\195048' -> "\37591" '\195049' -> "\37592" '\195050' -> "\37500" '\195051' -> "\37881" '\195052' -> "\37909" '\195053' -> "\166906" '\195054' -> "\38283" '\195055' -> "\18837" '\195056' -> "\38327" '\195057' -> "\167287" '\195058' -> "\18918" '\195059' -> "\38595" '\195060' -> "\23986" '\195061' -> "\38691" '\195062' -> "\168261" '\195063' -> "\168474" '\195064' -> "\19054" '\195065' -> "\19062" '\195066' -> "\38880" '\195067' -> "\168970" '\195068' -> "\19122" '\195069' -> "\169110" '\195070' -> "\38923" '\195071' -> "\38923" '\195072' -> "\38953" '\195073' -> "\169398" '\195074' -> "\39138" '\195075' -> "\19251" '\195076' -> "\39209" '\195077' -> "\39335" '\195078' -> "\39362" '\195079' -> "\39422" '\195080' -> "\19406" '\195081' -> "\170800" '\195082' -> "\39698" '\195083' -> "\40000" '\195084' -> "\40189" '\195085' -> "\19662" '\195086' -> "\19693" '\195087' -> "\40295" '\195088' -> "\172238" '\195089' -> "\19704" '\195090' -> "\172293" '\195091' -> "\172558" '\195092' -> "\172689" '\195093' -> "\40635" '\195094' -> "\19798" '\195095' -> "\40697" '\195096' -> "\40702" '\195097' -> "\40709" '\195098' -> "\40719" '\195099' -> "\40726" '\195100' -> "\40763" '\195101' -> "\173568" c -> [c] unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/DecompositionsK.hs0000644000000000000000000015126307346545000024666 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.DecompositionsK -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.DecompositionsK (decompose) where import qualified Unicode.Internal.Char.UnicodeData.DecompositionsK2 as DK2 {-# NOINLINE decompose #-} decompose :: Char -> [Char] decompose = \case '\160' -> " " '\168' -> " \776" '\170' -> "a" '\175' -> " \772" '\178' -> "2" '\179' -> "3" '\180' -> " \769" '\181' -> "\956" '\184' -> " \807" '\185' -> "1" '\186' -> "o" '\188' -> "1\8260\&4" '\189' -> "1\8260\&2" '\190' -> "3\8260\&4" '\192' -> "A\768" '\193' -> "A\769" '\194' -> "A\770" '\195' -> "A\771" '\196' -> "A\776" '\197' -> "A\778" '\199' -> "C\807" '\200' -> "E\768" '\201' -> "E\769" '\202' -> "E\770" '\203' -> "E\776" '\204' -> "I\768" '\205' -> "I\769" '\206' -> "I\770" '\207' -> "I\776" '\209' -> "N\771" '\210' -> "O\768" '\211' -> "O\769" '\212' -> "O\770" '\213' -> "O\771" '\214' -> "O\776" '\217' -> "U\768" '\218' -> "U\769" '\219' -> "U\770" '\220' -> "U\776" '\221' -> "Y\769" '\224' -> "a\768" '\225' -> "a\769" '\226' -> "a\770" '\227' -> "a\771" '\228' -> "a\776" '\229' -> "a\778" '\231' -> "c\807" '\232' -> "e\768" '\233' -> "e\769" '\234' -> "e\770" '\235' -> "e\776" '\236' -> "i\768" '\237' -> "i\769" '\238' -> "i\770" '\239' -> "i\776" '\241' -> "n\771" '\242' -> "o\768" '\243' -> "o\769" '\244' -> "o\770" '\245' -> "o\771" '\246' -> "o\776" '\249' -> "u\768" '\250' -> "u\769" '\251' -> "u\770" '\252' -> "u\776" '\253' -> "y\769" '\255' -> "y\776" '\256' -> "A\772" '\257' -> "a\772" '\258' -> "A\774" '\259' -> "a\774" '\260' -> "A\808" '\261' -> "a\808" '\262' -> "C\769" '\263' -> "c\769" '\264' -> "C\770" '\265' -> "c\770" '\266' -> "C\775" '\267' -> "c\775" '\268' -> "C\780" '\269' -> "c\780" '\270' -> "D\780" '\271' -> "d\780" '\274' -> "E\772" '\275' -> "e\772" '\276' -> "E\774" '\277' -> "e\774" '\278' -> "E\775" '\279' -> "e\775" '\280' -> "E\808" '\281' -> "e\808" '\282' -> "E\780" '\283' -> "e\780" '\284' -> "G\770" '\285' -> "g\770" '\286' -> "G\774" '\287' -> "g\774" '\288' -> "G\775" '\289' -> "g\775" '\290' -> "G\807" '\291' -> "g\807" '\292' -> "H\770" '\293' -> "h\770" '\296' -> "I\771" '\297' -> "i\771" '\298' -> "I\772" '\299' -> "i\772" '\300' -> "I\774" '\301' -> "i\774" '\302' -> "I\808" '\303' -> "i\808" '\304' -> "I\775" '\306' -> "IJ" '\307' -> "ij" '\308' -> "J\770" '\309' -> "j\770" '\310' -> "K\807" '\311' -> "k\807" '\313' -> "L\769" '\314' -> "l\769" '\315' -> "L\807" '\316' -> "l\807" '\317' -> "L\780" '\318' -> "l\780" '\319' -> "L\183" '\320' -> "l\183" '\323' -> "N\769" '\324' -> "n\769" '\325' -> "N\807" '\326' -> "n\807" '\327' -> "N\780" '\328' -> "n\780" '\329' -> "\700n" '\332' -> "O\772" '\333' -> "o\772" '\334' -> "O\774" '\335' -> "o\774" '\336' -> "O\779" '\337' -> "o\779" '\340' -> "R\769" '\341' -> "r\769" '\342' -> "R\807" '\343' -> "r\807" '\344' -> "R\780" '\345' -> "r\780" '\346' -> "S\769" '\347' -> "s\769" '\348' -> "S\770" '\349' -> "s\770" '\350' -> "S\807" '\351' -> "s\807" '\352' -> "S\780" '\353' -> "s\780" '\354' -> "T\807" '\355' -> "t\807" '\356' -> "T\780" '\357' -> "t\780" '\360' -> "U\771" '\361' -> "u\771" '\362' -> "U\772" '\363' -> "u\772" '\364' -> "U\774" '\365' -> "u\774" '\366' -> "U\778" '\367' -> "u\778" '\368' -> "U\779" '\369' -> "u\779" '\370' -> "U\808" '\371' -> "u\808" '\372' -> "W\770" '\373' -> "w\770" '\374' -> "Y\770" '\375' -> "y\770" '\376' -> "Y\776" '\377' -> "Z\769" '\378' -> "z\769" '\379' -> "Z\775" '\380' -> "z\775" '\381' -> "Z\780" '\382' -> "z\780" '\383' -> "s" '\416' -> "O\795" '\417' -> "o\795" '\431' -> "U\795" '\432' -> "u\795" '\452' -> "D\381" '\453' -> "D\382" '\454' -> "d\382" '\455' -> "LJ" '\456' -> "Lj" '\457' -> "lj" '\458' -> "NJ" '\459' -> "Nj" '\460' -> "nj" '\461' -> "A\780" '\462' -> "a\780" '\463' -> "I\780" '\464' -> "i\780" '\465' -> "O\780" '\466' -> "o\780" '\467' -> "U\780" '\468' -> "u\780" '\469' -> "\220\772" '\470' -> "\252\772" '\471' -> "\220\769" '\472' -> "\252\769" '\473' -> "\220\780" '\474' -> "\252\780" '\475' -> "\220\768" '\476' -> "\252\768" '\478' -> "\196\772" '\479' -> "\228\772" '\480' -> "\550\772" '\481' -> "\551\772" '\482' -> "\198\772" '\483' -> "\230\772" '\486' -> "G\780" '\487' -> "g\780" '\488' -> "K\780" '\489' -> "k\780" '\490' -> "O\808" '\491' -> "o\808" '\492' -> "\490\772" '\493' -> "\491\772" '\494' -> "\439\780" '\495' -> "\658\780" '\496' -> "j\780" '\497' -> "DZ" '\498' -> "Dz" '\499' -> "dz" '\500' -> "G\769" '\501' -> "g\769" '\504' -> "N\768" '\505' -> "n\768" '\506' -> "\197\769" '\507' -> "\229\769" '\508' -> "\198\769" '\509' -> "\230\769" '\510' -> "\216\769" '\511' -> "\248\769" '\512' -> "A\783" '\513' -> "a\783" '\514' -> "A\785" '\515' -> "a\785" '\516' -> "E\783" '\517' -> "e\783" '\518' -> "E\785" '\519' -> "e\785" '\520' -> "I\783" '\521' -> "i\783" '\522' -> "I\785" '\523' -> "i\785" '\524' -> "O\783" '\525' -> "o\783" '\526' -> "O\785" '\527' -> "o\785" '\528' -> "R\783" '\529' -> "r\783" '\530' -> "R\785" '\531' -> "r\785" '\532' -> "U\783" '\533' -> "u\783" '\534' -> "U\785" '\535' -> "u\785" '\536' -> "S\806" '\537' -> "s\806" '\538' -> "T\806" '\539' -> "t\806" '\542' -> "H\780" '\543' -> "h\780" '\550' -> "A\775" '\551' -> "a\775" '\552' -> "E\807" '\553' -> "e\807" '\554' -> "\214\772" '\555' -> "\246\772" '\556' -> "\213\772" '\557' -> "\245\772" '\558' -> "O\775" '\559' -> "o\775" '\560' -> "\558\772" '\561' -> "\559\772" '\562' -> "Y\772" '\563' -> "y\772" '\688' -> "h" '\689' -> "\614" '\690' -> "j" '\691' -> "r" '\692' -> "\633" '\693' -> "\635" '\694' -> "\641" '\695' -> "w" '\696' -> "y" '\728' -> " \774" '\729' -> " \775" '\730' -> " \778" '\731' -> " \808" '\732' -> " \771" '\733' -> " \779" '\736' -> "\611" '\737' -> "l" '\738' -> "s" '\739' -> "x" '\740' -> "\661" '\832' -> "\768" '\833' -> "\769" '\835' -> "\787" '\836' -> "\776\769" '\884' -> "\697" '\890' -> " \837" '\894' -> ";" '\900' -> " \769" '\901' -> "\168\769" '\902' -> "\913\769" '\903' -> "\183" '\904' -> "\917\769" '\905' -> "\919\769" '\906' -> "\921\769" '\908' -> "\927\769" '\910' -> "\933\769" '\911' -> "\937\769" '\912' -> "\970\769" '\938' -> "\921\776" '\939' -> "\933\776" '\940' -> "\945\769" '\941' -> "\949\769" '\942' -> "\951\769" '\943' -> "\953\769" '\944' -> "\971\769" '\970' -> "\953\776" '\971' -> "\965\776" '\972' -> "\959\769" '\973' -> "\965\769" '\974' -> "\969\769" '\976' -> "\946" '\977' -> "\952" '\978' -> "\933" '\979' -> "\978\769" '\980' -> "\978\776" '\981' -> "\966" '\982' -> "\960" '\1008' -> "\954" '\1009' -> "\961" '\1010' -> "\962" '\1012' -> "\920" '\1013' -> "\949" '\1017' -> "\931" '\1024' -> "\1045\768" '\1025' -> "\1045\776" '\1027' -> "\1043\769" '\1031' -> "\1030\776" '\1036' -> "\1050\769" '\1037' -> "\1048\768" '\1038' -> "\1059\774" '\1049' -> "\1048\774" '\1081' -> "\1080\774" '\1104' -> "\1077\768" '\1105' -> "\1077\776" '\1107' -> "\1075\769" '\1111' -> "\1110\776" '\1116' -> "\1082\769" '\1117' -> "\1080\768" '\1118' -> "\1091\774" '\1142' -> "\1140\783" '\1143' -> "\1141\783" '\1217' -> "\1046\774" '\1218' -> "\1078\774" '\1232' -> "\1040\774" '\1233' -> "\1072\774" '\1234' -> "\1040\776" '\1235' -> "\1072\776" '\1238' -> "\1045\774" '\1239' -> "\1077\774" '\1242' -> "\1240\776" '\1243' -> "\1241\776" '\1244' -> "\1046\776" '\1245' -> "\1078\776" '\1246' -> "\1047\776" '\1247' -> "\1079\776" '\1250' -> "\1048\772" '\1251' -> "\1080\772" '\1252' -> "\1048\776" '\1253' -> "\1080\776" '\1254' -> "\1054\776" '\1255' -> "\1086\776" '\1258' -> "\1256\776" '\1259' -> "\1257\776" '\1260' -> "\1069\776" '\1261' -> "\1101\776" '\1262' -> "\1059\772" '\1263' -> "\1091\772" '\1264' -> "\1059\776" '\1265' -> "\1091\776" '\1266' -> "\1059\779" '\1267' -> "\1091\779" '\1268' -> "\1063\776" '\1269' -> "\1095\776" '\1272' -> "\1067\776" '\1273' -> "\1099\776" '\1415' -> "\1381\1410" '\1570' -> "\1575\1619" '\1571' -> "\1575\1620" '\1572' -> "\1608\1620" '\1573' -> "\1575\1621" '\1574' -> "\1610\1620" '\1653' -> "\1575\1652" '\1654' -> "\1608\1652" '\1655' -> "\1735\1652" '\1656' -> "\1610\1652" '\1728' -> "\1749\1620" '\1730' -> "\1729\1620" '\1747' -> "\1746\1620" '\2345' -> "\2344\2364" '\2353' -> "\2352\2364" '\2356' -> "\2355\2364" '\2392' -> "\2325\2364" '\2393' -> "\2326\2364" '\2394' -> "\2327\2364" '\2395' -> "\2332\2364" '\2396' -> "\2337\2364" '\2397' -> "\2338\2364" '\2398' -> "\2347\2364" '\2399' -> "\2351\2364" '\2507' -> "\2503\2494" '\2508' -> "\2503\2519" '\2524' -> "\2465\2492" '\2525' -> "\2466\2492" '\2527' -> "\2479\2492" '\2611' -> "\2610\2620" '\2614' -> "\2616\2620" '\2649' -> "\2582\2620" '\2650' -> "\2583\2620" '\2651' -> "\2588\2620" '\2654' -> "\2603\2620" '\2888' -> "\2887\2902" '\2891' -> "\2887\2878" '\2892' -> "\2887\2903" '\2908' -> "\2849\2876" '\2909' -> "\2850\2876" '\2964' -> "\2962\3031" '\3018' -> "\3014\3006" '\3019' -> "\3015\3006" '\3020' -> "\3014\3031" '\3144' -> "\3142\3158" '\3264' -> "\3263\3285" '\3271' -> "\3270\3285" '\3272' -> "\3270\3286" '\3274' -> "\3270\3266" '\3275' -> "\3274\3285" '\3402' -> "\3398\3390" '\3403' -> "\3399\3390" '\3404' -> "\3398\3415" '\3546' -> "\3545\3530" '\3548' -> "\3545\3535" '\3549' -> "\3548\3530" '\3550' -> "\3545\3551" '\3635' -> "\3661\3634" '\3763' -> "\3789\3762" '\3804' -> "\3755\3737" '\3805' -> "\3755\3745" '\3852' -> "\3851" '\3907' -> "\3906\4023" '\3917' -> "\3916\4023" '\3922' -> "\3921\4023" '\3927' -> "\3926\4023" '\3932' -> "\3931\4023" '\3945' -> "\3904\4021" '\3955' -> "\3953\3954" '\3957' -> "\3953\3956" '\3958' -> "\4018\3968" '\3959' -> "\4018\3969" '\3960' -> "\4019\3968" '\3961' -> "\4019\3969" '\3969' -> "\3953\3968" '\3987' -> "\3986\4023" '\3997' -> "\3996\4023" '\4002' -> "\4001\4023" '\4007' -> "\4006\4023" '\4012' -> "\4011\4023" '\4025' -> "\3984\4021" '\4134' -> "\4133\4142" '\4348' -> "\4316" '\6918' -> "\6917\6965" '\6920' -> "\6919\6965" '\6922' -> "\6921\6965" '\6924' -> "\6923\6965" '\6926' -> "\6925\6965" '\6930' -> "\6929\6965" '\6971' -> "\6970\6965" '\6973' -> "\6972\6965" '\6976' -> "\6974\6965" '\6977' -> "\6975\6965" '\6979' -> "\6978\6965" '\7468' -> "A" '\7469' -> "\198" '\7470' -> "B" '\7472' -> "D" '\7473' -> "E" '\7474' -> "\398" '\7475' -> "G" '\7476' -> "H" '\7477' -> "I" '\7478' -> "J" '\7479' -> "K" '\7480' -> "L" '\7481' -> "M" '\7482' -> "N" '\7484' -> "O" '\7485' -> "\546" '\7486' -> "P" '\7487' -> "R" '\7488' -> "T" '\7489' -> "U" '\7490' -> "W" '\7491' -> "a" '\7492' -> "\592" '\7493' -> "\593" '\7494' -> "\7426" '\7495' -> "b" '\7496' -> "d" '\7497' -> "e" '\7498' -> "\601" '\7499' -> "\603" '\7500' -> "\604" '\7501' -> "g" '\7503' -> "k" '\7504' -> "m" '\7505' -> "\331" '\7506' -> "o" '\7507' -> "\596" '\7508' -> "\7446" '\7509' -> "\7447" '\7510' -> "p" '\7511' -> "t" '\7512' -> "u" '\7513' -> "\7453" '\7514' -> "\623" '\7515' -> "v" '\7516' -> "\7461" '\7517' -> "\946" '\7518' -> "\947" '\7519' -> "\948" '\7520' -> "\966" '\7521' -> "\967" '\7522' -> "i" '\7523' -> "r" '\7524' -> "u" '\7525' -> "v" '\7526' -> "\946" '\7527' -> "\947" '\7528' -> "\961" '\7529' -> "\966" '\7530' -> "\967" '\7544' -> "\1085" '\7579' -> "\594" '\7580' -> "c" '\7581' -> "\597" '\7582' -> "\240" '\7583' -> "\604" '\7584' -> "f" '\7585' -> "\607" '\7586' -> "\609" '\7587' -> "\613" '\7588' -> "\616" '\7589' -> "\617" '\7590' -> "\618" '\7591' -> "\7547" '\7592' -> "\669" '\7593' -> "\621" '\7594' -> "\7557" '\7595' -> "\671" '\7596' -> "\625" '\7597' -> "\624" '\7598' -> "\626" '\7599' -> "\627" '\7600' -> "\628" '\7601' -> "\629" '\7602' -> "\632" '\7603' -> "\642" '\7604' -> "\643" '\7605' -> "\427" '\7606' -> "\649" '\7607' -> "\650" '\7608' -> "\7452" '\7609' -> "\651" '\7610' -> "\652" '\7611' -> "z" '\7612' -> "\656" '\7613' -> "\657" '\7614' -> "\658" '\7615' -> "\952" '\7680' -> "A\805" '\7681' -> "a\805" '\7682' -> "B\775" '\7683' -> "b\775" '\7684' -> "B\803" '\7685' -> "b\803" '\7686' -> "B\817" '\7687' -> "b\817" '\7688' -> "\199\769" '\7689' -> "\231\769" '\7690' -> "D\775" '\7691' -> "d\775" '\7692' -> "D\803" '\7693' -> "d\803" '\7694' -> "D\817" '\7695' -> "d\817" '\7696' -> "D\807" '\7697' -> "d\807" '\7698' -> "D\813" '\7699' -> "d\813" '\7700' -> "\274\768" '\7701' -> "\275\768" '\7702' -> "\274\769" '\7703' -> "\275\769" '\7704' -> "E\813" '\7705' -> "e\813" '\7706' -> "E\816" '\7707' -> "e\816" '\7708' -> "\552\774" '\7709' -> "\553\774" '\7710' -> "F\775" '\7711' -> "f\775" '\7712' -> "G\772" '\7713' -> "g\772" '\7714' -> "H\775" '\7715' -> "h\775" '\7716' -> "H\803" '\7717' -> "h\803" '\7718' -> "H\776" '\7719' -> "h\776" '\7720' -> "H\807" '\7721' -> "h\807" '\7722' -> "H\814" '\7723' -> "h\814" '\7724' -> "I\816" '\7725' -> "i\816" '\7726' -> "\207\769" '\7727' -> "\239\769" '\7728' -> "K\769" '\7729' -> "k\769" '\7730' -> "K\803" '\7731' -> "k\803" '\7732' -> "K\817" '\7733' -> "k\817" '\7734' -> "L\803" '\7735' -> "l\803" '\7736' -> "\7734\772" '\7737' -> "\7735\772" '\7738' -> "L\817" '\7739' -> "l\817" '\7740' -> "L\813" '\7741' -> "l\813" '\7742' -> "M\769" '\7743' -> "m\769" '\7744' -> "M\775" '\7745' -> "m\775" '\7746' -> "M\803" '\7747' -> "m\803" '\7748' -> "N\775" '\7749' -> "n\775" '\7750' -> "N\803" '\7751' -> "n\803" '\7752' -> "N\817" '\7753' -> "n\817" '\7754' -> "N\813" '\7755' -> "n\813" '\7756' -> "\213\769" '\7757' -> "\245\769" '\7758' -> "\213\776" '\7759' -> "\245\776" '\7760' -> "\332\768" '\7761' -> "\333\768" '\7762' -> "\332\769" '\7763' -> "\333\769" '\7764' -> "P\769" '\7765' -> "p\769" '\7766' -> "P\775" '\7767' -> "p\775" '\7768' -> "R\775" '\7769' -> "r\775" '\7770' -> "R\803" '\7771' -> "r\803" '\7772' -> "\7770\772" '\7773' -> "\7771\772" '\7774' -> "R\817" '\7775' -> "r\817" '\7776' -> "S\775" '\7777' -> "s\775" '\7778' -> "S\803" '\7779' -> "s\803" '\7780' -> "\346\775" '\7781' -> "\347\775" '\7782' -> "\352\775" '\7783' -> "\353\775" '\7784' -> "\7778\775" '\7785' -> "\7779\775" '\7786' -> "T\775" '\7787' -> "t\775" '\7788' -> "T\803" '\7789' -> "t\803" '\7790' -> "T\817" '\7791' -> "t\817" '\7792' -> "T\813" '\7793' -> "t\813" '\7794' -> "U\804" '\7795' -> "u\804" '\7796' -> "U\816" '\7797' -> "u\816" '\7798' -> "U\813" '\7799' -> "u\813" '\7800' -> "\360\769" '\7801' -> "\361\769" '\7802' -> "\362\776" '\7803' -> "\363\776" '\7804' -> "V\771" '\7805' -> "v\771" '\7806' -> "V\803" '\7807' -> "v\803" '\7808' -> "W\768" '\7809' -> "w\768" '\7810' -> "W\769" '\7811' -> "w\769" '\7812' -> "W\776" '\7813' -> "w\776" '\7814' -> "W\775" '\7815' -> "w\775" '\7816' -> "W\803" '\7817' -> "w\803" '\7818' -> "X\775" '\7819' -> "x\775" '\7820' -> "X\776" '\7821' -> "x\776" '\7822' -> "Y\775" '\7823' -> "y\775" '\7824' -> "Z\770" '\7825' -> "z\770" '\7826' -> "Z\803" '\7827' -> "z\803" '\7828' -> "Z\817" '\7829' -> "z\817" '\7830' -> "h\817" '\7831' -> "t\776" '\7832' -> "w\778" '\7833' -> "y\778" '\7834' -> "a\702" '\7835' -> "\383\775" '\7840' -> "A\803" '\7841' -> "a\803" '\7842' -> "A\777" '\7843' -> "a\777" '\7844' -> "\194\769" '\7845' -> "\226\769" '\7846' -> "\194\768" '\7847' -> "\226\768" '\7848' -> "\194\777" '\7849' -> "\226\777" '\7850' -> "\194\771" '\7851' -> "\226\771" '\7852' -> "\7840\770" '\7853' -> "\7841\770" '\7854' -> "\258\769" '\7855' -> "\259\769" '\7856' -> "\258\768" '\7857' -> "\259\768" '\7858' -> "\258\777" '\7859' -> "\259\777" '\7860' -> "\258\771" '\7861' -> "\259\771" '\7862' -> "\7840\774" '\7863' -> "\7841\774" '\7864' -> "E\803" '\7865' -> "e\803" '\7866' -> "E\777" '\7867' -> "e\777" '\7868' -> "E\771" '\7869' -> "e\771" '\7870' -> "\202\769" '\7871' -> "\234\769" '\7872' -> "\202\768" '\7873' -> "\234\768" '\7874' -> "\202\777" '\7875' -> "\234\777" '\7876' -> "\202\771" '\7877' -> "\234\771" '\7878' -> "\7864\770" '\7879' -> "\7865\770" '\7880' -> "I\777" '\7881' -> "i\777" '\7882' -> "I\803" '\7883' -> "i\803" '\7884' -> "O\803" '\7885' -> "o\803" '\7886' -> "O\777" '\7887' -> "o\777" '\7888' -> "\212\769" '\7889' -> "\244\769" '\7890' -> "\212\768" '\7891' -> "\244\768" '\7892' -> "\212\777" '\7893' -> "\244\777" '\7894' -> "\212\771" '\7895' -> "\244\771" '\7896' -> "\7884\770" '\7897' -> "\7885\770" '\7898' -> "\416\769" '\7899' -> "\417\769" '\7900' -> "\416\768" '\7901' -> "\417\768" '\7902' -> "\416\777" '\7903' -> "\417\777" '\7904' -> "\416\771" '\7905' -> "\417\771" '\7906' -> "\416\803" '\7907' -> "\417\803" '\7908' -> "U\803" '\7909' -> "u\803" '\7910' -> "U\777" '\7911' -> "u\777" '\7912' -> "\431\769" '\7913' -> "\432\769" '\7914' -> "\431\768" '\7915' -> "\432\768" '\7916' -> "\431\777" '\7917' -> "\432\777" '\7918' -> "\431\771" '\7919' -> "\432\771" '\7920' -> "\431\803" '\7921' -> "\432\803" '\7922' -> "Y\768" '\7923' -> "y\768" '\7924' -> "Y\803" '\7925' -> "y\803" '\7926' -> "Y\777" '\7927' -> "y\777" '\7928' -> "Y\771" '\7929' -> "y\771" '\7936' -> "\945\787" '\7937' -> "\945\788" '\7938' -> "\7936\768" '\7939' -> "\7937\768" '\7940' -> "\7936\769" '\7941' -> "\7937\769" '\7942' -> "\7936\834" '\7943' -> "\7937\834" '\7944' -> "\913\787" '\7945' -> "\913\788" '\7946' -> "\7944\768" '\7947' -> "\7945\768" '\7948' -> "\7944\769" '\7949' -> "\7945\769" '\7950' -> "\7944\834" '\7951' -> "\7945\834" '\7952' -> "\949\787" '\7953' -> "\949\788" '\7954' -> "\7952\768" '\7955' -> "\7953\768" '\7956' -> "\7952\769" '\7957' -> "\7953\769" '\7960' -> "\917\787" '\7961' -> "\917\788" '\7962' -> "\7960\768" '\7963' -> "\7961\768" '\7964' -> "\7960\769" '\7965' -> "\7961\769" '\7968' -> "\951\787" '\7969' -> "\951\788" '\7970' -> "\7968\768" '\7971' -> "\7969\768" '\7972' -> "\7968\769" '\7973' -> "\7969\769" '\7974' -> "\7968\834" '\7975' -> "\7969\834" '\7976' -> "\919\787" '\7977' -> "\919\788" '\7978' -> "\7976\768" '\7979' -> "\7977\768" '\7980' -> "\7976\769" '\7981' -> "\7977\769" '\7982' -> "\7976\834" '\7983' -> "\7977\834" '\7984' -> "\953\787" '\7985' -> "\953\788" '\7986' -> "\7984\768" '\7987' -> "\7985\768" '\7988' -> "\7984\769" '\7989' -> "\7985\769" '\7990' -> "\7984\834" '\7991' -> "\7985\834" '\7992' -> "\921\787" '\7993' -> "\921\788" '\7994' -> "\7992\768" '\7995' -> "\7993\768" '\7996' -> "\7992\769" '\7997' -> "\7993\769" '\7998' -> "\7992\834" '\7999' -> "\7993\834" '\8000' -> "\959\787" '\8001' -> "\959\788" '\8002' -> "\8000\768" '\8003' -> "\8001\768" '\8004' -> "\8000\769" '\8005' -> "\8001\769" '\8008' -> "\927\787" '\8009' -> "\927\788" '\8010' -> "\8008\768" '\8011' -> "\8009\768" '\8012' -> "\8008\769" '\8013' -> "\8009\769" '\8016' -> "\965\787" '\8017' -> "\965\788" '\8018' -> "\8016\768" '\8019' -> "\8017\768" '\8020' -> "\8016\769" '\8021' -> "\8017\769" '\8022' -> "\8016\834" '\8023' -> "\8017\834" '\8025' -> "\933\788" '\8027' -> "\8025\768" '\8029' -> "\8025\769" '\8031' -> "\8025\834" '\8032' -> "\969\787" '\8033' -> "\969\788" '\8034' -> "\8032\768" '\8035' -> "\8033\768" '\8036' -> "\8032\769" '\8037' -> "\8033\769" '\8038' -> "\8032\834" '\8039' -> "\8033\834" '\8040' -> "\937\787" '\8041' -> "\937\788" '\8042' -> "\8040\768" '\8043' -> "\8041\768" '\8044' -> "\8040\769" '\8045' -> "\8041\769" '\8046' -> "\8040\834" '\8047' -> "\8041\834" '\8048' -> "\945\768" '\8049' -> "\940" '\8050' -> "\949\768" '\8051' -> "\941" '\8052' -> "\951\768" '\8053' -> "\942" '\8054' -> "\953\768" '\8055' -> "\943" '\8056' -> "\959\768" '\8057' -> "\972" '\8058' -> "\965\768" '\8059' -> "\973" '\8060' -> "\969\768" '\8061' -> "\974" '\8064' -> "\7936\837" '\8065' -> "\7937\837" '\8066' -> "\7938\837" '\8067' -> "\7939\837" '\8068' -> "\7940\837" '\8069' -> "\7941\837" '\8070' -> "\7942\837" '\8071' -> "\7943\837" '\8072' -> "\7944\837" '\8073' -> "\7945\837" '\8074' -> "\7946\837" '\8075' -> "\7947\837" '\8076' -> "\7948\837" '\8077' -> "\7949\837" '\8078' -> "\7950\837" '\8079' -> "\7951\837" '\8080' -> "\7968\837" '\8081' -> "\7969\837" '\8082' -> "\7970\837" '\8083' -> "\7971\837" '\8084' -> "\7972\837" '\8085' -> "\7973\837" '\8086' -> "\7974\837" '\8087' -> "\7975\837" '\8088' -> "\7976\837" '\8089' -> "\7977\837" '\8090' -> "\7978\837" '\8091' -> "\7979\837" '\8092' -> "\7980\837" '\8093' -> "\7981\837" '\8094' -> "\7982\837" '\8095' -> "\7983\837" '\8096' -> "\8032\837" '\8097' -> "\8033\837" '\8098' -> "\8034\837" '\8099' -> "\8035\837" '\8100' -> "\8036\837" '\8101' -> "\8037\837" '\8102' -> "\8038\837" '\8103' -> "\8039\837" '\8104' -> "\8040\837" '\8105' -> "\8041\837" '\8106' -> "\8042\837" '\8107' -> "\8043\837" '\8108' -> "\8044\837" '\8109' -> "\8045\837" '\8110' -> "\8046\837" '\8111' -> "\8047\837" '\8112' -> "\945\774" '\8113' -> "\945\772" '\8114' -> "\8048\837" '\8115' -> "\945\837" '\8116' -> "\940\837" '\8118' -> "\945\834" '\8119' -> "\8118\837" '\8120' -> "\913\774" '\8121' -> "\913\772" '\8122' -> "\913\768" '\8123' -> "\902" '\8124' -> "\913\837" '\8125' -> " \787" '\8126' -> "\953" '\8127' -> " \787" '\8128' -> " \834" '\8129' -> "\168\834" '\8130' -> "\8052\837" '\8131' -> "\951\837" '\8132' -> "\942\837" '\8134' -> "\951\834" '\8135' -> "\8134\837" '\8136' -> "\917\768" '\8137' -> "\904" '\8138' -> "\919\768" '\8139' -> "\905" '\8140' -> "\919\837" '\8141' -> "\8127\768" '\8142' -> "\8127\769" '\8143' -> "\8127\834" '\8144' -> "\953\774" '\8145' -> "\953\772" '\8146' -> "\970\768" '\8147' -> "\912" '\8150' -> "\953\834" '\8151' -> "\970\834" '\8152' -> "\921\774" '\8153' -> "\921\772" '\8154' -> "\921\768" '\8155' -> "\906" '\8157' -> "\8190\768" '\8158' -> "\8190\769" '\8159' -> "\8190\834" '\8160' -> "\965\774" '\8161' -> "\965\772" '\8162' -> "\971\768" '\8163' -> "\944" '\8164' -> "\961\787" '\8165' -> "\961\788" '\8166' -> "\965\834" '\8167' -> "\971\834" '\8168' -> "\933\774" '\8169' -> "\933\772" '\8170' -> "\933\768" '\8171' -> "\910" '\8172' -> "\929\788" '\8173' -> "\168\768" '\8174' -> "\901" '\8175' -> "`" '\8178' -> "\8060\837" '\8179' -> "\969\837" '\8180' -> "\974\837" '\8182' -> "\969\834" '\8183' -> "\8182\837" '\8184' -> "\927\768" '\8185' -> "\908" '\8186' -> "\937\768" '\8187' -> "\911" '\8188' -> "\937\837" '\8189' -> "\180" '\8190' -> " \788" '\8192' -> "\8194" '\8193' -> "\8195" '\8194' -> " " '\8195' -> " " '\8196' -> " " '\8197' -> " " '\8198' -> " " '\8199' -> " " '\8200' -> " " '\8201' -> " " '\8202' -> " " '\8209' -> "\8208" '\8215' -> " \819" '\8228' -> "." '\8229' -> ".." '\8230' -> "..." '\8239' -> " " '\8243' -> "\8242\8242" '\8244' -> "\8242\8242\8242" '\8246' -> "\8245\8245" '\8247' -> "\8245\8245\8245" '\8252' -> "!!" '\8254' -> " \773" '\8263' -> "??" '\8264' -> "?!" '\8265' -> "!?" '\8279' -> "\8242\8242\8242\8242" '\8287' -> " " '\8304' -> "0" '\8305' -> "i" '\8308' -> "4" '\8309' -> "5" '\8310' -> "6" '\8311' -> "7" '\8312' -> "8" '\8313' -> "9" '\8314' -> "+" '\8315' -> "\8722" '\8316' -> "=" '\8317' -> "(" '\8318' -> ")" '\8319' -> "n" '\8320' -> "0" '\8321' -> "1" '\8322' -> "2" '\8323' -> "3" '\8324' -> "4" '\8325' -> "5" '\8326' -> "6" '\8327' -> "7" '\8328' -> "8" '\8329' -> "9" '\8330' -> "+" '\8331' -> "\8722" '\8332' -> "=" '\8333' -> "(" '\8334' -> ")" '\8336' -> "a" '\8337' -> "e" '\8338' -> "o" '\8339' -> "x" '\8340' -> "\601" '\8341' -> "h" '\8342' -> "k" '\8343' -> "l" '\8344' -> "m" '\8345' -> "n" '\8346' -> "p" '\8347' -> "s" '\8348' -> "t" '\8360' -> "Rs" '\8448' -> "a/c" '\8449' -> "a/s" '\8450' -> "C" '\8451' -> "\176C" '\8453' -> "c/o" '\8454' -> "c/u" '\8455' -> "\400" '\8457' -> "\176F" '\8458' -> "g" '\8459' -> "H" '\8460' -> "H" '\8461' -> "H" '\8462' -> "h" '\8463' -> "\295" '\8464' -> "I" '\8465' -> "I" '\8466' -> "L" '\8467' -> "l" '\8469' -> "N" '\8470' -> "No" '\8473' -> "P" '\8474' -> "Q" '\8475' -> "R" '\8476' -> "R" '\8477' -> "R" '\8480' -> "SM" '\8481' -> "TEL" '\8482' -> "TM" '\8484' -> "Z" '\8486' -> "\937" '\8488' -> "Z" '\8490' -> "K" '\8491' -> "\197" '\8492' -> "B" '\8493' -> "C" '\8495' -> "e" '\8496' -> "E" '\8497' -> "F" '\8499' -> "M" '\8500' -> "o" '\8501' -> "\1488" '\8502' -> "\1489" '\8503' -> "\1490" '\8504' -> "\1491" '\8505' -> "i" '\8507' -> "FAX" '\8508' -> "\960" '\8509' -> "\947" '\8510' -> "\915" '\8511' -> "\928" '\8512' -> "\8721" '\8517' -> "D" '\8518' -> "d" '\8519' -> "e" '\8520' -> "i" '\8521' -> "j" '\8528' -> "1\8260\&7" '\8529' -> "1\8260\&9" '\8530' -> "1\8260\&10" '\8531' -> "1\8260\&3" '\8532' -> "2\8260\&3" '\8533' -> "1\8260\&5" '\8534' -> "2\8260\&5" '\8535' -> "3\8260\&5" '\8536' -> "4\8260\&5" '\8537' -> "1\8260\&6" '\8538' -> "5\8260\&6" '\8539' -> "1\8260\&8" '\8540' -> "3\8260\&8" '\8541' -> "5\8260\&8" '\8542' -> "7\8260\&8" '\8543' -> "1\8260" '\8544' -> "I" '\8545' -> "II" '\8546' -> "III" '\8547' -> "IV" '\8548' -> "V" '\8549' -> "VI" '\8550' -> "VII" '\8551' -> "VIII" '\8552' -> "IX" '\8553' -> "X" '\8554' -> "XI" '\8555' -> "XII" '\8556' -> "L" '\8557' -> "C" '\8558' -> "D" '\8559' -> "M" '\8560' -> "i" '\8561' -> "ii" '\8562' -> "iii" '\8563' -> "iv" '\8564' -> "v" '\8565' -> "vi" '\8566' -> "vii" '\8567' -> "viii" '\8568' -> "ix" '\8569' -> "x" '\8570' -> "xi" '\8571' -> "xii" '\8572' -> "l" '\8573' -> "c" '\8574' -> "d" '\8575' -> "m" '\8585' -> "0\8260\&3" '\8602' -> "\8592\824" '\8603' -> "\8594\824" '\8622' -> "\8596\824" '\8653' -> "\8656\824" '\8654' -> "\8660\824" '\8655' -> "\8658\824" '\8708' -> "\8707\824" '\8713' -> "\8712\824" '\8716' -> "\8715\824" '\8740' -> "\8739\824" '\8742' -> "\8741\824" '\8748' -> "\8747\8747" '\8749' -> "\8747\8747\8747" '\8751' -> "\8750\8750" '\8752' -> "\8750\8750\8750" '\8769' -> "\8764\824" '\8772' -> "\8771\824" '\8775' -> "\8773\824" '\8777' -> "\8776\824" '\8800' -> "=\824" '\8802' -> "\8801\824" '\8813' -> "\8781\824" '\8814' -> "<\824" '\8815' -> ">\824" '\8816' -> "\8804\824" '\8817' -> "\8805\824" '\8820' -> "\8818\824" '\8821' -> "\8819\824" '\8824' -> "\8822\824" '\8825' -> "\8823\824" '\8832' -> "\8826\824" '\8833' -> "\8827\824" '\8836' -> "\8834\824" '\8837' -> "\8835\824" '\8840' -> "\8838\824" '\8841' -> "\8839\824" '\8876' -> "\8866\824" '\8877' -> "\8872\824" '\8878' -> "\8873\824" '\8879' -> "\8875\824" '\8928' -> "\8828\824" '\8929' -> "\8829\824" '\8930' -> "\8849\824" '\8931' -> "\8850\824" '\8938' -> "\8882\824" '\8939' -> "\8883\824" '\8940' -> "\8884\824" '\8941' -> "\8885\824" '\9001' -> "\12296" '\9002' -> "\12297" '\9312' -> "1" '\9313' -> "2" '\9314' -> "3" '\9315' -> "4" '\9316' -> "5" '\9317' -> "6" '\9318' -> "7" '\9319' -> "8" '\9320' -> "9" '\9321' -> "10" '\9322' -> "11" '\9323' -> "12" '\9324' -> "13" '\9325' -> "14" '\9326' -> "15" '\9327' -> "16" '\9328' -> "17" '\9329' -> "18" '\9330' -> "19" '\9331' -> "20" '\9332' -> "(1)" '\9333' -> "(2)" '\9334' -> "(3)" '\9335' -> "(4)" '\9336' -> "(5)" '\9337' -> "(6)" '\9338' -> "(7)" '\9339' -> "(8)" '\9340' -> "(9)" '\9341' -> "(10)" '\9342' -> "(11)" '\9343' -> "(12)" '\9344' -> "(13)" '\9345' -> "(14)" '\9346' -> "(15)" '\9347' -> "(16)" '\9348' -> "(17)" '\9349' -> "(18)" '\9350' -> "(19)" '\9351' -> "(20)" '\9352' -> "1." '\9353' -> "2." '\9354' -> "3." '\9355' -> "4." '\9356' -> "5." '\9357' -> "6." '\9358' -> "7." '\9359' -> "8." '\9360' -> "9." '\9361' -> "10." '\9362' -> "11." '\9363' -> "12." '\9364' -> "13." '\9365' -> "14." '\9366' -> "15." '\9367' -> "16." '\9368' -> "17." '\9369' -> "18." '\9370' -> "19." '\9371' -> "20." '\9372' -> "(a)" '\9373' -> "(b)" '\9374' -> "(c)" '\9375' -> "(d)" '\9376' -> "(e)" '\9377' -> "(f)" '\9378' -> "(g)" '\9379' -> "(h)" '\9380' -> "(i)" '\9381' -> "(j)" '\9382' -> "(k)" '\9383' -> "(l)" '\9384' -> "(m)" '\9385' -> "(n)" '\9386' -> "(o)" '\9387' -> "(p)" '\9388' -> "(q)" '\9389' -> "(r)" '\9390' -> "(s)" '\9391' -> "(t)" '\9392' -> "(u)" '\9393' -> "(v)" '\9394' -> "(w)" '\9395' -> "(x)" '\9396' -> "(y)" '\9397' -> "(z)" '\9398' -> "A" '\9399' -> "B" '\9400' -> "C" '\9401' -> "D" '\9402' -> "E" '\9403' -> "F" '\9404' -> "G" '\9405' -> "H" '\9406' -> "I" '\9407' -> "J" '\9408' -> "K" '\9409' -> "L" '\9410' -> "M" '\9411' -> "N" '\9412' -> "O" '\9413' -> "P" '\9414' -> "Q" '\9415' -> "R" '\9416' -> "S" '\9417' -> "T" '\9418' -> "U" '\9419' -> "V" '\9420' -> "W" '\9421' -> "X" '\9422' -> "Y" '\9423' -> "Z" '\9424' -> "a" '\9425' -> "b" '\9426' -> "c" '\9427' -> "d" '\9428' -> "e" '\9429' -> "f" '\9430' -> "g" '\9431' -> "h" '\9432' -> "i" '\9433' -> "j" '\9434' -> "k" '\9435' -> "l" '\9436' -> "m" '\9437' -> "n" '\9438' -> "o" '\9439' -> "p" '\9440' -> "q" '\9441' -> "r" '\9442' -> "s" '\9443' -> "t" '\9444' -> "u" '\9445' -> "v" '\9446' -> "w" '\9447' -> "x" '\9448' -> "y" '\9449' -> "z" '\9450' -> "0" '\10764' -> "\8747\8747\8747\8747" '\10868' -> "::=" '\10869' -> "==" '\10870' -> "===" '\10972' -> "\10973\824" '\11388' -> "j" '\11389' -> "V" '\11631' -> "\11617" '\11935' -> "\27597" '\12019' -> "\40863" '\12032' -> "\19968" '\12033' -> "\20008" '\12034' -> "\20022" '\12035' -> "\20031" '\12036' -> "\20057" '\12037' -> "\20101" '\12038' -> "\20108" '\12039' -> "\20128" '\12040' -> "\20154" '\12041' -> "\20799" '\12042' -> "\20837" '\12043' -> "\20843" '\12044' -> "\20866" '\12045' -> "\20886" '\12046' -> "\20907" '\12047' -> "\20960" '\12048' -> "\20981" '\12049' -> "\20992" '\12050' -> "\21147" '\12051' -> "\21241" '\12052' -> "\21269" '\12053' -> "\21274" '\12054' -> "\21304" '\12055' -> "\21313" '\12056' -> "\21340" '\12057' -> "\21353" '\12058' -> "\21378" '\12059' -> "\21430" '\12060' -> "\21448" '\12061' -> "\21475" '\12062' -> "\22231" '\12063' -> "\22303" '\12064' -> "\22763" '\12065' -> "\22786" '\12066' -> "\22794" '\12067' -> "\22805" '\12068' -> "\22823" '\12069' -> "\22899" '\12070' -> "\23376" '\12071' -> "\23424" '\12072' -> "\23544" '\12073' -> "\23567" '\12074' -> "\23586" '\12075' -> "\23608" '\12076' -> "\23662" '\12077' -> "\23665" '\12078' -> "\24027" '\12079' -> "\24037" '\12080' -> "\24049" '\12081' -> "\24062" '\12082' -> "\24178" '\12083' -> "\24186" '\12084' -> "\24191" '\12085' -> "\24308" '\12086' -> "\24318" '\12087' -> "\24331" '\12088' -> "\24339" '\12089' -> "\24400" '\12090' -> "\24417" '\12091' -> "\24435" '\12092' -> "\24515" '\12093' -> "\25096" '\12094' -> "\25142" '\12095' -> "\25163" '\12096' -> "\25903" '\12097' -> "\25908" '\12098' -> "\25991" '\12099' -> "\26007" '\12100' -> "\26020" '\12101' -> "\26041" '\12102' -> "\26080" '\12103' -> "\26085" '\12104' -> "\26352" '\12105' -> "\26376" '\12106' -> "\26408" '\12107' -> "\27424" '\12108' -> "\27490" '\12109' -> "\27513" '\12110' -> "\27571" '\12111' -> "\27595" '\12112' -> "\27604" '\12113' -> "\27611" '\12114' -> "\27663" '\12115' -> "\27668" '\12116' -> "\27700" '\12117' -> "\28779" '\12118' -> "\29226" '\12119' -> "\29238" '\12120' -> "\29243" '\12121' -> "\29247" '\12122' -> "\29255" '\12123' -> "\29273" '\12124' -> "\29275" '\12125' -> "\29356" '\12126' -> "\29572" '\12127' -> "\29577" '\12128' -> "\29916" '\12129' -> "\29926" '\12130' -> "\29976" '\12131' -> "\29983" '\12132' -> "\29992" '\12133' -> "\30000" '\12134' -> "\30091" '\12135' -> "\30098" '\12136' -> "\30326" '\12137' -> "\30333" '\12138' -> "\30382" '\12139' -> "\30399" '\12140' -> "\30446" '\12141' -> "\30683" '\12142' -> "\30690" '\12143' -> "\30707" '\12144' -> "\31034" '\12145' -> "\31160" '\12146' -> "\31166" '\12147' -> "\31348" '\12148' -> "\31435" '\12149' -> "\31481" '\12150' -> "\31859" '\12151' -> "\31992" '\12152' -> "\32566" '\12153' -> "\32593" '\12154' -> "\32650" '\12155' -> "\32701" '\12156' -> "\32769" '\12157' -> "\32780" '\12158' -> "\32786" '\12159' -> "\32819" '\12160' -> "\32895" '\12161' -> "\32905" '\12162' -> "\33251" '\12163' -> "\33258" '\12164' -> "\33267" '\12165' -> "\33276" '\12166' -> "\33292" '\12167' -> "\33307" '\12168' -> "\33311" '\12169' -> "\33390" '\12170' -> "\33394" '\12171' -> "\33400" '\12172' -> "\34381" '\12173' -> "\34411" '\12174' -> "\34880" '\12175' -> "\34892" '\12176' -> "\34915" '\12177' -> "\35198" '\12178' -> "\35211" '\12179' -> "\35282" '\12180' -> "\35328" '\12181' -> "\35895" '\12182' -> "\35910" '\12183' -> "\35925" '\12184' -> "\35960" '\12185' -> "\35997" '\12186' -> "\36196" '\12187' -> "\36208" '\12188' -> "\36275" '\12189' -> "\36523" '\12190' -> "\36554" '\12191' -> "\36763" '\12192' -> "\36784" '\12193' -> "\36789" '\12194' -> "\37009" '\12195' -> "\37193" '\12196' -> "\37318" '\12197' -> "\37324" '\12198' -> "\37329" '\12199' -> "\38263" '\12200' -> "\38272" '\12201' -> "\38428" '\12202' -> "\38582" '\12203' -> "\38585" '\12204' -> "\38632" '\12205' -> "\38737" '\12206' -> "\38750" '\12207' -> "\38754" '\12208' -> "\38761" '\12209' -> "\38859" '\12210' -> "\38893" '\12211' -> "\38899" '\12212' -> "\38913" '\12213' -> "\39080" '\12214' -> "\39131" '\12215' -> "\39135" '\12216' -> "\39318" '\12217' -> "\39321" '\12218' -> "\39340" '\12219' -> "\39592" '\12220' -> "\39640" '\12221' -> "\39647" '\12222' -> "\39717" '\12223' -> "\39727" '\12224' -> "\39730" '\12225' -> "\39740" '\12226' -> "\39770" '\12227' -> "\40165" '\12228' -> "\40565" '\12229' -> "\40575" '\12230' -> "\40613" '\12231' -> "\40635" '\12232' -> "\40643" '\12233' -> "\40653" '\12234' -> "\40657" '\12235' -> "\40697" '\12236' -> "\40701" '\12237' -> "\40718" '\12238' -> "\40723" '\12239' -> "\40736" '\12240' -> "\40763" '\12241' -> "\40778" '\12242' -> "\40786" '\12243' -> "\40845" '\12244' -> "\40860" '\12245' -> "\40864" '\12288' -> " " '\12342' -> "\12306" '\12344' -> "\21313" '\12345' -> "\21316" '\12346' -> "\21317" '\12364' -> "\12363\12441" '\12366' -> "\12365\12441" '\12368' -> "\12367\12441" '\12370' -> "\12369\12441" '\12372' -> "\12371\12441" '\12374' -> "\12373\12441" '\12376' -> "\12375\12441" '\12378' -> "\12377\12441" '\12380' -> "\12379\12441" '\12382' -> "\12381\12441" '\12384' -> "\12383\12441" '\12386' -> "\12385\12441" '\12389' -> "\12388\12441" '\12391' -> "\12390\12441" '\12393' -> "\12392\12441" '\12400' -> "\12399\12441" '\12401' -> "\12399\12442" '\12403' -> "\12402\12441" '\12404' -> "\12402\12442" '\12406' -> "\12405\12441" '\12407' -> "\12405\12442" '\12409' -> "\12408\12441" '\12410' -> "\12408\12442" '\12412' -> "\12411\12441" '\12413' -> "\12411\12442" '\12436' -> "\12358\12441" '\12443' -> " \12441" '\12444' -> " \12442" '\12446' -> "\12445\12441" '\12447' -> "\12424\12426" '\12460' -> "\12459\12441" '\12462' -> "\12461\12441" '\12464' -> "\12463\12441" '\12466' -> "\12465\12441" '\12468' -> "\12467\12441" '\12470' -> "\12469\12441" '\12472' -> "\12471\12441" '\12474' -> "\12473\12441" '\12476' -> "\12475\12441" '\12478' -> "\12477\12441" '\12480' -> "\12479\12441" '\12482' -> "\12481\12441" '\12485' -> "\12484\12441" '\12487' -> "\12486\12441" '\12489' -> "\12488\12441" '\12496' -> "\12495\12441" '\12497' -> "\12495\12442" '\12499' -> "\12498\12441" '\12500' -> "\12498\12442" '\12502' -> "\12501\12441" '\12503' -> "\12501\12442" '\12505' -> "\12504\12441" '\12506' -> "\12504\12442" '\12508' -> "\12507\12441" '\12509' -> "\12507\12442" '\12532' -> "\12454\12441" '\12535' -> "\12527\12441" '\12536' -> "\12528\12441" '\12537' -> "\12529\12441" '\12538' -> "\12530\12441" '\12542' -> "\12541\12441" '\12543' -> "\12467\12488" '\12593' -> "\4352" '\12594' -> "\4353" '\12595' -> "\4522" '\12596' -> "\4354" '\12597' -> "\4524" '\12598' -> "\4525" '\12599' -> "\4355" '\12600' -> "\4356" '\12601' -> "\4357" '\12602' -> "\4528" '\12603' -> "\4529" '\12604' -> "\4530" '\12605' -> "\4531" '\12606' -> "\4532" '\12607' -> "\4533" '\12608' -> "\4378" '\12609' -> "\4358" '\12610' -> "\4359" '\12611' -> "\4360" '\12612' -> "\4385" '\12613' -> "\4361" '\12614' -> "\4362" '\12615' -> "\4363" '\12616' -> "\4364" '\12617' -> "\4365" '\12618' -> "\4366" '\12619' -> "\4367" '\12620' -> "\4368" '\12621' -> "\4369" '\12622' -> "\4370" '\12623' -> "\4449" '\12624' -> "\4450" '\12625' -> "\4451" '\12626' -> "\4452" '\12627' -> "\4453" '\12628' -> "\4454" '\12629' -> "\4455" '\12630' -> "\4456" '\12631' -> "\4457" '\12632' -> "\4458" '\12633' -> "\4459" '\12634' -> "\4460" '\12635' -> "\4461" '\12636' -> "\4462" '\12637' -> "\4463" '\12638' -> "\4464" '\12639' -> "\4465" '\12640' -> "\4466" '\12641' -> "\4467" '\12642' -> "\4468" '\12643' -> "\4469" '\12644' -> "\4448" '\12645' -> "\4372" '\12646' -> "\4373" '\12647' -> "\4551" '\12648' -> "\4552" '\12649' -> "\4556" '\12650' -> "\4558" '\12651' -> "\4563" '\12652' -> "\4567" '\12653' -> "\4569" '\12654' -> "\4380" '\12655' -> "\4573" '\12656' -> "\4575" '\12657' -> "\4381" '\12658' -> "\4382" '\12659' -> "\4384" '\12660' -> "\4386" '\12661' -> "\4387" '\12662' -> "\4391" '\12663' -> "\4393" '\12664' -> "\4395" '\12665' -> "\4396" '\12666' -> "\4397" '\12667' -> "\4398" '\12668' -> "\4399" '\12669' -> "\4402" '\12670' -> "\4406" '\12671' -> "\4416" '\12672' -> "\4423" '\12673' -> "\4428" '\12674' -> "\4593" '\12675' -> "\4594" '\12676' -> "\4439" '\12677' -> "\4440" '\12678' -> "\4441" '\12679' -> "\4484" '\12680' -> "\4485" '\12681' -> "\4488" '\12682' -> "\4497" '\12683' -> "\4498" '\12684' -> "\4500" '\12685' -> "\4510" '\12686' -> "\4513" '\12690' -> "\19968" '\12691' -> "\20108" '\12692' -> "\19977" '\12693' -> "\22235" '\12694' -> "\19978" '\12695' -> "\20013" '\12696' -> "\19979" '\12697' -> "\30002" '\12698' -> "\20057" '\12699' -> "\19993" '\12700' -> "\19969" '\12701' -> "\22825" '\12702' -> "\22320" '\12703' -> "\20154" '\12800' -> "(\4352)" '\12801' -> "(\4354)" '\12802' -> "(\4355)" '\12803' -> "(\4357)" '\12804' -> "(\4358)" '\12805' -> "(\4359)" '\12806' -> "(\4361)" '\12807' -> "(\4363)" '\12808' -> "(\4364)" '\12809' -> "(\4366)" '\12810' -> "(\4367)" '\12811' -> "(\4368)" '\12812' -> "(\4369)" '\12813' -> "(\4370)" '\12814' -> "(\4352\4449)" '\12815' -> "(\4354\4449)" '\12816' -> "(\4355\4449)" '\12817' -> "(\4357\4449)" '\12818' -> "(\4358\4449)" '\12819' -> "(\4359\4449)" '\12820' -> "(\4361\4449)" '\12821' -> "(\4363\4449)" '\12822' -> "(\4364\4449)" '\12823' -> "(\4366\4449)" '\12824' -> "(\4367\4449)" '\12825' -> "(\4368\4449)" '\12826' -> "(\4369\4449)" '\12827' -> "(\4370\4449)" '\12828' -> "(\4364\4462)" '\12829' -> "(\4363\4457\4364\4453\4523)" '\12830' -> "(\4363\4457\4370\4462)" '\12832' -> "(\19968)" '\12833' -> "(\20108)" '\12834' -> "(\19977)" '\12835' -> "(\22235)" '\12836' -> "(\20116)" '\12837' -> "(\20845)" '\12838' -> "(\19971)" '\12839' -> "(\20843)" '\12840' -> "(\20061)" '\12841' -> "(\21313)" '\12842' -> "(\26376)" '\12843' -> "(\28779)" '\12844' -> "(\27700)" '\12845' -> "(\26408)" '\12846' -> "(\37329)" '\12847' -> "(\22303)" '\12848' -> "(\26085)" '\12849' -> "(\26666)" '\12850' -> "(\26377)" '\12851' -> "(\31038)" '\12852' -> "(\21517)" '\12853' -> "(\29305)" '\12854' -> "(\36001)" '\12855' -> "(\31069)" '\12856' -> "(\21172)" '\12857' -> "(\20195)" '\12858' -> "(\21628)" '\12859' -> "(\23398)" '\12860' -> "(\30435)" '\12861' -> "(\20225)" '\12862' -> "(\36039)" '\12863' -> "(\21332)" '\12864' -> "(\31085)" '\12865' -> "(\20241)" '\12866' -> "(\33258)" '\12867' -> "(\33267)" '\12868' -> "\21839" '\12869' -> "\24188" '\12870' -> "\25991" '\12871' -> "\31631" '\12880' -> "PTE" '\12881' -> "21" '\12882' -> "22" '\12883' -> "23" '\12884' -> "24" '\12885' -> "25" '\12886' -> "26" '\12887' -> "27" '\12888' -> "28" '\12889' -> "29" '\12890' -> "30" '\12891' -> "31" '\12892' -> "32" '\12893' -> "33" '\12894' -> "34" '\12895' -> "35" '\12896' -> "\4352" '\12897' -> "\4354" '\12898' -> "\4355" '\12899' -> "\4357" '\12900' -> "\4358" '\12901' -> "\4359" '\12902' -> "\4361" '\12903' -> "\4363" '\12904' -> "\4364" '\12905' -> "\4366" '\12906' -> "\4367" '\12907' -> "\4368" '\12908' -> "\4369" '\12909' -> "\4370" '\12910' -> "\4352\4449" '\12911' -> "\4354\4449" '\12912' -> "\4355\4449" '\12913' -> "\4357\4449" '\12914' -> "\4358\4449" '\12915' -> "\4359\4449" '\12916' -> "\4361\4449" '\12917' -> "\4363\4449" '\12918' -> "\4364\4449" '\12919' -> "\4366\4449" '\12920' -> "\4367\4449" '\12921' -> "\4368\4449" '\12922' -> "\4369\4449" '\12923' -> "\4370\4449" '\12924' -> "\4366\4449\4535\4352\4457" '\12925' -> "\4364\4462\4363\4468" '\12926' -> "\4363\4462" '\12928' -> "\19968" '\12929' -> "\20108" '\12930' -> "\19977" '\12931' -> "\22235" '\12932' -> "\20116" '\12933' -> "\20845" '\12934' -> "\19971" '\12935' -> "\20843" '\12936' -> "\20061" '\12937' -> "\21313" '\12938' -> "\26376" '\12939' -> "\28779" '\12940' -> "\27700" '\12941' -> "\26408" '\12942' -> "\37329" '\12943' -> "\22303" '\12944' -> "\26085" '\12945' -> "\26666" '\12946' -> "\26377" '\12947' -> "\31038" '\12948' -> "\21517" '\12949' -> "\29305" '\12950' -> "\36001" '\12951' -> "\31069" '\12952' -> "\21172" '\12953' -> "\31192" '\12954' -> "\30007" '\12955' -> "\22899" '\12956' -> "\36969" '\12957' -> "\20778" '\12958' -> "\21360" '\12959' -> "\27880" '\12960' -> "\38917" '\12961' -> "\20241" '\12962' -> "\20889" '\12963' -> "\27491" '\12964' -> "\19978" '\12965' -> "\20013" '\12966' -> "\19979" '\12967' -> "\24038" '\12968' -> "\21491" '\12969' -> "\21307" '\12970' -> "\23447" '\12971' -> "\23398" '\12972' -> "\30435" '\12973' -> "\20225" '\12974' -> "\36039" '\12975' -> "\21332" '\12976' -> "\22812" '\12977' -> "36" '\12978' -> "37" '\12979' -> "38" '\12980' -> "39" '\12981' -> "40" '\12982' -> "41" '\12983' -> "42" '\12984' -> "43" '\12985' -> "44" '\12986' -> "45" '\12987' -> "46" '\12988' -> "47" '\12989' -> "48" '\12990' -> "49" '\12991' -> "50" '\12992' -> "1\26376" '\12993' -> "2\26376" '\12994' -> "3\26376" '\12995' -> "4\26376" '\12996' -> "5\26376" '\12997' -> "6\26376" '\12998' -> "7\26376" '\12999' -> "8\26376" '\13000' -> "9\26376" '\13001' -> "10\26376" '\13002' -> "11\26376" '\13003' -> "12\26376" '\13004' -> "Hg" '\13005' -> "erg" '\13006' -> "eV" '\13007' -> "LTD" '\13008' -> "\12450" '\13009' -> "\12452" '\13010' -> "\12454" '\13011' -> "\12456" '\13012' -> "\12458" '\13013' -> "\12459" '\13014' -> "\12461" '\13015' -> "\12463" '\13016' -> "\12465" '\13017' -> "\12467" '\13018' -> "\12469" '\13019' -> "\12471" '\13020' -> "\12473" '\13021' -> "\12475" '\13022' -> "\12477" '\13023' -> "\12479" '\13024' -> "\12481" '\13025' -> "\12484" '\13026' -> "\12486" '\13027' -> "\12488" '\13028' -> "\12490" '\13029' -> "\12491" '\13030' -> "\12492" '\13031' -> "\12493" '\13032' -> "\12494" '\13033' -> "\12495" '\13034' -> "\12498" '\13035' -> "\12501" '\13036' -> "\12504" '\13037' -> "\12507" '\13038' -> "\12510" '\13039' -> "\12511" '\13040' -> "\12512" '\13041' -> "\12513" '\13042' -> "\12514" '\13043' -> "\12516" '\13044' -> "\12518" '\13045' -> "\12520" '\13046' -> "\12521" '\13047' -> "\12522" '\13048' -> "\12523" '\13049' -> "\12524" '\13050' -> "\12525" '\13051' -> "\12527" '\13052' -> "\12528" '\13053' -> "\12529" '\13054' -> "\12530" '\13055' -> "\20196\21644" '\13056' -> "\12450\12497\12540\12488" '\13057' -> "\12450\12523\12501\12449" '\13058' -> "\12450\12531\12506\12450" '\13059' -> "\12450\12540\12523" '\13060' -> "\12452\12491\12531\12464" '\13061' -> "\12452\12531\12481" '\13062' -> "\12454\12457\12531" '\13063' -> "\12456\12473\12463\12540\12489" '\13064' -> "\12456\12540\12459\12540" '\13065' -> "\12458\12531\12473" '\13066' -> "\12458\12540\12512" '\13067' -> "\12459\12452\12522" '\13068' -> "\12459\12521\12483\12488" '\13069' -> "\12459\12525\12522\12540" '\13070' -> "\12460\12525\12531" '\13071' -> "\12460\12531\12510" '\13072' -> "\12462\12460" '\13073' -> "\12462\12491\12540" '\13074' -> "\12461\12517\12522\12540" '\13075' -> "\12462\12523\12480\12540" '\13076' -> "\12461\12525" '\13077' -> "\12461\12525\12464\12521\12512" '\13078' -> "\12461\12525\12513\12540\12488\12523" '\13079' -> "\12461\12525\12527\12483\12488" '\13080' -> "\12464\12521\12512" '\13081' -> "\12464\12521\12512\12488\12531" '\13082' -> "\12463\12523\12476\12452\12525" '\13083' -> "\12463\12525\12540\12493" '\13084' -> "\12465\12540\12473" '\13085' -> "\12467\12523\12490" '\13086' -> "\12467\12540\12509" '\13087' -> "\12469\12452\12463\12523" '\13088' -> "\12469\12531\12481\12540\12512" '\13089' -> "\12471\12522\12531\12464" '\13090' -> "\12475\12531\12481" '\13091' -> "\12475\12531\12488" '\13092' -> "\12480\12540\12473" '\13093' -> "\12487\12471" '\13094' -> "\12489\12523" '\13095' -> "\12488\12531" '\13096' -> "\12490\12494" '\13097' -> "\12494\12483\12488" '\13098' -> "\12495\12452\12484" '\13099' -> "\12497\12540\12475\12531\12488" '\13100' -> "\12497\12540\12484" '\13101' -> "\12496\12540\12524\12523" '\13102' -> "\12500\12450\12473\12488\12523" '\13103' -> "\12500\12463\12523" '\13104' -> "\12500\12467" '\13105' -> "\12499\12523" '\13106' -> "\12501\12449\12521\12483\12489" '\13107' -> "\12501\12451\12540\12488" '\13108' -> "\12502\12483\12471\12455\12523" '\13109' -> "\12501\12521\12531" '\13110' -> "\12504\12463\12479\12540\12523" '\13111' -> "\12506\12477" '\13112' -> "\12506\12491\12498" '\13113' -> "\12504\12523\12484" '\13114' -> "\12506\12531\12473" '\13115' -> "\12506\12540\12472" '\13116' -> "\12505\12540\12479" '\13117' -> "\12509\12452\12531\12488" '\13118' -> "\12508\12523\12488" '\13119' -> "\12507\12531" '\13120' -> "\12509\12531\12489" '\13121' -> "\12507\12540\12523" '\13122' -> "\12507\12540\12531" '\13123' -> "\12510\12452\12463\12525" '\13124' -> "\12510\12452\12523" '\13125' -> "\12510\12483\12495" '\13126' -> "\12510\12523\12463" '\13127' -> "\12510\12531\12471\12519\12531" '\13128' -> "\12511\12463\12525\12531" '\13129' -> "\12511\12522" '\13130' -> "\12511\12522\12496\12540\12523" '\13131' -> "\12513\12460" '\13132' -> "\12513\12460\12488\12531" '\13133' -> "\12513\12540\12488\12523" '\13134' -> "\12516\12540\12489" '\13135' -> "\12516\12540\12523" '\13136' -> "\12518\12450\12531" '\13137' -> "\12522\12483\12488\12523" '\13138' -> "\12522\12521" '\13139' -> "\12523\12500\12540" '\13140' -> "\12523\12540\12502\12523" '\13141' -> "\12524\12512" '\13142' -> "\12524\12531\12488\12466\12531" '\13143' -> "\12527\12483\12488" '\13144' -> "0\28857" '\13145' -> "1\28857" '\13146' -> "2\28857" '\13147' -> "3\28857" '\13148' -> "4\28857" '\13149' -> "5\28857" '\13150' -> "6\28857" '\13151' -> "7\28857" '\13152' -> "8\28857" '\13153' -> "9\28857" '\13154' -> "10\28857" '\13155' -> "11\28857" '\13156' -> "12\28857" '\13157' -> "13\28857" '\13158' -> "14\28857" '\13159' -> "15\28857" '\13160' -> "16\28857" '\13161' -> "17\28857" '\13162' -> "18\28857" '\13163' -> "19\28857" '\13164' -> "20\28857" '\13165' -> "21\28857" '\13166' -> "22\28857" '\13167' -> "23\28857" '\13168' -> "24\28857" '\13169' -> "hPa" '\13170' -> "da" '\13171' -> "AU" '\13172' -> "bar" '\13173' -> "oV" '\13174' -> "pc" '\13175' -> "dm" '\13176' -> "dm\178" '\13177' -> "dm\179" '\13178' -> "IU" '\13179' -> "\24179\25104" '\13180' -> "\26157\21644" '\13181' -> "\22823\27491" '\13182' -> "\26126\27835" '\13183' -> "\26666\24335\20250\31038" '\13184' -> "pA" '\13185' -> "nA" '\13186' -> "\956A" '\13187' -> "mA" '\13188' -> "kA" '\13189' -> "KB" '\13190' -> "MB" '\13191' -> "GB" '\13192' -> "cal" '\13193' -> "kcal" '\13194' -> "pF" '\13195' -> "nF" '\13196' -> "\956F" '\13197' -> "\956g" '\13198' -> "mg" '\13199' -> "kg" '\13200' -> "Hz" '\13201' -> "kHz" '\13202' -> "MHz" '\13203' -> "GHz" '\13204' -> "THz" '\13205' -> "\956\8467" '\13206' -> "m\8467" '\13207' -> "d\8467" '\13208' -> "k\8467" '\13209' -> "fm" '\13210' -> "nm" '\13211' -> "\956m" '\13212' -> "mm" '\13213' -> "cm" '\13214' -> "km" '\13215' -> "mm\178" '\13216' -> "cm\178" '\13217' -> "m\178" '\13218' -> "km\178" '\13219' -> "mm\179" '\13220' -> "cm\179" '\13221' -> "m\179" '\13222' -> "km\179" '\13223' -> "m\8725s" '\13224' -> "m\8725s\178" '\13225' -> "Pa" '\13226' -> "kPa" '\13227' -> "MPa" '\13228' -> "GPa" '\13229' -> "rad" '\13230' -> "rad\8725s" '\13231' -> "rad\8725s\178" '\13232' -> "ps" '\13233' -> "ns" '\13234' -> "\956s" '\13235' -> "ms" '\13236' -> "pV" '\13237' -> "nV" '\13238' -> "\956V" '\13239' -> "mV" '\13240' -> "kV" '\13241' -> "MV" '\13242' -> "pW" '\13243' -> "nW" '\13244' -> "\956W" '\13245' -> "mW" '\13246' -> "kW" '\13247' -> "MW" '\13248' -> "k\937" '\13249' -> "M\937" '\13250' -> "a.m." '\13251' -> "Bq" '\13252' -> "cc" '\13253' -> "cd" '\13254' -> "C\8725kg" '\13255' -> "Co." '\13256' -> "dB" '\13257' -> "Gy" '\13258' -> "ha" '\13259' -> "HP" '\13260' -> "in" '\13261' -> "KK" '\13262' -> "KM" '\13263' -> "kt" '\13264' -> "lm" '\13265' -> "ln" '\13266' -> "log" '\13267' -> "lx" '\13268' -> "mb" '\13269' -> "mil" '\13270' -> "mol" '\13271' -> "PH" '\13272' -> "p.m." '\13273' -> "PPM" '\13274' -> "PR" '\13275' -> "sr" '\13276' -> "Sv" '\13277' -> "Wb" '\13278' -> "V\8725m" '\13279' -> "A\8725m" '\13280' -> "1\26085" '\13281' -> "2\26085" '\13282' -> "3\26085" '\13283' -> "4\26085" '\13284' -> "5\26085" '\13285' -> "6\26085" '\13286' -> "7\26085" '\13287' -> "8\26085" '\13288' -> "9\26085" '\13289' -> "10\26085" '\13290' -> "11\26085" '\13291' -> "12\26085" '\13292' -> "13\26085" '\13293' -> "14\26085" '\13294' -> "15\26085" '\13295' -> "16\26085" '\13296' -> "17\26085" '\13297' -> "18\26085" '\13298' -> "19\26085" '\13299' -> "20\26085" '\13300' -> "21\26085" '\13301' -> "22\26085" '\13302' -> "23\26085" '\13303' -> "24\26085" '\13304' -> "25\26085" '\13305' -> "26\26085" '\13306' -> "27\26085" '\13307' -> "28\26085" '\13308' -> "29\26085" '\13309' -> "30\26085" '\13310' -> "31\26085" '\13311' -> "gal" '\42652' -> "\1098" '\42653' -> "\1100" '\42864' -> "\42863" '\42994' -> "C" '\42995' -> "F" '\42996' -> "Q" '\43000' -> "\294" '\43001' -> "\339" '\43868' -> "\42791" '\43869' -> "\43831" '\43870' -> "\619" '\43871' -> "\43858" '\43881' -> "\653" c -> DK2.decompose c unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/DecompositionsK2.hs0000644000000000000000000023552307346545000024752 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.DecompositionsK2 -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.DecompositionsK2 (decompose) where {-# NOINLINE decompose #-} decompose :: Char -> [Char] decompose = \case '\63744' -> "\35912" '\63745' -> "\26356" '\63746' -> "\36554" '\63747' -> "\36040" '\63748' -> "\28369" '\63749' -> "\20018" '\63750' -> "\21477" '\63751' -> "\40860" '\63752' -> "\40860" '\63753' -> "\22865" '\63754' -> "\37329" '\63755' -> "\21895" '\63756' -> "\22856" '\63757' -> "\25078" '\63758' -> "\30313" '\63759' -> "\32645" '\63760' -> "\34367" '\63761' -> "\34746" '\63762' -> "\35064" '\63763' -> "\37007" '\63764' -> "\27138" '\63765' -> "\27931" '\63766' -> "\28889" '\63767' -> "\29662" '\63768' -> "\33853" '\63769' -> "\37226" '\63770' -> "\39409" '\63771' -> "\20098" '\63772' -> "\21365" '\63773' -> "\27396" '\63774' -> "\29211" '\63775' -> "\34349" '\63776' -> "\40478" '\63777' -> "\23888" '\63778' -> "\28651" '\63779' -> "\34253" '\63780' -> "\35172" '\63781' -> "\25289" '\63782' -> "\33240" '\63783' -> "\34847" '\63784' -> "\24266" '\63785' -> "\26391" '\63786' -> "\28010" '\63787' -> "\29436" '\63788' -> "\37070" '\63789' -> "\20358" '\63790' -> "\20919" '\63791' -> "\21214" '\63792' -> "\25796" '\63793' -> "\27347" '\63794' -> "\29200" '\63795' -> "\30439" '\63796' -> "\32769" '\63797' -> "\34310" '\63798' -> "\34396" '\63799' -> "\36335" '\63800' -> "\38706" '\63801' -> "\39791" '\63802' -> "\40442" '\63803' -> "\30860" '\63804' -> "\31103" '\63805' -> "\32160" '\63806' -> "\33737" '\63807' -> "\37636" '\63808' -> "\40575" '\63809' -> "\35542" '\63810' -> "\22751" '\63811' -> "\24324" '\63812' -> "\31840" '\63813' -> "\32894" '\63814' -> "\29282" '\63815' -> "\30922" '\63816' -> "\36034" '\63817' -> "\38647" '\63818' -> "\22744" '\63819' -> "\23650" '\63820' -> "\27155" '\63821' -> "\28122" '\63822' -> "\28431" '\63823' -> "\32047" '\63824' -> "\32311" '\63825' -> "\38475" '\63826' -> "\21202" '\63827' -> "\32907" '\63828' -> "\20956" '\63829' -> "\20940" '\63830' -> "\31260" '\63831' -> "\32190" '\63832' -> "\33777" '\63833' -> "\38517" '\63834' -> "\35712" '\63835' -> "\25295" '\63836' -> "\27138" '\63837' -> "\35582" '\63838' -> "\20025" '\63839' -> "\23527" '\63840' -> "\24594" '\63841' -> "\29575" '\63842' -> "\30064" '\63843' -> "\21271" '\63844' -> "\30971" '\63845' -> "\20415" '\63846' -> "\24489" '\63847' -> "\19981" '\63848' -> "\27852" '\63849' -> "\25976" '\63850' -> "\32034" '\63851' -> "\21443" '\63852' -> "\22622" '\63853' -> "\30465" '\63854' -> "\33865" '\63855' -> "\35498" '\63856' -> "\27578" '\63857' -> "\36784" '\63858' -> "\27784" '\63859' -> "\25342" '\63860' -> "\33509" '\63861' -> "\25504" '\63862' -> "\30053" '\63863' -> "\20142" '\63864' -> "\20841" '\63865' -> "\20937" '\63866' -> "\26753" '\63867' -> "\31975" '\63868' -> "\33391" '\63869' -> "\35538" '\63870' -> "\37327" '\63871' -> "\21237" '\63872' -> "\21570" '\63873' -> "\22899" '\63874' -> "\24300" '\63875' -> "\26053" '\63876' -> "\28670" '\63877' -> "\31018" '\63878' -> "\38317" '\63879' -> "\39530" '\63880' -> "\40599" '\63881' -> "\40654" '\63882' -> "\21147" '\63883' -> "\26310" '\63884' -> "\27511" '\63885' -> "\36706" '\63886' -> "\24180" '\63887' -> "\24976" '\63888' -> "\25088" '\63889' -> "\25754" '\63890' -> "\28451" '\63891' -> "\29001" '\63892' -> "\29833" '\63893' -> "\31178" '\63894' -> "\32244" '\63895' -> "\32879" '\63896' -> "\36646" '\63897' -> "\34030" '\63898' -> "\36899" '\63899' -> "\37706" '\63900' -> "\21015" '\63901' -> "\21155" '\63902' -> "\21693" '\63903' -> "\28872" '\63904' -> "\35010" '\63905' -> "\35498" '\63906' -> "\24265" '\63907' -> "\24565" '\63908' -> "\25467" '\63909' -> "\27566" '\63910' -> "\31806" '\63911' -> "\29557" '\63912' -> "\20196" '\63913' -> "\22265" '\63914' -> "\23527" '\63915' -> "\23994" '\63916' -> "\24604" '\63917' -> "\29618" '\63918' -> "\29801" '\63919' -> "\32666" '\63920' -> "\32838" '\63921' -> "\37428" '\63922' -> "\38646" '\63923' -> "\38728" '\63924' -> "\38936" '\63925' -> "\20363" '\63926' -> "\31150" '\63927' -> "\37300" '\63928' -> "\38584" '\63929' -> "\24801" '\63930' -> "\20102" '\63931' -> "\20698" '\63932' -> "\23534" '\63933' -> "\23615" '\63934' -> "\26009" '\63935' -> "\27138" '\63936' -> "\29134" '\63937' -> "\30274" '\63938' -> "\34044" '\63939' -> "\36988" '\63940' -> "\40845" '\63941' -> "\26248" '\63942' -> "\38446" '\63943' -> "\21129" '\63944' -> "\26491" '\63945' -> "\26611" '\63946' -> "\27969" '\63947' -> "\28316" '\63948' -> "\29705" '\63949' -> "\30041" '\63950' -> "\30827" '\63951' -> "\32016" '\63952' -> "\39006" '\63953' -> "\20845" '\63954' -> "\25134" '\63955' -> "\38520" '\63956' -> "\20523" '\63957' -> "\23833" '\63958' -> "\28138" '\63959' -> "\36650" '\63960' -> "\24459" '\63961' -> "\24900" '\63962' -> "\26647" '\63963' -> "\29575" '\63964' -> "\38534" '\63965' -> "\21033" '\63966' -> "\21519" '\63967' -> "\23653" '\63968' -> "\26131" '\63969' -> "\26446" '\63970' -> "\26792" '\63971' -> "\27877" '\63972' -> "\29702" '\63973' -> "\30178" '\63974' -> "\32633" '\63975' -> "\35023" '\63976' -> "\35041" '\63977' -> "\37324" '\63978' -> "\38626" '\63979' -> "\21311" '\63980' -> "\28346" '\63981' -> "\21533" '\63982' -> "\29136" '\63983' -> "\29848" '\63984' -> "\34298" '\63985' -> "\38563" '\63986' -> "\40023" '\63987' -> "\40607" '\63988' -> "\26519" '\63989' -> "\28107" '\63990' -> "\33256" '\63991' -> "\31435" '\63992' -> "\31520" '\63993' -> "\31890" '\63994' -> "\29376" '\63995' -> "\28825" '\63996' -> "\35672" '\63997' -> "\20160" '\63998' -> "\33590" '\63999' -> "\21050" '\64000' -> "\20999" '\64001' -> "\24230" '\64002' -> "\25299" '\64003' -> "\31958" '\64004' -> "\23429" '\64005' -> "\27934" '\64006' -> "\26292" '\64007' -> "\36667" '\64008' -> "\34892" '\64009' -> "\38477" '\64010' -> "\35211" '\64011' -> "\24275" '\64012' -> "\20800" '\64013' -> "\21952" '\64016' -> "\22618" '\64018' -> "\26228" '\64021' -> "\20958" '\64022' -> "\29482" '\64023' -> "\30410" '\64024' -> "\31036" '\64025' -> "\31070" '\64026' -> "\31077" '\64027' -> "\31119" '\64028' -> "\38742" '\64029' -> "\31934" '\64030' -> "\32701" '\64032' -> "\34322" '\64034' -> "\35576" '\64037' -> "\36920" '\64038' -> "\37117" '\64042' -> "\39151" '\64043' -> "\39164" '\64044' -> "\39208" '\64045' -> "\40372" '\64046' -> "\37086" '\64047' -> "\38583" '\64048' -> "\20398" '\64049' -> "\20711" '\64050' -> "\20813" '\64051' -> "\21193" '\64052' -> "\21220" '\64053' -> "\21329" '\64054' -> "\21917" '\64055' -> "\22022" '\64056' -> "\22120" '\64057' -> "\22592" '\64058' -> "\22696" '\64059' -> "\23652" '\64060' -> "\23662" '\64061' -> "\24724" '\64062' -> "\24936" '\64063' -> "\24974" '\64064' -> "\25074" '\64065' -> "\25935" '\64066' -> "\26082" '\64067' -> "\26257" '\64068' -> "\26757" '\64069' -> "\28023" '\64070' -> "\28186" '\64071' -> "\28450" '\64072' -> "\29038" '\64073' -> "\29227" '\64074' -> "\29730" '\64075' -> "\30865" '\64076' -> "\31038" '\64077' -> "\31049" '\64078' -> "\31048" '\64079' -> "\31056" '\64080' -> "\31062" '\64081' -> "\31069" '\64082' -> "\31117" '\64083' -> "\31118" '\64084' -> "\31296" '\64085' -> "\31361" '\64086' -> "\31680" '\64087' -> "\32244" '\64088' -> "\32265" '\64089' -> "\32321" '\64090' -> "\32626" '\64091' -> "\32773" '\64092' -> "\33261" '\64093' -> "\33401" '\64094' -> "\33401" '\64095' -> "\33879" '\64096' -> "\35088" '\64097' -> "\35222" '\64098' -> "\35585" '\64099' -> "\35641" '\64100' -> "\36051" '\64101' -> "\36104" '\64102' -> "\36790" '\64103' -> "\36920" '\64104' -> "\38627" '\64105' -> "\38911" '\64106' -> "\38971" '\64107' -> "\24693" '\64108' -> "\148206" '\64109' -> "\33304" '\64112' -> "\20006" '\64113' -> "\20917" '\64114' -> "\20840" '\64115' -> "\20352" '\64116' -> "\20805" '\64117' -> "\20864" '\64118' -> "\21191" '\64119' -> "\21242" '\64120' -> "\21917" '\64121' -> "\21845" '\64122' -> "\21913" '\64123' -> "\21986" '\64124' -> "\22618" '\64125' -> "\22707" '\64126' -> "\22852" '\64127' -> "\22868" '\64128' -> "\23138" '\64129' -> "\23336" '\64130' -> "\24274" '\64131' -> "\24281" '\64132' -> "\24425" '\64133' -> "\24493" '\64134' -> "\24792" '\64135' -> "\24910" '\64136' -> "\24840" '\64137' -> "\24974" '\64138' -> "\24928" '\64139' -> "\25074" '\64140' -> "\25140" '\64141' -> "\25540" '\64142' -> "\25628" '\64143' -> "\25682" '\64144' -> "\25942" '\64145' -> "\26228" '\64146' -> "\26391" '\64147' -> "\26395" '\64148' -> "\26454" '\64149' -> "\27513" '\64150' -> "\27578" '\64151' -> "\27969" '\64152' -> "\28379" '\64153' -> "\28363" '\64154' -> "\28450" '\64155' -> "\28702" '\64156' -> "\29038" '\64157' -> "\30631" '\64158' -> "\29237" '\64159' -> "\29359" '\64160' -> "\29482" '\64161' -> "\29809" '\64162' -> "\29958" '\64163' -> "\30011" '\64164' -> "\30237" '\64165' -> "\30239" '\64166' -> "\30410" '\64167' -> "\30427" '\64168' -> "\30452" '\64169' -> "\30538" '\64170' -> "\30528" '\64171' -> "\30924" '\64172' -> "\31409" '\64173' -> "\31680" '\64174' -> "\31867" '\64175' -> "\32091" '\64176' -> "\32244" '\64177' -> "\32574" '\64178' -> "\32773" '\64179' -> "\33618" '\64180' -> "\33775" '\64181' -> "\34681" '\64182' -> "\35137" '\64183' -> "\35206" '\64184' -> "\35222" '\64185' -> "\35519" '\64186' -> "\35576" '\64187' -> "\35531" '\64188' -> "\35585" '\64189' -> "\35582" '\64190' -> "\35565" '\64191' -> "\35641" '\64192' -> "\35722" '\64193' -> "\36104" '\64194' -> "\36664" '\64195' -> "\36978" '\64196' -> "\37273" '\64197' -> "\37494" '\64198' -> "\38524" '\64199' -> "\38627" '\64200' -> "\38742" '\64201' -> "\38875" '\64202' -> "\38911" '\64203' -> "\38923" '\64204' -> "\38971" '\64205' -> "\39698" '\64206' -> "\40860" '\64207' -> "\141386" '\64208' -> "\141380" '\64209' -> "\144341" '\64210' -> "\15261" '\64211' -> "\16408" '\64212' -> "\16441" '\64213' -> "\152137" '\64214' -> "\154832" '\64215' -> "\163539" '\64216' -> "\40771" '\64217' -> "\40846" '\64256' -> "ff" '\64257' -> "fi" '\64258' -> "fl" '\64259' -> "ffi" '\64260' -> "ffl" '\64261' -> "\383t" '\64262' -> "st" '\64275' -> "\1396\1398" '\64276' -> "\1396\1381" '\64277' -> "\1396\1387" '\64278' -> "\1406\1398" '\64279' -> "\1396\1389" '\64285' -> "\1497\1460" '\64287' -> "\1522\1463" '\64288' -> "\1506" '\64289' -> "\1488" '\64290' -> "\1491" '\64291' -> "\1492" '\64292' -> "\1499" '\64293' -> "\1500" '\64294' -> "\1501" '\64295' -> "\1512" '\64296' -> "\1514" '\64297' -> "+" '\64298' -> "\1513\1473" '\64299' -> "\1513\1474" '\64300' -> "\64329\1473" '\64301' -> "\64329\1474" '\64302' -> "\1488\1463" '\64303' -> "\1488\1464" '\64304' -> "\1488\1468" '\64305' -> "\1489\1468" '\64306' -> "\1490\1468" '\64307' -> "\1491\1468" '\64308' -> "\1492\1468" '\64309' -> "\1493\1468" '\64310' -> "\1494\1468" '\64312' -> "\1496\1468" '\64313' -> "\1497\1468" '\64314' -> "\1498\1468" '\64315' -> "\1499\1468" '\64316' -> "\1500\1468" '\64318' -> "\1502\1468" '\64320' -> "\1504\1468" '\64321' -> "\1505\1468" '\64323' -> "\1507\1468" '\64324' -> "\1508\1468" '\64326' -> "\1510\1468" '\64327' -> "\1511\1468" '\64328' -> "\1512\1468" '\64329' -> "\1513\1468" '\64330' -> "\1514\1468" '\64331' -> "\1493\1465" '\64332' -> "\1489\1471" '\64333' -> "\1499\1471" '\64334' -> "\1508\1471" '\64335' -> "\1488\1500" '\64336' -> "\1649" '\64337' -> "\1649" '\64338' -> "\1659" '\64339' -> "\1659" '\64340' -> "\1659" '\64341' -> "\1659" '\64342' -> "\1662" '\64343' -> "\1662" '\64344' -> "\1662" '\64345' -> "\1662" '\64346' -> "\1664" '\64347' -> "\1664" '\64348' -> "\1664" '\64349' -> "\1664" '\64350' -> "\1658" '\64351' -> "\1658" '\64352' -> "\1658" '\64353' -> "\1658" '\64354' -> "\1663" '\64355' -> "\1663" '\64356' -> "\1663" '\64357' -> "\1663" '\64358' -> "\1657" '\64359' -> "\1657" '\64360' -> "\1657" '\64361' -> "\1657" '\64362' -> "\1700" '\64363' -> "\1700" '\64364' -> "\1700" '\64365' -> "\1700" '\64366' -> "\1702" '\64367' -> "\1702" '\64368' -> "\1702" '\64369' -> "\1702" '\64370' -> "\1668" '\64371' -> "\1668" '\64372' -> "\1668" '\64373' -> "\1668" '\64374' -> "\1667" '\64375' -> "\1667" '\64376' -> "\1667" '\64377' -> "\1667" '\64378' -> "\1670" '\64379' -> "\1670" '\64380' -> "\1670" '\64381' -> "\1670" '\64382' -> "\1671" '\64383' -> "\1671" '\64384' -> "\1671" '\64385' -> "\1671" '\64386' -> "\1677" '\64387' -> "\1677" '\64388' -> "\1676" '\64389' -> "\1676" '\64390' -> "\1678" '\64391' -> "\1678" '\64392' -> "\1672" '\64393' -> "\1672" '\64394' -> "\1688" '\64395' -> "\1688" '\64396' -> "\1681" '\64397' -> "\1681" '\64398' -> "\1705" '\64399' -> "\1705" '\64400' -> "\1705" '\64401' -> "\1705" '\64402' -> "\1711" '\64403' -> "\1711" '\64404' -> "\1711" '\64405' -> "\1711" '\64406' -> "\1715" '\64407' -> "\1715" '\64408' -> "\1715" '\64409' -> "\1715" '\64410' -> "\1713" '\64411' -> "\1713" '\64412' -> "\1713" '\64413' -> "\1713" '\64414' -> "\1722" '\64415' -> "\1722" '\64416' -> "\1723" '\64417' -> "\1723" '\64418' -> "\1723" '\64419' -> "\1723" '\64420' -> "\1728" '\64421' -> "\1728" '\64422' -> "\1729" '\64423' -> "\1729" '\64424' -> "\1729" '\64425' -> "\1729" '\64426' -> "\1726" '\64427' -> "\1726" '\64428' -> "\1726" '\64429' -> "\1726" '\64430' -> "\1746" '\64431' -> "\1746" '\64432' -> "\1747" '\64433' -> "\1747" '\64467' -> "\1709" '\64468' -> "\1709" '\64469' -> "\1709" '\64470' -> "\1709" '\64471' -> "\1735" '\64472' -> "\1735" '\64473' -> "\1734" '\64474' -> "\1734" '\64475' -> "\1736" '\64476' -> "\1736" '\64477' -> "\1655" '\64478' -> "\1739" '\64479' -> "\1739" '\64480' -> "\1733" '\64481' -> "\1733" '\64482' -> "\1737" '\64483' -> "\1737" '\64484' -> "\1744" '\64485' -> "\1744" '\64486' -> "\1744" '\64487' -> "\1744" '\64488' -> "\1609" '\64489' -> "\1609" '\64490' -> "\1574\1575" '\64491' -> "\1574\1575" '\64492' -> "\1574\1749" '\64493' -> "\1574\1749" '\64494' -> "\1574\1608" '\64495' -> "\1574\1608" '\64496' -> "\1574\1735" '\64497' -> "\1574\1735" '\64498' -> "\1574\1734" '\64499' -> "\1574\1734" '\64500' -> "\1574\1736" '\64501' -> "\1574\1736" '\64502' -> "\1574\1744" '\64503' -> "\1574\1744" '\64504' -> "\1574\1744" '\64505' -> "\1574\1609" '\64506' -> "\1574\1609" '\64507' -> "\1574\1609" '\64508' -> "\1740" '\64509' -> "\1740" '\64510' -> "\1740" '\64511' -> "\1740" '\64512' -> "\1574\1580" '\64513' -> "\1574\1581" '\64514' -> "\1574\1605" '\64515' -> "\1574\1609" '\64516' -> "\1574\1610" '\64517' -> "\1576\1580" '\64518' -> "\1576\1581" '\64519' -> "\1576\1582" '\64520' -> "\1576\1605" '\64521' -> "\1576\1609" '\64522' -> "\1576\1610" '\64523' -> "\1578\1580" '\64524' -> "\1578\1581" '\64525' -> "\1578\1582" '\64526' -> "\1578\1605" '\64527' -> "\1578\1609" '\64528' -> "\1578\1610" '\64529' -> "\1579\1580" '\64530' -> "\1579\1605" '\64531' -> "\1579\1609" '\64532' -> "\1579\1610" '\64533' -> "\1580\1581" '\64534' -> "\1580\1605" '\64535' -> "\1581\1580" '\64536' -> "\1581\1605" '\64537' -> "\1582\1580" '\64538' -> "\1582\1581" '\64539' -> "\1582\1605" '\64540' -> "\1587\1580" '\64541' -> "\1587\1581" '\64542' -> "\1587\1582" '\64543' -> "\1587\1605" '\64544' -> "\1589\1581" '\64545' -> "\1589\1605" '\64546' -> "\1590\1580" '\64547' -> "\1590\1581" '\64548' -> "\1590\1582" '\64549' -> "\1590\1605" '\64550' -> "\1591\1581" '\64551' -> "\1591\1605" '\64552' -> "\1592\1605" '\64553' -> "\1593\1580" '\64554' -> "\1593\1605" '\64555' -> "\1594\1580" '\64556' -> "\1594\1605" '\64557' -> "\1601\1580" '\64558' -> "\1601\1581" '\64559' -> "\1601\1582" '\64560' -> "\1601\1605" '\64561' -> "\1601\1609" '\64562' -> "\1601\1610" '\64563' -> "\1602\1581" '\64564' -> "\1602\1605" '\64565' -> "\1602\1609" '\64566' -> "\1602\1610" '\64567' -> "\1603\1575" '\64568' -> "\1603\1580" '\64569' -> "\1603\1581" '\64570' -> "\1603\1582" '\64571' -> "\1603\1604" '\64572' -> "\1603\1605" '\64573' -> "\1603\1609" '\64574' -> "\1603\1610" '\64575' -> "\1604\1580" '\64576' -> "\1604\1581" '\64577' -> "\1604\1582" '\64578' -> "\1604\1605" '\64579' -> "\1604\1609" '\64580' -> "\1604\1610" '\64581' -> "\1605\1580" '\64582' -> "\1605\1581" '\64583' -> "\1605\1582" '\64584' -> "\1605\1605" '\64585' -> "\1605\1609" '\64586' -> "\1605\1610" '\64587' -> "\1606\1580" '\64588' -> "\1606\1581" '\64589' -> "\1606\1582" '\64590' -> "\1606\1605" '\64591' -> "\1606\1609" '\64592' -> "\1606\1610" '\64593' -> "\1607\1580" '\64594' -> "\1607\1605" '\64595' -> "\1607\1609" '\64596' -> "\1607\1610" '\64597' -> "\1610\1580" '\64598' -> "\1610\1581" '\64599' -> "\1610\1582" '\64600' -> "\1610\1605" '\64601' -> "\1610\1609" '\64602' -> "\1610\1610" '\64603' -> "\1584\1648" '\64604' -> "\1585\1648" '\64605' -> "\1609\1648" '\64606' -> " \1612\1617" '\64607' -> " \1613\1617" '\64608' -> " \1614\1617" '\64609' -> " \1615\1617" '\64610' -> " \1616\1617" '\64611' -> " \1617\1648" '\64612' -> "\1574\1585" '\64613' -> "\1574\1586" '\64614' -> "\1574\1605" '\64615' -> "\1574\1606" '\64616' -> "\1574\1609" '\64617' -> "\1574\1610" '\64618' -> "\1576\1585" '\64619' -> "\1576\1586" '\64620' -> "\1576\1605" '\64621' -> "\1576\1606" '\64622' -> "\1576\1609" '\64623' -> "\1576\1610" '\64624' -> "\1578\1585" '\64625' -> "\1578\1586" '\64626' -> "\1578\1605" '\64627' -> "\1578\1606" '\64628' -> "\1578\1609" '\64629' -> "\1578\1610" '\64630' -> "\1579\1585" '\64631' -> "\1579\1586" '\64632' -> "\1579\1605" '\64633' -> "\1579\1606" '\64634' -> "\1579\1609" '\64635' -> "\1579\1610" '\64636' -> "\1601\1609" '\64637' -> "\1601\1610" '\64638' -> "\1602\1609" '\64639' -> "\1602\1610" '\64640' -> "\1603\1575" '\64641' -> "\1603\1604" '\64642' -> "\1603\1605" '\64643' -> "\1603\1609" '\64644' -> "\1603\1610" '\64645' -> "\1604\1605" '\64646' -> "\1604\1609" '\64647' -> "\1604\1610" '\64648' -> "\1605\1575" '\64649' -> "\1605\1605" '\64650' -> "\1606\1585" '\64651' -> "\1606\1586" '\64652' -> "\1606\1605" '\64653' -> "\1606\1606" '\64654' -> "\1606\1609" '\64655' -> "\1606\1610" '\64656' -> "\1609\1648" '\64657' -> "\1610\1585" '\64658' -> "\1610\1586" '\64659' -> "\1610\1605" '\64660' -> "\1610\1606" '\64661' -> "\1610\1609" '\64662' -> "\1610\1610" '\64663' -> "\1574\1580" '\64664' -> "\1574\1581" '\64665' -> "\1574\1582" '\64666' -> "\1574\1605" '\64667' -> "\1574\1607" '\64668' -> "\1576\1580" '\64669' -> "\1576\1581" '\64670' -> "\1576\1582" '\64671' -> "\1576\1605" '\64672' -> "\1576\1607" '\64673' -> "\1578\1580" '\64674' -> "\1578\1581" '\64675' -> "\1578\1582" '\64676' -> "\1578\1605" '\64677' -> "\1578\1607" '\64678' -> "\1579\1605" '\64679' -> "\1580\1581" '\64680' -> "\1580\1605" '\64681' -> "\1581\1580" '\64682' -> "\1581\1605" '\64683' -> "\1582\1580" '\64684' -> "\1582\1605" '\64685' -> "\1587\1580" '\64686' -> "\1587\1581" '\64687' -> "\1587\1582" '\64688' -> "\1587\1605" '\64689' -> "\1589\1581" '\64690' -> "\1589\1582" '\64691' -> "\1589\1605" '\64692' -> "\1590\1580" '\64693' -> "\1590\1581" '\64694' -> "\1590\1582" '\64695' -> "\1590\1605" '\64696' -> "\1591\1581" '\64697' -> "\1592\1605" '\64698' -> "\1593\1580" '\64699' -> "\1593\1605" '\64700' -> "\1594\1580" '\64701' -> "\1594\1605" '\64702' -> "\1601\1580" '\64703' -> "\1601\1581" '\64704' -> "\1601\1582" '\64705' -> "\1601\1605" '\64706' -> "\1602\1581" '\64707' -> "\1602\1605" '\64708' -> "\1603\1580" '\64709' -> "\1603\1581" '\64710' -> "\1603\1582" '\64711' -> "\1603\1604" '\64712' -> "\1603\1605" '\64713' -> "\1604\1580" '\64714' -> "\1604\1581" '\64715' -> "\1604\1582" '\64716' -> "\1604\1605" '\64717' -> "\1604\1607" '\64718' -> "\1605\1580" '\64719' -> "\1605\1581" '\64720' -> "\1605\1582" '\64721' -> "\1605\1605" '\64722' -> "\1606\1580" '\64723' -> "\1606\1581" '\64724' -> "\1606\1582" '\64725' -> "\1606\1605" '\64726' -> "\1606\1607" '\64727' -> "\1607\1580" '\64728' -> "\1607\1605" '\64729' -> "\1607\1648" '\64730' -> "\1610\1580" '\64731' -> "\1610\1581" '\64732' -> "\1610\1582" '\64733' -> "\1610\1605" '\64734' -> "\1610\1607" '\64735' -> "\1574\1605" '\64736' -> "\1574\1607" '\64737' -> "\1576\1605" '\64738' -> "\1576\1607" '\64739' -> "\1578\1605" '\64740' -> "\1578\1607" '\64741' -> "\1579\1605" '\64742' -> "\1579\1607" '\64743' -> "\1587\1605" '\64744' -> "\1587\1607" '\64745' -> "\1588\1605" '\64746' -> "\1588\1607" '\64747' -> "\1603\1604" '\64748' -> "\1603\1605" '\64749' -> "\1604\1605" '\64750' -> "\1606\1605" '\64751' -> "\1606\1607" '\64752' -> "\1610\1605" '\64753' -> "\1610\1607" '\64754' -> "\1600\1614\1617" '\64755' -> "\1600\1615\1617" '\64756' -> "\1600\1616\1617" '\64757' -> "\1591\1609" '\64758' -> "\1591\1610" '\64759' -> "\1593\1609" '\64760' -> "\1593\1610" '\64761' -> "\1594\1609" '\64762' -> "\1594\1610" '\64763' -> "\1587\1609" '\64764' -> "\1587\1610" '\64765' -> "\1588\1609" '\64766' -> "\1588\1610" '\64767' -> "\1581\1609" '\64768' -> "\1581\1610" '\64769' -> "\1580\1609" '\64770' -> "\1580\1610" '\64771' -> "\1582\1609" '\64772' -> "\1582\1610" '\64773' -> "\1589\1609" '\64774' -> "\1589\1610" '\64775' -> "\1590\1609" '\64776' -> "\1590\1610" '\64777' -> "\1588\1580" '\64778' -> "\1588\1581" '\64779' -> "\1588\1582" '\64780' -> "\1588\1605" '\64781' -> "\1588\1585" '\64782' -> "\1587\1585" '\64783' -> "\1589\1585" '\64784' -> "\1590\1585" '\64785' -> "\1591\1609" '\64786' -> "\1591\1610" '\64787' -> "\1593\1609" '\64788' -> "\1593\1610" '\64789' -> "\1594\1609" '\64790' -> "\1594\1610" '\64791' -> "\1587\1609" '\64792' -> "\1587\1610" '\64793' -> "\1588\1609" '\64794' -> "\1588\1610" '\64795' -> "\1581\1609" '\64796' -> "\1581\1610" '\64797' -> "\1580\1609" '\64798' -> "\1580\1610" '\64799' -> "\1582\1609" '\64800' -> "\1582\1610" '\64801' -> "\1589\1609" '\64802' -> "\1589\1610" '\64803' -> "\1590\1609" '\64804' -> "\1590\1610" '\64805' -> "\1588\1580" '\64806' -> "\1588\1581" '\64807' -> "\1588\1582" '\64808' -> "\1588\1605" '\64809' -> "\1588\1585" '\64810' -> "\1587\1585" '\64811' -> "\1589\1585" '\64812' -> "\1590\1585" '\64813' -> "\1588\1580" '\64814' -> "\1588\1581" '\64815' -> "\1588\1582" '\64816' -> "\1588\1605" '\64817' -> "\1587\1607" '\64818' -> "\1588\1607" '\64819' -> "\1591\1605" '\64820' -> "\1587\1580" '\64821' -> "\1587\1581" '\64822' -> "\1587\1582" '\64823' -> "\1588\1580" '\64824' -> "\1588\1581" '\64825' -> "\1588\1582" '\64826' -> "\1591\1605" '\64827' -> "\1592\1605" '\64828' -> "\1575\1611" '\64829' -> "\1575\1611" '\64848' -> "\1578\1580\1605" '\64849' -> "\1578\1581\1580" '\64850' -> "\1578\1581\1580" '\64851' -> "\1578\1581\1605" '\64852' -> "\1578\1582\1605" '\64853' -> "\1578\1605\1580" '\64854' -> "\1578\1605\1581" '\64855' -> "\1578\1605\1582" '\64856' -> "\1580\1605\1581" '\64857' -> "\1580\1605\1581" '\64858' -> "\1581\1605\1610" '\64859' -> "\1581\1605\1609" '\64860' -> "\1587\1581\1580" '\64861' -> "\1587\1580\1581" '\64862' -> "\1587\1580\1609" '\64863' -> "\1587\1605\1581" '\64864' -> "\1587\1605\1581" '\64865' -> "\1587\1605\1580" '\64866' -> "\1587\1605\1605" '\64867' -> "\1587\1605\1605" '\64868' -> "\1589\1581\1581" '\64869' -> "\1589\1581\1581" '\64870' -> "\1589\1605\1605" '\64871' -> "\1588\1581\1605" '\64872' -> "\1588\1581\1605" '\64873' -> "\1588\1580\1610" '\64874' -> "\1588\1605\1582" '\64875' -> "\1588\1605\1582" '\64876' -> "\1588\1605\1605" '\64877' -> "\1588\1605\1605" '\64878' -> "\1590\1581\1609" '\64879' -> "\1590\1582\1605" '\64880' -> "\1590\1582\1605" '\64881' -> "\1591\1605\1581" '\64882' -> "\1591\1605\1581" '\64883' -> "\1591\1605\1605" '\64884' -> "\1591\1605\1610" '\64885' -> "\1593\1580\1605" '\64886' -> "\1593\1605\1605" '\64887' -> "\1593\1605\1605" '\64888' -> "\1593\1605\1609" '\64889' -> "\1594\1605\1605" '\64890' -> "\1594\1605\1610" '\64891' -> "\1594\1605\1609" '\64892' -> "\1601\1582\1605" '\64893' -> "\1601\1582\1605" '\64894' -> "\1602\1605\1581" '\64895' -> "\1602\1605\1605" '\64896' -> "\1604\1581\1605" '\64897' -> "\1604\1581\1610" '\64898' -> "\1604\1581\1609" '\64899' -> "\1604\1580\1580" '\64900' -> "\1604\1580\1580" '\64901' -> "\1604\1582\1605" '\64902' -> "\1604\1582\1605" '\64903' -> "\1604\1605\1581" '\64904' -> "\1604\1605\1581" '\64905' -> "\1605\1581\1580" '\64906' -> "\1605\1581\1605" '\64907' -> "\1605\1581\1610" '\64908' -> "\1605\1580\1581" '\64909' -> "\1605\1580\1605" '\64910' -> "\1605\1582\1580" '\64911' -> "\1605\1582\1605" '\64914' -> "\1605\1580\1582" '\64915' -> "\1607\1605\1580" '\64916' -> "\1607\1605\1605" '\64917' -> "\1606\1581\1605" '\64918' -> "\1606\1581\1609" '\64919' -> "\1606\1580\1605" '\64920' -> "\1606\1580\1605" '\64921' -> "\1606\1580\1609" '\64922' -> "\1606\1605\1610" '\64923' -> "\1606\1605\1609" '\64924' -> "\1610\1605\1605" '\64925' -> "\1610\1605\1605" '\64926' -> "\1576\1582\1610" '\64927' -> "\1578\1580\1610" '\64928' -> "\1578\1580\1609" '\64929' -> "\1578\1582\1610" '\64930' -> "\1578\1582\1609" '\64931' -> "\1578\1605\1610" '\64932' -> "\1578\1605\1609" '\64933' -> "\1580\1605\1610" '\64934' -> "\1580\1581\1609" '\64935' -> "\1580\1605\1609" '\64936' -> "\1587\1582\1609" '\64937' -> "\1589\1581\1610" '\64938' -> "\1588\1581\1610" '\64939' -> "\1590\1581\1610" '\64940' -> "\1604\1580\1610" '\64941' -> "\1604\1605\1610" '\64942' -> "\1610\1581\1610" '\64943' -> "\1610\1580\1610" '\64944' -> "\1610\1605\1610" '\64945' -> "\1605\1605\1610" '\64946' -> "\1602\1605\1610" '\64947' -> "\1606\1581\1610" '\64948' -> "\1602\1605\1581" '\64949' -> "\1604\1581\1605" '\64950' -> "\1593\1605\1610" '\64951' -> "\1603\1605\1610" '\64952' -> "\1606\1580\1581" '\64953' -> "\1605\1582\1610" '\64954' -> "\1604\1580\1605" '\64955' -> "\1603\1605\1605" '\64956' -> "\1604\1580\1605" '\64957' -> "\1606\1580\1581" '\64958' -> "\1580\1581\1610" '\64959' -> "\1581\1580\1610" '\64960' -> "\1605\1580\1610" '\64961' -> "\1601\1605\1610" '\64962' -> "\1576\1581\1610" '\64963' -> "\1603\1605\1605" '\64964' -> "\1593\1580\1605" '\64965' -> "\1589\1605\1605" '\64966' -> "\1587\1582\1610" '\64967' -> "\1606\1580\1610" '\65008' -> "\1589\1604\1746" '\65009' -> "\1602\1604\1746" '\65010' -> "\1575\1604\1604\1607" '\65011' -> "\1575\1603\1576\1585" '\65012' -> "\1605\1581\1605\1583" '\65013' -> "\1589\1604\1593\1605" '\65014' -> "\1585\1587\1608\1604" '\65015' -> "\1593\1604\1610\1607" '\65016' -> "\1608\1587\1604\1605" '\65017' -> "\1589\1604\1609" '\65018' -> "\1589\1604\1609 \1575\1604\1604\1607 \1593\1604\1610\1607 \1608\1587\1604\1605" '\65019' -> "\1580\1604 \1580\1604\1575\1604\1607" '\65020' -> "\1585\1740\1575\1604" '\65040' -> "," '\65041' -> "\12289" '\65042' -> "\12290" '\65043' -> ":" '\65044' -> ";" '\65045' -> "!" '\65046' -> "?" '\65047' -> "\12310" '\65048' -> "\12311" '\65049' -> "\8230" '\65072' -> "\8229" '\65073' -> "\8212" '\65074' -> "\8211" '\65075' -> "_" '\65076' -> "_" '\65077' -> "(" '\65078' -> ")" '\65079' -> "{" '\65080' -> "}" '\65081' -> "\12308" '\65082' -> "\12309" '\65083' -> "\12304" '\65084' -> "\12305" '\65085' -> "\12298" '\65086' -> "\12299" '\65087' -> "\12296" '\65088' -> "\12297" '\65089' -> "\12300" '\65090' -> "\12301" '\65091' -> "\12302" '\65092' -> "\12303" '\65095' -> "[" '\65096' -> "]" '\65097' -> "\8254" '\65098' -> "\8254" '\65099' -> "\8254" '\65100' -> "\8254" '\65101' -> "_" '\65102' -> "_" '\65103' -> "_" '\65104' -> "," '\65105' -> "\12289" '\65106' -> "." '\65108' -> ";" '\65109' -> ":" '\65110' -> "?" '\65111' -> "!" '\65112' -> "\8212" '\65113' -> "(" '\65114' -> ")" '\65115' -> "{" '\65116' -> "}" '\65117' -> "\12308" '\65118' -> "\12309" '\65119' -> "#" '\65120' -> "&" '\65121' -> "*" '\65122' -> "+" '\65123' -> "-" '\65124' -> "<" '\65125' -> ">" '\65126' -> "=" '\65128' -> "\\" '\65129' -> "$" '\65130' -> "%" '\65131' -> "@" '\65136' -> " \1611" '\65137' -> "\1600\1611" '\65138' -> " \1612" '\65140' -> " \1613" '\65142' -> " \1614" '\65143' -> "\1600\1614" '\65144' -> " \1615" '\65145' -> "\1600\1615" '\65146' -> " \1616" '\65147' -> "\1600\1616" '\65148' -> " \1617" '\65149' -> "\1600\1617" '\65150' -> " \1618" '\65151' -> "\1600\1618" '\65152' -> "\1569" '\65153' -> "\1570" '\65154' -> "\1570" '\65155' -> "\1571" '\65156' -> "\1571" '\65157' -> "\1572" '\65158' -> "\1572" '\65159' -> "\1573" '\65160' -> "\1573" '\65161' -> "\1574" '\65162' -> "\1574" '\65163' -> "\1574" '\65164' -> "\1574" '\65165' -> "\1575" '\65166' -> "\1575" '\65167' -> "\1576" '\65168' -> "\1576" '\65169' -> "\1576" '\65170' -> "\1576" '\65171' -> "\1577" '\65172' -> "\1577" '\65173' -> "\1578" '\65174' -> "\1578" '\65175' -> "\1578" '\65176' -> "\1578" '\65177' -> "\1579" '\65178' -> "\1579" '\65179' -> "\1579" '\65180' -> "\1579" '\65181' -> "\1580" '\65182' -> "\1580" '\65183' -> "\1580" '\65184' -> "\1580" '\65185' -> "\1581" '\65186' -> "\1581" '\65187' -> "\1581" '\65188' -> "\1581" '\65189' -> "\1582" '\65190' -> "\1582" '\65191' -> "\1582" '\65192' -> "\1582" '\65193' -> "\1583" '\65194' -> "\1583" '\65195' -> "\1584" '\65196' -> "\1584" '\65197' -> "\1585" '\65198' -> "\1585" '\65199' -> "\1586" '\65200' -> "\1586" '\65201' -> "\1587" '\65202' -> "\1587" '\65203' -> "\1587" '\65204' -> "\1587" '\65205' -> "\1588" '\65206' -> "\1588" '\65207' -> "\1588" '\65208' -> "\1588" '\65209' -> "\1589" '\65210' -> "\1589" '\65211' -> "\1589" '\65212' -> "\1589" '\65213' -> "\1590" '\65214' -> "\1590" '\65215' -> "\1590" '\65216' -> "\1590" '\65217' -> "\1591" '\65218' -> "\1591" '\65219' -> "\1591" '\65220' -> "\1591" '\65221' -> "\1592" '\65222' -> "\1592" '\65223' -> "\1592" '\65224' -> "\1592" '\65225' -> "\1593" '\65226' -> "\1593" '\65227' -> "\1593" '\65228' -> "\1593" '\65229' -> "\1594" '\65230' -> "\1594" '\65231' -> "\1594" '\65232' -> "\1594" '\65233' -> "\1601" '\65234' -> "\1601" '\65235' -> "\1601" '\65236' -> "\1601" '\65237' -> "\1602" '\65238' -> "\1602" '\65239' -> "\1602" '\65240' -> "\1602" '\65241' -> "\1603" '\65242' -> "\1603" '\65243' -> "\1603" '\65244' -> "\1603" '\65245' -> "\1604" '\65246' -> "\1604" '\65247' -> "\1604" '\65248' -> "\1604" '\65249' -> "\1605" '\65250' -> "\1605" '\65251' -> "\1605" '\65252' -> "\1605" '\65253' -> "\1606" '\65254' -> "\1606" '\65255' -> "\1606" '\65256' -> "\1606" '\65257' -> "\1607" '\65258' -> "\1607" '\65259' -> "\1607" '\65260' -> "\1607" '\65261' -> "\1608" '\65262' -> "\1608" '\65263' -> "\1609" '\65264' -> "\1609" '\65265' -> "\1610" '\65266' -> "\1610" '\65267' -> "\1610" '\65268' -> "\1610" '\65269' -> "\1604\1570" '\65270' -> "\1604\1570" '\65271' -> "\1604\1571" '\65272' -> "\1604\1571" '\65273' -> "\1604\1573" '\65274' -> "\1604\1573" '\65275' -> "\1604\1575" '\65276' -> "\1604\1575" '\65281' -> "!" '\65282' -> "\"" '\65283' -> "#" '\65284' -> "$" '\65285' -> "%" '\65286' -> "&" '\65287' -> "'" '\65288' -> "(" '\65289' -> ")" '\65290' -> "*" '\65291' -> "+" '\65292' -> "," '\65293' -> "-" '\65294' -> "." '\65295' -> "/" '\65296' -> "0" '\65297' -> "1" '\65298' -> "2" '\65299' -> "3" '\65300' -> "4" '\65301' -> "5" '\65302' -> "6" '\65303' -> "7" '\65304' -> "8" '\65305' -> "9" '\65306' -> ":" '\65307' -> ";" '\65308' -> "<" '\65309' -> "=" '\65310' -> ">" '\65311' -> "?" '\65312' -> "@" '\65313' -> "A" '\65314' -> "B" '\65315' -> "C" '\65316' -> "D" '\65317' -> "E" '\65318' -> "F" '\65319' -> "G" '\65320' -> "H" '\65321' -> "I" '\65322' -> "J" '\65323' -> "K" '\65324' -> "L" '\65325' -> "M" '\65326' -> "N" '\65327' -> "O" '\65328' -> "P" '\65329' -> "Q" '\65330' -> "R" '\65331' -> "S" '\65332' -> "T" '\65333' -> "U" '\65334' -> "V" '\65335' -> "W" '\65336' -> "X" '\65337' -> "Y" '\65338' -> "Z" '\65339' -> "[" '\65340' -> "\\" '\65341' -> "]" '\65342' -> "^" '\65343' -> "_" '\65344' -> "`" '\65345' -> "a" '\65346' -> "b" '\65347' -> "c" '\65348' -> "d" '\65349' -> "e" '\65350' -> "f" '\65351' -> "g" '\65352' -> "h" '\65353' -> "i" '\65354' -> "j" '\65355' -> "k" '\65356' -> "l" '\65357' -> "m" '\65358' -> "n" '\65359' -> "o" '\65360' -> "p" '\65361' -> "q" '\65362' -> "r" '\65363' -> "s" '\65364' -> "t" '\65365' -> "u" '\65366' -> "v" '\65367' -> "w" '\65368' -> "x" '\65369' -> "y" '\65370' -> "z" '\65371' -> "{" '\65372' -> "|" '\65373' -> "}" '\65374' -> "~" '\65375' -> "\10629" '\65376' -> "\10630" '\65377' -> "\12290" '\65378' -> "\12300" '\65379' -> "\12301" '\65380' -> "\12289" '\65381' -> "\12539" '\65382' -> "\12530" '\65383' -> "\12449" '\65384' -> "\12451" '\65385' -> "\12453" '\65386' -> "\12455" '\65387' -> "\12457" '\65388' -> "\12515" '\65389' -> "\12517" '\65390' -> "\12519" '\65391' -> "\12483" '\65392' -> "\12540" '\65393' -> "\12450" '\65394' -> "\12452" '\65395' -> "\12454" '\65396' -> "\12456" '\65397' -> "\12458" '\65398' -> "\12459" '\65399' -> "\12461" '\65400' -> "\12463" '\65401' -> "\12465" '\65402' -> "\12467" '\65403' -> "\12469" '\65404' -> "\12471" '\65405' -> "\12473" '\65406' -> "\12475" '\65407' -> "\12477" '\65408' -> "\12479" '\65409' -> "\12481" '\65410' -> "\12484" '\65411' -> "\12486" '\65412' -> "\12488" '\65413' -> "\12490" '\65414' -> "\12491" '\65415' -> "\12492" '\65416' -> "\12493" '\65417' -> "\12494" '\65418' -> "\12495" '\65419' -> "\12498" '\65420' -> "\12501" '\65421' -> "\12504" '\65422' -> "\12507" '\65423' -> "\12510" '\65424' -> "\12511" '\65425' -> "\12512" '\65426' -> "\12513" '\65427' -> "\12514" '\65428' -> "\12516" '\65429' -> "\12518" '\65430' -> "\12520" '\65431' -> "\12521" '\65432' -> "\12522" '\65433' -> "\12523" '\65434' -> "\12524" '\65435' -> "\12525" '\65436' -> "\12527" '\65437' -> "\12531" '\65438' -> "\12441" '\65439' -> "\12442" '\65440' -> "\12644" '\65441' -> "\12593" '\65442' -> "\12594" '\65443' -> "\12595" '\65444' -> "\12596" '\65445' -> "\12597" '\65446' -> "\12598" '\65447' -> "\12599" '\65448' -> "\12600" '\65449' -> "\12601" '\65450' -> "\12602" '\65451' -> "\12603" '\65452' -> "\12604" '\65453' -> "\12605" '\65454' -> "\12606" '\65455' -> "\12607" '\65456' -> "\12608" '\65457' -> "\12609" '\65458' -> "\12610" '\65459' -> "\12611" '\65460' -> "\12612" '\65461' -> "\12613" '\65462' -> "\12614" '\65463' -> "\12615" '\65464' -> "\12616" '\65465' -> "\12617" '\65466' -> "\12618" '\65467' -> "\12619" '\65468' -> "\12620" '\65469' -> "\12621" '\65470' -> "\12622" '\65474' -> "\12623" '\65475' -> "\12624" '\65476' -> "\12625" '\65477' -> "\12626" '\65478' -> "\12627" '\65479' -> "\12628" '\65482' -> "\12629" '\65483' -> "\12630" '\65484' -> "\12631" '\65485' -> "\12632" '\65486' -> "\12633" '\65487' -> "\12634" '\65490' -> "\12635" '\65491' -> "\12636" '\65492' -> "\12637" '\65493' -> "\12638" '\65494' -> "\12639" '\65495' -> "\12640" '\65498' -> "\12641" '\65499' -> "\12642" '\65500' -> "\12643" '\65504' -> "\162" '\65505' -> "\163" '\65506' -> "\172" '\65507' -> "\175" '\65508' -> "\166" '\65509' -> "\165" '\65510' -> "\8361" '\65512' -> "\9474" '\65513' -> "\8592" '\65514' -> "\8593" '\65515' -> "\8594" '\65516' -> "\8595" '\65517' -> "\9632" '\65518' -> "\9675" '\67457' -> "\720" '\67458' -> "\721" '\67459' -> "\230" '\67460' -> "\665" '\67461' -> "\595" '\67463' -> "\675" '\67464' -> "\43878" '\67465' -> "\677" '\67466' -> "\676" '\67467' -> "\598" '\67468' -> "\599" '\67469' -> "\7569" '\67470' -> "\600" '\67471' -> "\606" '\67472' -> "\681" '\67473' -> "\612" '\67474' -> "\610" '\67475' -> "\608" '\67476' -> "\667" '\67477' -> "\295" '\67478' -> "\668" '\67479' -> "\615" '\67480' -> "\644" '\67481' -> "\682" '\67482' -> "\683" '\67483' -> "\620" '\67484' -> "\122628" '\67485' -> "\42894" '\67486' -> "\622" '\67487' -> "\122629" '\67488' -> "\654" '\67489' -> "\122630" '\67490' -> "\248" '\67491' -> "\630" '\67492' -> "\631" '\67493' -> "q" '\67494' -> "\634" '\67495' -> "\122632" '\67496' -> "\637" '\67497' -> "\638" '\67498' -> "\640" '\67499' -> "\680" '\67500' -> "\678" '\67501' -> "\43879" '\67502' -> "\679" '\67503' -> "\648" '\67504' -> "\11377" '\67506' -> "\655" '\67507' -> "\673" '\67508' -> "\674" '\67509' -> "\664" '\67510' -> "\448" '\67511' -> "\449" '\67512' -> "\450" '\67513' -> "\122634" '\67514' -> "\122654" '\69786' -> "\69785\69818" '\69788' -> "\69787\69818" '\69803' -> "\69797\69818" '\69934' -> "\69937\69927" '\69935' -> "\69938\69927" '\70475' -> "\70471\70462" '\70476' -> "\70471\70487" '\70843' -> "\70841\70842" '\70844' -> "\70841\70832" '\70846' -> "\70841\70845" '\71098' -> "\71096\71087" '\71099' -> "\71097\71087" '\71992' -> "\71989\71984" '\119134' -> "\119127\119141" '\119135' -> "\119128\119141" '\119136' -> "\119135\119150" '\119137' -> "\119135\119151" '\119138' -> "\119135\119152" '\119139' -> "\119135\119153" '\119140' -> "\119135\119154" '\119227' -> "\119225\119141" '\119228' -> "\119226\119141" '\119229' -> "\119227\119150" '\119230' -> "\119228\119150" '\119231' -> "\119227\119151" '\119232' -> "\119228\119151" '\119808' -> "A" '\119809' -> "B" '\119810' -> "C" '\119811' -> "D" '\119812' -> "E" '\119813' -> "F" '\119814' -> "G" '\119815' -> "H" '\119816' -> "I" '\119817' -> "J" '\119818' -> "K" '\119819' -> "L" '\119820' -> "M" '\119821' -> "N" '\119822' -> "O" '\119823' -> "P" '\119824' -> "Q" '\119825' -> "R" '\119826' -> "S" '\119827' -> "T" '\119828' -> "U" '\119829' -> "V" '\119830' -> "W" '\119831' -> "X" '\119832' -> "Y" '\119833' -> "Z" '\119834' -> "a" '\119835' -> "b" '\119836' -> "c" '\119837' -> "d" '\119838' -> "e" '\119839' -> "f" '\119840' -> "g" '\119841' -> "h" '\119842' -> "i" '\119843' -> "j" '\119844' -> "k" '\119845' -> "l" '\119846' -> "m" '\119847' -> "n" '\119848' -> "o" '\119849' -> "p" '\119850' -> "q" '\119851' -> "r" '\119852' -> "s" '\119853' -> "t" '\119854' -> "u" '\119855' -> "v" '\119856' -> "w" '\119857' -> "x" '\119858' -> "y" '\119859' -> "z" '\119860' -> "A" '\119861' -> "B" '\119862' -> "C" '\119863' -> "D" '\119864' -> "E" '\119865' -> "F" '\119866' -> "G" '\119867' -> "H" '\119868' -> "I" '\119869' -> "J" '\119870' -> "K" '\119871' -> "L" '\119872' -> "M" '\119873' -> "N" '\119874' -> "O" '\119875' -> "P" '\119876' -> "Q" '\119877' -> "R" '\119878' -> "S" '\119879' -> "T" '\119880' -> "U" '\119881' -> "V" '\119882' -> "W" '\119883' -> "X" '\119884' -> "Y" '\119885' -> "Z" '\119886' -> "a" '\119887' -> "b" '\119888' -> "c" '\119889' -> "d" '\119890' -> "e" '\119891' -> "f" '\119892' -> "g" '\119894' -> "i" '\119895' -> "j" '\119896' -> "k" '\119897' -> "l" '\119898' -> "m" '\119899' -> "n" '\119900' -> "o" '\119901' -> "p" '\119902' -> "q" '\119903' -> "r" '\119904' -> "s" '\119905' -> "t" '\119906' -> "u" '\119907' -> "v" '\119908' -> "w" '\119909' -> "x" '\119910' -> "y" '\119911' -> "z" '\119912' -> "A" '\119913' -> "B" '\119914' -> "C" '\119915' -> "D" '\119916' -> "E" '\119917' -> "F" '\119918' -> "G" '\119919' -> "H" '\119920' -> "I" '\119921' -> "J" '\119922' -> "K" '\119923' -> "L" '\119924' -> "M" '\119925' -> "N" '\119926' -> "O" '\119927' -> "P" '\119928' -> "Q" '\119929' -> "R" '\119930' -> "S" '\119931' -> "T" '\119932' -> "U" '\119933' -> "V" '\119934' -> "W" '\119935' -> "X" '\119936' -> "Y" '\119937' -> "Z" '\119938' -> "a" '\119939' -> "b" '\119940' -> "c" '\119941' -> "d" '\119942' -> "e" '\119943' -> "f" '\119944' -> "g" '\119945' -> "h" '\119946' -> "i" '\119947' -> "j" '\119948' -> "k" '\119949' -> "l" '\119950' -> "m" '\119951' -> "n" '\119952' -> "o" '\119953' -> "p" '\119954' -> "q" '\119955' -> "r" '\119956' -> "s" '\119957' -> "t" '\119958' -> "u" '\119959' -> "v" '\119960' -> "w" '\119961' -> "x" '\119962' -> "y" '\119963' -> "z" '\119964' -> "A" '\119966' -> "C" '\119967' -> "D" '\119970' -> "G" '\119973' -> "J" '\119974' -> "K" '\119977' -> "N" '\119978' -> "O" '\119979' -> "P" '\119980' -> "Q" '\119982' -> "S" '\119983' -> "T" '\119984' -> "U" '\119985' -> "V" '\119986' -> "W" '\119987' -> "X" '\119988' -> "Y" '\119989' -> "Z" '\119990' -> "a" '\119991' -> "b" '\119992' -> "c" '\119993' -> "d" '\119995' -> "f" '\119997' -> "h" '\119998' -> "i" '\119999' -> "j" '\120000' -> "k" '\120001' -> "l" '\120002' -> "m" '\120003' -> "n" '\120005' -> "p" '\120006' -> "q" '\120007' -> "r" '\120008' -> "s" '\120009' -> "t" '\120010' -> "u" '\120011' -> "v" '\120012' -> "w" '\120013' -> "x" '\120014' -> "y" '\120015' -> "z" '\120016' -> "A" '\120017' -> "B" '\120018' -> "C" '\120019' -> "D" '\120020' -> "E" '\120021' -> "F" '\120022' -> "G" '\120023' -> "H" '\120024' -> "I" '\120025' -> "J" '\120026' -> "K" '\120027' -> "L" '\120028' -> "M" '\120029' -> "N" '\120030' -> "O" '\120031' -> "P" '\120032' -> "Q" '\120033' -> "R" '\120034' -> "S" '\120035' -> "T" '\120036' -> "U" '\120037' -> "V" '\120038' -> "W" '\120039' -> "X" '\120040' -> "Y" '\120041' -> "Z" '\120042' -> "a" '\120043' -> "b" '\120044' -> "c" '\120045' -> "d" '\120046' -> "e" '\120047' -> "f" '\120048' -> "g" '\120049' -> "h" '\120050' -> "i" '\120051' -> "j" '\120052' -> "k" '\120053' -> "l" '\120054' -> "m" '\120055' -> "n" '\120056' -> "o" '\120057' -> "p" '\120058' -> "q" '\120059' -> "r" '\120060' -> "s" '\120061' -> "t" '\120062' -> "u" '\120063' -> "v" '\120064' -> "w" '\120065' -> "x" '\120066' -> "y" '\120067' -> "z" '\120068' -> "A" '\120069' -> "B" '\120071' -> "D" '\120072' -> "E" '\120073' -> "F" '\120074' -> "G" '\120077' -> "J" '\120078' -> "K" '\120079' -> "L" '\120080' -> "M" '\120081' -> "N" '\120082' -> "O" '\120083' -> "P" '\120084' -> "Q" '\120086' -> "S" '\120087' -> "T" '\120088' -> "U" '\120089' -> "V" '\120090' -> "W" '\120091' -> "X" '\120092' -> "Y" '\120094' -> "a" '\120095' -> "b" '\120096' -> "c" '\120097' -> "d" '\120098' -> "e" '\120099' -> "f" '\120100' -> "g" '\120101' -> "h" '\120102' -> "i" '\120103' -> "j" '\120104' -> "k" '\120105' -> "l" '\120106' -> "m" '\120107' -> "n" '\120108' -> "o" '\120109' -> "p" '\120110' -> "q" '\120111' -> "r" '\120112' -> "s" '\120113' -> "t" '\120114' -> "u" '\120115' -> "v" '\120116' -> "w" '\120117' -> "x" '\120118' -> "y" '\120119' -> "z" '\120120' -> "A" '\120121' -> "B" '\120123' -> "D" '\120124' -> "E" '\120125' -> "F" '\120126' -> "G" '\120128' -> "I" '\120129' -> "J" '\120130' -> "K" '\120131' -> "L" '\120132' -> "M" '\120134' -> "O" '\120138' -> "S" '\120139' -> "T" '\120140' -> "U" '\120141' -> "V" '\120142' -> "W" '\120143' -> "X" '\120144' -> "Y" '\120146' -> "a" '\120147' -> "b" '\120148' -> "c" '\120149' -> "d" '\120150' -> "e" '\120151' -> "f" '\120152' -> "g" '\120153' -> "h" '\120154' -> "i" '\120155' -> "j" '\120156' -> "k" '\120157' -> "l" '\120158' -> "m" '\120159' -> "n" '\120160' -> "o" '\120161' -> "p" '\120162' -> "q" '\120163' -> "r" '\120164' -> "s" '\120165' -> "t" '\120166' -> "u" '\120167' -> "v" '\120168' -> "w" '\120169' -> "x" '\120170' -> "y" '\120171' -> "z" '\120172' -> "A" '\120173' -> "B" '\120174' -> "C" '\120175' -> "D" '\120176' -> "E" '\120177' -> "F" '\120178' -> "G" '\120179' -> "H" '\120180' -> "I" '\120181' -> "J" '\120182' -> "K" '\120183' -> "L" '\120184' -> "M" '\120185' -> "N" '\120186' -> "O" '\120187' -> "P" '\120188' -> "Q" '\120189' -> "R" '\120190' -> "S" '\120191' -> "T" '\120192' -> "U" '\120193' -> "V" '\120194' -> "W" '\120195' -> "X" '\120196' -> "Y" '\120197' -> "Z" '\120198' -> "a" '\120199' -> "b" '\120200' -> "c" '\120201' -> "d" '\120202' -> "e" '\120203' -> "f" '\120204' -> "g" '\120205' -> "h" '\120206' -> "i" '\120207' -> "j" '\120208' -> "k" '\120209' -> "l" '\120210' -> "m" '\120211' -> "n" '\120212' -> "o" '\120213' -> "p" '\120214' -> "q" '\120215' -> "r" '\120216' -> "s" '\120217' -> "t" '\120218' -> "u" '\120219' -> "v" '\120220' -> "w" '\120221' -> "x" '\120222' -> "y" '\120223' -> "z" '\120224' -> "A" '\120225' -> "B" '\120226' -> "C" '\120227' -> "D" '\120228' -> "E" '\120229' -> "F" '\120230' -> "G" '\120231' -> "H" '\120232' -> "I" '\120233' -> "J" '\120234' -> "K" '\120235' -> "L" '\120236' -> "M" '\120237' -> "N" '\120238' -> "O" '\120239' -> "P" '\120240' -> "Q" '\120241' -> "R" '\120242' -> "S" '\120243' -> "T" '\120244' -> "U" '\120245' -> "V" '\120246' -> "W" '\120247' -> "X" '\120248' -> "Y" '\120249' -> "Z" '\120250' -> "a" '\120251' -> "b" '\120252' -> "c" '\120253' -> "d" '\120254' -> "e" '\120255' -> "f" '\120256' -> "g" '\120257' -> "h" '\120258' -> "i" '\120259' -> "j" '\120260' -> "k" '\120261' -> "l" '\120262' -> "m" '\120263' -> "n" '\120264' -> "o" '\120265' -> "p" '\120266' -> "q" '\120267' -> "r" '\120268' -> "s" '\120269' -> "t" '\120270' -> "u" '\120271' -> "v" '\120272' -> "w" '\120273' -> "x" '\120274' -> "y" '\120275' -> "z" '\120276' -> "A" '\120277' -> "B" '\120278' -> "C" '\120279' -> "D" '\120280' -> "E" '\120281' -> "F" '\120282' -> "G" '\120283' -> "H" '\120284' -> "I" '\120285' -> "J" '\120286' -> "K" '\120287' -> "L" '\120288' -> "M" '\120289' -> "N" '\120290' -> "O" '\120291' -> "P" '\120292' -> "Q" '\120293' -> "R" '\120294' -> "S" '\120295' -> "T" '\120296' -> "U" '\120297' -> "V" '\120298' -> "W" '\120299' -> "X" '\120300' -> "Y" '\120301' -> "Z" '\120302' -> "a" '\120303' -> "b" '\120304' -> "c" '\120305' -> "d" '\120306' -> "e" '\120307' -> "f" '\120308' -> "g" '\120309' -> "h" '\120310' -> "i" '\120311' -> "j" '\120312' -> "k" '\120313' -> "l" '\120314' -> "m" '\120315' -> "n" '\120316' -> "o" '\120317' -> "p" '\120318' -> "q" '\120319' -> "r" '\120320' -> "s" '\120321' -> "t" '\120322' -> "u" '\120323' -> "v" '\120324' -> "w" '\120325' -> "x" '\120326' -> "y" '\120327' -> "z" '\120328' -> "A" '\120329' -> "B" '\120330' -> "C" '\120331' -> "D" '\120332' -> "E" '\120333' -> "F" '\120334' -> "G" '\120335' -> "H" '\120336' -> "I" '\120337' -> "J" '\120338' -> "K" '\120339' -> "L" '\120340' -> "M" '\120341' -> "N" '\120342' -> "O" '\120343' -> "P" '\120344' -> "Q" '\120345' -> "R" '\120346' -> "S" '\120347' -> "T" '\120348' -> "U" '\120349' -> "V" '\120350' -> "W" '\120351' -> "X" '\120352' -> "Y" '\120353' -> "Z" '\120354' -> "a" '\120355' -> "b" '\120356' -> "c" '\120357' -> "d" '\120358' -> "e" '\120359' -> "f" '\120360' -> "g" '\120361' -> "h" '\120362' -> "i" '\120363' -> "j" '\120364' -> "k" '\120365' -> "l" '\120366' -> "m" '\120367' -> "n" '\120368' -> "o" '\120369' -> "p" '\120370' -> "q" '\120371' -> "r" '\120372' -> "s" '\120373' -> "t" '\120374' -> "u" '\120375' -> "v" '\120376' -> "w" '\120377' -> "x" '\120378' -> "y" '\120379' -> "z" '\120380' -> "A" '\120381' -> "B" '\120382' -> "C" '\120383' -> "D" '\120384' -> "E" '\120385' -> "F" '\120386' -> "G" '\120387' -> "H" '\120388' -> "I" '\120389' -> "J" '\120390' -> "K" '\120391' -> "L" '\120392' -> "M" '\120393' -> "N" '\120394' -> "O" '\120395' -> "P" '\120396' -> "Q" '\120397' -> "R" '\120398' -> "S" '\120399' -> "T" '\120400' -> "U" '\120401' -> "V" '\120402' -> "W" '\120403' -> "X" '\120404' -> "Y" '\120405' -> "Z" '\120406' -> "a" '\120407' -> "b" '\120408' -> "c" '\120409' -> "d" '\120410' -> "e" '\120411' -> "f" '\120412' -> "g" '\120413' -> "h" '\120414' -> "i" '\120415' -> "j" '\120416' -> "k" '\120417' -> "l" '\120418' -> "m" '\120419' -> "n" '\120420' -> "o" '\120421' -> "p" '\120422' -> "q" '\120423' -> "r" '\120424' -> "s" '\120425' -> "t" '\120426' -> "u" '\120427' -> "v" '\120428' -> "w" '\120429' -> "x" '\120430' -> "y" '\120431' -> "z" '\120432' -> "A" '\120433' -> "B" '\120434' -> "C" '\120435' -> "D" '\120436' -> "E" '\120437' -> "F" '\120438' -> "G" '\120439' -> "H" '\120440' -> "I" '\120441' -> "J" '\120442' -> "K" '\120443' -> "L" '\120444' -> "M" '\120445' -> "N" '\120446' -> "O" '\120447' -> "P" '\120448' -> "Q" '\120449' -> "R" '\120450' -> "S" '\120451' -> "T" '\120452' -> "U" '\120453' -> "V" '\120454' -> "W" '\120455' -> "X" '\120456' -> "Y" '\120457' -> "Z" '\120458' -> "a" '\120459' -> "b" '\120460' -> "c" '\120461' -> "d" '\120462' -> "e" '\120463' -> "f" '\120464' -> "g" '\120465' -> "h" '\120466' -> "i" '\120467' -> "j" '\120468' -> "k" '\120469' -> "l" '\120470' -> "m" '\120471' -> "n" '\120472' -> "o" '\120473' -> "p" '\120474' -> "q" '\120475' -> "r" '\120476' -> "s" '\120477' -> "t" '\120478' -> "u" '\120479' -> "v" '\120480' -> "w" '\120481' -> "x" '\120482' -> "y" '\120483' -> "z" '\120484' -> "\305" '\120485' -> "\567" '\120488' -> "\913" '\120489' -> "\914" '\120490' -> "\915" '\120491' -> "\916" '\120492' -> "\917" '\120493' -> "\918" '\120494' -> "\919" '\120495' -> "\920" '\120496' -> "\921" '\120497' -> "\922" '\120498' -> "\923" '\120499' -> "\924" '\120500' -> "\925" '\120501' -> "\926" '\120502' -> "\927" '\120503' -> "\928" '\120504' -> "\929" '\120505' -> "\1012" '\120506' -> "\931" '\120507' -> "\932" '\120508' -> "\933" '\120509' -> "\934" '\120510' -> "\935" '\120511' -> "\936" '\120512' -> "\937" '\120513' -> "\8711" '\120514' -> "\945" '\120515' -> "\946" '\120516' -> "\947" '\120517' -> "\948" '\120518' -> "\949" '\120519' -> "\950" '\120520' -> "\951" '\120521' -> "\952" '\120522' -> "\953" '\120523' -> "\954" '\120524' -> "\955" '\120525' -> "\956" '\120526' -> "\957" '\120527' -> "\958" '\120528' -> "\959" '\120529' -> "\960" '\120530' -> "\961" '\120531' -> "\962" '\120532' -> "\963" '\120533' -> "\964" '\120534' -> "\965" '\120535' -> "\966" '\120536' -> "\967" '\120537' -> "\968" '\120538' -> "\969" '\120539' -> "\8706" '\120540' -> "\1013" '\120541' -> "\977" '\120542' -> "\1008" '\120543' -> "\981" '\120544' -> "\1009" '\120545' -> "\982" '\120546' -> "\913" '\120547' -> "\914" '\120548' -> "\915" '\120549' -> "\916" '\120550' -> "\917" '\120551' -> "\918" '\120552' -> "\919" '\120553' -> "\920" '\120554' -> "\921" '\120555' -> "\922" '\120556' -> "\923" '\120557' -> "\924" '\120558' -> "\925" '\120559' -> "\926" '\120560' -> "\927" '\120561' -> "\928" '\120562' -> "\929" '\120563' -> "\1012" '\120564' -> "\931" '\120565' -> "\932" '\120566' -> "\933" '\120567' -> "\934" '\120568' -> "\935" '\120569' -> "\936" '\120570' -> "\937" '\120571' -> "\8711" '\120572' -> "\945" '\120573' -> "\946" '\120574' -> "\947" '\120575' -> "\948" '\120576' -> "\949" '\120577' -> "\950" '\120578' -> "\951" '\120579' -> "\952" '\120580' -> "\953" '\120581' -> "\954" '\120582' -> "\955" '\120583' -> "\956" '\120584' -> "\957" '\120585' -> "\958" '\120586' -> "\959" '\120587' -> "\960" '\120588' -> "\961" '\120589' -> "\962" '\120590' -> "\963" '\120591' -> "\964" '\120592' -> "\965" '\120593' -> "\966" '\120594' -> "\967" '\120595' -> "\968" '\120596' -> "\969" '\120597' -> "\8706" '\120598' -> "\1013" '\120599' -> "\977" '\120600' -> "\1008" '\120601' -> "\981" '\120602' -> "\1009" '\120603' -> "\982" '\120604' -> "\913" '\120605' -> "\914" '\120606' -> "\915" '\120607' -> "\916" '\120608' -> "\917" '\120609' -> "\918" '\120610' -> "\919" '\120611' -> "\920" '\120612' -> "\921" '\120613' -> "\922" '\120614' -> "\923" '\120615' -> "\924" '\120616' -> "\925" '\120617' -> "\926" '\120618' -> "\927" '\120619' -> "\928" '\120620' -> "\929" '\120621' -> "\1012" '\120622' -> "\931" '\120623' -> "\932" '\120624' -> "\933" '\120625' -> "\934" '\120626' -> "\935" '\120627' -> "\936" '\120628' -> "\937" '\120629' -> "\8711" '\120630' -> "\945" '\120631' -> "\946" '\120632' -> "\947" '\120633' -> "\948" '\120634' -> "\949" '\120635' -> "\950" '\120636' -> "\951" '\120637' -> "\952" '\120638' -> "\953" '\120639' -> "\954" '\120640' -> "\955" '\120641' -> "\956" '\120642' -> "\957" '\120643' -> "\958" '\120644' -> "\959" '\120645' -> "\960" '\120646' -> "\961" '\120647' -> "\962" '\120648' -> "\963" '\120649' -> "\964" '\120650' -> "\965" '\120651' -> "\966" '\120652' -> "\967" '\120653' -> "\968" '\120654' -> "\969" '\120655' -> "\8706" '\120656' -> "\1013" '\120657' -> "\977" '\120658' -> "\1008" '\120659' -> "\981" '\120660' -> "\1009" '\120661' -> "\982" '\120662' -> "\913" '\120663' -> "\914" '\120664' -> "\915" '\120665' -> "\916" '\120666' -> "\917" '\120667' -> "\918" '\120668' -> "\919" '\120669' -> "\920" '\120670' -> "\921" '\120671' -> "\922" '\120672' -> "\923" '\120673' -> "\924" '\120674' -> "\925" '\120675' -> "\926" '\120676' -> "\927" '\120677' -> "\928" '\120678' -> "\929" '\120679' -> "\1012" '\120680' -> "\931" '\120681' -> "\932" '\120682' -> "\933" '\120683' -> "\934" '\120684' -> "\935" '\120685' -> "\936" '\120686' -> "\937" '\120687' -> "\8711" '\120688' -> "\945" '\120689' -> "\946" '\120690' -> "\947" '\120691' -> "\948" '\120692' -> "\949" '\120693' -> "\950" '\120694' -> "\951" '\120695' -> "\952" '\120696' -> "\953" '\120697' -> "\954" '\120698' -> "\955" '\120699' -> "\956" '\120700' -> "\957" '\120701' -> "\958" '\120702' -> "\959" '\120703' -> "\960" '\120704' -> "\961" '\120705' -> "\962" '\120706' -> "\963" '\120707' -> "\964" '\120708' -> "\965" '\120709' -> "\966" '\120710' -> "\967" '\120711' -> "\968" '\120712' -> "\969" '\120713' -> "\8706" '\120714' -> "\1013" '\120715' -> "\977" '\120716' -> "\1008" '\120717' -> "\981" '\120718' -> "\1009" '\120719' -> "\982" '\120720' -> "\913" '\120721' -> "\914" '\120722' -> "\915" '\120723' -> "\916" '\120724' -> "\917" '\120725' -> "\918" '\120726' -> "\919" '\120727' -> "\920" '\120728' -> "\921" '\120729' -> "\922" '\120730' -> "\923" '\120731' -> "\924" '\120732' -> "\925" '\120733' -> "\926" '\120734' -> "\927" '\120735' -> "\928" '\120736' -> "\929" '\120737' -> "\1012" '\120738' -> "\931" '\120739' -> "\932" '\120740' -> "\933" '\120741' -> "\934" '\120742' -> "\935" '\120743' -> "\936" '\120744' -> "\937" '\120745' -> "\8711" '\120746' -> "\945" '\120747' -> "\946" '\120748' -> "\947" '\120749' -> "\948" '\120750' -> "\949" '\120751' -> "\950" '\120752' -> "\951" '\120753' -> "\952" '\120754' -> "\953" '\120755' -> "\954" '\120756' -> "\955" '\120757' -> "\956" '\120758' -> "\957" '\120759' -> "\958" '\120760' -> "\959" '\120761' -> "\960" '\120762' -> "\961" '\120763' -> "\962" '\120764' -> "\963" '\120765' -> "\964" '\120766' -> "\965" '\120767' -> "\966" '\120768' -> "\967" '\120769' -> "\968" '\120770' -> "\969" '\120771' -> "\8706" '\120772' -> "\1013" '\120773' -> "\977" '\120774' -> "\1008" '\120775' -> "\981" '\120776' -> "\1009" '\120777' -> "\982" '\120778' -> "\988" '\120779' -> "\989" '\120782' -> "0" '\120783' -> "1" '\120784' -> "2" '\120785' -> "3" '\120786' -> "4" '\120787' -> "5" '\120788' -> "6" '\120789' -> "7" '\120790' -> "8" '\120791' -> "9" '\120792' -> "0" '\120793' -> "1" '\120794' -> "2" '\120795' -> "3" '\120796' -> "4" '\120797' -> "5" '\120798' -> "6" '\120799' -> "7" '\120800' -> "8" '\120801' -> "9" '\120802' -> "0" '\120803' -> "1" '\120804' -> "2" '\120805' -> "3" '\120806' -> "4" '\120807' -> "5" '\120808' -> "6" '\120809' -> "7" '\120810' -> "8" '\120811' -> "9" '\120812' -> "0" '\120813' -> "1" '\120814' -> "2" '\120815' -> "3" '\120816' -> "4" '\120817' -> "5" '\120818' -> "6" '\120819' -> "7" '\120820' -> "8" '\120821' -> "9" '\120822' -> "0" '\120823' -> "1" '\120824' -> "2" '\120825' -> "3" '\120826' -> "4" '\120827' -> "5" '\120828' -> "6" '\120829' -> "7" '\120830' -> "8" '\120831' -> "9" '\122928' -> "\1072" '\122929' -> "\1073" '\122930' -> "\1074" '\122931' -> "\1075" '\122932' -> "\1076" '\122933' -> "\1077" '\122934' -> "\1078" '\122935' -> "\1079" '\122936' -> "\1080" '\122937' -> "\1082" '\122938' -> "\1083" '\122939' -> "\1084" '\122940' -> "\1086" '\122941' -> "\1087" '\122942' -> "\1088" '\122943' -> "\1089" '\122944' -> "\1090" '\122945' -> "\1091" '\122946' -> "\1092" '\122947' -> "\1093" '\122948' -> "\1094" '\122949' -> "\1095" '\122950' -> "\1096" '\122951' -> "\1099" '\122952' -> "\1101" '\122953' -> "\1102" '\122954' -> "\42633" '\122955' -> "\1241" '\122956' -> "\1110" '\122957' -> "\1112" '\122958' -> "\1257" '\122959' -> "\1199" '\122960' -> "\1231" '\122961' -> "\1072" '\122962' -> "\1073" '\122963' -> "\1074" '\122964' -> "\1075" '\122965' -> "\1076" '\122966' -> "\1077" '\122967' -> "\1078" '\122968' -> "\1079" '\122969' -> "\1080" '\122970' -> "\1082" '\122971' -> "\1083" '\122972' -> "\1086" '\122973' -> "\1087" '\122974' -> "\1089" '\122975' -> "\1091" '\122976' -> "\1092" '\122977' -> "\1093" '\122978' -> "\1094" '\122979' -> "\1095" '\122980' -> "\1096" '\122981' -> "\1098" '\122982' -> "\1099" '\122983' -> "\1169" '\122984' -> "\1110" '\122985' -> "\1109" '\122986' -> "\1119" '\122987' -> "\1195" '\122988' -> "\42577" '\122989' -> "\1201" '\126464' -> "\1575" '\126465' -> "\1576" '\126466' -> "\1580" '\126467' -> "\1583" '\126469' -> "\1608" '\126470' -> "\1586" '\126471' -> "\1581" '\126472' -> "\1591" '\126473' -> "\1610" '\126474' -> "\1603" '\126475' -> "\1604" '\126476' -> "\1605" '\126477' -> "\1606" '\126478' -> "\1587" '\126479' -> "\1593" '\126480' -> "\1601" '\126481' -> "\1589" '\126482' -> "\1602" '\126483' -> "\1585" '\126484' -> "\1588" '\126485' -> "\1578" '\126486' -> "\1579" '\126487' -> "\1582" '\126488' -> "\1584" '\126489' -> "\1590" '\126490' -> "\1592" '\126491' -> "\1594" '\126492' -> "\1646" '\126493' -> "\1722" '\126494' -> "\1697" '\126495' -> "\1647" '\126497' -> "\1576" '\126498' -> "\1580" '\126500' -> "\1607" '\126503' -> "\1581" '\126505' -> "\1610" '\126506' -> "\1603" '\126507' -> "\1604" '\126508' -> "\1605" '\126509' -> "\1606" '\126510' -> "\1587" '\126511' -> "\1593" '\126512' -> "\1601" '\126513' -> "\1589" '\126514' -> "\1602" '\126516' -> "\1588" '\126517' -> "\1578" '\126518' -> "\1579" '\126519' -> "\1582" '\126521' -> "\1590" '\126523' -> "\1594" '\126530' -> "\1580" '\126535' -> "\1581" '\126537' -> "\1610" '\126539' -> "\1604" '\126541' -> "\1606" '\126542' -> "\1587" '\126543' -> "\1593" '\126545' -> "\1589" '\126546' -> "\1602" '\126548' -> "\1588" '\126551' -> "\1582" '\126553' -> "\1590" '\126555' -> "\1594" '\126557' -> "\1722" '\126559' -> "\1647" '\126561' -> "\1576" '\126562' -> "\1580" '\126564' -> "\1607" '\126567' -> "\1581" '\126568' -> "\1591" '\126569' -> "\1610" '\126570' -> "\1603" '\126572' -> "\1605" '\126573' -> "\1606" '\126574' -> "\1587" '\126575' -> "\1593" '\126576' -> "\1601" '\126577' -> "\1589" '\126578' -> "\1602" '\126580' -> "\1588" '\126581' -> "\1578" '\126582' -> "\1579" '\126583' -> "\1582" '\126585' -> "\1590" '\126586' -> "\1592" '\126587' -> "\1594" '\126588' -> "\1646" '\126590' -> "\1697" '\126592' -> "\1575" '\126593' -> "\1576" '\126594' -> "\1580" '\126595' -> "\1583" '\126596' -> "\1607" '\126597' -> "\1608" '\126598' -> "\1586" '\126599' -> "\1581" '\126600' -> "\1591" '\126601' -> "\1610" '\126603' -> "\1604" '\126604' -> "\1605" '\126605' -> "\1606" '\126606' -> "\1587" '\126607' -> "\1593" '\126608' -> "\1601" '\126609' -> "\1589" '\126610' -> "\1602" '\126611' -> "\1585" '\126612' -> "\1588" '\126613' -> "\1578" '\126614' -> "\1579" '\126615' -> "\1582" '\126616' -> "\1584" '\126617' -> "\1590" '\126618' -> "\1592" '\126619' -> "\1594" '\126625' -> "\1576" '\126626' -> "\1580" '\126627' -> "\1583" '\126629' -> "\1608" '\126630' -> "\1586" '\126631' -> "\1581" '\126632' -> "\1591" '\126633' -> "\1610" '\126635' -> "\1604" '\126636' -> "\1605" '\126637' -> "\1606" '\126638' -> "\1587" '\126639' -> "\1593" '\126640' -> "\1601" '\126641' -> "\1589" '\126642' -> "\1602" '\126643' -> "\1585" '\126644' -> "\1588" '\126645' -> "\1578" '\126646' -> "\1579" '\126647' -> "\1582" '\126648' -> "\1584" '\126649' -> "\1590" '\126650' -> "\1592" '\126651' -> "\1594" '\127232' -> "0." '\127233' -> "0," '\127234' -> "1," '\127235' -> "2," '\127236' -> "3," '\127237' -> "4," '\127238' -> "5," '\127239' -> "6," '\127240' -> "7," '\127241' -> "8," '\127242' -> "9," '\127248' -> "(A)" '\127249' -> "(B)" '\127250' -> "(C)" '\127251' -> "(D)" '\127252' -> "(E)" '\127253' -> "(F)" '\127254' -> "(G)" '\127255' -> "(H)" '\127256' -> "(I)" '\127257' -> "(J)" '\127258' -> "(K)" '\127259' -> "(L)" '\127260' -> "(M)" '\127261' -> "(N)" '\127262' -> "(O)" '\127263' -> "(P)" '\127264' -> "(Q)" '\127265' -> "(R)" '\127266' -> "(S)" '\127267' -> "(T)" '\127268' -> "(U)" '\127269' -> "(V)" '\127270' -> "(W)" '\127271' -> "(X)" '\127272' -> "(Y)" '\127273' -> "(Z)" '\127274' -> "\12308S\12309" '\127275' -> "C" '\127276' -> "R" '\127277' -> "CD" '\127278' -> "WZ" '\127280' -> "A" '\127281' -> "B" '\127282' -> "C" '\127283' -> "D" '\127284' -> "E" '\127285' -> "F" '\127286' -> "G" '\127287' -> "H" '\127288' -> "I" '\127289' -> "J" '\127290' -> "K" '\127291' -> "L" '\127292' -> "M" '\127293' -> "N" '\127294' -> "O" '\127295' -> "P" '\127296' -> "Q" '\127297' -> "R" '\127298' -> "S" '\127299' -> "T" '\127300' -> "U" '\127301' -> "V" '\127302' -> "W" '\127303' -> "X" '\127304' -> "Y" '\127305' -> "Z" '\127306' -> "HV" '\127307' -> "MV" '\127308' -> "SD" '\127309' -> "SS" '\127310' -> "PPV" '\127311' -> "WC" '\127338' -> "MC" '\127339' -> "MD" '\127340' -> "MR" '\127376' -> "DJ" '\127488' -> "\12411\12363" '\127489' -> "\12467\12467" '\127490' -> "\12469" '\127504' -> "\25163" '\127505' -> "\23383" '\127506' -> "\21452" '\127507' -> "\12487" '\127508' -> "\20108" '\127509' -> "\22810" '\127510' -> "\35299" '\127511' -> "\22825" '\127512' -> "\20132" '\127513' -> "\26144" '\127514' -> "\28961" '\127515' -> "\26009" '\127516' -> "\21069" '\127517' -> "\24460" '\127518' -> "\20877" '\127519' -> "\26032" '\127520' -> "\21021" '\127521' -> "\32066" '\127522' -> "\29983" '\127523' -> "\36009" '\127524' -> "\22768" '\127525' -> "\21561" '\127526' -> "\28436" '\127527' -> "\25237" '\127528' -> "\25429" '\127529' -> "\19968" '\127530' -> "\19977" '\127531' -> "\36938" '\127532' -> "\24038" '\127533' -> "\20013" '\127534' -> "\21491" '\127535' -> "\25351" '\127536' -> "\36208" '\127537' -> "\25171" '\127538' -> "\31105" '\127539' -> "\31354" '\127540' -> "\21512" '\127541' -> "\28288" '\127542' -> "\26377" '\127543' -> "\26376" '\127544' -> "\30003" '\127545' -> "\21106" '\127546' -> "\21942" '\127547' -> "\37197" '\127552' -> "\12308\26412\12309" '\127553' -> "\12308\19977\12309" '\127554' -> "\12308\20108\12309" '\127555' -> "\12308\23433\12309" '\127556' -> "\12308\28857\12309" '\127557' -> "\12308\25171\12309" '\127558' -> "\12308\30423\12309" '\127559' -> "\12308\21213\12309" '\127560' -> "\12308\25943\12309" '\127568' -> "\24471" '\127569' -> "\21487" '\130032' -> "0" '\130033' -> "1" '\130034' -> "2" '\130035' -> "3" '\130036' -> "4" '\130037' -> "5" '\130038' -> "6" '\130039' -> "7" '\130040' -> "8" '\130041' -> "9" '\194560' -> "\20029" '\194561' -> "\20024" '\194562' -> "\20033" '\194563' -> "\131362" '\194564' -> "\20320" '\194565' -> "\20398" '\194566' -> "\20411" '\194567' -> "\20482" '\194568' -> "\20602" '\194569' -> "\20633" '\194570' -> "\20711" '\194571' -> "\20687" '\194572' -> "\13470" '\194573' -> "\132666" '\194574' -> "\20813" '\194575' -> "\20820" '\194576' -> "\20836" '\194577' -> "\20855" '\194578' -> "\132380" '\194579' -> "\13497" '\194580' -> "\20839" '\194581' -> "\20877" '\194582' -> "\132427" '\194583' -> "\20887" '\194584' -> "\20900" '\194585' -> "\20172" '\194586' -> "\20908" '\194587' -> "\20917" '\194588' -> "\168415" '\194589' -> "\20981" '\194590' -> "\20995" '\194591' -> "\13535" '\194592' -> "\21051" '\194593' -> "\21062" '\194594' -> "\21106" '\194595' -> "\21111" '\194596' -> "\13589" '\194597' -> "\21191" '\194598' -> "\21193" '\194599' -> "\21220" '\194600' -> "\21242" '\194601' -> "\21253" '\194602' -> "\21254" '\194603' -> "\21271" '\194604' -> "\21321" '\194605' -> "\21329" '\194606' -> "\21338" '\194607' -> "\21363" '\194608' -> "\21373" '\194609' -> "\21375" '\194610' -> "\21375" '\194611' -> "\21375" '\194612' -> "\133676" '\194613' -> "\28784" '\194614' -> "\21450" '\194615' -> "\21471" '\194616' -> "\133987" '\194617' -> "\21483" '\194618' -> "\21489" '\194619' -> "\21510" '\194620' -> "\21662" '\194621' -> "\21560" '\194622' -> "\21576" '\194623' -> "\21608" '\194624' -> "\21666" '\194625' -> "\21750" '\194626' -> "\21776" '\194627' -> "\21843" '\194628' -> "\21859" '\194629' -> "\21892" '\194630' -> "\21892" '\194631' -> "\21913" '\194632' -> "\21931" '\194633' -> "\21939" '\194634' -> "\21954" '\194635' -> "\22294" '\194636' -> "\22022" '\194637' -> "\22295" '\194638' -> "\22097" '\194639' -> "\22132" '\194640' -> "\20999" '\194641' -> "\22766" '\194642' -> "\22478" '\194643' -> "\22516" '\194644' -> "\22541" '\194645' -> "\22411" '\194646' -> "\22578" '\194647' -> "\22577" '\194648' -> "\22700" '\194649' -> "\136420" '\194650' -> "\22770" '\194651' -> "\22775" '\194652' -> "\22790" '\194653' -> "\22810" '\194654' -> "\22818" '\194655' -> "\22882" '\194656' -> "\136872" '\194657' -> "\136938" '\194658' -> "\23020" '\194659' -> "\23067" '\194660' -> "\23079" '\194661' -> "\23000" '\194662' -> "\23142" '\194663' -> "\14062" '\194664' -> "\14076" '\194665' -> "\23304" '\194666' -> "\23358" '\194667' -> "\23358" '\194668' -> "\137672" '\194669' -> "\23491" '\194670' -> "\23512" '\194671' -> "\23527" '\194672' -> "\23539" '\194673' -> "\138008" '\194674' -> "\23551" '\194675' -> "\23558" '\194676' -> "\24403" '\194677' -> "\23586" '\194678' -> "\14209" '\194679' -> "\23648" '\194680' -> "\23662" '\194681' -> "\23744" '\194682' -> "\23693" '\194683' -> "\138724" '\194684' -> "\23875" '\194685' -> "\138726" '\194686' -> "\23918" '\194687' -> "\23915" '\194688' -> "\23932" '\194689' -> "\24033" '\194690' -> "\24034" '\194691' -> "\14383" '\194692' -> "\24061" '\194693' -> "\24104" '\194694' -> "\24125" '\194695' -> "\24169" '\194696' -> "\14434" '\194697' -> "\139651" '\194698' -> "\14460" '\194699' -> "\24240" '\194700' -> "\24243" '\194701' -> "\24246" '\194702' -> "\24266" '\194703' -> "\172946" '\194704' -> "\24318" '\194705' -> "\140081" '\194706' -> "\140081" '\194707' -> "\33281" '\194708' -> "\24354" '\194709' -> "\24354" '\194710' -> "\14535" '\194711' -> "\144056" '\194712' -> "\156122" '\194713' -> "\24418" '\194714' -> "\24427" '\194715' -> "\14563" '\194716' -> "\24474" '\194717' -> "\24525" '\194718' -> "\24535" '\194719' -> "\24569" '\194720' -> "\24705" '\194721' -> "\14650" '\194722' -> "\14620" '\194723' -> "\24724" '\194724' -> "\141012" '\194725' -> "\24775" '\194726' -> "\24904" '\194727' -> "\24908" '\194728' -> "\24910" '\194729' -> "\24908" '\194730' -> "\24954" '\194731' -> "\24974" '\194732' -> "\25010" '\194733' -> "\24996" '\194734' -> "\25007" '\194735' -> "\25054" '\194736' -> "\25074" '\194737' -> "\25078" '\194738' -> "\25104" '\194739' -> "\25115" '\194740' -> "\25181" '\194741' -> "\25265" '\194742' -> "\25300" '\194743' -> "\25424" '\194744' -> "\142092" '\194745' -> "\25405" '\194746' -> "\25340" '\194747' -> "\25448" '\194748' -> "\25475" '\194749' -> "\25572" '\194750' -> "\142321" '\194751' -> "\25634" '\194752' -> "\25541" '\194753' -> "\25513" '\194754' -> "\14894" '\194755' -> "\25705" '\194756' -> "\25726" '\194757' -> "\25757" '\194758' -> "\25719" '\194759' -> "\14956" '\194760' -> "\25935" '\194761' -> "\25964" '\194762' -> "\143370" '\194763' -> "\26083" '\194764' -> "\26360" '\194765' -> "\26185" '\194766' -> "\15129" '\194767' -> "\26257" '\194768' -> "\15112" '\194769' -> "\15076" '\194770' -> "\20882" '\194771' -> "\20885" '\194772' -> "\26368" '\194773' -> "\26268" '\194774' -> "\32941" '\194775' -> "\17369" '\194776' -> "\26391" '\194777' -> "\26395" '\194778' -> "\26401" '\194779' -> "\26462" '\194780' -> "\26451" '\194781' -> "\144323" '\194782' -> "\15177" '\194783' -> "\26618" '\194784' -> "\26501" '\194785' -> "\26706" '\194786' -> "\26757" '\194787' -> "\144493" '\194788' -> "\26766" '\194789' -> "\26655" '\194790' -> "\26900" '\194791' -> "\15261" '\194792' -> "\26946" '\194793' -> "\27043" '\194794' -> "\27114" '\194795' -> "\27304" '\194796' -> "\145059" '\194797' -> "\27355" '\194798' -> "\15384" '\194799' -> "\27425" '\194800' -> "\145575" '\194801' -> "\27476" '\194802' -> "\15438" '\194803' -> "\27506" '\194804' -> "\27551" '\194805' -> "\27578" '\194806' -> "\27579" '\194807' -> "\146061" '\194808' -> "\138507" '\194809' -> "\146170" '\194810' -> "\27726" '\194811' -> "\146620" '\194812' -> "\27839" '\194813' -> "\27853" '\194814' -> "\27751" '\194815' -> "\27926" '\194816' -> "\27966" '\194817' -> "\28023" '\194818' -> "\27969" '\194819' -> "\28009" '\194820' -> "\28024" '\194821' -> "\28037" '\194822' -> "\146718" '\194823' -> "\27956" '\194824' -> "\28207" '\194825' -> "\28270" '\194826' -> "\15667" '\194827' -> "\28363" '\194828' -> "\28359" '\194829' -> "\147153" '\194830' -> "\28153" '\194831' -> "\28526" '\194832' -> "\147294" '\194833' -> "\147342" '\194834' -> "\28614" '\194835' -> "\28729" '\194836' -> "\28702" '\194837' -> "\28699" '\194838' -> "\15766" '\194839' -> "\28746" '\194840' -> "\28797" '\194841' -> "\28791" '\194842' -> "\28845" '\194843' -> "\132389" '\194844' -> "\28997" '\194845' -> "\148067" '\194846' -> "\29084" '\194847' -> "\148395" '\194848' -> "\29224" '\194849' -> "\29237" '\194850' -> "\29264" '\194851' -> "\149000" '\194852' -> "\29312" '\194853' -> "\29333" '\194854' -> "\149301" '\194855' -> "\149524" '\194856' -> "\29562" '\194857' -> "\29579" '\194858' -> "\16044" '\194859' -> "\29605" '\194860' -> "\16056" '\194861' -> "\16056" '\194862' -> "\29767" '\194863' -> "\29788" '\194864' -> "\29809" '\194865' -> "\29829" '\194866' -> "\29898" '\194867' -> "\16155" '\194868' -> "\29988" '\194869' -> "\150582" '\194870' -> "\30014" '\194871' -> "\150674" '\194872' -> "\30064" '\194873' -> "\139679" '\194874' -> "\30224" '\194875' -> "\151457" '\194876' -> "\151480" '\194877' -> "\151620" '\194878' -> "\16380" '\194879' -> "\16392" '\194880' -> "\30452" '\194881' -> "\151795" '\194882' -> "\151794" '\194883' -> "\151833" '\194884' -> "\151859" '\194885' -> "\30494" '\194886' -> "\30495" '\194887' -> "\30495" '\194888' -> "\30538" '\194889' -> "\16441" '\194890' -> "\30603" '\194891' -> "\16454" '\194892' -> "\16534" '\194893' -> "\152605" '\194894' -> "\30798" '\194895' -> "\30860" '\194896' -> "\30924" '\194897' -> "\16611" '\194898' -> "\153126" '\194899' -> "\31062" '\194900' -> "\153242" '\194901' -> "\153285" '\194902' -> "\31119" '\194903' -> "\31211" '\194904' -> "\16687" '\194905' -> "\31296" '\194906' -> "\31306" '\194907' -> "\31311" '\194908' -> "\153980" '\194909' -> "\154279" '\194910' -> "\154279" '\194911' -> "\31470" '\194912' -> "\16898" '\194913' -> "\154539" '\194914' -> "\31686" '\194915' -> "\31689" '\194916' -> "\16935" '\194917' -> "\154752" '\194918' -> "\31954" '\194919' -> "\17056" '\194920' -> "\31976" '\194921' -> "\31971" '\194922' -> "\32000" '\194923' -> "\155526" '\194924' -> "\32099" '\194925' -> "\17153" '\194926' -> "\32199" '\194927' -> "\32258" '\194928' -> "\32325" '\194929' -> "\17204" '\194930' -> "\156200" '\194931' -> "\156231" '\194932' -> "\17241" '\194933' -> "\156377" '\194934' -> "\32634" '\194935' -> "\156478" '\194936' -> "\32661" '\194937' -> "\32762" '\194938' -> "\32773" '\194939' -> "\156890" '\194940' -> "\156963" '\194941' -> "\32864" '\194942' -> "\157096" '\194943' -> "\32880" '\194944' -> "\144223" '\194945' -> "\17365" '\194946' -> "\32946" '\194947' -> "\33027" '\194948' -> "\17419" '\194949' -> "\33086" '\194950' -> "\23221" '\194951' -> "\157607" '\194952' -> "\157621" '\194953' -> "\144275" '\194954' -> "\144284" '\194955' -> "\33281" '\194956' -> "\33284" '\194957' -> "\36766" '\194958' -> "\17515" '\194959' -> "\33425" '\194960' -> "\33419" '\194961' -> "\33437" '\194962' -> "\21171" '\194963' -> "\33457" '\194964' -> "\33459" '\194965' -> "\33469" '\194966' -> "\33510" '\194967' -> "\158524" '\194968' -> "\33509" '\194969' -> "\33565" '\194970' -> "\33635" '\194971' -> "\33709" '\194972' -> "\33571" '\194973' -> "\33725" '\194974' -> "\33767" '\194975' -> "\33879" '\194976' -> "\33619" '\194977' -> "\33738" '\194978' -> "\33740" '\194979' -> "\33756" '\194980' -> "\158774" '\194981' -> "\159083" '\194982' -> "\158933" '\194983' -> "\17707" '\194984' -> "\34033" '\194985' -> "\34035" '\194986' -> "\34070" '\194987' -> "\160714" '\194988' -> "\34148" '\194989' -> "\159532" '\194990' -> "\17757" '\194991' -> "\17761" '\194992' -> "\159665" '\194993' -> "\159954" '\194994' -> "\17771" '\194995' -> "\34384" '\194996' -> "\34396" '\194997' -> "\34407" '\194998' -> "\34409" '\194999' -> "\34473" '\195000' -> "\34440" '\195001' -> "\34574" '\195002' -> "\34530" '\195003' -> "\34681" '\195004' -> "\34600" '\195005' -> "\34667" '\195006' -> "\34694" '\195007' -> "\17879" '\195008' -> "\34785" '\195009' -> "\34817" '\195010' -> "\17913" '\195011' -> "\34912" '\195012' -> "\34915" '\195013' -> "\161383" '\195014' -> "\35031" '\195015' -> "\35038" '\195016' -> "\17973" '\195017' -> "\35066" '\195018' -> "\13499" '\195019' -> "\161966" '\195020' -> "\162150" '\195021' -> "\18110" '\195022' -> "\18119" '\195023' -> "\35488" '\195024' -> "\35565" '\195025' -> "\35722" '\195026' -> "\35925" '\195027' -> "\162984" '\195028' -> "\36011" '\195029' -> "\36033" '\195030' -> "\36123" '\195031' -> "\36215" '\195032' -> "\163631" '\195033' -> "\133124" '\195034' -> "\36299" '\195035' -> "\36284" '\195036' -> "\36336" '\195037' -> "\133342" '\195038' -> "\36564" '\195039' -> "\36664" '\195040' -> "\165330" '\195041' -> "\165357" '\195042' -> "\37012" '\195043' -> "\37105" '\195044' -> "\37137" '\195045' -> "\165678" '\195046' -> "\37147" '\195047' -> "\37432" '\195048' -> "\37591" '\195049' -> "\37592" '\195050' -> "\37500" '\195051' -> "\37881" '\195052' -> "\37909" '\195053' -> "\166906" '\195054' -> "\38283" '\195055' -> "\18837" '\195056' -> "\38327" '\195057' -> "\167287" '\195058' -> "\18918" '\195059' -> "\38595" '\195060' -> "\23986" '\195061' -> "\38691" '\195062' -> "\168261" '\195063' -> "\168474" '\195064' -> "\19054" '\195065' -> "\19062" '\195066' -> "\38880" '\195067' -> "\168970" '\195068' -> "\19122" '\195069' -> "\169110" '\195070' -> "\38923" '\195071' -> "\38923" '\195072' -> "\38953" '\195073' -> "\169398" '\195074' -> "\39138" '\195075' -> "\19251" '\195076' -> "\39209" '\195077' -> "\39335" '\195078' -> "\39362" '\195079' -> "\39422" '\195080' -> "\19406" '\195081' -> "\170800" '\195082' -> "\39698" '\195083' -> "\40000" '\195084' -> "\40189" '\195085' -> "\19662" '\195086' -> "\19693" '\195087' -> "\40295" '\195088' -> "\172238" '\195089' -> "\19704" '\195090' -> "\172293" '\195091' -> "\172558" '\195092' -> "\172689" '\195093' -> "\40635" '\195094' -> "\19798" '\195095' -> "\40697" '\195096' -> "\40702" '\195097' -> "\40709" '\195098' -> "\40719" '\195099' -> "\40726" '\195100' -> "\40763" '\195101' -> "\173568" c -> [c] unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/GeneralCategory.hs0000644000000000000000000013217707346545000024632 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.GeneralCategory -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE PatternSynonyms #-} module Unicode.Internal.Char.UnicodeData.GeneralCategory ( -- * Lookup functions generalCategory , generalCategoryPlanes0To3 -- * General categories , pattern UppercaseLetter , pattern LowercaseLetter , pattern TitlecaseLetter , pattern ModifierLetter , pattern OtherLetter , pattern NonSpacingMark , pattern SpacingCombiningMark , pattern EnclosingMark , pattern DecimalNumber , pattern LetterNumber , pattern OtherNumber , pattern ConnectorPunctuation , pattern DashPunctuation , pattern OpenPunctuation , pattern ClosePunctuation , pattern InitialQuote , pattern FinalQuote , pattern OtherPunctuation , pattern MathSymbol , pattern CurrencySymbol , pattern ModifierSymbol , pattern OtherSymbol , pattern Space , pattern LineSeparator , pattern ParagraphSeparator , pattern Control , pattern Format , pattern Surrogate , pattern PrivateUse , pattern NotAssigned -- * Characters bounds for predicates , pattern MaxIsLetter , pattern MaxIsAlphaNum , pattern MaxIsLower , pattern MaxIsUpper , pattern MaxIsNumber , pattern MaxIsSpace , pattern MaxIsSeparator ) where import Data.Bits (Bits(..)) import Data.Char (ord) import Data.Int (Int8) import Data.Word (Word16) import GHC.Exts (Ptr(..)) import Unicode.Internal.Bits (lookupWord16AsInt, lookupWord8AsInt) -------------------------------------------------------------------------------- -- General category patterns -------------------------------------------------------------------------------- -- | General category Lu pattern UppercaseLetter :: Int pattern UppercaseLetter = 0 -- | General category Ll pattern LowercaseLetter :: Int pattern LowercaseLetter = 1 -- | General category Lt pattern TitlecaseLetter :: Int pattern TitlecaseLetter = 2 -- | General category Lm pattern ModifierLetter :: Int pattern ModifierLetter = 3 -- | General category Lo pattern OtherLetter :: Int pattern OtherLetter = 4 -- | General category Mn pattern NonSpacingMark :: Int pattern NonSpacingMark = 5 -- | General category Mc pattern SpacingCombiningMark :: Int pattern SpacingCombiningMark = 6 -- | General category Me pattern EnclosingMark :: Int pattern EnclosingMark = 7 -- | General category Nd pattern DecimalNumber :: Int pattern DecimalNumber = 8 -- | General category Nl pattern LetterNumber :: Int pattern LetterNumber = 9 -- | General category No pattern OtherNumber :: Int pattern OtherNumber = 10 -- | General category Pc pattern ConnectorPunctuation :: Int pattern ConnectorPunctuation = 11 -- | General category Pd pattern DashPunctuation :: Int pattern DashPunctuation = 12 -- | General category Ps pattern OpenPunctuation :: Int pattern OpenPunctuation = 13 -- | General category Pe pattern ClosePunctuation :: Int pattern ClosePunctuation = 14 -- | General category Pi pattern InitialQuote :: Int pattern InitialQuote = 15 -- | General category Pf pattern FinalQuote :: Int pattern FinalQuote = 16 -- | General category Po pattern OtherPunctuation :: Int pattern OtherPunctuation = 17 -- | General category Sm pattern MathSymbol :: Int pattern MathSymbol = 18 -- | General category Sc pattern CurrencySymbol :: Int pattern CurrencySymbol = 19 -- | General category Sk pattern ModifierSymbol :: Int pattern ModifierSymbol = 20 -- | General category So pattern OtherSymbol :: Int pattern OtherSymbol = 21 -- | General category Zs pattern Space :: Int pattern Space = 22 -- | General category Zl pattern LineSeparator :: Int pattern LineSeparator = 23 -- | General category Zp pattern ParagraphSeparator :: Int pattern ParagraphSeparator = 24 -- | General category Cc pattern Control :: Int pattern Control = 25 -- | General category Cf pattern Format :: Int pattern Format = 26 -- | General category Cs pattern Surrogate :: Int pattern Surrogate = 27 -- | General category Co pattern PrivateUse :: Int pattern PrivateUse = 28 -- | General category Cn pattern NotAssigned :: Int pattern NotAssigned = 29 -------------------------------------------------------------------------------- -- Characters bounds for predicates -------------------------------------------------------------------------------- -- | Maximum codepoint satisfying @isLetter@ pattern MaxIsLetter :: Int pattern MaxIsLetter = 0x323AF -- | Maximum codepoint satisfying @isAlphaNum@ pattern MaxIsAlphaNum :: Int pattern MaxIsAlphaNum = 0x323AF -- | Maximum codepoint satisfying @isLower@ pattern MaxIsLower :: Int pattern MaxIsLower = 0x1E943 -- | Maximum codepoint satisfying @isUpper@ pattern MaxIsUpper :: Int pattern MaxIsUpper = 0x1E921 -- | Maximum codepoint satisfying @isNumber@ pattern MaxIsNumber :: Int pattern MaxIsNumber = 0x1FBF9 -- | Maximum codepoint satisfying @isSpace@ pattern MaxIsSpace :: Int pattern MaxIsSpace = 0x3000 -- | Maximum codepoint satisfying @isSeparator@ pattern MaxIsSeparator :: Int pattern MaxIsSeparator = 0x3000 -------------------------------------------------------------------------------- -- Lookup functions -------------------------------------------------------------------------------- -- | Return the general category of a code point in planes 0 to 3 -- -- The caller of this function must ensure its parameter is \< @0x40000@. {-# INLINE generalCategoryPlanes0To3 #-} generalCategoryPlanes0To3 :: Int -> Int generalCategoryPlanes0To3 = lookupGeneralCategoryBitMap -- | Return the general category of a character {-# INLINE generalCategory #-} generalCategory :: Char -> Int generalCategory c -- Planes 0-3 | cp < 0x323B0 = lookupGeneralCategoryBitMap cp -- Planes 4-13: Cn | cp < 0xE0000 = NotAssigned -- Plane 14 | cp < 0xE01F0 = lookupGeneralCategoryBitMap (cp - 0xADC50) -- Plane 14: Cn | cp < 0xF0000 = NotAssigned -- Plane 15: Co | cp < 0xFFFFE = PrivateUse -- Plane 15: Cn | cp < 0x100000 = NotAssigned -- Plane 16: Co | cp < 0x10FFFE = PrivateUse -- Default: Cn | otherwise = NotAssigned where cp = ord c {-# INLINE lookupGeneralCategoryBitMap #-} lookupGeneralCategoryBitMap :: Int -> Int lookupGeneralCategoryBitMap n = lookupWord8AsInt data# ( lookupWord16AsInt offsets1# ( lookupWord16AsInt offsets2# ( n `shiftR` 8 ) + ((n `shiftR` 3) .&. maskOffsets) ) + (n .&. maskData) ) where maskData = (1 `shiftL` 3) - 1 maskOffsets = (1 `shiftL` 5) - 1 !(Ptr data#) = generalCategoryDataBitMap !(Ptr offsets1#) = generalCategoryOffsets1BitMap !(Ptr offsets2#) = generalCategoryOffsets2BitMap generalCategoryDataBitMap :: Ptr Int8 generalCategoryDataBitMap = Ptr "\1\0\0\1\0\1\0\0\0\0\0\1\0\1\0\1\1\0\1\1\0\1\0\0\0\1\1\0\0\0\1\1\1\13\18\14\18\13\14\17\17\17\17\17\3\3\3\3\29\3\ \\3\29\3\3\3\3\3\3\29\3\3\3\3\3\3\17\17\4\3\3\6\5\29\20\1\1\1\1\1\1\1\1\18\1\1\1\1\4\1\1\1\1\1\3\3\0\0\0\0\2\ \\20\1\20\21\4\15\18\26\21\20\10\4\16\10\10\10\17\0\0\0\0\0\0\0\0\18\1\1\1\1\1\1\29\29\1\1\1\29\1\1\29\29\29\10\10\10\10\10\10\10\ \\21\10\10\10\10\10\10\10\17\19\17\17\29\29\29\29\4\4\4\4\4\5\3\4\4\4\17\3\3\3\4\1\21\21\1\1\0\0\1\1\0\0\0\1\0\1\0\1\0\1\ \\0\0\0\0\1\4\4\4\17\17\29\29\29\29\29\5\29\29\29\29\6\29\6\6\6\5\29\29\7\7\0\1\0\1\0\1\1\1\0\1\0\1\0\1\0\1\1\1\1\1\ \\0\29\0\0\0\0\29\20\20\20\0\0\0\0\0\29\0\29\0\0\0\0\29\0\0\0\0\29\29\0\0\0\0\0\0\0\29\0\0\0\0\0\0\29\29\29\29\29\29\8\ \\8\17\17\17\17\4\4\5\6\5\4\6\6\6\6\6\5\4\6\5\5\6\6\5\5\29\4\4\4\29\29\29\29\5\5\5\5\5\3\3\5\5\5\5\3\3\21\17\10\10\ \\10\10\10\10\10\10\4\4\5\5\5\6\29\29\5\6\4\5\5\5\5\17\17\17\3\4\4\4\4\4\4\4\3\5\5\5\5\5\5\5\6\5\5\5\4\4\4\4\5\4\ \\4\6\6\29\29\5\5\6\5\4\5\5\5\4\4\5\5\4\29\29\29\29\29\3\3\3\0\1\4\4\5\5\6\17\17\29\18\17\17\19\17\17\21\21\17\17\17\13\14\13\ \\14\18\18\18\18\18\18\18\18\13\14\18\18\18\18\21\21\21\21\21\6\6\5\5\5\5\29\29\6\5\5\17\29\29\29\29\12\13\14\13\14\13\14\17\29\29\29\29\29\29\ \\29\3\1\1\1\17\0\23\24\26\26\26\26\26\22\17\19\19\19\19\21\17\17\29\29\29\29\29\29\29\5\5\6\6\6\6\29\5\5\6\29\4\4\4\29\4\4\4\4\17\ \\4\5\5\5\29\29\17\29\0\1\0\1\3\20\0\1\0\1\3\3\5\5\21\21\21\21\21\21\5\21\21\17\9\9\9\9\9\29\29\4\4\4\4\3\17\17\17\19\29\29\ \\29\29\29\29\29\21\21\21\21\21\21\21\18\18\18\18\18\0\1\1\21\18\21\21\1\21\19\21\29\29\29\29\29\29\0\0\0\0\0\29\1\1\1\1\1\1\3\3\3\3\ \\3\3\3\3\20\20\20\20\20\20\20\20\3\20\3\20\20\0\1\0\1\4\4\5\5\29\29\29\29\0\1\0\1\0\1\4\5\4\29\29\29\29\29\29\5\5\5\5\5\5\ \\5\12\5\5\5\5\5\4\29\29\6\17\17\17\17\17\17\17\17\29\26\5\6\6\6\29\29\29\29\4\5\5\5\5\5\5\5\3\5\5\5\5\5\29\29\5\5\5\29\29\ \\4\4\4\4\4\4\29\17\17\17\19\17\17\17\19\4\5\29\29\29\29\29\29\5\29\5\5\29\5\5\20\20\3\3\4\4\4\4\4\4\21\13\14\21\21\21\21\21\18\18\ \\18\18\21\21\29\5\5\5\6\6\5\6\5\5\5\5\5\29\5\6\6\29\4\4\4\5\6\6\5\5\6\4\4\4\4\4\6\6\6\6\6\6\6\6\29\6\6\5\5\29\ \\29\29\29\5\4\29\4\4\4\4\29\4\4\29\4\4\4\4\4\4\4\4\29\4\4\4\4\29\29\29\29\4\4\29\4\29\4\4\29\4\4\29\4\29\29\4\29\29\29\29\ \\4\4\6\29\29\29\29\20\4\4\4\4\4\4\29\29\29\29\29\29\29\29\6\6\29\29\6\6\5\4\29\5\5\29\29\29\29\1\1\29\1\29\1\1\1\17\3\1\1\1\ \\20\3\3\3\3\1\1\1\1\1\1\1\0\1\18\0\0\0\0\0\21\21\0\21\21\21\21\0\4\4\4\4\4\29\29\26\26\26\26\26\26\18\18\18\18\18\21\21\18\21\ \\21\18\21\18\21\21\21\21\21\21\21\18\21\21\21\5\5\5\5\5\26\21\5\5\6\6\29\29\29\29\15\16\13\15\15\16\13\15\16\13\14\13\14\13\14\13\14\13\14\10\ \\10\18\18\18\13\14\29\4\4\4\4\5\6\29\29\3\17\17\17\17\17\17\21\21\21\21\21\21\21\21\29\29\29\29\29\29\29\17\17\17\17\17\17\17\3\29\29\5\19\19\ \\18\20\21\19\19\29\1\18\1\1\1\1\1\1\0\0\0\0\0\0\0\1\1\1\1\1\1\29\1\1\1\1\1\0\0\29\0\29\0\29\0\29\0\4\4\4\29\29\29\4\ \\4\5\5\17\17\8\8\4\4\4\4\4\29\4\4\29\29\5\4\5\5\5\5\4\4\4\4\4\4\5\6\5\5\5\5\5\5\5\5\21\21\21\21\0\21\0\21\0\0\0\ \\0\21\1\17\12\29\29\21\21\19\10\10\10\10\29\29\29\1\3\20\20\29\29\29\29\4\29\4\29\4\29\4\4\4\4\29\4\29\4\29\29\29\29\20\20\0\17\12\3\3\ \\3\3\3\21\21\18\10\10\20\1\17\17\18\12\18\18\18\29\29\29\29\29\29\21\21\10\10\10\10\21\21\10\10\21\21\21\29\5\5\5\5\5\5\5\29\8\8\29\10\10\ \\10\10\10\10\8\8\29\29\29\4\4\4\29\29\29\4\29\29\4\4\4\4\4\29\29\4\29\29\29\29\29\29\6\0\1\29\1\29\1\0\1\29\29\29\29\29\29\29\4\4\ \\29\29\29\29\6\6\17\29\29\29\12\4\4\4\4\4\4\4\21\17\4\4\4\4\4\4\14\13\22\4\4\4\4\4\4\4\21\17\4\4\9\29\29\29\29\29\22\17\17\17\ \\21\3\4\9\4\4\4\4\4\4\4\6\6\6\5\5\5\5\6\5\6\6\6\6\5\5\5\5\5\6\6\6\6\5\6\6\6\6\6\29\5\6\6\29\29\29\6\6\6\6\ \\5\5\29\29\22\22\22\22\22\22\22\22\26\26\26\26\26\26\26\26\29\26\26\26\21\21\29\29\29\17\17\8\8\17\17\29\29\29\29\18\18\18\18\18\18\13\14\13\14\13\ \\14\12\29\29\0\0\0\0\0\20\20\20\0\1\0\1\0\1\0\0\1\22\17\17\17\19\17\17\17\4\17\4\4\5\4\4\4\5\4\4\4\4\4\4\4\5\5\5\5\5\ \\5\5\17\3\4\4\29\29\5\4\6\6\6\26\26\26\26\26\29\29\29\29\29\29\1\1\1\1\1\1\1\29\29\29\29\29\5\5\29\6\6\5\6\5\5\4\4\17\4\5\ \\5\5\29\5\5\29\4\18\4\4\4\4\4\4\29\4\29\29\29\4\4\3\17\17\17\17\17\17\17\13\4\4\4\4\4\29\29\10\21\4\4\4\4\4\4\4\10\10\10\10\ \\29\29\29\17\17\17\17\29\29\29\8\8\10\10\17\17\17\21\4\4\4\4\4\4\4\5\5\29\29\8\8\6\6\6\5\21\21\5\5\5\17\26\17\17\17\5\29\29\29\29\ \\29\26\29\29\29\29\29\29\1\29\29\5\5\5\5\5\5\4\5\4\4\5\5\5\5\5\5\6\4\4\4\4\17\17\17\17\17\29\29\29\29\29\0\29\29\0\0\29\4\4\ \\29\5\5\12\29\29\6\5\5\5\5\5\5\6\6\4\4\4\4\19\21\21\21\21\21\21\21\19\19\19\19\19\19\19\19\4\4\29\29\5\4\6\5\5\5\5\6\6\6\5\ \\4\4\4\29\29\5\5\5\21\21\5\5\5\5\21\21\21\6\6\6\6\6\6\4\4\4\4\4\4\9\9\9\9\9\9\9\29\4\5\5\5\5\5\5\29\21\21\1\0\0\ \\0\1\1\4\0\1\1\1\0\0\1\0\0\1\0\0\0\0\2\20\20\29\8\8\10\10\10\10\10\10\21\5\21\5\5\5\5\4\4\4\5\17\29\8\8\4\4\4\4\4\ \\4\3\4\4\4\4\4\5\5\4\6\6\6\4\4\6\6\6\6\6\29\29\6\6\5\29\29\12\12\12\12\12\12\17\17\18\17\11\17\17\17\18\13\14\17\18\17\12\17\17\ \\17\29\17\17\17\17\4\6\6\4\6\5\17\17\17\29\8\8\10\29\29\29\21\21\10\10\10\10\10\10\21\21\21\21\21\21\21\29\21\21\21\21\21\17\17\29\13\14\21\21\ \\13\14\13\14\12\13\14\14\17\17\17\17\11\11\11\5\10\10\10\10\10\10\10\29\29\29\29\29\29\29\10\10\4\4\29\29\5\29\6\6\6\6\5\5\6\5\5\5\5\29\ \\6\6\4\4\4\17\17\17\9\9\5\5\5\5\6\6\6\6\29\29\6\6\6\29\29\29\29\29\29\4\4\4\6\6\5\5\6\6\5\5\4\4\4\4\5\5\6\5\5\6\ \\5\5\29\5\5\29\5\5\5\5\29\29\29\29\19\5\5\4\6\4\4\4\4\6\6\5\5\5\29\5\29\0\0\0\0\0\0\0\0\13\17\14\20\11\1\1\1\1\1\1\ \\1\1\13\18\14\18\25\25\25\25\25\25\25\25\8\8\29\29\4\4\4\4\0\2\1\0\2\1\0\1\0\0\0\1\21\0\21\21\4\5\6\6\29\4\4\4\4\4\29\29\ \\4\4\4\4\4\10\10\17\6\29\6\6\6\5\4\21\21\21\17\17\17\17\21\17\21\21\21\21\29\29\21\21\22\4\4\4\4\4\4\4\13\14\29\29\29\4\5\6\6\17\ \\4\4\4\5\6\5\6\6\5\5\5\5\5\6\6\6\5\6\5\17\17\17\17\17\17\29\29\29\29\10\12\17\13\17\17\17\17\17\18\17\11\17\17\17\17\17\17\17\22\5\ \\5\5\5\5\5\7\5\7\7\7\5\5\5\5\5\7\7\7\17\5\5\5\5\17\6\5\5\5\29\29\29\29\29\8\8\29\29\29\29\4\21\9\9\9\9\9\9\9\9\0\ \\1\9\9\9\3\4\17\21\21\0\1\0\1\1\21\21\21\0\1\0\1\5\10\10\10\10\17\17\17\0\1\21\5\5\5\5\5\5\17\17\17\17\17\17\17\12\17\15\16\17\ \\17\17\17\11\6\6\6\6\6\6\5\6\6\4\4\4\6\6\5\6\6\17\6\5\29\29\29\29\29\29\29\4\4\20\20\20\20\20\20\29\29\29\29\29\4\5\4\17\4\6\ \\29\29\29\9\9\9\9\9\10\10\10\10\29\29\29\21\3\29\3\3\3\3\3\3\29\29\29\29\29\4\4\4\4\4\29\3\29\5\5\4\6\4\4\4\4\5\5\6\6\17\ \\26\26\26\5\5\5\5\5\21\21\5\5\5\21\29\29\8\8\17\17\17\17\17\17\17\5\5\5\26\5\5\5\5\5\21\21\21\21\21\5\21\21\1\1\1\1\5\5\5\5\ \\3\29\29\29\29\5\5\5\5\5\5\29\29\29\29\5\29\29\29\29\29\29\21\21\21\21\20\20\20\20\20\8\8\8\8\8\8\8\8\17\17\18\18\18\17\3\3\20\20\20\ \\20\3\3\20\20\20\20\20\20\4\4\19\19\10\10\10\10\21\19\4\17\5\29\21\4\10\10\10\10\10\10\21\5\21\5\13\14\13\14\6\6\3\3\1\4\4\4\4\4\6\ \\5\6\6\5\29\29\17\17\17\17\10\17\17\17\17\17\17\5\4\4\4\5\17\17\4\29\8\8\4\4\4\21\21\4\6\5\6\4\4\4\4\4\6\5\6\5\6\6\5\5\ \\5\6\5\4\4\29\29\21\5\5\17\17\17\4\29\29\29\0\0\0\0\2\20\20\20\1\1\1\29\1\1\10\3\29\29\10\10\10\10\18\18\18\13\14\3\18\18\18\18\18\ \\21\21\21\18\18\21\21\21\21\21\21\5\29\29\29\8\8\29\29\29\29\17\17\15\16\17\15\16\17\17\15\16\15\16\17\17\8\8\29\29\17\17\17\17\15\16\17\15\16\17\ \\17\17\17\17\17\17\12\12\17\17\17\17\17\17\29\3\8\8\4\17\4\17\17\17\12\12\11\11\13\14\13\14\13\14\17\17\13\14\17\13\14\17\17\4\4\4\4\4\4\3\ \\3\3\3\17\21\29\29\5\6\29\6\6\5\29\29\5\5\5\5\5\17\5\5\5\5\6\6\5\5\17\17\26\17\17\5\29\29\29\29\29\10\10\29\4\4\4\4\4\6\5\ \\5\6\6\5\5\6\6\29\4\4\4\29\5\5\4\6\6\8\8\17\17\29\17\5\4\4\4\4\4\5\5\5\5\17\17\17\4\17\17\17\29\29\29\29\29\4\4\4\4\6\ \\6\5\5\5\29\29\29\6\6\5\5\5\3\3\3\3\3\17\3\5\29\29\29\1\18\1\1\1\1\1\1\0\1\29\29\8\8\4\4\29\29\29\29\29\17\8\8\29\29\29\ \\29\29\29\21\21\21\20\20\20\20\20\8\8\17\17\18\18\18\17\0\0\0\0\0\0\0\29\0\0\29\1\17\5\5\17\5\5\17\5\5\5\5\5\5\12\5\5\5\5\5\ \\17\29\29\9\9\9\0\1\9\9\9\10\21\21\29\29\29\29\13\14\13\14\21\21\21\21\0\1\0\1\5\5\0\1\29\29\29\29\5\5\6\6\29\4\4\4\17\29\29\29\ \\29\29\29\2\2\2\2\2\2\2\2\27\27\27\27\27\27\27\27\28\28\28\28\28\28\28\28\4\4\4\4\4\4\5\29\8\8\29\29\29\29\29\19"# generalCategoryOffsets1BitMap :: Ptr Word16 generalCategoryOffsets1BitMap = Ptr "\8\6\146\4\96\3\96\3\96\3\96\3\6\6\108\1\214\9\146\3\184\6\134\1\96\3\96\3\96\3\96\3\96\3\7\6\127\1\115\11\198\6\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\145\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\54\0\44\0\26\8\96\3\96\3\96\3\96\3\96\3\95\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\97\3\249\4\48\4\96\3\96\3\96\3\96\3\48\4\48\4\48\4\48\4\52\4\86\2\96\3\96\3\104\7\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\50\4\146\3\146\3\146\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\50\4\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\103\3\97\3\103\3\ \\96\3\96\3\96\3\96\3\96\3\103\3\96\3\96\3\96\3\96\3\103\3\97\3\103\3\96\3\97\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\146\3\146\3\146\3\146\3\80\5\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\188\9\237\1\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\142\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\97\3\88\3\96\3\97\3\34\5\88\3\96\3\96\3\96\3\70\3\146\1\166\7\146\3\21\10\179\11\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\236\2\96\3\96\3\96\3\96\3\130\5\16\2\141\9\146\3\146\3\146\3\96\3\100\3\96\3\ \\96\3\97\3\96\3\96\3\89\3\96\3\140\3\96\3\140\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\143\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\164\6\146\3\146\3\146\3\182\5\182\5\182\5\182\5\182\5\182\5\96\3\96\3\96\3\140\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\146\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\83\5\96\3\96\3\98\5\96\3\96\3\189\8\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\4\8\123\5\145\3\96\3\96\3\96\3\97\3\146\5\209\2\151\5\20\9\195\5\21\10\96\3\96\3\96\3\140\3\141\3\146\3\96\3\96\3\96\3\96\3\96\3\142\3\96\3\ \\96\3\96\3\144\3\21\10\174\7\48\4\48\4\48\4\48\4\48\4\48\4\195\1\195\1\223\3\185\10\48\4\48\4\48\4\48\4\176\8\48\4\48\4\48\4\189\7\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\236\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\236\3\48\4\234\3\48\4\48\4\48\4\48\4\48\4\48\4\195\1\199\2\9\2\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\207\0\146\3\96\3\96\3\96\3\96\3\96\3\96\3\182\5\182\5\148\4\157\4\251\9\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\207\0\146\3\96\3\96\3\96\3\96\3\143\3\146\3\43\5\146\3\146\3\146\3\40\5\146\3\171\9\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\142\3\146\3\96\3\96\3\97\3\172\9\96\3\96\3\96\3\96\3\96\3\142\3\96\3\96\3\96\3\96\3\96\3\141\3\218\2\164\9\21\10\29\9\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\96\3\96\3\96\3\55\12\146\3\146\3\96\3\96\3\96\3\96\3\96\3\5\6\21\10\63\12\96\3\96\3\104\7\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\141\3\ \\48\4\48\4\48\4\48\4\48\4\48\4\49\4\146\3\96\3\96\3\96\3\96\3\96\3\59\0\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\7\196\6\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\141\3\96\3\96\3\96\3\96\3\96\3\96\3\145\3\146\3\223\7\92\1\92\1\227\7\117\0\117\0\117\0\117\0\95\4\74\0\74\0\74\0\238\9\243\9\21\10\205\10\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\142\0\92\1\92\1\92\1\92\1\92\1\92\1\146\0\185\4\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\124\5\214\1\246\7\83\9\199\2\199\2\ \\135\6\146\3\146\3\146\3\146\3\142\0\92\1\92\1\92\1\92\1\144\0\92\1\225\7\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\142\0\92\1\92\1\92\1\92\1\92\1\92\1\146\0\185\4\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\123\1\21\10\179\11\48\4\48\4\48\4\49\4\92\1\186\7\48\4\48\4\48\4\92\1\150\0\92\1\48\4\48\4\48\4\48\4\92\1\186\7\48\4\48\4\48\4\48\4\ \\150\0\92\1\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\236\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\17\4\19\4\92\1\92\1\92\1\184\7\48\4\48\4\48\4\48\4\48\4\198\1\195\1\195\1\195\1\197\1\ \\17\4\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\212\5\16\4\16\4\194\1\195\1\195\1\195\1\195\1\195\1\195\1\195\1\191\1\195\1\195\1\195\1\199\1\48\4\ \\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\17\4\19\4\92\1\92\1\92\1\184\7\48\4\48\4\48\4\48\4\48\4\198\1\195\1\195\1\195\1\197\1\17\4\195\1\195\1\ \\105\4\18\1\25\1\122\2\74\0\74\0\74\0\14\1\4\1\21\1\126\2\74\0\74\0\86\4\117\0\117\0\91\4\74\0\74\0\74\0\117\0\117\0\117\0\95\4\74\0\74\0\86\4\117\0\117\0\91\4\74\0\74\0\74\0\117\0\117\0\117\0\95\4\74\0\74\0\126\0\117\0\117\0\117\0\124\0\74\0\74\0\79\0\88\4\117\0\117\0\ \\122\0\96\3\96\3\96\3\96\3\5\6\146\3\21\10\179\11\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\92\1\92\1\92\1\224\7\96\3\96\3\96\3\96\3\96\3\212\6\144\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\177\2\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\145\3\146\3\96\3\96\3\3\6\223\2\221\2\225\2\199\2\200\2\96\3\96\3\96\3\38\2\96\3\143\3\96\3\96\3\96\3\139\3\30\6\157\4\96\3\96\3\96\3\96\3\96\3\125\1\157\4\157\4\222\9\157\4\157\4\157\4\157\4\157\4\251\9\157\4\157\4\7\5\146\3\48\4\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\52\4\146\3\146\3\146\3\146\3\146\3\146\3\146\3\182\5\182\5\182\5\182\5\182\5\182\5\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\ \\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\46\2\243\1\215\4\6\1\89\4\117\0\28\1\93\4\74\0\74\0\74\0\187\3\25\0\192\0\192\0\192\0\190\3\185\0\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\9\37\7\196\6\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\142\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\9\6\44\4\33\11\146\3\21\10\15\5\74\11\96\3\96\3\26\8\96\3\96\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\117\0\74\0\74\0\74\0\74\0\92\1\92\1\151\0\198\6\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\140\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\142\3\56\4\117\0\27\1\117\0\27\1\207\11\74\0\101\4\74\0\101\4\135\0\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\117\0\117\0\117\0\74\0\74\0\74\0\74\0\74\0\74\0\192\0\192\0\192\0\192\0\75\9\228\0\192\0\192\0\192\0\ \\192\0\192\0\192\0\191\0\239\0\192\0\192\0\192\0\192\0\192\0\192\0\22\1\117\0\117\0\117\0\23\1\40\4\74\0\74\0\74\0\74\0\74\0\178\4\181\2\157\4\157\4\157\4\157\4\183\2\215\11\146\3\96\3\96\3\96\3\106\3\205\0\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\164\6\146\3\146\3\146\3\182\5\182\5\182\5\182\5\182\5\182\5\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\158\4\244\3\157\4\157\4\157\4\ \\157\4\157\4\160\4\61\2\48\4\62\2\197\6\146\3\179\2\181\2\157\4\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\38\6\146\3\35\6\135\9\96\3\70\6\97\3\73\6\90\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\127\9\142\2\132\9\146\3\172\9\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\144\3\146\3\146\3\146\3\146\3\38\6\146\3\35\6\135\9\96\3\70\6\97\3\73\6\90\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\96\3\127\9\142\2\132\9\146\3\172\9\96\3\96\3\96\3\96\3\96\3\96\3\96\3\90\5\48\4\48\4\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\236\2\96\3\96\3\96\3\96\3\96\3\96\3\86\2\146\3\146\3\146\3\146\3\96\3\229\6\48\4\252\11\48\4\48\4\193\10\22\3\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\48\4\48\4\239\3\48\4\48\4\48\4\97\2\195\1\195\1\205\1\48\4\48\4\48\4\48\4\96\2\193\10\48\4\48\4\48\4\48\4\49\4\146\3\146\3\146\3\48\4\53\4\146\3\146\3\92\1\92\1\92\1\92\1\92\1\92\1\92\1\184\7\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\180\7\92\1\92\1\ \\96\3\96\3\104\6\110\6\96\3\96\3\96\3\171\11\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\234\7\92\1\92\1\141\0\92\1\92\1\92\1\92\1\92\1\183\7\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\50\4\146\3\146\3\146\3\146\3\146\3\146\3\243\4\48\4\48\4\48\4\48\4\48\4\52\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\52\4\146\3\48\4\49\4\92\2\48\4\92\2\48\4\92\2\48\4\48\4\48\4\50\4\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\ \\96\3\143\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\145\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\240\0\188\3\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\193\0\193\0\236\0\ \\192\0\192\0\192\0\192\0\192\0\9\0\0\0\21\0\66\7\62\7\194\0\16\0\189\0\58\7\120\8\125\8\193\0\11\0\192\0\192\0\126\8\192\0\192\0\192\0\192\0\192\0\192\0\242\0\64\7\197\0\192\0\74\0\74\0\74\0\74\0\74\0\74\0\74\0\74\0\83\0\74\0\74\0\74\0\134\2\134\2\35\10\134\2\140\2\142\2\137\2\ \\146\2\142\2\142\2\143\2\134\2\230\5\192\0\236\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\186\3\233\5\192\0\152\2\232\0\192\0\192\0\4\0\6\0\192\0\196\0\58\5\53\5\59\5\146\3\146\3\165\1\81\10\96\3\96\3\96\3\105\6\93\1\146\3\96\3\96\3\3\6\157\4\67\9\9\2\146\3\146\3\96\3\96\3\111\11\ \\9\2\146\3\146\3\146\3\146\3\96\3\96\3\105\6\227\7\146\3\146\3\96\3\96\3\97\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\92\1\92\1\92\1\224\7\96\3\96\3\96\3\96\3\96\3\212\6\144\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\177\2\96\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\70\1\67\3\68\3\68\3\68\3\68\3\68\3\68\3\11\2\143\11\134\2\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\149\11\146\3\23\8\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\117\0\74\0\74\0\74\0\74\0\92\1\92\1\151\0\198\6\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\108\8\108\8\108\8\108\8\241\5\150\7\21\10\27\10\116\0\117\0\117\0\88\8\73\0\74\0\74\0\101\8\108\8\108\8\108\8\108\8\2\2\102\0\230\4\109\0\117\0\117\0\118\0\90\4\74\0\74\0\75\0\74\0\217\3\180\1\157\4\151\6\96\3\96\3\96\3\96\3\118\1\ \\6\6\157\4\157\4\21\10\43\1\1\6\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\33\2\247\3\77\1\89\7\21\10\116\10\199\2\201\2\0\6\96\3\96\3\96\3\157\4\157\4\157\4\233\2\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\3\6\157\4\174\2\146\3\21\10\101\7\96\3\ \\96\3\96\3\6\6\84\1\68\4\188\6\96\3\96\3\96\3\96\3\96\3\96\3\49\1\156\4\148\5\8\6\96\3\125\4\21\10\117\1\96\3\140\8\38\5\35\5\96\3\96\3\94\3\77\6\18\6\215\1\155\3\147\3\109\3\137\6\21\10\49\10\55\10\24\2\106\3\35\5\96\3\96\3\94\3\116\3\240\7\78\3\230\2\4\10\206\4\37\1\ \\21\10\93\7\146\3\24\2\98\3\93\3\96\3\96\3\94\3\91\3\18\6\43\3\41\11\145\3\146\3\137\6\21\10\84\2\216\2\49\3\38\5\35\5\96\3\96\3\94\3\91\3\249\6\215\1\127\7\13\2\109\3\137\6\21\10\63\10\146\3\83\3\119\4\103\3\112\3\65\5\119\4\96\3\68\5\160\5\220\0\45\5\146\3\37\1\21\10\185\7\ \\113\2\3\7\99\3\94\3\96\3\96\3\94\3\96\3\139\4\19\2\56\8\45\6\40\5\137\6\21\10\56\4\143\0\197\8\99\3\94\3\96\3\96\3\94\3\100\3\249\6\154\5\75\3\149\3\63\5\137\6\21\10\131\3\146\3\225\6\99\3\94\3\96\3\96\3\96\3\96\3\112\7\252\7\160\8\27\8\93\1\137\6\21\10\92\1\101\6\49\3\ \\96\3\97\3\236\2\96\3\96\3\93\3\74\6\97\3\213\0\75\8\68\3\37\1\21\10\72\5\146\3\95\3\96\3\96\3\96\3\96\3\96\3\181\6\59\8\120\1\9\6\21\10\201\5\146\3\146\3\146\3\146\3\112\3\101\3\96\3\96\3\207\4\96\3\181\6\190\2\175\9\7\5\21\10\116\8\146\3\146\3\146\3\146\3\166\8\199\2\171\8\ \\58\2\21\10\80\7\84\7\73\10\96\3\95\3\96\3\96\3\96\3\141\3\181\2\127\1\49\11\4\6\157\4\181\2\157\4\157\4\157\4\47\7\60\2\190\7\43\4\8\2\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\72\8\155\4\35\8\21\10\212\9\125\5\40\8\116\7\25\7\144\4\96\3\55\3\55\1\21\10\143\6\117\0\ \\117\0\117\0\117\0\24\1\201\6\74\0\74\0\74\0\74\0\74\0\174\3\96\3\96\3\103\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\8\7\199\2\91\1\92\1\226\7\96\3\96\3\48\4\54\4\117\0\117\0\117\0\117\0\117\0\117\0\117\0\117\0\117\0\117\0\31\1\126\0\96\3\96\3\100\1\61\5\96\3\96\3\172\1\ \\146\3\96\3\96\3\159\2\146\3\96\3\99\3\161\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\42\8\221\6\100\9\156\4\111\1\249\2\21\10\179\11\92\1\229\7\85\9\218\9\21\10\179\11\96\3\96\3\96\3\96\3\106\7\96\3\96\3\96\3\96\3\96\3\96\3\145\3\110\7\96\3\96\3\96\3\96\3\173\2\96\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\140\3\146\3\96\3\96\3\2\6\90\10\96\3\96\3\96\3\96\3\96\3\96\3\84\10\7\5\205\8\144\5\141\5\226\2\21\10\179\11\21\10\179\11\63\4\221\8\157\4\251\8\157\4\7\5\146\3\146\3\146\3\146\3\146\3\146\3\187\6\96\3\96\3\96\3\96\3\96\3\151\4\135\5\104\9\141\3\21\10\ \\212\9\47\4\244\3\161\4\196\7\60\3\96\3\96\3\96\3\254\6\132\1\21\10\101\7\96\3\96\3\96\3\96\3\149\4\213\8\254\3\59\4\96\3\96\3\96\3\96\3\64\3\140\5\55\11\60\4\21\10\24\5\21\10\101\7\96\3\96\3\96\3\59\0\74\0\60\5\117\0\117\0\117\0\117\0\117\0\18\1\199\2\146\3\51\11\157\4\155\4\ \\137\1\138\1\159\1\74\0\74\0\74\0\74\0\74\0\130\2\134\2\134\2\134\2\134\2\134\2\134\2\134\2\184\3\74\0\186\3\74\0\74\0\74\0\131\2\134\2\134\2\134\2\134\2\157\4\157\4\157\4\157\4\157\4\157\4\157\4\157\4\74\0\117\0\126\0\31\1\74\0\117\0\74\0\117\0\126\0\31\1\74\0\111\4\74\0\117\0\74\0\ \\126\0\74\0\31\12\74\0\31\12\74\0\31\12\98\4\95\0\163\10\157\10\128\0\252\0\74\0\224\5\132\0\72\7\174\5\179\5\135\7\6\4\199\2\251\1\199\2\92\9\145\7\199\2\141\7\243\8\185\5\182\5\171\10\177\10\92\1\25\4\134\2\165\9\241\6\241\6\241\6\241\6\85\2\146\3\157\4\6\9\1\9\157\4\119\9\146\3\202\3\ \\53\7\132\8\196\3\165\4\171\4\200\0\180\0\100\2\106\2\92\1\92\1\37\9\37\9\37\9\37\9\42\9\244\11\185\10\191\10\227\3\237\3\48\4\48\4\48\4\94\2\231\3\48\4\48\4\48\4\96\2\195\1\117\0\117\0\117\0\117\0\117\0\117\0\74\0\74\0\74\0\74\0\74\0\74\0\20\0\195\0\12\0\89\0\192\0\192\0\192\0\ \\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\192\0\55\9\60\9\8\12\95\10\74\0\74\0\74\0\74\0\97\4\167\6\96\3\96\3\96\3\96\3\96\3\96\3\96\3\238\1\237\1\11\2\96\3\96\3\97\3\146\3\97\3\97\3\97\3\97\3\97\3\97\3\97\3\97\3\157\4\157\4\157\4\157\4\218\10\212\10\84\9\89\9\13\4\ \\37\0\199\2\244\10\232\8\199\2\186\1\216\5\146\3\146\3\146\3\146\3\48\4\48\4\48\4\193\7\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\52\4\146\3\116\5\17\4\204\7\208\7\36\9\10\8\223\4\47\9\95\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\97\3\9\3\80\5\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\173\0\96\3\77\2\96\3\96\3\21\10\169\11\146\3\146\3\192\0\192\0\192\0\192\0\192\0\167\2\11\9\10\6\192\0\192\0\192\0\52\2\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\31\7\37\9\82\9\146\3\251\5\254\5\96\3\96\3\31\8\197\10\182\7\114\2\96\3\ \\96\3\96\3\96\3\96\3\96\3\192\6\146\3\29\7\96\3\96\3\96\3\96\3\96\3\64\3\68\3\166\5\57\4\21\10\179\11\157\4\157\4\147\4\246\5\21\10\101\7\96\3\96\3\3\6\78\9\96\3\96\3\2\6\157\4\254\3\56\4\96\3\96\3\96\3\141\3\188\6\96\3\96\3\96\3\96\3\96\3\54\3\83\11\198\2\248\10\21\10\ \\205\10\166\0\96\3\21\10\131\4\96\3\96\3\96\3\96\3\96\3\184\6\62\1\146\3\254\5\33\4\21\10\226\10\96\3\96\3\15\3\121\10\96\3\96\3\96\3\96\3\96\3\96\3\152\1\107\11\173\2\146\3\146\3\80\6\96\3\79\11\65\0\146\3\237\2\237\2\237\2\146\3\97\3\97\3\74\0\74\0\74\0\74\0\74\0\179\3\74\0\ \\193\4\74\0\74\0\74\0\74\0\74\0\74\0\74\0\74\0\74\0\74\0\96\3\96\3\96\3\96\3\109\9\114\9\21\10\179\11\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\39\12\ \\39\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\47\12\157\4\157\4\86\6\236\1\157\4\157\4\7\11\16\4\13\11\215\7\156\7\230\1\236\4\158\0\99\3\96\3\96\3\ \\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\210\3\244\2\150\7\21\10\27\10\116\0\117\0\117\0\88\8\73\0\74\0\74\0\30\0\21\11\96\3\118\1\96\3\96\3\96\3\96\3\27\11\96\3\96\3\96\3\97\3\236\2\236\2\236\2\27\5\74\4\29\3\146\3\190\5\224\8\92\1\92\1\ \\92\1\92\1\92\1\154\9\48\4\37\9\37\9\37\9\37\9\37\9\37\9\149\9\187\7\48\4\255\4\48\4\51\4\55\4\146\3\146\3\146\3\146\3\146\3\48\4\48\4\48\4\48\4\48\4\196\10\96\3\96\3\96\3\96\3\227\7\26\8\96\3\96\3\122\5\108\5\96\3\96\3\96\3\96\3\3\6\21\9\96\3\96\3\96\3\238\2\96\3\ \\96\3\96\3\96\3\142\3\96\3\69\2\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\117\0\117\0\74\0\74\0\74\0\74\0\74\0\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\21\10\179\11\117\0\117\0\117\0\117\0\33\1\74\0\74\0\74\0\74\0\41\6\96\3\96\3\96\3\96\3\96\3\96\3\97\3\ \\146\3\96\3\96\3\140\3\146\3\96\3\146\3\146\3\146\3\52\0\134\2\134\2\134\2\134\2\134\2\50\0\167\9\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\140\3\94\3\96\3\96\3\96\3\96\3\98\3\31\5\96\3\96\3\238\2\92\1\96\3\96\3\81\5\150\0\96\3\96\3\96\3\97\3\231\7\92\1\146\3\146\3\146\3\ \\146\3\146\3\146\3\96\3\96\3\135\4\140\0\62\6\178\2\100\3\95\3\96\3\96\3\140\3\254\9\92\1\230\7\199\2\237\1\96\3\96\3\96\3\152\8\96\3\96\3\96\3\105\6\146\3\146\3\146\3\146\3\96\3\102\6\96\3\96\3\134\6\140\0\200\2\146\3\96\3\96\3\96\3\96\3\96\3\96\3\140\3\62\4\96\3\96\3\140\3\ \\92\1\96\3\96\3\143\3\92\1\96\3\96\3\144\3\116\6\146\3\142\0\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\145\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\117\0\117\0\117\0\34\1\146\3\74\0\74\0\74\0\74\0\74\0\ \\74\0\42\6\141\0\124\10\96\3\96\3\96\3\96\3\96\3\96\3\157\4\9\6\221\8\141\0\92\1\18\5\21\10\156\1\11\2\60\3\96\3\96\3\96\3\96\3\96\3\131\5\60\11\157\6\160\6\96\3\96\3\96\3\145\3\21\10\179\11\146\4\96\3\96\3\96\3\2\6\130\1\9\5\21\10\160\7\146\3\96\3\96\3\96\3\96\3\108\10\ \\146\3\60\3\96\3\96\3\96\3\96\3\96\3\128\5\127\1\191\6\14\9\21\10\0\11\142\0\92\1\226\7\146\3\96\3\96\3\93\3\96\3\96\3\127\5\38\3\101\10\253\2\146\3\146\3\146\3\146\3\146\3\146\3\146\3\97\3\86\3\96\3\98\3\96\3\23\12\96\3\96\3\96\3\96\3\96\3\2\6\141\5\21\9\21\10\179\11\87\11\ \\38\5\35\5\96\3\96\3\94\3\91\3\93\11\15\8\19\8\45\5\26\8\143\1\252\9\252\9\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\126\5\157\4\136\10\193\6\21\10\101\11\144\3\146\3\146\3\146\3\96\3\96\3\96\3\ \\96\3\96\3\96\3\141\5\137\5\55\6\146\3\21\10\179\11\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\141\5\37\3\149\10\146\3\21\10\179\11\199\2\196\6\146\3\146\3\96\3\96\3\96\3\96\3\96\3\202\8\128\1\23\12\21\10\179\11\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\8\7\132\5\ \\58\8\21\10\124\6\97\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\127\5\157\4\222\1\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\ \\117\0\74\0\74\0\74\0\74\0\21\10\80\7\228\7\61\5\96\3\94\3\96\3\96\3\96\3\124\5\7\5\128\1\195\6\146\3\21\10\80\7\92\1\226\7\25\11\96\3\96\3\96\3\180\2\157\4\157\4\219\6\47\8\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\97\3\93\3\96\3\96\3\96\3\96\3\45\7\3\3\175\6\ \\146\3\21\10\179\11\98\3\94\3\96\3\96\3\96\3\121\7\50\6\145\3\21\10\179\11\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\67\8\96\3\94\3\96\3\96\3\96\3\71\8\135\11\218\8\199\2\21\10\179\11\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\145\3\146\3\92\1\92\1\183\7\ \\236\6\233\6\48\4\54\4\56\4\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\97\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\145\3\96\3\96\3\96\3\97\3\21\10\ \\205\10\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\97\3\21\10\179\11\96\3\96\3\96\3\140\3\229\11\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\143\3\96\3\141\3\96\3\145\3\96\3\143\10\28\6\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\48\4\48\4\48\4\48\4\49\4\92\2\48\4\48\4\48\4\48\4\48\4\48\4\209\1\20\7\24\6\196\9\13\7\161\4\48\4\48\4\48\4\16\7\48\4\48\4\48\4\48\4\48\4\48\4\48\4\53\4\146\3\146\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\204\9\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\ \\146\3\146\3\146\3\146\3\146\3\146\3\146\3\92\1\92\1\227\7\146\3\92\1\92\1\227\7\146\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\49\4\146\3\92\1\92\1\92\1\230\7\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\117\0\117\0\117\0\ \\95\4\74\0\74\0\86\4\117\0\117\0\91\4\98\4\74\0\74\0\117\0\117\0\117\0\95\4\74\0\74\0\246\0\204\6\11\1\91\4\169\3\99\4\74\0\117\0\117\0\117\0\95\4\74\0\74\0\74\0\74\0\77\0\86\4\117\0\117\0\120\0\74\0\74\0\75\0\84\4\117\0\117\0\118\0\74\0\74\0\74\0\82\4\117\0\117\0\117\0\ \\124\0\74\0\74\0\79\0\163\11\21\10\21\10\21\10\21\10\21\10\21\10\74\0\85\0\74\0\38\6\33\6\42\6\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\7\5\157\4\157\4\46\11\52\8\21\9\134\2\ \\134\2\134\2\134\2\134\2\134\2\134\2\164\9\146\3\146\3\146\3\11\2\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\96\3\94\6\ \\92\1\7\5\146\3\146\3\146\3\146\3\146\3\100\3\96\3\96\3\96\3\120\3\95\3\101\3\211\4\125\3\202\4\120\3\200\4\120\3\101\3\101\3\206\4\96\3\93\3\96\3\142\3\28\2\93\3\96\3\142\3\146\3\146\3\146\3\146\3\146\3\146\3\241\4\146\3\53\4\146\3\48\4\48\4\48\4\48\4\48\4\52\4\48\4\55\4\54\4\ \\146\3\50\4\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\ \\48\4\48\4\13\10\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\89\2\48\4\51\4\48\4\51\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\49\4\ \\90\2\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\54\4\48\4\52\4\55\4\146\3\48\4\52\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\146\3\48\4\54\4\48\4\48\4\48\4\48\4\48\4\146\3\48\4\48\4\48\4\50\4\54\4\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\146\3\48\4\ \\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\52\4\146\3\48\4\50\4\48\4\51\4\48\4\55\4\48\4\48\4\48\4\48\4\48\4\189\7\50\4\243\4\48\4\52\4\48\4\55\4\48\4\55\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\48\4\192\7\ \\48\4\48\4\48\4\48\4\48\4\48\4\53\4\146\3\146\3\146\3\146\3\21\10\179\11"# generalCategoryOffsets2BitMap :: Ptr Word16 generalCategoryOffsets2BitMap = Ptr "\205\9\242\8\17\9\214\5\193\6\219\6\237\9\13\10\125\5\45\10\77\10\109\10\141\10\173\10\205\10\237\10\13\11\0\1\188\0\45\11\255\0\0\1\239\1\77\11\109\11\15\2\141\11\173\11\205\11\237\11\217\8\13\12\45\12\77\12\127\4\197\7\226\7\76\2\62\2\97\4\175\4\143\4\127\4\43\2\109\12\141\12\173\12\126\0\205\12\64\0\ \\54\4\175\4\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\102\0\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\94\0\0\1\0\1\0\1\64\3\0\1\237\12\47\9\13\13\45\13\77\13\109\13\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\227\2\141\13\141\13\141\13\141\13\141\13\141\13\141\13\141\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\173\13\0\1\ \\106\7\79\7\0\1\165\7\205\13\237\13\141\1\13\14\132\3\45\14\77\14\161\6\0\1\109\14\141\14\2\8\173\14\205\14\237\14\21\5\41\5\79\9\13\15\45\15\77\15\109\15\141\15\205\3\173\15\205\15\237\15\109\1\0\0\108\2\13\16\45\16\33\1\77\16\0\1\0\1\0\1\112\3\96\3\65\1\74\1\74\1\74\1\74\1\74\1\74\1\ \\74\1\74\1\74\1\124\2\0\1\0\1\0\1\0\1\156\2\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\0\1\0\1\109\16\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\ \\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\0\1\0\1\141\16\46\6\74\1\74\1\70\6\142\9\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\135\6\0\1\0\1\0\1\0\1\6\1\30\0\74\1\74\1\ \\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\32\0\0\1\202\2\216\2\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\173\16\74\1\74\1\74\1\74\1\74\1\ \\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\154\5\156\0\205\16\237\16\13\17\45\17\226\4\245\4\77\17\175\4\175\4\47\7\74\1\74\1\74\1\74\1\109\17\141\17\3\3\17\3\74\1\22\4\74\1\74\1\78\1\173\17\164\3\74\1\74\1\182\3\237\3\205\17\74\1\62\8\33\8\237\17\13\18\ \\175\4\175\4\45\18\77\18\109\18\175\4\141\18\173\18\74\1\74\1\74\1\74\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\223\0\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\215\0\205\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\217\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\95\5\0\1\0\1\ \\21\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\74\1\0\1\0\1\29\1\74\1\74\1\74\1\74\1\74\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\163\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\ \\0\1\0\1\0\1\173\1\186\5\208\5"# unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/SimpleLowerCaseMapping.hs0000644000000000000000000007464007346545000026131 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping (toSimpleLowerCase) where {-# NOINLINE toSimpleLowerCase #-} toSimpleLowerCase :: Char -> Char toSimpleLowerCase = \case 'A' -> 'a' 'B' -> 'b' 'C' -> 'c' 'D' -> 'd' 'E' -> 'e' 'F' -> 'f' 'G' -> 'g' 'H' -> 'h' 'I' -> 'i' 'J' -> 'j' 'K' -> 'k' 'L' -> 'l' 'M' -> 'm' 'N' -> 'n' 'O' -> 'o' 'P' -> 'p' 'Q' -> 'q' 'R' -> 'r' 'S' -> 's' 'T' -> 't' 'U' -> 'u' 'V' -> 'v' 'W' -> 'w' 'X' -> 'x' 'Y' -> 'y' 'Z' -> 'z' '\192' -> '\224' '\193' -> '\225' '\194' -> '\226' '\195' -> '\227' '\196' -> '\228' '\197' -> '\229' '\198' -> '\230' '\199' -> '\231' '\200' -> '\232' '\201' -> '\233' '\202' -> '\234' '\203' -> '\235' '\204' -> '\236' '\205' -> '\237' '\206' -> '\238' '\207' -> '\239' '\208' -> '\240' '\209' -> '\241' '\210' -> '\242' '\211' -> '\243' '\212' -> '\244' '\213' -> '\245' '\214' -> '\246' '\216' -> '\248' '\217' -> '\249' '\218' -> '\250' '\219' -> '\251' '\220' -> '\252' '\221' -> '\253' '\222' -> '\254' '\256' -> '\257' '\258' -> '\259' '\260' -> '\261' '\262' -> '\263' '\264' -> '\265' '\266' -> '\267' '\268' -> '\269' '\270' -> '\271' '\272' -> '\273' '\274' -> '\275' '\276' -> '\277' '\278' -> '\279' '\280' -> '\281' '\282' -> '\283' '\284' -> '\285' '\286' -> '\287' '\288' -> '\289' '\290' -> '\291' '\292' -> '\293' '\294' -> '\295' '\296' -> '\297' '\298' -> '\299' '\300' -> '\301' '\302' -> '\303' '\304' -> 'i' '\306' -> '\307' '\308' -> '\309' '\310' -> '\311' '\313' -> '\314' '\315' -> '\316' '\317' -> '\318' '\319' -> '\320' '\321' -> '\322' '\323' -> '\324' '\325' -> '\326' '\327' -> '\328' '\330' -> '\331' '\332' -> '\333' '\334' -> '\335' '\336' -> '\337' '\338' -> '\339' '\340' -> '\341' '\342' -> '\343' '\344' -> '\345' '\346' -> '\347' '\348' -> '\349' '\350' -> '\351' '\352' -> '\353' '\354' -> '\355' '\356' -> '\357' '\358' -> '\359' '\360' -> '\361' '\362' -> '\363' '\364' -> '\365' '\366' -> '\367' '\368' -> '\369' '\370' -> '\371' '\372' -> '\373' '\374' -> '\375' '\376' -> '\255' '\377' -> '\378' '\379' -> '\380' '\381' -> '\382' '\385' -> '\595' '\386' -> '\387' '\388' -> '\389' '\390' -> '\596' '\391' -> '\392' '\393' -> '\598' '\394' -> '\599' '\395' -> '\396' '\398' -> '\477' '\399' -> '\601' '\400' -> '\603' '\401' -> '\402' '\403' -> '\608' '\404' -> '\611' '\406' -> '\617' '\407' -> '\616' '\408' -> '\409' '\412' -> '\623' '\413' -> '\626' '\415' -> '\629' '\416' -> '\417' '\418' -> '\419' '\420' -> '\421' '\422' -> '\640' '\423' -> '\424' '\425' -> '\643' '\428' -> '\429' '\430' -> '\648' '\431' -> '\432' '\433' -> '\650' '\434' -> '\651' '\435' -> '\436' '\437' -> '\438' '\439' -> '\658' '\440' -> '\441' '\444' -> '\445' '\452' -> '\454' '\453' -> '\454' '\455' -> '\457' '\456' -> '\457' '\458' -> '\460' '\459' -> '\460' '\461' -> '\462' '\463' -> '\464' '\465' -> '\466' '\467' -> '\468' '\469' -> '\470' '\471' -> '\472' '\473' -> '\474' '\475' -> '\476' '\478' -> '\479' '\480' -> '\481' '\482' -> '\483' '\484' -> '\485' '\486' -> '\487' '\488' -> '\489' '\490' -> '\491' '\492' -> '\493' '\494' -> '\495' '\497' -> '\499' '\498' -> '\499' '\500' -> '\501' '\502' -> '\405' '\503' -> '\447' '\504' -> '\505' '\506' -> '\507' '\508' -> '\509' '\510' -> '\511' '\512' -> '\513' '\514' -> '\515' '\516' -> '\517' '\518' -> '\519' '\520' -> '\521' '\522' -> '\523' '\524' -> '\525' '\526' -> '\527' '\528' -> '\529' '\530' -> '\531' '\532' -> '\533' '\534' -> '\535' '\536' -> '\537' '\538' -> '\539' '\540' -> '\541' '\542' -> '\543' '\544' -> '\414' '\546' -> '\547' '\548' -> '\549' '\550' -> '\551' '\552' -> '\553' '\554' -> '\555' '\556' -> '\557' '\558' -> '\559' '\560' -> '\561' '\562' -> '\563' '\570' -> '\11365' '\571' -> '\572' '\573' -> '\410' '\574' -> '\11366' '\577' -> '\578' '\579' -> '\384' '\580' -> '\649' '\581' -> '\652' '\582' -> '\583' '\584' -> '\585' '\586' -> '\587' '\588' -> '\589' '\590' -> '\591' '\880' -> '\881' '\882' -> '\883' '\886' -> '\887' '\895' -> '\1011' '\902' -> '\940' '\904' -> '\941' '\905' -> '\942' '\906' -> '\943' '\908' -> '\972' '\910' -> '\973' '\911' -> '\974' '\913' -> '\945' '\914' -> '\946' '\915' -> '\947' '\916' -> '\948' '\917' -> '\949' '\918' -> '\950' '\919' -> '\951' '\920' -> '\952' '\921' -> '\953' '\922' -> '\954' '\923' -> '\955' '\924' -> '\956' '\925' -> '\957' '\926' -> '\958' '\927' -> '\959' '\928' -> '\960' '\929' -> '\961' '\931' -> '\963' '\932' -> '\964' '\933' -> '\965' '\934' -> '\966' '\935' -> '\967' '\936' -> '\968' '\937' -> '\969' '\938' -> '\970' '\939' -> '\971' '\975' -> '\983' '\984' -> '\985' '\986' -> '\987' '\988' -> '\989' '\990' -> '\991' '\992' -> '\993' '\994' -> '\995' '\996' -> '\997' '\998' -> '\999' '\1000' -> '\1001' '\1002' -> '\1003' '\1004' -> '\1005' '\1006' -> '\1007' '\1012' -> '\952' '\1015' -> '\1016' '\1017' -> '\1010' '\1018' -> '\1019' '\1021' -> '\891' '\1022' -> '\892' '\1023' -> '\893' '\1024' -> '\1104' '\1025' -> '\1105' '\1026' -> '\1106' '\1027' -> '\1107' '\1028' -> '\1108' '\1029' -> '\1109' '\1030' -> '\1110' '\1031' -> '\1111' '\1032' -> '\1112' '\1033' -> '\1113' '\1034' -> '\1114' '\1035' -> '\1115' '\1036' -> '\1116' '\1037' -> '\1117' '\1038' -> '\1118' '\1039' -> '\1119' '\1040' -> '\1072' '\1041' -> '\1073' '\1042' -> '\1074' '\1043' -> '\1075' '\1044' -> '\1076' '\1045' -> '\1077' '\1046' -> '\1078' '\1047' -> '\1079' '\1048' -> '\1080' '\1049' -> '\1081' '\1050' -> '\1082' '\1051' -> '\1083' '\1052' -> '\1084' '\1053' -> '\1085' '\1054' -> '\1086' '\1055' -> '\1087' '\1056' -> '\1088' '\1057' -> '\1089' '\1058' -> '\1090' '\1059' -> '\1091' '\1060' -> '\1092' '\1061' -> '\1093' '\1062' -> '\1094' '\1063' -> '\1095' '\1064' -> '\1096' '\1065' -> '\1097' '\1066' -> '\1098' '\1067' -> '\1099' '\1068' -> '\1100' '\1069' -> '\1101' '\1070' -> '\1102' '\1071' -> '\1103' '\1120' -> '\1121' '\1122' -> '\1123' '\1124' -> '\1125' '\1126' -> '\1127' '\1128' -> '\1129' '\1130' -> '\1131' '\1132' -> '\1133' '\1134' -> '\1135' '\1136' -> '\1137' '\1138' -> '\1139' '\1140' -> '\1141' '\1142' -> '\1143' '\1144' -> '\1145' '\1146' -> '\1147' '\1148' -> '\1149' '\1150' -> '\1151' '\1152' -> '\1153' '\1162' -> '\1163' '\1164' -> '\1165' '\1166' -> '\1167' '\1168' -> '\1169' '\1170' -> '\1171' '\1172' -> '\1173' '\1174' -> '\1175' '\1176' -> '\1177' '\1178' -> '\1179' '\1180' -> '\1181' '\1182' -> '\1183' '\1184' -> '\1185' '\1186' -> '\1187' '\1188' -> '\1189' '\1190' -> '\1191' '\1192' -> '\1193' '\1194' -> '\1195' '\1196' -> '\1197' '\1198' -> '\1199' '\1200' -> '\1201' '\1202' -> '\1203' '\1204' -> '\1205' '\1206' -> '\1207' '\1208' -> '\1209' '\1210' -> '\1211' '\1212' -> '\1213' '\1214' -> '\1215' '\1216' -> '\1231' '\1217' -> '\1218' '\1219' -> '\1220' '\1221' -> '\1222' '\1223' -> '\1224' '\1225' -> '\1226' '\1227' -> '\1228' '\1229' -> '\1230' '\1232' -> '\1233' '\1234' -> '\1235' '\1236' -> '\1237' '\1238' -> '\1239' '\1240' -> '\1241' '\1242' -> '\1243' '\1244' -> '\1245' '\1246' -> '\1247' '\1248' -> '\1249' '\1250' -> '\1251' '\1252' -> '\1253' '\1254' -> '\1255' '\1256' -> '\1257' '\1258' -> '\1259' '\1260' -> '\1261' '\1262' -> '\1263' '\1264' -> '\1265' '\1266' -> '\1267' '\1268' -> '\1269' '\1270' -> '\1271' '\1272' -> '\1273' '\1274' -> '\1275' '\1276' -> '\1277' '\1278' -> '\1279' '\1280' -> '\1281' '\1282' -> '\1283' '\1284' -> '\1285' '\1286' -> '\1287' '\1288' -> '\1289' '\1290' -> '\1291' '\1292' -> '\1293' '\1294' -> '\1295' '\1296' -> '\1297' '\1298' -> '\1299' '\1300' -> '\1301' '\1302' -> '\1303' '\1304' -> '\1305' '\1306' -> '\1307' '\1308' -> '\1309' '\1310' -> '\1311' '\1312' -> '\1313' '\1314' -> '\1315' '\1316' -> '\1317' '\1318' -> '\1319' '\1320' -> '\1321' '\1322' -> '\1323' '\1324' -> '\1325' '\1326' -> '\1327' '\1329' -> '\1377' '\1330' -> '\1378' '\1331' -> '\1379' '\1332' -> '\1380' '\1333' -> '\1381' '\1334' -> '\1382' '\1335' -> '\1383' '\1336' -> '\1384' '\1337' -> '\1385' '\1338' -> '\1386' '\1339' -> '\1387' '\1340' -> '\1388' '\1341' -> '\1389' '\1342' -> '\1390' '\1343' -> '\1391' '\1344' -> '\1392' '\1345' -> '\1393' '\1346' -> '\1394' '\1347' -> '\1395' '\1348' -> '\1396' '\1349' -> '\1397' '\1350' -> '\1398' '\1351' -> '\1399' '\1352' -> '\1400' '\1353' -> '\1401' '\1354' -> '\1402' '\1355' -> '\1403' '\1356' -> '\1404' '\1357' -> '\1405' '\1358' -> '\1406' '\1359' -> '\1407' '\1360' -> '\1408' '\1361' -> '\1409' '\1362' -> '\1410' '\1363' -> '\1411' '\1364' -> '\1412' '\1365' -> '\1413' '\1366' -> '\1414' '\4256' -> '\11520' '\4257' -> '\11521' '\4258' -> '\11522' '\4259' -> '\11523' '\4260' -> '\11524' '\4261' -> '\11525' '\4262' -> '\11526' '\4263' -> '\11527' '\4264' -> '\11528' '\4265' -> '\11529' '\4266' -> '\11530' '\4267' -> '\11531' '\4268' -> '\11532' '\4269' -> '\11533' '\4270' -> '\11534' '\4271' -> '\11535' '\4272' -> '\11536' '\4273' -> '\11537' '\4274' -> '\11538' '\4275' -> '\11539' '\4276' -> '\11540' '\4277' -> '\11541' '\4278' -> '\11542' '\4279' -> '\11543' '\4280' -> '\11544' '\4281' -> '\11545' '\4282' -> '\11546' '\4283' -> '\11547' '\4284' -> '\11548' '\4285' -> '\11549' '\4286' -> '\11550' '\4287' -> '\11551' '\4288' -> '\11552' '\4289' -> '\11553' '\4290' -> '\11554' '\4291' -> '\11555' '\4292' -> '\11556' '\4293' -> '\11557' '\4295' -> '\11559' '\4301' -> '\11565' '\5024' -> '\43888' '\5025' -> '\43889' '\5026' -> '\43890' '\5027' -> '\43891' '\5028' -> '\43892' '\5029' -> '\43893' '\5030' -> '\43894' '\5031' -> '\43895' '\5032' -> '\43896' '\5033' -> '\43897' '\5034' -> '\43898' '\5035' -> '\43899' '\5036' -> '\43900' '\5037' -> '\43901' '\5038' -> '\43902' '\5039' -> '\43903' '\5040' -> '\43904' '\5041' -> '\43905' '\5042' -> '\43906' '\5043' -> '\43907' '\5044' -> '\43908' '\5045' -> '\43909' '\5046' -> '\43910' '\5047' -> '\43911' '\5048' -> '\43912' '\5049' -> '\43913' '\5050' -> '\43914' '\5051' -> '\43915' '\5052' -> '\43916' '\5053' -> '\43917' '\5054' -> '\43918' '\5055' -> '\43919' '\5056' -> '\43920' '\5057' -> '\43921' '\5058' -> '\43922' '\5059' -> '\43923' '\5060' -> '\43924' '\5061' -> '\43925' '\5062' -> '\43926' '\5063' -> '\43927' '\5064' -> '\43928' '\5065' -> '\43929' '\5066' -> '\43930' '\5067' -> '\43931' '\5068' -> '\43932' '\5069' -> '\43933' '\5070' -> '\43934' '\5071' -> '\43935' '\5072' -> '\43936' '\5073' -> '\43937' '\5074' -> '\43938' '\5075' -> '\43939' '\5076' -> '\43940' '\5077' -> '\43941' '\5078' -> '\43942' '\5079' -> '\43943' '\5080' -> '\43944' '\5081' -> '\43945' '\5082' -> '\43946' '\5083' -> '\43947' '\5084' -> '\43948' '\5085' -> '\43949' '\5086' -> '\43950' '\5087' -> '\43951' '\5088' -> '\43952' '\5089' -> '\43953' '\5090' -> '\43954' '\5091' -> '\43955' '\5092' -> '\43956' '\5093' -> '\43957' '\5094' -> '\43958' '\5095' -> '\43959' '\5096' -> '\43960' '\5097' -> '\43961' '\5098' -> '\43962' '\5099' -> '\43963' '\5100' -> '\43964' '\5101' -> '\43965' '\5102' -> '\43966' '\5103' -> '\43967' '\5104' -> '\5112' '\5105' -> '\5113' '\5106' -> '\5114' '\5107' -> '\5115' '\5108' -> '\5116' '\5109' -> '\5117' '\7312' -> '\4304' '\7313' -> '\4305' '\7314' -> '\4306' '\7315' -> '\4307' '\7316' -> '\4308' '\7317' -> '\4309' '\7318' -> '\4310' '\7319' -> '\4311' '\7320' -> '\4312' '\7321' -> '\4313' '\7322' -> '\4314' '\7323' -> '\4315' '\7324' -> '\4316' '\7325' -> '\4317' '\7326' -> '\4318' '\7327' -> '\4319' '\7328' -> '\4320' '\7329' -> '\4321' '\7330' -> '\4322' '\7331' -> '\4323' '\7332' -> '\4324' '\7333' -> '\4325' '\7334' -> '\4326' '\7335' -> '\4327' '\7336' -> '\4328' '\7337' -> '\4329' '\7338' -> '\4330' '\7339' -> '\4331' '\7340' -> '\4332' '\7341' -> '\4333' '\7342' -> '\4334' '\7343' -> '\4335' '\7344' -> '\4336' '\7345' -> '\4337' '\7346' -> '\4338' '\7347' -> '\4339' '\7348' -> '\4340' '\7349' -> '\4341' '\7350' -> '\4342' '\7351' -> '\4343' '\7352' -> '\4344' '\7353' -> '\4345' '\7354' -> '\4346' '\7357' -> '\4349' '\7358' -> '\4350' '\7359' -> '\4351' '\7680' -> '\7681' '\7682' -> '\7683' '\7684' -> '\7685' '\7686' -> '\7687' '\7688' -> '\7689' '\7690' -> '\7691' '\7692' -> '\7693' '\7694' -> '\7695' '\7696' -> '\7697' '\7698' -> '\7699' '\7700' -> '\7701' '\7702' -> '\7703' '\7704' -> '\7705' '\7706' -> '\7707' '\7708' -> '\7709' '\7710' -> '\7711' '\7712' -> '\7713' '\7714' -> '\7715' '\7716' -> '\7717' '\7718' -> '\7719' '\7720' -> '\7721' '\7722' -> '\7723' '\7724' -> '\7725' '\7726' -> '\7727' '\7728' -> '\7729' '\7730' -> '\7731' '\7732' -> '\7733' '\7734' -> '\7735' '\7736' -> '\7737' '\7738' -> '\7739' '\7740' -> '\7741' '\7742' -> '\7743' '\7744' -> '\7745' '\7746' -> '\7747' '\7748' -> '\7749' '\7750' -> '\7751' '\7752' -> '\7753' '\7754' -> '\7755' '\7756' -> '\7757' '\7758' -> '\7759' '\7760' -> '\7761' '\7762' -> '\7763' '\7764' -> '\7765' '\7766' -> '\7767' '\7768' -> '\7769' '\7770' -> '\7771' '\7772' -> '\7773' '\7774' -> '\7775' '\7776' -> '\7777' '\7778' -> '\7779' '\7780' -> '\7781' '\7782' -> '\7783' '\7784' -> '\7785' '\7786' -> '\7787' '\7788' -> '\7789' '\7790' -> '\7791' '\7792' -> '\7793' '\7794' -> '\7795' '\7796' -> '\7797' '\7798' -> '\7799' '\7800' -> '\7801' '\7802' -> '\7803' '\7804' -> '\7805' '\7806' -> '\7807' '\7808' -> '\7809' '\7810' -> '\7811' '\7812' -> '\7813' '\7814' -> '\7815' '\7816' -> '\7817' '\7818' -> '\7819' '\7820' -> '\7821' '\7822' -> '\7823' '\7824' -> '\7825' '\7826' -> '\7827' '\7828' -> '\7829' '\7838' -> '\223' '\7840' -> '\7841' '\7842' -> '\7843' '\7844' -> '\7845' '\7846' -> '\7847' '\7848' -> '\7849' '\7850' -> '\7851' '\7852' -> '\7853' '\7854' -> '\7855' '\7856' -> '\7857' '\7858' -> '\7859' '\7860' -> '\7861' '\7862' -> '\7863' '\7864' -> '\7865' '\7866' -> '\7867' '\7868' -> '\7869' '\7870' -> '\7871' '\7872' -> '\7873' '\7874' -> '\7875' '\7876' -> '\7877' '\7878' -> '\7879' '\7880' -> '\7881' '\7882' -> '\7883' '\7884' -> '\7885' '\7886' -> '\7887' '\7888' -> '\7889' '\7890' -> '\7891' '\7892' -> '\7893' '\7894' -> '\7895' '\7896' -> '\7897' '\7898' -> '\7899' '\7900' -> '\7901' '\7902' -> '\7903' '\7904' -> '\7905' '\7906' -> '\7907' '\7908' -> '\7909' '\7910' -> '\7911' '\7912' -> '\7913' '\7914' -> '\7915' '\7916' -> '\7917' '\7918' -> '\7919' '\7920' -> '\7921' '\7922' -> '\7923' '\7924' -> '\7925' '\7926' -> '\7927' '\7928' -> '\7929' '\7930' -> '\7931' '\7932' -> '\7933' '\7934' -> '\7935' '\7944' -> '\7936' '\7945' -> '\7937' '\7946' -> '\7938' '\7947' -> '\7939' '\7948' -> '\7940' '\7949' -> '\7941' '\7950' -> '\7942' '\7951' -> '\7943' '\7960' -> '\7952' '\7961' -> '\7953' '\7962' -> '\7954' '\7963' -> '\7955' '\7964' -> '\7956' '\7965' -> '\7957' '\7976' -> '\7968' '\7977' -> '\7969' '\7978' -> '\7970' '\7979' -> '\7971' '\7980' -> '\7972' '\7981' -> '\7973' '\7982' -> '\7974' '\7983' -> '\7975' '\7992' -> '\7984' '\7993' -> '\7985' '\7994' -> '\7986' '\7995' -> '\7987' '\7996' -> '\7988' '\7997' -> '\7989' '\7998' -> '\7990' '\7999' -> '\7991' '\8008' -> '\8000' '\8009' -> '\8001' '\8010' -> '\8002' '\8011' -> '\8003' '\8012' -> '\8004' '\8013' -> '\8005' '\8025' -> '\8017' '\8027' -> '\8019' '\8029' -> '\8021' '\8031' -> '\8023' '\8040' -> '\8032' '\8041' -> '\8033' '\8042' -> '\8034' '\8043' -> '\8035' '\8044' -> '\8036' '\8045' -> '\8037' '\8046' -> '\8038' '\8047' -> '\8039' '\8072' -> '\8064' '\8073' -> '\8065' '\8074' -> '\8066' '\8075' -> '\8067' '\8076' -> '\8068' '\8077' -> '\8069' '\8078' -> '\8070' '\8079' -> '\8071' '\8088' -> '\8080' '\8089' -> '\8081' '\8090' -> '\8082' '\8091' -> '\8083' '\8092' -> '\8084' '\8093' -> '\8085' '\8094' -> '\8086' '\8095' -> '\8087' '\8104' -> '\8096' '\8105' -> '\8097' '\8106' -> '\8098' '\8107' -> '\8099' '\8108' -> '\8100' '\8109' -> '\8101' '\8110' -> '\8102' '\8111' -> '\8103' '\8120' -> '\8112' '\8121' -> '\8113' '\8122' -> '\8048' '\8123' -> '\8049' '\8124' -> '\8115' '\8136' -> '\8050' '\8137' -> '\8051' '\8138' -> '\8052' '\8139' -> '\8053' '\8140' -> '\8131' '\8152' -> '\8144' '\8153' -> '\8145' '\8154' -> '\8054' '\8155' -> '\8055' '\8168' -> '\8160' '\8169' -> '\8161' '\8170' -> '\8058' '\8171' -> '\8059' '\8172' -> '\8165' '\8184' -> '\8056' '\8185' -> '\8057' '\8186' -> '\8060' '\8187' -> '\8061' '\8188' -> '\8179' '\8486' -> '\969' '\8490' -> 'k' '\8491' -> '\229' '\8498' -> '\8526' '\8544' -> '\8560' '\8545' -> '\8561' '\8546' -> '\8562' '\8547' -> '\8563' '\8548' -> '\8564' '\8549' -> '\8565' '\8550' -> '\8566' '\8551' -> '\8567' '\8552' -> '\8568' '\8553' -> '\8569' '\8554' -> '\8570' '\8555' -> '\8571' '\8556' -> '\8572' '\8557' -> '\8573' '\8558' -> '\8574' '\8559' -> '\8575' '\8579' -> '\8580' '\9398' -> '\9424' '\9399' -> '\9425' '\9400' -> '\9426' '\9401' -> '\9427' '\9402' -> '\9428' '\9403' -> '\9429' '\9404' -> '\9430' '\9405' -> '\9431' '\9406' -> '\9432' '\9407' -> '\9433' '\9408' -> '\9434' '\9409' -> '\9435' '\9410' -> '\9436' '\9411' -> '\9437' '\9412' -> '\9438' '\9413' -> '\9439' '\9414' -> '\9440' '\9415' -> '\9441' '\9416' -> '\9442' '\9417' -> '\9443' '\9418' -> '\9444' '\9419' -> '\9445' '\9420' -> '\9446' '\9421' -> '\9447' '\9422' -> '\9448' '\9423' -> '\9449' '\11264' -> '\11312' '\11265' -> '\11313' '\11266' -> '\11314' '\11267' -> '\11315' '\11268' -> '\11316' '\11269' -> '\11317' '\11270' -> '\11318' '\11271' -> '\11319' '\11272' -> '\11320' '\11273' -> '\11321' '\11274' -> '\11322' '\11275' -> '\11323' '\11276' -> '\11324' '\11277' -> '\11325' '\11278' -> '\11326' '\11279' -> '\11327' '\11280' -> '\11328' '\11281' -> '\11329' '\11282' -> '\11330' '\11283' -> '\11331' '\11284' -> '\11332' '\11285' -> '\11333' '\11286' -> '\11334' '\11287' -> '\11335' '\11288' -> '\11336' '\11289' -> '\11337' '\11290' -> '\11338' '\11291' -> '\11339' '\11292' -> '\11340' '\11293' -> '\11341' '\11294' -> '\11342' '\11295' -> '\11343' '\11296' -> '\11344' '\11297' -> '\11345' '\11298' -> '\11346' '\11299' -> '\11347' '\11300' -> '\11348' '\11301' -> '\11349' '\11302' -> '\11350' '\11303' -> '\11351' '\11304' -> '\11352' '\11305' -> '\11353' '\11306' -> '\11354' '\11307' -> '\11355' '\11308' -> '\11356' '\11309' -> '\11357' '\11310' -> '\11358' '\11311' -> '\11359' '\11360' -> '\11361' '\11362' -> '\619' '\11363' -> '\7549' '\11364' -> '\637' '\11367' -> '\11368' '\11369' -> '\11370' '\11371' -> '\11372' '\11373' -> '\593' '\11374' -> '\625' '\11375' -> '\592' '\11376' -> '\594' '\11378' -> '\11379' '\11381' -> '\11382' '\11390' -> '\575' '\11391' -> '\576' '\11392' -> '\11393' '\11394' -> '\11395' '\11396' -> '\11397' '\11398' -> '\11399' '\11400' -> '\11401' '\11402' -> '\11403' '\11404' -> '\11405' '\11406' -> '\11407' '\11408' -> '\11409' '\11410' -> '\11411' '\11412' -> '\11413' '\11414' -> '\11415' '\11416' -> '\11417' '\11418' -> '\11419' '\11420' -> '\11421' '\11422' -> '\11423' '\11424' -> '\11425' '\11426' -> '\11427' '\11428' -> '\11429' '\11430' -> '\11431' '\11432' -> '\11433' '\11434' -> '\11435' '\11436' -> '\11437' '\11438' -> '\11439' '\11440' -> '\11441' '\11442' -> '\11443' '\11444' -> '\11445' '\11446' -> '\11447' '\11448' -> '\11449' '\11450' -> '\11451' '\11452' -> '\11453' '\11454' -> '\11455' '\11456' -> '\11457' '\11458' -> '\11459' '\11460' -> '\11461' '\11462' -> '\11463' '\11464' -> '\11465' '\11466' -> '\11467' '\11468' -> '\11469' '\11470' -> '\11471' '\11472' -> '\11473' '\11474' -> '\11475' '\11476' -> '\11477' '\11478' -> '\11479' '\11480' -> '\11481' '\11482' -> '\11483' '\11484' -> '\11485' '\11486' -> '\11487' '\11488' -> '\11489' '\11490' -> '\11491' '\11499' -> '\11500' '\11501' -> '\11502' '\11506' -> '\11507' '\42560' -> '\42561' '\42562' -> '\42563' '\42564' -> '\42565' '\42566' -> '\42567' '\42568' -> '\42569' '\42570' -> '\42571' '\42572' -> '\42573' '\42574' -> '\42575' '\42576' -> '\42577' '\42578' -> '\42579' '\42580' -> '\42581' '\42582' -> '\42583' '\42584' -> '\42585' '\42586' -> '\42587' '\42588' -> '\42589' '\42590' -> '\42591' '\42592' -> '\42593' '\42594' -> '\42595' '\42596' -> '\42597' '\42598' -> '\42599' '\42600' -> '\42601' '\42602' -> '\42603' '\42604' -> '\42605' '\42624' -> '\42625' '\42626' -> '\42627' '\42628' -> '\42629' '\42630' -> '\42631' '\42632' -> '\42633' '\42634' -> '\42635' '\42636' -> '\42637' '\42638' -> '\42639' '\42640' -> '\42641' '\42642' -> '\42643' '\42644' -> '\42645' '\42646' -> '\42647' '\42648' -> '\42649' '\42650' -> '\42651' '\42786' -> '\42787' '\42788' -> '\42789' '\42790' -> '\42791' '\42792' -> '\42793' '\42794' -> '\42795' '\42796' -> '\42797' '\42798' -> '\42799' '\42802' -> '\42803' '\42804' -> '\42805' '\42806' -> '\42807' '\42808' -> '\42809' '\42810' -> '\42811' '\42812' -> '\42813' '\42814' -> '\42815' '\42816' -> '\42817' '\42818' -> '\42819' '\42820' -> '\42821' '\42822' -> '\42823' '\42824' -> '\42825' '\42826' -> '\42827' '\42828' -> '\42829' '\42830' -> '\42831' '\42832' -> '\42833' '\42834' -> '\42835' '\42836' -> '\42837' '\42838' -> '\42839' '\42840' -> '\42841' '\42842' -> '\42843' '\42844' -> '\42845' '\42846' -> '\42847' '\42848' -> '\42849' '\42850' -> '\42851' '\42852' -> '\42853' '\42854' -> '\42855' '\42856' -> '\42857' '\42858' -> '\42859' '\42860' -> '\42861' '\42862' -> '\42863' '\42873' -> '\42874' '\42875' -> '\42876' '\42877' -> '\7545' '\42878' -> '\42879' '\42880' -> '\42881' '\42882' -> '\42883' '\42884' -> '\42885' '\42886' -> '\42887' '\42891' -> '\42892' '\42893' -> '\613' '\42896' -> '\42897' '\42898' -> '\42899' '\42902' -> '\42903' '\42904' -> '\42905' '\42906' -> '\42907' '\42908' -> '\42909' '\42910' -> '\42911' '\42912' -> '\42913' '\42914' -> '\42915' '\42916' -> '\42917' '\42918' -> '\42919' '\42920' -> '\42921' '\42922' -> '\614' '\42923' -> '\604' '\42924' -> '\609' '\42925' -> '\620' '\42926' -> '\618' '\42928' -> '\670' '\42929' -> '\647' '\42930' -> '\669' '\42931' -> '\43859' '\42932' -> '\42933' '\42934' -> '\42935' '\42936' -> '\42937' '\42938' -> '\42939' '\42940' -> '\42941' '\42942' -> '\42943' '\42944' -> '\42945' '\42946' -> '\42947' '\42948' -> '\42900' '\42949' -> '\642' '\42950' -> '\7566' '\42951' -> '\42952' '\42953' -> '\42954' '\42960' -> '\42961' '\42966' -> '\42967' '\42968' -> '\42969' '\42997' -> '\42998' '\65313' -> '\65345' '\65314' -> '\65346' '\65315' -> '\65347' '\65316' -> '\65348' '\65317' -> '\65349' '\65318' -> '\65350' '\65319' -> '\65351' '\65320' -> '\65352' '\65321' -> '\65353' '\65322' -> '\65354' '\65323' -> '\65355' '\65324' -> '\65356' '\65325' -> '\65357' '\65326' -> '\65358' '\65327' -> '\65359' '\65328' -> '\65360' '\65329' -> '\65361' '\65330' -> '\65362' '\65331' -> '\65363' '\65332' -> '\65364' '\65333' -> '\65365' '\65334' -> '\65366' '\65335' -> '\65367' '\65336' -> '\65368' '\65337' -> '\65369' '\65338' -> '\65370' '\66560' -> '\66600' '\66561' -> '\66601' '\66562' -> '\66602' '\66563' -> '\66603' '\66564' -> '\66604' '\66565' -> '\66605' '\66566' -> '\66606' '\66567' -> '\66607' '\66568' -> '\66608' '\66569' -> '\66609' '\66570' -> '\66610' '\66571' -> '\66611' '\66572' -> '\66612' '\66573' -> '\66613' '\66574' -> '\66614' '\66575' -> '\66615' '\66576' -> '\66616' '\66577' -> '\66617' '\66578' -> '\66618' '\66579' -> '\66619' '\66580' -> '\66620' '\66581' -> '\66621' '\66582' -> '\66622' '\66583' -> '\66623' '\66584' -> '\66624' '\66585' -> '\66625' '\66586' -> '\66626' '\66587' -> '\66627' '\66588' -> '\66628' '\66589' -> '\66629' '\66590' -> '\66630' '\66591' -> '\66631' '\66592' -> '\66632' '\66593' -> '\66633' '\66594' -> '\66634' '\66595' -> '\66635' '\66596' -> '\66636' '\66597' -> '\66637' '\66598' -> '\66638' '\66599' -> '\66639' '\66736' -> '\66776' '\66737' -> '\66777' '\66738' -> '\66778' '\66739' -> '\66779' '\66740' -> '\66780' '\66741' -> '\66781' '\66742' -> '\66782' '\66743' -> '\66783' '\66744' -> '\66784' '\66745' -> '\66785' '\66746' -> '\66786' '\66747' -> '\66787' '\66748' -> '\66788' '\66749' -> '\66789' '\66750' -> '\66790' '\66751' -> '\66791' '\66752' -> '\66792' '\66753' -> '\66793' '\66754' -> '\66794' '\66755' -> '\66795' '\66756' -> '\66796' '\66757' -> '\66797' '\66758' -> '\66798' '\66759' -> '\66799' '\66760' -> '\66800' '\66761' -> '\66801' '\66762' -> '\66802' '\66763' -> '\66803' '\66764' -> '\66804' '\66765' -> '\66805' '\66766' -> '\66806' '\66767' -> '\66807' '\66768' -> '\66808' '\66769' -> '\66809' '\66770' -> '\66810' '\66771' -> '\66811' '\66928' -> '\66967' '\66929' -> '\66968' '\66930' -> '\66969' '\66931' -> '\66970' '\66932' -> '\66971' '\66933' -> '\66972' '\66934' -> '\66973' '\66935' -> '\66974' '\66936' -> '\66975' '\66937' -> '\66976' '\66938' -> '\66977' '\66940' -> '\66979' '\66941' -> '\66980' '\66942' -> '\66981' '\66943' -> '\66982' '\66944' -> '\66983' '\66945' -> '\66984' '\66946' -> '\66985' '\66947' -> '\66986' '\66948' -> '\66987' '\66949' -> '\66988' '\66950' -> '\66989' '\66951' -> '\66990' '\66952' -> '\66991' '\66953' -> '\66992' '\66954' -> '\66993' '\66956' -> '\66995' '\66957' -> '\66996' '\66958' -> '\66997' '\66959' -> '\66998' '\66960' -> '\66999' '\66961' -> '\67000' '\66962' -> '\67001' '\66964' -> '\67003' '\66965' -> '\67004' '\68736' -> '\68800' '\68737' -> '\68801' '\68738' -> '\68802' '\68739' -> '\68803' '\68740' -> '\68804' '\68741' -> '\68805' '\68742' -> '\68806' '\68743' -> '\68807' '\68744' -> '\68808' '\68745' -> '\68809' '\68746' -> '\68810' '\68747' -> '\68811' '\68748' -> '\68812' '\68749' -> '\68813' '\68750' -> '\68814' '\68751' -> '\68815' '\68752' -> '\68816' '\68753' -> '\68817' '\68754' -> '\68818' '\68755' -> '\68819' '\68756' -> '\68820' '\68757' -> '\68821' '\68758' -> '\68822' '\68759' -> '\68823' '\68760' -> '\68824' '\68761' -> '\68825' '\68762' -> '\68826' '\68763' -> '\68827' '\68764' -> '\68828' '\68765' -> '\68829' '\68766' -> '\68830' '\68767' -> '\68831' '\68768' -> '\68832' '\68769' -> '\68833' '\68770' -> '\68834' '\68771' -> '\68835' '\68772' -> '\68836' '\68773' -> '\68837' '\68774' -> '\68838' '\68775' -> '\68839' '\68776' -> '\68840' '\68777' -> '\68841' '\68778' -> '\68842' '\68779' -> '\68843' '\68780' -> '\68844' '\68781' -> '\68845' '\68782' -> '\68846' '\68783' -> '\68847' '\68784' -> '\68848' '\68785' -> '\68849' '\68786' -> '\68850' '\71840' -> '\71872' '\71841' -> '\71873' '\71842' -> '\71874' '\71843' -> '\71875' '\71844' -> '\71876' '\71845' -> '\71877' '\71846' -> '\71878' '\71847' -> '\71879' '\71848' -> '\71880' '\71849' -> '\71881' '\71850' -> '\71882' '\71851' -> '\71883' '\71852' -> '\71884' '\71853' -> '\71885' '\71854' -> '\71886' '\71855' -> '\71887' '\71856' -> '\71888' '\71857' -> '\71889' '\71858' -> '\71890' '\71859' -> '\71891' '\71860' -> '\71892' '\71861' -> '\71893' '\71862' -> '\71894' '\71863' -> '\71895' '\71864' -> '\71896' '\71865' -> '\71897' '\71866' -> '\71898' '\71867' -> '\71899' '\71868' -> '\71900' '\71869' -> '\71901' '\71870' -> '\71902' '\71871' -> '\71903' '\93760' -> '\93792' '\93761' -> '\93793' '\93762' -> '\93794' '\93763' -> '\93795' '\93764' -> '\93796' '\93765' -> '\93797' '\93766' -> '\93798' '\93767' -> '\93799' '\93768' -> '\93800' '\93769' -> '\93801' '\93770' -> '\93802' '\93771' -> '\93803' '\93772' -> '\93804' '\93773' -> '\93805' '\93774' -> '\93806' '\93775' -> '\93807' '\93776' -> '\93808' '\93777' -> '\93809' '\93778' -> '\93810' '\93779' -> '\93811' '\93780' -> '\93812' '\93781' -> '\93813' '\93782' -> '\93814' '\93783' -> '\93815' '\93784' -> '\93816' '\93785' -> '\93817' '\93786' -> '\93818' '\93787' -> '\93819' '\93788' -> '\93820' '\93789' -> '\93821' '\93790' -> '\93822' '\93791' -> '\93823' '\125184' -> '\125218' '\125185' -> '\125219' '\125186' -> '\125220' '\125187' -> '\125221' '\125188' -> '\125222' '\125189' -> '\125223' '\125190' -> '\125224' '\125191' -> '\125225' '\125192' -> '\125226' '\125193' -> '\125227' '\125194' -> '\125228' '\125195' -> '\125229' '\125196' -> '\125230' '\125197' -> '\125231' '\125198' -> '\125232' '\125199' -> '\125233' '\125200' -> '\125234' '\125201' -> '\125235' '\125202' -> '\125236' '\125203' -> '\125237' '\125204' -> '\125238' '\125205' -> '\125239' '\125206' -> '\125240' '\125207' -> '\125241' '\125208' -> '\125242' '\125209' -> '\125243' '\125210' -> '\125244' '\125211' -> '\125245' '\125212' -> '\125246' '\125213' -> '\125247' '\125214' -> '\125248' '\125215' -> '\125249' '\125216' -> '\125250' '\125217' -> '\125251' c -> c unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/SimpleTitleCaseMapping.hs0000644000000000000000000007550307346545000026121 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping (toSimpleTitleCase) where {-# NOINLINE toSimpleTitleCase #-} toSimpleTitleCase :: Char -> Char toSimpleTitleCase = \case 'a' -> 'A' 'b' -> 'B' 'c' -> 'C' 'd' -> 'D' 'e' -> 'E' 'f' -> 'F' 'g' -> 'G' 'h' -> 'H' 'i' -> 'I' 'j' -> 'J' 'k' -> 'K' 'l' -> 'L' 'm' -> 'M' 'n' -> 'N' 'o' -> 'O' 'p' -> 'P' 'q' -> 'Q' 'r' -> 'R' 's' -> 'S' 't' -> 'T' 'u' -> 'U' 'v' -> 'V' 'w' -> 'W' 'x' -> 'X' 'y' -> 'Y' 'z' -> 'Z' '\181' -> '\924' '\224' -> '\192' '\225' -> '\193' '\226' -> '\194' '\227' -> '\195' '\228' -> '\196' '\229' -> '\197' '\230' -> '\198' '\231' -> '\199' '\232' -> '\200' '\233' -> '\201' '\234' -> '\202' '\235' -> '\203' '\236' -> '\204' '\237' -> '\205' '\238' -> '\206' '\239' -> '\207' '\240' -> '\208' '\241' -> '\209' '\242' -> '\210' '\243' -> '\211' '\244' -> '\212' '\245' -> '\213' '\246' -> '\214' '\248' -> '\216' '\249' -> '\217' '\250' -> '\218' '\251' -> '\219' '\252' -> '\220' '\253' -> '\221' '\254' -> '\222' '\255' -> '\376' '\257' -> '\256' '\259' -> '\258' '\261' -> '\260' '\263' -> '\262' '\265' -> '\264' '\267' -> '\266' '\269' -> '\268' '\271' -> '\270' '\273' -> '\272' '\275' -> '\274' '\277' -> '\276' '\279' -> '\278' '\281' -> '\280' '\283' -> '\282' '\285' -> '\284' '\287' -> '\286' '\289' -> '\288' '\291' -> '\290' '\293' -> '\292' '\295' -> '\294' '\297' -> '\296' '\299' -> '\298' '\301' -> '\300' '\303' -> '\302' '\305' -> 'I' '\307' -> '\306' '\309' -> '\308' '\311' -> '\310' '\314' -> '\313' '\316' -> '\315' '\318' -> '\317' '\320' -> '\319' '\322' -> '\321' '\324' -> '\323' '\326' -> '\325' '\328' -> '\327' '\331' -> '\330' '\333' -> '\332' '\335' -> '\334' '\337' -> '\336' '\339' -> '\338' '\341' -> '\340' '\343' -> '\342' '\345' -> '\344' '\347' -> '\346' '\349' -> '\348' '\351' -> '\350' '\353' -> '\352' '\355' -> '\354' '\357' -> '\356' '\359' -> '\358' '\361' -> '\360' '\363' -> '\362' '\365' -> '\364' '\367' -> '\366' '\369' -> '\368' '\371' -> '\370' '\373' -> '\372' '\375' -> '\374' '\378' -> '\377' '\380' -> '\379' '\382' -> '\381' '\383' -> 'S' '\384' -> '\579' '\387' -> '\386' '\389' -> '\388' '\392' -> '\391' '\396' -> '\395' '\402' -> '\401' '\405' -> '\502' '\409' -> '\408' '\410' -> '\573' '\414' -> '\544' '\417' -> '\416' '\419' -> '\418' '\421' -> '\420' '\424' -> '\423' '\429' -> '\428' '\432' -> '\431' '\436' -> '\435' '\438' -> '\437' '\441' -> '\440' '\445' -> '\444' '\447' -> '\503' '\452' -> '\453' '\453' -> '\453' '\454' -> '\453' '\455' -> '\456' '\456' -> '\456' '\457' -> '\456' '\458' -> '\459' '\459' -> '\459' '\460' -> '\459' '\462' -> '\461' '\464' -> '\463' '\466' -> '\465' '\468' -> '\467' '\470' -> '\469' '\472' -> '\471' '\474' -> '\473' '\476' -> '\475' '\477' -> '\398' '\479' -> '\478' '\481' -> '\480' '\483' -> '\482' '\485' -> '\484' '\487' -> '\486' '\489' -> '\488' '\491' -> '\490' '\493' -> '\492' '\495' -> '\494' '\497' -> '\498' '\498' -> '\498' '\499' -> '\498' '\501' -> '\500' '\505' -> '\504' '\507' -> '\506' '\509' -> '\508' '\511' -> '\510' '\513' -> '\512' '\515' -> '\514' '\517' -> '\516' '\519' -> '\518' '\521' -> '\520' '\523' -> '\522' '\525' -> '\524' '\527' -> '\526' '\529' -> '\528' '\531' -> '\530' '\533' -> '\532' '\535' -> '\534' '\537' -> '\536' '\539' -> '\538' '\541' -> '\540' '\543' -> '\542' '\547' -> '\546' '\549' -> '\548' '\551' -> '\550' '\553' -> '\552' '\555' -> '\554' '\557' -> '\556' '\559' -> '\558' '\561' -> '\560' '\563' -> '\562' '\572' -> '\571' '\575' -> '\11390' '\576' -> '\11391' '\578' -> '\577' '\583' -> '\582' '\585' -> '\584' '\587' -> '\586' '\589' -> '\588' '\591' -> '\590' '\592' -> '\11375' '\593' -> '\11373' '\594' -> '\11376' '\595' -> '\385' '\596' -> '\390' '\598' -> '\393' '\599' -> '\394' '\601' -> '\399' '\603' -> '\400' '\604' -> '\42923' '\608' -> '\403' '\609' -> '\42924' '\611' -> '\404' '\613' -> '\42893' '\614' -> '\42922' '\616' -> '\407' '\617' -> '\406' '\618' -> '\42926' '\619' -> '\11362' '\620' -> '\42925' '\623' -> '\412' '\625' -> '\11374' '\626' -> '\413' '\629' -> '\415' '\637' -> '\11364' '\640' -> '\422' '\642' -> '\42949' '\643' -> '\425' '\647' -> '\42929' '\648' -> '\430' '\649' -> '\580' '\650' -> '\433' '\651' -> '\434' '\652' -> '\581' '\658' -> '\439' '\669' -> '\42930' '\670' -> '\42928' '\837' -> '\921' '\881' -> '\880' '\883' -> '\882' '\887' -> '\886' '\891' -> '\1021' '\892' -> '\1022' '\893' -> '\1023' '\940' -> '\902' '\941' -> '\904' '\942' -> '\905' '\943' -> '\906' '\945' -> '\913' '\946' -> '\914' '\947' -> '\915' '\948' -> '\916' '\949' -> '\917' '\950' -> '\918' '\951' -> '\919' '\952' -> '\920' '\953' -> '\921' '\954' -> '\922' '\955' -> '\923' '\956' -> '\924' '\957' -> '\925' '\958' -> '\926' '\959' -> '\927' '\960' -> '\928' '\961' -> '\929' '\962' -> '\931' '\963' -> '\931' '\964' -> '\932' '\965' -> '\933' '\966' -> '\934' '\967' -> '\935' '\968' -> '\936' '\969' -> '\937' '\970' -> '\938' '\971' -> '\939' '\972' -> '\908' '\973' -> '\910' '\974' -> '\911' '\976' -> '\914' '\977' -> '\920' '\981' -> '\934' '\982' -> '\928' '\983' -> '\975' '\985' -> '\984' '\987' -> '\986' '\989' -> '\988' '\991' -> '\990' '\993' -> '\992' '\995' -> '\994' '\997' -> '\996' '\999' -> '\998' '\1001' -> '\1000' '\1003' -> '\1002' '\1005' -> '\1004' '\1007' -> '\1006' '\1008' -> '\922' '\1009' -> '\929' '\1010' -> '\1017' '\1011' -> '\895' '\1013' -> '\917' '\1016' -> '\1015' '\1019' -> '\1018' '\1072' -> '\1040' '\1073' -> '\1041' '\1074' -> '\1042' '\1075' -> '\1043' '\1076' -> '\1044' '\1077' -> '\1045' '\1078' -> '\1046' '\1079' -> '\1047' '\1080' -> '\1048' '\1081' -> '\1049' '\1082' -> '\1050' '\1083' -> '\1051' '\1084' -> '\1052' '\1085' -> '\1053' '\1086' -> '\1054' '\1087' -> '\1055' '\1088' -> '\1056' '\1089' -> '\1057' '\1090' -> '\1058' '\1091' -> '\1059' '\1092' -> '\1060' '\1093' -> '\1061' '\1094' -> '\1062' '\1095' -> '\1063' '\1096' -> '\1064' '\1097' -> '\1065' '\1098' -> '\1066' '\1099' -> '\1067' '\1100' -> '\1068' '\1101' -> '\1069' '\1102' -> '\1070' '\1103' -> '\1071' '\1104' -> '\1024' '\1105' -> '\1025' '\1106' -> '\1026' '\1107' -> '\1027' '\1108' -> '\1028' '\1109' -> '\1029' '\1110' -> '\1030' '\1111' -> '\1031' '\1112' -> '\1032' '\1113' -> '\1033' '\1114' -> '\1034' '\1115' -> '\1035' '\1116' -> '\1036' '\1117' -> '\1037' '\1118' -> '\1038' '\1119' -> '\1039' '\1121' -> '\1120' '\1123' -> '\1122' '\1125' -> '\1124' '\1127' -> '\1126' '\1129' -> '\1128' '\1131' -> '\1130' '\1133' -> '\1132' '\1135' -> '\1134' '\1137' -> '\1136' '\1139' -> '\1138' '\1141' -> '\1140' '\1143' -> '\1142' '\1145' -> '\1144' '\1147' -> '\1146' '\1149' -> '\1148' '\1151' -> '\1150' '\1153' -> '\1152' '\1163' -> '\1162' '\1165' -> '\1164' '\1167' -> '\1166' '\1169' -> '\1168' '\1171' -> '\1170' '\1173' -> '\1172' '\1175' -> '\1174' '\1177' -> '\1176' '\1179' -> '\1178' '\1181' -> '\1180' '\1183' -> '\1182' '\1185' -> '\1184' '\1187' -> '\1186' '\1189' -> '\1188' '\1191' -> '\1190' '\1193' -> '\1192' '\1195' -> '\1194' '\1197' -> '\1196' '\1199' -> '\1198' '\1201' -> '\1200' '\1203' -> '\1202' '\1205' -> '\1204' '\1207' -> '\1206' '\1209' -> '\1208' '\1211' -> '\1210' '\1213' -> '\1212' '\1215' -> '\1214' '\1218' -> '\1217' '\1220' -> '\1219' '\1222' -> '\1221' '\1224' -> '\1223' '\1226' -> '\1225' '\1228' -> '\1227' '\1230' -> '\1229' '\1231' -> '\1216' '\1233' -> '\1232' '\1235' -> '\1234' '\1237' -> '\1236' '\1239' -> '\1238' '\1241' -> '\1240' '\1243' -> '\1242' '\1245' -> '\1244' '\1247' -> '\1246' '\1249' -> '\1248' '\1251' -> '\1250' '\1253' -> '\1252' '\1255' -> '\1254' '\1257' -> '\1256' '\1259' -> '\1258' '\1261' -> '\1260' '\1263' -> '\1262' '\1265' -> '\1264' '\1267' -> '\1266' '\1269' -> '\1268' '\1271' -> '\1270' '\1273' -> '\1272' '\1275' -> '\1274' '\1277' -> '\1276' '\1279' -> '\1278' '\1281' -> '\1280' '\1283' -> '\1282' '\1285' -> '\1284' '\1287' -> '\1286' '\1289' -> '\1288' '\1291' -> '\1290' '\1293' -> '\1292' '\1295' -> '\1294' '\1297' -> '\1296' '\1299' -> '\1298' '\1301' -> '\1300' '\1303' -> '\1302' '\1305' -> '\1304' '\1307' -> '\1306' '\1309' -> '\1308' '\1311' -> '\1310' '\1313' -> '\1312' '\1315' -> '\1314' '\1317' -> '\1316' '\1319' -> '\1318' '\1321' -> '\1320' '\1323' -> '\1322' '\1325' -> '\1324' '\1327' -> '\1326' '\1377' -> '\1329' '\1378' -> '\1330' '\1379' -> '\1331' '\1380' -> '\1332' '\1381' -> '\1333' '\1382' -> '\1334' '\1383' -> '\1335' '\1384' -> '\1336' '\1385' -> '\1337' '\1386' -> '\1338' '\1387' -> '\1339' '\1388' -> '\1340' '\1389' -> '\1341' '\1390' -> '\1342' '\1391' -> '\1343' '\1392' -> '\1344' '\1393' -> '\1345' '\1394' -> '\1346' '\1395' -> '\1347' '\1396' -> '\1348' '\1397' -> '\1349' '\1398' -> '\1350' '\1399' -> '\1351' '\1400' -> '\1352' '\1401' -> '\1353' '\1402' -> '\1354' '\1403' -> '\1355' '\1404' -> '\1356' '\1405' -> '\1357' '\1406' -> '\1358' '\1407' -> '\1359' '\1408' -> '\1360' '\1409' -> '\1361' '\1410' -> '\1362' '\1411' -> '\1363' '\1412' -> '\1364' '\1413' -> '\1365' '\1414' -> '\1366' '\4304' -> '\4304' '\4305' -> '\4305' '\4306' -> '\4306' '\4307' -> '\4307' '\4308' -> '\4308' '\4309' -> '\4309' '\4310' -> '\4310' '\4311' -> '\4311' '\4312' -> '\4312' '\4313' -> '\4313' '\4314' -> '\4314' '\4315' -> '\4315' '\4316' -> '\4316' '\4317' -> '\4317' '\4318' -> '\4318' '\4319' -> '\4319' '\4320' -> '\4320' '\4321' -> '\4321' '\4322' -> '\4322' '\4323' -> '\4323' '\4324' -> '\4324' '\4325' -> '\4325' '\4326' -> '\4326' '\4327' -> '\4327' '\4328' -> '\4328' '\4329' -> '\4329' '\4330' -> '\4330' '\4331' -> '\4331' '\4332' -> '\4332' '\4333' -> '\4333' '\4334' -> '\4334' '\4335' -> '\4335' '\4336' -> '\4336' '\4337' -> '\4337' '\4338' -> '\4338' '\4339' -> '\4339' '\4340' -> '\4340' '\4341' -> '\4341' '\4342' -> '\4342' '\4343' -> '\4343' '\4344' -> '\4344' '\4345' -> '\4345' '\4346' -> '\4346' '\4349' -> '\4349' '\4350' -> '\4350' '\4351' -> '\4351' '\5112' -> '\5104' '\5113' -> '\5105' '\5114' -> '\5106' '\5115' -> '\5107' '\5116' -> '\5108' '\5117' -> '\5109' '\7296' -> '\1042' '\7297' -> '\1044' '\7298' -> '\1054' '\7299' -> '\1057' '\7300' -> '\1058' '\7301' -> '\1058' '\7302' -> '\1066' '\7303' -> '\1122' '\7304' -> '\42570' '\7545' -> '\42877' '\7549' -> '\11363' '\7566' -> '\42950' '\7681' -> '\7680' '\7683' -> '\7682' '\7685' -> '\7684' '\7687' -> '\7686' '\7689' -> '\7688' '\7691' -> '\7690' '\7693' -> '\7692' '\7695' -> '\7694' '\7697' -> '\7696' '\7699' -> '\7698' '\7701' -> '\7700' '\7703' -> '\7702' '\7705' -> '\7704' '\7707' -> '\7706' '\7709' -> '\7708' '\7711' -> '\7710' '\7713' -> '\7712' '\7715' -> '\7714' '\7717' -> '\7716' '\7719' -> '\7718' '\7721' -> '\7720' '\7723' -> '\7722' '\7725' -> '\7724' '\7727' -> '\7726' '\7729' -> '\7728' '\7731' -> '\7730' '\7733' -> '\7732' '\7735' -> '\7734' '\7737' -> '\7736' '\7739' -> '\7738' '\7741' -> '\7740' '\7743' -> '\7742' '\7745' -> '\7744' '\7747' -> '\7746' '\7749' -> '\7748' '\7751' -> '\7750' '\7753' -> '\7752' '\7755' -> '\7754' '\7757' -> '\7756' '\7759' -> '\7758' '\7761' -> '\7760' '\7763' -> '\7762' '\7765' -> '\7764' '\7767' -> '\7766' '\7769' -> '\7768' '\7771' -> '\7770' '\7773' -> '\7772' '\7775' -> '\7774' '\7777' -> '\7776' '\7779' -> '\7778' '\7781' -> '\7780' '\7783' -> '\7782' '\7785' -> '\7784' '\7787' -> '\7786' '\7789' -> '\7788' '\7791' -> '\7790' '\7793' -> '\7792' '\7795' -> '\7794' '\7797' -> '\7796' '\7799' -> '\7798' '\7801' -> '\7800' '\7803' -> '\7802' '\7805' -> '\7804' '\7807' -> '\7806' '\7809' -> '\7808' '\7811' -> '\7810' '\7813' -> '\7812' '\7815' -> '\7814' '\7817' -> '\7816' '\7819' -> '\7818' '\7821' -> '\7820' '\7823' -> '\7822' '\7825' -> '\7824' '\7827' -> '\7826' '\7829' -> '\7828' '\7835' -> '\7776' '\7841' -> '\7840' '\7843' -> '\7842' '\7845' -> '\7844' '\7847' -> '\7846' '\7849' -> '\7848' '\7851' -> '\7850' '\7853' -> '\7852' '\7855' -> '\7854' '\7857' -> '\7856' '\7859' -> '\7858' '\7861' -> '\7860' '\7863' -> '\7862' '\7865' -> '\7864' '\7867' -> '\7866' '\7869' -> '\7868' '\7871' -> '\7870' '\7873' -> '\7872' '\7875' -> '\7874' '\7877' -> '\7876' '\7879' -> '\7878' '\7881' -> '\7880' '\7883' -> '\7882' '\7885' -> '\7884' '\7887' -> '\7886' '\7889' -> '\7888' '\7891' -> '\7890' '\7893' -> '\7892' '\7895' -> '\7894' '\7897' -> '\7896' '\7899' -> '\7898' '\7901' -> '\7900' '\7903' -> '\7902' '\7905' -> '\7904' '\7907' -> '\7906' '\7909' -> '\7908' '\7911' -> '\7910' '\7913' -> '\7912' '\7915' -> '\7914' '\7917' -> '\7916' '\7919' -> '\7918' '\7921' -> '\7920' '\7923' -> '\7922' '\7925' -> '\7924' '\7927' -> '\7926' '\7929' -> '\7928' '\7931' -> '\7930' '\7933' -> '\7932' '\7935' -> '\7934' '\7936' -> '\7944' '\7937' -> '\7945' '\7938' -> '\7946' '\7939' -> '\7947' '\7940' -> '\7948' '\7941' -> '\7949' '\7942' -> '\7950' '\7943' -> '\7951' '\7952' -> '\7960' '\7953' -> '\7961' '\7954' -> '\7962' '\7955' -> '\7963' '\7956' -> '\7964' '\7957' -> '\7965' '\7968' -> '\7976' '\7969' -> '\7977' '\7970' -> '\7978' '\7971' -> '\7979' '\7972' -> '\7980' '\7973' -> '\7981' '\7974' -> '\7982' '\7975' -> '\7983' '\7984' -> '\7992' '\7985' -> '\7993' '\7986' -> '\7994' '\7987' -> '\7995' '\7988' -> '\7996' '\7989' -> '\7997' '\7990' -> '\7998' '\7991' -> '\7999' '\8000' -> '\8008' '\8001' -> '\8009' '\8002' -> '\8010' '\8003' -> '\8011' '\8004' -> '\8012' '\8005' -> '\8013' '\8017' -> '\8025' '\8019' -> '\8027' '\8021' -> '\8029' '\8023' -> '\8031' '\8032' -> '\8040' '\8033' -> '\8041' '\8034' -> '\8042' '\8035' -> '\8043' '\8036' -> '\8044' '\8037' -> '\8045' '\8038' -> '\8046' '\8039' -> '\8047' '\8048' -> '\8122' '\8049' -> '\8123' '\8050' -> '\8136' '\8051' -> '\8137' '\8052' -> '\8138' '\8053' -> '\8139' '\8054' -> '\8154' '\8055' -> '\8155' '\8056' -> '\8184' '\8057' -> '\8185' '\8058' -> '\8170' '\8059' -> '\8171' '\8060' -> '\8186' '\8061' -> '\8187' '\8064' -> '\8072' '\8065' -> '\8073' '\8066' -> '\8074' '\8067' -> '\8075' '\8068' -> '\8076' '\8069' -> '\8077' '\8070' -> '\8078' '\8071' -> '\8079' '\8080' -> '\8088' '\8081' -> '\8089' '\8082' -> '\8090' '\8083' -> '\8091' '\8084' -> '\8092' '\8085' -> '\8093' '\8086' -> '\8094' '\8087' -> '\8095' '\8096' -> '\8104' '\8097' -> '\8105' '\8098' -> '\8106' '\8099' -> '\8107' '\8100' -> '\8108' '\8101' -> '\8109' '\8102' -> '\8110' '\8103' -> '\8111' '\8112' -> '\8120' '\8113' -> '\8121' '\8115' -> '\8124' '\8126' -> '\921' '\8131' -> '\8140' '\8144' -> '\8152' '\8145' -> '\8153' '\8160' -> '\8168' '\8161' -> '\8169' '\8165' -> '\8172' '\8179' -> '\8188' '\8526' -> '\8498' '\8560' -> '\8544' '\8561' -> '\8545' '\8562' -> '\8546' '\8563' -> '\8547' '\8564' -> '\8548' '\8565' -> '\8549' '\8566' -> '\8550' '\8567' -> '\8551' '\8568' -> '\8552' '\8569' -> '\8553' '\8570' -> '\8554' '\8571' -> '\8555' '\8572' -> '\8556' '\8573' -> '\8557' '\8574' -> '\8558' '\8575' -> '\8559' '\8580' -> '\8579' '\9424' -> '\9398' '\9425' -> '\9399' '\9426' -> '\9400' '\9427' -> '\9401' '\9428' -> '\9402' '\9429' -> '\9403' '\9430' -> '\9404' '\9431' -> '\9405' '\9432' -> '\9406' '\9433' -> '\9407' '\9434' -> '\9408' '\9435' -> '\9409' '\9436' -> '\9410' '\9437' -> '\9411' '\9438' -> '\9412' '\9439' -> '\9413' '\9440' -> '\9414' '\9441' -> '\9415' '\9442' -> '\9416' '\9443' -> '\9417' '\9444' -> '\9418' '\9445' -> '\9419' '\9446' -> '\9420' '\9447' -> '\9421' '\9448' -> '\9422' '\9449' -> '\9423' '\11312' -> '\11264' '\11313' -> '\11265' '\11314' -> '\11266' '\11315' -> '\11267' '\11316' -> '\11268' '\11317' -> '\11269' '\11318' -> '\11270' '\11319' -> '\11271' '\11320' -> '\11272' '\11321' -> '\11273' '\11322' -> '\11274' '\11323' -> '\11275' '\11324' -> '\11276' '\11325' -> '\11277' '\11326' -> '\11278' '\11327' -> '\11279' '\11328' -> '\11280' '\11329' -> '\11281' '\11330' -> '\11282' '\11331' -> '\11283' '\11332' -> '\11284' '\11333' -> '\11285' '\11334' -> '\11286' '\11335' -> '\11287' '\11336' -> '\11288' '\11337' -> '\11289' '\11338' -> '\11290' '\11339' -> '\11291' '\11340' -> '\11292' '\11341' -> '\11293' '\11342' -> '\11294' '\11343' -> '\11295' '\11344' -> '\11296' '\11345' -> '\11297' '\11346' -> '\11298' '\11347' -> '\11299' '\11348' -> '\11300' '\11349' -> '\11301' '\11350' -> '\11302' '\11351' -> '\11303' '\11352' -> '\11304' '\11353' -> '\11305' '\11354' -> '\11306' '\11355' -> '\11307' '\11356' -> '\11308' '\11357' -> '\11309' '\11358' -> '\11310' '\11359' -> '\11311' '\11361' -> '\11360' '\11365' -> '\570' '\11366' -> '\574' '\11368' -> '\11367' '\11370' -> '\11369' '\11372' -> '\11371' '\11379' -> '\11378' '\11382' -> '\11381' '\11393' -> '\11392' '\11395' -> '\11394' '\11397' -> '\11396' '\11399' -> '\11398' '\11401' -> '\11400' '\11403' -> '\11402' '\11405' -> '\11404' '\11407' -> '\11406' '\11409' -> '\11408' '\11411' -> '\11410' '\11413' -> '\11412' '\11415' -> '\11414' '\11417' -> '\11416' '\11419' -> '\11418' '\11421' -> '\11420' '\11423' -> '\11422' '\11425' -> '\11424' '\11427' -> '\11426' '\11429' -> '\11428' '\11431' -> '\11430' '\11433' -> '\11432' '\11435' -> '\11434' '\11437' -> '\11436' '\11439' -> '\11438' '\11441' -> '\11440' '\11443' -> '\11442' '\11445' -> '\11444' '\11447' -> '\11446' '\11449' -> '\11448' '\11451' -> '\11450' '\11453' -> '\11452' '\11455' -> '\11454' '\11457' -> '\11456' '\11459' -> '\11458' '\11461' -> '\11460' '\11463' -> '\11462' '\11465' -> '\11464' '\11467' -> '\11466' '\11469' -> '\11468' '\11471' -> '\11470' '\11473' -> '\11472' '\11475' -> '\11474' '\11477' -> '\11476' '\11479' -> '\11478' '\11481' -> '\11480' '\11483' -> '\11482' '\11485' -> '\11484' '\11487' -> '\11486' '\11489' -> '\11488' '\11491' -> '\11490' '\11500' -> '\11499' '\11502' -> '\11501' '\11507' -> '\11506' '\11520' -> '\4256' '\11521' -> '\4257' '\11522' -> '\4258' '\11523' -> '\4259' '\11524' -> '\4260' '\11525' -> '\4261' '\11526' -> '\4262' '\11527' -> '\4263' '\11528' -> '\4264' '\11529' -> '\4265' '\11530' -> '\4266' '\11531' -> '\4267' '\11532' -> '\4268' '\11533' -> '\4269' '\11534' -> '\4270' '\11535' -> '\4271' '\11536' -> '\4272' '\11537' -> '\4273' '\11538' -> '\4274' '\11539' -> '\4275' '\11540' -> '\4276' '\11541' -> '\4277' '\11542' -> '\4278' '\11543' -> '\4279' '\11544' -> '\4280' '\11545' -> '\4281' '\11546' -> '\4282' '\11547' -> '\4283' '\11548' -> '\4284' '\11549' -> '\4285' '\11550' -> '\4286' '\11551' -> '\4287' '\11552' -> '\4288' '\11553' -> '\4289' '\11554' -> '\4290' '\11555' -> '\4291' '\11556' -> '\4292' '\11557' -> '\4293' '\11559' -> '\4295' '\11565' -> '\4301' '\42561' -> '\42560' '\42563' -> '\42562' '\42565' -> '\42564' '\42567' -> '\42566' '\42569' -> '\42568' '\42571' -> '\42570' '\42573' -> '\42572' '\42575' -> '\42574' '\42577' -> '\42576' '\42579' -> '\42578' '\42581' -> '\42580' '\42583' -> '\42582' '\42585' -> '\42584' '\42587' -> '\42586' '\42589' -> '\42588' '\42591' -> '\42590' '\42593' -> '\42592' '\42595' -> '\42594' '\42597' -> '\42596' '\42599' -> '\42598' '\42601' -> '\42600' '\42603' -> '\42602' '\42605' -> '\42604' '\42625' -> '\42624' '\42627' -> '\42626' '\42629' -> '\42628' '\42631' -> '\42630' '\42633' -> '\42632' '\42635' -> '\42634' '\42637' -> '\42636' '\42639' -> '\42638' '\42641' -> '\42640' '\42643' -> '\42642' '\42645' -> '\42644' '\42647' -> '\42646' '\42649' -> '\42648' '\42651' -> '\42650' '\42787' -> '\42786' '\42789' -> '\42788' '\42791' -> '\42790' '\42793' -> '\42792' '\42795' -> '\42794' '\42797' -> '\42796' '\42799' -> '\42798' '\42803' -> '\42802' '\42805' -> '\42804' '\42807' -> '\42806' '\42809' -> '\42808' '\42811' -> '\42810' '\42813' -> '\42812' '\42815' -> '\42814' '\42817' -> '\42816' '\42819' -> '\42818' '\42821' -> '\42820' '\42823' -> '\42822' '\42825' -> '\42824' '\42827' -> '\42826' '\42829' -> '\42828' '\42831' -> '\42830' '\42833' -> '\42832' '\42835' -> '\42834' '\42837' -> '\42836' '\42839' -> '\42838' '\42841' -> '\42840' '\42843' -> '\42842' '\42845' -> '\42844' '\42847' -> '\42846' '\42849' -> '\42848' '\42851' -> '\42850' '\42853' -> '\42852' '\42855' -> '\42854' '\42857' -> '\42856' '\42859' -> '\42858' '\42861' -> '\42860' '\42863' -> '\42862' '\42874' -> '\42873' '\42876' -> '\42875' '\42879' -> '\42878' '\42881' -> '\42880' '\42883' -> '\42882' '\42885' -> '\42884' '\42887' -> '\42886' '\42892' -> '\42891' '\42897' -> '\42896' '\42899' -> '\42898' '\42900' -> '\42948' '\42903' -> '\42902' '\42905' -> '\42904' '\42907' -> '\42906' '\42909' -> '\42908' '\42911' -> '\42910' '\42913' -> '\42912' '\42915' -> '\42914' '\42917' -> '\42916' '\42919' -> '\42918' '\42921' -> '\42920' '\42933' -> '\42932' '\42935' -> '\42934' '\42937' -> '\42936' '\42939' -> '\42938' '\42941' -> '\42940' '\42943' -> '\42942' '\42945' -> '\42944' '\42947' -> '\42946' '\42952' -> '\42951' '\42954' -> '\42953' '\42961' -> '\42960' '\42967' -> '\42966' '\42969' -> '\42968' '\42998' -> '\42997' '\43859' -> '\42931' '\43888' -> '\5024' '\43889' -> '\5025' '\43890' -> '\5026' '\43891' -> '\5027' '\43892' -> '\5028' '\43893' -> '\5029' '\43894' -> '\5030' '\43895' -> '\5031' '\43896' -> '\5032' '\43897' -> '\5033' '\43898' -> '\5034' '\43899' -> '\5035' '\43900' -> '\5036' '\43901' -> '\5037' '\43902' -> '\5038' '\43903' -> '\5039' '\43904' -> '\5040' '\43905' -> '\5041' '\43906' -> '\5042' '\43907' -> '\5043' '\43908' -> '\5044' '\43909' -> '\5045' '\43910' -> '\5046' '\43911' -> '\5047' '\43912' -> '\5048' '\43913' -> '\5049' '\43914' -> '\5050' '\43915' -> '\5051' '\43916' -> '\5052' '\43917' -> '\5053' '\43918' -> '\5054' '\43919' -> '\5055' '\43920' -> '\5056' '\43921' -> '\5057' '\43922' -> '\5058' '\43923' -> '\5059' '\43924' -> '\5060' '\43925' -> '\5061' '\43926' -> '\5062' '\43927' -> '\5063' '\43928' -> '\5064' '\43929' -> '\5065' '\43930' -> '\5066' '\43931' -> '\5067' '\43932' -> '\5068' '\43933' -> '\5069' '\43934' -> '\5070' '\43935' -> '\5071' '\43936' -> '\5072' '\43937' -> '\5073' '\43938' -> '\5074' '\43939' -> '\5075' '\43940' -> '\5076' '\43941' -> '\5077' '\43942' -> '\5078' '\43943' -> '\5079' '\43944' -> '\5080' '\43945' -> '\5081' '\43946' -> '\5082' '\43947' -> '\5083' '\43948' -> '\5084' '\43949' -> '\5085' '\43950' -> '\5086' '\43951' -> '\5087' '\43952' -> '\5088' '\43953' -> '\5089' '\43954' -> '\5090' '\43955' -> '\5091' '\43956' -> '\5092' '\43957' -> '\5093' '\43958' -> '\5094' '\43959' -> '\5095' '\43960' -> '\5096' '\43961' -> '\5097' '\43962' -> '\5098' '\43963' -> '\5099' '\43964' -> '\5100' '\43965' -> '\5101' '\43966' -> '\5102' '\43967' -> '\5103' '\65345' -> '\65313' '\65346' -> '\65314' '\65347' -> '\65315' '\65348' -> '\65316' '\65349' -> '\65317' '\65350' -> '\65318' '\65351' -> '\65319' '\65352' -> '\65320' '\65353' -> '\65321' '\65354' -> '\65322' '\65355' -> '\65323' '\65356' -> '\65324' '\65357' -> '\65325' '\65358' -> '\65326' '\65359' -> '\65327' '\65360' -> '\65328' '\65361' -> '\65329' '\65362' -> '\65330' '\65363' -> '\65331' '\65364' -> '\65332' '\65365' -> '\65333' '\65366' -> '\65334' '\65367' -> '\65335' '\65368' -> '\65336' '\65369' -> '\65337' '\65370' -> '\65338' '\66600' -> '\66560' '\66601' -> '\66561' '\66602' -> '\66562' '\66603' -> '\66563' '\66604' -> '\66564' '\66605' -> '\66565' '\66606' -> '\66566' '\66607' -> '\66567' '\66608' -> '\66568' '\66609' -> '\66569' '\66610' -> '\66570' '\66611' -> '\66571' '\66612' -> '\66572' '\66613' -> '\66573' '\66614' -> '\66574' '\66615' -> '\66575' '\66616' -> '\66576' '\66617' -> '\66577' '\66618' -> '\66578' '\66619' -> '\66579' '\66620' -> '\66580' '\66621' -> '\66581' '\66622' -> '\66582' '\66623' -> '\66583' '\66624' -> '\66584' '\66625' -> '\66585' '\66626' -> '\66586' '\66627' -> '\66587' '\66628' -> '\66588' '\66629' -> '\66589' '\66630' -> '\66590' '\66631' -> '\66591' '\66632' -> '\66592' '\66633' -> '\66593' '\66634' -> '\66594' '\66635' -> '\66595' '\66636' -> '\66596' '\66637' -> '\66597' '\66638' -> '\66598' '\66639' -> '\66599' '\66776' -> '\66736' '\66777' -> '\66737' '\66778' -> '\66738' '\66779' -> '\66739' '\66780' -> '\66740' '\66781' -> '\66741' '\66782' -> '\66742' '\66783' -> '\66743' '\66784' -> '\66744' '\66785' -> '\66745' '\66786' -> '\66746' '\66787' -> '\66747' '\66788' -> '\66748' '\66789' -> '\66749' '\66790' -> '\66750' '\66791' -> '\66751' '\66792' -> '\66752' '\66793' -> '\66753' '\66794' -> '\66754' '\66795' -> '\66755' '\66796' -> '\66756' '\66797' -> '\66757' '\66798' -> '\66758' '\66799' -> '\66759' '\66800' -> '\66760' '\66801' -> '\66761' '\66802' -> '\66762' '\66803' -> '\66763' '\66804' -> '\66764' '\66805' -> '\66765' '\66806' -> '\66766' '\66807' -> '\66767' '\66808' -> '\66768' '\66809' -> '\66769' '\66810' -> '\66770' '\66811' -> '\66771' '\66967' -> '\66928' '\66968' -> '\66929' '\66969' -> '\66930' '\66970' -> '\66931' '\66971' -> '\66932' '\66972' -> '\66933' '\66973' -> '\66934' '\66974' -> '\66935' '\66975' -> '\66936' '\66976' -> '\66937' '\66977' -> '\66938' '\66979' -> '\66940' '\66980' -> '\66941' '\66981' -> '\66942' '\66982' -> '\66943' '\66983' -> '\66944' '\66984' -> '\66945' '\66985' -> '\66946' '\66986' -> '\66947' '\66987' -> '\66948' '\66988' -> '\66949' '\66989' -> '\66950' '\66990' -> '\66951' '\66991' -> '\66952' '\66992' -> '\66953' '\66993' -> '\66954' '\66995' -> '\66956' '\66996' -> '\66957' '\66997' -> '\66958' '\66998' -> '\66959' '\66999' -> '\66960' '\67000' -> '\66961' '\67001' -> '\66962' '\67003' -> '\66964' '\67004' -> '\66965' '\68800' -> '\68736' '\68801' -> '\68737' '\68802' -> '\68738' '\68803' -> '\68739' '\68804' -> '\68740' '\68805' -> '\68741' '\68806' -> '\68742' '\68807' -> '\68743' '\68808' -> '\68744' '\68809' -> '\68745' '\68810' -> '\68746' '\68811' -> '\68747' '\68812' -> '\68748' '\68813' -> '\68749' '\68814' -> '\68750' '\68815' -> '\68751' '\68816' -> '\68752' '\68817' -> '\68753' '\68818' -> '\68754' '\68819' -> '\68755' '\68820' -> '\68756' '\68821' -> '\68757' '\68822' -> '\68758' '\68823' -> '\68759' '\68824' -> '\68760' '\68825' -> '\68761' '\68826' -> '\68762' '\68827' -> '\68763' '\68828' -> '\68764' '\68829' -> '\68765' '\68830' -> '\68766' '\68831' -> '\68767' '\68832' -> '\68768' '\68833' -> '\68769' '\68834' -> '\68770' '\68835' -> '\68771' '\68836' -> '\68772' '\68837' -> '\68773' '\68838' -> '\68774' '\68839' -> '\68775' '\68840' -> '\68776' '\68841' -> '\68777' '\68842' -> '\68778' '\68843' -> '\68779' '\68844' -> '\68780' '\68845' -> '\68781' '\68846' -> '\68782' '\68847' -> '\68783' '\68848' -> '\68784' '\68849' -> '\68785' '\68850' -> '\68786' '\71872' -> '\71840' '\71873' -> '\71841' '\71874' -> '\71842' '\71875' -> '\71843' '\71876' -> '\71844' '\71877' -> '\71845' '\71878' -> '\71846' '\71879' -> '\71847' '\71880' -> '\71848' '\71881' -> '\71849' '\71882' -> '\71850' '\71883' -> '\71851' '\71884' -> '\71852' '\71885' -> '\71853' '\71886' -> '\71854' '\71887' -> '\71855' '\71888' -> '\71856' '\71889' -> '\71857' '\71890' -> '\71858' '\71891' -> '\71859' '\71892' -> '\71860' '\71893' -> '\71861' '\71894' -> '\71862' '\71895' -> '\71863' '\71896' -> '\71864' '\71897' -> '\71865' '\71898' -> '\71866' '\71899' -> '\71867' '\71900' -> '\71868' '\71901' -> '\71869' '\71902' -> '\71870' '\71903' -> '\71871' '\93792' -> '\93760' '\93793' -> '\93761' '\93794' -> '\93762' '\93795' -> '\93763' '\93796' -> '\93764' '\93797' -> '\93765' '\93798' -> '\93766' '\93799' -> '\93767' '\93800' -> '\93768' '\93801' -> '\93769' '\93802' -> '\93770' '\93803' -> '\93771' '\93804' -> '\93772' '\93805' -> '\93773' '\93806' -> '\93774' '\93807' -> '\93775' '\93808' -> '\93776' '\93809' -> '\93777' '\93810' -> '\93778' '\93811' -> '\93779' '\93812' -> '\93780' '\93813' -> '\93781' '\93814' -> '\93782' '\93815' -> '\93783' '\93816' -> '\93784' '\93817' -> '\93785' '\93818' -> '\93786' '\93819' -> '\93787' '\93820' -> '\93788' '\93821' -> '\93789' '\93822' -> '\93790' '\93823' -> '\93791' '\125218' -> '\125184' '\125219' -> '\125185' '\125220' -> '\125186' '\125221' -> '\125187' '\125222' -> '\125188' '\125223' -> '\125189' '\125224' -> '\125190' '\125225' -> '\125191' '\125226' -> '\125192' '\125227' -> '\125193' '\125228' -> '\125194' '\125229' -> '\125195' '\125230' -> '\125196' '\125231' -> '\125197' '\125232' -> '\125198' '\125233' -> '\125199' '\125234' -> '\125200' '\125235' -> '\125201' '\125236' -> '\125202' '\125237' -> '\125203' '\125238' -> '\125204' '\125239' -> '\125205' '\125240' -> '\125206' '\125241' -> '\125207' '\125242' -> '\125208' '\125243' -> '\125209' '\125244' -> '\125210' '\125245' -> '\125211' '\125246' -> '\125212' '\125247' -> '\125213' '\125248' -> '\125214' '\125249' -> '\125215' '\125250' -> '\125216' '\125251' -> '\125217' c -> c unicode-data-0.6.0/lib/Unicode/Internal/Char/UnicodeData/SimpleUpperCaseMapping.hs0000644000000000000000000007536707346545000026143 0ustar0000000000000000-- autogenerated from https://www.unicode.org/Public/15.1.0/ucd/UnicodeData.txt -- | -- Module : Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping -- Copyright : (c) 2020 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental {-# OPTIONS_HADDOCK hide #-} module Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping (toSimpleUpperCase) where {-# NOINLINE toSimpleUpperCase #-} toSimpleUpperCase :: Char -> Char toSimpleUpperCase = \case 'a' -> 'A' 'b' -> 'B' 'c' -> 'C' 'd' -> 'D' 'e' -> 'E' 'f' -> 'F' 'g' -> 'G' 'h' -> 'H' 'i' -> 'I' 'j' -> 'J' 'k' -> 'K' 'l' -> 'L' 'm' -> 'M' 'n' -> 'N' 'o' -> 'O' 'p' -> 'P' 'q' -> 'Q' 'r' -> 'R' 's' -> 'S' 't' -> 'T' 'u' -> 'U' 'v' -> 'V' 'w' -> 'W' 'x' -> 'X' 'y' -> 'Y' 'z' -> 'Z' '\181' -> '\924' '\224' -> '\192' '\225' -> '\193' '\226' -> '\194' '\227' -> '\195' '\228' -> '\196' '\229' -> '\197' '\230' -> '\198' '\231' -> '\199' '\232' -> '\200' '\233' -> '\201' '\234' -> '\202' '\235' -> '\203' '\236' -> '\204' '\237' -> '\205' '\238' -> '\206' '\239' -> '\207' '\240' -> '\208' '\241' -> '\209' '\242' -> '\210' '\243' -> '\211' '\244' -> '\212' '\245' -> '\213' '\246' -> '\214' '\248' -> '\216' '\249' -> '\217' '\250' -> '\218' '\251' -> '\219' '\252' -> '\220' '\253' -> '\221' '\254' -> '\222' '\255' -> '\376' '\257' -> '\256' '\259' -> '\258' '\261' -> '\260' '\263' -> '\262' '\265' -> '\264' '\267' -> '\266' '\269' -> '\268' '\271' -> '\270' '\273' -> '\272' '\275' -> '\274' '\277' -> '\276' '\279' -> '\278' '\281' -> '\280' '\283' -> '\282' '\285' -> '\284' '\287' -> '\286' '\289' -> '\288' '\291' -> '\290' '\293' -> '\292' '\295' -> '\294' '\297' -> '\296' '\299' -> '\298' '\301' -> '\300' '\303' -> '\302' '\305' -> 'I' '\307' -> '\306' '\309' -> '\308' '\311' -> '\310' '\314' -> '\313' '\316' -> '\315' '\318' -> '\317' '\320' -> '\319' '\322' -> '\321' '\324' -> '\323' '\326' -> '\325' '\328' -> '\327' '\331' -> '\330' '\333' -> '\332' '\335' -> '\334' '\337' -> '\336' '\339' -> '\338' '\341' -> '\340' '\343' -> '\342' '\345' -> '\344' '\347' -> '\346' '\349' -> '\348' '\351' -> '\350' '\353' -> '\352' '\355' -> '\354' '\357' -> '\356' '\359' -> '\358' '\361' -> '\360' '\363' -> '\362' '\365' -> '\364' '\367' -> '\366' '\369' -> '\368' '\371' -> '\370' '\373' -> '\372' '\375' -> '\374' '\378' -> '\377' '\380' -> '\379' '\382' -> '\381' '\383' -> 'S' '\384' -> '\579' '\387' -> '\386' '\389' -> '\388' '\392' -> '\391' '\396' -> '\395' '\402' -> '\401' '\405' -> '\502' '\409' -> '\408' '\410' -> '\573' '\414' -> '\544' '\417' -> '\416' '\419' -> '\418' '\421' -> '\420' '\424' -> '\423' '\429' -> '\428' '\432' -> '\431' '\436' -> '\435' '\438' -> '\437' '\441' -> '\440' '\445' -> '\444' '\447' -> '\503' '\453' -> '\452' '\454' -> '\452' '\456' -> '\455' '\457' -> '\455' '\459' -> '\458' '\460' -> '\458' '\462' -> '\461' '\464' -> '\463' '\466' -> '\465' '\468' -> '\467' '\470' -> '\469' '\472' -> '\471' '\474' -> '\473' '\476' -> '\475' '\477' -> '\398' '\479' -> '\478' '\481' -> '\480' '\483' -> '\482' '\485' -> '\484' '\487' -> '\486' '\489' -> '\488' '\491' -> '\490' '\493' -> '\492' '\495' -> '\494' '\498' -> '\497' '\499' -> '\497' '\501' -> '\500' '\505' -> '\504' '\507' -> '\506' '\509' -> '\508' '\511' -> '\510' '\513' -> '\512' '\515' -> '\514' '\517' -> '\516' '\519' -> '\518' '\521' -> '\520' '\523' -> '\522' '\525' -> '\524' '\527' -> '\526' '\529' -> '\528' '\531' -> '\530' '\533' -> '\532' '\535' -> '\534' '\537' -> '\536' '\539' -> '\538' '\541' -> '\540' '\543' -> '\542' '\547' -> '\546' '\549' -> '\548' '\551' -> '\550' '\553' -> '\552' '\555' -> '\554' '\557' -> '\556' '\559' -> '\558' '\561' -> '\560' '\563' -> '\562' '\572' -> '\571' '\575' -> '\11390' '\576' -> '\11391' '\578' -> '\577' '\583' -> '\582' '\585' -> '\584' '\587' -> '\586' '\589' -> '\588' '\591' -> '\590' '\592' -> '\11375' '\593' -> '\11373' '\594' -> '\11376' '\595' -> '\385' '\596' -> '\390' '\598' -> '\393' '\599' -> '\394' '\601' -> '\399' '\603' -> '\400' '\604' -> '\42923' '\608' -> '\403' '\609' -> '\42924' '\611' -> '\404' '\613' -> '\42893' '\614' -> '\42922' '\616' -> '\407' '\617' -> '\406' '\618' -> '\42926' '\619' -> '\11362' '\620' -> '\42925' '\623' -> '\412' '\625' -> '\11374' '\626' -> '\413' '\629' -> '\415' '\637' -> '\11364' '\640' -> '\422' '\642' -> '\42949' '\643' -> '\425' '\647' -> '\42929' '\648' -> '\430' '\649' -> '\580' '\650' -> '\433' '\651' -> '\434' '\652' -> '\581' '\658' -> '\439' '\669' -> '\42930' '\670' -> '\42928' '\837' -> '\921' '\881' -> '\880' '\883' -> '\882' '\887' -> '\886' '\891' -> '\1021' '\892' -> '\1022' '\893' -> '\1023' '\940' -> '\902' '\941' -> '\904' '\942' -> '\905' '\943' -> '\906' '\945' -> '\913' '\946' -> '\914' '\947' -> '\915' '\948' -> '\916' '\949' -> '\917' '\950' -> '\918' '\951' -> '\919' '\952' -> '\920' '\953' -> '\921' '\954' -> '\922' '\955' -> '\923' '\956' -> '\924' '\957' -> '\925' '\958' -> '\926' '\959' -> '\927' '\960' -> '\928' '\961' -> '\929' '\962' -> '\931' '\963' -> '\931' '\964' -> '\932' '\965' -> '\933' '\966' -> '\934' '\967' -> '\935' '\968' -> '\936' '\969' -> '\937' '\970' -> '\938' '\971' -> '\939' '\972' -> '\908' '\973' -> '\910' '\974' -> '\911' '\976' -> '\914' '\977' -> '\920' '\981' -> '\934' '\982' -> '\928' '\983' -> '\975' '\985' -> '\984' '\987' -> '\986' '\989' -> '\988' '\991' -> '\990' '\993' -> '\992' '\995' -> '\994' '\997' -> '\996' '\999' -> '\998' '\1001' -> '\1000' '\1003' -> '\1002' '\1005' -> '\1004' '\1007' -> '\1006' '\1008' -> '\922' '\1009' -> '\929' '\1010' -> '\1017' '\1011' -> '\895' '\1013' -> '\917' '\1016' -> '\1015' '\1019' -> '\1018' '\1072' -> '\1040' '\1073' -> '\1041' '\1074' -> '\1042' '\1075' -> '\1043' '\1076' -> '\1044' '\1077' -> '\1045' '\1078' -> '\1046' '\1079' -> '\1047' '\1080' -> '\1048' '\1081' -> '\1049' '\1082' -> '\1050' '\1083' -> '\1051' '\1084' -> '\1052' '\1085' -> '\1053' '\1086' -> '\1054' '\1087' -> '\1055' '\1088' -> '\1056' '\1089' -> '\1057' '\1090' -> '\1058' '\1091' -> '\1059' '\1092' -> '\1060' '\1093' -> '\1061' '\1094' -> '\1062' '\1095' -> '\1063' '\1096' -> '\1064' '\1097' -> '\1065' '\1098' -> '\1066' '\1099' -> '\1067' '\1100' -> '\1068' '\1101' -> '\1069' '\1102' -> '\1070' '\1103' -> '\1071' '\1104' -> '\1024' '\1105' -> '\1025' '\1106' -> '\1026' '\1107' -> '\1027' '\1108' -> '\1028' '\1109' -> '\1029' '\1110' -> '\1030' '\1111' -> '\1031' '\1112' -> '\1032' '\1113' -> '\1033' '\1114' -> '\1034' '\1115' -> '\1035' '\1116' -> '\1036' '\1117' -> '\1037' '\1118' -> '\1038' '\1119' -> '\1039' '\1121' -> '\1120' '\1123' -> '\1122' '\1125' -> '\1124' '\1127' -> '\1126' '\1129' -> '\1128' '\1131' -> '\1130' '\1133' -> '\1132' '\1135' -> '\1134' '\1137' -> '\1136' '\1139' -> '\1138' '\1141' -> '\1140' '\1143' -> '\1142' '\1145' -> '\1144' '\1147' -> '\1146' '\1149' -> '\1148' '\1151' -> '\1150' '\1153' -> '\1152' '\1163' -> '\1162' '\1165' -> '\1164' '\1167' -> '\1166' '\1169' -> '\1168' '\1171' -> '\1170' '\1173' -> '\1172' '\1175' -> '\1174' '\1177' -> '\1176' '\1179' -> '\1178' '\1181' -> '\1180' '\1183' -> '\1182' '\1185' -> '\1184' '\1187' -> '\1186' '\1189' -> '\1188' '\1191' -> '\1190' '\1193' -> '\1192' '\1195' -> '\1194' '\1197' -> '\1196' '\1199' -> '\1198' '\1201' -> '\1200' '\1203' -> '\1202' '\1205' -> '\1204' '\1207' -> '\1206' '\1209' -> '\1208' '\1211' -> '\1210' '\1213' -> '\1212' '\1215' -> '\1214' '\1218' -> '\1217' '\1220' -> '\1219' '\1222' -> '\1221' '\1224' -> '\1223' '\1226' -> '\1225' '\1228' -> '\1227' '\1230' -> '\1229' '\1231' -> '\1216' '\1233' -> '\1232' '\1235' -> '\1234' '\1237' -> '\1236' '\1239' -> '\1238' '\1241' -> '\1240' '\1243' -> '\1242' '\1245' -> '\1244' '\1247' -> '\1246' '\1249' -> '\1248' '\1251' -> '\1250' '\1253' -> '\1252' '\1255' -> '\1254' '\1257' -> '\1256' '\1259' -> '\1258' '\1261' -> '\1260' '\1263' -> '\1262' '\1265' -> '\1264' '\1267' -> '\1266' '\1269' -> '\1268' '\1271' -> '\1270' '\1273' -> '\1272' '\1275' -> '\1274' '\1277' -> '\1276' '\1279' -> '\1278' '\1281' -> '\1280' '\1283' -> '\1282' '\1285' -> '\1284' '\1287' -> '\1286' '\1289' -> '\1288' '\1291' -> '\1290' '\1293' -> '\1292' '\1295' -> '\1294' '\1297' -> '\1296' '\1299' -> '\1298' '\1301' -> '\1300' '\1303' -> '\1302' '\1305' -> '\1304' '\1307' -> '\1306' '\1309' -> '\1308' '\1311' -> '\1310' '\1313' -> '\1312' '\1315' -> '\1314' '\1317' -> '\1316' '\1319' -> '\1318' '\1321' -> '\1320' '\1323' -> '\1322' '\1325' -> '\1324' '\1327' -> '\1326' '\1377' -> '\1329' '\1378' -> '\1330' '\1379' -> '\1331' '\1380' -> '\1332' '\1381' -> '\1333' '\1382' -> '\1334' '\1383' -> '\1335' '\1384' -> '\1336' '\1385' -> '\1337' '\1386' -> '\1338' '\1387' -> '\1339' '\1388' -> '\1340' '\1389' -> '\1341' '\1390' -> '\1342' '\1391' -> '\1343' '\1392' -> '\1344' '\1393' -> '\1345' '\1394' -> '\1346' '\1395' -> '\1347' '\1396' -> '\1348' '\1397' -> '\1349' '\1398' -> '\1350' '\1399' -> '\1351' '\1400' -> '\1352' '\1401' -> '\1353' '\1402' -> '\1354' '\1403' -> '\1355' '\1404' -> '\1356' '\1405' -> '\1357' '\1406' -> '\1358' '\1407' -> '\1359' '\1408' -> '\1360' '\1409' -> '\1361' '\1410' -> '\1362' '\1411' -> '\1363' '\1412' -> '\1364' '\1413' -> '\1365' '\1414' -> '\1366' '\4304' -> '\7312' '\4305' -> '\7313' '\4306' -> '\7314' '\4307' -> '\7315' '\4308' -> '\7316' '\4309' -> '\7317' '\4310' -> '\7318' '\4311' -> '\7319' '\4312' -> '\7320' '\4313' -> '\7321' '\4314' -> '\7322' '\4315' -> '\7323' '\4316' -> '\7324' '\4317' -> '\7325' '\4318' -> '\7326' '\4319' -> '\7327' '\4320' -> '\7328' '\4321' -> '\7329' '\4322' -> '\7330' '\4323' -> '\7331' '\4324' -> '\7332' '\4325' -> '\7333' '\4326' -> '\7334' '\4327' -> '\7335' '\4328' -> '\7336' '\4329' -> '\7337' '\4330' -> '\7338' '\4331' -> '\7339' '\4332' -> '\7340' '\4333' -> '\7341' '\4334' -> '\7342' '\4335' -> '\7343' '\4336' -> '\7344' '\4337' -> '\7345' '\4338' -> '\7346' '\4339' -> '\7347' '\4340' -> '\7348' '\4341' -> '\7349' '\4342' -> '\7350' '\4343' -> '\7351' '\4344' -> '\7352' '\4345' -> '\7353' '\4346' -> '\7354' '\4349' -> '\7357' '\4350' -> '\7358' '\4351' -> '\7359' '\5112' -> '\5104' '\5113' -> '\5105' '\5114' -> '\5106' '\5115' -> '\5107' '\5116' -> '\5108' '\5117' -> '\5109' '\7296' -> '\1042' '\7297' -> '\1044' '\7298' -> '\1054' '\7299' -> '\1057' '\7300' -> '\1058' '\7301' -> '\1058' '\7302' -> '\1066' '\7303' -> '\1122' '\7304' -> '\42570' '\7545' -> '\42877' '\7549' -> '\11363' '\7566' -> '\42950' '\7681' -> '\7680' '\7683' -> '\7682' '\7685' -> '\7684' '\7687' -> '\7686' '\7689' -> '\7688' '\7691' -> '\7690' '\7693' -> '\7692' '\7695' -> '\7694' '\7697' -> '\7696' '\7699' -> '\7698' '\7701' -> '\7700' '\7703' -> '\7702' '\7705' -> '\7704' '\7707' -> '\7706' '\7709' -> '\7708' '\7711' -> '\7710' '\7713' -> '\7712' '\7715' -> '\7714' '\7717' -> '\7716' '\7719' -> '\7718' '\7721' -> '\7720' '\7723' -> '\7722' '\7725' -> '\7724' '\7727' -> '\7726' '\7729' -> '\7728' '\7731' -> '\7730' '\7733' -> '\7732' '\7735' -> '\7734' '\7737' -> '\7736' '\7739' -> '\7738' '\7741' -> '\7740' '\7743' -> '\7742' '\7745' -> '\7744' '\7747' -> '\7746' '\7749' -> '\7748' '\7751' -> '\7750' '\7753' -> '\7752' '\7755' -> '\7754' '\7757' -> '\7756' '\7759' -> '\7758' '\7761' -> '\7760' '\7763' -> '\7762' '\7765' -> '\7764' '\7767' -> '\7766' '\7769' -> '\7768' '\7771' -> '\7770' '\7773' -> '\7772' '\7775' -> '\7774' '\7777' -> '\7776' '\7779' -> '\7778' '\7781' -> '\7780' '\7783' -> '\7782' '\7785' -> '\7784' '\7787' -> '\7786' '\7789' -> '\7788' '\7791' -> '\7790' '\7793' -> '\7792' '\7795' -> '\7794' '\7797' -> '\7796' '\7799' -> '\7798' '\7801' -> '\7800' '\7803' -> '\7802' '\7805' -> '\7804' '\7807' -> '\7806' '\7809' -> '\7808' '\7811' -> '\7810' '\7813' -> '\7812' '\7815' -> '\7814' '\7817' -> '\7816' '\7819' -> '\7818' '\7821' -> '\7820' '\7823' -> '\7822' '\7825' -> '\7824' '\7827' -> '\7826' '\7829' -> '\7828' '\7835' -> '\7776' '\7841' -> '\7840' '\7843' -> '\7842' '\7845' -> '\7844' '\7847' -> '\7846' '\7849' -> '\7848' '\7851' -> '\7850' '\7853' -> '\7852' '\7855' -> '\7854' '\7857' -> '\7856' '\7859' -> '\7858' '\7861' -> '\7860' '\7863' -> '\7862' '\7865' -> '\7864' '\7867' -> '\7866' '\7869' -> '\7868' '\7871' -> '\7870' '\7873' -> '\7872' '\7875' -> '\7874' '\7877' -> '\7876' '\7879' -> '\7878' '\7881' -> '\7880' '\7883' -> '\7882' '\7885' -> '\7884' '\7887' -> '\7886' '\7889' -> '\7888' '\7891' -> '\7890' '\7893' -> '\7892' '\7895' -> '\7894' '\7897' -> '\7896' '\7899' -> '\7898' '\7901' -> '\7900' '\7903' -> '\7902' '\7905' -> '\7904' '\7907' -> '\7906' '\7909' -> '\7908' '\7911' -> '\7910' '\7913' -> '\7912' '\7915' -> '\7914' '\7917' -> '\7916' '\7919' -> '\7918' '\7921' -> '\7920' '\7923' -> '\7922' '\7925' -> '\7924' '\7927' -> '\7926' '\7929' -> '\7928' '\7931' -> '\7930' '\7933' -> '\7932' '\7935' -> '\7934' '\7936' -> '\7944' '\7937' -> '\7945' '\7938' -> '\7946' '\7939' -> '\7947' '\7940' -> '\7948' '\7941' -> '\7949' '\7942' -> '\7950' '\7943' -> '\7951' '\7952' -> '\7960' '\7953' -> '\7961' '\7954' -> '\7962' '\7955' -> '\7963' '\7956' -> '\7964' '\7957' -> '\7965' '\7968' -> '\7976' '\7969' -> '\7977' '\7970' -> '\7978' '\7971' -> '\7979' '\7972' -> '\7980' '\7973' -> '\7981' '\7974' -> '\7982' '\7975' -> '\7983' '\7984' -> '\7992' '\7985' -> '\7993' '\7986' -> '\7994' '\7987' -> '\7995' '\7988' -> '\7996' '\7989' -> '\7997' '\7990' -> '\7998' '\7991' -> '\7999' '\8000' -> '\8008' '\8001' -> '\8009' '\8002' -> '\8010' '\8003' -> '\8011' '\8004' -> '\8012' '\8005' -> '\8013' '\8017' -> '\8025' '\8019' -> '\8027' '\8021' -> '\8029' '\8023' -> '\8031' '\8032' -> '\8040' '\8033' -> '\8041' '\8034' -> '\8042' '\8035' -> '\8043' '\8036' -> '\8044' '\8037' -> '\8045' '\8038' -> '\8046' '\8039' -> '\8047' '\8048' -> '\8122' '\8049' -> '\8123' '\8050' -> '\8136' '\8051' -> '\8137' '\8052' -> '\8138' '\8053' -> '\8139' '\8054' -> '\8154' '\8055' -> '\8155' '\8056' -> '\8184' '\8057' -> '\8185' '\8058' -> '\8170' '\8059' -> '\8171' '\8060' -> '\8186' '\8061' -> '\8187' '\8064' -> '\8072' '\8065' -> '\8073' '\8066' -> '\8074' '\8067' -> '\8075' '\8068' -> '\8076' '\8069' -> '\8077' '\8070' -> '\8078' '\8071' -> '\8079' '\8080' -> '\8088' '\8081' -> '\8089' '\8082' -> '\8090' '\8083' -> '\8091' '\8084' -> '\8092' '\8085' -> '\8093' '\8086' -> '\8094' '\8087' -> '\8095' '\8096' -> '\8104' '\8097' -> '\8105' '\8098' -> '\8106' '\8099' -> '\8107' '\8100' -> '\8108' '\8101' -> '\8109' '\8102' -> '\8110' '\8103' -> '\8111' '\8112' -> '\8120' '\8113' -> '\8121' '\8115' -> '\8124' '\8126' -> '\921' '\8131' -> '\8140' '\8144' -> '\8152' '\8145' -> '\8153' '\8160' -> '\8168' '\8161' -> '\8169' '\8165' -> '\8172' '\8179' -> '\8188' '\8526' -> '\8498' '\8560' -> '\8544' '\8561' -> '\8545' '\8562' -> '\8546' '\8563' -> '\8547' '\8564' -> '\8548' '\8565' -> '\8549' '\8566' -> '\8550' '\8567' -> '\8551' '\8568' -> '\8552' '\8569' -> '\8553' '\8570' -> '\8554' '\8571' -> '\8555' '\8572' -> '\8556' '\8573' -> '\8557' '\8574' -> '\8558' '\8575' -> '\8559' '\8580' -> '\8579' '\9424' -> '\9398' '\9425' -> '\9399' '\9426' -> '\9400' '\9427' -> '\9401' '\9428' -> '\9402' '\9429' -> '\9403' '\9430' -> '\9404' '\9431' -> '\9405' '\9432' -> '\9406' '\9433' -> '\9407' '\9434' -> '\9408' '\9435' -> '\9409' '\9436' -> '\9410' '\9437' -> '\9411' '\9438' -> '\9412' '\9439' -> '\9413' '\9440' -> '\9414' '\9441' -> '\9415' '\9442' -> '\9416' '\9443' -> '\9417' '\9444' -> '\9418' '\9445' -> '\9419' '\9446' -> '\9420' '\9447' -> '\9421' '\9448' -> '\9422' '\9449' -> '\9423' '\11312' -> '\11264' '\11313' -> '\11265' '\11314' -> '\11266' '\11315' -> '\11267' '\11316' -> '\11268' '\11317' -> '\11269' '\11318' -> '\11270' '\11319' -> '\11271' '\11320' -> '\11272' '\11321' -> '\11273' '\11322' -> '\11274' '\11323' -> '\11275' '\11324' -> '\11276' '\11325' -> '\11277' '\11326' -> '\11278' '\11327' -> '\11279' '\11328' -> '\11280' '\11329' -> '\11281' '\11330' -> '\11282' '\11331' -> '\11283' '\11332' -> '\11284' '\11333' -> '\11285' '\11334' -> '\11286' '\11335' -> '\11287' '\11336' -> '\11288' '\11337' -> '\11289' '\11338' -> '\11290' '\11339' -> '\11291' '\11340' -> '\11292' '\11341' -> '\11293' '\11342' -> '\11294' '\11343' -> '\11295' '\11344' -> '\11296' '\11345' -> '\11297' '\11346' -> '\11298' '\11347' -> '\11299' '\11348' -> '\11300' '\11349' -> '\11301' '\11350' -> '\11302' '\11351' -> '\11303' '\11352' -> '\11304' '\11353' -> '\11305' '\11354' -> '\11306' '\11355' -> '\11307' '\11356' -> '\11308' '\11357' -> '\11309' '\11358' -> '\11310' '\11359' -> '\11311' '\11361' -> '\11360' '\11365' -> '\570' '\11366' -> '\574' '\11368' -> '\11367' '\11370' -> '\11369' '\11372' -> '\11371' '\11379' -> '\11378' '\11382' -> '\11381' '\11393' -> '\11392' '\11395' -> '\11394' '\11397' -> '\11396' '\11399' -> '\11398' '\11401' -> '\11400' '\11403' -> '\11402' '\11405' -> '\11404' '\11407' -> '\11406' '\11409' -> '\11408' '\11411' -> '\11410' '\11413' -> '\11412' '\11415' -> '\11414' '\11417' -> '\11416' '\11419' -> '\11418' '\11421' -> '\11420' '\11423' -> '\11422' '\11425' -> '\11424' '\11427' -> '\11426' '\11429' -> '\11428' '\11431' -> '\11430' '\11433' -> '\11432' '\11435' -> '\11434' '\11437' -> '\11436' '\11439' -> '\11438' '\11441' -> '\11440' '\11443' -> '\11442' '\11445' -> '\11444' '\11447' -> '\11446' '\11449' -> '\11448' '\11451' -> '\11450' '\11453' -> '\11452' '\11455' -> '\11454' '\11457' -> '\11456' '\11459' -> '\11458' '\11461' -> '\11460' '\11463' -> '\11462' '\11465' -> '\11464' '\11467' -> '\11466' '\11469' -> '\11468' '\11471' -> '\11470' '\11473' -> '\11472' '\11475' -> '\11474' '\11477' -> '\11476' '\11479' -> '\11478' '\11481' -> '\11480' '\11483' -> '\11482' '\11485' -> '\11484' '\11487' -> '\11486' '\11489' -> '\11488' '\11491' -> '\11490' '\11500' -> '\11499' '\11502' -> '\11501' '\11507' -> '\11506' '\11520' -> '\4256' '\11521' -> '\4257' '\11522' -> '\4258' '\11523' -> '\4259' '\11524' -> '\4260' '\11525' -> '\4261' '\11526' -> '\4262' '\11527' -> '\4263' '\11528' -> '\4264' '\11529' -> '\4265' '\11530' -> '\4266' '\11531' -> '\4267' '\11532' -> '\4268' '\11533' -> '\4269' '\11534' -> '\4270' '\11535' -> '\4271' '\11536' -> '\4272' '\11537' -> '\4273' '\11538' -> '\4274' '\11539' -> '\4275' '\11540' -> '\4276' '\11541' -> '\4277' '\11542' -> '\4278' '\11543' -> '\4279' '\11544' -> '\4280' '\11545' -> '\4281' '\11546' -> '\4282' '\11547' -> '\4283' '\11548' -> '\4284' '\11549' -> '\4285' '\11550' -> '\4286' '\11551' -> '\4287' '\11552' -> '\4288' '\11553' -> '\4289' '\11554' -> '\4290' '\11555' -> '\4291' '\11556' -> '\4292' '\11557' -> '\4293' '\11559' -> '\4295' '\11565' -> '\4301' '\42561' -> '\42560' '\42563' -> '\42562' '\42565' -> '\42564' '\42567' -> '\42566' '\42569' -> '\42568' '\42571' -> '\42570' '\42573' -> '\42572' '\42575' -> '\42574' '\42577' -> '\42576' '\42579' -> '\42578' '\42581' -> '\42580' '\42583' -> '\42582' '\42585' -> '\42584' '\42587' -> '\42586' '\42589' -> '\42588' '\42591' -> '\42590' '\42593' -> '\42592' '\42595' -> '\42594' '\42597' -> '\42596' '\42599' -> '\42598' '\42601' -> '\42600' '\42603' -> '\42602' '\42605' -> '\42604' '\42625' -> '\42624' '\42627' -> '\42626' '\42629' -> '\42628' '\42631' -> '\42630' '\42633' -> '\42632' '\42635' -> '\42634' '\42637' -> '\42636' '\42639' -> '\42638' '\42641' -> '\42640' '\42643' -> '\42642' '\42645' -> '\42644' '\42647' -> '\42646' '\42649' -> '\42648' '\42651' -> '\42650' '\42787' -> '\42786' '\42789' -> '\42788' '\42791' -> '\42790' '\42793' -> '\42792' '\42795' -> '\42794' '\42797' -> '\42796' '\42799' -> '\42798' '\42803' -> '\42802' '\42805' -> '\42804' '\42807' -> '\42806' '\42809' -> '\42808' '\42811' -> '\42810' '\42813' -> '\42812' '\42815' -> '\42814' '\42817' -> '\42816' '\42819' -> '\42818' '\42821' -> '\42820' '\42823' -> '\42822' '\42825' -> '\42824' '\42827' -> '\42826' '\42829' -> '\42828' '\42831' -> '\42830' '\42833' -> '\42832' '\42835' -> '\42834' '\42837' -> '\42836' '\42839' -> '\42838' '\42841' -> '\42840' '\42843' -> '\42842' '\42845' -> '\42844' '\42847' -> '\42846' '\42849' -> '\42848' '\42851' -> '\42850' '\42853' -> '\42852' '\42855' -> '\42854' '\42857' -> '\42856' '\42859' -> '\42858' '\42861' -> '\42860' '\42863' -> '\42862' '\42874' -> '\42873' '\42876' -> '\42875' '\42879' -> '\42878' '\42881' -> '\42880' '\42883' -> '\42882' '\42885' -> '\42884' '\42887' -> '\42886' '\42892' -> '\42891' '\42897' -> '\42896' '\42899' -> '\42898' '\42900' -> '\42948' '\42903' -> '\42902' '\42905' -> '\42904' '\42907' -> '\42906' '\42909' -> '\42908' '\42911' -> '\42910' '\42913' -> '\42912' '\42915' -> '\42914' '\42917' -> '\42916' '\42919' -> '\42918' '\42921' -> '\42920' '\42933' -> '\42932' '\42935' -> '\42934' '\42937' -> '\42936' '\42939' -> '\42938' '\42941' -> '\42940' '\42943' -> '\42942' '\42945' -> '\42944' '\42947' -> '\42946' '\42952' -> '\42951' '\42954' -> '\42953' '\42961' -> '\42960' '\42967' -> '\42966' '\42969' -> '\42968' '\42998' -> '\42997' '\43859' -> '\42931' '\43888' -> '\5024' '\43889' -> '\5025' '\43890' -> '\5026' '\43891' -> '\5027' '\43892' -> '\5028' '\43893' -> '\5029' '\43894' -> '\5030' '\43895' -> '\5031' '\43896' -> '\5032' '\43897' -> '\5033' '\43898' -> '\5034' '\43899' -> '\5035' '\43900' -> '\5036' '\43901' -> '\5037' '\43902' -> '\5038' '\43903' -> '\5039' '\43904' -> '\5040' '\43905' -> '\5041' '\43906' -> '\5042' '\43907' -> '\5043' '\43908' -> '\5044' '\43909' -> '\5045' '\43910' -> '\5046' '\43911' -> '\5047' '\43912' -> '\5048' '\43913' -> '\5049' '\43914' -> '\5050' '\43915' -> '\5051' '\43916' -> '\5052' '\43917' -> '\5053' '\43918' -> '\5054' '\43919' -> '\5055' '\43920' -> '\5056' '\43921' -> '\5057' '\43922' -> '\5058' '\43923' -> '\5059' '\43924' -> '\5060' '\43925' -> '\5061' '\43926' -> '\5062' '\43927' -> '\5063' '\43928' -> '\5064' '\43929' -> '\5065' '\43930' -> '\5066' '\43931' -> '\5067' '\43932' -> '\5068' '\43933' -> '\5069' '\43934' -> '\5070' '\43935' -> '\5071' '\43936' -> '\5072' '\43937' -> '\5073' '\43938' -> '\5074' '\43939' -> '\5075' '\43940' -> '\5076' '\43941' -> '\5077' '\43942' -> '\5078' '\43943' -> '\5079' '\43944' -> '\5080' '\43945' -> '\5081' '\43946' -> '\5082' '\43947' -> '\5083' '\43948' -> '\5084' '\43949' -> '\5085' '\43950' -> '\5086' '\43951' -> '\5087' '\43952' -> '\5088' '\43953' -> '\5089' '\43954' -> '\5090' '\43955' -> '\5091' '\43956' -> '\5092' '\43957' -> '\5093' '\43958' -> '\5094' '\43959' -> '\5095' '\43960' -> '\5096' '\43961' -> '\5097' '\43962' -> '\5098' '\43963' -> '\5099' '\43964' -> '\5100' '\43965' -> '\5101' '\43966' -> '\5102' '\43967' -> '\5103' '\65345' -> '\65313' '\65346' -> '\65314' '\65347' -> '\65315' '\65348' -> '\65316' '\65349' -> '\65317' '\65350' -> '\65318' '\65351' -> '\65319' '\65352' -> '\65320' '\65353' -> '\65321' '\65354' -> '\65322' '\65355' -> '\65323' '\65356' -> '\65324' '\65357' -> '\65325' '\65358' -> '\65326' '\65359' -> '\65327' '\65360' -> '\65328' '\65361' -> '\65329' '\65362' -> '\65330' '\65363' -> '\65331' '\65364' -> '\65332' '\65365' -> '\65333' '\65366' -> '\65334' '\65367' -> '\65335' '\65368' -> '\65336' '\65369' -> '\65337' '\65370' -> '\65338' '\66600' -> '\66560' '\66601' -> '\66561' '\66602' -> '\66562' '\66603' -> '\66563' '\66604' -> '\66564' '\66605' -> '\66565' '\66606' -> '\66566' '\66607' -> '\66567' '\66608' -> '\66568' '\66609' -> '\66569' '\66610' -> '\66570' '\66611' -> '\66571' '\66612' -> '\66572' '\66613' -> '\66573' '\66614' -> '\66574' '\66615' -> '\66575' '\66616' -> '\66576' '\66617' -> '\66577' '\66618' -> '\66578' '\66619' -> '\66579' '\66620' -> '\66580' '\66621' -> '\66581' '\66622' -> '\66582' '\66623' -> '\66583' '\66624' -> '\66584' '\66625' -> '\66585' '\66626' -> '\66586' '\66627' -> '\66587' '\66628' -> '\66588' '\66629' -> '\66589' '\66630' -> '\66590' '\66631' -> '\66591' '\66632' -> '\66592' '\66633' -> '\66593' '\66634' -> '\66594' '\66635' -> '\66595' '\66636' -> '\66596' '\66637' -> '\66597' '\66638' -> '\66598' '\66639' -> '\66599' '\66776' -> '\66736' '\66777' -> '\66737' '\66778' -> '\66738' '\66779' -> '\66739' '\66780' -> '\66740' '\66781' -> '\66741' '\66782' -> '\66742' '\66783' -> '\66743' '\66784' -> '\66744' '\66785' -> '\66745' '\66786' -> '\66746' '\66787' -> '\66747' '\66788' -> '\66748' '\66789' -> '\66749' '\66790' -> '\66750' '\66791' -> '\66751' '\66792' -> '\66752' '\66793' -> '\66753' '\66794' -> '\66754' '\66795' -> '\66755' '\66796' -> '\66756' '\66797' -> '\66757' '\66798' -> '\66758' '\66799' -> '\66759' '\66800' -> '\66760' '\66801' -> '\66761' '\66802' -> '\66762' '\66803' -> '\66763' '\66804' -> '\66764' '\66805' -> '\66765' '\66806' -> '\66766' '\66807' -> '\66767' '\66808' -> '\66768' '\66809' -> '\66769' '\66810' -> '\66770' '\66811' -> '\66771' '\66967' -> '\66928' '\66968' -> '\66929' '\66969' -> '\66930' '\66970' -> '\66931' '\66971' -> '\66932' '\66972' -> '\66933' '\66973' -> '\66934' '\66974' -> '\66935' '\66975' -> '\66936' '\66976' -> '\66937' '\66977' -> '\66938' '\66979' -> '\66940' '\66980' -> '\66941' '\66981' -> '\66942' '\66982' -> '\66943' '\66983' -> '\66944' '\66984' -> '\66945' '\66985' -> '\66946' '\66986' -> '\66947' '\66987' -> '\66948' '\66988' -> '\66949' '\66989' -> '\66950' '\66990' -> '\66951' '\66991' -> '\66952' '\66992' -> '\66953' '\66993' -> '\66954' '\66995' -> '\66956' '\66996' -> '\66957' '\66997' -> '\66958' '\66998' -> '\66959' '\66999' -> '\66960' '\67000' -> '\66961' '\67001' -> '\66962' '\67003' -> '\66964' '\67004' -> '\66965' '\68800' -> '\68736' '\68801' -> '\68737' '\68802' -> '\68738' '\68803' -> '\68739' '\68804' -> '\68740' '\68805' -> '\68741' '\68806' -> '\68742' '\68807' -> '\68743' '\68808' -> '\68744' '\68809' -> '\68745' '\68810' -> '\68746' '\68811' -> '\68747' '\68812' -> '\68748' '\68813' -> '\68749' '\68814' -> '\68750' '\68815' -> '\68751' '\68816' -> '\68752' '\68817' -> '\68753' '\68818' -> '\68754' '\68819' -> '\68755' '\68820' -> '\68756' '\68821' -> '\68757' '\68822' -> '\68758' '\68823' -> '\68759' '\68824' -> '\68760' '\68825' -> '\68761' '\68826' -> '\68762' '\68827' -> '\68763' '\68828' -> '\68764' '\68829' -> '\68765' '\68830' -> '\68766' '\68831' -> '\68767' '\68832' -> '\68768' '\68833' -> '\68769' '\68834' -> '\68770' '\68835' -> '\68771' '\68836' -> '\68772' '\68837' -> '\68773' '\68838' -> '\68774' '\68839' -> '\68775' '\68840' -> '\68776' '\68841' -> '\68777' '\68842' -> '\68778' '\68843' -> '\68779' '\68844' -> '\68780' '\68845' -> '\68781' '\68846' -> '\68782' '\68847' -> '\68783' '\68848' -> '\68784' '\68849' -> '\68785' '\68850' -> '\68786' '\71872' -> '\71840' '\71873' -> '\71841' '\71874' -> '\71842' '\71875' -> '\71843' '\71876' -> '\71844' '\71877' -> '\71845' '\71878' -> '\71846' '\71879' -> '\71847' '\71880' -> '\71848' '\71881' -> '\71849' '\71882' -> '\71850' '\71883' -> '\71851' '\71884' -> '\71852' '\71885' -> '\71853' '\71886' -> '\71854' '\71887' -> '\71855' '\71888' -> '\71856' '\71889' -> '\71857' '\71890' -> '\71858' '\71891' -> '\71859' '\71892' -> '\71860' '\71893' -> '\71861' '\71894' -> '\71862' '\71895' -> '\71863' '\71896' -> '\71864' '\71897' -> '\71865' '\71898' -> '\71866' '\71899' -> '\71867' '\71900' -> '\71868' '\71901' -> '\71869' '\71902' -> '\71870' '\71903' -> '\71871' '\93792' -> '\93760' '\93793' -> '\93761' '\93794' -> '\93762' '\93795' -> '\93763' '\93796' -> '\93764' '\93797' -> '\93765' '\93798' -> '\93766' '\93799' -> '\93767' '\93800' -> '\93768' '\93801' -> '\93769' '\93802' -> '\93770' '\93803' -> '\93771' '\93804' -> '\93772' '\93805' -> '\93773' '\93806' -> '\93774' '\93807' -> '\93775' '\93808' -> '\93776' '\93809' -> '\93777' '\93810' -> '\93778' '\93811' -> '\93779' '\93812' -> '\93780' '\93813' -> '\93781' '\93814' -> '\93782' '\93815' -> '\93783' '\93816' -> '\93784' '\93817' -> '\93785' '\93818' -> '\93786' '\93819' -> '\93787' '\93820' -> '\93788' '\93821' -> '\93789' '\93822' -> '\93790' '\93823' -> '\93791' '\125218' -> '\125184' '\125219' -> '\125185' '\125220' -> '\125186' '\125221' -> '\125187' '\125222' -> '\125188' '\125223' -> '\125189' '\125224' -> '\125190' '\125225' -> '\125191' '\125226' -> '\125192' '\125227' -> '\125193' '\125228' -> '\125194' '\125229' -> '\125195' '\125230' -> '\125196' '\125231' -> '\125197' '\125232' -> '\125198' '\125233' -> '\125199' '\125234' -> '\125200' '\125235' -> '\125201' '\125236' -> '\125202' '\125237' -> '\125203' '\125238' -> '\125204' '\125239' -> '\125205' '\125240' -> '\125206' '\125241' -> '\125207' '\125242' -> '\125208' '\125243' -> '\125209' '\125244' -> '\125210' '\125245' -> '\125211' '\125246' -> '\125212' '\125247' -> '\125213' '\125248' -> '\125214' '\125249' -> '\125215' '\125250' -> '\125216' '\125251' -> '\125217' c -> c unicode-data-0.6.0/lib/Unicode/Internal/Char/Version.hs0000644000000000000000000000114607346545000021013 0ustar0000000000000000-- DO NOT EDIT MANUALLY: autogenerated by ucd2haskell {-# OPTIONS_HADDOCK hide #-} -- | -- Module : Unicode.Internal.Char.Version -- Copyright : (c) 2024 Composewell Technologies and Contributors -- License : Apache-2.0 -- Maintainer : streamly@composewell.com -- Stability : experimental module Unicode.Internal.Char.Version (unicodeVersion) where import Data.Version (Version, makeVersion) -- | Version of the Unicode standard used by this package: -- [15.1.0](https://www.unicode.org/versions/Unicode15.1.0/). -- -- @since 0.3.0 unicodeVersion :: Version unicodeVersion = makeVersion [15,1,0] unicode-data-0.6.0/lib/Unicode/Internal/Division.hs0000644000000000000000000000457507346545000020306 0ustar0000000000000000-- | -- Module : Unicode.Internal.Division -- Copyright : (c) 2020 Andrew Lelechenko -- -- License : BSD-3-Clause -- Maintainer : streamly@composewell.com -- Stability : experimental -- Portability : GHC -- -- Fast division by known constants. -- -- Division by a constant can be replaced by a double-word multiplication. -- Roughly speaking, instead of dividing by x, multiply by 2^64/x, -- obtaining 128-bit-long product, and take upper 64 bits. The peculiar -- details can be found in Hacker's Delight, Ch. 10. -- -- Even GHC 8.10 does not provide a primitive for a signed double-word -- multiplication, but since our applications does not involve negative -- integers, we convert 'Int' to 'Word' and use 'GHC.Exts.timesWord#'. -- -- Textbook unsigned division by 21 or 28 becomes involved, when an argument -- is allowed to take the full range of 'Word' up to 2^64. Luckily, in our -- case the argument was casted from 'Int', so we can guarantee that it is -- below 2^63. module Unicode.Internal.Division ( quotRem21 , quotRem28 ) where import Data.Bits (Bits(..), FiniteBits(..)) import GHC.Exts (Word(..), timesWord2#) highMul :: Word -> Word -> Word highMul (W# x#) (W# y#) = W# high# where !(# high#, _ #) = timesWord2# x# y# -- | Input must be non-negative. -- -- Instead of division by 21, we compute -- floor(floor((2^68+17)/21 * n) / 2^68) = floor((2^68+17)/21 * n/2^68) = -- floor(n/21 + (n/2^63 * 17/32)/21) = floor(n/21), -- because n/2^63 * 17/32 < 1. {-# INLINE quotRem21 #-} quotRem21 :: Int -> (Int, Int) quotRem21 n | finiteBitSize (0 :: Word) /= 64 = n `quotRem` 21 | otherwise = (fromIntegral q, fromIntegral (w - 21 * q)) where w = fromIntegral n high = highMul w 14054662151397753613 -- (2^68+17)/21 q = high `shiftR` 4 -- | Input must be non-negative. -- -- Instead of division by 28, we compute -- floor(floor((2^65+3)/7 * n) / 2^67) = floor((2^65+3)/7 * n/2^67) = -- floor(n/28 + (n/2^63 * 3/4)/28) = floor(n/28), -- because n/2^63 * 3/4 < 1. {-# INLINE quotRem28 #-} quotRem28 :: Int -> (Int, Int) quotRem28 n | finiteBitSize (0 :: Word) /= 64 = n `quotRem` 28 | otherwise = (fromIntegral q, fromIntegral r) where w = fromIntegral n high = highMul w 5270498306774157605 -- (2^65+3)/7 q = high `shiftR` 3 prod = (q `shiftL` 3 - q) `shiftL` 2 r = w - prod unicode-data-0.6.0/lib/Unicode/Internal/Unfold.hs0000644000000000000000000000346207346545000017743 0ustar0000000000000000{-# LANGUAGE CPP #-} {-# LANGUAGE ExistentialQuantification #-} -- | -- Module : Unicode.Internal.Unfold -- Copyright : (c) 2022 Composewell Technologies and Contributors -- License : BSD-3-Clause -- Maintainer : streamly@composewell.com -- Stability : experimental -- Portability : GHC -- -- @since 0.3.1 -- module Unicode.Internal.Unfold ( Unfold(..) , Step(..) , toList ) where import GHC.Base (build) -- | An @Unfold a b@ is a generator of a stream of values of type @b@ from a -- seed of type @a@. -- -- @since 0.3.1 #if MIN_VERSION_base(4,12,0) data Unfold a b = forall s. Unfold (s -> Step s b) -- ^ /Step/ function: compute the next step from the current one. (a -> Step s b) -- ^ /Inject/ function: initialize the state with a seed value. #else data Unfold a b = -- | @Unfold step inject@ forall s. Unfold (s -> Step s b) (a -> Step s b) #endif -- | A stream is a succession of 'Step's. -- -- @since 0.3.1 data Step s a = Yield !a !s -- ^ Produces a single value and the next state of the stream. | Stop -- ^ Indicates there are no more values in the stream. instance Functor (Step s) where {-# INLINE fmap #-} fmap f (Yield x s) = Yield (f x) s fmap _ Stop = Stop -- | Convert an 'Unfold a a' to a list [a], if the resulting list is empty the -- seed is used as a default output. -- {-# INLINE toList #-} toList :: Unfold a a -> a -> [a] toList (Unfold step inject) input = case inject input of Stop -> [input] Yield b s0 -> b : build ( \c n -> let go s = case step s of Yield a s' -> a `c` go s' Stop -> n in go s0 ) unicode-data-0.6.0/test/ICU/0000755000000000000000000000000007346545000013642 5ustar0000000000000000unicode-data-0.6.0/test/ICU/CharSpec.hs0000644000000000000000000000653107346545000015673 0ustar0000000000000000{-# LANGUAGE CPP, BlockArguments, GADTs #-} module ICU.CharSpec ( spec ) where import Control.Applicative (Alternative(..)) import Data.Foldable (traverse_) import Data.Version (showVersion, versionBranch) import Numeric (showHex) import Test.Hspec ( describe , expectationFailure , it , pendingWith , Spec , HasCallStack, SpecWith ) import qualified ICU.Char as ICU import qualified Unicode.Char as U spec :: Spec spec = do describe "General" do checkAndGatherErrors "charType" (GeneralCategory . U.generalCategory) (GeneralCategory . ICU.toGeneralCategory . ICU.charType) checkAndGatherErrors "isNoncharacter" (GeneralCategory . U.isNoncharacter) (GeneralCategory . ICU.isNoncharacter) -- TODO: other functions where ourUnicodeVersion = versionBranch U.unicodeVersion theirUnicodeVersion = versionBranch ICU.unicodeVersion showCodePoint c = ("U+" ++) . fmap U.toUpper . showHex (U.ord c) -- There is no feature to display warnings other than `trace`, so -- hack our own: -- 1. Compare given functions in pure code and gather warning & errors -- 2. Create dummy spec that throw an expectation failure, if relevant. -- 3. Create pending spec for each Char that raises a Unicode version -- mismatch between ICU and unicode-data. checkAndGatherErrors :: forall a. (HasCallStack, Eq a, Show a) => String -> (Char -> a) -> (Char -> a) -> SpecWith () checkAndGatherErrors label f fRef = do it label (maybe (pure ()) expectationFailure err) if null ws then pure () else describe (label ++ " (Unicode version conflict)") (traverse_ mkWarning ws) where Acc ws err = foldr check (Acc [] Nothing) [minBound..maxBound] check c acc -- Test passed | n == nRef = acc -- Unicode version mismatch: char is not mapped in one of the libs: -- add warning. | age' > ourUnicodeVersion || age' > theirUnicodeVersion = acc{warnings=c : warnings acc} -- Error | otherwise = let !msg = mconcat [ showCodePoint c ": expected " , show nRef , ", got ", show n, "" ] in acc{firstError = firstError acc <|> Just msg} where !n = f c !nRef = fRef c age = ICU.charAge c age' = take 3 (versionBranch age) mkWarning c = it (showCodePoint c "") . pendingWith $ mconcat [ "Incompatible ICU Unicode version: expected " , showVersion U.unicodeVersion , ", got: " , showVersion ICU.unicodeVersion , " (ICU character age is: " , showVersion (ICU.charAge c) , ")" ] -- | Helper to compare our GeneralCategory to 'Data.Char.GeneralCategory'. data GeneralCategory = forall c. (Show c, Enum c) => GeneralCategory c instance Show GeneralCategory where show (GeneralCategory a) = show a instance Eq GeneralCategory where GeneralCategory a == GeneralCategory b = fromEnum a == fromEnum b -- | Warning accumulator data Acc = Acc { warnings :: ![Char], firstError :: !(Maybe String) } unicode-data-0.6.0/test/0000755000000000000000000000000007346545000013222 5ustar0000000000000000unicode-data-0.6.0/test/Main.hs0000644000000000000000000000047207346545000014445 0ustar0000000000000000{-# LANGUAGE CPP #-} module Main where import Test.Hspec import qualified Unicode.CharSpec #ifdef HAS_ICU import qualified ICU.CharSpec as ICU #endif main :: IO () main = hspec spec spec :: Spec spec = do describe "Unicode.Char" Unicode.CharSpec.spec #ifdef HAS_ICU describe "ICU.Char" ICU.spec #endif unicode-data-0.6.0/test/Unicode/0000755000000000000000000000000007346545000014610 5ustar0000000000000000unicode-data-0.6.0/test/Unicode/CharSpec.hs0000644000000000000000000003533707346545000016647 0ustar0000000000000000{-# LANGUAGE BlockArguments #-} {-# LANGUAGE CPP #-} module Unicode.CharSpec ( spec ) where import Data.Bits (Bits(..)) import qualified Data.Char as Char import Data.Foldable (traverse_) import Data.Ix (Ix(..)) import Data.Maybe (isJust) import qualified Unicode.Char as UChar import qualified Unicode.Char.General.Blocks as UBlocks import qualified Unicode.Char.Numeric as UNumeric import qualified Unicode.Char.Numeric.Compat as UNumericCompat import qualified Unicode.Internal.Char.UnicodeData.GeneralCategory as UC import Test.Hspec -- Use to display warnings. See note in `shouldBeEqualToV`. import Debug.Trace (traceM) #if MIN_VERSION_base(4,15,0) import Data.Version (showVersion) import GHC.Unicode (unicodeVersion) hasGhcUnicodeVersion :: Bool hasGhcUnicodeVersion = True #else import Data.Version (Version, makeVersion, showVersion) -- | Dummy Unicode version. unicodeVersion :: Version unicodeVersion = makeVersion [0, 0, 0] hasGhcUnicodeVersion :: Bool hasGhcUnicodeVersion = False #endif {- [NOTE] These tests may fail if the compiler’s Unicode version does not match the version of this package. +-------------+----------------+-----------------+ | GHC version | @base@ version | Unicode version | +=============+================+=================+ | 8.8 | 4.13 | 12.0 | | 8.10.[1-4] | 4.14.{0,1} | 12.0 | | 8.10.5+ | 4.14.2+ | 13.0 | | 9.0.[1-2] | 4.15.0 | 12.1 | | 9.2.[1-6] | 4.16.0 | 14.0 | | 9.4.[1-4] | 4.17.0 | 14.0 | | 9.6.[1-3] | 4.18.{0,1} | 15.0 | | 9.6.[4-5] | 4.18.2+ | 15.1 | | 9.8.1 | 4.19.0 | 15.1 | | 9.10.1 | 4.20.0 | 15.1 | +-------------+----------------+-----------------+ -} spec :: Spec spec = do describe "Unicode blocks" do it "Characters not in any block are unassigned" let { check c = case UBlocks.block c of Just _ -> pure () Nothing -> UChar.generalCategory c `shouldBe` UChar.NotAssigned } in traverse_ check [minBound..maxBound] it "Examples" do let blockDef = UBlocks.blockDefinition UBlocks.Latin1Supplement UBlocks.blockRange blockDef `shouldBe` (0x0080, 0x00ff) UBlocks.blockName blockDef `shouldBe` "Latin-1 Supplement" it "Characters are in the definition of their corresponding block" let { check c = case UBlocks.block c of Nothing -> pure () Just b -> let r = UBlocks.blockRange (UBlocks.blockDefinition b) in if inRange r (UChar.ord c) then pure () else expectationFailure $ mconcat [ "Character “", show c , "” is not in the block “", show b, "”." ] } in traverse_ check [minBound..maxBound] it "Characters in a block definition have the corresponding block" let { check b = let r = UBlocks.blockRange (UBlocks.blockDefinition b) in traverse_ (checkChar b. UChar.chr) (range r); checkChar b c = let b' = UBlocks.block c in if b' == Just b then pure () else expectationFailure $ mconcat [ "Block is different for “", show c, "”. Expected: “Just " , show b, "” but got: “", show b', "”." ] } in traverse_ check [minBound..maxBound] describe "Unicode general categories" do it "generalCategory" do -- [NOTE] We cannot compare the categories directly, so use 'show'. (show . UChar.generalCategory) `shouldBeEqualToV` (show . Char.generalCategory) describe "Character classification" do it "isAlpha" do UChar.isAlpha `shouldBeEqualToV` Char.isAlpha describe "isAlphaNum" do let isAlphaNumRef = \case UChar.UppercaseLetter -> True UChar.LowercaseLetter -> True UChar.TitlecaseLetter -> True UChar.ModifierLetter -> True UChar.OtherLetter -> True UChar.DecimalNumber -> True UChar.LetterNumber -> True UChar.OtherNumber -> True _ -> False it "Check max codepoint for isAlphaNum" do Char.chr UC.MaxIsAlphaNum `shouldBe` maxCodePointBy isAlphaNumRef UC.MaxIsAlphaNum `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isAlphaNum `shouldBeEqualToV` Char.isAlphaNum it "isControl" do UChar.isControl `shouldBeEqualToV` Char.isControl describe "isLetter" do let isLetterRef = \case UChar.UppercaseLetter -> True UChar.LowercaseLetter -> True UChar.TitlecaseLetter -> True UChar.ModifierLetter -> True UChar.OtherLetter -> True _ -> False it "Check max codepoint for isLetterRef" do Char.chr UC.MaxIsLetter `shouldBe` maxCodePointBy isLetterRef UC.MaxIsLetter `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isLetter `shouldBeEqualToV` Char.isLetter it "isMark" do UChar.isMark `shouldBeEqualToV` Char.isMark it "isPrint" do UChar.isPrint `shouldBeEqualToV` Char.isPrint it "isPunctuation" do UChar.isPunctuation `shouldBeEqualToV` Char.isPunctuation describe "isSeparator" do it "Check max codepoint for isSeparator" do let isSeparatorRef = \case UChar.Space -> True UChar.LineSeparator -> True UChar.ParagraphSeparator -> True _ -> False Char.chr UC.MaxIsSeparator `shouldBe` maxCodePointBy isSeparatorRef UC.MaxIsSeparator `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isSeparator `shouldBeEqualToV` Char.isSeparator describe "isSpace" do it "Check max codepoint for Space" do let isSpaceRef = (== UChar.Space) Char.chr UC.MaxIsSpace `shouldBe` maxCodePointBy isSpaceRef UC.MaxIsSpace `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isSpace `shouldBeEqualToV` Char.isSpace it "isSymbol" do UChar.isSymbol `shouldBeEqualToV` Char.isSymbol describe "Case" do describe "isLower" do it "Check max codepoint for lower" do let isLowerRef = (== UChar.LowercaseLetter) Char.chr UC.MaxIsLower `shouldBe` maxCodePointBy isLowerRef UC.MaxIsLower `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isLower `shouldBeEqualToV` Char.isLower #if MIN_VERSION_base(4,18,0) it "isLowerCase" do UChar.isLowerCase `shouldBeEqualToV` Char.isLowerCase #endif describe "isUpper" do it "Check max codepoint for upper" do let isUpperRef = \case UChar.UppercaseLetter -> True UChar.TitlecaseLetter -> True _ -> False Char.chr UC.MaxIsUpper `shouldBe` maxCodePointBy isUpperRef UC.MaxIsUpper `shouldSatisfy` isPlane0To3 it "Compare to base" do UChar.isUpper `shouldBeEqualToV` Char.isUpper #if MIN_VERSION_base(4,18,0) it "isUpperCase" do UChar.isUpperCase `shouldBeEqualToV` Char.isUpperCase #endif it "toLower" do UChar.toLower `shouldBeEqualToV` Char.toLower let caseCheck f (c, cs) = c `shouldSatisfy` (== cs) . f describe "toLowerString" do it "Examples" do let examples = [ ('\0', "\0") , ('a', "a") , ('A', "a") , ('1', "1") , ('\x130', "i\x307") ] traverse_ (caseCheck UChar.toLowerString) examples it "Common mapping should match simple one" do let check c = case UChar.toLowerString c of [c'] -> c `shouldSatisfy` ((== c') . UChar.toLower) _ -> pure () traverse_ check [minBound..maxBound] it "Idempotency of 'foldMap toLowerString'" do let check c = c `shouldSatisfy` \c' -> let cf = UChar.toLowerString c' in cf == foldMap UChar.toLowerString cf traverse_ check [minBound..maxBound] it "toUpper" do UChar.toUpper `shouldBeEqualToV` Char.toUpper describe "toUpperString" do it "Examples" do let examples = [ ('\0', "\0") , ('a', "A") , ('A', "A") , ('1', "1") , ('\xdf', "SS") , ('\x1F52', "\x03A5\x0313\x0300") ] traverse_ (caseCheck UChar.toUpperString) examples it "Common mapping should match simple one" do let check c = case UChar.toUpperString c of [c'] -> c `shouldSatisfy` ((== c') . UChar.toUpper) _ -> pure () traverse_ check [minBound..maxBound] it "Idempotency of 'foldMap toUpperString'" do let check c = c `shouldSatisfy` \c' -> let cf = UChar.toUpperString c' in cf == foldMap UChar.toUpperString cf traverse_ check [minBound..maxBound] it "toTitle" do UChar.toTitle `shouldBeEqualToV` Char.toTitle describe "toTitleString" do it "Examples" do let examples = [ ('\0', "\0") , ('a', "A") , ('A', "A") , ('1', "1") , ('\xdf', "Ss") , ('\xfb02', "Fl") , ('\x1F52', "\x03A5\x0313\x0300") ] traverse_ (caseCheck UChar.toTitleString) examples it "Common mapping should match simple one" do let check c = case UChar.toTitleString c of [c'] -> c `shouldSatisfy` ((== c') . UChar.toTitle) _ -> pure () traverse_ check [minBound..maxBound] describe "toCaseFoldString" do it "Examples" do let examples = [ ('\0', "\0") , ('a', "a") , ('A', "a") , ('1', "1") , ('\xb5', "\x3bc") , ('\xfb13', "\x574\x576") ] traverse_ (caseCheck UChar.toCaseFoldString) examples it "Idempotency of 'foldMap toCaseFoldString'" do let check c = c `shouldSatisfy` \c' -> let cf = UChar.toCaseFoldString c' in cf == foldMap UChar.toCaseFoldString cf traverse_ check [minBound..maxBound] describe "Numeric" do describe "isNumber" do it "Check max codepoint for numbers" do let isNumber = \case UChar.DecimalNumber -> True UChar.LetterNumber -> True UChar.OtherNumber -> True _ -> False Char.chr UC.MaxIsNumber `shouldBe` maxCodePointBy isNumber UC.MaxIsNumber `shouldSatisfy` isPlane0To3 it "Compare to base" do UNumericCompat.isNumber `shouldBeEqualToV` Char.isNumber it "isNumber implies a numeric value" do -- [NOTE] the following does not hold with the current predicate `isNumber`. -- As of Unicode 15.0.0, there are 81 such characters (all CJK). -- let check c = (UNumeric.isNumber c `xor` isNothing (UNumeric.numericValue c)) let check c = not (UNumericCompat.isNumber c) || isJust (UNumeric.numericValue c) traverse_ (`shouldSatisfy` check) [minBound..maxBound] where -- [NOTE] Unused for now -- shouldBeEqualTo -- :: forall a b. (Bounded a, Enum a, Show a, Eq b, Show b) -- => (a -> b) -- -> (a -> b) -- -> IO () -- shouldBeEqualTo f g = -- let same x = f x == g x -- in traverse_ (`shouldSatisfy` same) [minBound..maxBound] -- There is no feature to display warnings other than `trace`. -- If we use `pendingWith` then the whole test is pending, not just -- the assertion. shouldBeEqualToV :: forall b. (HasCallStack) => (Eq b, Show b) => (Char -> b) -> (Char -> b) -> IO () shouldBeEqualToV f g = let same x = f x == g x in traverse_ (`shouldSatisfyV` same) [minBound..maxBound] shouldSatisfyV :: (HasCallStack) => Char -> (Char -> Bool) -> IO () shouldSatisfyV c h | hasSameUnicodeVersion = shouldSatisfy c h | h c = pure () | not hasGhcUnicodeVersion = traceM . mconcat $ [ "[WARNING] Cannot test ", show c , ": incompatible Unicode version (GHC too old). Expected " , showVersion UChar.unicodeVersion ] | isUnassigned c = traceM . mconcat $ [ "[WARNING] Cannot test ", show c , ": incompatible Unicode version (unassigned char). Expected " , showVersion UChar.unicodeVersion , ", but got: " , showVersion unicodeVersion ] | hasDifferentCategory c = traceM . mconcat $ [ "[WARNING] Cannot test ", show c , ": incompatible Unicode version (different general category)." , " Expected " , showVersion UChar.unicodeVersion , ", but got: " , showVersion unicodeVersion ] | otherwise = shouldSatisfy c h -- Check if the character is not assigned in exactly one Unicode version. isUnassigned c = (UChar.generalCategory c == UChar.NotAssigned) `xor` (Char.generalCategory c == Char.NotAssigned) -- Check if the character has changed its general category hasDifferentCategory c = fromEnum (UChar.generalCategory c) /= fromEnum (Char.generalCategory c) hasSameUnicodeVersion = unicodeVersion == UChar.unicodeVersion -- [NOTE] Unused for now -- shouldBe' x y -- | x == y = pure () -- | unicodeVersion /= UChar.unicodeVersion = traceM msg -- | otherwise = shouldBe x y -- where -- msg = mconcat -- [ "[WARNING] Cannot test ", show x -- , ": incompatible Unicode version. Expected " -- , showVersion UChar.unicodeVersion -- , ", but got: " -- , unicodeVersionString ] isPlane0To3 = (< 0x40000) maxCodePointBy p = foldr (\c -> if p (UChar.generalCategory c) then max c else id) minBound [minBound..maxBound] unicode-data-0.6.0/unicode-data.cabal0000644000000000000000000001275707346545000015600 0ustar0000000000000000cabal-version: 2.2 name: unicode-data version: 0.6.0 synopsis: Access Unicode Character Database (UCD) description: @unicode-data@ provides Haskell APIs to efficiently access the (UCD). Performance is the primary goal in the design of this package. . The Haskell data structures are generated programmatically from the UCD files. The latest Unicode version supported by this library is @@. homepage: http://github.com/composewell/unicode-data bug-reports: https://github.com/composewell/unicode-data/issues license: Apache-2.0 license-file: LICENSE author: Composewell Technologies and Contributors maintainer: streamly@composewell.com copyright: 2020 Composewell Technologies and Contributors category: Data,Text,Unicode stability: Experimental build-type: Simple tested-with: GHC==8.0.2 , GHC==8.2.2 , GHC==8.4.4 , GHC==8.6.5 , GHC==8.8.4 , GHC==8.10.7 , GHC==9.0.2 , GHC==9.2.8 , GHC==9.4.8 , GHC==9.6.5 , GHC==9.8.2 , GHC==9.10.1 extra-doc-files: Changelog.md README.md NOTICE source-repository head type: git location: https://github.com/composewell/unicode-data common default-extensions default-extensions: BangPatterns DeriveGeneric MagicHash RecordWildCards ScopedTypeVariables TupleSections FlexibleContexts LambdaCase -- Experimental, may lead to issues UnboxedTuples common compile-options ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs default-language: Haskell2010 flag dev-has-icu description: Use ICU for test and benchmark. Intended for development on the repository. manual: True default: False library import: default-extensions, compile-options exposed-modules: Unicode.Char -- The module structure is derived from -- https://www.unicode.org/reports/tr44/#Property_Index_Table Unicode.Char.Case Unicode.Char.Case.Compat Unicode.Char.General Unicode.Char.General.Blocks Unicode.Char.General.Compat Unicode.Char.Identifiers Unicode.Char.Normalization Unicode.Char.Numeric Unicode.Char.Numeric.Compat -- Internal files Unicode.Internal.Bits Unicode.Internal.Division Unicode.Internal.Unfold -- Generated files -- This module structure is largely based on the UCD file names from which -- the properties are generated. Unicode.Internal.Char.Blocks Unicode.Internal.Char.CaseFolding Unicode.Internal.Char.DerivedCoreProperties Unicode.Internal.Char.DerivedNumericValues Unicode.Internal.Char.PropList Unicode.Internal.Char.SpecialCasing.LowerCaseMapping Unicode.Internal.Char.SpecialCasing.TitleCaseMapping Unicode.Internal.Char.SpecialCasing.UpperCaseMapping Unicode.Internal.Char.UnicodeData.CombiningClass Unicode.Internal.Char.UnicodeData.Compositions Unicode.Internal.Char.UnicodeData.Decomposable Unicode.Internal.Char.UnicodeData.DecomposableK Unicode.Internal.Char.UnicodeData.Decompositions Unicode.Internal.Char.UnicodeData.DecompositionsK Unicode.Internal.Char.UnicodeData.DecompositionsK2 Unicode.Internal.Char.UnicodeData.GeneralCategory Unicode.Internal.Char.UnicodeData.SimpleLowerCaseMapping Unicode.Internal.Char.UnicodeData.SimpleTitleCaseMapping Unicode.Internal.Char.UnicodeData.SimpleUpperCaseMapping Unicode.Internal.Char.Version hs-source-dirs: lib ghc-options: -O2 build-depends: base >=4.7 && < 4.21 if impl(ghc < 9.0) -- Required for unpackCString# build-depends: ghc-prim test-suite test import: default-extensions, compile-options type: exitcode-stdio-1.0 main-is: Main.hs hs-source-dirs: test other-modules: Unicode.CharSpec build-depends: base >= 4.7 && < 4.21 , hspec >= 2.0 && < 2.12 , unicode-data if flag(dev-has-icu) cpp-options: -DHAS_ICU other-modules: ICU.CharSpec build-depends: icu benchmark bench import: default-extensions, compile-options type: exitcode-stdio-1.0 hs-source-dirs: bench main-is: Main.hs other-modules: Unicode.Char.Bench Unicode.Char.CaseBench Unicode.Char.Case.CompatBench Unicode.Char.GeneralBench Unicode.Char.General.BlocksBench Unicode.Char.General.CompatBench Unicode.Char.IdentifiersBench Unicode.Char.NormalizationBench Unicode.Char.NumericBench Unicode.Char.Numeric.CompatBench build-depends: base >= 4.7 && < 4.21, deepseq >= 1.1 && < 1.6, tasty-bench >= 0.2.5 && < 0.4, tasty >= 1.4.1 && < 1.6, unicode-data if impl(ghc < 9.0) -- Required for noinline build-depends: ghc-prim -- [NOTE] Recommendation of tasty-bench to reduce garbage collection noisiness ghc-options: -O2 -fdicts-strict -rtsopts -with-rtsopts=-A32m -- [NOTE] Recommendation of tasty-bench for comparison against baseline if impl(ghc >= 8.6) ghc-options: -fproc-alignment=64