packages feed

basement 0.0.5 → 0.0.6

raw patch · 20 files changed

+3801/−119 lines, 20 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Basement.From: instance Basement.From.From GHC.Types.Int GHC.Types.Word
- Basement.From: instance Basement.From.From GHC.Types.Word GHC.Types.Int
- Basement.IntegralConv: class IntegralCast a b
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Int.Int16 GHC.Word.Word16
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Int.Int32 GHC.Word.Word32
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Int.Int64 GHC.Word.Word64
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Int.Int8 GHC.Word.Word8
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Types.Int GHC.Types.Word
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Types.Word GHC.Types.Int
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Word.Word16 GHC.Int.Int16
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Word.Word32 GHC.Int.Int32
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Word.Word64 GHC.Int.Int64
- Basement.IntegralConv: instance Basement.IntegralConv.IntegralCast GHC.Word.Word8 GHC.Int.Int8
- Basement.IntegralConv: integralCast :: (IntegralCast a b, a ~ b) => a -> b
- Basement.Types.OffsetSize: instance Basement.IntegralConv.IntegralCast GHC.Types.Int (Basement.Types.OffsetSize.CountOf ty)
- Basement.Types.OffsetSize: instance Basement.IntegralConv.IntegralCast GHC.Types.Int (Basement.Types.OffsetSize.Offset ty)
- Basement.Types.OffsetSize: instance Basement.IntegralConv.IntegralCast GHC.Types.Word (Basement.Types.OffsetSize.CountOf ty)
- Basement.Types.OffsetSize: instance Basement.IntegralConv.IntegralCast GHC.Types.Word (Basement.Types.OffsetSize.Offset ty)
+ Basement.Block.Builder: data Builder
+ Basement.Block.Builder: emit :: Block a -> Builder
+ Basement.Block.Builder: emitPrim :: (PrimType ty, ty ~ Word8) => ty -> Builder
+ Basement.Block.Builder: emitString :: String -> Builder
+ Basement.Block.Builder: emitUTF8Char :: Char -> Builder
+ Basement.Block.Builder: instance Data.Semigroup.Semigroup Basement.Block.Builder.Builder
+ Basement.Block.Builder: instance GHC.Base.Monoid Basement.Block.Builder.Builder
+ Basement.Block.Builder: run :: PrimMonad prim => Builder -> prim (Block Word8)
+ Basement.Block.Builder: unsafeRunString :: PrimMonad prim => Builder -> prim String
+ Basement.Block.Mutable: unsafeCopyBytesPtr :: forall prim ty. PrimMonad prim => MutableBlock ty (PrimState prim) -> Offset Word8 -> Ptr ty -> CountOf Word8 -> prim ()
+ Basement.Cast: cast :: (Cast source destination, PrimType source, PrimType destination, PrimSize source ~ PrimSize destination) => source -> destination
+ Basement.Cast: class Cast source destination
+ Basement.Cast: instance Basement.Cast.Cast (Basement.Block.Base.Block a) (Basement.Block.Base.Block GHC.Word.Word8)
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int16 GHC.Word.Word16
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int32 GHC.Word.Word32
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int64 GHC.Types.Int
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int64 GHC.Types.Word
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int64 GHC.Word.Word64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Int.Int8 GHC.Word.Word8
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Int GHC.Int.Int64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Int GHC.Types.Word
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Int GHC.Word.Word64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Word GHC.Int.Int64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Word GHC.Types.Int
+ Basement.Cast: instance Basement.Cast.Cast GHC.Types.Word GHC.Word.Word64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word16 GHC.Int.Int16
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word32 GHC.Int.Int32
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word64 GHC.Int.Int64
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word64 GHC.Types.Int
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word64 GHC.Types.Word
+ Basement.Cast: instance Basement.Cast.Cast GHC.Word.Word8 GHC.Int.Int8
+ Basement.Compat.AMP: type AMPMonad m = Monad m
+ Basement.From: instance Basement.From.From GHC.Types.Word (Basement.Types.OffsetSize.CountOf ty)
+ Basement.From: instance Basement.From.From GHC.Types.Word (Basement.Types.OffsetSize.Offset ty)
+ Basement.From: instance Basement.From.From GHC.Word.Word16 GHC.Int.Int32
+ Basement.From: instance Basement.From.From GHC.Word.Word16 GHC.Int.Int64
+ Basement.From: instance Basement.From.From GHC.Word.Word16 GHC.Types.Int
+ Basement.From: instance Basement.From.From GHC.Word.Word32 GHC.Int.Int64
+ Basement.From: instance Basement.From.From GHC.Word.Word32 GHC.Types.Int
+ Basement.From: instance Basement.From.TryFrom GHC.Types.Int (Basement.Types.OffsetSize.CountOf ty)
+ Basement.From: instance Basement.From.TryFrom GHC.Types.Int (Basement.Types.OffsetSize.Offset ty)
+ Basement.PrimType: type family PrimSize ty :: Nat;
+ Basement.PrimType: }
+ Basement.String.Builder: data Builder
+ Basement.String.Builder: emit :: String -> Builder
+ Basement.String.Builder: emitChar :: Char -> Builder
+ Basement.String.Builder: instance Data.Semigroup.Semigroup Basement.String.Builder.Builder
+ Basement.String.Builder: instance GHC.Base.Monoid Basement.String.Builder.Builder
+ Basement.String.Builder: run :: PrimMonad prim => Builder -> prim (String, Maybe ValidationFailure, UArray Word8)
+ Basement.String.Builder: runUnsafe :: PrimMonad prim => Builder -> prim String
+ Basement.UArray: type family PrimSize ty :: Nat;
+ Basement.UArray: }
- Basement.Monad: class Monad m => MonadFailure m where {
+ Basement.Monad: class AMPMonad m => MonadFailure m where {
- Basement.PrimType: class Eq ty => PrimType ty
+ Basement.PrimType: class Eq ty => PrimType ty where {
- Basement.UArray: class Eq ty => PrimType ty
+ Basement.UArray: class Eq ty => PrimType ty where {

Files

Basement/Block/Base.hs view
@@ -8,10 +8,12 @@     , unsafeNew     , unsafeThaw     , unsafeFreeze+    , unsafeShrink     , unsafeCopyElements     , unsafeCopyElementsRO     , unsafeCopyBytes     , unsafeCopyBytesRO+    , unsafeCopyBytesPtr     , unsafeRead     , unsafeWrite     , unsafeIndex@@ -30,6 +32,7 @@     , withMutablePtr     , withMutablePtrHint     , mutableWithPtr+    , unsafeRecast     ) where  import           GHC.Prim@@ -228,30 +231,27 @@     !la = lengthBytes a     !lb = lengthBytes b -concat :: [Block ty] -> Block ty-concat [] = empty-concat l  =-    case filterAndSum 0 [] l of-        (_,[])            -> empty-        (_,[x])           -> x-        (totalLen,chunks) -> runST $ do-            r <- unsafeNew Unpinned totalLen-            doCopy r 0 chunks-            unsafeFreeze r+concat :: forall ty . [Block ty] -> Block ty+concat original = runST $ do+    r <- unsafeNew Unpinned total+    goCopy r zero original+    unsafeFreeze r   where-    -- TODO would go faster not to reverse but pack from the end instead-    filterAndSum !totalLen acc []     = (totalLen, Data.List.reverse acc)-    filterAndSum !totalLen acc (x:xs)-        | len == 0  = filterAndSum totalLen acc xs-        | otherwise = filterAndSum (len+totalLen) (x:acc) xs-      where len = lengthBytes x+    !total = size 0 original+    -- size+    size !sz []     = sz+    size !sz (x:xs) = size (lengthBytes x + sz) xs -    doCopy _ _ []     = return ()-    doCopy r i (x:xs) = do-        unsafeCopyBytesRO r i x 0 lx-        doCopy r (i `offsetPlusE` lx) xs-      where !lx = lengthBytes x+    zero = Offset 0 +    goCopy r = loop+      where+        loop _  []      = pure ()+        loop !i (x:xs) = do+            unsafeCopyBytesRO r i x zero lx+            loop (i `offsetPlusE` lx) xs+          where !lx = lengthBytes x+ -- | Freeze a mutable block into a block. -- -- If the mutable block is still use after freeze,@@ -263,6 +263,11 @@         (# s2, ba #) -> (# s2, Block ba #) {-# INLINE unsafeFreeze #-} +unsafeShrink :: PrimMonad prim => MutableBlock ty (PrimState prim) -> CountOf ty -> prim (MutableBlock ty (PrimState prim))+unsafeShrink (MutableBlock mba) (CountOf (I# nsz)) = primitive $ \s ->+    case compatShrinkMutableByteArray# mba nsz s of+        (# s, mba' #) -> (# s, MutableBlock mba' #)+ -- | Thaw an immutable block. -- -- If the immutable block is modified, then the original immutable block will@@ -348,6 +353,17 @@     primitive $ \st -> (# copyByteArray# srcBa s dstMba d n st, () #) {-# INLINE unsafeCopyBytesRO #-} +-- | Copy a number of bytes from a Ptr to a MutableBlock with specific byte offsets+unsafeCopyBytesPtr :: forall prim ty . PrimMonad prim+                   => MutableBlock ty (PrimState prim) -- ^ destination mutable block+                   -> Offset Word8                     -- ^ offset at destination+                   -> Ptr ty                           -- ^ source block+                   -> CountOf Word8                    -- ^ number of bytes to copy+                   -> prim ()+unsafeCopyBytesPtr (MutableBlock dstMba) (Offset (I# d)) (Ptr srcBa) (CountOf (I# n)) =+    primitive $ \st -> (# copyAddrToByteArray# srcBa dstMba d n st, () #)+{-# INLINE unsafeCopyBytesPtr #-}+ -- | read from a cell in a mutable block without bounds checking. -- -- Reading from invalid memory can return unpredictable and invalid values.@@ -390,6 +406,11 @@ touch :: PrimMonad prim => Block ty -> prim () touch (Block ba) =     unsafePrimFromIO $ primitive $ \s -> case touch# ba s of { s2 -> (# s2, () #) }++unsafeRecast :: (PrimType t1, PrimType t2)+             => MutableBlock t1 st+             -> MutableBlock t2 st+unsafeRecast (MutableBlock mba) = MutableBlock mba  -- | Use the 'Ptr' to a mutable block in a safer construct --
+ Basement/Block/Builder.hs view
@@ -0,0 +1,151 @@+-- |+-- Module      : Basement.Block.Builder+-- License     : BSD-style+-- Maintainer  : Foundation+--+-- Block builder++{-# LANGUAGE Rank2Types #-}++module Basement.Block.Builder+    ( Builder+    , run++    -- * Emit functions+    , emit+    , emitPrim+    , emitString+    , emitUTF8Char++    -- * unsafe+    , unsafeRunString+    ) where++import qualified Basement.Alg.Native.UTF8      as PrimBA+import           Basement.UTF8.Helper          (charToBytes)+import           Basement.Numerical.Conversion (charToInt)+import           Basement.Block.Base (Block(..), MutableBlock(..))+import qualified Basement.Block.Base as B+import           Basement.Cast+import           Basement.Compat.Base+import           Basement.Compat.Semigroup+import           Basement.Monad+import           Basement.FinalPtr (FinalPtr, withFinalPtr)+import           Basement.Numerical.Additive+import           Basement.String                (String(..))+import qualified Basement.String as S+import           Basement.Types.OffsetSize+import           Basement.PrimType (PrimType(..), primMbaWrite)+import           Basement.UArray.Base (UArray(..))+import qualified Basement.UArray.Base as A++import           GHC.ST+import           Data.Proxy++newtype Action = Action+    { runAction_ :: forall prim . PrimMonad prim+                 => MutableBlock Word8 (PrimState prim)+                 -> Offset Word8+                 -> prim (Offset Word8)+    }++data Builder = Builder {-# UNPACK #-} !(CountOf Word8)+                                      !Action++instance Semigroup Builder where+    (<>) = append+    {-# INLINABLE (<>) #-}+instance Monoid Builder where+    mempty = empty+    {-# INLINE mempty #-}+    mappend = append+    {-# INLINABLE mappend #-}+    mconcat = concat+    {-# INLINABLE mconcat #-}++-- | create an empty builder+--+-- this does nothing, build nothing, take no space (in the resulted block)+empty :: Builder+empty = Builder 0 (Action $ \_ !off -> pure off)+{-# INLINE empty #-}++-- | concatenate the 2 given bulider+append :: Builder -> Builder -> Builder+append (Builder size1 (Action action1)) (Builder size2 (Action action2)) =+    Builder size action+  where+    action = Action $ \arr off -> do+      off' <- action1 arr off+      action2 arr off'+    size = size1 + size2+{-# INLINABLE append #-}++-- | concatenate the list of builder+concat :: [Builder] -> Builder+concat = loop 0 (Action $ \_ !off -> pure off)+  where+    loop !sz acc          []                              = Builder sz acc+    loop !sz (Action acc) (Builder !s (Action action):xs) =+       loop (sz + s) (Action $ \arr off -> acc arr off >>= action arr) xs+{-# INLINABLE concat #-}++-- | run the given builder and return the generated block+run :: PrimMonad prim => Builder -> prim (Block Word8)+run (Builder sz action) = do+    mb <- B.new sz+    off <- runAction_ action mb 0+    B.unsafeShrink mb (offsetAsSize off) >>= B.unsafeFreeze++-- | run the given builder and return a UTF8String+--+-- this action is unsafe as there is no guarantee upon the validity of the+-- content of the built block.+unsafeRunString :: PrimMonad prim => Builder -> prim String+unsafeRunString b = do+    str <- run b+    pure $ String $ A.UArray 0 (B.length str) (A.UArrayBA str)++-- | add a Block in the builder+emit :: Block a -> Builder+emit b = Builder size $ Action $ \arr off ->+    B.unsafeCopyBytesRO arr off b' 0 size *> pure (off + sizeAsOffset size)+  where+    b' :: Block Word8+    b' = cast b+    size :: CountOf Word8+    size = B.length b'++emitPrim :: (PrimType ty, ty ~ Word8) => ty -> Builder+emitPrim a = Builder size $ Action $ \(MutableBlock arr) off ->+    primMbaWrite arr off a *> pure (off + sizeAsOffset size)+  where+    size = getSize Proxy a+    getSize :: PrimType ty => Proxy ty -> ty -> CountOf Word8+    getSize p _ = primSizeInBytes p++-- | add a string in the builder+emitString :: String -> Builder+emitString (String str) = Builder size $ Action $ \arr off ->+    A.onBackendPrim (onBA arr off) (onAddr arr off) str *> pure (off + sizeAsOffset size)+  where+    size = A.length str+    onBA :: PrimMonad prim+         => MutableBlock Word8 (PrimState prim)+         -> Offset Word8+         -> Block Word8+         -> prim ()+    onBA   arr off ba   = B.unsafeCopyBytesRO arr off ba 0 size+    onAddr :: PrimMonad prim+           => MutableBlock Word8 (PrimState prim)+           -> Offset Word8+           -> FinalPtr Word8+           -> prim ()+    onAddr arr off fptr = withFinalPtr fptr $ \ptr -> B.unsafeCopyBytesPtr arr off ptr size++-- | emit a UTF8 char in the builder+--+-- this function may be replaced by `emit :: Encoding -> Char -> Builder`+emitUTF8Char :: Char -> Builder+emitUTF8Char c = Builder (charToBytes $ charToInt c) $ Action $ \(MutableBlock arr) off ->+    PrimBA.write arr off c
Basement/Block/Mutable.hs view
@@ -58,6 +58,7 @@     , unsafeCopyElementsRO     , unsafeCopyBytes     , unsafeCopyBytesRO+    , unsafeCopyBytesPtr     -- * Foreign     , copyFromPtr     , copyToPtr
+ Basement/Cast.hs view
@@ -0,0 +1,125 @@+{-# LANGUAGE ConstraintKinds       #-}+{-# LANGUAGE CPP                   #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE DefaultSignatures     #-}+{-# LANGUAGE MagicHash             #-}+{-# LANGUAGE MultiParamTypeClasses #-}+-- |+-- Module      : Basement.Cast+-- License     : BSD-style+-- Maintainer  : Haskell Foundation+--+module Basement.Cast+    ( Cast(..)+    ) where++#include "MachDeps.h"++import qualified Basement.Block.Base as Block+import           Basement.Compat.Base+import           Basement.Compat.Natural+import           Basement.Numerical.Number+import           Basement.Numerical.Conversion+import           Basement.PrimType++import           Data.Proxy (Proxy(..))++import           GHC.Int+import           GHC.Prim+import           GHC.Types+import           GHC.ST+import           GHC.Word++-- | `Cast` an object of type a to b.+--+-- Do not add instance of this class if the source type is not of the same+-- size of the destination type. Also keep in mind this is casting a value+-- of a given type into a destination type. The value won't be changed to+-- fit the destination represention.+--+-- If you wish to convert a value of a given type into another type, look at+-- `From` and `TryFrom`.+--+-- @+-- cast (-10 :: Int) :: Word === 18446744073709551606+-- @+--+class Cast source destination where+    cast :: source -> destination++    default cast :: ( PrimType source+                    , PrimType destination+                    , PrimSize source ~ PrimSize destination+                    )+                 => source -> destination+    cast a = runST $ do+        mba <- Block.new 1+        Block.unsafeWrite mba 0 a+        Block.unsafeRead (Block.unsafeRecast mba) 0++instance Cast Int8  Word8 where+    cast (I8# i) = W8# (narrow8Word# (int2Word# i))+instance Cast Int16 Word16 where+    cast (I16# i) = W16# (narrow16Word# (int2Word# i))+instance Cast Int32 Word32 where+    cast (I32# i) = W32# (narrow32Word# (int2Word# i))+instance Cast Int64 Word64 where+    cast = int64ToWord64+instance Cast Int   Word where+    cast (I# i) = W# (int2Word# i)++instance Cast Word8  Int8 where+    cast (W8# i) = I8# (narrow8Int# (word2Int# i))+instance Cast Word16 Int16 where+    cast (W16# i) = I16# (narrow16Int# (word2Int# i))+instance Cast Word32 Int32 where+    cast (W32# i) = I32# (narrow32Int# (word2Int# i))+instance Cast Word64 Int64 where+    cast = word64ToInt64+instance Cast Word   Int where+    cast (W# w) = I# (word2Int# w)++#if WORD_SIZE_IN_BITS == 64+instance Cast Word   Word64 where+    cast (W# w) = W64# w+instance Cast Word64 Word where+    cast (W64# w) = W# w++instance Cast Word   Int64 where+    cast (W# w) = I64# (word2Int# w)+instance Cast Int64  Word where+    cast (I64# i) = W# (int2Word# i)++instance Cast Int    Int64 where+    cast (I# i) = I64# i+instance Cast Int64  Int where+    cast (I64# i) = I# i++instance Cast Int    Word64 where+    cast (I# i) = W64# (int2Word# i)+instance Cast Word64 Int where+    cast (W64# w) = I# (word2Int# w)+#else+instance Cast Word   Word32 where+    cast (W# w) = W32# w+instance Cast Word32 Word where+    cast (W32# w) = W# w++instance Cast Word   Int32 where+    cast (W# w) = I32# (word2Int# w)+instance Cast Int32  Word where+    cast (I32# i) = W# (int2Word# i)++instance Cast Int    Int32 where+    cast (I# i) = I32# i+instance Cast Int32  Int where+    cast (I32# i) = I# i++instance Cast Int    Word32 where+    cast (I# i) = W32# (int2Word# i)+instance Cast Word32 Int where+    cast (W32# w) = I# (word2Int# w)+#endif++instance Cast (Block.Block a) (Block.Block Word8) where+    cast (Block.Block ba) = Block.Block ba
+ Basement/Compat/AMP.hs view
@@ -0,0 +1,14 @@+{-# LANGUAGE CPP             #-}+{-# LANGUAGE ConstraintKinds #-}+-- a compat module for ghc < 7.10 to handle the AMP change smoothly+module Basement.Compat.AMP+    ( AMPMonad+    ) where++import Basement.Compat.Base++#if MIN_VERSION_base(4,8,0)+type AMPMonad m = Monad m+#else+type AMPMonad m = (Functor m, Applicative m, Monad m)+#endif
Basement/From.hs view
@@ -41,6 +41,7 @@ import           Basement.Numerical.Conversion import qualified Basement.Block as Block import qualified Basement.BoxedArray as BoxArray+import           Basement.Cast (cast) import qualified Basement.UArray as UArray import qualified Basement.String as String import qualified Basement.Types.AsciiString as AsciiString@@ -94,12 +95,6 @@ instance From a a where     from = id --- Simple numerical instances-instance From Int Word where-    from (I# i) = W# (int2Word# i)-instance From Word Int where-    from (W# w) = I# (word2Int# w)- instance IsNatural n => From n Natural where     from = toNatural instance IsIntegral n => From n Integer where@@ -160,6 +155,12 @@     from (W16# i) = Word256 0 0 0 (wordToWord64 $ W# i) instance From Word16 Word where     from (W16# i) = W# i+instance From Word16 Int32 where+    from (W16# w) = I32# (word2Int# w)+instance From Word16 Int64 where+    from (W16# w) = intToInt64 (I# (word2Int# w))+instance From Word16 Int where+    from (W16# w) = I# (word2Int# w)  instance From Word32 Word64 where     from (W32# i) = wordToWord64 (W# i)@@ -169,6 +170,10 @@     from (W32# i) = Word256 0 0 0 (wordToWord64 $ W# i) instance From Word32 Word where     from (W32# i) = W# i+instance From Word32 Int64 where+    from (W32# w) = intToInt64 (I# (word2Int# w))+instance From Word32 Int where+    from (W32# w) = I# (word2Int# w)  instance From Word64 Word128 where     from w = Word128 0 w@@ -187,7 +192,21 @@ instance From (CountOf ty) Int where     from (CountOf n) = n instance From (CountOf ty) Word where-    from (CountOf n) = from n+    -- here it is ok to cast the underlying `Int` held by `CountOf` to a `Word`+    -- as the `Int` should never hold a negative value.+    from (CountOf n) = cast n+instance From Word (Offset ty) where+    from w = Offset (cast w)+instance TryFrom Int (Offset ty) where+    tryFrom i+        | i < 0     = Nothing+        | otherwise = Just (Offset i)+instance TryFrom Int (CountOf ty) where+    tryFrom i+        | i < 0     = Nothing+        | otherwise = Just (CountOf i)+instance From Word (CountOf ty) where+    from w = CountOf (cast w)  instance From (Either a b) (These a b) where     from (Left a) = This a
Basement/IntegralConv.hs view
@@ -7,7 +7,6 @@ module Basement.IntegralConv     ( IntegralDownsize(..)     , IntegralUpsize(..)-    , IntegralCast(..)     , intToInt64     , int64ToInt     , wordToWord64@@ -44,13 +43,6 @@ class IntegralUpsize a b where     integralUpsize      :: a -> b --- | Cast an integral value to another value--- that have the same representional size-class IntegralCast a b where-    integralCast :: a -> b-    default integralCast :: a ~ b => a -> b-    integralCast = id- integralDownsizeBounded :: forall a b . (Ord a, Bounded b, IntegralDownsize a b, IntegralUpsize b a)                         => (a -> b)                         -> a@@ -219,30 +211,3 @@ instance IntegralDownsize Natural Word64 where     integralDownsize = fromIntegral     integralDownsizeCheck = integralDownsizeBounded integralDownsize--instance IntegralCast Word Int where-    integralCast (W# w) = I# (word2Int# w)-instance IntegralCast Int Word where-    integralCast (I# i) = W# (int2Word# i)-instance IntegralCast Word64 Int64 where-    integralCast = word64ToInt64-instance IntegralCast Int64 Word64 where-    integralCast = int64ToWord64--instance IntegralCast Int8 Word8 where-    integralCast (I8# i) = W8# (narrow8Word# (int2Word# i))--instance IntegralCast Int16 Word16 where-    integralCast (I16# i) = W16# (narrow16Word# (int2Word# i))--instance IntegralCast Int32 Word32 where-    integralCast (I32# i) = W32# (narrow32Word# (int2Word# i))--instance IntegralCast Word8 Int8 where-    integralCast (W8# i) = I8# (narrow8Int# (word2Int# i))--instance IntegralCast Word16 Int16 where-    integralCast (W16# i) = I16# (narrow16Int# (word2Int# i))--instance IntegralCast Word32 Int32 where-    integralCast (W32# i) = I32# (narrow32Int# (word2Int# i))
Basement/Monad.hs view
@@ -16,6 +16,7 @@ {-# LANGUAGE MagicHash #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE ConstraintKinds #-} module Basement.Monad     ( PrimMonad(..)     , MonadFailure(..)@@ -34,6 +35,7 @@ import           GHC.IO import           GHC.Prim import           Basement.Compat.Base (Exception, (.), ($), Applicative)+import           Basement.Compat.AMP  -- | Primitive monad that can handle mutation. --@@ -120,7 +122,7 @@ -- | Monad that can represent failure -- -- Similar to MonadFail but with a parametrized Failure linked to the Monad-class Prelude.Monad m => MonadFailure m where+class AMPMonad m => MonadFailure m where     -- | The associated type with the MonadFailure, representing what     -- failure can be encoded in this monad     type Failure m
Basement/Numerical/Conversion.hs view
@@ -3,6 +3,7 @@ module Basement.Numerical.Conversion     ( intToInt64     , int64ToInt+    , intToWord     , wordToWord64     , word64ToWord     , Word32x2(..)@@ -91,6 +92,9 @@  wordToInt :: Word -> Int wordToInt (W# word) = I# (word2Int# word)++intToWord :: Int -> Word+intToWord (I# i) = W# (int2Word# i)  charToInt :: Char -> Int charToInt (C# x) = I# (ord# x)
Basement/PrimType.hs view
@@ -4,6 +4,7 @@ -- Stability   : experimental -- Portability : portable --+{-# LANGUAGE DataKinds #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE FlexibleInstances #-}@@ -49,6 +50,7 @@ import           Basement.Types.Word128 (Word128(..)) import           Basement.Types.Word256 (Word256(..)) import           Basement.Monad+import           Basement.Nat import qualified Prelude (quot)  #if WORD_SIZE_IN_BITS < 64@@ -160,6 +162,9 @@ -- -- Types need to be a instance of storable and have fixed sized. class Eq ty => PrimType ty where+    -- | type level size of the given `ty`+    type PrimSize ty :: Nat+     -- | get the size in bytes of a ty element     primSizeInBytes :: Proxy ty -> CountOf Word8 @@ -227,6 +232,11 @@ {-# SPECIALIZE [3] primBaUIndex :: ByteArray# -> Offset Word8 -> Word8 #-}  instance PrimType Int where+#if WORD_SIZE_IN_BITS == 64+    type PrimSize Int = 8+#else+    type PrimSize Int = 4+#endif     primSizeInBytes _ = sizeInt     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = shiftInt@@ -245,6 +255,11 @@     {-# INLINE primAddrWrite #-}  instance PrimType Word where+#if WORD_SIZE_IN_BITS == 64+    type PrimSize Word = 8+#else+    type PrimSize Word = 4+#endif     primSizeInBytes _ = sizeWord     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = shiftWord@@ -263,6 +278,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType Word8 where+    type PrimSize Word8 = 1     primSizeInBytes _ = CountOf 1     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 0@@ -281,6 +297,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType Word16 where+    type PrimSize Word16 = 2     primSizeInBytes _ = CountOf 2     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 1@@ -298,6 +315,7 @@     primAddrWrite addr (Offset (I# n)) (W16# w) = primitive $ \s1 -> (# writeWord16OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Word32 where+    type PrimSize Word32 = 4     primSizeInBytes _ = CountOf 4     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 2@@ -315,6 +333,7 @@     primAddrWrite addr (Offset (I# n)) (W32# w) = primitive $ \s1 -> (# writeWord32OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Word64 where+    type PrimSize Word64 = 8     primSizeInBytes _ = CountOf 8     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 3@@ -332,6 +351,7 @@     primAddrWrite addr (Offset (I# n)) (W64# w) = primitive $ \s1 -> (# writeWord64OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Word128 where+    type PrimSize Word128 = 16     primSizeInBytes _ = CountOf 16     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 4@@ -364,6 +384,7 @@       where (# n1, n2 #) = offset128_64 n     {-# INLINE primAddrWrite #-} instance PrimType Word256 where+    type PrimSize Word256 = 32     primSizeInBytes _ = CountOf 32     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 5@@ -406,6 +427,7 @@       where (# n1, n2, n3, n4 #) = offset256_64 n     {-# INLINE primAddrWrite #-} instance PrimType Int8 where+    type PrimSize Int8 = 1     primSizeInBytes _ = CountOf 1     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 0@@ -423,6 +445,7 @@     primAddrWrite addr (Offset (I# n)) (I8# w) = primitive $ \s1 -> (# writeInt8OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Int16 where+    type PrimSize Int16 = 2     primSizeInBytes _ = CountOf 2     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 1@@ -440,6 +463,7 @@     primAddrWrite addr (Offset (I# n)) (I16# w) = primitive $ \s1 -> (# writeInt16OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Int32 where+    type PrimSize Int32 = 4     primSizeInBytes _ = CountOf 4     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 2@@ -457,6 +481,7 @@     primAddrWrite addr (Offset (I# n)) (I32# w) = primitive $ \s1 -> (# writeInt32OffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Int64 where+    type PrimSize Int64 = 8     primSizeInBytes _ = CountOf 8     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 3@@ -475,6 +500,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType Float where+    type PrimSize Float = 4     primSizeInBytes _ = CountOf 4     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 2@@ -492,6 +518,7 @@     primAddrWrite addr (Offset (I# n)) (F# w) = primitive $ \s1 -> (# writeFloatOffAddr# addr n w s1, () #)     {-# INLINE primAddrWrite #-} instance PrimType Double where+    type PrimSize Double = 8     primSizeInBytes _ = CountOf 8     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 3@@ -510,6 +537,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType Char where+    type PrimSize Char = 4     primSizeInBytes _ = CountOf 4     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 2@@ -528,6 +556,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType CChar where+    type PrimSize CChar = 1     primSizeInBytes _ = CountOf 1     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 0@@ -545,6 +574,7 @@     primAddrWrite addr (Offset n) (CChar int8) = primAddrWrite addr (Offset n) int8     {-# INLINE primAddrWrite #-} instance PrimType CUChar where+    type PrimSize CUChar = 1     primSizeInBytes _ = CountOf 1     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 0@@ -563,6 +593,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType Char7 where+    type PrimSize Char7 = 1     primSizeInBytes _ = CountOf 1     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = 0@@ -581,6 +612,7 @@     {-# INLINE primAddrWrite #-}  instance PrimType a => PrimType (LE a) where+    type PrimSize (LE a) = PrimSize a     primSizeInBytes _ = primSizeInBytes (Proxy :: Proxy a)     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = primShiftToBytes (Proxy :: Proxy a)@@ -598,6 +630,7 @@     primAddrWrite addr (Offset a) (LE w) = primAddrWrite addr (Offset a) w     {-# INLINE primAddrWrite #-} instance PrimType a => PrimType (BE a) where+    type PrimSize (BE a) = PrimSize a     primSizeInBytes _ = primSizeInBytes (Proxy :: Proxy a)     {-# INLINE primSizeInBytes #-}     primShiftToBytes _ = primShiftToBytes (Proxy :: Proxy a)
Basement/String.hs view
@@ -109,12 +109,14 @@ import           Basement.Numerical.Subtractive import           Basement.Numerical.Multiplicative import           Basement.Numerical.Number+import           Basement.Cast import           Basement.Monad import           Basement.PrimType import           Basement.FinalPtr import           Basement.IntegralConv import           Basement.Floating import           Basement.MutableBuilder+import           Basement.String.CaseMapping (upperMapping, lowerMapping) import           Basement.UTF8.Table import           Basement.UTF8.Helper import           Basement.UTF8.Base@@ -611,7 +613,7 @@ replicate :: CountOf Char -> Char -> String replicate (CountOf n) c = runST (new nbBytes >>= fill)   where-    nbBytes   = scale (integralCast n :: Word) sz+    nbBytes   = scale (cast n :: Word) sz     sz = charToBytes (fromEnum c)     fill :: PrimMonad prim => MutableString (PrimState prim) -> prim String     fill ms = loop (Offset 0)@@ -1135,7 +1137,7 @@         case mExponant of             Just exponent                 | exponent < -10000 || exponent > 10000 -> Nothing-                | otherwise                             -> Just $ modF isNegative integral % (10 Prelude.^ (integralCast floatingDigits - exponent))+                | otherwise                             -> Just $ modF isNegative integral % (10 Prelude.^ (cast floatingDigits - exponent))             Nothing                                     -> Just $ modF isNegative integral % (10 Prelude.^ floatingDigits)   where     modF True  = negate . integralUpsize@@ -1192,9 +1194,9 @@         consumeFloat isNegative integral startOfs =             case decimalDigitsBA integral ba eofs startOfs of                 (# acc, True, endOfs #) | endOfs > startOfs -> let (CountOf !diff) = endOfs - startOfs-                                                                in f isNegative acc (integralCast diff) Nothing+                                                                in f isNegative acc (cast diff) Nothing                 (# acc, False, endOfs #) | endOfs > startOfs -> let (CountOf !diff) = endOfs - startOfs-                                                                in consumeExponant isNegative acc (integralCast diff) endOfs+                                                                in consumeExponant isNegative acc (cast diff) endOfs                 _                                           -> Nothing          consumeExponant !isNegative !integral !floatingDigits !startOfs@@ -1232,9 +1234,9 @@         consumeFloat isNegative integral startOfs =             case decimalDigitsPtr integral ptr eofs startOfs of                 (# acc, True, endOfs #) | endOfs > startOfs -> let (CountOf !diff) = endOfs - startOfs-                                                                in f isNegative acc (integralCast diff) Nothing+                                                                in f isNegative acc (cast diff) Nothing                 (# acc, False, endOfs #) | endOfs > startOfs -> let (CountOf !diff) = endOfs - startOfs-                                                                in consumeExponant isNegative acc (integralCast diff) endOfs+                                                                in consumeExponant isNegative acc (cast diff) endOfs                 _                                           -> Nothing          consumeExponant !isNegative !integral !floatingDigits !startOfs@@ -1317,15 +1319,68 @@ {-# SPECIALIZE decimalDigitsPtr :: Int -> Addr# -> Offset Word8 -> Offset Word8 -> (# Int, Bool, Offset Word8 #) #-} {-# SPECIALIZE decimalDigitsPtr :: Word -> Addr# -> Offset Word8 -> Offset Word8 -> (# Word, Bool, Offset Word8 #) #-} +-- | A unicode string size may vary during a case conversion operation.+--   This function calculates the new buffer size for a case conversion.+--   Returns Nothing if no case conversion is needed.+caseConvertNBuff :: (Char -> CM) -> String -> Maybe (CountOf Word8)+caseConvertNBuff op s@(String ba) = runST $ Vec.unsafeIndexer ba go+  where+    !sz = size s+    !end = azero `offsetPlusE` sz+    go :: (Offset Word8 -> Word8) -> ST st (Maybe (CountOf Word8))+    go getIdx = loop (Offset 0) 0 False+      where+        !nextI = nextWithIndexer getIdx+        eSize !e = if e == '\0' +                      then 0+                      else charToBytes (fromEnum e)+        loop !idx ns changed +            | idx == end = if changed+                             then return $ Just ns+                             else return Nothing+            | otherwise = do+                let !(c, idx') = nextI idx+                    !cm@(CM c1 c2 c3) = op c +                    !cSize = if c2 == '\0' -- if c2 is empty, c3 will be empty as well.+                              then charToBytes (fromEnum c1) +                              else eSize c1 + eSize c2 + eSize c3+                    !nchanged = changed || c1 /= c || c2 /= '\0'+                loop idx' (ns + cSize) nchanged++-- | Convert a 'String' 'Char' by 'Char' using a case mapping function. +caseConvert :: (Char -> CM) -> String -> String+caseConvert op s@(String ba) +  = case nBuff of+      Nothing -> s+      Just nLen -> runST $ unsafeCopyFrom s nLen go+  where+    !nBuff = caseConvertNBuff op s+    go :: String -> Offset Char -> Offset8 -> MutableString s -> Offset8 -> ST s (Offset8, Offset8)+    go src' srcI srcIdx dst dstIdx = do+      let !(CM c1 c2 c3) = op c +      dstIdx <- write dst dstIdx c1+      nextDstIdx <- +        if c2 == '\0' -- We don't want to check C3 if C2 is empty.+          then return dstIdx+          else do+            dstIdx  <- writeValidChar c2 dstIdx+            writeValidChar c3 dstIdx+      return (nextSrcIdx, nextDstIdx)+          where+            !(Step c nextSrcIdx) = next src' srcIdx+            writeValidChar cc wIdx =+                if cc == '\0'+                    then return wIdx +                else do+                    write dst wIdx cc+ -- | Convert a 'String' to the upper-case equivalent.---   Does not properly support multicharacter Unicode conversions. upper :: String -> String-upper = charMap toUpper+upper = caseConvert upperMapping  -- | Convert a 'String' to the upper-case equivalent.---   Does not properly support multicharacter Unicode conversions. lower :: String -> String-lower = charMap toLower+lower = caseConvert lowerMapping  -- | Check whether the first string is a prefix of the second string. isPrefixOf :: String -> String -> Bool
+ Basement/String/Builder.hs view
@@ -0,0 +1,51 @@+-- |+-- Module      : Basement.String.Builder+-- License     : BSD-style+-- Maintainer  : Foundation+--+-- String builder++{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Basement.String.Builder+    ( Builder+    , run+    , runUnsafe++    -- * Emit functions+    , emit+    , emitChar+    ) where+++import qualified Basement.Block.Base as Block (length)+import qualified Basement.Block.Builder as Block+import           Basement.Compat.Base+import           Basement.Compat.Semigroup+import           Basement.Monad+import           Basement.String (String, ValidationFailure, Encoding (UTF8), fromBytes)+import           Basement.UArray.Base (UArray)+import qualified Basement.UArray.Base as A++newtype Builder = Builder Block.Builder+  deriving (Semigroup, Monoid)++run :: PrimMonad prim => Builder -> prim (String, Maybe ValidationFailure, UArray Word8)+run (Builder builder) = do+    block <- Block.run builder+    let array = A.UArray 0 (Block.length block) (A.UArrayBA block)+    pure $ fromBytes UTF8 array++-- | run the given builder and return the generated String+--+-- prefer `run`+runUnsafe :: PrimMonad prim => Builder -> prim String+runUnsafe (Builder builder) = Block.unsafeRunString builder++-- | add a string in the builder+emit :: String -> Builder+emit = Builder . Block.emitString++-- | emit a UTF8 char in the builder+emitChar :: Char -> Builder+emitChar = Builder . Block.emitUTF8Char
+ Basement/String/CaseMapping.hs view
@@ -0,0 +1,3240 @@+{-# LANGUAGE Rank2Types #-}+-- AUTOMATICALLY GENERATED - DO NOT EDIT+-- Generated by scripts/caseMapping/generateCaseMapping.sh+-- CaseFolding-10.0.0.txt+-- Date: 2017-04-14, 05:40:18 GMT+-- SpecialCasing-10.0.0.txt+-- Date: 2017-04-14, 05:40:43 GMT++module Basement.String.CaseMapping where++import Data.Char+import Basement.UTF8.Types++upperMapping :: Char -> CM+{-# NOINLINE upperMapping #-}+-- LATIN SMALL LETTER SHARP S+upperMapping '\x00DF' = CM '\x0053' '\x0053' '\0'+-- LATIN SMALL LIGATURE FF+upperMapping '\xFB00' = CM '\x0046' '\x0046' '\0'+-- LATIN SMALL LIGATURE FI+upperMapping '\xFB01' = CM '\x0046' '\x0049' '\0'+-- LATIN SMALL LIGATURE FL+upperMapping '\xFB02' = CM '\x0046' '\x004C' '\0'+-- LATIN SMALL LIGATURE FFI+upperMapping '\xFB03' = CM '\x0046' '\x0046' '\x0049'+-- LATIN SMALL LIGATURE FFL+upperMapping '\xFB04' = CM '\x0046' '\x0046' '\x004C'+-- LATIN SMALL LIGATURE LONG S T+upperMapping '\xFB05' = CM '\x0053' '\x0054' '\0'+-- LATIN SMALL LIGATURE ST+upperMapping '\xFB06' = CM '\x0053' '\x0054' '\0'+-- ARMENIAN SMALL LIGATURE ECH YIWN+upperMapping '\x0587' = CM '\x0535' '\x0552' '\0'+-- ARMENIAN SMALL LIGATURE MEN NOW+upperMapping '\xFB13' = CM '\x0544' '\x0546' '\0'+-- ARMENIAN SMALL LIGATURE MEN ECH+upperMapping '\xFB14' = CM '\x0544' '\x0535' '\0'+-- ARMENIAN SMALL LIGATURE MEN INI+upperMapping '\xFB15' = CM '\x0544' '\x053B' '\0'+-- ARMENIAN SMALL LIGATURE VEW NOW+upperMapping '\xFB16' = CM '\x054E' '\x0546' '\0'+-- ARMENIAN SMALL LIGATURE MEN XEH+upperMapping '\xFB17' = CM '\x0544' '\x053D' '\0'+-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE+upperMapping '\x0149' = CM '\x02BC' '\x004E' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS+upperMapping '\x0390' = CM '\x0399' '\x0308' '\x0301'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS+upperMapping '\x03B0' = CM '\x03A5' '\x0308' '\x0301'+-- LATIN SMALL LETTER J WITH CARON+upperMapping '\x01F0' = CM '\x004A' '\x030C' '\0'+-- LATIN SMALL LETTER H WITH LINE BELOW+upperMapping '\x1E96' = CM '\x0048' '\x0331' '\0'+-- LATIN SMALL LETTER T WITH DIAERESIS+upperMapping '\x1E97' = CM '\x0054' '\x0308' '\0'+-- LATIN SMALL LETTER W WITH RING ABOVE+upperMapping '\x1E98' = CM '\x0057' '\x030A' '\0'+-- LATIN SMALL LETTER Y WITH RING ABOVE+upperMapping '\x1E99' = CM '\x0059' '\x030A' '\0'+-- LATIN SMALL LETTER A WITH RIGHT HALF RING+upperMapping '\x1E9A' = CM '\x0041' '\x02BE' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI+upperMapping '\x1F50' = CM '\x03A5' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA+upperMapping '\x1F52' = CM '\x03A5' '\x0313' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA+upperMapping '\x1F54' = CM '\x03A5' '\x0313' '\x0301'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI+upperMapping '\x1F56' = CM '\x03A5' '\x0313' '\x0342'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI+upperMapping '\x1FB6' = CM '\x0391' '\x0342' '\0'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI+upperMapping '\x1FC6' = CM '\x0397' '\x0342' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA+upperMapping '\x1FD2' = CM '\x0399' '\x0308' '\x0300'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA+upperMapping '\x1FD3' = CM '\x0399' '\x0308' '\x0301'+-- GREEK SMALL LETTER IOTA WITH PERISPOMENI+upperMapping '\x1FD6' = CM '\x0399' '\x0342' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI+upperMapping '\x1FD7' = CM '\x0399' '\x0308' '\x0342'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA+upperMapping '\x1FE2' = CM '\x03A5' '\x0308' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA+upperMapping '\x1FE3' = CM '\x03A5' '\x0308' '\x0301'+-- GREEK SMALL LETTER RHO WITH PSILI+upperMapping '\x1FE4' = CM '\x03A1' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PERISPOMENI+upperMapping '\x1FE6' = CM '\x03A5' '\x0342' '\0'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI+upperMapping '\x1FE7' = CM '\x03A5' '\x0308' '\x0342'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI+upperMapping '\x1FF6' = CM '\x03A9' '\x0342' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI+upperMapping '\x1F80' = CM '\x1F08' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI+upperMapping '\x1F81' = CM '\x1F09' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1F82' = CM '\x1F0A' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1F83' = CM '\x1F0B' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1F84' = CM '\x1F0C' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1F85' = CM '\x1F0D' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1F86' = CM '\x1F0E' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1F87' = CM '\x1F0F' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI+upperMapping '\x1F88' = CM '\x1F08' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI+upperMapping '\x1F89' = CM '\x1F09' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1F8A' = CM '\x1F0A' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1F8B' = CM '\x1F0B' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1F8C' = CM '\x1F0C' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1F8D' = CM '\x1F0D' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1F8E' = CM '\x1F0E' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1F8F' = CM '\x1F0F' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI+upperMapping '\x1F90' = CM '\x1F28' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI+upperMapping '\x1F91' = CM '\x1F29' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1F92' = CM '\x1F2A' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1F93' = CM '\x1F2B' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1F94' = CM '\x1F2C' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1F95' = CM '\x1F2D' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1F96' = CM '\x1F2E' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1F97' = CM '\x1F2F' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI+upperMapping '\x1F98' = CM '\x1F28' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI+upperMapping '\x1F99' = CM '\x1F29' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1F9A' = CM '\x1F2A' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1F9B' = CM '\x1F2B' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1F9C' = CM '\x1F2C' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1F9D' = CM '\x1F2D' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1F9E' = CM '\x1F2E' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1F9F' = CM '\x1F2F' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI+upperMapping '\x1FA0' = CM '\x1F68' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI+upperMapping '\x1FA1' = CM '\x1F69' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1FA2' = CM '\x1F6A' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI+upperMapping '\x1FA3' = CM '\x1F6B' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1FA4' = CM '\x1F6C' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI+upperMapping '\x1FA5' = CM '\x1F6D' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1FA6' = CM '\x1F6E' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1FA7' = CM '\x1F6F' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI+upperMapping '\x1FA8' = CM '\x1F68' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI+upperMapping '\x1FA9' = CM '\x1F69' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1FAA' = CM '\x1F6A' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI+upperMapping '\x1FAB' = CM '\x1F6B' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1FAC' = CM '\x1F6C' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI+upperMapping '\x1FAD' = CM '\x1F6D' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1FAE' = CM '\x1F6E' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+upperMapping '\x1FAF' = CM '\x1F6F' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI+upperMapping '\x1FB3' = CM '\x0391' '\x0399' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI+upperMapping '\x1FBC' = CM '\x0391' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI+upperMapping '\x1FC3' = CM '\x0397' '\x0399' '\0'+-- GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI+upperMapping '\x1FCC' = CM '\x0397' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI+upperMapping '\x1FF3' = CM '\x03A9' '\x0399' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI+upperMapping '\x1FFC' = CM '\x03A9' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI+upperMapping '\x1FB2' = CM '\x1FBA' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI+upperMapping '\x1FB4' = CM '\x0386' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI+upperMapping '\x1FC2' = CM '\x1FCA' '\x0399' '\0'+-- GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI+upperMapping '\x1FC4' = CM '\x0389' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI+upperMapping '\x1FF2' = CM '\x1FFA' '\x0399' '\0'+-- GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI+upperMapping '\x1FF4' = CM '\x038F' '\x0399' '\0'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1FB7' = CM '\x0391' '\x0342' '\x0399'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1FC7' = CM '\x0397' '\x0342' '\x0399'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI+upperMapping '\x1FF7' = CM '\x03A9' '\x0342' '\x0399'+upperMapping c = CM (toUpper c) '\0' '\0'++lowerMapping :: Char -> CM+{-# NOINLINE lowerMapping #-}+-- LATIN CAPITAL LETTER I WITH DOT ABOVE+lowerMapping '\x0130' = CM '\x0069' '\x0307' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI+lowerMapping '\x1F88' = CM '\x1F80' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI+lowerMapping '\x1F89' = CM '\x1F81' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1F8A' = CM '\x1F82' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1F8B' = CM '\x1F83' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1F8C' = CM '\x1F84' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1F8D' = CM '\x1F85' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1F8E' = CM '\x1F86' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1F8F' = CM '\x1F87' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI+lowerMapping '\x1F98' = CM '\x1F90' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI+lowerMapping '\x1F99' = CM '\x1F91' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1F9A' = CM '\x1F92' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1F9B' = CM '\x1F93' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1F9C' = CM '\x1F94' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1F9D' = CM '\x1F95' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1F9E' = CM '\x1F96' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1F9F' = CM '\x1F97' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI+lowerMapping '\x1FA8' = CM '\x1FA0' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI+lowerMapping '\x1FA9' = CM '\x1FA1' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1FAA' = CM '\x1FA2' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI+lowerMapping '\x1FAB' = CM '\x1FA3' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1FAC' = CM '\x1FA4' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI+lowerMapping '\x1FAD' = CM '\x1FA5' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1FAE' = CM '\x1FA6' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+lowerMapping '\x1FAF' = CM '\x1FA7' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI+lowerMapping '\x1FBC' = CM '\x1FB3' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI+lowerMapping '\x1FCC' = CM '\x1FC3' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI+lowerMapping '\x1FFC' = CM '\x1FF3' '\0' '\0'+lowerMapping c = CM (toLower c) '\0' '\0'++titleMapping :: Char -> CM+{-# NOINLINE titleMapping #-}+-- LATIN SMALL LETTER SHARP S+titleMapping '\x00DF' = CM '\x0053' '\x0073' '\0'+-- LATIN SMALL LIGATURE FF+titleMapping '\xFB00' = CM '\x0046' '\x0066' '\0'+-- LATIN SMALL LIGATURE FI+titleMapping '\xFB01' = CM '\x0046' '\x0069' '\0'+-- LATIN SMALL LIGATURE FL+titleMapping '\xFB02' = CM '\x0046' '\x006C' '\0'+-- LATIN SMALL LIGATURE FFI+titleMapping '\xFB03' = CM '\x0046' '\x0066' '\x0069'+-- LATIN SMALL LIGATURE FFL+titleMapping '\xFB04' = CM '\x0046' '\x0066' '\x006C'+-- LATIN SMALL LIGATURE LONG S T+titleMapping '\xFB05' = CM '\x0053' '\x0074' '\0'+-- LATIN SMALL LIGATURE ST+titleMapping '\xFB06' = CM '\x0053' '\x0074' '\0'+-- ARMENIAN SMALL LIGATURE ECH YIWN+titleMapping '\x0587' = CM '\x0535' '\x0582' '\0'+-- ARMENIAN SMALL LIGATURE MEN NOW+titleMapping '\xFB13' = CM '\x0544' '\x0576' '\0'+-- ARMENIAN SMALL LIGATURE MEN ECH+titleMapping '\xFB14' = CM '\x0544' '\x0565' '\0'+-- ARMENIAN SMALL LIGATURE MEN INI+titleMapping '\xFB15' = CM '\x0544' '\x056B' '\0'+-- ARMENIAN SMALL LIGATURE VEW NOW+titleMapping '\xFB16' = CM '\x054E' '\x0576' '\0'+-- ARMENIAN SMALL LIGATURE MEN XEH+titleMapping '\xFB17' = CM '\x0544' '\x056D' '\0'+-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE+titleMapping '\x0149' = CM '\x02BC' '\x004E' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS+titleMapping '\x0390' = CM '\x0399' '\x0308' '\x0301'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS+titleMapping '\x03B0' = CM '\x03A5' '\x0308' '\x0301'+-- LATIN SMALL LETTER J WITH CARON+titleMapping '\x01F0' = CM '\x004A' '\x030C' '\0'+-- LATIN SMALL LETTER H WITH LINE BELOW+titleMapping '\x1E96' = CM '\x0048' '\x0331' '\0'+-- LATIN SMALL LETTER T WITH DIAERESIS+titleMapping '\x1E97' = CM '\x0054' '\x0308' '\0'+-- LATIN SMALL LETTER W WITH RING ABOVE+titleMapping '\x1E98' = CM '\x0057' '\x030A' '\0'+-- LATIN SMALL LETTER Y WITH RING ABOVE+titleMapping '\x1E99' = CM '\x0059' '\x030A' '\0'+-- LATIN SMALL LETTER A WITH RIGHT HALF RING+titleMapping '\x1E9A' = CM '\x0041' '\x02BE' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI+titleMapping '\x1F50' = CM '\x03A5' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA+titleMapping '\x1F52' = CM '\x03A5' '\x0313' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA+titleMapping '\x1F54' = CM '\x03A5' '\x0313' '\x0301'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI+titleMapping '\x1F56' = CM '\x03A5' '\x0313' '\x0342'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI+titleMapping '\x1FB6' = CM '\x0391' '\x0342' '\0'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI+titleMapping '\x1FC6' = CM '\x0397' '\x0342' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA+titleMapping '\x1FD2' = CM '\x0399' '\x0308' '\x0300'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA+titleMapping '\x1FD3' = CM '\x0399' '\x0308' '\x0301'+-- GREEK SMALL LETTER IOTA WITH PERISPOMENI+titleMapping '\x1FD6' = CM '\x0399' '\x0342' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI+titleMapping '\x1FD7' = CM '\x0399' '\x0308' '\x0342'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA+titleMapping '\x1FE2' = CM '\x03A5' '\x0308' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA+titleMapping '\x1FE3' = CM '\x03A5' '\x0308' '\x0301'+-- GREEK SMALL LETTER RHO WITH PSILI+titleMapping '\x1FE4' = CM '\x03A1' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PERISPOMENI+titleMapping '\x1FE6' = CM '\x03A5' '\x0342' '\0'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI+titleMapping '\x1FE7' = CM '\x03A5' '\x0308' '\x0342'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI+titleMapping '\x1FF6' = CM '\x03A9' '\x0342' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI+titleMapping '\x1F80' = CM '\x1F88' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI+titleMapping '\x1F81' = CM '\x1F89' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1F82' = CM '\x1F8A' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1F83' = CM '\x1F8B' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1F84' = CM '\x1F8C' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1F85' = CM '\x1F8D' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1F86' = CM '\x1F8E' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1F87' = CM '\x1F8F' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI+titleMapping '\x1F90' = CM '\x1F98' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI+titleMapping '\x1F91' = CM '\x1F99' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1F92' = CM '\x1F9A' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1F93' = CM '\x1F9B' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1F94' = CM '\x1F9C' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1F95' = CM '\x1F9D' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1F96' = CM '\x1F9E' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1F97' = CM '\x1F9F' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI+titleMapping '\x1FA0' = CM '\x1FA8' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI+titleMapping '\x1FA1' = CM '\x1FA9' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1FA2' = CM '\x1FAA' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI+titleMapping '\x1FA3' = CM '\x1FAB' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1FA4' = CM '\x1FAC' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI+titleMapping '\x1FA5' = CM '\x1FAD' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1FA6' = CM '\x1FAE' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1FA7' = CM '\x1FAF' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI+titleMapping '\x1FB3' = CM '\x1FBC' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI+titleMapping '\x1FC3' = CM '\x1FCC' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI+titleMapping '\x1FF3' = CM '\x1FFC' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI+titleMapping '\x1FB2' = CM '\x1FBA' '\x0345' '\0'+-- GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI+titleMapping '\x1FB4' = CM '\x0386' '\x0345' '\0'+-- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI+titleMapping '\x1FC2' = CM '\x1FCA' '\x0345' '\0'+-- GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI+titleMapping '\x1FC4' = CM '\x0389' '\x0345' '\0'+-- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI+titleMapping '\x1FF2' = CM '\x1FFA' '\x0345' '\0'+-- GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI+titleMapping '\x1FF4' = CM '\x038F' '\x0345' '\0'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1FB7' = CM '\x0391' '\x0342' '\x0345'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1FC7' = CM '\x0397' '\x0342' '\x0345'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI+titleMapping '\x1FF7' = CM '\x03A9' '\x0342' '\x0345'+titleMapping c = CM (toTitle c) '\0' '\0'++foldMapping :: Char -> CM+{-# NOINLINE foldMapping #-}+-- LATIN CAPITAL LETTER A+foldMapping '\x0041' = CM '\x0061' '\0' '\0'+-- LATIN CAPITAL LETTER B+foldMapping '\x0042' = CM '\x0062' '\0' '\0'+-- LATIN CAPITAL LETTER C+foldMapping '\x0043' = CM '\x0063' '\0' '\0'+-- LATIN CAPITAL LETTER D+foldMapping '\x0044' = CM '\x0064' '\0' '\0'+-- LATIN CAPITAL LETTER E+foldMapping '\x0045' = CM '\x0065' '\0' '\0'+-- LATIN CAPITAL LETTER F+foldMapping '\x0046' = CM '\x0066' '\0' '\0'+-- LATIN CAPITAL LETTER G+foldMapping '\x0047' = CM '\x0067' '\0' '\0'+-- LATIN CAPITAL LETTER H+foldMapping '\x0048' = CM '\x0068' '\0' '\0'+-- LATIN CAPITAL LETTER I+foldMapping '\x0049' = CM '\x0069' '\0' '\0'+-- LATIN CAPITAL LETTER J+foldMapping '\x004A' = CM '\x006A' '\0' '\0'+-- LATIN CAPITAL LETTER K+foldMapping '\x004B' = CM '\x006B' '\0' '\0'+-- LATIN CAPITAL LETTER L+foldMapping '\x004C' = CM '\x006C' '\0' '\0'+-- LATIN CAPITAL LETTER M+foldMapping '\x004D' = CM '\x006D' '\0' '\0'+-- LATIN CAPITAL LETTER N+foldMapping '\x004E' = CM '\x006E' '\0' '\0'+-- LATIN CAPITAL LETTER O+foldMapping '\x004F' = CM '\x006F' '\0' '\0'+-- LATIN CAPITAL LETTER P+foldMapping '\x0050' = CM '\x0070' '\0' '\0'+-- LATIN CAPITAL LETTER Q+foldMapping '\x0051' = CM '\x0071' '\0' '\0'+-- LATIN CAPITAL LETTER R+foldMapping '\x0052' = CM '\x0072' '\0' '\0'+-- LATIN CAPITAL LETTER S+foldMapping '\x0053' = CM '\x0073' '\0' '\0'+-- LATIN CAPITAL LETTER T+foldMapping '\x0054' = CM '\x0074' '\0' '\0'+-- LATIN CAPITAL LETTER U+foldMapping '\x0055' = CM '\x0075' '\0' '\0'+-- LATIN CAPITAL LETTER V+foldMapping '\x0056' = CM '\x0076' '\0' '\0'+-- LATIN CAPITAL LETTER W+foldMapping '\x0057' = CM '\x0077' '\0' '\0'+-- LATIN CAPITAL LETTER X+foldMapping '\x0058' = CM '\x0078' '\0' '\0'+-- LATIN CAPITAL LETTER Y+foldMapping '\x0059' = CM '\x0079' '\0' '\0'+-- LATIN CAPITAL LETTER Z+foldMapping '\x005A' = CM '\x007A' '\0' '\0'+-- MICRO SIGN+foldMapping '\x00B5' = CM '\x03BC' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH GRAVE+foldMapping '\x00C0' = CM '\x00E0' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH ACUTE+foldMapping '\x00C1' = CM '\x00E1' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX+foldMapping '\x00C2' = CM '\x00E2' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH TILDE+foldMapping '\x00C3' = CM '\x00E3' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH DIAERESIS+foldMapping '\x00C4' = CM '\x00E4' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH RING ABOVE+foldMapping '\x00C5' = CM '\x00E5' '\0' '\0'+-- LATIN CAPITAL LETTER AE+foldMapping '\x00C6' = CM '\x00E6' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH CEDILLA+foldMapping '\x00C7' = CM '\x00E7' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH GRAVE+foldMapping '\x00C8' = CM '\x00E8' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH ACUTE+foldMapping '\x00C9' = CM '\x00E9' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX+foldMapping '\x00CA' = CM '\x00EA' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH DIAERESIS+foldMapping '\x00CB' = CM '\x00EB' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH GRAVE+foldMapping '\x00CC' = CM '\x00EC' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH ACUTE+foldMapping '\x00CD' = CM '\x00ED' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX+foldMapping '\x00CE' = CM '\x00EE' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH DIAERESIS+foldMapping '\x00CF' = CM '\x00EF' '\0' '\0'+-- LATIN CAPITAL LETTER ETH+foldMapping '\x00D0' = CM '\x00F0' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH TILDE+foldMapping '\x00D1' = CM '\x00F1' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH GRAVE+foldMapping '\x00D2' = CM '\x00F2' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH ACUTE+foldMapping '\x00D3' = CM '\x00F3' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX+foldMapping '\x00D4' = CM '\x00F4' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH TILDE+foldMapping '\x00D5' = CM '\x00F5' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DIAERESIS+foldMapping '\x00D6' = CM '\x00F6' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH STROKE+foldMapping '\x00D8' = CM '\x00F8' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH GRAVE+foldMapping '\x00D9' = CM '\x00F9' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH ACUTE+foldMapping '\x00DA' = CM '\x00FA' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX+foldMapping '\x00DB' = CM '\x00FB' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS+foldMapping '\x00DC' = CM '\x00FC' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH ACUTE+foldMapping '\x00DD' = CM '\x00FD' '\0' '\0'+-- LATIN CAPITAL LETTER THORN+foldMapping '\x00DE' = CM '\x00FE' '\0' '\0'+-- LATIN SMALL LETTER SHARP S+foldMapping '\x00DF' = CM '\x0073' '\x0073' '\0'+-- LATIN CAPITAL LETTER A WITH MACRON+foldMapping '\x0100' = CM '\x0101' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE+foldMapping '\x0102' = CM '\x0103' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH OGONEK+foldMapping '\x0104' = CM '\x0105' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH ACUTE+foldMapping '\x0106' = CM '\x0107' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX+foldMapping '\x0108' = CM '\x0109' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH DOT ABOVE+foldMapping '\x010A' = CM '\x010B' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH CARON+foldMapping '\x010C' = CM '\x010D' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH CARON+foldMapping '\x010E' = CM '\x010F' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH STROKE+foldMapping '\x0110' = CM '\x0111' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH MACRON+foldMapping '\x0112' = CM '\x0113' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH BREVE+foldMapping '\x0114' = CM '\x0115' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH DOT ABOVE+foldMapping '\x0116' = CM '\x0117' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH OGONEK+foldMapping '\x0118' = CM '\x0119' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CARON+foldMapping '\x011A' = CM '\x011B' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX+foldMapping '\x011C' = CM '\x011D' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH BREVE+foldMapping '\x011E' = CM '\x011F' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH DOT ABOVE+foldMapping '\x0120' = CM '\x0121' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH CEDILLA+foldMapping '\x0122' = CM '\x0123' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX+foldMapping '\x0124' = CM '\x0125' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH STROKE+foldMapping '\x0126' = CM '\x0127' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH TILDE+foldMapping '\x0128' = CM '\x0129' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH MACRON+foldMapping '\x012A' = CM '\x012B' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH BREVE+foldMapping '\x012C' = CM '\x012D' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH OGONEK+foldMapping '\x012E' = CM '\x012F' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH DOT ABOVE+foldMapping '\x0130' = CM '\x0069' '\x0307' '\0'+-- LATIN CAPITAL LIGATURE IJ+foldMapping '\x0132' = CM '\x0133' '\0' '\0'+-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX+foldMapping '\x0134' = CM '\x0135' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH CEDILLA+foldMapping '\x0136' = CM '\x0137' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH ACUTE+foldMapping '\x0139' = CM '\x013A' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH CEDILLA+foldMapping '\x013B' = CM '\x013C' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH CARON+foldMapping '\x013D' = CM '\x013E' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH MIDDLE DOT+foldMapping '\x013F' = CM '\x0140' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH STROKE+foldMapping '\x0141' = CM '\x0142' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH ACUTE+foldMapping '\x0143' = CM '\x0144' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH CEDILLA+foldMapping '\x0145' = CM '\x0146' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH CARON+foldMapping '\x0147' = CM '\x0148' '\0' '\0'+-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE+foldMapping '\x0149' = CM '\x02BC' '\x006E' '\0'+-- LATIN CAPITAL LETTER ENG+foldMapping '\x014A' = CM '\x014B' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH MACRON+foldMapping '\x014C' = CM '\x014D' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH BREVE+foldMapping '\x014E' = CM '\x014F' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE+foldMapping '\x0150' = CM '\x0151' '\0' '\0'+-- LATIN CAPITAL LIGATURE OE+foldMapping '\x0152' = CM '\x0153' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH ACUTE+foldMapping '\x0154' = CM '\x0155' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH CEDILLA+foldMapping '\x0156' = CM '\x0157' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH CARON+foldMapping '\x0158' = CM '\x0159' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH ACUTE+foldMapping '\x015A' = CM '\x015B' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX+foldMapping '\x015C' = CM '\x015D' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH CEDILLA+foldMapping '\x015E' = CM '\x015F' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH CARON+foldMapping '\x0160' = CM '\x0161' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH CEDILLA+foldMapping '\x0162' = CM '\x0163' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH CARON+foldMapping '\x0164' = CM '\x0165' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH STROKE+foldMapping '\x0166' = CM '\x0167' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH TILDE+foldMapping '\x0168' = CM '\x0169' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH MACRON+foldMapping '\x016A' = CM '\x016B' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH BREVE+foldMapping '\x016C' = CM '\x016D' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH RING ABOVE+foldMapping '\x016E' = CM '\x016F' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE+foldMapping '\x0170' = CM '\x0171' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH OGONEK+foldMapping '\x0172' = CM '\x0173' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX+foldMapping '\x0174' = CM '\x0175' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX+foldMapping '\x0176' = CM '\x0177' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH DIAERESIS+foldMapping '\x0178' = CM '\x00FF' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH ACUTE+foldMapping '\x0179' = CM '\x017A' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH DOT ABOVE+foldMapping '\x017B' = CM '\x017C' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH CARON+foldMapping '\x017D' = CM '\x017E' '\0' '\0'+-- LATIN SMALL LETTER LONG S+foldMapping '\x017F' = CM '\x0073' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH HOOK+foldMapping '\x0181' = CM '\x0253' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH TOPBAR+foldMapping '\x0182' = CM '\x0183' '\0' '\0'+-- LATIN CAPITAL LETTER TONE SIX+foldMapping '\x0184' = CM '\x0185' '\0' '\0'+-- LATIN CAPITAL LETTER OPEN O+foldMapping '\x0186' = CM '\x0254' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH HOOK+foldMapping '\x0187' = CM '\x0188' '\0' '\0'+-- LATIN CAPITAL LETTER AFRICAN D+foldMapping '\x0189' = CM '\x0256' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH HOOK+foldMapping '\x018A' = CM '\x0257' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH TOPBAR+foldMapping '\x018B' = CM '\x018C' '\0' '\0'+-- LATIN CAPITAL LETTER REVERSED E+foldMapping '\x018E' = CM '\x01DD' '\0' '\0'+-- LATIN CAPITAL LETTER SCHWA+foldMapping '\x018F' = CM '\x0259' '\0' '\0'+-- LATIN CAPITAL LETTER OPEN E+foldMapping '\x0190' = CM '\x025B' '\0' '\0'+-- LATIN CAPITAL LETTER F WITH HOOK+foldMapping '\x0191' = CM '\x0192' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH HOOK+foldMapping '\x0193' = CM '\x0260' '\0' '\0'+-- LATIN CAPITAL LETTER GAMMA+foldMapping '\x0194' = CM '\x0263' '\0' '\0'+-- LATIN CAPITAL LETTER IOTA+foldMapping '\x0196' = CM '\x0269' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH STROKE+foldMapping '\x0197' = CM '\x0268' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH HOOK+foldMapping '\x0198' = CM '\x0199' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED M+foldMapping '\x019C' = CM '\x026F' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH LEFT HOOK+foldMapping '\x019D' = CM '\x0272' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH MIDDLE TILDE+foldMapping '\x019F' = CM '\x0275' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN+foldMapping '\x01A0' = CM '\x01A1' '\0' '\0'+-- LATIN CAPITAL LETTER OI+foldMapping '\x01A2' = CM '\x01A3' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH HOOK+foldMapping '\x01A4' = CM '\x01A5' '\0' '\0'+-- LATIN LETTER YR+foldMapping '\x01A6' = CM '\x0280' '\0' '\0'+-- LATIN CAPITAL LETTER TONE TWO+foldMapping '\x01A7' = CM '\x01A8' '\0' '\0'+-- LATIN CAPITAL LETTER ESH+foldMapping '\x01A9' = CM '\x0283' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH HOOK+foldMapping '\x01AC' = CM '\x01AD' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH RETROFLEX HOOK+foldMapping '\x01AE' = CM '\x0288' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN+foldMapping '\x01AF' = CM '\x01B0' '\0' '\0'+-- LATIN CAPITAL LETTER UPSILON+foldMapping '\x01B1' = CM '\x028A' '\0' '\0'+-- LATIN CAPITAL LETTER V WITH HOOK+foldMapping '\x01B2' = CM '\x028B' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH HOOK+foldMapping '\x01B3' = CM '\x01B4' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH STROKE+foldMapping '\x01B5' = CM '\x01B6' '\0' '\0'+-- LATIN CAPITAL LETTER EZH+foldMapping '\x01B7' = CM '\x0292' '\0' '\0'+-- LATIN CAPITAL LETTER EZH REVERSED+foldMapping '\x01B8' = CM '\x01B9' '\0' '\0'+-- LATIN CAPITAL LETTER TONE FIVE+foldMapping '\x01BC' = CM '\x01BD' '\0' '\0'+-- LATIN CAPITAL LETTER DZ WITH CARON+foldMapping '\x01C4' = CM '\x01C6' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON+foldMapping '\x01C5' = CM '\x01C6' '\0' '\0'+-- LATIN CAPITAL LETTER LJ+foldMapping '\x01C7' = CM '\x01C9' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH SMALL LETTER J+foldMapping '\x01C8' = CM '\x01C9' '\0' '\0'+-- LATIN CAPITAL LETTER NJ+foldMapping '\x01CA' = CM '\x01CC' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH SMALL LETTER J+foldMapping '\x01CB' = CM '\x01CC' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CARON+foldMapping '\x01CD' = CM '\x01CE' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH CARON+foldMapping '\x01CF' = CM '\x01D0' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CARON+foldMapping '\x01D1' = CM '\x01D2' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH CARON+foldMapping '\x01D3' = CM '\x01D4' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON+foldMapping '\x01D5' = CM '\x01D6' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE+foldMapping '\x01D7' = CM '\x01D8' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON+foldMapping '\x01D9' = CM '\x01DA' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE+foldMapping '\x01DB' = CM '\x01DC' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON+foldMapping '\x01DE' = CM '\x01DF' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON+foldMapping '\x01E0' = CM '\x01E1' '\0' '\0'+-- LATIN CAPITAL LETTER AE WITH MACRON+foldMapping '\x01E2' = CM '\x01E3' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH STROKE+foldMapping '\x01E4' = CM '\x01E5' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH CARON+foldMapping '\x01E6' = CM '\x01E7' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH CARON+foldMapping '\x01E8' = CM '\x01E9' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH OGONEK+foldMapping '\x01EA' = CM '\x01EB' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH OGONEK AND MACRON+foldMapping '\x01EC' = CM '\x01ED' '\0' '\0'+-- LATIN CAPITAL LETTER EZH WITH CARON+foldMapping '\x01EE' = CM '\x01EF' '\0' '\0'+-- LATIN SMALL LETTER J WITH CARON+foldMapping '\x01F0' = CM '\x006A' '\x030C' '\0'+-- LATIN CAPITAL LETTER DZ+foldMapping '\x01F1' = CM '\x01F3' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH SMALL LETTER Z+foldMapping '\x01F2' = CM '\x01F3' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH ACUTE+foldMapping '\x01F4' = CM '\x01F5' '\0' '\0'+-- LATIN CAPITAL LETTER HWAIR+foldMapping '\x01F6' = CM '\x0195' '\0' '\0'+-- LATIN CAPITAL LETTER WYNN+foldMapping '\x01F7' = CM '\x01BF' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH GRAVE+foldMapping '\x01F8' = CM '\x01F9' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE+foldMapping '\x01FA' = CM '\x01FB' '\0' '\0'+-- LATIN CAPITAL LETTER AE WITH ACUTE+foldMapping '\x01FC' = CM '\x01FD' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH STROKE AND ACUTE+foldMapping '\x01FE' = CM '\x01FF' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH DOUBLE GRAVE+foldMapping '\x0200' = CM '\x0201' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH INVERTED BREVE+foldMapping '\x0202' = CM '\x0203' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH DOUBLE GRAVE+foldMapping '\x0204' = CM '\x0205' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH INVERTED BREVE+foldMapping '\x0206' = CM '\x0207' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH DOUBLE GRAVE+foldMapping '\x0208' = CM '\x0209' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH INVERTED BREVE+foldMapping '\x020A' = CM '\x020B' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DOUBLE GRAVE+foldMapping '\x020C' = CM '\x020D' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH INVERTED BREVE+foldMapping '\x020E' = CM '\x020F' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH DOUBLE GRAVE+foldMapping '\x0210' = CM '\x0211' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH INVERTED BREVE+foldMapping '\x0212' = CM '\x0213' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DOUBLE GRAVE+foldMapping '\x0214' = CM '\x0215' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH INVERTED BREVE+foldMapping '\x0216' = CM '\x0217' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH COMMA BELOW+foldMapping '\x0218' = CM '\x0219' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH COMMA BELOW+foldMapping '\x021A' = CM '\x021B' '\0' '\0'+-- LATIN CAPITAL LETTER YOGH+foldMapping '\x021C' = CM '\x021D' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH CARON+foldMapping '\x021E' = CM '\x021F' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH LONG RIGHT LEG+foldMapping '\x0220' = CM '\x019E' '\0' '\0'+-- LATIN CAPITAL LETTER OU+foldMapping '\x0222' = CM '\x0223' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH HOOK+foldMapping '\x0224' = CM '\x0225' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH DOT ABOVE+foldMapping '\x0226' = CM '\x0227' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CEDILLA+foldMapping '\x0228' = CM '\x0229' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON+foldMapping '\x022A' = CM '\x022B' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH TILDE AND MACRON+foldMapping '\x022C' = CM '\x022D' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DOT ABOVE+foldMapping '\x022E' = CM '\x022F' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON+foldMapping '\x0230' = CM '\x0231' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH MACRON+foldMapping '\x0232' = CM '\x0233' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH STROKE+foldMapping '\x023A' = CM '\x2C65' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH STROKE+foldMapping '\x023B' = CM '\x023C' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH BAR+foldMapping '\x023D' = CM '\x019A' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH DIAGONAL STROKE+foldMapping '\x023E' = CM '\x2C66' '\0' '\0'+-- LATIN CAPITAL LETTER GLOTTAL STOP+foldMapping '\x0241' = CM '\x0242' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH STROKE+foldMapping '\x0243' = CM '\x0180' '\0' '\0'+-- LATIN CAPITAL LETTER U BAR+foldMapping '\x0244' = CM '\x0289' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED V+foldMapping '\x0245' = CM '\x028C' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH STROKE+foldMapping '\x0246' = CM '\x0247' '\0' '\0'+-- LATIN CAPITAL LETTER J WITH STROKE+foldMapping '\x0248' = CM '\x0249' '\0' '\0'+-- LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL+foldMapping '\x024A' = CM '\x024B' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH STROKE+foldMapping '\x024C' = CM '\x024D' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH STROKE+foldMapping '\x024E' = CM '\x024F' '\0' '\0'+-- COMBINING GREEK YPOGEGRAMMENI+foldMapping '\x0345' = CM '\x03B9' '\0' '\0'+-- GREEK CAPITAL LETTER HETA+foldMapping '\x0370' = CM '\x0371' '\0' '\0'+-- GREEK CAPITAL LETTER ARCHAIC SAMPI+foldMapping '\x0372' = CM '\x0373' '\0' '\0'+-- GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA+foldMapping '\x0376' = CM '\x0377' '\0' '\0'+-- GREEK CAPITAL LETTER YOT+foldMapping '\x037F' = CM '\x03F3' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH TONOS+foldMapping '\x0386' = CM '\x03AC' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH TONOS+foldMapping '\x0388' = CM '\x03AD' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH TONOS+foldMapping '\x0389' = CM '\x03AE' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH TONOS+foldMapping '\x038A' = CM '\x03AF' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH TONOS+foldMapping '\x038C' = CM '\x03CC' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH TONOS+foldMapping '\x038E' = CM '\x03CD' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH TONOS+foldMapping '\x038F' = CM '\x03CE' '\0' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS+foldMapping '\x0390' = CM '\x03B9' '\x0308' '\x0301'+-- GREEK CAPITAL LETTER ALPHA+foldMapping '\x0391' = CM '\x03B1' '\0' '\0'+-- GREEK CAPITAL LETTER BETA+foldMapping '\x0392' = CM '\x03B2' '\0' '\0'+-- GREEK CAPITAL LETTER GAMMA+foldMapping '\x0393' = CM '\x03B3' '\0' '\0'+-- GREEK CAPITAL LETTER DELTA+foldMapping '\x0394' = CM '\x03B4' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON+foldMapping '\x0395' = CM '\x03B5' '\0' '\0'+-- GREEK CAPITAL LETTER ZETA+foldMapping '\x0396' = CM '\x03B6' '\0' '\0'+-- GREEK CAPITAL LETTER ETA+foldMapping '\x0397' = CM '\x03B7' '\0' '\0'+-- GREEK CAPITAL LETTER THETA+foldMapping '\x0398' = CM '\x03B8' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA+foldMapping '\x0399' = CM '\x03B9' '\0' '\0'+-- GREEK CAPITAL LETTER KAPPA+foldMapping '\x039A' = CM '\x03BA' '\0' '\0'+-- GREEK CAPITAL LETTER LAMDA+foldMapping '\x039B' = CM '\x03BB' '\0' '\0'+-- GREEK CAPITAL LETTER MU+foldMapping '\x039C' = CM '\x03BC' '\0' '\0'+-- GREEK CAPITAL LETTER NU+foldMapping '\x039D' = CM '\x03BD' '\0' '\0'+-- GREEK CAPITAL LETTER XI+foldMapping '\x039E' = CM '\x03BE' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON+foldMapping '\x039F' = CM '\x03BF' '\0' '\0'+-- GREEK CAPITAL LETTER PI+foldMapping '\x03A0' = CM '\x03C0' '\0' '\0'+-- GREEK CAPITAL LETTER RHO+foldMapping '\x03A1' = CM '\x03C1' '\0' '\0'+-- GREEK CAPITAL LETTER SIGMA+foldMapping '\x03A3' = CM '\x03C3' '\0' '\0'+-- GREEK CAPITAL LETTER TAU+foldMapping '\x03A4' = CM '\x03C4' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON+foldMapping '\x03A5' = CM '\x03C5' '\0' '\0'+-- GREEK CAPITAL LETTER PHI+foldMapping '\x03A6' = CM '\x03C6' '\0' '\0'+-- GREEK CAPITAL LETTER CHI+foldMapping '\x03A7' = CM '\x03C7' '\0' '\0'+-- GREEK CAPITAL LETTER PSI+foldMapping '\x03A8' = CM '\x03C8' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA+foldMapping '\x03A9' = CM '\x03C9' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA+foldMapping '\x03AA' = CM '\x03CA' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA+foldMapping '\x03AB' = CM '\x03CB' '\0' '\0'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS+foldMapping '\x03B0' = CM '\x03C5' '\x0308' '\x0301'+-- GREEK SMALL LETTER FINAL SIGMA+foldMapping '\x03C2' = CM '\x03C3' '\0' '\0'+-- GREEK CAPITAL KAI SYMBOL+foldMapping '\x03CF' = CM '\x03D7' '\0' '\0'+-- GREEK BETA SYMBOL+foldMapping '\x03D0' = CM '\x03B2' '\0' '\0'+-- GREEK THETA SYMBOL+foldMapping '\x03D1' = CM '\x03B8' '\0' '\0'+-- GREEK PHI SYMBOL+foldMapping '\x03D5' = CM '\x03C6' '\0' '\0'+-- GREEK PI SYMBOL+foldMapping '\x03D6' = CM '\x03C0' '\0' '\0'+-- GREEK LETTER ARCHAIC KOPPA+foldMapping '\x03D8' = CM '\x03D9' '\0' '\0'+-- GREEK LETTER STIGMA+foldMapping '\x03DA' = CM '\x03DB' '\0' '\0'+-- GREEK LETTER DIGAMMA+foldMapping '\x03DC' = CM '\x03DD' '\0' '\0'+-- GREEK LETTER KOPPA+foldMapping '\x03DE' = CM '\x03DF' '\0' '\0'+-- GREEK LETTER SAMPI+foldMapping '\x03E0' = CM '\x03E1' '\0' '\0'+-- COPTIC CAPITAL LETTER SHEI+foldMapping '\x03E2' = CM '\x03E3' '\0' '\0'+-- COPTIC CAPITAL LETTER FEI+foldMapping '\x03E4' = CM '\x03E5' '\0' '\0'+-- COPTIC CAPITAL LETTER KHEI+foldMapping '\x03E6' = CM '\x03E7' '\0' '\0'+-- COPTIC CAPITAL LETTER HORI+foldMapping '\x03E8' = CM '\x03E9' '\0' '\0'+-- COPTIC CAPITAL LETTER GANGIA+foldMapping '\x03EA' = CM '\x03EB' '\0' '\0'+-- COPTIC CAPITAL LETTER SHIMA+foldMapping '\x03EC' = CM '\x03ED' '\0' '\0'+-- COPTIC CAPITAL LETTER DEI+foldMapping '\x03EE' = CM '\x03EF' '\0' '\0'+-- GREEK KAPPA SYMBOL+foldMapping '\x03F0' = CM '\x03BA' '\0' '\0'+-- GREEK RHO SYMBOL+foldMapping '\x03F1' = CM '\x03C1' '\0' '\0'+-- GREEK CAPITAL THETA SYMBOL+foldMapping '\x03F4' = CM '\x03B8' '\0' '\0'+-- GREEK LUNATE EPSILON SYMBOL+foldMapping '\x03F5' = CM '\x03B5' '\0' '\0'+-- GREEK CAPITAL LETTER SHO+foldMapping '\x03F7' = CM '\x03F8' '\0' '\0'+-- GREEK CAPITAL LUNATE SIGMA SYMBOL+foldMapping '\x03F9' = CM '\x03F2' '\0' '\0'+-- GREEK CAPITAL LETTER SAN+foldMapping '\x03FA' = CM '\x03FB' '\0' '\0'+-- GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL+foldMapping '\x03FD' = CM '\x037B' '\0' '\0'+-- GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL+foldMapping '\x03FE' = CM '\x037C' '\0' '\0'+-- GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL+foldMapping '\x03FF' = CM '\x037D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IE WITH GRAVE+foldMapping '\x0400' = CM '\x0450' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IO+foldMapping '\x0401' = CM '\x0451' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DJE+foldMapping '\x0402' = CM '\x0452' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GJE+foldMapping '\x0403' = CM '\x0453' '\0' '\0'+-- CYRILLIC CAPITAL LETTER UKRAINIAN IE+foldMapping '\x0404' = CM '\x0454' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZE+foldMapping '\x0405' = CM '\x0455' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I+foldMapping '\x0406' = CM '\x0456' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YI+foldMapping '\x0407' = CM '\x0457' '\0' '\0'+-- CYRILLIC CAPITAL LETTER JE+foldMapping '\x0408' = CM '\x0458' '\0' '\0'+-- CYRILLIC CAPITAL LETTER LJE+foldMapping '\x0409' = CM '\x0459' '\0' '\0'+-- CYRILLIC CAPITAL LETTER NJE+foldMapping '\x040A' = CM '\x045A' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TSHE+foldMapping '\x040B' = CM '\x045B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KJE+foldMapping '\x040C' = CM '\x045C' '\0' '\0'+-- CYRILLIC CAPITAL LETTER I WITH GRAVE+foldMapping '\x040D' = CM '\x045D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHORT U+foldMapping '\x040E' = CM '\x045E' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZHE+foldMapping '\x040F' = CM '\x045F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER A+foldMapping '\x0410' = CM '\x0430' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BE+foldMapping '\x0411' = CM '\x0431' '\0' '\0'+-- CYRILLIC CAPITAL LETTER VE+foldMapping '\x0412' = CM '\x0432' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE+foldMapping '\x0413' = CM '\x0433' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DE+foldMapping '\x0414' = CM '\x0434' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IE+foldMapping '\x0415' = CM '\x0435' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZHE+foldMapping '\x0416' = CM '\x0436' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZE+foldMapping '\x0417' = CM '\x0437' '\0' '\0'+-- CYRILLIC CAPITAL LETTER I+foldMapping '\x0418' = CM '\x0438' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHORT I+foldMapping '\x0419' = CM '\x0439' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KA+foldMapping '\x041A' = CM '\x043A' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EL+foldMapping '\x041B' = CM '\x043B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EM+foldMapping '\x041C' = CM '\x043C' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN+foldMapping '\x041D' = CM '\x043D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER O+foldMapping '\x041E' = CM '\x043E' '\0' '\0'+-- CYRILLIC CAPITAL LETTER PE+foldMapping '\x041F' = CM '\x043F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ER+foldMapping '\x0420' = CM '\x0440' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ES+foldMapping '\x0421' = CM '\x0441' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TE+foldMapping '\x0422' = CM '\x0442' '\0' '\0'+-- CYRILLIC CAPITAL LETTER U+foldMapping '\x0423' = CM '\x0443' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EF+foldMapping '\x0424' = CM '\x0444' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HA+foldMapping '\x0425' = CM '\x0445' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TSE+foldMapping '\x0426' = CM '\x0446' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CHE+foldMapping '\x0427' = CM '\x0447' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHA+foldMapping '\x0428' = CM '\x0448' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHCHA+foldMapping '\x0429' = CM '\x0449' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HARD SIGN+foldMapping '\x042A' = CM '\x044A' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YERU+foldMapping '\x042B' = CM '\x044B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SOFT SIGN+foldMapping '\x042C' = CM '\x044C' '\0' '\0'+-- CYRILLIC CAPITAL LETTER E+foldMapping '\x042D' = CM '\x044D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YU+foldMapping '\x042E' = CM '\x044E' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YA+foldMapping '\x042F' = CM '\x044F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER OMEGA+foldMapping '\x0460' = CM '\x0461' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YAT+foldMapping '\x0462' = CM '\x0463' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED E+foldMapping '\x0464' = CM '\x0465' '\0' '\0'+-- CYRILLIC CAPITAL LETTER LITTLE YUS+foldMapping '\x0466' = CM '\x0467' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS+foldMapping '\x0468' = CM '\x0469' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BIG YUS+foldMapping '\x046A' = CM '\x046B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS+foldMapping '\x046C' = CM '\x046D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KSI+foldMapping '\x046E' = CM '\x046F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER PSI+foldMapping '\x0470' = CM '\x0471' '\0' '\0'+-- CYRILLIC CAPITAL LETTER FITA+foldMapping '\x0472' = CM '\x0473' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IZHITSA+foldMapping '\x0474' = CM '\x0475' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT+foldMapping '\x0476' = CM '\x0477' '\0' '\0'+-- CYRILLIC CAPITAL LETTER UK+foldMapping '\x0478' = CM '\x0479' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ROUND OMEGA+foldMapping '\x047A' = CM '\x047B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER OMEGA WITH TITLO+foldMapping '\x047C' = CM '\x047D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER OT+foldMapping '\x047E' = CM '\x047F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOPPA+foldMapping '\x0480' = CM '\x0481' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHORT I WITH TAIL+foldMapping '\x048A' = CM '\x048B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SEMISOFT SIGN+foldMapping '\x048C' = CM '\x048D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ER WITH TICK+foldMapping '\x048E' = CM '\x048F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE WITH UPTURN+foldMapping '\x0490' = CM '\x0491' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE WITH STROKE+foldMapping '\x0492' = CM '\x0493' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK+foldMapping '\x0494' = CM '\x0495' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER+foldMapping '\x0496' = CM '\x0497' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZE WITH DESCENDER+foldMapping '\x0498' = CM '\x0499' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KA WITH DESCENDER+foldMapping '\x049A' = CM '\x049B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE+foldMapping '\x049C' = CM '\x049D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KA WITH STROKE+foldMapping '\x049E' = CM '\x049F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BASHKIR KA+foldMapping '\x04A0' = CM '\x04A1' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN WITH DESCENDER+foldMapping '\x04A2' = CM '\x04A3' '\0' '\0'+-- CYRILLIC CAPITAL LIGATURE EN GHE+foldMapping '\x04A4' = CM '\x04A5' '\0' '\0'+-- CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK+foldMapping '\x04A6' = CM '\x04A7' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ABKHASIAN HA+foldMapping '\x04A8' = CM '\x04A9' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ES WITH DESCENDER+foldMapping '\x04AA' = CM '\x04AB' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TE WITH DESCENDER+foldMapping '\x04AC' = CM '\x04AD' '\0' '\0'+-- CYRILLIC CAPITAL LETTER STRAIGHT U+foldMapping '\x04AE' = CM '\x04AF' '\0' '\0'+-- CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE+foldMapping '\x04B0' = CM '\x04B1' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HA WITH DESCENDER+foldMapping '\x04B2' = CM '\x04B3' '\0' '\0'+-- CYRILLIC CAPITAL LIGATURE TE TSE+foldMapping '\x04B4' = CM '\x04B5' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CHE WITH DESCENDER+foldMapping '\x04B6' = CM '\x04B7' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE+foldMapping '\x04B8' = CM '\x04B9' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHHA+foldMapping '\x04BA' = CM '\x04BB' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ABKHASIAN CHE+foldMapping '\x04BC' = CM '\x04BD' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER+foldMapping '\x04BE' = CM '\x04BF' '\0' '\0'+-- CYRILLIC LETTER PALOCHKA+foldMapping '\x04C0' = CM '\x04CF' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZHE WITH BREVE+foldMapping '\x04C1' = CM '\x04C2' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KA WITH HOOK+foldMapping '\x04C3' = CM '\x04C4' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EL WITH TAIL+foldMapping '\x04C5' = CM '\x04C6' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN WITH HOOK+foldMapping '\x04C7' = CM '\x04C8' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN WITH TAIL+foldMapping '\x04C9' = CM '\x04CA' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KHAKASSIAN CHE+foldMapping '\x04CB' = CM '\x04CC' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EM WITH TAIL+foldMapping '\x04CD' = CM '\x04CE' '\0' '\0'+-- CYRILLIC CAPITAL LETTER A WITH BREVE+foldMapping '\x04D0' = CM '\x04D1' '\0' '\0'+-- CYRILLIC CAPITAL LETTER A WITH DIAERESIS+foldMapping '\x04D2' = CM '\x04D3' '\0' '\0'+-- CYRILLIC CAPITAL LIGATURE A IE+foldMapping '\x04D4' = CM '\x04D5' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IE WITH BREVE+foldMapping '\x04D6' = CM '\x04D7' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SCHWA+foldMapping '\x04D8' = CM '\x04D9' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS+foldMapping '\x04DA' = CM '\x04DB' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS+foldMapping '\x04DC' = CM '\x04DD' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS+foldMapping '\x04DE' = CM '\x04DF' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ABKHASIAN DZE+foldMapping '\x04E0' = CM '\x04E1' '\0' '\0'+-- CYRILLIC CAPITAL LETTER I WITH MACRON+foldMapping '\x04E2' = CM '\x04E3' '\0' '\0'+-- CYRILLIC CAPITAL LETTER I WITH DIAERESIS+foldMapping '\x04E4' = CM '\x04E5' '\0' '\0'+-- CYRILLIC CAPITAL LETTER O WITH DIAERESIS+foldMapping '\x04E6' = CM '\x04E7' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BARRED O+foldMapping '\x04E8' = CM '\x04E9' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS+foldMapping '\x04EA' = CM '\x04EB' '\0' '\0'+-- CYRILLIC CAPITAL LETTER E WITH DIAERESIS+foldMapping '\x04EC' = CM '\x04ED' '\0' '\0'+-- CYRILLIC CAPITAL LETTER U WITH MACRON+foldMapping '\x04EE' = CM '\x04EF' '\0' '\0'+-- CYRILLIC CAPITAL LETTER U WITH DIAERESIS+foldMapping '\x04F0' = CM '\x04F1' '\0' '\0'+-- CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE+foldMapping '\x04F2' = CM '\x04F3' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS+foldMapping '\x04F4' = CM '\x04F5' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE WITH DESCENDER+foldMapping '\x04F6' = CM '\x04F7' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS+foldMapping '\x04F8' = CM '\x04F9' '\0' '\0'+-- CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK+foldMapping '\x04FA' = CM '\x04FB' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HA WITH HOOK+foldMapping '\x04FC' = CM '\x04FD' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HA WITH STROKE+foldMapping '\x04FE' = CM '\x04FF' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI DE+foldMapping '\x0500' = CM '\x0501' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI DJE+foldMapping '\x0502' = CM '\x0503' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI ZJE+foldMapping '\x0504' = CM '\x0505' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI DZJE+foldMapping '\x0506' = CM '\x0507' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI LJE+foldMapping '\x0508' = CM '\x0509' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI NJE+foldMapping '\x050A' = CM '\x050B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI SJE+foldMapping '\x050C' = CM '\x050D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER KOMI TJE+foldMapping '\x050E' = CM '\x050F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER REVERSED ZE+foldMapping '\x0510' = CM '\x0511' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EL WITH HOOK+foldMapping '\x0512' = CM '\x0513' '\0' '\0'+-- CYRILLIC CAPITAL LETTER LHA+foldMapping '\x0514' = CM '\x0515' '\0' '\0'+-- CYRILLIC CAPITAL LETTER RHA+foldMapping '\x0516' = CM '\x0517' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YAE+foldMapping '\x0518' = CM '\x0519' '\0' '\0'+-- CYRILLIC CAPITAL LETTER QA+foldMapping '\x051A' = CM '\x051B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER WE+foldMapping '\x051C' = CM '\x051D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ALEUT KA+foldMapping '\x051E' = CM '\x051F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK+foldMapping '\x0520' = CM '\x0521' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK+foldMapping '\x0522' = CM '\x0523' '\0' '\0'+-- CYRILLIC CAPITAL LETTER PE WITH DESCENDER+foldMapping '\x0524' = CM '\x0525' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER+foldMapping '\x0526' = CM '\x0527' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK+foldMapping '\x0528' = CM '\x0529' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZZHE+foldMapping '\x052A' = CM '\x052B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DCHE+foldMapping '\x052C' = CM '\x052D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER EL WITH DESCENDER+foldMapping '\x052E' = CM '\x052F' '\0' '\0'+-- ARMENIAN CAPITAL LETTER AYB+foldMapping '\x0531' = CM '\x0561' '\0' '\0'+-- ARMENIAN CAPITAL LETTER BEN+foldMapping '\x0532' = CM '\x0562' '\0' '\0'+-- ARMENIAN CAPITAL LETTER GIM+foldMapping '\x0533' = CM '\x0563' '\0' '\0'+-- ARMENIAN CAPITAL LETTER DA+foldMapping '\x0534' = CM '\x0564' '\0' '\0'+-- ARMENIAN CAPITAL LETTER ECH+foldMapping '\x0535' = CM '\x0565' '\0' '\0'+-- ARMENIAN CAPITAL LETTER ZA+foldMapping '\x0536' = CM '\x0566' '\0' '\0'+-- ARMENIAN CAPITAL LETTER EH+foldMapping '\x0537' = CM '\x0567' '\0' '\0'+-- ARMENIAN CAPITAL LETTER ET+foldMapping '\x0538' = CM '\x0568' '\0' '\0'+-- ARMENIAN CAPITAL LETTER TO+foldMapping '\x0539' = CM '\x0569' '\0' '\0'+-- ARMENIAN CAPITAL LETTER ZHE+foldMapping '\x053A' = CM '\x056A' '\0' '\0'+-- ARMENIAN CAPITAL LETTER INI+foldMapping '\x053B' = CM '\x056B' '\0' '\0'+-- ARMENIAN CAPITAL LETTER LIWN+foldMapping '\x053C' = CM '\x056C' '\0' '\0'+-- ARMENIAN CAPITAL LETTER XEH+foldMapping '\x053D' = CM '\x056D' '\0' '\0'+-- ARMENIAN CAPITAL LETTER CA+foldMapping '\x053E' = CM '\x056E' '\0' '\0'+-- ARMENIAN CAPITAL LETTER KEN+foldMapping '\x053F' = CM '\x056F' '\0' '\0'+-- ARMENIAN CAPITAL LETTER HO+foldMapping '\x0540' = CM '\x0570' '\0' '\0'+-- ARMENIAN CAPITAL LETTER JA+foldMapping '\x0541' = CM '\x0571' '\0' '\0'+-- ARMENIAN CAPITAL LETTER GHAD+foldMapping '\x0542' = CM '\x0572' '\0' '\0'+-- ARMENIAN CAPITAL LETTER CHEH+foldMapping '\x0543' = CM '\x0573' '\0' '\0'+-- ARMENIAN CAPITAL LETTER MEN+foldMapping '\x0544' = CM '\x0574' '\0' '\0'+-- ARMENIAN CAPITAL LETTER YI+foldMapping '\x0545' = CM '\x0575' '\0' '\0'+-- ARMENIAN CAPITAL LETTER NOW+foldMapping '\x0546' = CM '\x0576' '\0' '\0'+-- ARMENIAN CAPITAL LETTER SHA+foldMapping '\x0547' = CM '\x0577' '\0' '\0'+-- ARMENIAN CAPITAL LETTER VO+foldMapping '\x0548' = CM '\x0578' '\0' '\0'+-- ARMENIAN CAPITAL LETTER CHA+foldMapping '\x0549' = CM '\x0579' '\0' '\0'+-- ARMENIAN CAPITAL LETTER PEH+foldMapping '\x054A' = CM '\x057A' '\0' '\0'+-- ARMENIAN CAPITAL LETTER JHEH+foldMapping '\x054B' = CM '\x057B' '\0' '\0'+-- ARMENIAN CAPITAL LETTER RA+foldMapping '\x054C' = CM '\x057C' '\0' '\0'+-- ARMENIAN CAPITAL LETTER SEH+foldMapping '\x054D' = CM '\x057D' '\0' '\0'+-- ARMENIAN CAPITAL LETTER VEW+foldMapping '\x054E' = CM '\x057E' '\0' '\0'+-- ARMENIAN CAPITAL LETTER TIWN+foldMapping '\x054F' = CM '\x057F' '\0' '\0'+-- ARMENIAN CAPITAL LETTER REH+foldMapping '\x0550' = CM '\x0580' '\0' '\0'+-- ARMENIAN CAPITAL LETTER CO+foldMapping '\x0551' = CM '\x0581' '\0' '\0'+-- ARMENIAN CAPITAL LETTER YIWN+foldMapping '\x0552' = CM '\x0582' '\0' '\0'+-- ARMENIAN CAPITAL LETTER PIWR+foldMapping '\x0553' = CM '\x0583' '\0' '\0'+-- ARMENIAN CAPITAL LETTER KEH+foldMapping '\x0554' = CM '\x0584' '\0' '\0'+-- ARMENIAN CAPITAL LETTER OH+foldMapping '\x0555' = CM '\x0585' '\0' '\0'+-- ARMENIAN CAPITAL LETTER FEH+foldMapping '\x0556' = CM '\x0586' '\0' '\0'+-- ARMENIAN SMALL LIGATURE ECH YIWN+foldMapping '\x0587' = CM '\x0565' '\x0582' '\0'+-- GEORGIAN CAPITAL LETTER AN+foldMapping '\x10A0' = CM '\x2D00' '\0' '\0'+-- GEORGIAN CAPITAL LETTER BAN+foldMapping '\x10A1' = CM '\x2D01' '\0' '\0'+-- GEORGIAN CAPITAL LETTER GAN+foldMapping '\x10A2' = CM '\x2D02' '\0' '\0'+-- GEORGIAN CAPITAL LETTER DON+foldMapping '\x10A3' = CM '\x2D03' '\0' '\0'+-- GEORGIAN CAPITAL LETTER EN+foldMapping '\x10A4' = CM '\x2D04' '\0' '\0'+-- GEORGIAN CAPITAL LETTER VIN+foldMapping '\x10A5' = CM '\x2D05' '\0' '\0'+-- GEORGIAN CAPITAL LETTER ZEN+foldMapping '\x10A6' = CM '\x2D06' '\0' '\0'+-- GEORGIAN CAPITAL LETTER TAN+foldMapping '\x10A7' = CM '\x2D07' '\0' '\0'+-- GEORGIAN CAPITAL LETTER IN+foldMapping '\x10A8' = CM '\x2D08' '\0' '\0'+-- GEORGIAN CAPITAL LETTER KAN+foldMapping '\x10A9' = CM '\x2D09' '\0' '\0'+-- GEORGIAN CAPITAL LETTER LAS+foldMapping '\x10AA' = CM '\x2D0A' '\0' '\0'+-- GEORGIAN CAPITAL LETTER MAN+foldMapping '\x10AB' = CM '\x2D0B' '\0' '\0'+-- GEORGIAN CAPITAL LETTER NAR+foldMapping '\x10AC' = CM '\x2D0C' '\0' '\0'+-- GEORGIAN CAPITAL LETTER ON+foldMapping '\x10AD' = CM '\x2D0D' '\0' '\0'+-- GEORGIAN CAPITAL LETTER PAR+foldMapping '\x10AE' = CM '\x2D0E' '\0' '\0'+-- GEORGIAN CAPITAL LETTER ZHAR+foldMapping '\x10AF' = CM '\x2D0F' '\0' '\0'+-- GEORGIAN CAPITAL LETTER RAE+foldMapping '\x10B0' = CM '\x2D10' '\0' '\0'+-- GEORGIAN CAPITAL LETTER SAN+foldMapping '\x10B1' = CM '\x2D11' '\0' '\0'+-- GEORGIAN CAPITAL LETTER TAR+foldMapping '\x10B2' = CM '\x2D12' '\0' '\0'+-- GEORGIAN CAPITAL LETTER UN+foldMapping '\x10B3' = CM '\x2D13' '\0' '\0'+-- GEORGIAN CAPITAL LETTER PHAR+foldMapping '\x10B4' = CM '\x2D14' '\0' '\0'+-- GEORGIAN CAPITAL LETTER KHAR+foldMapping '\x10B5' = CM '\x2D15' '\0' '\0'+-- GEORGIAN CAPITAL LETTER GHAN+foldMapping '\x10B6' = CM '\x2D16' '\0' '\0'+-- GEORGIAN CAPITAL LETTER QAR+foldMapping '\x10B7' = CM '\x2D17' '\0' '\0'+-- GEORGIAN CAPITAL LETTER SHIN+foldMapping '\x10B8' = CM '\x2D18' '\0' '\0'+-- GEORGIAN CAPITAL LETTER CHIN+foldMapping '\x10B9' = CM '\x2D19' '\0' '\0'+-- GEORGIAN CAPITAL LETTER CAN+foldMapping '\x10BA' = CM '\x2D1A' '\0' '\0'+-- GEORGIAN CAPITAL LETTER JIL+foldMapping '\x10BB' = CM '\x2D1B' '\0' '\0'+-- GEORGIAN CAPITAL LETTER CIL+foldMapping '\x10BC' = CM '\x2D1C' '\0' '\0'+-- GEORGIAN CAPITAL LETTER CHAR+foldMapping '\x10BD' = CM '\x2D1D' '\0' '\0'+-- GEORGIAN CAPITAL LETTER XAN+foldMapping '\x10BE' = CM '\x2D1E' '\0' '\0'+-- GEORGIAN CAPITAL LETTER JHAN+foldMapping '\x10BF' = CM '\x2D1F' '\0' '\0'+-- GEORGIAN CAPITAL LETTER HAE+foldMapping '\x10C0' = CM '\x2D20' '\0' '\0'+-- GEORGIAN CAPITAL LETTER HE+foldMapping '\x10C1' = CM '\x2D21' '\0' '\0'+-- GEORGIAN CAPITAL LETTER HIE+foldMapping '\x10C2' = CM '\x2D22' '\0' '\0'+-- GEORGIAN CAPITAL LETTER WE+foldMapping '\x10C3' = CM '\x2D23' '\0' '\0'+-- GEORGIAN CAPITAL LETTER HAR+foldMapping '\x10C4' = CM '\x2D24' '\0' '\0'+-- GEORGIAN CAPITAL LETTER HOE+foldMapping '\x10C5' = CM '\x2D25' '\0' '\0'+-- GEORGIAN CAPITAL LETTER YN+foldMapping '\x10C7' = CM '\x2D27' '\0' '\0'+-- GEORGIAN CAPITAL LETTER AEN+foldMapping '\x10CD' = CM '\x2D2D' '\0' '\0'+-- CHEROKEE SMALL LETTER YE+foldMapping '\x13F8' = CM '\x13F0' '\0' '\0'+-- CHEROKEE SMALL LETTER YI+foldMapping '\x13F9' = CM '\x13F1' '\0' '\0'+-- CHEROKEE SMALL LETTER YO+foldMapping '\x13FA' = CM '\x13F2' '\0' '\0'+-- CHEROKEE SMALL LETTER YU+foldMapping '\x13FB' = CM '\x13F3' '\0' '\0'+-- CHEROKEE SMALL LETTER YV+foldMapping '\x13FC' = CM '\x13F4' '\0' '\0'+-- CHEROKEE SMALL LETTER MV+foldMapping '\x13FD' = CM '\x13F5' '\0' '\0'+-- CYRILLIC SMALL LETTER ROUNDED VE+foldMapping '\x1C80' = CM '\x0432' '\0' '\0'+-- CYRILLIC SMALL LETTER LONG-LEGGED DE+foldMapping '\x1C81' = CM '\x0434' '\0' '\0'+-- CYRILLIC SMALL LETTER NARROW O+foldMapping '\x1C82' = CM '\x043E' '\0' '\0'+-- CYRILLIC SMALL LETTER WIDE ES+foldMapping '\x1C83' = CM '\x0441' '\0' '\0'+-- CYRILLIC SMALL LETTER TALL TE+foldMapping '\x1C84' = CM '\x0442' '\0' '\0'+-- CYRILLIC SMALL LETTER THREE-LEGGED TE+foldMapping '\x1C85' = CM '\x0442' '\0' '\0'+-- CYRILLIC SMALL LETTER TALL HARD SIGN+foldMapping '\x1C86' = CM '\x044A' '\0' '\0'+-- CYRILLIC SMALL LETTER TALL YAT+foldMapping '\x1C87' = CM '\x0463' '\0' '\0'+-- CYRILLIC SMALL LETTER UNBLENDED UK+foldMapping '\x1C88' = CM '\xA64B' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH RING BELOW+foldMapping '\x1E00' = CM '\x1E01' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH DOT ABOVE+foldMapping '\x1E02' = CM '\x1E03' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH DOT BELOW+foldMapping '\x1E04' = CM '\x1E05' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH LINE BELOW+foldMapping '\x1E06' = CM '\x1E07' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE+foldMapping '\x1E08' = CM '\x1E09' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH DOT ABOVE+foldMapping '\x1E0A' = CM '\x1E0B' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH DOT BELOW+foldMapping '\x1E0C' = CM '\x1E0D' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH LINE BELOW+foldMapping '\x1E0E' = CM '\x1E0F' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH CEDILLA+foldMapping '\x1E10' = CM '\x1E11' '\0' '\0'+-- LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW+foldMapping '\x1E12' = CM '\x1E13' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH MACRON AND GRAVE+foldMapping '\x1E14' = CM '\x1E15' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH MACRON AND ACUTE+foldMapping '\x1E16' = CM '\x1E17' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW+foldMapping '\x1E18' = CM '\x1E19' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH TILDE BELOW+foldMapping '\x1E1A' = CM '\x1E1B' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE+foldMapping '\x1E1C' = CM '\x1E1D' '\0' '\0'+-- LATIN CAPITAL LETTER F WITH DOT ABOVE+foldMapping '\x1E1E' = CM '\x1E1F' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH MACRON+foldMapping '\x1E20' = CM '\x1E21' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH DOT ABOVE+foldMapping '\x1E22' = CM '\x1E23' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH DOT BELOW+foldMapping '\x1E24' = CM '\x1E25' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH DIAERESIS+foldMapping '\x1E26' = CM '\x1E27' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH CEDILLA+foldMapping '\x1E28' = CM '\x1E29' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH BREVE BELOW+foldMapping '\x1E2A' = CM '\x1E2B' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH TILDE BELOW+foldMapping '\x1E2C' = CM '\x1E2D' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE+foldMapping '\x1E2E' = CM '\x1E2F' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH ACUTE+foldMapping '\x1E30' = CM '\x1E31' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH DOT BELOW+foldMapping '\x1E32' = CM '\x1E33' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH LINE BELOW+foldMapping '\x1E34' = CM '\x1E35' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH DOT BELOW+foldMapping '\x1E36' = CM '\x1E37' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON+foldMapping '\x1E38' = CM '\x1E39' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH LINE BELOW+foldMapping '\x1E3A' = CM '\x1E3B' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW+foldMapping '\x1E3C' = CM '\x1E3D' '\0' '\0'+-- LATIN CAPITAL LETTER M WITH ACUTE+foldMapping '\x1E3E' = CM '\x1E3F' '\0' '\0'+-- LATIN CAPITAL LETTER M WITH DOT ABOVE+foldMapping '\x1E40' = CM '\x1E41' '\0' '\0'+-- LATIN CAPITAL LETTER M WITH DOT BELOW+foldMapping '\x1E42' = CM '\x1E43' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH DOT ABOVE+foldMapping '\x1E44' = CM '\x1E45' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH DOT BELOW+foldMapping '\x1E46' = CM '\x1E47' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH LINE BELOW+foldMapping '\x1E48' = CM '\x1E49' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW+foldMapping '\x1E4A' = CM '\x1E4B' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH TILDE AND ACUTE+foldMapping '\x1E4C' = CM '\x1E4D' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS+foldMapping '\x1E4E' = CM '\x1E4F' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH MACRON AND GRAVE+foldMapping '\x1E50' = CM '\x1E51' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH MACRON AND ACUTE+foldMapping '\x1E52' = CM '\x1E53' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH ACUTE+foldMapping '\x1E54' = CM '\x1E55' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH DOT ABOVE+foldMapping '\x1E56' = CM '\x1E57' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH DOT ABOVE+foldMapping '\x1E58' = CM '\x1E59' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH DOT BELOW+foldMapping '\x1E5A' = CM '\x1E5B' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON+foldMapping '\x1E5C' = CM '\x1E5D' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH LINE BELOW+foldMapping '\x1E5E' = CM '\x1E5F' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH DOT ABOVE+foldMapping '\x1E60' = CM '\x1E61' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH DOT BELOW+foldMapping '\x1E62' = CM '\x1E63' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE+foldMapping '\x1E64' = CM '\x1E65' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE+foldMapping '\x1E66' = CM '\x1E67' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE+foldMapping '\x1E68' = CM '\x1E69' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH DOT ABOVE+foldMapping '\x1E6A' = CM '\x1E6B' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH DOT BELOW+foldMapping '\x1E6C' = CM '\x1E6D' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH LINE BELOW+foldMapping '\x1E6E' = CM '\x1E6F' '\0' '\0'+-- LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW+foldMapping '\x1E70' = CM '\x1E71' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DIAERESIS BELOW+foldMapping '\x1E72' = CM '\x1E73' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH TILDE BELOW+foldMapping '\x1E74' = CM '\x1E75' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW+foldMapping '\x1E76' = CM '\x1E77' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH TILDE AND ACUTE+foldMapping '\x1E78' = CM '\x1E79' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS+foldMapping '\x1E7A' = CM '\x1E7B' '\0' '\0'+-- LATIN CAPITAL LETTER V WITH TILDE+foldMapping '\x1E7C' = CM '\x1E7D' '\0' '\0'+-- LATIN CAPITAL LETTER V WITH DOT BELOW+foldMapping '\x1E7E' = CM '\x1E7F' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH GRAVE+foldMapping '\x1E80' = CM '\x1E81' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH ACUTE+foldMapping '\x1E82' = CM '\x1E83' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH DIAERESIS+foldMapping '\x1E84' = CM '\x1E85' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH DOT ABOVE+foldMapping '\x1E86' = CM '\x1E87' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH DOT BELOW+foldMapping '\x1E88' = CM '\x1E89' '\0' '\0'+-- LATIN CAPITAL LETTER X WITH DOT ABOVE+foldMapping '\x1E8A' = CM '\x1E8B' '\0' '\0'+-- LATIN CAPITAL LETTER X WITH DIAERESIS+foldMapping '\x1E8C' = CM '\x1E8D' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH DOT ABOVE+foldMapping '\x1E8E' = CM '\x1E8F' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH CIRCUMFLEX+foldMapping '\x1E90' = CM '\x1E91' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH DOT BELOW+foldMapping '\x1E92' = CM '\x1E93' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH LINE BELOW+foldMapping '\x1E94' = CM '\x1E95' '\0' '\0'+-- LATIN SMALL LETTER H WITH LINE BELOW+foldMapping '\x1E96' = CM '\x0068' '\x0331' '\0'+-- LATIN SMALL LETTER T WITH DIAERESIS+foldMapping '\x1E97' = CM '\x0074' '\x0308' '\0'+-- LATIN SMALL LETTER W WITH RING ABOVE+foldMapping '\x1E98' = CM '\x0077' '\x030A' '\0'+-- LATIN SMALL LETTER Y WITH RING ABOVE+foldMapping '\x1E99' = CM '\x0079' '\x030A' '\0'+-- LATIN SMALL LETTER A WITH RIGHT HALF RING+foldMapping '\x1E9A' = CM '\x0061' '\x02BE' '\0'+-- LATIN SMALL LETTER LONG S WITH DOT ABOVE+foldMapping '\x1E9B' = CM '\x1E61' '\0' '\0'+-- LATIN CAPITAL LETTER SHARP S+foldMapping '\x1E9E' = CM '\x0073' '\x0073' '\0'+-- LATIN CAPITAL LETTER A WITH DOT BELOW+foldMapping '\x1EA0' = CM '\x1EA1' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH HOOK ABOVE+foldMapping '\x1EA2' = CM '\x1EA3' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE+foldMapping '\x1EA4' = CM '\x1EA5' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE+foldMapping '\x1EA6' = CM '\x1EA7' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE+foldMapping '\x1EA8' = CM '\x1EA9' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE+foldMapping '\x1EAA' = CM '\x1EAB' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW+foldMapping '\x1EAC' = CM '\x1EAD' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE AND ACUTE+foldMapping '\x1EAE' = CM '\x1EAF' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE AND GRAVE+foldMapping '\x1EB0' = CM '\x1EB1' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE+foldMapping '\x1EB2' = CM '\x1EB3' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE AND TILDE+foldMapping '\x1EB4' = CM '\x1EB5' '\0' '\0'+-- LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW+foldMapping '\x1EB6' = CM '\x1EB7' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH DOT BELOW+foldMapping '\x1EB8' = CM '\x1EB9' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH HOOK ABOVE+foldMapping '\x1EBA' = CM '\x1EBB' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH TILDE+foldMapping '\x1EBC' = CM '\x1EBD' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE+foldMapping '\x1EBE' = CM '\x1EBF' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE+foldMapping '\x1EC0' = CM '\x1EC1' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE+foldMapping '\x1EC2' = CM '\x1EC3' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE+foldMapping '\x1EC4' = CM '\x1EC5' '\0' '\0'+-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW+foldMapping '\x1EC6' = CM '\x1EC7' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH HOOK ABOVE+foldMapping '\x1EC8' = CM '\x1EC9' '\0' '\0'+-- LATIN CAPITAL LETTER I WITH DOT BELOW+foldMapping '\x1ECA' = CM '\x1ECB' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH DOT BELOW+foldMapping '\x1ECC' = CM '\x1ECD' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HOOK ABOVE+foldMapping '\x1ECE' = CM '\x1ECF' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE+foldMapping '\x1ED0' = CM '\x1ED1' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE+foldMapping '\x1ED2' = CM '\x1ED3' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE+foldMapping '\x1ED4' = CM '\x1ED5' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE+foldMapping '\x1ED6' = CM '\x1ED7' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW+foldMapping '\x1ED8' = CM '\x1ED9' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN AND ACUTE+foldMapping '\x1EDA' = CM '\x1EDB' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN AND GRAVE+foldMapping '\x1EDC' = CM '\x1EDD' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE+foldMapping '\x1EDE' = CM '\x1EDF' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN AND TILDE+foldMapping '\x1EE0' = CM '\x1EE1' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW+foldMapping '\x1EE2' = CM '\x1EE3' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH DOT BELOW+foldMapping '\x1EE4' = CM '\x1EE5' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HOOK ABOVE+foldMapping '\x1EE6' = CM '\x1EE7' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN AND ACUTE+foldMapping '\x1EE8' = CM '\x1EE9' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN AND GRAVE+foldMapping '\x1EEA' = CM '\x1EEB' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE+foldMapping '\x1EEC' = CM '\x1EED' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN AND TILDE+foldMapping '\x1EEE' = CM '\x1EEF' '\0' '\0'+-- LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW+foldMapping '\x1EF0' = CM '\x1EF1' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH GRAVE+foldMapping '\x1EF2' = CM '\x1EF3' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH DOT BELOW+foldMapping '\x1EF4' = CM '\x1EF5' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH HOOK ABOVE+foldMapping '\x1EF6' = CM '\x1EF7' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH TILDE+foldMapping '\x1EF8' = CM '\x1EF9' '\0' '\0'+-- LATIN CAPITAL LETTER MIDDLE-WELSH LL+foldMapping '\x1EFA' = CM '\x1EFB' '\0' '\0'+-- LATIN CAPITAL LETTER MIDDLE-WELSH V+foldMapping '\x1EFC' = CM '\x1EFD' '\0' '\0'+-- LATIN CAPITAL LETTER Y WITH LOOP+foldMapping '\x1EFE' = CM '\x1EFF' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI+foldMapping '\x1F08' = CM '\x1F00' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA+foldMapping '\x1F09' = CM '\x1F01' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA+foldMapping '\x1F0A' = CM '\x1F02' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA+foldMapping '\x1F0B' = CM '\x1F03' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA+foldMapping '\x1F0C' = CM '\x1F04' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA+foldMapping '\x1F0D' = CM '\x1F05' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI+foldMapping '\x1F0E' = CM '\x1F06' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI+foldMapping '\x1F0F' = CM '\x1F07' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH PSILI+foldMapping '\x1F18' = CM '\x1F10' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH DASIA+foldMapping '\x1F19' = CM '\x1F11' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA+foldMapping '\x1F1A' = CM '\x1F12' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA+foldMapping '\x1F1B' = CM '\x1F13' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA+foldMapping '\x1F1C' = CM '\x1F14' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA+foldMapping '\x1F1D' = CM '\x1F15' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI+foldMapping '\x1F28' = CM '\x1F20' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA+foldMapping '\x1F29' = CM '\x1F21' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA+foldMapping '\x1F2A' = CM '\x1F22' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA+foldMapping '\x1F2B' = CM '\x1F23' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA+foldMapping '\x1F2C' = CM '\x1F24' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA+foldMapping '\x1F2D' = CM '\x1F25' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI+foldMapping '\x1F2E' = CM '\x1F26' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI+foldMapping '\x1F2F' = CM '\x1F27' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH PSILI+foldMapping '\x1F38' = CM '\x1F30' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH DASIA+foldMapping '\x1F39' = CM '\x1F31' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA+foldMapping '\x1F3A' = CM '\x1F32' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA+foldMapping '\x1F3B' = CM '\x1F33' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA+foldMapping '\x1F3C' = CM '\x1F34' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA+foldMapping '\x1F3D' = CM '\x1F35' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI+foldMapping '\x1F3E' = CM '\x1F36' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI+foldMapping '\x1F3F' = CM '\x1F37' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH PSILI+foldMapping '\x1F48' = CM '\x1F40' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH DASIA+foldMapping '\x1F49' = CM '\x1F41' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA+foldMapping '\x1F4A' = CM '\x1F42' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA+foldMapping '\x1F4B' = CM '\x1F43' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA+foldMapping '\x1F4C' = CM '\x1F44' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA+foldMapping '\x1F4D' = CM '\x1F45' '\0' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI+foldMapping '\x1F50' = CM '\x03C5' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA+foldMapping '\x1F52' = CM '\x03C5' '\x0313' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA+foldMapping '\x1F54' = CM '\x03C5' '\x0313' '\x0301'+-- GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI+foldMapping '\x1F56' = CM '\x03C5' '\x0313' '\x0342'+-- GREEK CAPITAL LETTER UPSILON WITH DASIA+foldMapping '\x1F59' = CM '\x1F51' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA+foldMapping '\x1F5B' = CM '\x1F53' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA+foldMapping '\x1F5D' = CM '\x1F55' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI+foldMapping '\x1F5F' = CM '\x1F57' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI+foldMapping '\x1F68' = CM '\x1F60' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA+foldMapping '\x1F69' = CM '\x1F61' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA+foldMapping '\x1F6A' = CM '\x1F62' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA+foldMapping '\x1F6B' = CM '\x1F63' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA+foldMapping '\x1F6C' = CM '\x1F64' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA+foldMapping '\x1F6D' = CM '\x1F65' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI+foldMapping '\x1F6E' = CM '\x1F66' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI+foldMapping '\x1F6F' = CM '\x1F67' '\0' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI+foldMapping '\x1F80' = CM '\x1F00' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI+foldMapping '\x1F81' = CM '\x1F01' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1F82' = CM '\x1F02' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1F83' = CM '\x1F03' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1F84' = CM '\x1F04' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1F85' = CM '\x1F05' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1F86' = CM '\x1F06' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1F87' = CM '\x1F07' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI+foldMapping '\x1F88' = CM '\x1F00' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI+foldMapping '\x1F89' = CM '\x1F01' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1F8A' = CM '\x1F02' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1F8B' = CM '\x1F03' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1F8C' = CM '\x1F04' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1F8D' = CM '\x1F05' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1F8E' = CM '\x1F06' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1F8F' = CM '\x1F07' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI+foldMapping '\x1F90' = CM '\x1F20' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI+foldMapping '\x1F91' = CM '\x1F21' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1F92' = CM '\x1F22' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1F93' = CM '\x1F23' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1F94' = CM '\x1F24' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1F95' = CM '\x1F25' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1F96' = CM '\x1F26' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1F97' = CM '\x1F27' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI+foldMapping '\x1F98' = CM '\x1F20' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI+foldMapping '\x1F99' = CM '\x1F21' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1F9A' = CM '\x1F22' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1F9B' = CM '\x1F23' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1F9C' = CM '\x1F24' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1F9D' = CM '\x1F25' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1F9E' = CM '\x1F26' '\x03B9' '\0'+-- GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1F9F' = CM '\x1F27' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI+foldMapping '\x1FA0' = CM '\x1F60' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI+foldMapping '\x1FA1' = CM '\x1F61' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1FA2' = CM '\x1F62' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI+foldMapping '\x1FA3' = CM '\x1F63' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1FA4' = CM '\x1F64' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI+foldMapping '\x1FA5' = CM '\x1F65' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1FA6' = CM '\x1F66' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1FA7' = CM '\x1F67' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI+foldMapping '\x1FA8' = CM '\x1F60' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI+foldMapping '\x1FA9' = CM '\x1F61' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1FAA' = CM '\x1F62' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI+foldMapping '\x1FAB' = CM '\x1F63' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1FAC' = CM '\x1F64' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI+foldMapping '\x1FAD' = CM '\x1F65' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1FAE' = CM '\x1F66' '\x03B9' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI+foldMapping '\x1FAF' = CM '\x1F67' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI+foldMapping '\x1FB2' = CM '\x1F70' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI+foldMapping '\x1FB3' = CM '\x03B1' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI+foldMapping '\x1FB4' = CM '\x03AC' '\x03B9' '\0'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI+foldMapping '\x1FB6' = CM '\x03B1' '\x0342' '\0'+-- GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1FB7' = CM '\x03B1' '\x0342' '\x03B9'+-- GREEK CAPITAL LETTER ALPHA WITH VRACHY+foldMapping '\x1FB8' = CM '\x1FB0' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH MACRON+foldMapping '\x1FB9' = CM '\x1FB1' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH VARIA+foldMapping '\x1FBA' = CM '\x1F70' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH OXIA+foldMapping '\x1FBB' = CM '\x1F71' '\0' '\0'+-- GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI+foldMapping '\x1FBC' = CM '\x03B1' '\x03B9' '\0'+-- GREEK PROSGEGRAMMENI+foldMapping '\x1FBE' = CM '\x03B9' '\0' '\0'+-- GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI+foldMapping '\x1FC2' = CM '\x1F74' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI+foldMapping '\x1FC3' = CM '\x03B7' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI+foldMapping '\x1FC4' = CM '\x03AE' '\x03B9' '\0'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI+foldMapping '\x1FC6' = CM '\x03B7' '\x0342' '\0'+-- GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1FC7' = CM '\x03B7' '\x0342' '\x03B9'+-- GREEK CAPITAL LETTER EPSILON WITH VARIA+foldMapping '\x1FC8' = CM '\x1F72' '\0' '\0'+-- GREEK CAPITAL LETTER EPSILON WITH OXIA+foldMapping '\x1FC9' = CM '\x1F73' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH VARIA+foldMapping '\x1FCA' = CM '\x1F74' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH OXIA+foldMapping '\x1FCB' = CM '\x1F75' '\0' '\0'+-- GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI+foldMapping '\x1FCC' = CM '\x03B7' '\x03B9' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA+foldMapping '\x1FD2' = CM '\x03B9' '\x0308' '\x0300'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA+foldMapping '\x1FD3' = CM '\x03B9' '\x0308' '\x0301'+-- GREEK SMALL LETTER IOTA WITH PERISPOMENI+foldMapping '\x1FD6' = CM '\x03B9' '\x0342' '\0'+-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI+foldMapping '\x1FD7' = CM '\x03B9' '\x0308' '\x0342'+-- GREEK CAPITAL LETTER IOTA WITH VRACHY+foldMapping '\x1FD8' = CM '\x1FD0' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH MACRON+foldMapping '\x1FD9' = CM '\x1FD1' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH VARIA+foldMapping '\x1FDA' = CM '\x1F76' '\0' '\0'+-- GREEK CAPITAL LETTER IOTA WITH OXIA+foldMapping '\x1FDB' = CM '\x1F77' '\0' '\0'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA+foldMapping '\x1FE2' = CM '\x03C5' '\x0308' '\x0300'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA+foldMapping '\x1FE3' = CM '\x03C5' '\x0308' '\x0301'+-- GREEK SMALL LETTER RHO WITH PSILI+foldMapping '\x1FE4' = CM '\x03C1' '\x0313' '\0'+-- GREEK SMALL LETTER UPSILON WITH PERISPOMENI+foldMapping '\x1FE6' = CM '\x03C5' '\x0342' '\0'+-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI+foldMapping '\x1FE7' = CM '\x03C5' '\x0308' '\x0342'+-- GREEK CAPITAL LETTER UPSILON WITH VRACHY+foldMapping '\x1FE8' = CM '\x1FE0' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH MACRON+foldMapping '\x1FE9' = CM '\x1FE1' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH VARIA+foldMapping '\x1FEA' = CM '\x1F7A' '\0' '\0'+-- GREEK CAPITAL LETTER UPSILON WITH OXIA+foldMapping '\x1FEB' = CM '\x1F7B' '\0' '\0'+-- GREEK CAPITAL LETTER RHO WITH DASIA+foldMapping '\x1FEC' = CM '\x1FE5' '\0' '\0'+-- GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI+foldMapping '\x1FF2' = CM '\x1F7C' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI+foldMapping '\x1FF3' = CM '\x03C9' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI+foldMapping '\x1FF4' = CM '\x03CE' '\x03B9' '\0'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI+foldMapping '\x1FF6' = CM '\x03C9' '\x0342' '\0'+-- GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI+foldMapping '\x1FF7' = CM '\x03C9' '\x0342' '\x03B9'+-- GREEK CAPITAL LETTER OMICRON WITH VARIA+foldMapping '\x1FF8' = CM '\x1F78' '\0' '\0'+-- GREEK CAPITAL LETTER OMICRON WITH OXIA+foldMapping '\x1FF9' = CM '\x1F79' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH VARIA+foldMapping '\x1FFA' = CM '\x1F7C' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH OXIA+foldMapping '\x1FFB' = CM '\x1F7D' '\0' '\0'+-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI+foldMapping '\x1FFC' = CM '\x03C9' '\x03B9' '\0'+-- OHM SIGN+foldMapping '\x2126' = CM '\x03C9' '\0' '\0'+-- KELVIN SIGN+foldMapping '\x212A' = CM '\x006B' '\0' '\0'+-- ANGSTROM SIGN+foldMapping '\x212B' = CM '\x00E5' '\0' '\0'+-- TURNED CAPITAL F+foldMapping '\x2132' = CM '\x214E' '\0' '\0'+-- ROMAN NUMERAL ONE+foldMapping '\x2160' = CM '\x2170' '\0' '\0'+-- ROMAN NUMERAL TWO+foldMapping '\x2161' = CM '\x2171' '\0' '\0'+-- ROMAN NUMERAL THREE+foldMapping '\x2162' = CM '\x2172' '\0' '\0'+-- ROMAN NUMERAL FOUR+foldMapping '\x2163' = CM '\x2173' '\0' '\0'+-- ROMAN NUMERAL FIVE+foldMapping '\x2164' = CM '\x2174' '\0' '\0'+-- ROMAN NUMERAL SIX+foldMapping '\x2165' = CM '\x2175' '\0' '\0'+-- ROMAN NUMERAL SEVEN+foldMapping '\x2166' = CM '\x2176' '\0' '\0'+-- ROMAN NUMERAL EIGHT+foldMapping '\x2167' = CM '\x2177' '\0' '\0'+-- ROMAN NUMERAL NINE+foldMapping '\x2168' = CM '\x2178' '\0' '\0'+-- ROMAN NUMERAL TEN+foldMapping '\x2169' = CM '\x2179' '\0' '\0'+-- ROMAN NUMERAL ELEVEN+foldMapping '\x216A' = CM '\x217A' '\0' '\0'+-- ROMAN NUMERAL TWELVE+foldMapping '\x216B' = CM '\x217B' '\0' '\0'+-- ROMAN NUMERAL FIFTY+foldMapping '\x216C' = CM '\x217C' '\0' '\0'+-- ROMAN NUMERAL ONE HUNDRED+foldMapping '\x216D' = CM '\x217D' '\0' '\0'+-- ROMAN NUMERAL FIVE HUNDRED+foldMapping '\x216E' = CM '\x217E' '\0' '\0'+-- ROMAN NUMERAL ONE THOUSAND+foldMapping '\x216F' = CM '\x217F' '\0' '\0'+-- ROMAN NUMERAL REVERSED ONE HUNDRED+foldMapping '\x2183' = CM '\x2184' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER A+foldMapping '\x24B6' = CM '\x24D0' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER B+foldMapping '\x24B7' = CM '\x24D1' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER C+foldMapping '\x24B8' = CM '\x24D2' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER D+foldMapping '\x24B9' = CM '\x24D3' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER E+foldMapping '\x24BA' = CM '\x24D4' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER F+foldMapping '\x24BB' = CM '\x24D5' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER G+foldMapping '\x24BC' = CM '\x24D6' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER H+foldMapping '\x24BD' = CM '\x24D7' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER I+foldMapping '\x24BE' = CM '\x24D8' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER J+foldMapping '\x24BF' = CM '\x24D9' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER K+foldMapping '\x24C0' = CM '\x24DA' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER L+foldMapping '\x24C1' = CM '\x24DB' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER M+foldMapping '\x24C2' = CM '\x24DC' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER N+foldMapping '\x24C3' = CM '\x24DD' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER O+foldMapping '\x24C4' = CM '\x24DE' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER P+foldMapping '\x24C5' = CM '\x24DF' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER Q+foldMapping '\x24C6' = CM '\x24E0' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER R+foldMapping '\x24C7' = CM '\x24E1' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER S+foldMapping '\x24C8' = CM '\x24E2' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER T+foldMapping '\x24C9' = CM '\x24E3' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER U+foldMapping '\x24CA' = CM '\x24E4' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER V+foldMapping '\x24CB' = CM '\x24E5' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER W+foldMapping '\x24CC' = CM '\x24E6' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER X+foldMapping '\x24CD' = CM '\x24E7' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER Y+foldMapping '\x24CE' = CM '\x24E8' '\0' '\0'+-- CIRCLED LATIN CAPITAL LETTER Z+foldMapping '\x24CF' = CM '\x24E9' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER AZU+foldMapping '\x2C00' = CM '\x2C30' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER BUKY+foldMapping '\x2C01' = CM '\x2C31' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER VEDE+foldMapping '\x2C02' = CM '\x2C32' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER GLAGOLI+foldMapping '\x2C03' = CM '\x2C33' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER DOBRO+foldMapping '\x2C04' = CM '\x2C34' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YESTU+foldMapping '\x2C05' = CM '\x2C35' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER ZHIVETE+foldMapping '\x2C06' = CM '\x2C36' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER DZELO+foldMapping '\x2C07' = CM '\x2C37' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER ZEMLJA+foldMapping '\x2C08' = CM '\x2C38' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER IZHE+foldMapping '\x2C09' = CM '\x2C39' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER INITIAL IZHE+foldMapping '\x2C0A' = CM '\x2C3A' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER I+foldMapping '\x2C0B' = CM '\x2C3B' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER DJERVI+foldMapping '\x2C0C' = CM '\x2C3C' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER KAKO+foldMapping '\x2C0D' = CM '\x2C3D' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER LJUDIJE+foldMapping '\x2C0E' = CM '\x2C3E' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER MYSLITE+foldMapping '\x2C0F' = CM '\x2C3F' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER NASHI+foldMapping '\x2C10' = CM '\x2C40' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER ONU+foldMapping '\x2C11' = CM '\x2C41' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER POKOJI+foldMapping '\x2C12' = CM '\x2C42' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER RITSI+foldMapping '\x2C13' = CM '\x2C43' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SLOVO+foldMapping '\x2C14' = CM '\x2C44' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER TVRIDO+foldMapping '\x2C15' = CM '\x2C45' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER UKU+foldMapping '\x2C16' = CM '\x2C46' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER FRITU+foldMapping '\x2C17' = CM '\x2C47' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER HERU+foldMapping '\x2C18' = CM '\x2C48' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER OTU+foldMapping '\x2C19' = CM '\x2C49' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER PE+foldMapping '\x2C1A' = CM '\x2C4A' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SHTA+foldMapping '\x2C1B' = CM '\x2C4B' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER TSI+foldMapping '\x2C1C' = CM '\x2C4C' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER CHRIVI+foldMapping '\x2C1D' = CM '\x2C4D' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SHA+foldMapping '\x2C1E' = CM '\x2C4E' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YERU+foldMapping '\x2C1F' = CM '\x2C4F' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YERI+foldMapping '\x2C20' = CM '\x2C50' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YATI+foldMapping '\x2C21' = CM '\x2C51' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SPIDERY HA+foldMapping '\x2C22' = CM '\x2C52' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YU+foldMapping '\x2C23' = CM '\x2C53' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SMALL YUS+foldMapping '\x2C24' = CM '\x2C54' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL+foldMapping '\x2C25' = CM '\x2C55' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER YO+foldMapping '\x2C26' = CM '\x2C56' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS+foldMapping '\x2C27' = CM '\x2C57' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER BIG YUS+foldMapping '\x2C28' = CM '\x2C58' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS+foldMapping '\x2C29' = CM '\x2C59' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER FITA+foldMapping '\x2C2A' = CM '\x2C5A' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER IZHITSA+foldMapping '\x2C2B' = CM '\x2C5B' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER SHTAPIC+foldMapping '\x2C2C' = CM '\x2C5C' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER TROKUTASTI A+foldMapping '\x2C2D' = CM '\x2C5D' '\0' '\0'+-- GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE+foldMapping '\x2C2E' = CM '\x2C5E' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH DOUBLE BAR+foldMapping '\x2C60' = CM '\x2C61' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH MIDDLE TILDE+foldMapping '\x2C62' = CM '\x026B' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH STROKE+foldMapping '\x2C63' = CM '\x1D7D' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH TAIL+foldMapping '\x2C64' = CM '\x027D' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH DESCENDER+foldMapping '\x2C67' = CM '\x2C68' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH DESCENDER+foldMapping '\x2C69' = CM '\x2C6A' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH DESCENDER+foldMapping '\x2C6B' = CM '\x2C6C' '\0' '\0'+-- LATIN CAPITAL LETTER ALPHA+foldMapping '\x2C6D' = CM '\x0251' '\0' '\0'+-- LATIN CAPITAL LETTER M WITH HOOK+foldMapping '\x2C6E' = CM '\x0271' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED A+foldMapping '\x2C6F' = CM '\x0250' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED ALPHA+foldMapping '\x2C70' = CM '\x0252' '\0' '\0'+-- LATIN CAPITAL LETTER W WITH HOOK+foldMapping '\x2C72' = CM '\x2C73' '\0' '\0'+-- LATIN CAPITAL LETTER HALF H+foldMapping '\x2C75' = CM '\x2C76' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH SWASH TAIL+foldMapping '\x2C7E' = CM '\x023F' '\0' '\0'+-- LATIN CAPITAL LETTER Z WITH SWASH TAIL+foldMapping '\x2C7F' = CM '\x0240' '\0' '\0'+-- COPTIC CAPITAL LETTER ALFA+foldMapping '\x2C80' = CM '\x2C81' '\0' '\0'+-- COPTIC CAPITAL LETTER VIDA+foldMapping '\x2C82' = CM '\x2C83' '\0' '\0'+-- COPTIC CAPITAL LETTER GAMMA+foldMapping '\x2C84' = CM '\x2C85' '\0' '\0'+-- COPTIC CAPITAL LETTER DALDA+foldMapping '\x2C86' = CM '\x2C87' '\0' '\0'+-- COPTIC CAPITAL LETTER EIE+foldMapping '\x2C88' = CM '\x2C89' '\0' '\0'+-- COPTIC CAPITAL LETTER SOU+foldMapping '\x2C8A' = CM '\x2C8B' '\0' '\0'+-- COPTIC CAPITAL LETTER ZATA+foldMapping '\x2C8C' = CM '\x2C8D' '\0' '\0'+-- COPTIC CAPITAL LETTER HATE+foldMapping '\x2C8E' = CM '\x2C8F' '\0' '\0'+-- COPTIC CAPITAL LETTER THETHE+foldMapping '\x2C90' = CM '\x2C91' '\0' '\0'+-- COPTIC CAPITAL LETTER IAUDA+foldMapping '\x2C92' = CM '\x2C93' '\0' '\0'+-- COPTIC CAPITAL LETTER KAPA+foldMapping '\x2C94' = CM '\x2C95' '\0' '\0'+-- COPTIC CAPITAL LETTER LAULA+foldMapping '\x2C96' = CM '\x2C97' '\0' '\0'+-- COPTIC CAPITAL LETTER MI+foldMapping '\x2C98' = CM '\x2C99' '\0' '\0'+-- COPTIC CAPITAL LETTER NI+foldMapping '\x2C9A' = CM '\x2C9B' '\0' '\0'+-- COPTIC CAPITAL LETTER KSI+foldMapping '\x2C9C' = CM '\x2C9D' '\0' '\0'+-- COPTIC CAPITAL LETTER O+foldMapping '\x2C9E' = CM '\x2C9F' '\0' '\0'+-- COPTIC CAPITAL LETTER PI+foldMapping '\x2CA0' = CM '\x2CA1' '\0' '\0'+-- COPTIC CAPITAL LETTER RO+foldMapping '\x2CA2' = CM '\x2CA3' '\0' '\0'+-- COPTIC CAPITAL LETTER SIMA+foldMapping '\x2CA4' = CM '\x2CA5' '\0' '\0'+-- COPTIC CAPITAL LETTER TAU+foldMapping '\x2CA6' = CM '\x2CA7' '\0' '\0'+-- COPTIC CAPITAL LETTER UA+foldMapping '\x2CA8' = CM '\x2CA9' '\0' '\0'+-- COPTIC CAPITAL LETTER FI+foldMapping '\x2CAA' = CM '\x2CAB' '\0' '\0'+-- COPTIC CAPITAL LETTER KHI+foldMapping '\x2CAC' = CM '\x2CAD' '\0' '\0'+-- COPTIC CAPITAL LETTER PSI+foldMapping '\x2CAE' = CM '\x2CAF' '\0' '\0'+-- COPTIC CAPITAL LETTER OOU+foldMapping '\x2CB0' = CM '\x2CB1' '\0' '\0'+-- COPTIC CAPITAL LETTER DIALECT-P ALEF+foldMapping '\x2CB2' = CM '\x2CB3' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC AIN+foldMapping '\x2CB4' = CM '\x2CB5' '\0' '\0'+-- COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE+foldMapping '\x2CB6' = CM '\x2CB7' '\0' '\0'+-- COPTIC CAPITAL LETTER DIALECT-P KAPA+foldMapping '\x2CB8' = CM '\x2CB9' '\0' '\0'+-- COPTIC CAPITAL LETTER DIALECT-P NI+foldMapping '\x2CBA' = CM '\x2CBB' '\0' '\0'+-- COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI+foldMapping '\x2CBC' = CM '\x2CBD' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC OOU+foldMapping '\x2CBE' = CM '\x2CBF' '\0' '\0'+-- COPTIC CAPITAL LETTER SAMPI+foldMapping '\x2CC0' = CM '\x2CC1' '\0' '\0'+-- COPTIC CAPITAL LETTER CROSSED SHEI+foldMapping '\x2CC2' = CM '\x2CC3' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC SHEI+foldMapping '\x2CC4' = CM '\x2CC5' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC ESH+foldMapping '\x2CC6' = CM '\x2CC7' '\0' '\0'+-- COPTIC CAPITAL LETTER AKHMIMIC KHEI+foldMapping '\x2CC8' = CM '\x2CC9' '\0' '\0'+-- COPTIC CAPITAL LETTER DIALECT-P HORI+foldMapping '\x2CCA' = CM '\x2CCB' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC HORI+foldMapping '\x2CCC' = CM '\x2CCD' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC HA+foldMapping '\x2CCE' = CM '\x2CCF' '\0' '\0'+-- COPTIC CAPITAL LETTER L-SHAPED HA+foldMapping '\x2CD0' = CM '\x2CD1' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC HEI+foldMapping '\x2CD2' = CM '\x2CD3' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC HAT+foldMapping '\x2CD4' = CM '\x2CD5' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC GANGIA+foldMapping '\x2CD6' = CM '\x2CD7' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC DJA+foldMapping '\x2CD8' = CM '\x2CD9' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD COPTIC SHIMA+foldMapping '\x2CDA' = CM '\x2CDB' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD NUBIAN SHIMA+foldMapping '\x2CDC' = CM '\x2CDD' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD NUBIAN NGI+foldMapping '\x2CDE' = CM '\x2CDF' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD NUBIAN NYI+foldMapping '\x2CE0' = CM '\x2CE1' '\0' '\0'+-- COPTIC CAPITAL LETTER OLD NUBIAN WAU+foldMapping '\x2CE2' = CM '\x2CE3' '\0' '\0'+-- COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI+foldMapping '\x2CEB' = CM '\x2CEC' '\0' '\0'+-- COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA+foldMapping '\x2CED' = CM '\x2CEE' '\0' '\0'+-- COPTIC CAPITAL LETTER BOHAIRIC KHEI+foldMapping '\x2CF2' = CM '\x2CF3' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZEMLYA+foldMapping '\xA640' = CM '\xA641' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZELO+foldMapping '\xA642' = CM '\xA643' '\0' '\0'+-- CYRILLIC CAPITAL LETTER REVERSED DZE+foldMapping '\xA644' = CM '\xA645' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTA+foldMapping '\xA646' = CM '\xA647' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DJERV+foldMapping '\xA648' = CM '\xA649' '\0' '\0'+-- CYRILLIC CAPITAL LETTER MONOGRAPH UK+foldMapping '\xA64A' = CM '\xA64B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BROAD OMEGA+foldMapping '\xA64C' = CM '\xA64D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER NEUTRAL YER+foldMapping '\xA64E' = CM '\xA64F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YERU WITH BACK YER+foldMapping '\xA650' = CM '\xA651' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED YAT+foldMapping '\xA652' = CM '\xA653' '\0' '\0'+-- CYRILLIC CAPITAL LETTER REVERSED YU+foldMapping '\xA654' = CM '\xA655' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED A+foldMapping '\xA656' = CM '\xA657' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS+foldMapping '\xA658' = CM '\xA659' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BLENDED YUS+foldMapping '\xA65A' = CM '\xA65B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS+foldMapping '\xA65C' = CM '\xA65D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER YN+foldMapping '\xA65E' = CM '\xA65F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER REVERSED TSE+foldMapping '\xA660' = CM '\xA661' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SOFT DE+foldMapping '\xA662' = CM '\xA663' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SOFT EL+foldMapping '\xA664' = CM '\xA665' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SOFT EM+foldMapping '\xA666' = CM '\xA667' '\0' '\0'+-- CYRILLIC CAPITAL LETTER MONOCULAR O+foldMapping '\xA668' = CM '\xA669' '\0' '\0'+-- CYRILLIC CAPITAL LETTER BINOCULAR O+foldMapping '\xA66A' = CM '\xA66B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O+foldMapping '\xA66C' = CM '\xA66D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DWE+foldMapping '\xA680' = CM '\xA681' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZWE+foldMapping '\xA682' = CM '\xA683' '\0' '\0'+-- CYRILLIC CAPITAL LETTER ZHWE+foldMapping '\xA684' = CM '\xA685' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CCHE+foldMapping '\xA686' = CM '\xA687' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DZZE+foldMapping '\xA688' = CM '\xA689' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK+foldMapping '\xA68A' = CM '\xA68B' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TWE+foldMapping '\xA68C' = CM '\xA68D' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TSWE+foldMapping '\xA68E' = CM '\xA68F' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TSSE+foldMapping '\xA690' = CM '\xA691' '\0' '\0'+-- CYRILLIC CAPITAL LETTER TCHE+foldMapping '\xA692' = CM '\xA693' '\0' '\0'+-- CYRILLIC CAPITAL LETTER HWE+foldMapping '\xA694' = CM '\xA695' '\0' '\0'+-- CYRILLIC CAPITAL LETTER SHWE+foldMapping '\xA696' = CM '\xA697' '\0' '\0'+-- CYRILLIC CAPITAL LETTER DOUBLE O+foldMapping '\xA698' = CM '\xA699' '\0' '\0'+-- CYRILLIC CAPITAL LETTER CROSSED O+foldMapping '\xA69A' = CM '\xA69B' '\0' '\0'+-- LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF+foldMapping '\xA722' = CM '\xA723' '\0' '\0'+-- LATIN CAPITAL LETTER EGYPTOLOGICAL AIN+foldMapping '\xA724' = CM '\xA725' '\0' '\0'+-- LATIN CAPITAL LETTER HENG+foldMapping '\xA726' = CM '\xA727' '\0' '\0'+-- LATIN CAPITAL LETTER TZ+foldMapping '\xA728' = CM '\xA729' '\0' '\0'+-- LATIN CAPITAL LETTER TRESILLO+foldMapping '\xA72A' = CM '\xA72B' '\0' '\0'+-- LATIN CAPITAL LETTER CUATRILLO+foldMapping '\xA72C' = CM '\xA72D' '\0' '\0'+-- LATIN CAPITAL LETTER CUATRILLO WITH COMMA+foldMapping '\xA72E' = CM '\xA72F' '\0' '\0'+-- LATIN CAPITAL LETTER AA+foldMapping '\xA732' = CM '\xA733' '\0' '\0'+-- LATIN CAPITAL LETTER AO+foldMapping '\xA734' = CM '\xA735' '\0' '\0'+-- LATIN CAPITAL LETTER AU+foldMapping '\xA736' = CM '\xA737' '\0' '\0'+-- LATIN CAPITAL LETTER AV+foldMapping '\xA738' = CM '\xA739' '\0' '\0'+-- LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR+foldMapping '\xA73A' = CM '\xA73B' '\0' '\0'+-- LATIN CAPITAL LETTER AY+foldMapping '\xA73C' = CM '\xA73D' '\0' '\0'+-- LATIN CAPITAL LETTER REVERSED C WITH DOT+foldMapping '\xA73E' = CM '\xA73F' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH STROKE+foldMapping '\xA740' = CM '\xA741' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH DIAGONAL STROKE+foldMapping '\xA742' = CM '\xA743' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE+foldMapping '\xA744' = CM '\xA745' '\0' '\0'+-- LATIN CAPITAL LETTER BROKEN L+foldMapping '\xA746' = CM '\xA747' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH HIGH STROKE+foldMapping '\xA748' = CM '\xA749' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY+foldMapping '\xA74A' = CM '\xA74B' '\0' '\0'+-- LATIN CAPITAL LETTER O WITH LOOP+foldMapping '\xA74C' = CM '\xA74D' '\0' '\0'+-- LATIN CAPITAL LETTER OO+foldMapping '\xA74E' = CM '\xA74F' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER+foldMapping '\xA750' = CM '\xA751' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH FLOURISH+foldMapping '\xA752' = CM '\xA753' '\0' '\0'+-- LATIN CAPITAL LETTER P WITH SQUIRREL TAIL+foldMapping '\xA754' = CM '\xA755' '\0' '\0'+-- LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER+foldMapping '\xA756' = CM '\xA757' '\0' '\0'+-- LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE+foldMapping '\xA758' = CM '\xA759' '\0' '\0'+-- LATIN CAPITAL LETTER R ROTUNDA+foldMapping '\xA75A' = CM '\xA75B' '\0' '\0'+-- LATIN CAPITAL LETTER RUM ROTUNDA+foldMapping '\xA75C' = CM '\xA75D' '\0' '\0'+-- LATIN CAPITAL LETTER V WITH DIAGONAL STROKE+foldMapping '\xA75E' = CM '\xA75F' '\0' '\0'+-- LATIN CAPITAL LETTER VY+foldMapping '\xA760' = CM '\xA761' '\0' '\0'+-- LATIN CAPITAL LETTER VISIGOTHIC Z+foldMapping '\xA762' = CM '\xA763' '\0' '\0'+-- LATIN CAPITAL LETTER THORN WITH STROKE+foldMapping '\xA764' = CM '\xA765' '\0' '\0'+-- LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER+foldMapping '\xA766' = CM '\xA767' '\0' '\0'+-- LATIN CAPITAL LETTER VEND+foldMapping '\xA768' = CM '\xA769' '\0' '\0'+-- LATIN CAPITAL LETTER ET+foldMapping '\xA76A' = CM '\xA76B' '\0' '\0'+-- LATIN CAPITAL LETTER IS+foldMapping '\xA76C' = CM '\xA76D' '\0' '\0'+-- LATIN CAPITAL LETTER CON+foldMapping '\xA76E' = CM '\xA76F' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR D+foldMapping '\xA779' = CM '\xA77A' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR F+foldMapping '\xA77B' = CM '\xA77C' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR G+foldMapping '\xA77D' = CM '\x1D79' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED INSULAR G+foldMapping '\xA77E' = CM '\xA77F' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED L+foldMapping '\xA780' = CM '\xA781' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR R+foldMapping '\xA782' = CM '\xA783' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR S+foldMapping '\xA784' = CM '\xA785' '\0' '\0'+-- LATIN CAPITAL LETTER INSULAR T+foldMapping '\xA786' = CM '\xA787' '\0' '\0'+-- LATIN CAPITAL LETTER SALTILLO+foldMapping '\xA78B' = CM '\xA78C' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED H+foldMapping '\xA78D' = CM '\x0265' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH DESCENDER+foldMapping '\xA790' = CM '\xA791' '\0' '\0'+-- LATIN CAPITAL LETTER C WITH BAR+foldMapping '\xA792' = CM '\xA793' '\0' '\0'+-- LATIN CAPITAL LETTER B WITH FLOURISH+foldMapping '\xA796' = CM '\xA797' '\0' '\0'+-- LATIN CAPITAL LETTER F WITH STROKE+foldMapping '\xA798' = CM '\xA799' '\0' '\0'+-- LATIN CAPITAL LETTER VOLAPUK AE+foldMapping '\xA79A' = CM '\xA79B' '\0' '\0'+-- LATIN CAPITAL LETTER VOLAPUK OE+foldMapping '\xA79C' = CM '\xA79D' '\0' '\0'+-- LATIN CAPITAL LETTER VOLAPUK UE+foldMapping '\xA79E' = CM '\xA79F' '\0' '\0'+-- LATIN CAPITAL LETTER G WITH OBLIQUE STROKE+foldMapping '\xA7A0' = CM '\xA7A1' '\0' '\0'+-- LATIN CAPITAL LETTER K WITH OBLIQUE STROKE+foldMapping '\xA7A2' = CM '\xA7A3' '\0' '\0'+-- LATIN CAPITAL LETTER N WITH OBLIQUE STROKE+foldMapping '\xA7A4' = CM '\xA7A5' '\0' '\0'+-- LATIN CAPITAL LETTER R WITH OBLIQUE STROKE+foldMapping '\xA7A6' = CM '\xA7A7' '\0' '\0'+-- LATIN CAPITAL LETTER S WITH OBLIQUE STROKE+foldMapping '\xA7A8' = CM '\xA7A9' '\0' '\0'+-- LATIN CAPITAL LETTER H WITH HOOK+foldMapping '\xA7AA' = CM '\x0266' '\0' '\0'+-- LATIN CAPITAL LETTER REVERSED OPEN E+foldMapping '\xA7AB' = CM '\x025C' '\0' '\0'+-- LATIN CAPITAL LETTER SCRIPT G+foldMapping '\xA7AC' = CM '\x0261' '\0' '\0'+-- LATIN CAPITAL LETTER L WITH BELT+foldMapping '\xA7AD' = CM '\x026C' '\0' '\0'+-- LATIN CAPITAL LETTER SMALL CAPITAL I+foldMapping '\xA7AE' = CM '\x026A' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED K+foldMapping '\xA7B0' = CM '\x029E' '\0' '\0'+-- LATIN CAPITAL LETTER TURNED T+foldMapping '\xA7B1' = CM '\x0287' '\0' '\0'+-- LATIN CAPITAL LETTER J WITH CROSSED-TAIL+foldMapping '\xA7B2' = CM '\x029D' '\0' '\0'+-- LATIN CAPITAL LETTER CHI+foldMapping '\xA7B3' = CM '\xAB53' '\0' '\0'+-- LATIN CAPITAL LETTER BETA+foldMapping '\xA7B4' = CM '\xA7B5' '\0' '\0'+-- LATIN CAPITAL LETTER OMEGA+foldMapping '\xA7B6' = CM '\xA7B7' '\0' '\0'+-- CHEROKEE SMALL LETTER A+foldMapping '\xAB70' = CM '\x13A0' '\0' '\0'+-- CHEROKEE SMALL LETTER E+foldMapping '\xAB71' = CM '\x13A1' '\0' '\0'+-- CHEROKEE SMALL LETTER I+foldMapping '\xAB72' = CM '\x13A2' '\0' '\0'+-- CHEROKEE SMALL LETTER O+foldMapping '\xAB73' = CM '\x13A3' '\0' '\0'+-- CHEROKEE SMALL LETTER U+foldMapping '\xAB74' = CM '\x13A4' '\0' '\0'+-- CHEROKEE SMALL LETTER V+foldMapping '\xAB75' = CM '\x13A5' '\0' '\0'+-- CHEROKEE SMALL LETTER GA+foldMapping '\xAB76' = CM '\x13A6' '\0' '\0'+-- CHEROKEE SMALL LETTER KA+foldMapping '\xAB77' = CM '\x13A7' '\0' '\0'+-- CHEROKEE SMALL LETTER GE+foldMapping '\xAB78' = CM '\x13A8' '\0' '\0'+-- CHEROKEE SMALL LETTER GI+foldMapping '\xAB79' = CM '\x13A9' '\0' '\0'+-- CHEROKEE SMALL LETTER GO+foldMapping '\xAB7A' = CM '\x13AA' '\0' '\0'+-- CHEROKEE SMALL LETTER GU+foldMapping '\xAB7B' = CM '\x13AB' '\0' '\0'+-- CHEROKEE SMALL LETTER GV+foldMapping '\xAB7C' = CM '\x13AC' '\0' '\0'+-- CHEROKEE SMALL LETTER HA+foldMapping '\xAB7D' = CM '\x13AD' '\0' '\0'+-- CHEROKEE SMALL LETTER HE+foldMapping '\xAB7E' = CM '\x13AE' '\0' '\0'+-- CHEROKEE SMALL LETTER HI+foldMapping '\xAB7F' = CM '\x13AF' '\0' '\0'+-- CHEROKEE SMALL LETTER HO+foldMapping '\xAB80' = CM '\x13B0' '\0' '\0'+-- CHEROKEE SMALL LETTER HU+foldMapping '\xAB81' = CM '\x13B1' '\0' '\0'+-- CHEROKEE SMALL LETTER HV+foldMapping '\xAB82' = CM '\x13B2' '\0' '\0'+-- CHEROKEE SMALL LETTER LA+foldMapping '\xAB83' = CM '\x13B3' '\0' '\0'+-- CHEROKEE SMALL LETTER LE+foldMapping '\xAB84' = CM '\x13B4' '\0' '\0'+-- CHEROKEE SMALL LETTER LI+foldMapping '\xAB85' = CM '\x13B5' '\0' '\0'+-- CHEROKEE SMALL LETTER LO+foldMapping '\xAB86' = CM '\x13B6' '\0' '\0'+-- CHEROKEE SMALL LETTER LU+foldMapping '\xAB87' = CM '\x13B7' '\0' '\0'+-- CHEROKEE SMALL LETTER LV+foldMapping '\xAB88' = CM '\x13B8' '\0' '\0'+-- CHEROKEE SMALL LETTER MA+foldMapping '\xAB89' = CM '\x13B9' '\0' '\0'+-- CHEROKEE SMALL LETTER ME+foldMapping '\xAB8A' = CM '\x13BA' '\0' '\0'+-- CHEROKEE SMALL LETTER MI+foldMapping '\xAB8B' = CM '\x13BB' '\0' '\0'+-- CHEROKEE SMALL LETTER MO+foldMapping '\xAB8C' = CM '\x13BC' '\0' '\0'+-- CHEROKEE SMALL LETTER MU+foldMapping '\xAB8D' = CM '\x13BD' '\0' '\0'+-- CHEROKEE SMALL LETTER NA+foldMapping '\xAB8E' = CM '\x13BE' '\0' '\0'+-- CHEROKEE SMALL LETTER HNA+foldMapping '\xAB8F' = CM '\x13BF' '\0' '\0'+-- CHEROKEE SMALL LETTER NAH+foldMapping '\xAB90' = CM '\x13C0' '\0' '\0'+-- CHEROKEE SMALL LETTER NE+foldMapping '\xAB91' = CM '\x13C1' '\0' '\0'+-- CHEROKEE SMALL LETTER NI+foldMapping '\xAB92' = CM '\x13C2' '\0' '\0'+-- CHEROKEE SMALL LETTER NO+foldMapping '\xAB93' = CM '\x13C3' '\0' '\0'+-- CHEROKEE SMALL LETTER NU+foldMapping '\xAB94' = CM '\x13C4' '\0' '\0'+-- CHEROKEE SMALL LETTER NV+foldMapping '\xAB95' = CM '\x13C5' '\0' '\0'+-- CHEROKEE SMALL LETTER QUA+foldMapping '\xAB96' = CM '\x13C6' '\0' '\0'+-- CHEROKEE SMALL LETTER QUE+foldMapping '\xAB97' = CM '\x13C7' '\0' '\0'+-- CHEROKEE SMALL LETTER QUI+foldMapping '\xAB98' = CM '\x13C8' '\0' '\0'+-- CHEROKEE SMALL LETTER QUO+foldMapping '\xAB99' = CM '\x13C9' '\0' '\0'+-- CHEROKEE SMALL LETTER QUU+foldMapping '\xAB9A' = CM '\x13CA' '\0' '\0'+-- CHEROKEE SMALL LETTER QUV+foldMapping '\xAB9B' = CM '\x13CB' '\0' '\0'+-- CHEROKEE SMALL LETTER SA+foldMapping '\xAB9C' = CM '\x13CC' '\0' '\0'+-- CHEROKEE SMALL LETTER S+foldMapping '\xAB9D' = CM '\x13CD' '\0' '\0'+-- CHEROKEE SMALL LETTER SE+foldMapping '\xAB9E' = CM '\x13CE' '\0' '\0'+-- CHEROKEE SMALL LETTER SI+foldMapping '\xAB9F' = CM '\x13CF' '\0' '\0'+-- CHEROKEE SMALL LETTER SO+foldMapping '\xABA0' = CM '\x13D0' '\0' '\0'+-- CHEROKEE SMALL LETTER SU+foldMapping '\xABA1' = CM '\x13D1' '\0' '\0'+-- CHEROKEE SMALL LETTER SV+foldMapping '\xABA2' = CM '\x13D2' '\0' '\0'+-- CHEROKEE SMALL LETTER DA+foldMapping '\xABA3' = CM '\x13D3' '\0' '\0'+-- CHEROKEE SMALL LETTER TA+foldMapping '\xABA4' = CM '\x13D4' '\0' '\0'+-- CHEROKEE SMALL LETTER DE+foldMapping '\xABA5' = CM '\x13D5' '\0' '\0'+-- CHEROKEE SMALL LETTER TE+foldMapping '\xABA6' = CM '\x13D6' '\0' '\0'+-- CHEROKEE SMALL LETTER DI+foldMapping '\xABA7' = CM '\x13D7' '\0' '\0'+-- CHEROKEE SMALL LETTER TI+foldMapping '\xABA8' = CM '\x13D8' '\0' '\0'+-- CHEROKEE SMALL LETTER DO+foldMapping '\xABA9' = CM '\x13D9' '\0' '\0'+-- CHEROKEE SMALL LETTER DU+foldMapping '\xABAA' = CM '\x13DA' '\0' '\0'+-- CHEROKEE SMALL LETTER DV+foldMapping '\xABAB' = CM '\x13DB' '\0' '\0'+-- CHEROKEE SMALL LETTER DLA+foldMapping '\xABAC' = CM '\x13DC' '\0' '\0'+-- CHEROKEE SMALL LETTER TLA+foldMapping '\xABAD' = CM '\x13DD' '\0' '\0'+-- CHEROKEE SMALL LETTER TLE+foldMapping '\xABAE' = CM '\x13DE' '\0' '\0'+-- CHEROKEE SMALL LETTER TLI+foldMapping '\xABAF' = CM '\x13DF' '\0' '\0'+-- CHEROKEE SMALL LETTER TLO+foldMapping '\xABB0' = CM '\x13E0' '\0' '\0'+-- CHEROKEE SMALL LETTER TLU+foldMapping '\xABB1' = CM '\x13E1' '\0' '\0'+-- CHEROKEE SMALL LETTER TLV+foldMapping '\xABB2' = CM '\x13E2' '\0' '\0'+-- CHEROKEE SMALL LETTER TSA+foldMapping '\xABB3' = CM '\x13E3' '\0' '\0'+-- CHEROKEE SMALL LETTER TSE+foldMapping '\xABB4' = CM '\x13E4' '\0' '\0'+-- CHEROKEE SMALL LETTER TSI+foldMapping '\xABB5' = CM '\x13E5' '\0' '\0'+-- CHEROKEE SMALL LETTER TSO+foldMapping '\xABB6' = CM '\x13E6' '\0' '\0'+-- CHEROKEE SMALL LETTER TSU+foldMapping '\xABB7' = CM '\x13E7' '\0' '\0'+-- CHEROKEE SMALL LETTER TSV+foldMapping '\xABB8' = CM '\x13E8' '\0' '\0'+-- CHEROKEE SMALL LETTER WA+foldMapping '\xABB9' = CM '\x13E9' '\0' '\0'+-- CHEROKEE SMALL LETTER WE+foldMapping '\xABBA' = CM '\x13EA' '\0' '\0'+-- CHEROKEE SMALL LETTER WI+foldMapping '\xABBB' = CM '\x13EB' '\0' '\0'+-- CHEROKEE SMALL LETTER WO+foldMapping '\xABBC' = CM '\x13EC' '\0' '\0'+-- CHEROKEE SMALL LETTER WU+foldMapping '\xABBD' = CM '\x13ED' '\0' '\0'+-- CHEROKEE SMALL LETTER WV+foldMapping '\xABBE' = CM '\x13EE' '\0' '\0'+-- CHEROKEE SMALL LETTER YA+foldMapping '\xABBF' = CM '\x13EF' '\0' '\0'+-- LATIN SMALL LIGATURE FF+foldMapping '\xFB00' = CM '\x0066' '\x0066' '\0'+-- LATIN SMALL LIGATURE FI+foldMapping '\xFB01' = CM '\x0066' '\x0069' '\0'+-- LATIN SMALL LIGATURE FL+foldMapping '\xFB02' = CM '\x0066' '\x006C' '\0'+-- LATIN SMALL LIGATURE FFI+foldMapping '\xFB03' = CM '\x0066' '\x0066' '\x0069'+-- LATIN SMALL LIGATURE FFL+foldMapping '\xFB04' = CM '\x0066' '\x0066' '\x006C'+-- LATIN SMALL LIGATURE LONG S T+foldMapping '\xFB05' = CM '\x0073' '\x0074' '\0'+-- LATIN SMALL LIGATURE ST+foldMapping '\xFB06' = CM '\x0073' '\x0074' '\0'+-- ARMENIAN SMALL LIGATURE MEN NOW+foldMapping '\xFB13' = CM '\x0574' '\x0576' '\0'+-- ARMENIAN SMALL LIGATURE MEN ECH+foldMapping '\xFB14' = CM '\x0574' '\x0565' '\0'+-- ARMENIAN SMALL LIGATURE MEN INI+foldMapping '\xFB15' = CM '\x0574' '\x056B' '\0'+-- ARMENIAN SMALL LIGATURE VEW NOW+foldMapping '\xFB16' = CM '\x057E' '\x0576' '\0'+-- ARMENIAN SMALL LIGATURE MEN XEH+foldMapping '\xFB17' = CM '\x0574' '\x056D' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER A+foldMapping '\xFF21' = CM '\xFF41' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER B+foldMapping '\xFF22' = CM '\xFF42' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER C+foldMapping '\xFF23' = CM '\xFF43' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER D+foldMapping '\xFF24' = CM '\xFF44' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER E+foldMapping '\xFF25' = CM '\xFF45' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER F+foldMapping '\xFF26' = CM '\xFF46' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER G+foldMapping '\xFF27' = CM '\xFF47' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER H+foldMapping '\xFF28' = CM '\xFF48' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER I+foldMapping '\xFF29' = CM '\xFF49' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER J+foldMapping '\xFF2A' = CM '\xFF4A' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER K+foldMapping '\xFF2B' = CM '\xFF4B' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER L+foldMapping '\xFF2C' = CM '\xFF4C' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER M+foldMapping '\xFF2D' = CM '\xFF4D' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER N+foldMapping '\xFF2E' = CM '\xFF4E' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER O+foldMapping '\xFF2F' = CM '\xFF4F' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER P+foldMapping '\xFF30' = CM '\xFF50' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER Q+foldMapping '\xFF31' = CM '\xFF51' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER R+foldMapping '\xFF32' = CM '\xFF52' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER S+foldMapping '\xFF33' = CM '\xFF53' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER T+foldMapping '\xFF34' = CM '\xFF54' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER U+foldMapping '\xFF35' = CM '\xFF55' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER V+foldMapping '\xFF36' = CM '\xFF56' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER W+foldMapping '\xFF37' = CM '\xFF57' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER X+foldMapping '\xFF38' = CM '\xFF58' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER Y+foldMapping '\xFF39' = CM '\xFF59' '\0' '\0'+-- FULLWIDTH LATIN CAPITAL LETTER Z+foldMapping '\xFF3A' = CM '\xFF5A' '\0' '\0'+-- DESERET CAPITAL LETTER LONG I+foldMapping '\x10400' = CM '\x10428' '\0' '\0'+-- DESERET CAPITAL LETTER LONG E+foldMapping '\x10401' = CM '\x10429' '\0' '\0'+-- DESERET CAPITAL LETTER LONG A+foldMapping '\x10402' = CM '\x1042A' '\0' '\0'+-- DESERET CAPITAL LETTER LONG AH+foldMapping '\x10403' = CM '\x1042B' '\0' '\0'+-- DESERET CAPITAL LETTER LONG O+foldMapping '\x10404' = CM '\x1042C' '\0' '\0'+-- DESERET CAPITAL LETTER LONG OO+foldMapping '\x10405' = CM '\x1042D' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT I+foldMapping '\x10406' = CM '\x1042E' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT E+foldMapping '\x10407' = CM '\x1042F' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT A+foldMapping '\x10408' = CM '\x10430' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT AH+foldMapping '\x10409' = CM '\x10431' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT O+foldMapping '\x1040A' = CM '\x10432' '\0' '\0'+-- DESERET CAPITAL LETTER SHORT OO+foldMapping '\x1040B' = CM '\x10433' '\0' '\0'+-- DESERET CAPITAL LETTER AY+foldMapping '\x1040C' = CM '\x10434' '\0' '\0'+-- DESERET CAPITAL LETTER OW+foldMapping '\x1040D' = CM '\x10435' '\0' '\0'+-- DESERET CAPITAL LETTER WU+foldMapping '\x1040E' = CM '\x10436' '\0' '\0'+-- DESERET CAPITAL LETTER YEE+foldMapping '\x1040F' = CM '\x10437' '\0' '\0'+-- DESERET CAPITAL LETTER H+foldMapping '\x10410' = CM '\x10438' '\0' '\0'+-- DESERET CAPITAL LETTER PEE+foldMapping '\x10411' = CM '\x10439' '\0' '\0'+-- DESERET CAPITAL LETTER BEE+foldMapping '\x10412' = CM '\x1043A' '\0' '\0'+-- DESERET CAPITAL LETTER TEE+foldMapping '\x10413' = CM '\x1043B' '\0' '\0'+-- DESERET CAPITAL LETTER DEE+foldMapping '\x10414' = CM '\x1043C' '\0' '\0'+-- DESERET CAPITAL LETTER CHEE+foldMapping '\x10415' = CM '\x1043D' '\0' '\0'+-- DESERET CAPITAL LETTER JEE+foldMapping '\x10416' = CM '\x1043E' '\0' '\0'+-- DESERET CAPITAL LETTER KAY+foldMapping '\x10417' = CM '\x1043F' '\0' '\0'+-- DESERET CAPITAL LETTER GAY+foldMapping '\x10418' = CM '\x10440' '\0' '\0'+-- DESERET CAPITAL LETTER EF+foldMapping '\x10419' = CM '\x10441' '\0' '\0'+-- DESERET CAPITAL LETTER VEE+foldMapping '\x1041A' = CM '\x10442' '\0' '\0'+-- DESERET CAPITAL LETTER ETH+foldMapping '\x1041B' = CM '\x10443' '\0' '\0'+-- DESERET CAPITAL LETTER THEE+foldMapping '\x1041C' = CM '\x10444' '\0' '\0'+-- DESERET CAPITAL LETTER ES+foldMapping '\x1041D' = CM '\x10445' '\0' '\0'+-- DESERET CAPITAL LETTER ZEE+foldMapping '\x1041E' = CM '\x10446' '\0' '\0'+-- DESERET CAPITAL LETTER ESH+foldMapping '\x1041F' = CM '\x10447' '\0' '\0'+-- DESERET CAPITAL LETTER ZHEE+foldMapping '\x10420' = CM '\x10448' '\0' '\0'+-- DESERET CAPITAL LETTER ER+foldMapping '\x10421' = CM '\x10449' '\0' '\0'+-- DESERET CAPITAL LETTER EL+foldMapping '\x10422' = CM '\x1044A' '\0' '\0'+-- DESERET CAPITAL LETTER EM+foldMapping '\x10423' = CM '\x1044B' '\0' '\0'+-- DESERET CAPITAL LETTER EN+foldMapping '\x10424' = CM '\x1044C' '\0' '\0'+-- DESERET CAPITAL LETTER ENG+foldMapping '\x10425' = CM '\x1044D' '\0' '\0'+-- DESERET CAPITAL LETTER OI+foldMapping '\x10426' = CM '\x1044E' '\0' '\0'+-- DESERET CAPITAL LETTER EW+foldMapping '\x10427' = CM '\x1044F' '\0' '\0'+-- OSAGE CAPITAL LETTER A+foldMapping '\x104B0' = CM '\x104D8' '\0' '\0'+-- OSAGE CAPITAL LETTER AI+foldMapping '\x104B1' = CM '\x104D9' '\0' '\0'+-- OSAGE CAPITAL LETTER AIN+foldMapping '\x104B2' = CM '\x104DA' '\0' '\0'+-- OSAGE CAPITAL LETTER AH+foldMapping '\x104B3' = CM '\x104DB' '\0' '\0'+-- OSAGE CAPITAL LETTER BRA+foldMapping '\x104B4' = CM '\x104DC' '\0' '\0'+-- OSAGE CAPITAL LETTER CHA+foldMapping '\x104B5' = CM '\x104DD' '\0' '\0'+-- OSAGE CAPITAL LETTER EHCHA+foldMapping '\x104B6' = CM '\x104DE' '\0' '\0'+-- OSAGE CAPITAL LETTER E+foldMapping '\x104B7' = CM '\x104DF' '\0' '\0'+-- OSAGE CAPITAL LETTER EIN+foldMapping '\x104B8' = CM '\x104E0' '\0' '\0'+-- OSAGE CAPITAL LETTER HA+foldMapping '\x104B9' = CM '\x104E1' '\0' '\0'+-- OSAGE CAPITAL LETTER HYA+foldMapping '\x104BA' = CM '\x104E2' '\0' '\0'+-- OSAGE CAPITAL LETTER I+foldMapping '\x104BB' = CM '\x104E3' '\0' '\0'+-- OSAGE CAPITAL LETTER KA+foldMapping '\x104BC' = CM '\x104E4' '\0' '\0'+-- OSAGE CAPITAL LETTER EHKA+foldMapping '\x104BD' = CM '\x104E5' '\0' '\0'+-- OSAGE CAPITAL LETTER KYA+foldMapping '\x104BE' = CM '\x104E6' '\0' '\0'+-- OSAGE CAPITAL LETTER LA+foldMapping '\x104BF' = CM '\x104E7' '\0' '\0'+-- OSAGE CAPITAL LETTER MA+foldMapping '\x104C0' = CM '\x104E8' '\0' '\0'+-- OSAGE CAPITAL LETTER NA+foldMapping '\x104C1' = CM '\x104E9' '\0' '\0'+-- OSAGE CAPITAL LETTER O+foldMapping '\x104C2' = CM '\x104EA' '\0' '\0'+-- OSAGE CAPITAL LETTER OIN+foldMapping '\x104C3' = CM '\x104EB' '\0' '\0'+-- OSAGE CAPITAL LETTER PA+foldMapping '\x104C4' = CM '\x104EC' '\0' '\0'+-- OSAGE CAPITAL LETTER EHPA+foldMapping '\x104C5' = CM '\x104ED' '\0' '\0'+-- OSAGE CAPITAL LETTER SA+foldMapping '\x104C6' = CM '\x104EE' '\0' '\0'+-- OSAGE CAPITAL LETTER SHA+foldMapping '\x104C7' = CM '\x104EF' '\0' '\0'+-- OSAGE CAPITAL LETTER TA+foldMapping '\x104C8' = CM '\x104F0' '\0' '\0'+-- OSAGE CAPITAL LETTER EHTA+foldMapping '\x104C9' = CM '\x104F1' '\0' '\0'+-- OSAGE CAPITAL LETTER TSA+foldMapping '\x104CA' = CM '\x104F2' '\0' '\0'+-- OSAGE CAPITAL LETTER EHTSA+foldMapping '\x104CB' = CM '\x104F3' '\0' '\0'+-- OSAGE CAPITAL LETTER TSHA+foldMapping '\x104CC' = CM '\x104F4' '\0' '\0'+-- OSAGE CAPITAL LETTER DHA+foldMapping '\x104CD' = CM '\x104F5' '\0' '\0'+-- OSAGE CAPITAL LETTER U+foldMapping '\x104CE' = CM '\x104F6' '\0' '\0'+-- OSAGE CAPITAL LETTER WA+foldMapping '\x104CF' = CM '\x104F7' '\0' '\0'+-- OSAGE CAPITAL LETTER KHA+foldMapping '\x104D0' = CM '\x104F8' '\0' '\0'+-- OSAGE CAPITAL LETTER GHA+foldMapping '\x104D1' = CM '\x104F9' '\0' '\0'+-- OSAGE CAPITAL LETTER ZA+foldMapping '\x104D2' = CM '\x104FA' '\0' '\0'+-- OSAGE CAPITAL LETTER ZHA+foldMapping '\x104D3' = CM '\x104FB' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER A+foldMapping '\x10C80' = CM '\x10CC0' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER AA+foldMapping '\x10C81' = CM '\x10CC1' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EB+foldMapping '\x10C82' = CM '\x10CC2' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER AMB+foldMapping '\x10C83' = CM '\x10CC3' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EC+foldMapping '\x10C84' = CM '\x10CC4' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ENC+foldMapping '\x10C85' = CM '\x10CC5' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ECS+foldMapping '\x10C86' = CM '\x10CC6' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ED+foldMapping '\x10C87' = CM '\x10CC7' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER AND+foldMapping '\x10C88' = CM '\x10CC8' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER E+foldMapping '\x10C89' = CM '\x10CC9' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER CLOSE E+foldMapping '\x10C8A' = CM '\x10CCA' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EE+foldMapping '\x10C8B' = CM '\x10CCB' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EF+foldMapping '\x10C8C' = CM '\x10CCC' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EG+foldMapping '\x10C8D' = CM '\x10CCD' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EGY+foldMapping '\x10C8E' = CM '\x10CCE' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EH+foldMapping '\x10C8F' = CM '\x10CCF' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER I+foldMapping '\x10C90' = CM '\x10CD0' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER II+foldMapping '\x10C91' = CM '\x10CD1' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EJ+foldMapping '\x10C92' = CM '\x10CD2' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EK+foldMapping '\x10C93' = CM '\x10CD3' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER AK+foldMapping '\x10C94' = CM '\x10CD4' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER UNK+foldMapping '\x10C95' = CM '\x10CD5' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EL+foldMapping '\x10C96' = CM '\x10CD6' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ELY+foldMapping '\x10C97' = CM '\x10CD7' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EM+foldMapping '\x10C98' = CM '\x10CD8' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EN+foldMapping '\x10C99' = CM '\x10CD9' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ENY+foldMapping '\x10C9A' = CM '\x10CDA' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER O+foldMapping '\x10C9B' = CM '\x10CDB' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER OO+foldMapping '\x10C9C' = CM '\x10CDC' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE+foldMapping '\x10C9D' = CM '\x10CDD' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE+foldMapping '\x10C9E' = CM '\x10CDE' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER OEE+foldMapping '\x10C9F' = CM '\x10CDF' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EP+foldMapping '\x10CA0' = CM '\x10CE0' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EMP+foldMapping '\x10CA1' = CM '\x10CE1' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ER+foldMapping '\x10CA2' = CM '\x10CE2' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER SHORT ER+foldMapping '\x10CA3' = CM '\x10CE3' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ES+foldMapping '\x10CA4' = CM '\x10CE4' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ESZ+foldMapping '\x10CA5' = CM '\x10CE5' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ET+foldMapping '\x10CA6' = CM '\x10CE6' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ENT+foldMapping '\x10CA7' = CM '\x10CE7' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ETY+foldMapping '\x10CA8' = CM '\x10CE8' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ECH+foldMapping '\x10CA9' = CM '\x10CE9' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER U+foldMapping '\x10CAA' = CM '\x10CEA' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER UU+foldMapping '\x10CAB' = CM '\x10CEB' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE+foldMapping '\x10CAC' = CM '\x10CEC' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE+foldMapping '\x10CAD' = CM '\x10CED' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EV+foldMapping '\x10CAE' = CM '\x10CEE' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EZ+foldMapping '\x10CAF' = CM '\x10CEF' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER EZS+foldMapping '\x10CB0' = CM '\x10CF0' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN+foldMapping '\x10CB1' = CM '\x10CF1' '\0' '\0'+-- OLD HUNGARIAN CAPITAL LETTER US+foldMapping '\x10CB2' = CM '\x10CF2' '\0' '\0'+-- WARANG CITI CAPITAL LETTER NGAA+foldMapping '\x118A0' = CM '\x118C0' '\0' '\0'+-- WARANG CITI CAPITAL LETTER A+foldMapping '\x118A1' = CM '\x118C1' '\0' '\0'+-- WARANG CITI CAPITAL LETTER WI+foldMapping '\x118A2' = CM '\x118C2' '\0' '\0'+-- WARANG CITI CAPITAL LETTER YU+foldMapping '\x118A3' = CM '\x118C3' '\0' '\0'+-- WARANG CITI CAPITAL LETTER YA+foldMapping '\x118A4' = CM '\x118C4' '\0' '\0'+-- WARANG CITI CAPITAL LETTER YO+foldMapping '\x118A5' = CM '\x118C5' '\0' '\0'+-- WARANG CITI CAPITAL LETTER II+foldMapping '\x118A6' = CM '\x118C6' '\0' '\0'+-- WARANG CITI CAPITAL LETTER UU+foldMapping '\x118A7' = CM '\x118C7' '\0' '\0'+-- WARANG CITI CAPITAL LETTER E+foldMapping '\x118A8' = CM '\x118C8' '\0' '\0'+-- WARANG CITI CAPITAL LETTER O+foldMapping '\x118A9' = CM '\x118C9' '\0' '\0'+-- WARANG CITI CAPITAL LETTER ANG+foldMapping '\x118AA' = CM '\x118CA' '\0' '\0'+-- WARANG CITI CAPITAL LETTER GA+foldMapping '\x118AB' = CM '\x118CB' '\0' '\0'+-- WARANG CITI CAPITAL LETTER KO+foldMapping '\x118AC' = CM '\x118CC' '\0' '\0'+-- WARANG CITI CAPITAL LETTER ENY+foldMapping '\x118AD' = CM '\x118CD' '\0' '\0'+-- WARANG CITI CAPITAL LETTER YUJ+foldMapping '\x118AE' = CM '\x118CE' '\0' '\0'+-- WARANG CITI CAPITAL LETTER UC+foldMapping '\x118AF' = CM '\x118CF' '\0' '\0'+-- WARANG CITI CAPITAL LETTER ENN+foldMapping '\x118B0' = CM '\x118D0' '\0' '\0'+-- WARANG CITI CAPITAL LETTER ODD+foldMapping '\x118B1' = CM '\x118D1' '\0' '\0'+-- WARANG CITI CAPITAL LETTER TTE+foldMapping '\x118B2' = CM '\x118D2' '\0' '\0'+-- WARANG CITI CAPITAL LETTER NUNG+foldMapping '\x118B3' = CM '\x118D3' '\0' '\0'+-- WARANG CITI CAPITAL LETTER DA+foldMapping '\x118B4' = CM '\x118D4' '\0' '\0'+-- WARANG CITI CAPITAL LETTER AT+foldMapping '\x118B5' = CM '\x118D5' '\0' '\0'+-- WARANG CITI CAPITAL LETTER AM+foldMapping '\x118B6' = CM '\x118D6' '\0' '\0'+-- WARANG CITI CAPITAL LETTER BU+foldMapping '\x118B7' = CM '\x118D7' '\0' '\0'+-- WARANG CITI CAPITAL LETTER PU+foldMapping '\x118B8' = CM '\x118D8' '\0' '\0'+-- WARANG CITI CAPITAL LETTER HIYO+foldMapping '\x118B9' = CM '\x118D9' '\0' '\0'+-- WARANG CITI CAPITAL LETTER HOLO+foldMapping '\x118BA' = CM '\x118DA' '\0' '\0'+-- WARANG CITI CAPITAL LETTER HORR+foldMapping '\x118BB' = CM '\x118DB' '\0' '\0'+-- WARANG CITI CAPITAL LETTER HAR+foldMapping '\x118BC' = CM '\x118DC' '\0' '\0'+-- WARANG CITI CAPITAL LETTER SSUU+foldMapping '\x118BD' = CM '\x118DD' '\0' '\0'+-- WARANG CITI CAPITAL LETTER SII+foldMapping '\x118BE' = CM '\x118DE' '\0' '\0'+-- WARANG CITI CAPITAL LETTER VIYO+foldMapping '\x118BF' = CM '\x118DF' '\0' '\0'+-- ADLAM CAPITAL LETTER ALIF+foldMapping '\x1E900' = CM '\x1E922' '\0' '\0'+-- ADLAM CAPITAL LETTER DAALI+foldMapping '\x1E901' = CM '\x1E923' '\0' '\0'+-- ADLAM CAPITAL LETTER LAAM+foldMapping '\x1E902' = CM '\x1E924' '\0' '\0'+-- ADLAM CAPITAL LETTER MIIM+foldMapping '\x1E903' = CM '\x1E925' '\0' '\0'+-- ADLAM CAPITAL LETTER BA+foldMapping '\x1E904' = CM '\x1E926' '\0' '\0'+-- ADLAM CAPITAL LETTER SINNYIIYHE+foldMapping '\x1E905' = CM '\x1E927' '\0' '\0'+-- ADLAM CAPITAL LETTER PE+foldMapping '\x1E906' = CM '\x1E928' '\0' '\0'+-- ADLAM CAPITAL LETTER BHE+foldMapping '\x1E907' = CM '\x1E929' '\0' '\0'+-- ADLAM CAPITAL LETTER RA+foldMapping '\x1E908' = CM '\x1E92A' '\0' '\0'+-- ADLAM CAPITAL LETTER E+foldMapping '\x1E909' = CM '\x1E92B' '\0' '\0'+-- ADLAM CAPITAL LETTER FA+foldMapping '\x1E90A' = CM '\x1E92C' '\0' '\0'+-- ADLAM CAPITAL LETTER I+foldMapping '\x1E90B' = CM '\x1E92D' '\0' '\0'+-- ADLAM CAPITAL LETTER O+foldMapping '\x1E90C' = CM '\x1E92E' '\0' '\0'+-- ADLAM CAPITAL LETTER DHA+foldMapping '\x1E90D' = CM '\x1E92F' '\0' '\0'+-- ADLAM CAPITAL LETTER YHE+foldMapping '\x1E90E' = CM '\x1E930' '\0' '\0'+-- ADLAM CAPITAL LETTER WAW+foldMapping '\x1E90F' = CM '\x1E931' '\0' '\0'+-- ADLAM CAPITAL LETTER NUN+foldMapping '\x1E910' = CM '\x1E932' '\0' '\0'+-- ADLAM CAPITAL LETTER KAF+foldMapping '\x1E911' = CM '\x1E933' '\0' '\0'+-- ADLAM CAPITAL LETTER YA+foldMapping '\x1E912' = CM '\x1E934' '\0' '\0'+-- ADLAM CAPITAL LETTER U+foldMapping '\x1E913' = CM '\x1E935' '\0' '\0'+-- ADLAM CAPITAL LETTER JIIM+foldMapping '\x1E914' = CM '\x1E936' '\0' '\0'+-- ADLAM CAPITAL LETTER CHI+foldMapping '\x1E915' = CM '\x1E937' '\0' '\0'+-- ADLAM CAPITAL LETTER HA+foldMapping '\x1E916' = CM '\x1E938' '\0' '\0'+-- ADLAM CAPITAL LETTER QAAF+foldMapping '\x1E917' = CM '\x1E939' '\0' '\0'+-- ADLAM CAPITAL LETTER GA+foldMapping '\x1E918' = CM '\x1E93A' '\0' '\0'+-- ADLAM CAPITAL LETTER NYA+foldMapping '\x1E919' = CM '\x1E93B' '\0' '\0'+-- ADLAM CAPITAL LETTER TU+foldMapping '\x1E91A' = CM '\x1E93C' '\0' '\0'+-- ADLAM CAPITAL LETTER NHA+foldMapping '\x1E91B' = CM '\x1E93D' '\0' '\0'+-- ADLAM CAPITAL LETTER VA+foldMapping '\x1E91C' = CM '\x1E93E' '\0' '\0'+-- ADLAM CAPITAL LETTER KHA+foldMapping '\x1E91D' = CM '\x1E93F' '\0' '\0'+-- ADLAM CAPITAL LETTER GBE+foldMapping '\x1E91E' = CM '\x1E940' '\0' '\0'+-- ADLAM CAPITAL LETTER ZAL+foldMapping '\x1E91F' = CM '\x1E941' '\0' '\0'+-- ADLAM CAPITAL LETTER KPO+foldMapping '\x1E920' = CM '\x1E942' '\0' '\0'+-- ADLAM CAPITAL LETTER SHA+foldMapping '\x1E921' = CM '\x1E943' '\0' '\0'+foldMapping c = CM (toLower c) '\0' '\0'
Basement/Types/OffsetSize.hs view
@@ -61,6 +61,7 @@ import Basement.Numerical.Additive import Basement.Numerical.Subtractive import Basement.Numerical.Multiplicative+import Basement.Numerical.Conversion (intToWord) import Basement.Nat import Basement.IntegralConv import Data.List (foldl')@@ -88,14 +89,10 @@ instance IsIntegral (Offset ty) where     toInteger (Offset i) = toInteger i instance IsNatural (Offset ty) where-    toNatural (Offset i) = toNatural (integralCast i :: Word)+    toNatural (Offset i) = toNatural (intToWord i) instance Subtractive (Offset ty) where     type Difference (Offset ty) = CountOf ty     (Offset a) - (Offset b) = CountOf (a-b)-instance IntegralCast Int (Offset ty) where-    integralCast i = Offset i-instance IntegralCast Word (Offset ty) where-    integralCast (W# w) = Offset (I# (word2Int# w))  (+.) :: Offset ty -> Int -> Offset ty (+.) (Offset a) b = Offset (a + b)@@ -192,7 +189,7 @@ instance IsIntegral (CountOf ty) where     toInteger (CountOf i) = toInteger i instance IsNatural (CountOf ty) where-    toNatural (CountOf i) = toNatural (integralCast i :: Word)+    toNatural (CountOf i) = toNatural (intToWord i)  instance Additive (CountOf ty) where     azero = CountOf 0@@ -210,11 +207,6 @@     mempty = azero     mappend = (+)     mconcat = foldl' (+) 0--instance IntegralCast Int (CountOf ty) where-    integralCast i = CountOf i-instance IntegralCast Word (CountOf ty) where-    integralCast (W# w) = CountOf (I# (word2Int# w))  sizeOfE :: CountOf Word8 -> CountOf ty -> CountOf Word8 sizeOfE (CountOf sz) (CountOf ty) = CountOf (ty * sz)
Basement/Types/Word128.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE CPP                   #-}-{-# LANGUAGE MagicHash #-}-{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE MagicHash          #-}+{-# LANGUAGE UnboxedTuples      #-}+{-# LANGUAGE DeriveDataTypeable #-} module Basement.Types.Word128     ( Word128(..)     , (+)@@ -37,7 +38,7 @@ -- | 128 bits Word data Word128 = Word128 {-# UNPACK #-} !Word64                        {-# UNPACK #-} !Word64-    deriving (Eq)+    deriving (Eq, Typeable)  instance Show Word128 where     show w = Prelude.show (toNatural w)
Basement/Types/Word256.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE CPP                   #-}-{-# LANGUAGE MagicHash #-}-{-# LANGUAGE UnboxedTuples #-}+{-# LANGUAGE CPP                #-}+{-# LANGUAGE MagicHash          #-}+{-# LANGUAGE UnboxedTuples      #-}+{-# LANGUAGE DeriveDataTypeable #-} module Basement.Types.Word256     ( Word256(..)     , (+)@@ -39,7 +40,7 @@                        {-# UNPACK #-} !Word64                        {-# UNPACK #-} !Word64                        {-# UNPACK #-} !Word64-    deriving (Eq)+    deriving (Eq, Typeable)  instance Show Word256 where     show w = Prelude.show (toNatural w)
Basement/UArray/Base.hs view
@@ -605,29 +605,26 @@     !la = length a     !lb = length b -concat :: PrimType ty => [UArray ty] -> UArray ty-concat [] = empty-concat l  =-    case filterAndSum (CountOf 0) [] l of-        (_,[])            -> empty-        (_,[x])           -> x-        (totalLen,chunks) -> runST $ do-            r <- new totalLen-            doCopy r (Offset 0) chunks-            unsafeFreeze r+concat :: forall ty . PrimType ty => [UArray ty] -> UArray ty+concat original = runST $ do+    r <- new total+    goCopy r 0 original+    unsafeFreeze r   where-    -- TODO would go faster not to reverse but pack from the end instead-    filterAndSum !totalLen acc []     = (totalLen, List.reverse acc)-    filterAndSum !totalLen acc (x:xs)-        | len == CountOf 0 = filterAndSum totalLen acc xs-        | otherwise      = filterAndSum (len+totalLen) (x:acc) xs-      where len = length x+    !total = size 0 original+    -- size+    size !sz []     = sz+    size !sz (x:xs) = size (length x + sz) xs -    doCopy _ _ []     = return ()-    doCopy r i (x:xs) = do-        unsafeCopyAtRO r i x (Offset 0) lx-        doCopy r (i `offsetPlusE` lx) xs-      where lx = length x+    zero = Offset 0++    goCopy r = loop+      where+        loop _  []      = pure ()+        loop !i (x:xs) = do+            unsafeCopyAtRO r i x zero lx+            loop (i `offsetPlusE` lx) xs+          where !lx = length x  -- | Create a Block from a UArray. --
Basement/UArray/Mutable.hs view
@@ -153,10 +153,10 @@     ofs = mutableOffset marr      sz = primSizeInBytes (Proxy :: Proxy ty)-    !(CountOf bytes@(I# bytes#)) = sizeOfE sz count-    !(Offset od@(I# od#)) = offsetOfE sz ofs+    !count'@(CountOf bytes@(I# bytes#)) = sizeOfE sz count+    !off'@(Offset od@(I# od#)) = offsetOfE sz ofs -    copyNative (MutableBlock mba) = primitive $ \st -> (# copyAddrToByteArray# src# mba od# bytes# st, () #)+    copyNative mba = MBLK.unsafeCopyBytesPtr mba off' src count'     copyPtr fptr = withFinalPtr fptr $ \dst ->         unsafePrimFromIO $ copyBytes (dst `plusPtr` od) src bytes 
Basement/UTF8/Types.hs view
@@ -9,6 +9,8 @@     , isValidStepDigit     -- * Unicode Errors     , ValidationFailure(..)+    -- * Case Conversion+    , CM (..)     ) where  import           Basement.Compat.Base@@ -33,6 +35,9 @@  -- | Step when processing ASCII character newtype StepASCII = StepASCII Word8++-- | Specialized tuple used for case mapping.+data CM = CM {-# UNPACK #-} !Char {-# UNPACK #-} !Char {-# UNPACK #-} !Char deriving (Eq)  isValidStepASCII :: StepASCII -> Bool isValidStepASCII (StepASCII w) = w < 0x80
basement.cabal view
@@ -1,12 +1,12 @@ name:                basement-version:             0.0.5+version:             0.0.6 synopsis:            Foundation scrap box of array & string description:         Foundation most basic primitives without any dependencies homepage:            https://github.com/haskell-foundation/foundation#readme license:             BSD3 license-file:        LICENSE copyright:           2015-2017 Vincent Hanquez <vincent@snarc.org>-                     2017      Foundation Maintainers+                     2017-2018 Foundation Maintainers maintainer:          vincent@snarc.org copyright:           Vincent Hanquez category:            Web@@ -33,6 +33,7 @@                      Basement.PrimType                       Basement.Exception+                     Basement.Cast                      Basement.From                       Basement.Types.Char7@@ -51,9 +52,11 @@                      Basement.BoxedArray                      Basement.Block                      Basement.Block.Mutable+                     Basement.Block.Builder                      Basement.UArray                      Basement.UArray.Mutable                      Basement.String+                     Basement.String.Builder                      Basement.NonEmpty                                            -- Utils@@ -77,6 +80,7 @@                      Basement.Alg.XorShift                       -- compat / base redefinition+                     Basement.Compat.AMP                      Basement.Compat.Base                      Basement.Compat.Bifunctor                      Basement.Compat.CallStack@@ -128,6 +132,7 @@                       Basement.UArray.Base +                     Basement.String.CaseMapping                      Basement.String.Encoding.Encoding                      Basement.String.Encoding.UTF16                      Basement.String.Encoding.UTF32