]> git.wh0rd.org - fontconfig.git/commitdiff
Build fclang.h before building library This required compiling the charset
authorKeith Packard <keithp@keithp.com>
Thu, 6 Feb 2003 17:46:06 +0000 (17:46 +0000)
committerKeith Packard <keithp@keithp.com>
Thu, 6 Feb 2003 17:46:06 +0000 (17:46 +0000)
    funcs into fc-lang, which was done by refactoring code in fccharset.c
    and fcfreetype.c a bit
Updated ethiopic orthographies
Remove imake support
Install empty local.conf file if none is present

16 files changed:
fc-cache/Imakefile [deleted file]
fc-lang/Imakefile [deleted file]
fc-lang/am.orth
fc-lang/fc-lang.c
fc-lang/fclang.h [deleted file]
fc-lang/gez.orth
fc-lang/ti.orth [deleted file]
fc-lang/ti_er.orth [new file with mode: 0644]
fc-lang/ti_et.orth [new file with mode: 0644]
fc-lang/tig.orth [new file with mode: 0644]
fc-list/Imakefile [deleted file]
fontconfig/Imakefile [deleted file]
src/Imakefile [deleted file]
src/fccharset.c
src/fcfreetype.c
src/fcint.h

diff --git a/fc-cache/Imakefile b/fc-cache/Imakefile
deleted file mode 100644 (file)
index 3394142..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-XCOMM $XFree86$
-
-#ifdef UseInstalled
-/* building outside the tree, use private defines */
-#include "../local.def"
-#endif
-
-INCLUDES=$(FREETYPE2INCLUDES) -I..
-
-LOCAL_LIBRARIES=FontconfigClientLibs
-        DEPLIBS=FontconfigClientDepLibs
-
-SRCS=fc-cache.c
-OBJS=fc-cache.o
-
-ComplexProgramTarget(fc-cache)
-LinkBuildBinary(ProgramTargetName(fc-cache))
-
-install::
-       if [ x$${DESTDIR} = x ]; then \
-               $(FCCACHE) -v -f;\
-       fi
diff --git a/fc-lang/Imakefile b/fc-lang/Imakefile
deleted file mode 100644 (file)
index e58a684..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-XCOMM $XFree86: xc/lib/fontconfig/fc-lang/Imakefile,v 1.14 2002/08/08 00:10:49 keithp Exp $
-
-#ifdef UseInstalled
-/* building outside the tree, use private defines */
-#include "../local.def"
-#endif
-
-INCLUDES=$(FREETYPE2INCLUDES) -I.. -I../src
-
-LOCAL_LIBRARIES=FontconfigClientLibs
-        DEPLIBS=FontconfigClientDepLibs
-
-SRCS=fc-lang.c
-OBJS=fc-lang.o
-
-TARG=fclang.h
-TMPL=fclang.tmpl.h
-
-#
-# Basic ISO 639-1 two letter language names, 639-2 are three-letter
-# language codes
-#
-
-ORTH=aa.orth ab.orth af.orth am.orth ar.orth ast.orth ava.orth ay.orth\
-     az.orth bam.orth ba.orth be.orth bg.orth bho.orth bh.orth bin.orth\
-     bi.orth bn.orth bo.orth br.orth bs.orth bua.orth ca.orth ce.orth\
-     chm.orth ch.orth chr.orth co.orth cs.orth cu.orth cv.orth cy.orth\
-     da.orth de.orth dz.orth el.orth en.orth eo.orth es.orth et.orth eu.orth\
-     fa.orth fi.orth fj.orth fo.orth fr.orth ful.orth fur.orth fy.orth\
-     ga.orth gd.orth gez.orth gl.orth gn.orth gu.orth gv.orth ha.orth\
-     haw.orth he.orth hi.orth ho.orth hr.orth hu.orth hy.orth ia.orth\
-     ibo.orth id.orth ie.orth ik.orth io.orth is.orth it.orth iu.orth ja.orth\
-     kaa.orth ka.orth ki.orth kk.orth kl.orth km.orth kn.orth kok.orth\
-     ko.orth ks.orth kum.orth ku.orth kv.orth kw.orth ky.orth la.orth lb.orth\
-     lez.orth lo.orth lt.orth lv.orth mg.orth mh.orth mi.orth mk.orth ml.orth\
-     mn.orth mo.orth mr.orth mt.orth my.orth nb.orth ne.orth nl.orth nn.orth\
-     no.orth ny.orth oc.orth om.orth or.orth os.orth pl.orth pt.orth rm.orth\
-     ro.orth ru.orth sah.orth sa.orth sco.orth sel.orth se.orth sh.orth\
-     si.orth sk.orth sl.orth sma.orth smj.orth smn.orth sm.orth sms.orth\
-     so.orth sq.orth sr.orth sv.orth sw.orth syr.orth ta.orth te.orth tg.orth\
-     th.orth ti.orth tk.orth tl.orth tn.orth to.orth tr.orth ts.orth tt.orth\
-     tw.orth tyv.orth ug.orth uk.orth ur.orth uz.orth ven.orth vi.orth\
-     vo.orth vot.orth wa.orth wen.orth wo.orth xh.orth yap.orth yi.orth\
-     yo.orth zh_cn.orth zh_hk.orth zh_mo.orth zh_sg.orth zh_tw.orth zu.orth
-     
-all:: $(TARG)
-     
-clean::
-       $(RM) $(TARG)
-       
-$(TARG): fc-lang $(ORTH) $(TMPL)
-       chmod +w $(TARG)
-       ./fc-lang $(ORTH) < $(TMPL) > $(TARG)
-
-ComplexProgramTarget(fc-lang)
-LinkBuildBinary(ProgramTargetName(fc-lang))
index b45168a43e5479ddfca2cf708433105cd91ee47f..1b3ebafc3534c6483ef7b2a0d95d7d17749f18a2 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.2 2002/07/13 19:10:03 keithp Exp $
+# $XFree86: xc/lib/fontconfig/fc-lang/am.orth,v 1.1 2002/08/08 00:10:50 keithp Exp $
 #
 # Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
 #
 # The same as Ethiopic
 #
 include gez.orth
+1238-123f  # xe-xWa
+1268-126e  # ve-vo
+1278-127f  # ce-cWa
+1298-129f  # Ne-NWa
+12a8       # ea
+12e0-12e8  # Ze-ZWa
+1300-1307  # je-jWa
+1328-132f  # Ce-CWa
index d6f035a0f0bc65cd6e0a9504bcc228aba5d483fc..960c56c3b108a721c87f8abf554be40da4769dfa 100644 (file)
  */
 
 #include "fcint.h"
+#include "fccharset.c"
+#include "fcstr.c"
 
 /*
  * fc-lang
  *
  * Read a set of language orthographies and build C declarations for
  * charsets which can then be used to identify which languages are
- * supported by a given font.  Note that it would be nice if
- * this could be done while compiling the library, but this
- * code uses a number of routines from the library.  It's
- * expediant to just ship the pre-built version along with the
- * source orthographies.
+ * supported by a given font.  Note that this uses some utilities
+ * from the fontconfig library, so the necessary file is simply
+ * included in this compilation.  A couple of extra utility
+ * functions are also needed in slightly modified form
  */
 
+void
+FcMemAlloc (int kind, int size)
+{
+}
+
+void
+FcMemFree (int kind, int size)
+{
+}
+
 static void 
 fatal (char *file, int lineno, char *msg)
 {
diff --git a/fc-lang/fclang.h b/fc-lang/fclang.h
deleted file mode 100644 (file)
index 1072033..0000000
+++ /dev/null
@@ -1,4006 +0,0 @@
-/*
- * $XFree86: xc/lib/fontconfig/fc-lang/fclang.h,v 1.20 2002/10/21 17:03:47 keithp Exp $
- *
- * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission.  Keith Packard makes no
- * representations about the suitability of this software for any purpose.  It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/* total size: 877 unique leaves: 599 */
-
-static const FcCharLeaf        leaves[599] = {
-    { { /* 0 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x08104404, 0x08104404,
-    } },
-    { { /* 1 */
-    0xffff8002, 0xffffffff, 0x8002ffff, 0x00000000,
-    0xc0000000, 0xf0fc33c0, 0x03000000, 0x00000000,
-    } },
-    { { /* 2 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x0810cf00, 0x0810cf00,
-    } },
-    { { /* 3 */
-    0x00000000, 0x00000000, 0x00000200, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 4 */
-    0xffffff7f, 0xffffffff, 0x3d7f3d7f, 0xffffffff,
-    0xffff3d7f, 0x7f3d7fff, 0xff7f7f3d, 0xffff7fff,
-    } },
-    { { /* 5 */
-    0x7f3d7fff, 0xffffffff, 0x07ffff7f, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 6 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff,
-    } },
-    { { /* 7 */
-    0x00000000, 0x00000000, 0x07ffffff, 0x07ffffff,
-    0x00000000, 0x88000802, 0x140a2202, 0x140a2202,
-    } },
-    { { /* 8 */
-    0xffff0042, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 9 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10028010, 0x10028010,
-    } },
-    { { /* 10 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10400090, 0x10400090,
-    } },
-    { { /* 11 */
-    0xc0000000, 0x00030000, 0xc0000000, 0x00000000,
-    0x00008000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 12 */
-    0x00000000, 0x00000000, 0x02000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 13 */
-    0xffff0100, 0xffffffff, 0x0100ffff, 0x00000000,
-    0x300c0000, 0x0f00c000, 0x03000000, 0x00000300,
-    } },
-    { { /* 14 */
-    0xffff0000, 0xffffffff, 0x0000ffff, 0x00000000,
-    0x030c0000, 0x0c00cc0f, 0x03000000, 0x00000300,
-    } },
-    { { /* 15 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 16 */
-    0x00000000, 0x00000000, 0x00000c00, 0x00000000,
-    0x20010040, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 17 */
-    0x00000000, 0x00000000, 0x08100000, 0x00040000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 18 */
-    0xffff4040, 0xffffffff, 0x4040ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 19 */
-    0xffff0000, 0xffffd7ff, 0x0000d7ff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 20 */
-    0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 21 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10008200, 0x10008200,
-    } },
-    { { /* 22 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x060c3303, 0x060c3303,
-    } },
-    { { /* 23 */
-    0x00000003, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 24 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x03000000, 0x00003000, 0x00000000,
-    } },
-    { { /* 25 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfff99fee, 0xd3c5fdff, 0xb080399f, 0x07ffffcf,
-    } },
-    { { /* 26 */
-    0x00000000, 0x00000000, 0xfffffeff, 0x3d7e03ff,
-    0xfeff0003, 0x03ffffff, 0x00000000, 0x00000000,
-    } },
-    { { /* 27 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x12120404, 0x12120404,
-    } },
-    { { /* 28 */
-    0x000330c0, 0x00000000, 0x00000000, 0x60000003,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 29 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x0c00c000, 0x00000000, 0x00000000,
-    } },
-    { { /* 30 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x140ca381, 0x140ca381,
-    } },
-    { { /* 31 */
-    0x00000000, 0x80000000, 0x00000001, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 32 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10020004, 0x10020004,
-    } },
-    { { /* 33 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x00000030, 0x000c0000, 0x030300c0,
-    } },
-    { { /* 34 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0xffffffff, 0xffffffff, 0x001fffff,
-    } },
-    { { /* 35 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5,
-    } },
-    { { /* 36 */
-    0x00000000, 0x00000000, 0x000c0000, 0x01000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 37 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x24082202, 0x24082202,
-    } },
-    { { /* 38 */
-    0x0c00f000, 0x00000000, 0x03000180, 0x6000c033,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 39 */
-    0xfdffa966, 0xffffdfff, 0xa965dfff, 0x03ffffff,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 40 */
-    0x0000000c, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 41 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x00000c00, 0x00c00000, 0x000c0000,
-    } },
-    { { /* 42 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x0010c604, 0x8010c604,
-    } },
-    { { /* 43 */
-    0x00000000, 0x00000000, 0x00000000, 0x01f00000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 44 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x0000003f, 0x00000000, 0x00000000, 0x000c0000,
-    } },
-    { { /* 45 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x25082262, 0x25082262,
-    } },
-    { { /* 46 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x90400010, 0x10400010,
-    } },
-    { { /* 47 */
-    0x00000000, 0x00000000, 0x00000000, 0x44300000,
-    0xffffd7f0, 0xfffffffb, 0x00007fff, 0x00000000,
-    } },
-    { { /* 48 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00528f81, 0x00528f81,
-    } },
-    { { /* 49 */
-    0x30000300, 0x00300030, 0x30000000, 0x00003000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 50 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x140a2202, 0x140a2202,
-    } },
-    { { /* 51 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10600010, 0x10600010,
-    } },
-    { { /* 52 */
-    0x00000000, 0x00000000, 0x00000000, 0x60000003,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 53 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10020000, 0x10020000,
-    } },
-    { { /* 54 */
-    0x00000000, 0x00000000, 0x03c00000, 0x3c000000,
-    0x003fcc00, 0x00000000, 0x00000000, 0xf0000000,
-    } },
-    { { /* 55 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfffffe7f, 0xffffffff, 0xe1ffffff, 0x18007fff,
-    } },
-    { { /* 56 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00400030, 0x00400030,
-    } },
-    { { /* 57 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x25092042, 0x25092042,
-    } },
-    { { /* 58 */
-    0x00000000, 0x00000000, 0x00000c00, 0x00000000,
-    0x20000402, 0x00180000, 0x00000000, 0x00000000,
-    } },
-    { { /* 59 */
-    0x00000000, 0x00000000, 0x00880000, 0x00040000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 60 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x02041107, 0x02041107,
-    } },
-    { { /* 61 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x9c508e14, 0x1c508e14,
-    } },
-    { { /* 62 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x04082202, 0x04082202,
-    } },
-    { { /* 63 */
-    0x00000c00, 0x00000003, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 64 */
-    0xc0000c0c, 0x00000000, 0x00c00003, 0x00000c03,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 65 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x020c1383, 0x020c1383,
-    } },
-    { { /* 66 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x040a2202, 0x042a220a,
-    } },
-    { { /* 67 */
-    0x00000000, 0x00000200, 0x00000000, 0x00000200,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 68 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x20000000, 0x00000000, 0x02000000,
-    } },
-    { { /* 69 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfffbafee, 0xf3edfdff, 0x00013bbf, 0x0000ffc1,
-    } },
-    { { /* 70 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000080, 0x00000080,
-    } },
-    { { /* 71 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x03000402, 0x00180000, 0x00000000, 0x00000000,
-    } },
-    { { /* 72 */
-    0x00000000, 0x00000000, 0x00880000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 73 */
-    0x000c0003, 0x00000c00, 0x00003000, 0x00000c00,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 74 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x08000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 75 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0xffff0000, 0x000007ff,
-    } },
-    { { /* 76 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x14482202, 0x14482202,
-    } },
-    { { /* 77 */
-    0x00000000, 0x00000000, 0x00030000, 0x00030000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 78 */
-    0x00000000, 0xfffe0000, 0x007fffff, 0xfffffffe,
-    0x000000ff, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 79 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00003c00, 0x00000022,
-    } },
-    { { /* 80 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000200, 0x00000200,
-    } },
-    { { /* 81 */
-    0xffff4002, 0xffffffff, 0x4002ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 82 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x64092242, 0x64092242,
-    } },
-    { { /* 83 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x060cb301, 0x060cb301,
-    } },
-    { { /* 84 */
-    0x00000c7e, 0x031f8000, 0x0063f200, 0x000df840,
-    0x00037e08, 0x08000dfa, 0x0df901bf, 0x5437e400,
-    } },
-    { { /* 85 */
-    0x00000025, 0x40006fc0, 0x27f91be4, 0xdee00000,
-    0x007ff83f, 0x00007f7f, 0x00000000, 0x00000000,
-    } },
-    { { /* 86 */
-    0x00000000, 0x00000000, 0x00000000, 0x007f8000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 87 */
-    0x000000e7, 0x00000000, 0xfffffffe, 0xffffffff,
-    0x780fffff, 0xfffffffe, 0xffffffff, 0x787fffff,
-    } },
-    { { /* 88 */
-    0x43f36f8b, 0x9b462442, 0xe3e0e82c, 0x400a0004,
-    0xdb365f65, 0x04497977, 0xe3f0ecd7, 0x08c56038,
-    } },
-    { { /* 89 */
-    0x3403e602, 0x35518000, 0x7eabe0c8, 0x98698200,
-    0x2942a948, 0x8060e803, 0xad93441c, 0x4568c03a,
-    } },
-    { { /* 90 */
-    0x8656aa60, 0x02403f7a, 0x14618388, 0x21741020,
-    0x07022021, 0x40bc3000, 0x4462a624, 0x0a2060a8,
-    } },
-    { { /* 91 */
-    0x85740217, 0x9c840402, 0x14157bfb, 0x11e27f24,
-    0x02efb665, 0x20ff1f75, 0x28403a70, 0x676326c3,
-    } },
-    { { /* 92 */
-    0x20924dd9, 0x0fc946b0, 0x4850bc98, 0xa03f8638,
-    0x88162388, 0x52323e09, 0xe3a422aa, 0xc72c00dd,
-    } },
-    { { /* 93 */
-    0x26e1a166, 0x8f0a840b, 0x559e27eb, 0x89bbc241,
-    0x85400014, 0x08496361, 0x8ad07f0c, 0x05cfff3e,
-    } },
-    { { /* 94 */
-    0xa803ff1a, 0x7b407a41, 0x80024745, 0x38eb0500,
-    0x0005d851, 0x710c9934, 0x01000397, 0x24046366,
-    } },
-    { { /* 95 */
-    0x005180d0, 0x430ac000, 0x30c89071, 0x58000008,
-    0xf7000e99, 0x00415f80, 0x941000b0, 0x62800018,
-    } },
-    { { /* 96 */
-    0x09d00240, 0x01568200, 0x08015004, 0x05101d10,
-    0x001084c1, 0x10504025, 0x4d8a410f, 0xa60d4009,
-    } },
-    { { /* 97 */
-    0x914cab19, 0x098121c0, 0x0003c485, 0x80000652,
-    0x00080b04, 0x0009041d, 0x905c4849, 0x16900009,
-    } },
-    { { /* 98 */
-    0x22200c65, 0x24338412, 0x47960c03, 0x42250a04,
-    0x90880028, 0x4f084900, 0xd3aa14a2, 0x3e87d830,
-    } },
-    { { /* 99 */
-    0x1f618604, 0x41867ea4, 0x05b3c390, 0x211857a5,
-    0x2a48241e, 0x4a041128, 0x161b0a40, 0x88400d60,
-    } },
-    { { /* 100 */
-    0x9502020a, 0x10608221, 0x04000243, 0x80001444,
-    0x0c040000, 0x70000000, 0x00c11a06, 0x0c00024a,
-    } },
-    { { /* 101 */
-    0x00401a00, 0x40451404, 0xbdb30029, 0x052b0a78,
-    0xbfa0bba9, 0x8379407c, 0xe81d12fc, 0xc5694bf6,
-    } },
-    { { /* 102 */
-    0x044aeff6, 0xff022115, 0x402bed63, 0x0242d033,
-    0x00131000, 0x59ca1b02, 0x020000a0, 0x2c41a703,
-    } },
-    { { /* 103 */
-    0x8ff24880, 0x00000204, 0x10055800, 0x00489200,
-    0x20011894, 0x34805004, 0x684c3200, 0x68be49ea,
-    } },
-    { { /* 104 */
-    0x2e42184c, 0x21c9a820, 0x80b050b9, 0xff7c001e,
-    0x14e0849a, 0x01e028c1, 0xac49870e, 0xdddb130f,
-    } },
-    { { /* 105 */
-    0x89fbbe1a, 0x51a2a2e0, 0x32ca5502, 0x928b3e46,
-    0x438f1dbf, 0x32186703, 0x33c03028, 0xa9230811,
-    } },
-    { { /* 106 */
-    0x3a65c000, 0x04028fe3, 0x86252c4e, 0x00a1bf3d,
-    0x8cd43a1a, 0x317c06c9, 0x950a00e0, 0x0edb018b,
-    } },
-    { { /* 107 */
-    0x8c20e34b, 0xf0101182, 0xa7287d94, 0x40fbc9ac,
-    0x06534484, 0x44445a90, 0x00013fc8, 0xf5d40048,
-    } },
-    { { /* 108 */
-    0xec577701, 0x891dc442, 0x49286b83, 0xd2424109,
-    0x59fe061d, 0x3a221800, 0x3b9fb7e4, 0xc0eaf003,
-    } },
-    { { /* 109 */
-    0x82021386, 0xe4008980, 0x10a1b200, 0x0cc44b80,
-    0x8944d309, 0x48341faf, 0x0c458259, 0x0450420a,
-    } },
-    { { /* 110 */
-    0x10c8a040, 0x44503140, 0x01004004, 0x05408280,
-    0x442c0108, 0x1a056a30, 0x051420a6, 0x645690cf,
-    } },
-    { { /* 111 */
-    0x31000021, 0xcbf09c18, 0x63e2a120, 0x01b5104c,
-    0x9a83538c, 0x3281b8b2, 0x0a84987a, 0x0c0233e7,
-    } },
-    { { /* 112 */
-    0x9018d4cc, 0x9070a1a1, 0xe0048a1e, 0x0451c3d4,
-    0x21c2439a, 0x53104844, 0x36400292, 0xf3bd0241,
-    } },
-    { { /* 113 */
-    0xe8f0ab09, 0xa5d27dc0, 0xd24bc242, 0xd0afa43f,
-    0x34a11aa0, 0x03d88247, 0x651bc452, 0xc83ad294,
-    } },
-    { { /* 114 */
-    0x40c8001c, 0x33140e06, 0xb21b614f, 0xc0d00088,
-    0xa898a02a, 0x166ba1c5, 0x85b42e50, 0x0604c08b,
-    } },
-    { { /* 115 */
-    0x1e04f933, 0xa251056e, 0x76380400, 0x73b8ec07,
-    0x18324406, 0xc8164081, 0x63097c8a, 0xaa042980,
-    } },
-    { { /* 116 */
-    0xca9c1c24, 0x27604e0e, 0x83000990, 0x81040046,
-    0x10816011, 0x0908540d, 0xcc0a000e, 0x0c000500,
-    } },
-    { { /* 117 */
-    0xa0440430, 0x6784008b, 0x8a195288, 0x8b18865e,
-    0x41602e59, 0x9cbe8c10, 0x891c6861, 0x00089800,
-    } },
-    { { /* 118 */
-    0x089a8100, 0x41900018, 0xe4a14007, 0x640d0505,
-    0x0e4d310e, 0xff0a4806, 0x2aa81632, 0x000b852e,
-    } },
-    { { /* 119 */
-    0xca841800, 0x696c0e20, 0x16000032, 0x03905658,
-    0x1a285120, 0x11248000, 0x432618e1, 0x0eaa5d52,
-    } },
-    { { /* 120 */
-    0xae280fa0, 0x4500fa7b, 0x89406408, 0xc044c880,
-    0xb1419005, 0x24c48424, 0x603a1a34, 0xc1949000,
-    } },
-    { { /* 121 */
-    0x003a8246, 0xc106180d, 0x99100022, 0x1511e050,
-    0x00824057, 0x020a041a, 0x8930004f, 0x444ad813,
-    } },
-    { { /* 122 */
-    0xed228a02, 0x400510c0, 0x01021000, 0x31018808,
-    0x02044600, 0x0708f000, 0xa2008900, 0x22020000,
-    } },
-    { { /* 123 */
-    0x16100200, 0x10400042, 0x02605200, 0x200052f4,
-    0x80308510, 0x42021100, 0x80b54308, 0x9a2070e1,
-    } },
-    { { /* 124 */
-    0x08012040, 0xfc653500, 0xab0419c1, 0x62140286,
-    0x00440087, 0x02449085, 0x0a85405c, 0x33803207,
-    } },
-    { { /* 125 */
-    0xb8c00400, 0xc0d0ce20, 0x0080c030, 0x0d250508,
-    0x00400a90, 0x080c0200, 0x40006505, 0x41026421,
-    } },
-    { { /* 126 */
-    0x00000268, 0x847c0024, 0xde200002, 0x40498619,
-    0x40000808, 0x20010084, 0x10108400, 0x01c742cd,
-    } },
-    { { /* 127 */
-    0xd52a7038, 0x1d8f1968, 0x3e12be50, 0x81d92ef5,
-    0x2412cec4, 0x732e0828, 0x4b3424ac, 0xd41d020c,
-    } },
-    { { /* 128 */
-    0x80002a02, 0x08110097, 0x114411c4, 0x7d451786,
-    0x064949d9, 0x87914000, 0xd8c4254c, 0x491444ba,
-    } },
-    { { /* 129 */
-    0xc8001b92, 0x15800271, 0x0c000081, 0xc200096a,
-    0x40024800, 0xba493021, 0x1c802080, 0x1008e2ac,
-    } },
-    { { /* 130 */
-    0x00341004, 0x841400e1, 0x20000020, 0x10149800,
-    0x04aa70c2, 0x54208688, 0x04130c62, 0x20109180,
-    } },
-    { { /* 131 */
-    0x02064082, 0x54001c40, 0xe4e90383, 0x84802125,
-    0x2000e433, 0xe60944c0, 0x81260a03, 0x080112da,
-    } },
-    { { /* 132 */
-    0x97906901, 0xf8864001, 0x0081e24d, 0xa6510a0e,
-    0x81ec011a, 0x8441c600, 0xb62cadb8, 0x8741a46f,
-    } },
-    { { /* 133 */
-    0x4b028d54, 0x02681161, 0x2057bb60, 0x043350a0,
-    0xb7b4a8c0, 0x01122402, 0x20009ad3, 0x00c82271,
-    } },
-    { { /* 134 */
-    0x809e2081, 0xe1800c8a, 0x8151b009, 0x40281031,
-    0x89a52a0e, 0x620e69b6, 0xd1444425, 0x4d548085,
-    } },
-    { { /* 135 */
-    0x1fb12c75, 0x862dd807, 0x4841d87c, 0x226e414e,
-    0x9e088200, 0xed37f80c, 0x75268c80, 0x08149313,
-    } },
-    { { /* 136 */
-    0xc8040e32, 0x6ea6484e, 0x66702c4a, 0xba0126c0,
-    0x185dd30c, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 137 */
-    0x00000000, 0x05400000, 0x81337020, 0x03a54f81,
-    0x641055ec, 0x2344c318, 0x00341462, 0x1a090a43,
-    } },
-    { { /* 138 */
-    0x13a5187b, 0xa8480102, 0xc5440440, 0xe2dd8106,
-    0x2d481af0, 0x0416b626, 0x6e405058, 0x31128032,
-    } },
-    { { /* 139 */
-    0x0c0007e4, 0x420a8208, 0x803b4840, 0x87134860,
-    0x3428850d, 0xe5290319, 0x870a2345, 0x5c1825a9,
-    } },
-    { { /* 140 */
-    0xd9c577a6, 0x03e85e00, 0xa7000081, 0x41c6cd54,
-    0xa2042800, 0x2b0ab860, 0xda9e0020, 0x0e1a08ea,
-    } },
-    { { /* 141 */
-    0x11c0427c, 0x03768908, 0x01058621, 0x18a80000,
-    0xc44846a0, 0x20220d05, 0x91485422, 0x28978a01,
-    } },
-    { { /* 142 */
-    0x00087898, 0x31221605, 0x08804240, 0x06a2fa4e,
-    0x92110814, 0x9b042002, 0x06432e52, 0x90105000,
-    } },
-    { { /* 143 */
-    0x85ba0041, 0x20203042, 0x05a04f0b, 0x40802708,
-    0x1a930591, 0x0600df50, 0x3021a202, 0x4e800630,
-    } },
-    { { /* 144 */
-    0x04c80cc4, 0x8001a004, 0xd4316000, 0x0a020880,
-    0x00281c00, 0x00418e18, 0xca106ad0, 0x4b00f210,
-    } },
-    { { /* 145 */
-    0x1506274d, 0x88900220, 0x82a85a00, 0x81504549,
-    0x80002004, 0x2c088804, 0x000508d1, 0x4ac48001,
-    } },
-    { { /* 146 */
-    0x0062e020, 0x0a42008e, 0x6a8c3055, 0xe0a5090e,
-    0x42c42906, 0x80b34814, 0xb330803e, 0x731c0102,
-    } },
-    { { /* 147 */
-    0x600d1494, 0x09400c20, 0xc040301a, 0xc094a451,
-    0x05c88dca, 0xa40c96c2, 0x34040001, 0x011000c8,
-    } },
-    { { /* 148 */
-    0xa9c9550d, 0x1c5a2428, 0x48370142, 0x100f7a4d,
-    0x452a32b4, 0x9205317b, 0x5c44b894, 0x458a68d7,
-    } },
-    { { /* 149 */
-    0x2ed15097, 0x42081943, 0x9d40d202, 0x20979840,
-    0x064d5409, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 150 */
-    0x00000000, 0x84800000, 0x04215542, 0x17001c06,
-    0x61107624, 0xb9ddff87, 0x5c0a659f, 0x3c00245d,
-    } },
-    { { /* 151 */
-    0x0059adb0, 0x00000000, 0x00000000, 0x009b28d0,
-    0x02000422, 0x44080108, 0xac409804, 0x90288d0a,
-    } },
-    { { /* 152 */
-    0xe0018700, 0x00310400, 0x82211794, 0x10540019,
-    0x021a2cb2, 0x40039c02, 0x88043d60, 0x7900080c,
-    } },
-    { { /* 153 */
-    0xba3c1628, 0xcb088640, 0x90807274, 0x0000001e,
-    0xd8000000, 0x9c87e188, 0x04124034, 0x2791ae64,
-    } },
-    { { /* 154 */
-    0xe6fbe86b, 0x5366408f, 0x537feea6, 0xb5e4e32b,
-    0x0002869f, 0x01228548, 0x08004402, 0x20a02116,
-    } },
-    { { /* 155 */
-    0x02040004, 0x00052000, 0x01547e00, 0x01ac162c,
-    0x10852a84, 0x05308c14, 0xb943fbc3, 0x906000ca,
-    } },
-    { { /* 156 */
-    0x40326000, 0x80901200, 0x4c810b30, 0x40020054,
-    0x1d6a0029, 0x02802000, 0x00048000, 0x150c2610,
-    } },
-    { { /* 157 */
-    0x07018040, 0x0c24d94d, 0x18502810, 0x50205001,
-    0x04d01000, 0x02017080, 0x21c30108, 0x00000132,
-    } },
-    { { /* 158 */
-    0x07190088, 0x05600802, 0x4c0e0012, 0xf0a10405,
-    0x00000002, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 159 */
-    0x00000000, 0x00000000, 0x00000000, 0x00800000,
-    0x035a8e8d, 0x5a0421bd, 0x11703488, 0x00000026,
-    } },
-    { { /* 160 */
-    0x10000000, 0x8804c502, 0xf801b815, 0x25ed147c,
-    0x1bb0ed60, 0x1bd70589, 0x1a627af3, 0x0ac50d0c,
-    } },
-    { { /* 161 */
-    0x524ae5d1, 0x63050490, 0x52440354, 0x16122b57,
-    0x1101a872, 0x00182949, 0x10080948, 0x886c6000,
-    } },
-    { { /* 162 */
-    0x058f916e, 0x39903012, 0x4930f840, 0x001b8880,
-    0x00000000, 0x00428500, 0x98000058, 0x7014ea04,
-    } },
-    { { /* 163 */
-    0x611d1628, 0x60005113, 0x00a71a24, 0x00000000,
-    0x03c00000, 0x10187120, 0xa9270172, 0x89066004,
-    } },
-    { { /* 164 */
-    0x020cc022, 0x40810900, 0x8ca0202d, 0x00000e34,
-    0x00000000, 0x11012100, 0xc11a8011, 0x0892ec4c,
-    } },
-    { { /* 165 */
-    0x85000040, 0x1806c7ac, 0x0512e03e, 0x00108000,
-    0x80ce4008, 0x02106d01, 0x08568641, 0x0027011e,
-    } },
-    { { /* 166 */
-    0x083d3750, 0x4e05e032, 0x048401c0, 0x01400081,
-    0x00000000, 0x00000000, 0x00000000, 0x00591aa0,
-    } },
-    { { /* 167 */
-    0x882443c8, 0xc8001d48, 0x72030152, 0x04049013,
-    0x04008280, 0x0d148a10, 0x02088056, 0x2704a040,
-    } },
-    { { /* 168 */
-    0x4c000000, 0x00000000, 0x00000000, 0xa3200000,
-    0xa0ae1902, 0xdf002660, 0x7b15f010, 0x3ad08121,
-    } },
-    { { /* 169 */
-    0x00284180, 0x48001003, 0x8014cc00, 0x00c414cf,
-    0x30202000, 0x00000001, 0x00000000, 0x00000000,
-    } },
-    { { /* 170 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000020,
-    } },
-    { { /* 171 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000200, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 172 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0xffffffff, 0xffff003f, 0x087fffff,
-    } },
-    { { /* 173 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x0c0c0000, 0x000cc00c, 0x03000000, 0x00000000,
-    } },
-    { { /* 174 */
-    0x00000000, 0x00000300, 0x00000000, 0x00000300,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 175 */
-    0xffff0000, 0xffffffff, 0x0040ffff, 0x00000000,
-    0x0c0c0000, 0x0c00000c, 0x03000000, 0x00000300,
-    } },
-    { { /* 176 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x0d10646e, 0x0d10646e,
-    } },
-    { { /* 177 */
-    0x00000000, 0x01000300, 0x00000000, 0x00000300,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 178 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xffffffff, 0xffffffff, 0x0000003f, 0x00000000,
-    } },
-    { { /* 179 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfffddfec, 0xc3effdff, 0x40603ddf, 0x0000ffc3,
-    } },
-    { { /* 180 */
-    0x00000000, 0xfffe0000, 0xffffffff, 0xffffffef,
-    0x00007fff, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 181 */
-    0x43722f8b, 0x0b042000, 0xe340e82c, 0x40c82800,
-    0x49375944, 0x04407976, 0xa3f02c93, 0x08c50038,
-    } },
-    { { /* 182 */
-    0x0003ee02, 0x35508000, 0x1e23e1c8, 0xc4498200,
-    0x2942ad5a, 0x8060c000, 0xa49a461c, 0x052ac003,
-    } },
-    { { /* 183 */
-    0xd6462a44, 0x08003dda, 0x14208388, 0x01700020,
-    0x03022021, 0x40ac3000, 0x44628620, 0x8a0020a0,
-    } },
-    { { /* 184 */
-    0x80040253, 0x14840402, 0x10047bfb, 0x11e27fa4,
-    0x00a42441, 0x20c01421, 0x70003a50, 0x27430002,
-    } },
-    { { /* 185 */
-    0x208245c9, 0x0fc14630, 0x28503c88, 0xa0248602,
-    0x88062388, 0x40000e19, 0xeb6422aa, 0xcd28001c,
-    } },
-    { { /* 186 */
-    0x02e1a120, 0x8200840b, 0x549e279b, 0xa0b38141,
-    0x85080010, 0x08002061, 0x08d02f08, 0x010fbe3e,
-    } },
-    { { /* 187 */
-    0xa803f718, 0x5b080a41, 0x00020504, 0x382a0500,
-    0x00015041, 0x21081910, 0x00000313, 0x04046122,
-    } },
-    { { /* 188 */
-    0x100140d0, 0x40228000, 0x40488050, 0x10000008,
-    0x370006d1, 0x00005e80, 0x941000a0, 0x60000018,
-    } },
-    { { /* 189 */
-    0x00900240, 0x00548000, 0x00080000, 0x00100900,
-    0x00000040, 0x10105020, 0x4c022400, 0x06010001,
-    } },
-    { { /* 190 */
-    0x814c2918, 0x08012100, 0x00036485, 0x10214452,
-    0x00080904, 0x0000000d, 0x80004988, 0x16910001,
-    } },
-    { { /* 191 */
-    0x40000765, 0x04338492, 0x45928c00, 0x52200016,
-    0xd0080228, 0x4c084300, 0xc32a40a2, 0x2e009810,
-    } },
-    { { /* 192 */
-    0x16708000, 0x40826e84, 0x04b3c390, 0x21187c85,
-    0x02c8041c, 0x4a001120, 0x361b0a48, 0x89005540,
-    } },
-    { { /* 193 */
-    0x9902000a, 0x10400221, 0x04000242, 0x00000044,
-    0x0c040000, 0x00000010, 0x00001216, 0x00000242,
-    } },
-    { { /* 194 */
-    0x00401a20, 0x00000400, 0xb5b30009, 0x15230a18,
-    0x1fe89ba0, 0x8379507c, 0xc09d10fd, 0x0560dbf6,
-    } },
-    { { /* 195 */
-    0x0242ef92, 0xdf020110, 0x08226961, 0x02029035,
-    0x00030000, 0x45aa1a02, 0x02000001, 0x28518101,
-    } },
-    { { /* 196 */
-    0x02d26080, 0x00000280, 0x00011800, 0x00009200,
-    0x20000880, 0x35000405, 0x60442000, 0x609e49e6,
-    } },
-    { { /* 197 */
-    0x2a42104c, 0xa1482820, 0x802010b1, 0x7b9c000e,
-    0x14a08490, 0x41e028c1, 0x8c490704, 0x0cc8100d,
-    } },
-    { { /* 198 */
-    0x89ba8412, 0x142202c0, 0x0ac05500, 0x92833ec4,
-    0x43871ca3, 0x22a04703, 0x03c03028, 0xa0200801,
-    } },
-    { { /* 199 */
-    0x30448000, 0x000085a3, 0x2225200e, 0x0001b73c,
-    0x8c503220, 0x315d0099, 0x940200a0, 0x0e4b0003,
-    } },
-    { { /* 200 */
-    0x8c20e342, 0xd0910080, 0xa3281d94, 0x60c1499c,
-    0x07134406, 0x44445a90, 0x00000f88, 0x95c40040,
-    } },
-    { { /* 201 */
-    0x84477581, 0xc0534402, 0x01082b83, 0x92424000,
-    0x09a60611, 0x32220800, 0x1bddb384, 0xc08af000,
-    } },
-    { { /* 202 */
-    0x00020282, 0x6c008800, 0x00219200, 0x8c844180,
-    0x09441308, 0x000007a7, 0x0c418051, 0x00d06002,
-    } },
-    { { /* 203 */
-    0x10d0a000, 0x44003004, 0x01000000, 0x07008201,
-    0x440e0100, 0x08056830, 0x051464b2, 0x441410e6,
-    } },
-    { { /* 204 */
-    0x21000011, 0xcbc09c08, 0x40c2e120, 0x41b4304c,
-    0x9a8310ac, 0x328198b2, 0x00849822, 0xbc123369,
-    } },
-    { { /* 205 */
-    0xc03bd6c0, 0x0c53a1a1, 0xea008a1e, 0x05d8cbf0,
-    0x21c34390, 0x4a1c4805, 0x324002d0, 0xd79d0041,
-    } },
-    { { /* 206 */
-    0xe8b02b09, 0x24527dc0, 0xd04bc240, 0xc8aba000,
-    0x34a98a80, 0x41c98000, 0x241f8010, 0x487b9200,
-    } },
-    { { /* 207 */
-    0x00cc0000, 0x33008406, 0x001b410f, 0x80402000,
-    0xa0988022, 0x006ba186, 0x85a42a30, 0x06044181,
-    } },
-    { { /* 208 */
-    0x00046021, 0xa0010080, 0x46b80400, 0x03a0e90f,
-    0x18200000, 0x081040a0, 0x0001380a, 0xa8000500,
-    } },
-    { { /* 209 */
-    0xc28a0404, 0x2720000a, 0x830c0910, 0x00000802,
-    0x10806211, 0x0808000c, 0x0c08000c, 0x08400000,
-    } },
-    { { /* 210 */
-    0x00441410, 0x6404000b, 0x800150c0, 0x8984047e,
-    0x41400658, 0x94a4c000, 0x09dca862, 0x00001800,
-    } },
-    { { /* 211 */
-    0x000a8100, 0x41900008, 0xe4a14007, 0x64452501,
-    0x0e7d11ee, 0xfb084800, 0x08a81616, 0x0009c92e,
-    } },
-    { { /* 212 */
-    0x4a821800, 0x6b6406a0, 0x16000002, 0x83905648,
-    0x002a73a0, 0x00248000, 0x470288f9, 0x0faa4d02,
-    } },
-    { { /* 213 */
-    0x8e800000, 0x7554b87b, 0xd9402418, 0x040cc880,
-    0xb0410000, 0x04428c24, 0x001a5a34, 0xc1108000,
-    } },
-    { { /* 214 */
-    0x00328046, 0x8106180d, 0xcd920002, 0x74016014,
-    0x00916112, 0x420ac098, 0x8420040f, 0x40029a13,
-    } },
-    { { /* 215 */
-    0xfd228a62, 0x40808188, 0x21031000, 0x31010808,
-    0x07044420, 0x0388b812, 0xa3008900, 0x22020000,
-    } },
-    { { /* 216 */
-    0x46001210, 0x00410042, 0x52415680, 0x200052f0,
-    0x82148610, 0x46021004, 0x8035430a, 0xd80060e0,
-    } },
-    { { /* 217 */
-    0x08010041, 0x6c653400, 0xab0411c1, 0x22040286,
-    0x00000003, 0x00009084, 0x02814015, 0x33000202,
-    } },
-    { { /* 218 */
-    0x38400400, 0xc0c00e20, 0x00850030, 0x0d250500,
-    0x81d04ad0, 0x020c2280, 0x6240b605, 0x62802679,
-    } },
-    { { /* 219 */
-    0x080802ea, 0x8579dd67, 0xdea0081b, 0x40008735,
-    0xd1000a8c, 0xa22505aa, 0x15108440, 0x0080404d,
-    } },
-    { { /* 220 */
-    0x8d220012, 0x058f1968, 0x3a1a9080, 0x85618464,
-    0x2002ccc0, 0x732e0820, 0x0b3420a4, 0x14150004,
-    } },
-    { { /* 221 */
-    0x82002001, 0x08000057, 0x00445004, 0x79051212,
-    0x000940d0, 0x84004000, 0xd844054c, 0x5114409a,
-    } },
-    { { /* 222 */
-    0x40000b12, 0x15800201, 0x08002001, 0xc200084a,
-    0x40020800, 0x98093020, 0x18800000, 0x0008e22c,
-    } },
-    { { /* 223 */
-    0x00040004, 0x001410e0, 0x20008020, 0x10009800,
-    0x00827082, 0x1c000288, 0x00014c22, 0x08209100,
-    } },
-    { { /* 224 */
-    0x00404002, 0x44001c00, 0x7cc10383, 0x84002121,
-    0x0002e002, 0xe20a44c0, 0x81260e03, 0x080002d0,
-    } },
-    { { /* 225 */
-    0x96902921, 0xb8c24001, 0x00806241, 0xa6510a06,
-    0x812c0112, 0x0400c600, 0xa2800cb0, 0x8640a429,
-    } },
-    { { /* 226 */
-    0x4a028000, 0x02003041, 0x0057ba40, 0x20205001,
-    0x24b08880, 0x01122002, 0x000402d3, 0x00000211,
-    } },
-    { { /* 227 */
-    0x40040080, 0xe0000c82, 0x00003008, 0x00081011,
-    0x81a40208, 0x420e40a0, 0xc0400400, 0x48000081,
-    } },
-    { { /* 228 */
-    0x0f912df5, 0x0629d807, 0x4001007c, 0x824e4546,
-    0x1008c000, 0xed363005, 0x65400c80, 0x0810930b,
-    } },
-    { { /* 229 */
-    0xe8200600, 0x6082c80a, 0x403400ca, 0x12012e02,
-    0x19489004, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 230 */
-    0x00000000, 0x05400000, 0x00311000, 0x02a54c00,
-    0x44105520, 0x23040310, 0x80345422, 0x12010a03,
-    } },
-    { { /* 231 */
-    0x01a1126b, 0xa0482000, 0x45400448, 0xe08d8000,
-    0x28401af0, 0x04168626, 0x4c005018, 0x21120032,
-    } },
-    { { /* 232 */
-    0x0d0005e4, 0x42008a08, 0x00334800, 0x87030860,
-    0x34008501, 0xe4280109, 0x81002045, 0x5c1825a8,
-    } },
-    { { /* 233 */
-    0xd80435a0, 0x02e01c02, 0x020000a1, 0x4146c050,
-    0xa6046800, 0xbb8af260, 0xc8b60000, 0x600200e2,
-    } },
-    { { /* 234 */
-    0x0080023e, 0x03728900, 0x00068681, 0x08880000,
-    0x41404600, 0x20000e04, 0x10481622, 0x22178a00,
-    } },
-    { { /* 235 */
-    0x00007418, 0x21021200, 0x08800200, 0x0420984a,
-    0x12110000, 0x99040002, 0x04022a55, 0x10105000,
-    } },
-    { { /* 236 */
-    0x459a0000, 0xa000b02a, 0x0208420a, 0x00002708,
-    0x08128090, 0x04018740, 0x3020e202, 0x8c800630,
-    } },
-    { { /* 237 */
-    0x04c004c4, 0x80002000, 0xd8314000, 0x02000080,
-    0x00081400, 0x00000218, 0x8a100880, 0x40002010,
-    } },
-    { { /* 238 */
-    0x1500010d, 0x00000000, 0x80a04000, 0x01500140,
-    0x80002004, 0x04080004, 0x00000010, 0x4a049001,
-    } },
-    { { /* 239 */
-    0x80000020, 0x0842000c, 0x2a8c3041, 0xc085090e,
-    0x40c42906, 0x00100800, 0xb2308006, 0x21380102,
-    } },
-    { { /* 240 */
-    0x030d0080, 0x09400420, 0x80000012, 0x80040410,
-    0x004888ca, 0x24040602, 0x00040001, 0x01100008,
-    } },
-    { { /* 241 */
-    0xa9c8550d, 0x0c522428, 0x48310000, 0x022f624d,
-    0x412830a0, 0xd205057b, 0x1844a894, 0x45c26cc2,
-    } },
-    { { /* 242 */
-    0x2ed14017, 0x02081901, 0x1500c202, 0x20919040,
-    0x044d0401, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 243 */
-    0x00000000, 0x80800000, 0x04201542, 0x06000c02,
-    0x60001404, 0xb9d99f87, 0x540a059f, 0x3810245d,
-    } },
-    { { /* 244 */
-    0x004825b0, 0x00000000, 0x00000000, 0x00990850,
-    0x02000420, 0x44080108, 0x28009840, 0x0008810a,
-    } },
-    { { /* 245 */
-    0x40018400, 0x00210400, 0x82000794, 0x00500001,
-    0x00002482, 0x00001c00, 0x80043c01, 0x49000800,
-    } },
-    { { /* 246 */
-    0xf83c0228, 0xcb0886c0, 0xa0006230, 0x00000004,
-    0x18000000, 0x0007a148, 0x00124024, 0x22852c40,
-    } },
-    { { /* 247 */
-    0xe6b3a96f, 0x5126400f, 0x723b6c86, 0xb5a4e20b,
-    0x0222859f, 0x0123854c, 0x40000402, 0x20202102,
-    } },
-    { { /* 248 */
-    0x02240004, 0x00042080, 0x00047e00, 0x01a01604,
-    0x10042a80, 0x0032d800, 0x3183fa81, 0x00200488,
-    } },
-    { { /* 249 */
-    0x40872000, 0x84100000, 0x48800221, 0x00000074,
-    0x114a0029, 0x02c80000, 0x00049000, 0x11000410,
-    } },
-    { { /* 250 */
-    0xc5010010, 0x0000c957, 0x08102d00, 0x50204000,
-    0x04501000, 0x00013088, 0x40020008, 0x00400012,
-    } },
-    { { /* 251 */
-    0x01000010, 0x01200820, 0x08060010, 0xa0000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 252 */
-    0x00000000, 0x00000000, 0x00000000, 0x00800000,
-    0x011e8a09, 0x18022138, 0x10700480, 0x00000006,
-    } },
-    { { /* 253 */
-    0x10000000, 0x88044402, 0xf8013815, 0x21e9041c,
-    0x1b306c60, 0x08820588, 0x1a607af3, 0x0ac5870c,
-    } },
-    { { /* 254 */
-    0x524a00c1, 0x22050080, 0x50420114, 0x04902206,
-    0x0000a800, 0x00002901, 0x10080840, 0x88480000,
-    } },
-    { { /* 255 */
-    0x018f156f, 0x0b012000, 0x45107040, 0x000088a0,
-    0x00000000, 0x00028100, 0x98000090, 0x7010e006,
-    } },
-    { { /* 256 */
-    0x41091608, 0x00000101, 0x00963a20, 0x00000000,
-    0x22400000, 0x021a7120, 0xa2270002, 0x80022000,
-    } },
-    { { /* 257 */
-    0x0200c102, 0x00c10800, 0x8ca02029, 0x00000624,
-    0x00000000, 0x01000100, 0x01180000, 0x00004020,
-    } },
-    { { /* 258 */
-    0x04000000, 0x10020480, 0x0410803e, 0x00008000,
-    0x80024000, 0x00004800, 0x00400200, 0x00000110,
-    } },
-    { { /* 259 */
-    0x00252000, 0x08040020, 0x00800280, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x005802a0,
-    } },
-    { { /* 260 */
-    0x08000200, 0x08000140, 0x20020000, 0x00041003,
-    0x00000000, 0x00108200, 0x00800010, 0x07040000,
-    } },
-    { { /* 261 */
-    0x44000000, 0x00000000, 0x00000000, 0xa2200000,
-    0xa08c0000, 0x48300020, 0x59126008, 0x00100100,
-    } },
-    { { /* 262 */
-    0x00084180, 0x08000001, 0x80044c00, 0x00801482,
-    0x10212000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 263 */
-    0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
-    0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
-    } },
-    { { /* 264 */
-    0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
-    0xffffffff, 0x0000000f, 0x00000000, 0x00000000,
-    } },
-    { { /* 265 */
-    0x00000fff, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 266 */
-    0x00000000, 0x00000000, 0x00820000, 0x00820000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 267 */
-    0xffff0000, 0xffff27bf, 0x000027bf, 0x00000000,
-    0x00000000, 0x0c000000, 0x03000000, 0x000000c0,
-    } },
-    { { /* 268 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 269 */
-    0xffff0042, 0xffffffff, 0x0042ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x000000c0,
-    } },
-    { { /* 270 */
-    0x00000000, 0x000c0000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 271 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00000000, 0x0000c00c, 0x00000000, 0x00000000,
-    } },
-    { { /* 272 */
-    0x000c0003, 0x00003c00, 0x0000f000, 0x00003c00,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 273 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x98504f14, 0x18504f14,
-    } },
-    { { /* 274 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x00000000,
-    } },
-    { { /* 275 */
-    0x03c03030, 0x0000c000, 0x00000000, 0x600c0c03,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 276 */
-    0x000c3003, 0x18c00c0c, 0x00c03060, 0x60000c03,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 277 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00100002, 0x00100002,
-    } },
-    { { /* 278 */
-    0x00000003, 0x18000000, 0x00003060, 0x00000c00,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 279 */
-    0x00000000, 0x00300000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 280 */
-    0xfdffb729, 0x000001ff, 0xb7290000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 281 */
-    0xfffddfec, 0xc3fffdff, 0x00803dcf, 0x0000ffc3,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 282 */
-    0x00000000, 0xffffffff, 0xffffffff, 0x00ffffff,
-    0xffffffff, 0x000003ff, 0x00000000, 0x00000000,
-    } },
-    { { /* 283 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00004004, 0x00004004,
-    } },
-    { { /* 284 */
-    0x0f000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 285 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x02045101, 0x02045101,
-    } },
-    { { /* 286 */
-    0x00000c00, 0x000000c3, 0x00000000, 0x18000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 287 */
-    0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 288 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x011c0661, 0x011c0661,
-    } },
-    { { /* 289 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x1c58af16, 0x1c58af16,
-    } },
-    { { /* 290 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x115c0671, 0x115c0671,
-    } },
-    { { /* 291 */
-    0x00000000, 0x00000000, 0x00000000, 0x00300000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 292 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x040c2383, 0x040c2383,
-    } },
-    { { /* 293 */
-    0xfff99fee, 0xf3cdfdff, 0xb0c0398f, 0x0001ffc3,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 294 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00080000, 0x00080000,
-    } },
-    { { /* 295 */
-    0x030000f0, 0x00000000, 0x0c00001e, 0x1e000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 296 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x143c278f, 0x143c278f,
-    } },
-    { { /* 297 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x02045301, 0x02045301,
-    } },
-    { { /* 298 */
-    0xffff0042, 0xffffffff, 0x0042ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 299 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00300000, 0x0c00c030, 0x03000000, 0x00000000,
-    } },
-    { { /* 300 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00800000, 0x00000000, 0x00000000,
-    } },
-    { { /* 301 */
-    0x30000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00040000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 302 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000002, 0x00000002,
-    } },
-    { { /* 303 */
-    0x00033000, 0x00000000, 0x00000c00, 0x600000c3,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 304 */
-    0xffff8f04, 0xffffffff, 0x8f04ffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 305 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfc7fffe0, 0x2ffbffff, 0xff5f807f, 0x001c0000,
-    } },
-    { { /* 306 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x24182212, 0x24182212,
-    } },
-    { { /* 307 */
-    0x0000f000, 0x66000000, 0x00300180, 0x60000033,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 308 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00408030, 0x00408030,
-    } },
-    { { /* 309 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00020032, 0x00020032,
-    } },
-    { { /* 310 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000016, 0x00000016,
-    } },
-    { { /* 311 */
-    0x00033000, 0x00000000, 0x00000c00, 0x60000003,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 312 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00200034, 0x00200034,
-    } },
-    { { /* 313 */
-    0x00033000, 0x00000000, 0x00000c00, 0x60000003,
-    0x00000000, 0x00800000, 0x00000000, 0x0000c3f0,
-    } },
-    { { /* 314 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00040000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 315 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00000880, 0x00000880,
-    } },
-    { { /* 316 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10400a33, 0x10400a33,
-    } },
-    { { /* 317 */
-    0xffff0000, 0xffff1fff, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 318 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xd63dc7ec, 0xc3bfc718, 0x00803dc7, 0x0007ff80,
-    } },
-    { { /* 319 */
-    0xfffddfee, 0xc3effdff, 0x00603ddf, 0x0000ffc3,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 320 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x0c0c0000, 0x00cc0000, 0x00000000, 0x0000c00c,
-    } },
-    { { /* 321 */
-    0xfffffffe, 0x87ffffff, 0x0fffffff, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 322 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00c00000, 0x0000c00c, 0x03000000, 0x00000000,
-    } },
-    { { /* 323 */
-    0x000fdfff, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 324 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00100400, 0x00100400,
-    } },
-    { { /* 325 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x18404084, 0x18404084,
-    } },
-    { { /* 326 */
-    0xc0000000, 0x00030000, 0xc0000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 327 */
-    0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000,
-    0x00c00000, 0x0c00c00c, 0x03000000, 0x00000000,
-    } },
-    { { /* 328 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00220008, 0x00220008,
-    } },
-    { { /* 329 */
-    0x00000000, 0x00000300, 0x00000000, 0x00000300,
-    0x00010040, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 330 */
-    0x00000000, 0x00000000, 0x08100000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 331 */
-    0x00000048, 0x00000200, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 332 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x30000000, 0x00000000, 0x03000000,
-    } },
-    { { /* 333 */
-    0xffff00d0, 0xffffffff, 0x00d0ffff, 0x00000000,
-    0x00030000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 334 */
-    0xffff0002, 0xffffe5ff, 0x0002e5ff, 0x00000000,
-    0x0c0c0000, 0x000c0000, 0x00000000, 0x00030000,
-    } },
-    { { /* 335 */
-    0x000c0000, 0x30000000, 0x00000c30, 0x00030000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 336 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x263c370f, 0x263c370f,
-    } },
-    { { /* 337 */
-    0x0003000c, 0x00000300, 0x00000000, 0x00000300,
-    0x00000000, 0x00018003, 0x00000000, 0x00000000,
-    } },
-    { { /* 338 */
-    0x0800024f, 0x00000008, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 339 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0xffffffff, 0xffffffff, 0x03ffffff,
-    } },
-    { { /* 340 */
-    0x00000000, 0x00000000, 0x077dfffe, 0x077dfffe,
-    0x00000000, 0x00000000, 0x10400010, 0x10400010,
-    } },
-    { { /* 341 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x10400010, 0x10400010,
-    } },
-    { { /* 342 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x081047a4, 0x081047a4,
-    } },
-    { { /* 343 */
-    0x0c0030c0, 0x00000000, 0x0f30001e, 0x66000003,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 344 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x000a0a09, 0x000a0a09,
-    } },
-    { { /* 345 */
-    0x00000000, 0x00000000, 0x00000c00, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 346 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x00400810, 0x00400810,
-    } },
-    { { /* 347 */
-    0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe,
-    0x00000000, 0x00000000, 0x0e3c770f, 0x0e3c770f,
-    } },
-    { { /* 348 */
-    0x0c000000, 0x00000300, 0x00000018, 0x00000300,
-    0x00000000, 0x00000000, 0x001fe000, 0x03000000,
-    } },
-    { { /* 349 */
-    0x0000100f, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 350 */
-    0x00000000, 0xc0000000, 0x00000000, 0x0000000c,
-    0x00000000, 0x33000000, 0x00003000, 0x00000000,
-    } },
-    { { /* 351 */
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000280, 0x00000000,
-    } },
-    { { /* 352 */
-    0x7f7b7f8b, 0xef553db4, 0xf35dfba8, 0x400b0243,
-    0x8d3efb40, 0x8c2c7bf7, 0xe3fa6eff, 0xa8ed1d3a,
-    } },
-    { { /* 353 */
-    0xcf83e602, 0x35558cf5, 0xffabe048, 0xd85992b9,
-    0x2892ab18, 0x8020d7e9, 0xf583c438, 0x450ae74a,
-    } },
-    { { /* 354 */
-    0x9714b000, 0x54007762, 0x1420d188, 0xc8c01020,
-    0x00002121, 0x0c0413a8, 0x04408000, 0x082870c0,
-    } },
-    { { /* 355 */
-    0x000408c0, 0x80000002, 0x14722b7b, 0x3bfb7924,
-    0x1ae43327, 0x38ef9835, 0x28029ad1, 0xbf69a813,
-    } },
-    { { /* 356 */
-    0x2fc665cf, 0xafc96b11, 0x5053340f, 0xa00486a2,
-    0xe8090106, 0xc00e3f0f, 0x81450a88, 0xc6010010,
-    } },
-    { { /* 357 */
-    0x26e1a161, 0xce00444b, 0xd4eec7aa, 0x85bbcadf,
-    0xa5203a74, 0x8840436c, 0x8bd23f06, 0x3befff79,
-    } },
-    { { /* 358 */
-    0xe8eff75a, 0x5b36fbcb, 0x1bfd0d49, 0x39ee0154,
-    0x2e75d855, 0xa91abfd8, 0xf6bff3d7, 0xb40c67e0,
-    } },
-    { { /* 359 */
-    0x081382c2, 0xd08bd49d, 0x1061065a, 0x59e074f2,
-    0xb3128f9f, 0x6aaa0080, 0xb05e3230, 0x60ac9d7a,
-    } },
-    { { /* 360 */
-    0xc900d303, 0x8a563098, 0x13907000, 0x18421f14,
-    0x0008c060, 0x10808008, 0xec900400, 0xe6332817,
-    } },
-    { { /* 361 */
-    0x90000758, 0x4e09f708, 0xfc83f485, 0x18c8af53,
-    0x080c187c, 0x01146adf, 0xa734c80c, 0x2710a011,
-    } },
-    { { /* 362 */
-    0x422228c5, 0x00210413, 0x41123010, 0x40001820,
-    0xc60c022b, 0x10000300, 0x00220022, 0x02495810,
-    } },
-    { { /* 363 */
-    0x9670a094, 0x1792eeb0, 0x05f2cb96, 0x23580025,
-    0x42cc25de, 0x4a04cf38, 0x359f0c40, 0x8a001128,
-    } },
-    { { /* 364 */
-    0x910a13fa, 0x10560229, 0x04200641, 0x84f00484,
-    0x0c040000, 0x412c0400, 0x11541206, 0x00020a4b,
-    } },
-    { { /* 365 */
-    0x00c00200, 0x00940000, 0xbfbb0001, 0x242b167c,
-    0x7fa89bbb, 0xe3790c7f, 0xe00d10f4, 0x9f014132,
-    } },
-    { { /* 366 */
-    0x35728652, 0xff1210b4, 0x4223cf27, 0x8602c06b,
-    0x1fd33106, 0xa1aa3a0c, 0x02040812, 0x08012572,
-    } },
-    { { /* 367 */
-    0x485040cc, 0x601062d0, 0x29001c80, 0x00109a00,
-    0x22000004, 0x00800000, 0x68002020, 0x609ecbe6,
-    } },
-    { { /* 368 */
-    0x3f73916e, 0x398260c0, 0x48301034, 0xbd5c0006,
-    0xd6fb8cd1, 0x43e820e1, 0x084e0600, 0xc4d00500,
-    } },
-    { { /* 369 */
-    0x89aa8d1f, 0x1602a6e1, 0x21ed0001, 0x1a8b3656,
-    0x13a51fb7, 0x30a06502, 0x23c7b278, 0xe9226c93,
-    } },
-    { { /* 370 */
-    0x3a74e47f, 0x98208fe3, 0x2625280e, 0xbf49bf9c,
-    0xac543218, 0x1916b949, 0xb5220c60, 0x0659fbc1,
-    } },
-    { { /* 371 */
-    0x8420e343, 0x800008d9, 0x20225500, 0x00a10184,
-    0x20104800, 0x40801380, 0x00160d04, 0x80200040,
-    } },
-    { { /* 372 */
-    0x8de7fd40, 0xe0985436, 0x091e7b8b, 0xd249fec8,
-    0x8dee0611, 0xba221937, 0x9fdd77f4, 0xf0daf3ec,
-    } },
-    { { /* 373 */
-    0xec424386, 0x26048d3f, 0xc021fa6c, 0x0cc2628e,
-    0x0145d785, 0x559977ad, 0x4045e250, 0xa154260b,
-    } },
-    { { /* 374 */
-    0x58199827, 0xa4103443, 0x411405f2, 0x07002280,
-    0x426600b4, 0x15a17210, 0x41856025, 0x00000054,
-    } },
-    { { /* 375 */
-    0x01040201, 0xcb70c820, 0x6a629320, 0x0095184c,
-    0x9a8b1880, 0x3201aab2, 0x00c4d87a, 0x04c3f3e5,
-    } },
-    { { /* 376 */
-    0xa238d44d, 0x5072a1a1, 0x84fc980a, 0x44d1c152,
-    0x20c21094, 0x42104180, 0x3a000000, 0xd29d0240,
-    } },
-    { { /* 377 */
-    0xa8b12f01, 0x2432bd40, 0xd04bd34d, 0xd0ada723,
-    0x75a10a92, 0x01e9adac, 0x771f801a, 0xa01b9225,
-    } },
-    { { /* 378 */
-    0x20cadfa1, 0x738c0602, 0x003b577f, 0x00d00bff,
-    0x0088806a, 0x0029a1c4, 0x05242a05, 0x16234009,
-    } },
-    { { /* 379 */
-    0x80056822, 0xa2112011, 0x64900004, 0x13824849,
-    0x193023d5, 0x08922980, 0x88115402, 0xa0042001,
-    } },
-    { { /* 380 */
-    0x81800400, 0x60228502, 0x0b010090, 0x12020022,
-    0x00834011, 0x00001a01, 0x00000000, 0x00000000,
-    } },
-    { { /* 381 */
-    0x00000000, 0x4684009f, 0x020012c8, 0x1a0004fc,
-    0x0c4c2ede, 0x80b80402, 0x0afca826, 0x22288c02,
-    } },
-    { { /* 382 */
-    0x8f7ba0e0, 0x2135c7d6, 0xf8b106c7, 0x62550713,
-    0x8a19936e, 0xfb0e6efa, 0x48f91630, 0x7debcd2f,
-    } },
-    { { /* 383 */
-    0x4e845892, 0x7a2e4ca0, 0x561eedea, 0x1190c649,
-    0xe83a5324, 0x8124cfdb, 0x634218f1, 0x1a8a5853,
-    } },
-    { { /* 384 */
-    0x24d37420, 0x0514aa3b, 0x89586018, 0xc0004800,
-    0x91018268, 0x2cd684a4, 0xc4ba8886, 0x02100377,
-    } },
-    { { /* 385 */
-    0x00388244, 0x404aae11, 0x510028c0, 0x15146044,
-    0x10007310, 0x02480082, 0x40060205, 0x0000c003,
-    } },
-    { { /* 386 */
-    0x0c020000, 0x02200008, 0x40009000, 0xd161b800,
-    0x32744621, 0x3b8af800, 0x8b00050f, 0x2280bbd0,
-    } },
-    { { /* 387 */
-    0x07690600, 0x00438040, 0x50005420, 0x250c41d0,
-    0x83108410, 0x02281101, 0x00304008, 0x020040a1,
-    } },
-    { { /* 388 */
-    0x20000040, 0xabe31500, 0xaa443180, 0xc624c2c6,
-    0x8004ac13, 0x03d1b000, 0x4285611e, 0x1d9ff303,
-    } },
-    { { /* 389 */
-    0x78e8440a, 0xc3925e26, 0x00852000, 0x4000b001,
-    0x88424a90, 0x0c8dca04, 0x4203a705, 0x000422a1,
-    } },
-    { { /* 390 */
-    0x0c018668, 0x10795564, 0xdea00002, 0x40c12000,
-    0x5001488b, 0x04000380, 0x50040000, 0x80d0c05d,
-    } },
-    { { /* 391 */
-    0x970aa010, 0x4dafbb20, 0x1e10d921, 0x83140460,
-    0xa6d68848, 0x733fd83b, 0x497427bc, 0x92130ddc,
-    } },
-    { { /* 392 */
-    0x8ba1142b, 0xd1392e75, 0x50503009, 0x69008808,
-    0x024a49d4, 0x80164010, 0x89d7e564, 0x5316c020,
-    } },
-    { { /* 393 */
-    0x86002b92, 0x15e0a345, 0x0c03008b, 0xe200196e,
-    0x80067031, 0xa82916a5, 0x18802000, 0xe1487aac,
-    } },
-    { { /* 394 */
-    0xb5d63207, 0x5f9132e8, 0x20e550a1, 0x10807c00,
-    0x9d8a7280, 0x421f00aa, 0x02310e22, 0x04941100,
-    } },
-    { { /* 395 */
-    0x40080022, 0x5c100010, 0xfcc80343, 0x0580a1a5,
-    0x04008433, 0x6e080080, 0x81262a4b, 0x2901aad8,
-    } },
-    { { /* 396 */
-    0x4490684d, 0xba880009, 0x00820040, 0x87d10000,
-    0xb1e6215b, 0x80083161, 0xc2400800, 0xa600a069,
-    } },
-    { { /* 397 */
-    0x4a328d58, 0x550a5d71, 0x2d579aa0, 0x4aa64005,
-    0x30b12021, 0x01123fc6, 0x260a10c2, 0x50824462,
-    } },
-    { { /* 398 */
-    0x80409880, 0x810004c0, 0x00002003, 0x38180000,
-    0xf1a60200, 0x720e4434, 0x92e035a2, 0x09008101,
-    } },
-    { { /* 399 */
-    0x00000400, 0x00008885, 0x00000000, 0x00804000,
-    0x00000000, 0x00004040, 0x00000000, 0x00000000,
-    } },
-    { { /* 400 */
-    0x00000000, 0x08000000, 0x00000082, 0x00000000,
-    0x88000004, 0xe7efbfff, 0xffbfffff, 0xfdffefef,
-    } },
-    { { /* 401 */
-    0xbffefbff, 0x057fffff, 0x85b30034, 0x42164706,
-    0xe4105402, 0xb3058092, 0x81305422, 0x180b4263,
-    } },
-    { { /* 402 */
-    0x13f5387b, 0xa9ea07e5, 0x05143c4c, 0x80020600,
-    0xbd481ad9, 0xf496ee37, 0x7ec0705f, 0x355fbfb2,
-    } },
-    { { /* 403 */
-    0x455fe644, 0x41469000, 0x063b1d40, 0xfe1362a1,
-    0x39028505, 0x0c080548, 0x0000144f, 0x58183488,
-    } },
-    { { /* 404 */
-    0xd8153077, 0x4bfbbd0e, 0x85008a90, 0xe61dc100,
-    0xb386ed14, 0x639bff72, 0xd9befd92, 0x0a92887b,
-    } },
-    { { /* 405 */
-    0x1cb2d3fe, 0x177ab980, 0xdc1782c9, 0x3980fffb,
-    0x590c4260, 0x37df0f01, 0xb15094a3, 0x23070623,
-    } },
-    { { /* 406 */
-    0x3102f85a, 0x310201f0, 0x1e820040, 0x056a3a0a,
-    0x12805b84, 0xa7148002, 0xa04b2612, 0x90011069,
-    } },
-    { { /* 407 */
-    0x848a1000, 0x3f801802, 0x42400708, 0x4e140110,
-    0x180080b0, 0x0281c510, 0x10298202, 0x88000210,
-    } },
-    { { /* 408 */
-    0x00420020, 0x11000280, 0x4413e000, 0xfe025804,
-    0x30283c07, 0x04739798, 0xcb13ced1, 0x431f6210,
-    } },
-    { { /* 409 */
-    0x55ac278d, 0xc892422e, 0x02885380, 0x78514039,
-    0x8088292c, 0x2428b900, 0x080e0c41, 0x42004421,
-    } },
-    { { /* 410 */
-    0x08680408, 0x12040006, 0x02903031, 0xe0855b3e,
-    0x10442936, 0x10822814, 0x83344266, 0x531b013c,
-    } },
-    { { /* 411 */
-    0x0e0d0404, 0x00510c22, 0xc0000012, 0x88000040,
-    0x0000004a, 0x00000000, 0x5447dff6, 0x00088868,
-    } },
-    { { /* 412 */
-    0x00000081, 0x40000000, 0x00000100, 0x02000000,
-    0x00080600, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 413 */
-    0x00000080, 0x00000040, 0x00000000, 0x00001040,
-    0x00000000, 0xf7fdefff, 0xfffeff7f, 0xfffffbff,
-    } },
-    { { /* 414 */
-    0xbffffdff, 0x00ffffff, 0x042012c2, 0x07080c06,
-    0x01101624, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 415 */
-    0xe0000000, 0xfffffffe, 0x7f79ffff, 0x00f928df,
-    0x80120c32, 0xd53a0008, 0xecc2d858, 0x2fa89d18,
-    } },
-    { { /* 416 */
-    0xe0109620, 0x2622d60c, 0x02060f97, 0x9055b240,
-    0x501180a2, 0x04049800, 0x00004000, 0x00000000,
-    } },
-    { { /* 417 */
-    0x00000000, 0x00000000, 0x00000000, 0xfffffbc0,
-    0xdffbeffe, 0x62430b08, 0xfb3b41b6, 0x23896f74,
-    } },
-    { { /* 418 */
-    0xecd7ae7f, 0x5960e047, 0x098fa096, 0xa030612c,
-    0x2aaa090d, 0x4f7bd44e, 0x388bc4b2, 0x6110a9c6,
-    } },
-    { { /* 419 */
-    0x42000014, 0x0202800c, 0x6485fe48, 0xe3f7d63e,
-    0x0c073aa0, 0x0430e40c, 0x1002f680, 0x00000000,
-    } },
-    { { /* 420 */
-    0x00000000, 0x00000000, 0x00000000, 0x00100000,
-    0x00004000, 0x00004000, 0x00000100, 0x00000000,
-    } },
-    { { /* 421 */
-    0x00000000, 0x40000000, 0x00000000, 0x00000400,
-    0x00008000, 0x00000000, 0x00400400, 0x00000000,
-    } },
-    { { /* 422 */
-    0x00000000, 0x40000000, 0x00000000, 0x00000800,
-    0xfebdffe0, 0xffffffff, 0xfbe77f7f, 0xf7ffffbf,
-    } },
-    { { /* 423 */
-    0xefffffff, 0xdff7ff7e, 0xfbdff6f7, 0x804fbffe,
-    0x00000000, 0x00000000, 0x00000000, 0x7fffef00,
-    } },
-    { { /* 424 */
-    0xb6f7ff7f, 0xb87e4406, 0x88313bf5, 0x00f41796,
-    0x1391a960, 0x72490080, 0x0024f2f3, 0x42c88701,
-    } },
-    { { /* 425 */
-    0x5048e3d3, 0x43052400, 0x4a4c0000, 0x10580227,
-    0x01162820, 0x0014a809, 0x00000000, 0x00683ec0,
-    } },
-    { { /* 426 */
-    0x00000000, 0x00000000, 0x00000000, 0xffe00000,
-    0xfddbb7ff, 0x000000f7, 0xc72e4000, 0x00000180,
-    } },
-    { { /* 427 */
-    0x00012000, 0x00004000, 0x00300000, 0xb4f7ffa8,
-    0x03ffadf3, 0x00000120, 0x00000000, 0x00000000,
-    } },
-    { { /* 428 */
-    0x00000000, 0x00000000, 0x00000000, 0xfffbf000,
-    0xfdcf9df7, 0x15c301bf, 0x810a1827, 0x0a00a842,
-    } },
-    { { /* 429 */
-    0x80088108, 0x18048008, 0x0012a3be, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 430 */
-    0x00000000, 0x00000000, 0x00000000, 0x90000000,
-    0xdc3769e6, 0x3dff6bff, 0xf3f9fcf8, 0x00000004,
-    } },
-    { { /* 431 */
-    0x80000000, 0xe7eebf6f, 0x5da2dffe, 0xc00b3fd8,
-    0xa00c0984, 0x69100040, 0xb912e210, 0x5a0086a5,
-    } },
-    { { /* 432 */
-    0x02896800, 0x6a809005, 0x00030010, 0x80000000,
-    0x8e001ff9, 0x00000001, 0x00000000, 0x00000000,
-    } },
-    { { /* 433 */
-    0x14000010, 0xa0c09512, 0x0c000200, 0x01000400,
-    0x050002a3, 0x98800009, 0x00004000, 0x01004c00,
-    } },
-    { { /* 434 */
-    0x04800008, 0x02840300, 0x00000824, 0x00040000,
-    0x00000400, 0x20010904, 0x00001100, 0x22050030,
-    } },
-    { { /* 435 */
-    0x00000108, 0x08104000, 0x01400000, 0x00001040,
-    0x00010102, 0x10000040, 0x82012000, 0x10100002,
-    } },
-    { { /* 436 */
-    0x00006002, 0x00000800, 0x00400000, 0x02100401,
-    0x14400144, 0x013c4980, 0x880e8288, 0x50102014,
-    } },
-    { { /* 437 */
-    0x80000824, 0x101000c1, 0x02800000, 0x02080101,
-    0x04118000, 0x02200112, 0x00031020, 0x02000003,
-    } },
-    { { /* 438 */
-    0x00000002, 0x090c1090, 0xa0004004, 0x60102290,
-    0x00080000, 0x00414f45, 0x07071026, 0x40c00001,
-    } },
-    { { /* 439 */
-    0x04580000, 0x0014800a, 0x00002800, 0x00002600,
-    0x50988020, 0x02140018, 0x04013800, 0x00008008,
-    } },
-    { { /* 440 */
-    0x41082004, 0x80000928, 0x20080280, 0x020e0a00,
-    0x00010040, 0x16110200, 0x41800002, 0x08231400,
-    } },
-    { { /* 441 */
-    0x40020020, 0x0080202f, 0x2015a008, 0x1c000002,
-    0xc0040e00, 0x82028012, 0x00400000, 0x2002a004,
-    } },
-    { { /* 442 */
-    0x20200001, 0xa0040000, 0x8890004c, 0xc4000080,
-    0x10012500, 0x48100482, 0x60800110, 0x40008040,
-    } },
-    { { /* 443 */
-    0x00040008, 0x04000044, 0x90000091, 0x000c1200,
-    0x06040000, 0x08610480, 0x10010800, 0x080d0001,
-    } },
-    { { /* 444 */
-    0x800204b4, 0x00140000, 0x00000000, 0x00200020,
-    0x84100200, 0x01811000, 0x02000210, 0x03018800,
-    } },
-    { { /* 445 */
-    0x04042804, 0x20001c92, 0x02100020, 0x4202490a,
-    0x02420146, 0x00000803, 0x0008c008, 0x44050010,
-    } },
-    { { /* 446 */
-    0x80222000, 0x00000800, 0x00008452, 0x10502140,
-    0xe0410005, 0x00000400, 0x00a00008, 0x80080000,
-    } },
-    { { /* 447 */
-    0x50180020, 0x00000009, 0x40080600, 0x00000000,
-    0x56000020, 0x04000000, 0x00020006, 0x00208220,
-    } },
-    { { /* 448 */
-    0x01210000, 0x40009000, 0x08c00140, 0x08110000,
-    0x00004820, 0x02400810, 0x08800002, 0x00200000,
-    } },
-    { { /* 449 */
-    0x00040a00, 0x00004000, 0x40000104, 0x84000000,
-    0x02040048, 0x20000000, 0x00012000, 0x1b100000,
-    } },
-    { { /* 450 */
-    0x00007000, 0x04000020, 0x10032000, 0x0804000a,
-    0x00000008, 0x04020090, 0x88000014, 0x00000000,
-    } },
-    { { /* 451 */
-    0x00000000, 0x08020008, 0x00040400, 0x40a00000,
-    0x40000000, 0x00080090, 0x40800000, 0x20000388,
-    } },
-    { { /* 452 */
-    0x02001080, 0x20010004, 0x12010004, 0x20008011,
-    0x13200082, 0x02800000, 0x04098001, 0x00000004,
-    } },
-    { { /* 453 */
-    0x00000000, 0x02801000, 0x00001000, 0x00000100,
-    0x20010024, 0x00000050, 0x80200028, 0x00000020,
-    } },
-    { { /* 454 */
-    0x01000000, 0x00a24000, 0x00000000, 0x82001010,
-    0x00000800, 0x02000000, 0x40020002, 0x59000044,
-    } },
-    { { /* 455 */
-    0x00000080, 0x0d040000, 0x04000000, 0x10020000,
-    0x00022000, 0x00508000, 0x20080001, 0x000004a2,
-    } },
-    { { /* 456 */
-    0xc0020400, 0x00310000, 0x80002000, 0x00002800,
-    0x00000b60, 0x40200000, 0x00120000, 0x80000009,
-    } },
-    { { /* 457 */
-    0x41000000, 0x00010008, 0x00880910, 0x20080888,
-    0x04044020, 0x80482010, 0x00006000, 0x00020000,
-    } },
-    { { /* 458 */
-    0x42405004, 0x00400020, 0x00000010, 0x00000886,
-    0x00008000, 0x80021011, 0x00c00000, 0x42000000,
-    } },
-    { { /* 459 */
-    0x4801201f, 0x40c00004, 0x20600480, 0x00000020,
-    0x01000110, 0x22400040, 0x00000428, 0x00000000,
-    } },
-    { { /* 460 */
-    0x0f00020f, 0x40401000, 0x00200048, 0x000c0092,
-    0x81000421, 0x00040004, 0x00620001, 0x06000202,
-    } },
-    { { /* 461 */
-    0x14001808, 0x00083800, 0x008c1028, 0x04120028,
-    0x22008404, 0x40260880, 0x01100700, 0x00400000,
-    } },
-    { { /* 462 */
-    0x20000020, 0x00200000, 0x00840000, 0x04108000,
-    0x00000002, 0x00000000, 0x10000002, 0x04000402,
-    } },
-    { { /* 463 */
-    0x10000000, 0x26a20000, 0x05000200, 0x82204000,
-    0x80000000, 0x00048404, 0x80004800, 0x80000400,
-    } },
-    { { /* 464 */
-    0x00000064, 0x00000050, 0x18804000, 0x00060000,
-    0x00408002, 0x02020030, 0x00000000, 0x40000000,
-    } },
-    { { /* 465 */
-    0x01208414, 0x00000600, 0x02018000, 0x10400000,
-    0x04000840, 0x09200000, 0x2e000000, 0x04000304,
-    } },
-    { { /* 466 */
-    0x00c01810, 0x20100010, 0x10400010, 0x02100000,
-    0xa0000402, 0x48200000, 0x06080000, 0x01400000,
-    } },
-    { { /* 467 */
-    0x40000008, 0x00001000, 0x10112800, 0xc2a09080,
-    0x00008a02, 0x3a0000e9, 0x80611011, 0x40220000,
-    } },
-    { { /* 468 */
-    0x20000020, 0x48381a00, 0x00028421, 0x54ea0800,
-    0x01425100, 0x0490200c, 0x20020000, 0x00600800,
-    } },
-    { { /* 469 */
-    0x00e0c201, 0x00004810, 0x10a10001, 0x00000040,
-    0x80108084, 0x00042000, 0x00002000, 0x00000004,
-    } },
-    { { /* 470 */
-    0x00010014, 0x03005d00, 0x00008102, 0x00120000,
-    0x51009000, 0x04000480, 0x0021c200, 0x0a888056,
-    } },
-    { { /* 471 */
-    0xd2b60004, 0x13800000, 0x204803a8, 0x04501921,
-    0x0a003004, 0x02100010, 0x00091100, 0x01070080,
-    } },
-    { { /* 472 */
-    0x42004020, 0x08300000, 0x002a2444, 0x04046081,
-    0x40046008, 0x00120000, 0x10000108, 0x00000000,
-    } },
-    { { /* 473 */
-    0x00000084, 0x08001000, 0x0012e001, 0x045880c0,
-    0x00010000, 0x00800022, 0x02401000, 0x00000000,
-    } },
-    { { /* 474 */
-    0x4000d000, 0x00000850, 0x01000009, 0x0d840000,
-    0x01080000, 0x42008000, 0x20000828, 0x40100040,
-    } },
-    { { /* 475 */
-    0x51000100, 0x32000000, 0x001a0894, 0x04000040,
-    0x00002102, 0x03428000, 0x018c0080, 0x00234010,
-    } },
-    { { /* 476 */
-    0x00000040, 0x185c4000, 0x03000000, 0x40020004,
-    0xa20200c9, 0x00000220, 0x00101050, 0x00120004,
-    } },
-    { { /* 477 */
-    0x00000040, 0x44002400, 0x00000228, 0x20000020,
-    0x000a0008, 0x18010000, 0x3c08830c, 0x40000684,
-    } },
-    { { /* 478 */
-    0x80101800, 0x02000280, 0x0020000c, 0x08009004,
-    0x00040000, 0x0004000c, 0x00018000, 0x14001000,
-    } },
-    { { /* 479 */
-    0x08240000, 0x00200000, 0x20420014, 0x58112000,
-    0x10004048, 0x010050c0, 0x0408228c, 0x12282040,
-    } },
-    { { /* 480 */
-    0x00000000, 0x00000020, 0x24002000, 0x00000000,
-    0x00800a00, 0x00080910, 0x1019a000, 0x60200030,
-    } },
-    { { /* 481 */
-    0x00000080, 0x00000080, 0x08000000, 0x800050a0,
-    0x80044000, 0x04001010, 0x80008080, 0x00000000,
-    } },
-    { { /* 482 */
-    0x00000040, 0x00800000, 0x000c4283, 0x01020000,
-    0x00888000, 0x00104008, 0x20000000, 0x04000080,
-    } },
-    { { /* 483 */
-    0x20000104, 0x1802c021, 0x08100000, 0x0000004e,
-    0x80000001, 0x30c00080, 0x00000040, 0x00401200,
-    } },
-    { { /* 484 */
-    0x04945288, 0x00940400, 0x06400104, 0x10002000,
-    0x00080010, 0x00400420, 0x00000102, 0x00408010,
-    } },
-    { { /* 485 */
-    0x05000000, 0x40002240, 0x00100000, 0x0e400024,
-    0x00000080, 0x80000440, 0x01018410, 0xb1804004,
-    } },
-    { { /* 486 */
-    0x25000800, 0x20000000, 0x00800000, 0x0000804c,
-    0x10020020, 0x42001000, 0x00082000, 0x00002000,
-    } },
-    { { /* 487 */
-    0x11500020, 0x40004053, 0x11280500, 0x80060014,
-    0x004c0101, 0x60002008, 0x44000000, 0x01000036,
-    } },
-    { { /* 488 */
-    0x00010028, 0x01180000, 0x84041804, 0x00098000,
-    0x00800000, 0x00000000, 0x00400002, 0x10004001,
-    } },
-    { { /* 489 */
-    0x0051a004, 0x00008100, 0x00000024, 0x40041000,
-    0x00040000, 0x00042001, 0x00000000, 0x00008000,
-    } },
-    { { /* 490 */
-    0x00000000, 0x00000000, 0x00000000, 0x20030000,
-    0x00001840, 0x00020220, 0x04404002, 0x00204000,
-    } },
-    { { /* 491 */
-    0x01008010, 0x00002080, 0x40008064, 0x00004031,
-    0x10018090, 0x80304001, 0x000080a0, 0x80200040,
-    } },
-    { { /* 492 */
-    0x00000001, 0x00000010, 0x00102088, 0x00800020,
-    0x00120681, 0x100002a0, 0x00000042, 0x00000080,
-    } },
-    { { /* 493 */
-    0x10000000, 0x21000a00, 0x00000200, 0x40000080,
-    0x10110000, 0x00108200, 0x04000000, 0x00000400,
-    } },
-    { { /* 494 */
-    0x80001000, 0x80002000, 0x40003008, 0x00000204,
-    0x0801000a, 0x40000001, 0x00000000, 0x00000004,
-    } },
-    { { /* 495 */
-    0x00000000, 0x00000000, 0x00020000, 0x00000000,
-    0x88000000, 0x00002000, 0x08502000, 0x00840a00,
-    } },
-    { { /* 496 */
-    0x31061808, 0x00000000, 0x00000000, 0x04000000,
-    0x00000004, 0x00000240, 0x00100009, 0x00000000,
-    } },
-    { { /* 497 */
-    0x00004002, 0x04002500, 0x00008040, 0x40a20100,
-    0x00000001, 0x12412080, 0x04004008, 0x00042014,
-    } },
-    { { /* 498 */
-    0x02000000, 0x00012000, 0x10000402, 0x000040c0,
-    0x00080000, 0x5fe800a1, 0x04019402, 0x02000000,
-    } },
-    { { /* 499 */
-    0x00040100, 0x00880000, 0x00401000, 0x00001012,
-    0x00000000, 0x08004100, 0x00000010, 0x00000000,
-    } },
-    { { /* 500 */
-    0x00000000, 0x00000000, 0x52020000, 0x10410080,
-    0x00005000, 0x08400200, 0x80400010, 0x44400020,
-    } },
-    { { /* 501 */
-    0x00084100, 0x10200d02, 0xa1200012, 0x00804804,
-    0x00008212, 0xc6024000, 0x08100000, 0x205c1828,
-    } },
-    { { /* 502 */
-    0x00000088, 0x00031000, 0x8000013f, 0x21184b44,
-    0x100100f2, 0xa9002001, 0x08080840, 0x001b0001,
-    } },
-    { { /* 503 */
-    0x28800112, 0x400020f0, 0x0910200c, 0x0a0010a0,
-    0x80000020, 0x00000004, 0x1000000a, 0x00400000,
-    } },
-    { { /* 504 */
-    0x00000000, 0x00002000, 0x00000080, 0x81000000,
-    0x02c00020, 0x000004c5, 0x00000000, 0x00100100,
-    } },
-    { { /* 505 */
-    0x20000000, 0x01080000, 0x00400022, 0x08000200,
-    0x00408002, 0x20400028, 0x00000000, 0x00100000,
-    } },
-    { { /* 506 */
-    0x08000008, 0x00420002, 0xa0a20003, 0x00022000,
-    0x88000280, 0x65160000, 0x00040105, 0x00244041,
-    } },
-    { { /* 507 */
-    0x80300000, 0x00184008, 0x00000880, 0x00201140,
-    0x00000000, 0x02900000, 0x50004588, 0x00221043,
-    } },
-    { { /* 508 */
-    0x12004000, 0x0b800000, 0x20002405, 0x0000000c,
-    0x08000000, 0x11000410, 0x04000030, 0x00200043,
-    } },
-    { { /* 509 */
-    0x80011000, 0x18008042, 0x11000000, 0x00001008,
-    0x00008000, 0x24440000, 0x00800000, 0x80100005,
-    } },
-    { { /* 510 */
-    0x00108204, 0x02102400, 0x00010001, 0x80000200,
-    0xa080e80a, 0x00010000, 0x20008000, 0x80122200,
-    } },
-    { { /* 511 */
-    0x88211404, 0x04208041, 0x20088020, 0x18040000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 512 */
-    0x00401004, 0x02100002, 0x40014210, 0x50006000,
-    0x00080008, 0x20000820, 0x00100211, 0x10000000,
-    } },
-    { { /* 513 */
-    0x91005400, 0x00000000, 0x00000000, 0x08000000,
-    0x41610032, 0xa0029d44, 0x000000d2, 0x41020004,
-    } },
-    { { /* 514 */
-    0x00800104, 0x020000c0, 0x04090030, 0x80000204,
-    0x82004000, 0x00000020, 0x00000000, 0x00000000,
-    } },
-    { { /* 515 */
-    0x00000080, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 516 */
-    0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200,
-    0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a,
-    } },
-    { { /* 517 */
-    0x233fef37, 0xfd59b004, 0xfffff3ca, 0xfff9de9f,
-    0x7df7abff, 0x8eecc000, 0xffdbeebf, 0x45fad003,
-    } },
-    { { /* 518 */
-    0xdffefae1, 0x10abbfef, 0xfcaaffeb, 0x24fdef3f,
-    0x7f7678ad, 0xedfff00c, 0x2cfacff6, 0xeb6bf7f9,
-    } },
-    { { /* 519 */
-    0x95bf1ffd, 0xbfbf6677, 0xfeb43bfb, 0x11e27bae,
-    0x41bea681, 0x72c31435, 0x71917d70, 0x276b0003,
-    } },
-    { { /* 520 */
-    0x70cf57cb, 0x0def4732, 0xfc747eda, 0xbdb4fe06,
-    0x8bca3f9f, 0x58007e49, 0xebec228f, 0xddbb8a5c,
-    } },
-    { { /* 521 */
-    0xb6e7ef60, 0xf293a40f, 0x549e37bb, 0x9bafd04b,
-    0xf7d4c414, 0x0a1430b0, 0x88d02f08, 0x192fff7e,
-    } },
-    { { /* 522 */
-    0xfb07ffda, 0x7beb7ff1, 0x0010c5ef, 0xfdff99ff,
-    0x056779d7, 0xfdcbffe7, 0x4040c3ff, 0xbd8e6ff7,
-    } },
-    { { /* 523 */
-    0x0497dffa, 0x5bfff4c0, 0xd0e7ed7b, 0xf8e0047e,
-    0xb73eff9f, 0x882e7dfe, 0xbe7ffffd, 0xf6c483fe,
-    } },
-    { { /* 524 */
-    0xb8fdf357, 0xef7dd680, 0x47885767, 0xc3dfff7d,
-    0x37a9f0ff, 0x70fc7de0, 0xec9a3f6f, 0x86814cb3,
-    } },
-    { { /* 525 */
-    0xdd5c3f9e, 0x4819f70d, 0x0007fea3, 0x38ffaf56,
-    0xefb8980d, 0xb760403d, 0x9035d8ce, 0x3fff72bf,
-    } },
-    { { /* 526 */
-    0x7a117ff7, 0xabfff7bb, 0x6fbeff00, 0xfe72a93c,
-    0xf11bcfef, 0xf40adb6b, 0xef7ec3e6, 0xf6109b9c,
-    } },
-    { { /* 527 */
-    0x16f4f048, 0x5182feb5, 0x15bbc7b1, 0xfbdf6e87,
-    0x63cde43f, 0x7e7ec1ff, 0x7d5ffdeb, 0xfcfe777b,
-    } },
-    { { /* 528 */
-    0xdbea960b, 0x53e86229, 0xfdef37df, 0xbd8136f5,
-    0xfcbddc18, 0xffffd2e4, 0xffe03fd7, 0xabf87f6f,
-    } },
-    { { /* 529 */
-    0x6ed99bae, 0xf115f5fb, 0xbdfb79a9, 0xadaf5a3c,
-    0x1facdbba, 0x837971fc, 0xc35f7cf7, 0x0567dfff,
-    } },
-    { { /* 530 */
-    0x8467ff9a, 0xdf8b1534, 0x3373f9f3, 0x5e1af7bd,
-    0xa03fbf40, 0x01ebffff, 0xcfdddfc0, 0xabd37500,
-    } },
-    { { /* 531 */
-    0xeed6f8c3, 0xb7ff43fd, 0x42275eaf, 0xf6869bac,
-    0xf6bc27d7, 0x35b7f787, 0xe176aacd, 0xe29f49e7,
-    } },
-    { { /* 532 */
-    0xaff2545c, 0x61d82b3f, 0xbbb8fc3b, 0x7b7dffcf,
-    0x1ce0bf95, 0x43ff7dfd, 0xfffe5ff6, 0xc4ced3ef,
-    } },
-    { { /* 533 */
-    0xadbc8db6, 0x11eb63dc, 0x23d0df59, 0xf3dbbeb4,
-    0xdbc71fe7, 0xfae4ff63, 0x63f7b22b, 0xadbaed3b,
-    } },
-    { { /* 534 */
-    0x7efffe01, 0x02bcfff7, 0xef3932ff, 0x8005fffc,
-    0xbcf577fb, 0xfff7010d, 0xbf3afffb, 0xdfff0057,
-    } },
-    { { /* 535 */
-    0xbd7def7b, 0xc8d4db88, 0xed7cfff3, 0x56ff5dee,
-    0xac5f7e0d, 0xd57fff96, 0xc1403fee, 0xffe76ff9,
-    } },
-    { { /* 536 */
-    0x8e77779b, 0xe45d6ebf, 0x5f1f6fcf, 0xfedfe07f,
-    0x01fed7db, 0xfb7bff00, 0x1fdfffd4, 0xfffff800,
-    } },
-    { { /* 537 */
-    0x007bfb8f, 0x7f5cbf00, 0x07f3ffff, 0x3de7eba0,
-    0xfbd7f7bf, 0x6003ffbf, 0xbfedfffd, 0x027fefbb,
-    } },
-    { { /* 538 */
-    0xddfdfe40, 0xe2f9fdff, 0xfb1f680b, 0xaffdfbe3,
-    0xf7ed9fa4, 0xf80f7a7d, 0x0fd5eebe, 0xfd9fbb5d,
-    } },
-    { { /* 539 */
-    0x3bf9f2db, 0xebccfe7f, 0x73fa876a, 0x9ffc95fc,
-    0xfaf7109f, 0xbbcdddb7, 0xeccdf87e, 0x3c3ff366,
-    } },
-    { { /* 540 */
-    0xb03ffffd, 0x067ee9f7, 0xfe0696ae, 0x5fd7d576,
-    0xa3f33fd1, 0x6fb7cf07, 0x7f449fd1, 0xd3dd7b59,
-    } },
-    { { /* 541 */
-    0xa9bdaf3b, 0xff3a7dcf, 0xf6ebfbe0, 0xffffb401,
-    0xb7bf7afa, 0x0ffdc000, 0xff1fff7f, 0x95fffefc,
-    } },
-    { { /* 542 */
-    0xb5dc0000, 0x3f3eef63, 0x001bfb7f, 0xfbf6e800,
-    0xb8df9eef, 0x003fff9f, 0xf5ff7bd0, 0x3fffdfdb,
-    } },
-    { { /* 543 */
-    0x00bffdf0, 0xbbbd8420, 0xffdedf37, 0x0ff3ff6d,
-    0x5efb604c, 0xfafbfffb, 0x0219fe5e, 0xf9de79f4,
-    } },
-    { { /* 544 */
-    0xebfaa7f7, 0xff3401eb, 0xef73ebd3, 0xc040afd7,
-    0xdcff72bb, 0x2fd8f17f, 0xfe0bb8ec, 0x1f0bdda3,
-    } },
-    { { /* 545 */
-    0x47cf8f1d, 0xffdeb12b, 0xda737fee, 0xcbc424ff,
-    0xcbf2f75d, 0xb4edecfd, 0x4dddbff9, 0xfb8d99dd,
-    } },
-    { { /* 546 */
-    0xaf7bbb7f, 0xc959ddfb, 0xfab5fc4f, 0x6d5fafe3,
-    0x3f7dffff, 0xffdb7800, 0x7effb6ff, 0x022ffbaf,
-    } },
-    { { /* 547 */
-    0xefc7ff9b, 0xffffffa5, 0xc7000007, 0xfff1f7ff,
-    0x01bf7ffd, 0xfdbcdc00, 0xffffbff5, 0x3effff7f,
-    } },
-    { { /* 548 */
-    0xbe000029, 0xff7ff9ff, 0xfd7e6efb, 0x039ecbff,
-    0xfbdde300, 0xf6dfccff, 0x117fffff, 0xfbf6f800,
-    } },
-    { { /* 549 */
-    0xd73ce7ef, 0xdfeffeef, 0xedbfc00b, 0xfdcdfedf,
-    0x40fd7bf5, 0xb75fffff, 0xf930ffdf, 0xdc97fbdf,
-    } },
-    { { /* 550 */
-    0xbff2fef3, 0xdfbf8fdf, 0xede6177f, 0x35530f7f,
-    0x877e447c, 0x45bbfa12, 0x779eede0, 0xbfd98017,
-    } },
-    { { /* 551 */
-    0xde897e55, 0x0447c16f, 0xf75d7ade, 0x290557ff,
-    0xfe9586f7, 0xf32f97b3, 0x9f75cfff, 0xfb1771f7,
-    } },
-    { { /* 552 */
-    0xee1934ee, 0xef6137cc, 0xef4c9fd6, 0xfbddd68f,
-    0x6def7b73, 0xa431d7fe, 0x97d75e7f, 0xffd80f5b,
-    } },
-    { { /* 553 */
-    0x7bce9d83, 0xdcff22ec, 0xef87763d, 0xfdeddfe7,
-    0xa0fc4fff, 0xdbfc3b77, 0x7fdc3ded, 0xf5706fa9,
-    } },
-    { { /* 554 */
-    0x2c403ffb, 0x847fff7f, 0xdeb7ec57, 0xf22fe69c,
-    0xd5b50feb, 0xede7afeb, 0xfff08c2f, 0xe8f0537f,
-    } },
-    { { /* 555 */
-    0xb5ffb99d, 0xe78fff66, 0xbe10d981, 0xe3c19c7c,
-    0x27339cd1, 0xff6d0cbc, 0xefb7fcb7, 0xffffa0df,
-    } },
-    { { /* 556 */
-    0xfe7bbf0b, 0x353fa3ff, 0x97cd13cc, 0xfb277637,
-    0x7e6ccfd6, 0xed31ec50, 0xfc1c677c, 0x5fbff6fa,
-    } },
-    { { /* 557 */
-    0xae2f0fba, 0x7ffea3ad, 0xde74fcf0, 0xf200ffef,
-    0xfea2fbbf, 0xbcff3daf, 0x5fb9f694, 0x3f8ff3ad,
-    } },
-    { { /* 558 */
-    0xa01ff26c, 0x01bfffef, 0x70057728, 0xda03ff35,
-    0xc7fad2f9, 0x5c1d3fbf, 0xec33ff3a, 0xfe9cb7af,
-    } },
-    { { /* 559 */
-    0x7a9f5236, 0xe722bffa, 0xfcff9ff7, 0xb61d2fbb,
-    0x1dfded06, 0xefdf7dd7, 0xf166eb23, 0x0dc07ed9,
-    } },
-    { { /* 560 */
-    0xdfbf3d3d, 0xba83c945, 0x9dd07dd1, 0xcf737b87,
-    0xc3f59ff3, 0xc5fedf0d, 0x83020cb3, 0xaec0e879,
-    } },
-    { { /* 561 */
-    0x6f0fc773, 0x093ffd7d, 0x0157fff1, 0x01ff62fb,
-    0x3bf3fdb4, 0x43b2b013, 0xff305ed3, 0xeb9f0fff,
-    } },
-    { { /* 562 */
-    0xf203feef, 0xfb893fef, 0x9e9937a9, 0xa72cdef9,
-    0xc1f63733, 0xfe3e812e, 0xf2f75d20, 0x69d7d585,
-    } },
-    { { /* 563 */
-    0xffffffff, 0xff6fdb07, 0xd97fc4ff, 0xbe0fefce,
-    0xf05ef17b, 0xffb7f6cf, 0xef845ef7, 0x0edfd7cb,
-    } },
-    { { /* 564 */
-    0xfcffff08, 0xffffee3f, 0xd7ff13ff, 0x7ffdaf0f,
-    0x1ffabdc7, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 565 */
-    0x00000000, 0xe7400000, 0xf933bd38, 0xfeed7feb,
-    0x7c767fe8, 0xffefb3f7, 0xd8b7feaf, 0xfbbfff6f,
-    } },
-    { { /* 566 */
-    0xdbf7f8fb, 0xe2f91752, 0x754785c8, 0xe3ef9090,
-    0x3f6d9ef4, 0x0536ee2e, 0x7ff3f7bc, 0x7f3fa07b,
-    } },
-    { { /* 567 */
-    0xeb600567, 0x6601babe, 0x583ffcd8, 0x87dfcaf7,
-    0xffa0bfcd, 0xfebf5bcd, 0xefa7b6fd, 0xdf9c77ef,
-    } },
-    { { /* 568 */
-    0xf8773fb7, 0xb7fc9d27, 0xdfefcab5, 0xf1b6fb5a,
-    0xef1fec39, 0x7ffbfbbf, 0xdafe000d, 0x4e7fbdfb,
-    } },
-    { { /* 569 */
-    0x5ac033ff, 0x9ffebff5, 0x005fffbf, 0xfdf80000,
-    0x6ffdffca, 0xa001cffd, 0xfbf2dfff, 0xff7fdfbf,
-    } },
-    { { /* 570 */
-    0x080ffeda, 0xbfffba08, 0xeed77afd, 0x67f9fbeb,
-    0xff93e044, 0x9f57df97, 0x08dffef7, 0xfedfdf80,
-    } },
-    { { /* 571 */
-    0xf7feffc5, 0x6803fffb, 0x6bfa67fb, 0x5fe27fff,
-    0xff73ffff, 0xe7fb87df, 0xf7a7ebfd, 0xefc7bf7e,
-    } },
-    { { /* 572 */
-    0xdf821ef3, 0xdf7e76ff, 0xda7d79c9, 0x1e9befbe,
-    0x77fb7ce0, 0xfffb87be, 0xffdb1bff, 0x4fe03f5c,
-    } },
-    { { /* 573 */
-    0x5f0e7fff, 0xddbf77ff, 0xfffff04f, 0x0ff8ffff,
-    0xfddfa3be, 0xfffdfc1c, 0xfb9e1f7d, 0xdedcbdff,
-    } },
-    { { /* 574 */
-    0xbafb3f6f, 0xfbefdf7f, 0x2eec7d1b, 0xf2f7af8e,
-    0xcfee7b0f, 0x77c61d96, 0xfff57e07, 0x7fdfd982,
-    } },
-    { { /* 575 */
-    0xc7ff5ee6, 0x79effeee, 0xffcf9a56, 0xde5efe5f,
-    0xf9e8896e, 0xe6c4f45e, 0xbe7c0001, 0xdddf3b7f,
-    } },
-    { { /* 576 */
-    0xe9efd59d, 0xde5334ac, 0x4bf7f573, 0x9eff7b4f,
-    0x476eb8fe, 0xff450dfb, 0xfbfeabfd, 0xddffe9d7,
-    } },
-    { { /* 577 */
-    0x7fffedf7, 0x7eebddfd, 0xb7ffcfe7, 0xef91bde9,
-    0xd77c5d75, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 578 */
-    0x00000000, 0xfa800000, 0xb4f1ffee, 0x2fefbf76,
-    0x77bfb677, 0xfffd9fbf, 0xf6ae95bf, 0x7f3b75ff,
-    } },
-    { { /* 579 */
-    0x0af9a7f5, 0x00000000, 0x00000000, 0x2bddfbd0,
-    0x9a7ff633, 0xd6fcfdab, 0xbfebf9e6, 0xf41fdfdf,
-    } },
-    { { /* 580 */
-    0xffffa6fd, 0xf37b4aff, 0xfef97fb7, 0x1d5cb6ff,
-    0xe5ff7ff6, 0x24041f7b, 0xf99ebe05, 0xdff2dbe3,
-    } },
-    { { /* 581 */
-    0xfdff6fef, 0xcbfcd679, 0xefffebfd, 0x0000001f,
-    0x98000000, 0x8017e148, 0x00fe6a74, 0xfdf16d7f,
-    } },
-    { { /* 582 */
-    0xfef3b87f, 0xf176e01f, 0x7b3fee96, 0xfffdeb8d,
-    0xcbb3adff, 0xe17f84ef, 0xbff04daa, 0xfe3fbf3f,
-    } },
-    { { /* 583 */
-    0xffd7ebff, 0xcf7fffdf, 0x85edfffb, 0x07bcd73f,
-    0xfe0faeff, 0x76bffdaf, 0x37bbfaef, 0xa3ba7fdc,
-    } },
-    { { /* 584 */
-    0x56f7b6ff, 0xe7df60f8, 0x4cdfff61, 0xff45b0fb,
-    0x3ffa7ded, 0x18fc1fff, 0xe3afffff, 0xdf83c7d3,
-    } },
-    { { /* 585 */
-    0xef7dfb57, 0x1378efff, 0x5ff7fec0, 0x5ee334bb,
-    0xeff6f70d, 0x00bfd7fe, 0xf7f7f59d, 0xffe051de,
-    } },
-    { { /* 586 */
-    0x037ffec9, 0xbfef5f01, 0x60a79ff1, 0xf1ffef1d,
-    0x0000000f, 0x00000000, 0x00000000, 0x00000000,
-    } },
-    { { /* 587 */
-    0x00000000, 0x00000000, 0x00000000, 0x3c800000,
-    0xd91ffb4d, 0xfee37b3a, 0xdc7f3fe9, 0x0000003f,
-    } },
-    { { /* 588 */
-    0x50000000, 0xbe07f51f, 0xf91bfc1d, 0x71ffbc1e,
-    0x5bbe6ff9, 0x9b1b5796, 0xfffc7fff, 0xafe7872e,
-    } },
-    { { /* 589 */
-    0xf34febf5, 0xe725dffd, 0x5d440bdc, 0xfddd5747,
-    0x7790ed3f, 0x8ac87d7f, 0xf3f9fafa, 0xef4b202a,
-    } },
-    { { /* 590 */
-    0x79cff5ff, 0x0ba5abd3, 0xfb8ff77a, 0x001f8ebd,
-    0x00000000, 0xfd4ef300, 0x88001a57, 0x7654aeac,
-    } },
-    { { /* 591 */
-    0xcdff17ad, 0xf42fffb2, 0xdbff5baa, 0x00000002,
-    0x73c00000, 0x2e3ff9ea, 0xbbfffa8e, 0xffd376bc,
-    } },
-    { { /* 592 */
-    0x7e72eefe, 0xe7f77ebd, 0xcefdf77f, 0x00000ff5,
-    0x00000000, 0xdb9ba900, 0x917fa4c7, 0x7ecef8ca,
-    } },
-    { { /* 593 */
-    0xc7e77d7a, 0xdcaecbbd, 0x8f76fd7e, 0x7cf391d3,
-    0x4c2f01e5, 0xa360ed77, 0x5ef807db, 0x21811df7,
-    } },
-    { { /* 594 */
-    0x309c6be0, 0xfade3b3a, 0xc3f57f53, 0x07ba61cd,
-    0x00000000, 0x00000000, 0x00000000, 0xbefe26e0,
-    } },
-    { { /* 595 */
-    0xebb503f9, 0xe9cbe36d, 0xbfde9c2f, 0xabbf9f83,
-    0xffd51ff7, 0xdffeb7df, 0xffeffdae, 0xeffdfb7e,
-    } },
-    { { /* 596 */
-    0x6ebfaaff, 0x00000000, 0x00000000, 0xb6200000,
-    0xbe9e7fcd, 0x58f162b3, 0xfd7bf10d, 0xbefde9f1,
-    } },
-    { { /* 597 */
-    0x5f6dc6c3, 0x69ffff3d, 0xfbf4ffcf, 0x4ff7dcfb,
-    0x11372000, 0x00000015, 0x00000000, 0x00000000,
-    } },
-    { { /* 598 */
-    0x00003000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    } },
-};
-
-#define L(n) ((FcCharLeaf *) &leaves[n])
-
-static const FcCharLeaf *leaves_aa[1] = {
-    L(  0),
-};
-
-static const FcChar16 numbers_aa[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ab[1] = {
-    L(  1),
-};
-
-static const FcChar16 numbers_ab[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_af[2] = {
-    L(  2), L(  3),
-};
-
-static const FcChar16 numbers_af[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_am[2] = {
-    L(  4), L(  5),
-};
-
-static const FcChar16 numbers_am[2] = {
-    0x0012, 0x0013,
-};
-
-static const FcCharLeaf *leaves_ar[1] = {
-    L(  6),
-};
-
-static const FcChar16 numbers_ar[1] = {
-    0x00fe,
-};
-
-static const FcCharLeaf *leaves_ast[1] = {
-    L(  7),
-};
-
-static const FcChar16 numbers_ast[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ava[1] = {
-    L(  8),
-};
-
-static const FcChar16 numbers_ava[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_ay[1] = {
-    L(  9),
-};
-
-static const FcChar16 numbers_ay[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_az[4] = {
-    L( 10), L( 11), L( 12), L( 13),
-};
-
-static const FcChar16 numbers_az[4] = {
-    0x0000, 0x0001, 0x0002, 0x0004,
-};
-
-static const FcCharLeaf *leaves_ba[1] = {
-    L( 14),
-};
-
-static const FcChar16 numbers_ba[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_bam[3] = {
-    L( 15), L( 16), L( 17),
-};
-
-static const FcChar16 numbers_bam[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_be[1] = {
-    L( 18),
-};
-
-static const FcChar16 numbers_be[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_bg[1] = {
-    L( 19),
-};
-
-static const FcChar16 numbers_bg[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_bh[1] = {
-    L( 20),
-};
-
-static const FcChar16 numbers_bh[1] = {
-    0x0009,
-};
-
-static const FcCharLeaf *leaves_bi[1] = {
-    L( 21),
-};
-
-static const FcChar16 numbers_bi[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_bin[3] = {
-    L( 22), L( 23), L( 24),
-};
-
-static const FcChar16 numbers_bin[3] = {
-    0x0000, 0x0003, 0x001e,
-};
-
-static const FcCharLeaf *leaves_bn[1] = {
-    L( 25),
-};
-
-static const FcChar16 numbers_bn[1] = {
-    0x0009,
-};
-
-static const FcCharLeaf *leaves_bo[1] = {
-    L( 26),
-};
-
-static const FcChar16 numbers_bo[1] = {
-    0x000f,
-};
-
-static const FcCharLeaf *leaves_br[1] = {
-    L( 27),
-};
-
-static const FcChar16 numbers_br[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_bs[2] = {
-    L( 15), L( 28),
-};
-
-static const FcChar16 numbers_bs[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_bua[1] = {
-    L( 29),
-};
-
-static const FcChar16 numbers_bua[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_ca[2] = {
-    L( 30), L( 31),
-};
-
-static const FcChar16 numbers_ca[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_ch[1] = {
-    L( 32),
-};
-
-static const FcChar16 numbers_ch[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_chm[1] = {
-    L( 33),
-};
-
-static const FcChar16 numbers_chm[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_chr[1] = {
-    L( 34),
-};
-
-static const FcChar16 numbers_chr[1] = {
-    0x0013,
-};
-
-static const FcCharLeaf *leaves_co[2] = {
-    L( 35), L( 36),
-};
-
-static const FcChar16 numbers_co[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_cs[2] = {
-    L( 37), L( 38),
-};
-
-static const FcChar16 numbers_cs[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_cu[1] = {
-    L( 39),
-};
-
-static const FcChar16 numbers_cu[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_cv[2] = {
-    L( 40), L( 41),
-};
-
-static const FcChar16 numbers_cv[2] = {
-    0x0001, 0x0004,
-};
-
-static const FcCharLeaf *leaves_cy[3] = {
-    L( 42), L( 43), L( 44),
-};
-
-static const FcChar16 numbers_cy[3] = {
-    0x0000, 0x0001, 0x001e,
-};
-
-static const FcCharLeaf *leaves_da[1] = {
-    L( 45),
-};
-
-static const FcChar16 numbers_da[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_de[1] = {
-    L( 46),
-};
-
-static const FcChar16 numbers_de[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_el[1] = {
-    L( 47),
-};
-
-static const FcChar16 numbers_el[1] = {
-    0x0003,
-};
-
-static const FcCharLeaf *leaves_en[1] = {
-    L( 48),
-};
-
-static const FcChar16 numbers_en[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_eo[2] = {
-    L( 15), L( 49),
-};
-
-static const FcChar16 numbers_eo[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_es[1] = {
-    L( 50),
-};
-
-static const FcChar16 numbers_es[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_et[2] = {
-    L( 51), L( 52),
-};
-
-static const FcChar16 numbers_et[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_eu[1] = {
-    L( 53),
-};
-
-static const FcChar16 numbers_eu[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_fa[2] = {
-    L( 54), L( 55),
-};
-
-static const FcChar16 numbers_fa[2] = {
-    0x00fb, 0x00fe,
-};
-
-static const FcCharLeaf *leaves_fi[2] = {
-    L( 56), L( 52),
-};
-
-static const FcChar16 numbers_fi[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_fj[1] = {
-    L( 15),
-};
-
-static const FcChar16 numbers_fj[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_fo[1] = {
-    L( 57),
-};
-
-static const FcChar16 numbers_fo[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ful[3] = {
-    L( 15), L( 58), L( 59),
-};
-
-static const FcChar16 numbers_ful[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_fur[1] = {
-    L( 60),
-};
-
-static const FcChar16 numbers_fur[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_fy[1] = {
-    L( 61),
-};
-
-static const FcChar16 numbers_fy[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ga[3] = {
-    L( 62), L( 63), L( 64),
-};
-
-static const FcChar16 numbers_ga[3] = {
-    0x0000, 0x0001, 0x001e,
-};
-
-static const FcCharLeaf *leaves_gd[1] = {
-    L( 65),
-};
-
-static const FcChar16 numbers_gd[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_gn[3] = {
-    L( 66), L( 67), L( 68),
-};
-
-static const FcChar16 numbers_gn[3] = {
-    0x0000, 0x0001, 0x001e,
-};
-
-static const FcCharLeaf *leaves_gu[1] = {
-    L( 69),
-};
-
-static const FcChar16 numbers_gu[1] = {
-    0x000a,
-};
-
-static const FcCharLeaf *leaves_gv[1] = {
-    L( 70),
-};
-
-static const FcChar16 numbers_gv[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ha[3] = {
-    L( 15), L( 71), L( 72),
-};
-
-static const FcChar16 numbers_ha[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_haw[3] = {
-    L( 15), L( 73), L( 74),
-};
-
-static const FcChar16 numbers_haw[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_he[1] = {
-    L( 75),
-};
-
-static const FcChar16 numbers_he[1] = {
-    0x0005,
-};
-
-static const FcCharLeaf *leaves_hu[2] = {
-    L( 76), L( 77),
-};
-
-static const FcChar16 numbers_hu[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_hy[1] = {
-    L( 78),
-};
-
-static const FcChar16 numbers_hy[1] = {
-    0x0005,
-};
-
-static const FcCharLeaf *leaves_ibo[2] = {
-    L( 15), L( 79),
-};
-
-static const FcChar16 numbers_ibo[2] = {
-    0x0000, 0x001e,
-};
-
-static const FcCharLeaf *leaves_id[1] = {
-    L( 80),
-};
-
-static const FcChar16 numbers_id[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ik[1] = {
-    L( 81),
-};
-
-static const FcChar16 numbers_ik[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_is[1] = {
-    L( 82),
-};
-
-static const FcChar16 numbers_is[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_it[1] = {
-    L( 83),
-};
-
-static const FcChar16 numbers_it[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_iu[3] = {
-    L( 84), L( 85), L( 86),
-};
-
-static const FcChar16 numbers_iu[3] = {
-    0x0014, 0x0015, 0x0016,
-};
-
-static const FcCharLeaf *leaves_ja[84] = {
-    L( 87), L( 88), L( 89), L( 90), L( 91), L( 92), L( 93), L( 94),
-    L( 95), L( 96), L( 97), L( 98), L( 99), L(100), L(101), L(102),
-    L(103), L(104), L(105), L(106), L(107), L(108), L(109), L(110),
-    L(111), L(112), L(113), L(114), L(115), L(116), L(117), L(118),
-    L(119), L(120), L(121), L(122), L(123), L(124), L(125), L(126),
-    L(127), L(128), L(129), L(130), L(131), L(132), L(133), L(134),
-    L(135), L(136), L(137), L(138), L(139), L(140), L(141), L(142),
-    L(143), L(144), L(145), L(146), L(147), L(148), L(149), L(150),
-    L(151), L(152), L(153), L(154), L(155), L(156), L(157), L(158),
-    L(159), L(160), L(161), L(162), L(163), L(164), L(165), L(166),
-    L(167), L(168), L(169), L(170),
-};
-
-static const FcChar16 numbers_ja[84] = {
-    0x0030, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
-    0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c,
-    0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
-    0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c,
-    0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
-    0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c,
-    0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084,
-    0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c,
-    0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094,
-    0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c,
-    0x009d, 0x009e, 0x009f, 0x00ff,
-};
-
-static const FcCharLeaf *leaves_ka[2] = {
-    L(171), L(172),
-};
-
-static const FcChar16 numbers_ka[2] = {
-    0x0005, 0x0010,
-};
-
-static const FcCharLeaf *leaves_kaa[1] = {
-    L(173),
-};
-
-static const FcChar16 numbers_kaa[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_ki[2] = {
-    L( 15), L(174),
-};
-
-static const FcChar16 numbers_ki[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_kk[1] = {
-    L(175),
-};
-
-static const FcChar16 numbers_kk[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_kl[2] = {
-    L(176), L(177),
-};
-
-static const FcChar16 numbers_kl[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_km[1] = {
-    L(178),
-};
-
-static const FcChar16 numbers_km[1] = {
-    0x0017,
-};
-
-static const FcCharLeaf *leaves_kn[1] = {
-    L(179),
-};
-
-static const FcChar16 numbers_kn[1] = {
-    0x000c,
-};
-
-static const FcCharLeaf *leaves_ko[129] = {
-    L(180), L(181), L(182), L(183), L(184), L(185), L(186), L(187),
-    L(188), L(189), L(190), L(191), L(192), L(193), L(194), L(195),
-    L(196), L(197), L(198), L(199), L(200), L(201), L(202), L(203),
-    L(204), L(205), L(206), L(207), L(208), L(209), L(210), L(211),
-    L(212), L(213), L(214), L(215), L(216), L(217), L(218), L(219),
-    L(220), L(221), L(222), L(223), L(224), L(225), L(226), L(227),
-    L(228), L(229), L(230), L(231), L(232), L(233), L(234), L(235),
-    L(236), L(237), L(238), L(239), L(240), L(241), L(242), L(243),
-    L(244), L(245), L(246), L(247), L(248), L(249), L(250), L(251),
-    L(252), L(253), L(254), L(255), L(256), L(257), L(258), L(259),
-    L(260), L(261), L(262), L(263), L(263), L(263), L(263), L(263),
-    L(263), L(263), L(263), L(263), L(263), L(263), L(263), L(263),
-    L(263), L(263), L(263), L(263), L(263), L(263), L(263), L(263),
-    L(263), L(263), L(263), L(263), L(263), L(263), L(263), L(263),
-    L(263), L(263), L(263), L(263), L(263), L(263), L(263), L(263),
-    L(263), L(263), L(263), L(263), L(263), L(263), L(264), L(263),
-    L(265),
-};
-
-static const FcChar16 numbers_ko[129] = {
-    0x0031, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
-    0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c,
-    0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
-    0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c,
-    0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
-    0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c,
-    0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084,
-    0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c,
-    0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094,
-    0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c,
-    0x009d, 0x009e, 0x009f, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0,
-    0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8,
-    0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00c0,
-    0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8,
-    0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, 0x00d0,
-    0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00f9,
-    0x00fa,
-};
-
-static const FcCharLeaf *leaves_ku[2] = {
-    L(266), L(267),
-};
-
-static const FcChar16 numbers_ku[2] = {
-    0x0000, 0x0004,
-};
-
-static const FcCharLeaf *leaves_kum[1] = {
-    L(268),
-};
-
-static const FcChar16 numbers_kum[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_kv[1] = {
-    L(269),
-};
-
-static const FcChar16 numbers_kv[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_kw[3] = {
-    L( 15), L( 73), L(270),
-};
-
-static const FcChar16 numbers_kw[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_ky[1] = {
-    L(271),
-};
-
-static const FcChar16 numbers_ky[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_la[2] = {
-    L( 15), L(272),
-};
-
-static const FcChar16 numbers_la[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_lb[1] = {
-    L(273),
-};
-
-static const FcChar16 numbers_lb[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_lo[1] = {
-    L(274),
-};
-
-static const FcChar16 numbers_lo[1] = {
-    0x000e,
-};
-
-static const FcCharLeaf *leaves_lt[2] = {
-    L( 15), L(275),
-};
-
-static const FcChar16 numbers_lt[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_lv[2] = {
-    L( 15), L(276),
-};
-
-static const FcChar16 numbers_lv[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_mg[1] = {
-    L(277),
-};
-
-static const FcChar16 numbers_mg[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_mh[2] = {
-    L( 15), L(278),
-};
-
-static const FcChar16 numbers_mh[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_mi[3] = {
-    L( 15), L( 73), L(279),
-};
-
-static const FcChar16 numbers_mi[3] = {
-    0x0000, 0x0001, 0x001e,
-};
-
-static const FcCharLeaf *leaves_mk[1] = {
-    L(280),
-};
-
-static const FcChar16 numbers_mk[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_ml[1] = {
-    L(281),
-};
-
-static const FcChar16 numbers_ml[1] = {
-    0x000d,
-};
-
-static const FcCharLeaf *leaves_mn[1] = {
-    L(282),
-};
-
-static const FcChar16 numbers_mn[1] = {
-    0x0018,
-};
-
-static const FcCharLeaf *leaves_mo[4] = {
-    L(283), L( 40), L(284), L(268),
-};
-
-static const FcChar16 numbers_mo[4] = {
-    0x0000, 0x0001, 0x0002, 0x0004,
-};
-
-static const FcCharLeaf *leaves_mt[2] = {
-    L(285), L(286),
-};
-
-static const FcChar16 numbers_mt[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_my[1] = {
-    L(287),
-};
-
-static const FcChar16 numbers_my[1] = {
-    0x0010,
-};
-
-static const FcCharLeaf *leaves_nb[1] = {
-    L(288),
-};
-
-static const FcChar16 numbers_nb[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_nl[1] = {
-    L(289),
-};
-
-static const FcChar16 numbers_nl[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_nn[1] = {
-    L(290),
-};
-
-static const FcChar16 numbers_nn[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ny[2] = {
-    L( 15), L(291),
-};
-
-static const FcChar16 numbers_ny[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_oc[1] = {
-    L(292),
-};
-
-static const FcChar16 numbers_oc[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_or[1] = {
-    L(293),
-};
-
-static const FcChar16 numbers_or[1] = {
-    0x000b,
-};
-
-static const FcCharLeaf *leaves_pl[2] = {
-    L(294), L(295),
-};
-
-static const FcChar16 numbers_pl[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_pt[1] = {
-    L(296),
-};
-
-static const FcChar16 numbers_pt[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_rm[1] = {
-    L(297),
-};
-
-static const FcChar16 numbers_rm[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_ro[3] = {
-    L(283), L( 40), L(284),
-};
-
-static const FcChar16 numbers_ro[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_ru[1] = {
-    L(298),
-};
-
-static const FcChar16 numbers_ru[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_sah[1] = {
-    L(299),
-};
-
-static const FcChar16 numbers_sah[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_sco[3] = {
-    L( 15), L(300), L(301),
-};
-
-static const FcChar16 numbers_sco[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_se[2] = {
-    L(302), L(303),
-};
-
-static const FcChar16 numbers_se[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_sh[1] = {
-    L(304),
-};
-
-static const FcChar16 numbers_sh[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_si[1] = {
-    L(305),
-};
-
-static const FcChar16 numbers_si[1] = {
-    0x000d,
-};
-
-static const FcCharLeaf *leaves_sk[2] = {
-    L(306), L(307),
-};
-
-static const FcChar16 numbers_sk[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_sm[2] = {
-    L( 15), L( 74),
-};
-
-static const FcChar16 numbers_sm[2] = {
-    0x0000, 0x0002,
-};
-
-static const FcCharLeaf *leaves_sma[1] = {
-    L(308),
-};
-
-static const FcChar16 numbers_sma[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_smj[1] = {
-    L(309),
-};
-
-static const FcChar16 numbers_smj[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_smn[2] = {
-    L(310), L(311),
-};
-
-static const FcChar16 numbers_smn[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_sms[3] = {
-    L(312), L(313), L(314),
-};
-
-static const FcChar16 numbers_sms[3] = {
-    0x0000, 0x0001, 0x0002,
-};
-
-static const FcCharLeaf *leaves_sq[1] = {
-    L(315),
-};
-
-static const FcChar16 numbers_sq[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_sv[1] = {
-    L(316),
-};
-
-static const FcChar16 numbers_sv[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_syr[1] = {
-    L(317),
-};
-
-static const FcChar16 numbers_syr[1] = {
-    0x0007,
-};
-
-static const FcCharLeaf *leaves_ta[1] = {
-    L(318),
-};
-
-static const FcChar16 numbers_ta[1] = {
-    0x000b,
-};
-
-static const FcCharLeaf *leaves_te[1] = {
-    L(319),
-};
-
-static const FcChar16 numbers_te[1] = {
-    0x000c,
-};
-
-static const FcCharLeaf *leaves_tg[1] = {
-    L(320),
-};
-
-static const FcChar16 numbers_tg[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_th[1] = {
-    L(321),
-};
-
-static const FcChar16 numbers_th[1] = {
-    0x000e,
-};
-
-static const FcCharLeaf *leaves_tk[1] = {
-    L(322),
-};
-
-static const FcChar16 numbers_tk[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_tl[1] = {
-    L(323),
-};
-
-static const FcChar16 numbers_tl[1] = {
-    0x0017,
-};
-
-static const FcCharLeaf *leaves_tn[1] = {
-    L(324),
-};
-
-static const FcChar16 numbers_tn[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_tr[2] = {
-    L(325), L(326),
-};
-
-static const FcChar16 numbers_tr[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_tt[1] = {
-    L(327),
-};
-
-static const FcChar16 numbers_tt[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_tw[5] = {
-    L(328), L(329), L(330), L(331), L(332),
-};
-
-static const FcChar16 numbers_tw[5] = {
-    0x0000, 0x0001, 0x0002, 0x0003, 0x001e,
-};
-
-static const FcCharLeaf *leaves_uk[1] = {
-    L(333),
-};
-
-static const FcChar16 numbers_uk[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_uz[1] = {
-    L(334),
-};
-
-static const FcChar16 numbers_uz[1] = {
-    0x0004,
-};
-
-static const FcCharLeaf *leaves_ven[2] = {
-    L( 15), L(335),
-};
-
-static const FcChar16 numbers_ven[2] = {
-    0x0000, 0x001e,
-};
-
-static const FcCharLeaf *leaves_vi[4] = {
-    L(336), L(337), L(338), L(339),
-};
-
-static const FcChar16 numbers_vi[4] = {
-    0x0000, 0x0001, 0x0003, 0x001e,
-};
-
-static const FcCharLeaf *leaves_vo[1] = {
-    L(340),
-};
-
-static const FcChar16 numbers_vo[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_vot[2] = {
-    L(341), L( 52),
-};
-
-static const FcChar16 numbers_vot[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_wa[1] = {
-    L(342),
-};
-
-static const FcChar16 numbers_wa[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_wen[2] = {
-    L(294), L(343),
-};
-
-static const FcChar16 numbers_wen[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_wo[2] = {
-    L(344), L(345),
-};
-
-static const FcChar16 numbers_wo[2] = {
-    0x0000, 0x0001,
-};
-
-static const FcCharLeaf *leaves_yap[1] = {
-    L(346),
-};
-
-static const FcChar16 numbers_yap[1] = {
-    0x0000,
-};
-
-static const FcCharLeaf *leaves_yo[4] = {
-    L(347), L(348), L(349), L(350),
-};
-
-static const FcChar16 numbers_yo[4] = {
-    0x0000, 0x0001, 0x0003, 0x001e,
-};
-
-static const FcCharLeaf *leaves_zh_cn[82] = {
-    L(351), L(352), L(353), L(354), L(355), L(356), L(357), L(358),
-    L(359), L(360), L(361), L(362), L(363), L(364), L(365), L(366),
-    L(367), L(368), L(369), L(370), L(371), L(372), L(373), L(374),
-    L(375), L(376), L(377), L(378), L(379), L(380), L(381), L(382),
-    L(383), L(384), L(385), L(386), L(387), L(388), L(389), L(390),
-    L(391), L(392), L(393), L(394), L(395), L(396), L(397), L(398),
-    L(399), L(400), L(401), L(402), L(403), L(404), L(405), L(406),
-    L(407), L(408), L(409), L(410), L(411), L(412), L(413), L(414),
-    L(415), L(416), L(417), L(418), L(419), L(420), L(421), L(422),
-    L(423), L(424), L(425), L(426), L(427), L(428), L(429), L(430),
-    L(431), L(432),
-};
-
-static const FcChar16 numbers_zh_cn[82] = {
-    0x0002, 0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054,
-    0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c,
-    0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064,
-    0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c,
-    0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
-    0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c,
-    0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084,
-    0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c,
-    0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094,
-    0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c,
-    0x009e, 0x009f,
-};
-
-static const FcCharLeaf *leaves_zh_hk[83] = {
-    L(433), L(434), L(435), L(436), L(437), L(438), L(439), L(440),
-    L(441), L(442), L(443), L(444), L(445), L(446), L(447), L(448),
-    L(449), L(450), L(451), L(452), L(453), L(454), L(455), L(456),
-    L(457), L(458), L(459), L(460), L(461), L(462), L(463), L(464),
-    L(465), L(466), L(467), L(468), L(469), L(470), L(471), L(472),
-    L(473), L(474), L(475), L(476), L(477), L(478), L(479), L(480),
-    L(481), L(482), L(483), L(484), L(485), L(486), L(487), L(488),
-    L(489), L(490), L(491), L(492), L(493), L(494), L(495), L(496),
-    L(497), L(498), L(499), L(500), L(501), L(502), L(503), L(504),
-    L(505), L(506), L(507), L(508), L(509), L(510), L(511), L(512),
-    L(513), L(514), L(515),
-};
-
-static const FcChar16 numbers_zh_hk[83] = {
-    0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055,
-    0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d,
-    0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065,
-    0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d,
-    0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
-    0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d,
-    0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
-    0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d,
-    0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095,
-    0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d,
-    0x009e, 0x009f, 0x00f9,
-};
-
-static const FcCharLeaf *leaves_zh_mo[83] = {
-    L(516), L(517), L(518), L(519), L(520), L(521), L(522), L(523),
-    L(524), L(525), L(526), L(527), L(528), L(529), L(530), L(531),
-    L(532), L(533), L(534), L(535), L(536), L(537), L(538), L(539),
-    L(540), L(541), L(542), L(543), L(544), L(545), L(546), L(547),
-    L(548), L(549), L(550), L(551), L(552), L(553), L(554), L(555),
-    L(556), L(557), L(558), L(559), L(560), L(561), L(562), L(563),
-    L(564), L(565), L(566), L(567), L(568), L(569), L(570), L(571),
-    L(572), L(573), L(574), L(575), L(576), L(577), L(578), L(579),
-    L(580), L(581), L(582), L(583), L(584), L(585), L(586), L(587),
-    L(588), L(589), L(590), L(591), L(592), L(593), L(594), L(595),
-    L(596), L(597), L(598),
-};
-
-static const FcChar16 numbers_zh_mo[83] = {
-    0x004e, 0x004f, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055,
-    0x0056, 0x0057, 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d,
-    0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065,
-    0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d,
-    0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075,
-    0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d,
-    0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085,
-    0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d,
-    0x008e, 0x008f, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095,
-    0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d,
-    0x009e, 0x009f, 0x00fa,
-};
-
-#undef L
-
-static const FcLangCharSet  fcLangCharSets[] = {
-    { (FcChar8 *) "aa",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_aa, (FcChar16 *) numbers_aa } },
-    { (FcChar8 *) "ab",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ab, (FcChar16 *) numbers_ab } },
-    { (FcChar8 *) "af",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_af, (FcChar16 *) numbers_af } },
-    { (FcChar8 *) "am",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_am, (FcChar16 *) numbers_am } },
-    { (FcChar8 *) "ar",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ar, (FcChar16 *) numbers_ar } },
-    { (FcChar8 *) "ast",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ast, (FcChar16 *) numbers_ast } },
-    { (FcChar8 *) "ava",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ava, (FcChar16 *) numbers_ava } },
-    { (FcChar8 *) "ay",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ay, (FcChar16 *) numbers_ay } },
-    { (FcChar8 *) "az",
-      { FC_REF_CONSTANT, 4, (FcCharLeaf **) leaves_az, (FcChar16 *) numbers_az } },
-    { (FcChar8 *) "ba",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ba, (FcChar16 *) numbers_ba } },
-    { (FcChar8 *) "bam",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_bam, (FcChar16 *) numbers_bam } },
-    { (FcChar8 *) "be",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_be, (FcChar16 *) numbers_be } },
-    { (FcChar8 *) "bg",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bg, (FcChar16 *) numbers_bg } },
-    { (FcChar8 *) "bh",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "bho",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "bi",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bi, (FcChar16 *) numbers_bi } },
-    { (FcChar8 *) "bin",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_bin, (FcChar16 *) numbers_bin } },
-    { (FcChar8 *) "bn",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bn, (FcChar16 *) numbers_bn } },
-    { (FcChar8 *) "bo",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bo, (FcChar16 *) numbers_bo } },
-    { (FcChar8 *) "br",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_br, (FcChar16 *) numbers_br } },
-    { (FcChar8 *) "bs",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_bs, (FcChar16 *) numbers_bs } },
-    { (FcChar8 *) "bua",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bua, (FcChar16 *) numbers_bua } },
-    { (FcChar8 *) "ca",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ca, (FcChar16 *) numbers_ca } },
-    { (FcChar8 *) "ce",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ava, (FcChar16 *) numbers_ava } },
-    { (FcChar8 *) "ch",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ch, (FcChar16 *) numbers_ch } },
-    { (FcChar8 *) "chm",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_chm, (FcChar16 *) numbers_chm } },
-    { (FcChar8 *) "chr",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_chr, (FcChar16 *) numbers_chr } },
-    { (FcChar8 *) "co",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_co, (FcChar16 *) numbers_co } },
-    { (FcChar8 *) "cs",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_cs, (FcChar16 *) numbers_cs } },
-    { (FcChar8 *) "cu",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_cu, (FcChar16 *) numbers_cu } },
-    { (FcChar8 *) "cv",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_cv, (FcChar16 *) numbers_cv } },
-    { (FcChar8 *) "cy",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_cy, (FcChar16 *) numbers_cy } },
-    { (FcChar8 *) "da",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_da, (FcChar16 *) numbers_da } },
-    { (FcChar8 *) "de",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_de, (FcChar16 *) numbers_de } },
-    { (FcChar8 *) "dz",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bo, (FcChar16 *) numbers_bo } },
-    { (FcChar8 *) "el",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_el, (FcChar16 *) numbers_el } },
-    { (FcChar8 *) "en",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_en, (FcChar16 *) numbers_en } },
-    { (FcChar8 *) "eo",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_eo, (FcChar16 *) numbers_eo } },
-    { (FcChar8 *) "es",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_es, (FcChar16 *) numbers_es } },
-    { (FcChar8 *) "et",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_et, (FcChar16 *) numbers_et } },
-    { (FcChar8 *) "eu",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_eu, (FcChar16 *) numbers_eu } },
-    { (FcChar8 *) "fa",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_fa, (FcChar16 *) numbers_fa } },
-    { (FcChar8 *) "fi",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_fi, (FcChar16 *) numbers_fi } },
-    { (FcChar8 *) "fj",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "fo",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fo, (FcChar16 *) numbers_fo } },
-    { (FcChar8 *) "fr",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_co, (FcChar16 *) numbers_co } },
-    { (FcChar8 *) "ful",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_ful, (FcChar16 *) numbers_ful } },
-    { (FcChar8 *) "fur",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fur, (FcChar16 *) numbers_fur } },
-    { (FcChar8 *) "fy",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fy, (FcChar16 *) numbers_fy } },
-    { (FcChar8 *) "ga",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_ga, (FcChar16 *) numbers_ga } },
-    { (FcChar8 *) "gd",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_gd, (FcChar16 *) numbers_gd } },
-    { (FcChar8 *) "gez",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_am, (FcChar16 *) numbers_am } },
-    { (FcChar8 *) "gl",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_es, (FcChar16 *) numbers_es } },
-    { (FcChar8 *) "gn",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_gn, (FcChar16 *) numbers_gn } },
-    { (FcChar8 *) "gu",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_gu, (FcChar16 *) numbers_gu } },
-    { (FcChar8 *) "gv",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_gv, (FcChar16 *) numbers_gv } },
-    { (FcChar8 *) "ha",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_ha, (FcChar16 *) numbers_ha } },
-    { (FcChar8 *) "haw",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_haw, (FcChar16 *) numbers_haw } },
-    { (FcChar8 *) "he",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_he, (FcChar16 *) numbers_he } },
-    { (FcChar8 *) "hi",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "ho",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "hr",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_bs, (FcChar16 *) numbers_bs } },
-    { (FcChar8 *) "hu",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_hu, (FcChar16 *) numbers_hu } },
-    { (FcChar8 *) "hy",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_hy, (FcChar16 *) numbers_hy } },
-    { (FcChar8 *) "ia",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "ibo",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ibo, (FcChar16 *) numbers_ibo } },
-    { (FcChar8 *) "id",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_id, (FcChar16 *) numbers_id } },
-    { (FcChar8 *) "ie",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "ik",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ik, (FcChar16 *) numbers_ik } },
-    { (FcChar8 *) "io",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "is",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_is, (FcChar16 *) numbers_is } },
-    { (FcChar8 *) "it",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_it, (FcChar16 *) numbers_it } },
-    { (FcChar8 *) "iu",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_iu, (FcChar16 *) numbers_iu } },
-    { (FcChar8 *) "ja",
-      { FC_REF_CONSTANT, 84, (FcCharLeaf **) leaves_ja, (FcChar16 *) numbers_ja } },
-    { (FcChar8 *) "ka",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ka, (FcChar16 *) numbers_ka } },
-    { (FcChar8 *) "kaa",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kaa, (FcChar16 *) numbers_kaa } },
-    { (FcChar8 *) "ki",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ki, (FcChar16 *) numbers_ki } },
-    { (FcChar8 *) "kk",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kk, (FcChar16 *) numbers_kk } },
-    { (FcChar8 *) "kl",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_kl, (FcChar16 *) numbers_kl } },
-    { (FcChar8 *) "km",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_km, (FcChar16 *) numbers_km } },
-    { (FcChar8 *) "kn",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kn, (FcChar16 *) numbers_kn } },
-    { (FcChar8 *) "ko",
-      { FC_REF_CONSTANT, 129, (FcCharLeaf **) leaves_ko, (FcChar16 *) numbers_ko } },
-    { (FcChar8 *) "kok",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "ks",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "ku",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ku, (FcChar16 *) numbers_ku } },
-    { (FcChar8 *) "kum",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kum, (FcChar16 *) numbers_kum } },
-    { (FcChar8 *) "kv",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kv, (FcChar16 *) numbers_kv } },
-    { (FcChar8 *) "kw",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_kw, (FcChar16 *) numbers_kw } },
-    { (FcChar8 *) "ky",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ky, (FcChar16 *) numbers_ky } },
-    { (FcChar8 *) "la",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_la, (FcChar16 *) numbers_la } },
-    { (FcChar8 *) "lb",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_lb, (FcChar16 *) numbers_lb } },
-    { (FcChar8 *) "lez",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ava, (FcChar16 *) numbers_ava } },
-    { (FcChar8 *) "lo",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_lo, (FcChar16 *) numbers_lo } },
-    { (FcChar8 *) "lt",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_lt, (FcChar16 *) numbers_lt } },
-    { (FcChar8 *) "lv",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_lv, (FcChar16 *) numbers_lv } },
-    { (FcChar8 *) "mg",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_mg, (FcChar16 *) numbers_mg } },
-    { (FcChar8 *) "mh",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_mh, (FcChar16 *) numbers_mh } },
-    { (FcChar8 *) "mi",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_mi, (FcChar16 *) numbers_mi } },
-    { (FcChar8 *) "mk",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_mk, (FcChar16 *) numbers_mk } },
-    { (FcChar8 *) "ml",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ml, (FcChar16 *) numbers_ml } },
-    { (FcChar8 *) "mn",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_mn, (FcChar16 *) numbers_mn } },
-    { (FcChar8 *) "mo",
-      { FC_REF_CONSTANT, 4, (FcCharLeaf **) leaves_mo, (FcChar16 *) numbers_mo } },
-    { (FcChar8 *) "mr",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "mt",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_mt, (FcChar16 *) numbers_mt } },
-    { (FcChar8 *) "my",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_my, (FcChar16 *) numbers_my } },
-    { (FcChar8 *) "nb",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_nb, (FcChar16 *) numbers_nb } },
-    { (FcChar8 *) "ne",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "nl",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_nl, (FcChar16 *) numbers_nl } },
-    { (FcChar8 *) "nn",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_nn, (FcChar16 *) numbers_nn } },
-    { (FcChar8 *) "no",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_nb, (FcChar16 *) numbers_nb } },
-    { (FcChar8 *) "ny",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ny, (FcChar16 *) numbers_ny } },
-    { (FcChar8 *) "oc",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_oc, (FcChar16 *) numbers_oc } },
-    { (FcChar8 *) "om",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "or",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_or, (FcChar16 *) numbers_or } },
-    { (FcChar8 *) "os",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kum, (FcChar16 *) numbers_kum } },
-    { (FcChar8 *) "pl",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_pl, (FcChar16 *) numbers_pl } },
-    { (FcChar8 *) "pt",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_pt, (FcChar16 *) numbers_pt } },
-    { (FcChar8 *) "rm",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_rm, (FcChar16 *) numbers_rm } },
-    { (FcChar8 *) "ro",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_ro, (FcChar16 *) numbers_ro } },
-    { (FcChar8 *) "ru",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ru, (FcChar16 *) numbers_ru } },
-    { (FcChar8 *) "sa",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_bh, (FcChar16 *) numbers_bh } },
-    { (FcChar8 *) "sah",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sah, (FcChar16 *) numbers_sah } },
-    { (FcChar8 *) "sco",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_sco, (FcChar16 *) numbers_sco } },
-    { (FcChar8 *) "se",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_se, (FcChar16 *) numbers_se } },
-    { (FcChar8 *) "sel",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_kum, (FcChar16 *) numbers_kum } },
-    { (FcChar8 *) "sh",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sh, (FcChar16 *) numbers_sh } },
-    { (FcChar8 *) "si",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_si, (FcChar16 *) numbers_si } },
-    { (FcChar8 *) "sk",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_sk, (FcChar16 *) numbers_sk } },
-    { (FcChar8 *) "sl",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_bs, (FcChar16 *) numbers_bs } },
-    { (FcChar8 *) "sm",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_sm, (FcChar16 *) numbers_sm } },
-    { (FcChar8 *) "sma",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sma, (FcChar16 *) numbers_sma } },
-    { (FcChar8 *) "smj",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_smj, (FcChar16 *) numbers_smj } },
-    { (FcChar8 *) "smn",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_smn, (FcChar16 *) numbers_smn } },
-    { (FcChar8 *) "sms",
-      { FC_REF_CONSTANT, 3, (FcCharLeaf **) leaves_sms, (FcChar16 *) numbers_sms } },
-    { (FcChar8 *) "so",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "sq",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sq, (FcChar16 *) numbers_sq } },
-    { (FcChar8 *) "sr",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sh, (FcChar16 *) numbers_sh } },
-    { (FcChar8 *) "sv",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_sv, (FcChar16 *) numbers_sv } },
-    { (FcChar8 *) "sw",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "syr",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_syr, (FcChar16 *) numbers_syr } },
-    { (FcChar8 *) "ta",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ta, (FcChar16 *) numbers_ta } },
-    { (FcChar8 *) "te",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_te, (FcChar16 *) numbers_te } },
-    { (FcChar8 *) "tg",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_tg, (FcChar16 *) numbers_tg } },
-    { (FcChar8 *) "th",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_th, (FcChar16 *) numbers_th } },
-    { (FcChar8 *) "ti",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_am, (FcChar16 *) numbers_am } },
-    { (FcChar8 *) "tk",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_tk, (FcChar16 *) numbers_tk } },
-    { (FcChar8 *) "tl",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_tl, (FcChar16 *) numbers_tl } },
-    { (FcChar8 *) "tn",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_tn, (FcChar16 *) numbers_tn } },
-    { (FcChar8 *) "to",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_sm, (FcChar16 *) numbers_sm } },
-    { (FcChar8 *) "tr",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_tr, (FcChar16 *) numbers_tr } },
-    { (FcChar8 *) "ts",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "tt",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_tt, (FcChar16 *) numbers_tt } },
-    { (FcChar8 *) "tw",
-      { FC_REF_CONSTANT, 5, (FcCharLeaf **) leaves_tw, (FcChar16 *) numbers_tw } },
-    { (FcChar8 *) "tyv",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ky, (FcChar16 *) numbers_ky } },
-    { (FcChar8 *) "ug",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ar, (FcChar16 *) numbers_ar } },
-    { (FcChar8 *) "uk",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_uk, (FcChar16 *) numbers_uk } },
-    { (FcChar8 *) "ur",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_ar, (FcChar16 *) numbers_ar } },
-    { (FcChar8 *) "uz",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_uz, (FcChar16 *) numbers_uz } },
-    { (FcChar8 *) "ven",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_ven, (FcChar16 *) numbers_ven } },
-    { (FcChar8 *) "vi",
-      { FC_REF_CONSTANT, 4, (FcCharLeaf **) leaves_vi, (FcChar16 *) numbers_vi } },
-    { (FcChar8 *) "vo",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_vo, (FcChar16 *) numbers_vo } },
-    { (FcChar8 *) "vot",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_vot, (FcChar16 *) numbers_vot } },
-    { (FcChar8 *) "wa",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_wa, (FcChar16 *) numbers_wa } },
-    { (FcChar8 *) "wen",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_wen, (FcChar16 *) numbers_wen } },
-    { (FcChar8 *) "wo",
-      { FC_REF_CONSTANT, 2, (FcCharLeaf **) leaves_wo, (FcChar16 *) numbers_wo } },
-    { (FcChar8 *) "xh",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-    { (FcChar8 *) "yap",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_yap, (FcChar16 *) numbers_yap } },
-    { (FcChar8 *) "yi",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_he, (FcChar16 *) numbers_he } },
-    { (FcChar8 *) "yo",
-      { FC_REF_CONSTANT, 4, (FcCharLeaf **) leaves_yo, (FcChar16 *) numbers_yo } },
-    { (FcChar8 *) "zh-cn",
-      { FC_REF_CONSTANT, 82, (FcCharLeaf **) leaves_zh_cn, (FcChar16 *) numbers_zh_cn } },
-    { (FcChar8 *) "zh-hk",
-      { FC_REF_CONSTANT, 83, (FcCharLeaf **) leaves_zh_hk, (FcChar16 *) numbers_zh_hk } },
-    { (FcChar8 *) "zh-mo",
-      { FC_REF_CONSTANT, 83, (FcCharLeaf **) leaves_zh_mo, (FcChar16 *) numbers_zh_mo } },
-    { (FcChar8 *) "zh-sg",
-      { FC_REF_CONSTANT, 82, (FcCharLeaf **) leaves_zh_cn, (FcChar16 *) numbers_zh_cn } },
-    { (FcChar8 *) "zh-tw",
-      { FC_REF_CONSTANT, 83, (FcCharLeaf **) leaves_zh_mo, (FcChar16 *) numbers_zh_mo } },
-    { (FcChar8 *) "zu",
-      { FC_REF_CONSTANT, 1, (FcCharLeaf **) leaves_fj, (FcChar16 *) numbers_fj } },
-};
-
-#define NUM_LANG_CHAR_SET      175
-#define NUM_LANG_SET_MAP       6
-
-static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {
-    { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003e00, }, /* zh */
-};
-
-#define NUM_COUNTRY_SET 1
index 071a7cb19297359818e432c0f246423a06759204..2077b6406aaabc3dfdeeca7f9161fb510a19185d 100644 (file)
@@ -1,5 +1,5 @@
 #
-# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.1 2002/07/12 07:52:15 keithp Exp $
+# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.2 2002/07/13 19:10:03 keithp Exp $
 #
 # Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
 #
 # Taken from Unicode coverage (1200-137f)
 #
 # Sylables
-1200-1206
-1208-1246
-1248
-124a-124d
-1250-1256
-1258
-125a-125d
-1260-1286
-1288
-128a-128d
-1290-12ae
-12b0
-12b2-12b5
-12b8-12be
-12c0
-12c2-12c5
-12c8-12ce
-12d0-12d6
-12d8-12ee
-12f0-130e
-1310
-1312-1315
-1318-131e
-1320-1346
-1348-135a
+1200-1206  # he-ho
+1208-1216  # le-Ho,  skip HWa
+1218-1226  # me-`so, skip `sWa
+1228-1230  # re-sWa
+1238-1246  # re-qo
+1248       # qWe
+124a-124d  # qWi-qW
+1260-1267  # be-bWa
+1270-1277  # te-to
+1280-1286  # `he-`ho
+1288       # hWe
+128a-128d  # hWi-hW
+1290-1297  # ne-nWa
+12a0-12a7  # a-o, skip ea
+12a8-12ae  # ke-ko
+12b0       # kWe
+12b2-12b5  # kWi-kW
+12c8-12ce  # we-wo
+12d0-12d6  # `e-`o
+12d8-12df  # ze-zWa
+12e8-12ee  # ye-yo
+12f0-12f7  # de-dWa
+1308-130e  # ge-go
+1310       # gWe
+1312-1315  # gWi-gW
+1320-1328  # Te-TWa
+1330-1346  # Pe-`So
+1348-1356  # fe-po, skip pWa, rYa, mYa, fYa
 #1361-1368     # punctuation
 #1369-1371     # digits
 #1372-137c     # numbers
diff --git a/fc-lang/ti.orth b/fc-lang/ti.orth
deleted file mode 100644 (file)
index d235715..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.2 2002/07/13 19:10:03 keithp Exp $
-#
-# Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of Keith Packard not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission.  Keith Packard makes no
-# representations about the suitability of this software for any purpose.  It
-# is provided "as is" without express or implied warranty.
-#
-# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tigrigna (TI)
-#
-# The same as Ethiopic
-#
-include gez.orth
diff --git a/fc-lang/ti_er.orth b/fc-lang/ti_er.orth
new file mode 100644 (file)
index 0000000..d1f9ff0
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.2 2002/07/13 19:10:03 keithp Exp $
+#
+# Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission.  Keith Packard makes no
+# representations about the suitability of this software for any purpose.  It
+# is provided "as is" without express or implied warranty.
+#
+# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Eritrean Tigrinya (TI-ER) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206  # he-ho
+1208-1216  # le-Ho,  skip HWa
+1218-121f  # me-mWa
+1228-1230  # re-sWa
+1238-1246  # re-qo
+1248       # qWe
+124a-124d  # qWi-qW
+1250-1257  # Qe-Qo
+1258       # QWe
+125a-125d  # QWi-QW
+1260-126e  # be-vo 
+1270-127f  # te-cWa
+1290-12a7  # ne-o
+12a8-12ae  # ke-ko
+12b0       # kWe
+12b2-12b5  # kWi-kW
+12c8-12ce  # Ke-Ko
+12c0       # KWe
+12c2-12c5  # KWi-KW
+12c8-12ce  # we-wo
+12d0-12d6  # `e-`o
+12d8-12ee  # ze-yo
+12f0-12f7  # de-dWa
+1300-130e  # je-go
+1310       # gWe
+1312-1315  # gWi-gW
+1320-133f  # Te-SWa
+1348-1356  # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/fc-lang/ti_et.orth b/fc-lang/ti_et.orth
new file mode 100644 (file)
index 0000000..4d0fb68
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# $XFree86: xc/lib/fontconfig/fc-lang/ti.orth,v 1.1 2002/08/08 00:10:51 keithp Exp $
+#
+# Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission.  Keith Packard makes no
+# representations about the suitability of this software for any purpose.  It
+# is provided "as is" without express or implied warranty.
+#
+# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Ethiopian Tigrinya (TI-ET) Ethiopic Convention
+#
+# The same as Ethiopic
+#
+include ti_er.orth
+1220-1226  # `se-`so
+1280-1286  # `he-`ho
+1288       # hWe
+128a-128d  # hWi-hW
+1340-1346  # `Se-`So
diff --git a/fc-lang/tig.orth b/fc-lang/tig.orth
new file mode 100644 (file)
index 0000000..c92a31f
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# $XFree86: xc/lib/fontconfig/fc-lang/gez.orth,v 1.2 2002/07/13 19:10:03 keithp Exp $
+#
+# Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Keith Packard not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission.  Keith Packard makes no
+# representations about the suitability of this software for any purpose.  It
+# is provided "as is" without express or implied warranty.
+#
+# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# Tigre (TIG) Ethiopic Convention
+#
+# Taken from Unicode coverage (1200-137f)
+#
+# Sylables
+1200-1206  # he-ho
+1208-1216  # le-Ho,  skip HWa
+1218-121f  # me-mWa
+1228-1230  # re-sWa
+1238-1246  # re-qo
+1248       # qWe
+124a-124d  # qWi-qW
+1260-126e  # be-vo
+1270-127f  # te-cWa
+1290-1297  # ne-nWa
+12a0-12a6  # a-o
+12a8-12ae  # ke-ko
+12b0       # kWe
+12b2-12b5  # kWi-kW
+12c8-12ce  # we-wo
+12d0-12d6  # `e-`o
+12d8-12df  # ze-zWa
+12e8-12ee  # ye-yo
+12f0-12f7  # de-dWa
+1300-130e  # je-go
+1310       # gWe
+1312-1315  # gWi-gW
+1320-133f  # Te-SWa
+1348-1356  # fe-po, skip pWa, rYa, mYa, fYa
diff --git a/fc-list/Imakefile b/fc-list/Imakefile
deleted file mode 100644 (file)
index 7425997..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-XCOMM $XFree86$
-
-#ifdef UseInstalled
-/* building outside the tree, use private defines */
-#include "../local.def"
-#endif
-
-INCLUDES=$(FREETYPE2INCLUDES) -I..
-
-LOCAL_LIBRARIES=FontconfigClientLibs
-        DEPLIBS=FontconfigClientDepLibs
-
-SRCS=fc-list.c
-OBJS=fc-list.o
-
-ComplexProgramTarget(fc-list)
-LinkBuildBinary(ProgramTargetName(fc-list))
diff --git a/fontconfig/Imakefile b/fontconfig/Imakefile
deleted file mode 100644 (file)
index 898ae71..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#define IncSubdir fontconfig
-
-HEADERS=fcfreetype.h fcprivate.h fontconfig.h
-
-BuildIncludes($(HEADERS),IncSubdir,..)
-#if BuildLibraries
-InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir,$(INSTINCFLAGS))
-#endif
diff --git a/src/Imakefile b/src/Imakefile
deleted file mode 100644 (file)
index ba6663f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifdef UseInstalled
-/* building outside the tree, use private defines */
-#include "../local.def"
-#endif
-
-#define LibHeaders NO
-
-FONTCONFIGSRC=.
-
-FC_DEFAULT_FONTS=$(FONTDIR)/Type1
-
-#define DoNormalLib NormalLibFontconfig
-#define DoSharedLib SharedLibFontconfig
-#define DoExtraLib SharedLibFontconfig
-#define DoDebugLib DebugLibFontconfig
-#define DoProfileLib ProfileLibFontconfig
-#define HasSharedData YES
-#define LibName fontconfig
-SOFONTCONFIGREV=1.0
-#define SoRev SOFONTCONFIGREV
-
-#include <Threads.tmpl>
-
-INCLUDES=$(FREETYPE2INCLUDES) -I..
-
-DEFINES=-DFC_DEFAULT_FONTS='"$(FC_DEFAULT_FONTS)"' -DHAVE_EXPAT
-
-EXPATLIB=-lexpat
-REQUIREDLIBS=$(LDPRELIBS) $(FREETYPE2LIB) $(EXPATLIB)
-
-SRCS=fcatomic.c fcblanks.c fccache.c fccfg.c fccharset.c fcdbg.c \
-     fcdefault.c fcdir.c fcfreetype.c fcfs.c fcinit.c fclang.c fclist.c \
-     fcmatch.c fcmatrix.c fcname.c fcpat.c fcstr.c fcxml.c
-
-OBJS=fcatomic.o fcblanks.o fccache.o fccfg.o fccharset.o fcdbg.o \
-     fcdefault.o fcdir.o fcfreetype.o fcfs.o fcinit.o fclang.o fclist.o \
-     fcmatch.o fcmatrix.o fcname.o fcpat.o fcstr.o fcxml.o
-
-#include <Library.tmpl>
-
-#if DoSharedLib && SharedDataSeparation
-SpecialCObjectRule(sharedlib,NullParameter,$(SHLIBDEF))
-#endif
-
-MANSUFFIX = $(LIBMANSUFFIX)
-InstallManPage(fontconfig,$(LIBMANDIR))
-DependTarget()
-
index c7d86706606a6102f286e4f776063c216a3ef9da..536e742a06ee91ec0610ac8c2e78fc716c1b351d 100644 (file)
@@ -172,7 +172,7 @@ FcCharSetPutLeaf (FcCharSet *fcs,
  * if desired
  */
 
-static FcCharLeaf *
+FcCharLeaf *
 FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4)
 {
     int                        pos;
@@ -1160,770 +1160,3 @@ FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c)
     
     return FcTrue;
 }
-
-/*
- * Figure out whether the available freetype has FT_Get_Next_Char
- */
-
-#if FREETYPE_MAJOR > 2
-# define HAS_NEXT_CHAR
-#else
-# if FREETYPE_MAJOR == 2
-#  if FREETYPE_MINOR > 0
-#   define HAS_NEXT_CHAR
-#  else
-#   if FREETYPE_MINOR == 0
-#    if FREETYPE_PATCH >= 9
-#     define HAS_NEXT_CHAR
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-/*
- * For our purposes, this approximation is sufficient
- */
-#ifndef HAS_NEXT_CHAR
-#define FT_Get_First_Char(face, gi) ((*(gi) = 1), 1)
-#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \
-                                         (*(gi) = 0), 0 : \
-                                         (*(gi) = 1), (ucs4) + 1)
-#warning "No FT_Get_Next_Char"
-#endif
-
-typedef struct _FcCharEnt {
-    FcChar16       bmp;
-    unsigned char   encode;
-} FcCharEnt;
-
-struct _FcCharMap {
-    const FcCharEnt *ent;
-    int                    nent;
-};
-
-typedef struct _FcFontDecode {
-    FT_Encoding            encoding;
-    const FcCharMap *map;
-    FcChar32       max;
-} FcFontDecode;
-
-static const FcCharEnt AppleRomanEnt[] = {
-    { 0x0020, 0x20 }, /* SPACE */
-    { 0x0021, 0x21 }, /* EXCLAMATION MARK */
-    { 0x0022, 0x22 }, /* QUOTATION MARK */
-    { 0x0023, 0x23 }, /* NUMBER SIGN */
-    { 0x0024, 0x24 }, /* DOLLAR SIGN */
-    { 0x0025, 0x25 }, /* PERCENT SIGN */
-    { 0x0026, 0x26 }, /* AMPERSAND */
-    { 0x0027, 0x27 }, /* APOSTROPHE */
-    { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
-    { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
-    { 0x002A, 0x2A }, /* ASTERISK */
-    { 0x002B, 0x2B }, /* PLUS SIGN */
-    { 0x002C, 0x2C }, /* COMMA */
-    { 0x002D, 0x2D }, /* HYPHEN-MINUS */
-    { 0x002E, 0x2E }, /* FULL STOP */
-    { 0x002F, 0x2F }, /* SOLIDUS */
-    { 0x0030, 0x30 }, /* DIGIT ZERO */
-    { 0x0031, 0x31 }, /* DIGIT ONE */
-    { 0x0032, 0x32 }, /* DIGIT TWO */
-    { 0x0033, 0x33 }, /* DIGIT THREE */
-    { 0x0034, 0x34 }, /* DIGIT FOUR */
-    { 0x0035, 0x35 }, /* DIGIT FIVE */
-    { 0x0036, 0x36 }, /* DIGIT SIX */
-    { 0x0037, 0x37 }, /* DIGIT SEVEN */
-    { 0x0038, 0x38 }, /* DIGIT EIGHT */
-    { 0x0039, 0x39 }, /* DIGIT NINE */
-    { 0x003A, 0x3A }, /* COLON */
-    { 0x003B, 0x3B }, /* SEMICOLON */
-    { 0x003C, 0x3C }, /* LESS-THAN SIGN */
-    { 0x003D, 0x3D }, /* EQUALS SIGN */
-    { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
-    { 0x003F, 0x3F }, /* QUESTION MARK */
-    { 0x0040, 0x40 }, /* COMMERCIAL AT */
-    { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
-    { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
-    { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
-    { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
-    { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
-    { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
-    { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
-    { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
-    { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
-    { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
-    { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
-    { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
-    { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
-    { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
-    { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
-    { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
-    { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
-    { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
-    { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
-    { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
-    { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
-    { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
-    { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
-    { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
-    { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
-    { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
-    { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
-    { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
-    { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
-    { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
-    { 0x005F, 0x5F }, /* LOW LINE */
-    { 0x0060, 0x60 }, /* GRAVE ACCENT */
-    { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
-    { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
-    { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
-    { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
-    { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
-    { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
-    { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
-    { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
-    { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
-    { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
-    { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
-    { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
-    { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
-    { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
-    { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
-    { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
-    { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
-    { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
-    { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
-    { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
-    { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
-    { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
-    { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
-    { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
-    { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
-    { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
-    { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
-    { 0x007C, 0x7C }, /* VERTICAL LINE */
-    { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
-    { 0x007E, 0x7E }, /* TILDE */
-    { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
-    { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
-    { 0x00A2, 0xA2 }, /* CENT SIGN */
-    { 0x00A3, 0xA3 }, /* POUND SIGN */
-    { 0x00A5, 0xB4 }, /* YEN SIGN */
-    { 0x00A7, 0xA4 }, /* SECTION SIGN */
-    { 0x00A8, 0xAC }, /* DIAERESIS */
-    { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
-    { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
-    { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
-    { 0x00AC, 0xC2 }, /* NOT SIGN */
-    { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
-    { 0x00AF, 0xF8 }, /* MACRON */
-    { 0x00B0, 0xA1 }, /* DEGREE SIGN */
-    { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
-    { 0x00B4, 0xAB }, /* ACUTE ACCENT */
-    { 0x00B5, 0xB5 }, /* MICRO SIGN */
-    { 0x00B6, 0xA6 }, /* PILCROW SIGN */
-    { 0x00B7, 0xE1 }, /* MIDDLE DOT */
-    { 0x00B8, 0xFC }, /* CEDILLA */
-    { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
-    { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
-    { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
-    { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
-    { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
-    { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
-    { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
-    { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
-    { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
-    { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
-    { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
-    { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
-    { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
-    { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
-    { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
-    { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
-    { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
-    { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
-    { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
-    { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
-    { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
-    { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
-    { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
-    { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
-    { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
-    { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
-    { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
-    { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
-    { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
-    { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
-    { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
-    { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
-    { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
-    { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
-    { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
-    { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
-    { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
-    { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
-    { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
-    { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
-    { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
-    { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
-    { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
-    { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
-    { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
-    { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
-    { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
-    { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
-    { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
-    { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
-    { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
-    { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
-    { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
-    { 0x00F7, 0xD6 }, /* DIVISION SIGN */
-    { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
-    { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
-    { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
-    { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
-    { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
-    { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
-    { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
-    { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
-    { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
-    { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
-    { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
-    { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
-    { 0x02C7, 0xFF }, /* CARON */
-    { 0x02D8, 0xF9 }, /* BREVE */
-    { 0x02D9, 0xFA }, /* DOT ABOVE */
-    { 0x02DA, 0xFB }, /* RING ABOVE */
-    { 0x02DB, 0xFE }, /* OGONEK */
-    { 0x02DC, 0xF7 }, /* SMALL TILDE */
-    { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
-    { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
-    { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
-    { 0x2013, 0xD0 }, /* EN DASH */
-    { 0x2014, 0xD1 }, /* EM DASH */
-    { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
-    { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
-    { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
-    { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
-    { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
-    { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
-    { 0x2020, 0xA0 }, /* DAGGER */
-    { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
-    { 0x2022, 0xA5 }, /* BULLET */
-    { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
-    { 0x2030, 0xE4 }, /* PER MILLE SIGN */
-    { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
-    { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
-    { 0x2044, 0xDA }, /* FRACTION SLASH */
-    { 0x20AC, 0xDB }, /* EURO SIGN */
-    { 0x2122, 0xAA }, /* TRADE MARK SIGN */
-    { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
-    { 0x2206, 0xC6 }, /* INCREMENT */
-    { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
-    { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
-    { 0x221A, 0xC3 }, /* SQUARE ROOT */
-    { 0x221E, 0xB0 }, /* INFINITY */
-    { 0x222B, 0xBA }, /* INTEGRAL */
-    { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
-    { 0x2260, 0xAD }, /* NOT EQUAL TO */
-    { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
-    { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
-    { 0x25CA, 0xD7 }, /* LOZENGE */
-    { 0xF8FF, 0xF0 }, /* Apple logo */
-    { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
-    { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
-};
-
-static const FcCharMap AppleRoman = {
-    AppleRomanEnt,
-    sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
-};
-
-static const FcCharEnt AdobeSymbolEnt[] = {
-    { 0x0020, 0x20 }, /* SPACE # space */
-    { 0x0021, 0x21 }, /* EXCLAMATION MARK      # exclam */
-    { 0x0023, 0x23 }, /* NUMBER SIGN   # numbersign */
-    { 0x0025, 0x25 }, /* PERCENT SIGN  # percent */
-    { 0x0026, 0x26 }, /* AMPERSAND     # ampersand */
-    { 0x0028, 0x28 }, /* LEFT PARENTHESIS      # parenleft */
-    { 0x0029, 0x29 }, /* RIGHT PARENTHESIS     # parenright */
-    { 0x002B, 0x2B }, /* PLUS SIGN     # plus */
-    { 0x002C, 0x2C }, /* COMMA # comma */
-    { 0x002E, 0x2E }, /* FULL STOP     # period */
-    { 0x002F, 0x2F }, /* SOLIDUS       # slash */
-    { 0x0030, 0x30 }, /* DIGIT ZERO    # zero */
-    { 0x0031, 0x31 }, /* DIGIT ONE     # one */
-    { 0x0032, 0x32 }, /* DIGIT TWO     # two */
-    { 0x0033, 0x33 }, /* DIGIT THREE   # three */
-    { 0x0034, 0x34 }, /* DIGIT FOUR    # four */
-    { 0x0035, 0x35 }, /* DIGIT FIVE    # five */
-    { 0x0036, 0x36 }, /* DIGIT SIX     # six */
-    { 0x0037, 0x37 }, /* DIGIT SEVEN   # seven */
-    { 0x0038, 0x38 }, /* DIGIT EIGHT   # eight */
-    { 0x0039, 0x39 }, /* DIGIT NINE    # nine */
-    { 0x003A, 0x3A }, /* COLON # colon */
-    { 0x003B, 0x3B }, /* SEMICOLON     # semicolon */
-    { 0x003C, 0x3C }, /* LESS-THAN SIGN        # less */
-    { 0x003D, 0x3D }, /* EQUALS SIGN   # equal */
-    { 0x003E, 0x3E }, /* GREATER-THAN SIGN     # greater */
-    { 0x003F, 0x3F }, /* QUESTION MARK # question */
-    { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET   # bracketleft */
-    { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET  # bracketright */
-    { 0x005F, 0x5F }, /* LOW LINE      # underscore */
-    { 0x007B, 0x7B }, /* LEFT CURLY BRACKET    # braceleft */
-    { 0x007C, 0x7C }, /* VERTICAL LINE # bar */
-    { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET   # braceright */
-    { 0x00A0, 0x20 }, /* NO-BREAK SPACE        # space */
-    { 0x00AC, 0xD8 }, /* NOT SIGN      # logicalnot */
-    { 0x00B0, 0xB0 }, /* DEGREE SIGN   # degree */
-    { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN       # plusminus */
-    { 0x00B5, 0x6D }, /* MICRO SIGN    # mu */
-    { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN   # multiply */
-    { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */
-    { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK        # florin */
-    { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA    # Alpha */
-    { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA     # Beta */
-    { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA    # Gamma */
-    { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA    # Delta */
-    { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON  # Epsilon */
-    { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA     # Zeta */
-    { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA      # Eta */
-    { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA    # Theta */
-    { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA     # Iota */
-    { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA    # Kappa */
-    { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA    # Lambda */
-    { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU       # Mu */
-    { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU       # Nu */
-    { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI       # Xi */
-    { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON  # Omicron */
-    { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI       # Pi */
-    { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO      # Rho */
-    { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA    # Sigma */
-    { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU      # Tau */
-    { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON  # Upsilon */
-    { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI      # Phi */
-    { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI      # Chi */
-    { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI      # Psi */
-    { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA    # Omega */
-    { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA      # alpha */
-    { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA       # beta */
-    { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA      # gamma */
-    { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA      # delta */
-    { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON    # epsilon */
-    { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA       # zeta */
-    { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA        # eta */
-    { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA      # theta */
-    { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA       # iota */
-    { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA      # kappa */
-    { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA      # lambda */
-    { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */
-    { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */
-    { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */
-    { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON    # omicron */
-    { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */
-    { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO        # rho */
-    { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA        # sigma1 */
-    { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA      # sigma */
-    { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU        # tau */
-    { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON    # upsilon */
-    { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI        # phi */
-    { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI        # chi */
-    { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI        # psi */
-    { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA      # omega */
-    { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL    # theta1 */
-    { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL        # Upsilon1 */
-    { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL      # phi1 */
-    { 0x03D6, 0x76 }, /* GREEK PI SYMBOL       # omega1 */
-    { 0x2022, 0xB7 }, /* BULLET        # bullet */
-    { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS   # ellipsis */
-    { 0x2032, 0xA2 }, /* PRIME # minute */
-    { 0x2033, 0xB2 }, /* DOUBLE PRIME  # second */
-    { 0x2044, 0xA4 }, /* FRACTION SLASH        # fraction */
-    { 0x20AC, 0xA0 }, /* EURO SIGN     # Euro */
-    { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I        # Ifraktur */
-    { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P      # weierstrass */
-    { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R        # Rfraktur */
-    { 0x2126, 0x57 }, /* OHM SIGN      # Omega */
-    { 0x2135, 0xC0 }, /* ALEF SYMBOL   # aleph */
-    { 0x2190, 0xAC }, /* LEFTWARDS ARROW       # arrowleft */
-    { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */
-    { 0x2192, 0xAE }, /* RIGHTWARDS ARROW      # arrowright */
-    { 0x2193, 0xAF }, /* DOWNWARDS ARROW       # arrowdown */
-    { 0x2194, 0xAB }, /* LEFT RIGHT ARROW      # arrowboth */
-    { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */
-    { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW        # arrowdblleft */
-    { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW  # arrowdblup */
-    { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW       # arrowdblright */
-    { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW        # arrowdbldown */
-    { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW       # arrowdblboth */
-    { 0x2200, 0x22 }, /* FOR ALL       # universal */
-    { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL  # partialdiff */
-    { 0x2203, 0x24 }, /* THERE EXISTS  # existential */
-    { 0x2205, 0xC6 }, /* EMPTY SET     # emptyset */
-    { 0x2206, 0x44 }, /* INCREMENT     # Delta */
-    { 0x2207, 0xD1 }, /* NABLA # gradient */
-    { 0x2208, 0xCE }, /* ELEMENT OF    # element */
-    { 0x2209, 0xCF }, /* NOT AN ELEMENT OF     # notelement */
-    { 0x220B, 0x27 }, /* CONTAINS AS MEMBER    # suchthat */
-    { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */
-    { 0x2211, 0xE5 }, /* N-ARY SUMMATION       # summation */
-    { 0x2212, 0x2D }, /* MINUS SIGN    # minus */
-    { 0x2215, 0xA4 }, /* DIVISION SLASH        # fraction */
-    { 0x2217, 0x2A }, /* ASTERISK OPERATOR     # asteriskmath */
-    { 0x221A, 0xD6 }, /* SQUARE ROOT   # radical */
-    { 0x221D, 0xB5 }, /* PROPORTIONAL TO       # proportional */
-    { 0x221E, 0xA5 }, /* INFINITY      # infinity */
-    { 0x2220, 0xD0 }, /* ANGLE # angle */
-    { 0x2227, 0xD9 }, /* LOGICAL AND   # logicaland */
-    { 0x2228, 0xDA }, /* LOGICAL OR    # logicalor */
-    { 0x2229, 0xC7 }, /* INTERSECTION  # intersection */
-    { 0x222A, 0xC8 }, /* UNION # union */
-    { 0x222B, 0xF2 }, /* INTEGRAL      # integral */
-    { 0x2234, 0x5C }, /* THEREFORE     # therefore */
-    { 0x223C, 0x7E }, /* TILDE OPERATOR        # similar */
-    { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO        # congruent */
-    { 0x2248, 0xBB }, /* ALMOST EQUAL TO       # approxequal */
-    { 0x2260, 0xB9 }, /* NOT EQUAL TO  # notequal */
-    { 0x2261, 0xBA }, /* IDENTICAL TO  # equivalence */
-    { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */
-    { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO      # greaterequal */
-    { 0x2282, 0xCC }, /* SUBSET OF     # propersubset */
-    { 0x2283, 0xC9 }, /* SUPERSET OF   # propersuperset */
-    { 0x2284, 0xCB }, /* NOT A SUBSET OF       # notsubset */
-    { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */
-    { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO       # reflexsuperset */
-    { 0x2295, 0xC5 }, /* CIRCLED PLUS  # circleplus */
-    { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */
-    { 0x22A5, 0x5E }, /* UP TACK       # perpendicular */
-    { 0x22C5, 0xD7 }, /* DOT OPERATOR  # dotmath */
-    { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL     # integraltp */
-    { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL  # integralbt */
-    { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET   # angleleft */
-    { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET  # angleright */
-    { 0x25CA, 0xE0 }, /* LOZENGE       # lozenge */
-    { 0x2660, 0xAA }, /* BLACK SPADE SUIT      # spade */
-    { 0x2663, 0xA7 }, /* BLACK CLUB SUIT       # club */
-    { 0x2665, 0xA9 }, /* BLACK HEART SUIT      # heart */
-    { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT    # diamond */
-    { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF  # copyrightserif (CUS) */
-    { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */
-    { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */
-    { 0xF8E5, 0x60 }, /* RADICAL EXTENDER      # radicalex (CUS) */
-    { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER       # arrowvertex (CUS) */
-    { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER     # arrowhorizex (CUS) */
-    { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF    # registersans (CUS) */
-    { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF     # copyrightsans (CUS) */
-    { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF    # trademarksans (CUS) */
-    { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP        # parenlefttp (CUS) */
-    { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER   # parenleftex (CUS) */
-    { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM     # parenleftbt (CUS) */
-    { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP       # bracketlefttp (CUS) */
-    { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER  # bracketleftex (CUS) */
-    { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM    # bracketleftbt (CUS) */
-    { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP        # bracelefttp (CUS) */
-    { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID        # braceleftmid (CUS) */
-    { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM     # braceleftbt (CUS) */
-    { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER        # braceex (CUS) */
-    { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER     # integralex (CUS) */
-    { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP       # parenrighttp (CUS) */
-    { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER  # parenrightex (CUS) */
-    { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM    # parenrightbt (CUS) */
-    { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP      # bracketrighttp (CUS) */
-    { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */
-    { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM   # bracketrightbt (CUS) */
-    { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP       # bracerighttp (CUS) */
-    { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID       # bracerightmid (CUS) */
-    { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM    # bracerightbt (CUS) */
-};
-
-static const FcCharMap AdobeSymbol = {
-    AdobeSymbolEnt,
-    sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]),
-};
-    
-static const FcFontDecode fcFontDecoders[] = {
-    { ft_encoding_unicode,     0,              (1 << 21) - 1 },
-    { ft_encoding_symbol,      &AdobeSymbol,   (1 << 16) - 1 },
-    { ft_encoding_apple_roman, &AppleRoman,    (1 << 16) - 1 },
-};
-
-#define NUM_DECODE  (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
-
-FcChar32
-FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map)
-{
-    int                low, high, mid;
-    FcChar16   bmp;
-
-    low = 0;
-    high = map->nent - 1;
-    if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4)
-       return ~0;
-    while (low <= high)
-    {
-       mid = (high + low) >> 1;
-       bmp = map->ent[mid].bmp;
-       if (ucs4 == bmp)
-           return (FT_ULong) map->ent[mid].encode;
-       if (ucs4 < bmp)
-           high = mid - 1;
-       else
-           low = mid + 1;
-    }
-    return ~0;
-}
-
-FcChar32
-FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map)
-{
-    int            i;
-
-    for (i = 0; i < map->nent; i++)
-       if (map->ent[i].encode == private)
-           return (FcChar32) map->ent[i].bmp;
-    return ~0;
-}
-
-const FcCharMap *
-FcFreeTypeGetPrivateMap (FT_Encoding encoding)
-{
-    int        i;
-
-    for (i = 0; i < NUM_DECODE; i++)
-       if (fcFontDecoders[i].encoding == encoding)
-           return fcFontDecoders[i].map;
-    return 0;
-}
-
-/*
- * Map a UCS4 glyph to a glyph index.  Use all available encoding
- * tables to try and find one that works.  This information is expected
- * to be cached by higher levels, so performance isn't critical
- */
-
-FT_UInt
-FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
-{
-    int                    initial, offset, decode;
-    FT_UInt        glyphindex;
-    FcChar32       charcode;
-
-    initial = 0;
-    /*
-     * Find the current encoding
-     */
-    if (face->charmap)
-    {
-       for (; initial < NUM_DECODE; initial++)
-           if (fcFontDecoders[initial].encoding == face->charmap->encoding)
-               break;
-       if (initial == NUM_DECODE)
-           initial = 0;
-    }
-    /*
-     * Check each encoding for the glyph, starting with the current one
-     */
-    for (offset = 0; offset < NUM_DECODE; offset++)
-    {
-       decode = (initial + offset) % NUM_DECODE;
-       if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding)
-           if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0)
-               continue;
-       if (fcFontDecoders[decode].map)
-       {
-           charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map);
-           if (charcode == ~0)
-               continue;
-       }
-       else
-           charcode = ucs4;
-       glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode);
-       if (glyphindex)
-           return glyphindex;
-    }
-    return 0;
-}
-
-static FcBool
-FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4, 
-                     FT_UInt glyph, FcBlanks *blanks)
-{
-    FT_Int         load_flags = FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
-    FT_GlyphSlot    slot;
-    
-    /*
-     * When using scalable fonts, only report those glyphs
-     * which can be scaled; otherwise those fonts will
-     * only be available at some sizes, and never when
-     * transformed.  Avoid this by simply reporting bitmap-only
-     * glyphs as missing
-     */
-    if (face->face_flags & FT_FACE_FLAG_SCALABLE)
-       load_flags |= FT_LOAD_NO_BITMAP;
-    
-    if (FT_Load_Glyph (face, glyph, load_flags))
-       return FcFalse;
-    
-    slot = face->glyph;
-    if (!glyph)
-       return FcFalse;
-    
-    switch (slot->format) {
-    case ft_glyph_format_bitmap:
-       /*
-        * Bitmaps are assumed to be reasonable; if
-        * this proves to be a rash assumption, this
-        * code can be easily modified
-        */
-       return FcTrue;
-    case ft_glyph_format_outline:
-       /*
-        * Glyphs with contours are always OK
-        */
-       if (slot->outline.n_contours != 0)
-           return FcTrue;
-       /*
-        * Glyphs with no contours are only OK if
-        * they're members of the Blanks set specified
-        * in the configuration.  If blanks isn't set,
-        * then allow any glyph to be blank
-        */
-       if (!blanks || FcBlanksIsMember (blanks, ucs4))
-           return FcTrue;
-       /* fall through ... */
-    default:
-       break;
-    }
-    return FcFalse;
-}
-
-FcCharSet *
-FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
-{
-    FcChar32       page, off, max, ucs4;
-#ifdef CHECK
-    FcChar32       font_max = 0;
-#endif
-    FcCharSet      *fcs;
-    FcCharLeaf     *leaf;
-    const FcCharMap *map;
-    int                    o;
-    int                    i;
-    FT_UInt        glyph;
-
-    fcs = FcCharSetCreate ();
-    if (!fcs)
-       goto bail0;
-    
-    for (o = 0; o < NUM_DECODE; o++)
-    {
-       if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0)
-           continue;
-       map = fcFontDecoders[o].map;
-       if (map)
-       {
-           /*
-            * Non-Unicode tables are easy; there's a list of all possible
-            * characters
-            */
-           for (i = 0; i < map->nent; i++)
-           {
-               ucs4 = map->ent[i].bmp;
-               glyph = FT_Get_Char_Index (face, map->ent[i].encode);
-               if (glyph && FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks))
-               {
-                   leaf = FcCharSetFindLeafCreate (fcs, ucs4);
-                   if (!leaf)
-                       goto bail1;
-                   leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
-#ifdef CHECK
-                   if (ucs4 > font_max)
-                       font_max = ucs4;
-#endif
-               }
-           }
-       }
-       else
-       {
-           FT_UInt gindex;
-         
-           max = fcFontDecoders[o].max;
-           /*
-            * Find the first encoded character in the font
-            */
-           if (FT_Get_Char_Index (face, 0))
-           {
-               ucs4 = 0;
-               gindex = 1;
-           }
-           else
-           {
-               ucs4 = FT_Get_Next_Char (face, 0, &gindex);
-               if (!ucs4)
-                   gindex = 0;
-           }
-
-           while (gindex)
-           {
-               page = ucs4 >> 8;
-               leaf = 0;
-               while ((ucs4 >> 8) == page)
-               {
-                   glyph = FT_Get_Char_Index (face, ucs4);
-                   if (glyph && FcFreeTypeCheckGlyph (face, ucs4, 
-                                                      glyph, blanks))
-                   {
-                       if (!leaf)
-                       {
-                           leaf = FcCharSetFindLeafCreate (fcs, ucs4);
-                           if (!leaf)
-                               goto bail1;
-                       }
-                       off = ucs4 & 0xff;
-                       leaf->map[off >> 5] |= (1 << (off & 0x1f));
-#ifdef CHECK
-                       if (ucs4 > font_max)
-                           font_max = ucs4;
-#endif
-                   }
-                   ucs4++;
-               }
-               ucs4 = FT_Get_Next_Char (face, ucs4 - 1, &gindex);
-               if (!ucs4)
-                   gindex = 0;
-           }
-#ifdef CHECK
-           for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
-           {
-               FcBool      FT_Has, FC_Has;
-
-               FT_Has = FT_Get_Char_Index (face, ucs4) != 0;
-               FC_Has = FcCharSetHasChar (fcs, ucs4);
-               if (FT_Has != FC_Has)
-               {
-                   printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has);
-               }
-           }
-#endif
-       }
-    }
-#ifdef CHECK
-    printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs));
-    for (ucs4 = 0; ucs4 <= font_max; ucs4++)
-    {
-       FcBool  has_char = FcFreeTypeCharIndex (face, ucs4) != 0;
-       FcBool  has_bit = FcCharSetHasChar (fcs, ucs4);
-
-       if (has_char && !has_bit)
-           printf ("Bitmap missing char 0x%x\n", ucs4);
-       else if (!has_char && has_bit)
-           printf ("Bitmap extra char 0x%x\n", ucs4);
-    }
-#endif
-    return fcs;
-bail1:
-    FcCharSetDestroy (fcs);
-bail0:
-    return 0;
-}
-
index 5f8dbd2d56a88de48c8cf4693219077fc55e03e9..b5a859fe1cc951889a9fa3c00150ba65ae2ff3ff 100644 (file)
@@ -581,3 +581,771 @@ bail:
     FT_Done_FreeType (ftLibrary);
     return 0;
 }
+
+
+/*
+ * Figure out whether the available freetype has FT_Get_Next_Char
+ */
+
+#if FREETYPE_MAJOR > 2
+# define HAS_NEXT_CHAR
+#else
+# if FREETYPE_MAJOR == 2
+#  if FREETYPE_MINOR > 0
+#   define HAS_NEXT_CHAR
+#  else
+#   if FREETYPE_MINOR == 0
+#    if FREETYPE_PATCH >= 9
+#     define HAS_NEXT_CHAR
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+/*
+ * For our purposes, this approximation is sufficient
+ */
+#ifndef HAS_NEXT_CHAR
+#define FT_Get_First_Char(face, gi) ((*(gi) = 1), 1)
+#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \
+                                         (*(gi) = 0), 0 : \
+                                         (*(gi) = 1), (ucs4) + 1)
+#warning "No FT_Get_Next_Char"
+#endif
+
+typedef struct _FcCharEnt {
+    FcChar16       bmp;
+    unsigned char   encode;
+} FcCharEnt;
+
+struct _FcCharMap {
+    const FcCharEnt *ent;
+    int                    nent;
+};
+
+typedef struct _FcFontDecode {
+    FT_Encoding            encoding;
+    const FcCharMap *map;
+    FcChar32       max;
+} FcFontDecode;
+
+static const FcCharEnt AppleRomanEnt[] = {
+    { 0x0020, 0x20 }, /* SPACE */
+    { 0x0021, 0x21 }, /* EXCLAMATION MARK */
+    { 0x0022, 0x22 }, /* QUOTATION MARK */
+    { 0x0023, 0x23 }, /* NUMBER SIGN */
+    { 0x0024, 0x24 }, /* DOLLAR SIGN */
+    { 0x0025, 0x25 }, /* PERCENT SIGN */
+    { 0x0026, 0x26 }, /* AMPERSAND */
+    { 0x0027, 0x27 }, /* APOSTROPHE */
+    { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
+    { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
+    { 0x002A, 0x2A }, /* ASTERISK */
+    { 0x002B, 0x2B }, /* PLUS SIGN */
+    { 0x002C, 0x2C }, /* COMMA */
+    { 0x002D, 0x2D }, /* HYPHEN-MINUS */
+    { 0x002E, 0x2E }, /* FULL STOP */
+    { 0x002F, 0x2F }, /* SOLIDUS */
+    { 0x0030, 0x30 }, /* DIGIT ZERO */
+    { 0x0031, 0x31 }, /* DIGIT ONE */
+    { 0x0032, 0x32 }, /* DIGIT TWO */
+    { 0x0033, 0x33 }, /* DIGIT THREE */
+    { 0x0034, 0x34 }, /* DIGIT FOUR */
+    { 0x0035, 0x35 }, /* DIGIT FIVE */
+    { 0x0036, 0x36 }, /* DIGIT SIX */
+    { 0x0037, 0x37 }, /* DIGIT SEVEN */
+    { 0x0038, 0x38 }, /* DIGIT EIGHT */
+    { 0x0039, 0x39 }, /* DIGIT NINE */
+    { 0x003A, 0x3A }, /* COLON */
+    { 0x003B, 0x3B }, /* SEMICOLON */
+    { 0x003C, 0x3C }, /* LESS-THAN SIGN */
+    { 0x003D, 0x3D }, /* EQUALS SIGN */
+    { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
+    { 0x003F, 0x3F }, /* QUESTION MARK */
+    { 0x0040, 0x40 }, /* COMMERCIAL AT */
+    { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
+    { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
+    { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
+    { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
+    { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
+    { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
+    { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
+    { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
+    { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
+    { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
+    { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
+    { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
+    { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
+    { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
+    { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
+    { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
+    { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
+    { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
+    { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
+    { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
+    { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
+    { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
+    { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
+    { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
+    { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
+    { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
+    { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
+    { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
+    { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
+    { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
+    { 0x005F, 0x5F }, /* LOW LINE */
+    { 0x0060, 0x60 }, /* GRAVE ACCENT */
+    { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
+    { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
+    { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
+    { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
+    { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
+    { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
+    { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
+    { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
+    { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
+    { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
+    { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
+    { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
+    { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
+    { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
+    { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
+    { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
+    { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
+    { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
+    { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
+    { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
+    { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
+    { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
+    { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
+    { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
+    { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
+    { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
+    { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
+    { 0x007C, 0x7C }, /* VERTICAL LINE */
+    { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
+    { 0x007E, 0x7E }, /* TILDE */
+    { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
+    { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
+    { 0x00A2, 0xA2 }, /* CENT SIGN */
+    { 0x00A3, 0xA3 }, /* POUND SIGN */
+    { 0x00A5, 0xB4 }, /* YEN SIGN */
+    { 0x00A7, 0xA4 }, /* SECTION SIGN */
+    { 0x00A8, 0xAC }, /* DIAERESIS */
+    { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
+    { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
+    { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
+    { 0x00AC, 0xC2 }, /* NOT SIGN */
+    { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
+    { 0x00AF, 0xF8 }, /* MACRON */
+    { 0x00B0, 0xA1 }, /* DEGREE SIGN */
+    { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
+    { 0x00B4, 0xAB }, /* ACUTE ACCENT */
+    { 0x00B5, 0xB5 }, /* MICRO SIGN */
+    { 0x00B6, 0xA6 }, /* PILCROW SIGN */
+    { 0x00B7, 0xE1 }, /* MIDDLE DOT */
+    { 0x00B8, 0xFC }, /* CEDILLA */
+    { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
+    { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
+    { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
+    { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
+    { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
+    { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
+    { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
+    { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
+    { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
+    { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
+    { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
+    { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
+    { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
+    { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
+    { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
+    { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
+    { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
+    { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
+    { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
+    { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
+    { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
+    { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
+    { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
+    { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
+    { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
+    { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
+    { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
+    { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
+    { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
+    { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
+    { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
+    { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
+    { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
+    { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
+    { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
+    { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
+    { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
+    { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
+    { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
+    { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
+    { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
+    { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
+    { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
+    { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
+    { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
+    { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
+    { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
+    { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
+    { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
+    { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
+    { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
+    { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
+    { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
+    { 0x00F7, 0xD6 }, /* DIVISION SIGN */
+    { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
+    { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
+    { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
+    { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
+    { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
+    { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
+    { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
+    { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
+    { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
+    { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
+    { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
+    { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
+    { 0x02C7, 0xFF }, /* CARON */
+    { 0x02D8, 0xF9 }, /* BREVE */
+    { 0x02D9, 0xFA }, /* DOT ABOVE */
+    { 0x02DA, 0xFB }, /* RING ABOVE */
+    { 0x02DB, 0xFE }, /* OGONEK */
+    { 0x02DC, 0xF7 }, /* SMALL TILDE */
+    { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
+    { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
+    { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
+    { 0x2013, 0xD0 }, /* EN DASH */
+    { 0x2014, 0xD1 }, /* EM DASH */
+    { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
+    { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
+    { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
+    { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
+    { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
+    { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
+    { 0x2020, 0xA0 }, /* DAGGER */
+    { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
+    { 0x2022, 0xA5 }, /* BULLET */
+    { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
+    { 0x2030, 0xE4 }, /* PER MILLE SIGN */
+    { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+    { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+    { 0x2044, 0xDA }, /* FRACTION SLASH */
+    { 0x20AC, 0xDB }, /* EURO SIGN */
+    { 0x2122, 0xAA }, /* TRADE MARK SIGN */
+    { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
+    { 0x2206, 0xC6 }, /* INCREMENT */
+    { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
+    { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
+    { 0x221A, 0xC3 }, /* SQUARE ROOT */
+    { 0x221E, 0xB0 }, /* INFINITY */
+    { 0x222B, 0xBA }, /* INTEGRAL */
+    { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
+    { 0x2260, 0xAD }, /* NOT EQUAL TO */
+    { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
+    { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
+    { 0x25CA, 0xD7 }, /* LOZENGE */
+    { 0xF8FF, 0xF0 }, /* Apple logo */
+    { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
+    { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
+};
+
+static const FcCharMap AppleRoman = {
+    AppleRomanEnt,
+    sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
+};
+
+static const FcCharEnt AdobeSymbolEnt[] = {
+    { 0x0020, 0x20 }, /* SPACE # space */
+    { 0x0021, 0x21 }, /* EXCLAMATION MARK      # exclam */
+    { 0x0023, 0x23 }, /* NUMBER SIGN   # numbersign */
+    { 0x0025, 0x25 }, /* PERCENT SIGN  # percent */
+    { 0x0026, 0x26 }, /* AMPERSAND     # ampersand */
+    { 0x0028, 0x28 }, /* LEFT PARENTHESIS      # parenleft */
+    { 0x0029, 0x29 }, /* RIGHT PARENTHESIS     # parenright */
+    { 0x002B, 0x2B }, /* PLUS SIGN     # plus */
+    { 0x002C, 0x2C }, /* COMMA # comma */
+    { 0x002E, 0x2E }, /* FULL STOP     # period */
+    { 0x002F, 0x2F }, /* SOLIDUS       # slash */
+    { 0x0030, 0x30 }, /* DIGIT ZERO    # zero */
+    { 0x0031, 0x31 }, /* DIGIT ONE     # one */
+    { 0x0032, 0x32 }, /* DIGIT TWO     # two */
+    { 0x0033, 0x33 }, /* DIGIT THREE   # three */
+    { 0x0034, 0x34 }, /* DIGIT FOUR    # four */
+    { 0x0035, 0x35 }, /* DIGIT FIVE    # five */
+    { 0x0036, 0x36 }, /* DIGIT SIX     # six */
+    { 0x0037, 0x37 }, /* DIGIT SEVEN   # seven */
+    { 0x0038, 0x38 }, /* DIGIT EIGHT   # eight */
+    { 0x0039, 0x39 }, /* DIGIT NINE    # nine */
+    { 0x003A, 0x3A }, /* COLON # colon */
+    { 0x003B, 0x3B }, /* SEMICOLON     # semicolon */
+    { 0x003C, 0x3C }, /* LESS-THAN SIGN        # less */
+    { 0x003D, 0x3D }, /* EQUALS SIGN   # equal */
+    { 0x003E, 0x3E }, /* GREATER-THAN SIGN     # greater */
+    { 0x003F, 0x3F }, /* QUESTION MARK # question */
+    { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET   # bracketleft */
+    { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET  # bracketright */
+    { 0x005F, 0x5F }, /* LOW LINE      # underscore */
+    { 0x007B, 0x7B }, /* LEFT CURLY BRACKET    # braceleft */
+    { 0x007C, 0x7C }, /* VERTICAL LINE # bar */
+    { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET   # braceright */
+    { 0x00A0, 0x20 }, /* NO-BREAK SPACE        # space */
+    { 0x00AC, 0xD8 }, /* NOT SIGN      # logicalnot */
+    { 0x00B0, 0xB0 }, /* DEGREE SIGN   # degree */
+    { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN       # plusminus */
+    { 0x00B5, 0x6D }, /* MICRO SIGN    # mu */
+    { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN   # multiply */
+    { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */
+    { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK        # florin */
+    { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA    # Alpha */
+    { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA     # Beta */
+    { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA    # Gamma */
+    { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA    # Delta */
+    { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON  # Epsilon */
+    { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA     # Zeta */
+    { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA      # Eta */
+    { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA    # Theta */
+    { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA     # Iota */
+    { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA    # Kappa */
+    { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA    # Lambda */
+    { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU       # Mu */
+    { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU       # Nu */
+    { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI       # Xi */
+    { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON  # Omicron */
+    { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI       # Pi */
+    { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO      # Rho */
+    { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA    # Sigma */
+    { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU      # Tau */
+    { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON  # Upsilon */
+    { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI      # Phi */
+    { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI      # Chi */
+    { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI      # Psi */
+    { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA    # Omega */
+    { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA      # alpha */
+    { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA       # beta */
+    { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA      # gamma */
+    { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA      # delta */
+    { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON    # epsilon */
+    { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA       # zeta */
+    { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA        # eta */
+    { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA      # theta */
+    { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA       # iota */
+    { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA      # kappa */
+    { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA      # lambda */
+    { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */
+    { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */
+    { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */
+    { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON    # omicron */
+    { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */
+    { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO        # rho */
+    { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA        # sigma1 */
+    { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA      # sigma */
+    { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU        # tau */
+    { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON    # upsilon */
+    { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI        # phi */
+    { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI        # chi */
+    { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI        # psi */
+    { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA      # omega */
+    { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL    # theta1 */
+    { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL        # Upsilon1 */
+    { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL      # phi1 */
+    { 0x03D6, 0x76 }, /* GREEK PI SYMBOL       # omega1 */
+    { 0x2022, 0xB7 }, /* BULLET        # bullet */
+    { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS   # ellipsis */
+    { 0x2032, 0xA2 }, /* PRIME # minute */
+    { 0x2033, 0xB2 }, /* DOUBLE PRIME  # second */
+    { 0x2044, 0xA4 }, /* FRACTION SLASH        # fraction */
+    { 0x20AC, 0xA0 }, /* EURO SIGN     # Euro */
+    { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I        # Ifraktur */
+    { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P      # weierstrass */
+    { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R        # Rfraktur */
+    { 0x2126, 0x57 }, /* OHM SIGN      # Omega */
+    { 0x2135, 0xC0 }, /* ALEF SYMBOL   # aleph */
+    { 0x2190, 0xAC }, /* LEFTWARDS ARROW       # arrowleft */
+    { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */
+    { 0x2192, 0xAE }, /* RIGHTWARDS ARROW      # arrowright */
+    { 0x2193, 0xAF }, /* DOWNWARDS ARROW       # arrowdown */
+    { 0x2194, 0xAB }, /* LEFT RIGHT ARROW      # arrowboth */
+    { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */
+    { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW        # arrowdblleft */
+    { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW  # arrowdblup */
+    { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW       # arrowdblright */
+    { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW        # arrowdbldown */
+    { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW       # arrowdblboth */
+    { 0x2200, 0x22 }, /* FOR ALL       # universal */
+    { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL  # partialdiff */
+    { 0x2203, 0x24 }, /* THERE EXISTS  # existential */
+    { 0x2205, 0xC6 }, /* EMPTY SET     # emptyset */
+    { 0x2206, 0x44 }, /* INCREMENT     # Delta */
+    { 0x2207, 0xD1 }, /* NABLA # gradient */
+    { 0x2208, 0xCE }, /* ELEMENT OF    # element */
+    { 0x2209, 0xCF }, /* NOT AN ELEMENT OF     # notelement */
+    { 0x220B, 0x27 }, /* CONTAINS AS MEMBER    # suchthat */
+    { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */
+    { 0x2211, 0xE5 }, /* N-ARY SUMMATION       # summation */
+    { 0x2212, 0x2D }, /* MINUS SIGN    # minus */
+    { 0x2215, 0xA4 }, /* DIVISION SLASH        # fraction */
+    { 0x2217, 0x2A }, /* ASTERISK OPERATOR     # asteriskmath */
+    { 0x221A, 0xD6 }, /* SQUARE ROOT   # radical */
+    { 0x221D, 0xB5 }, /* PROPORTIONAL TO       # proportional */
+    { 0x221E, 0xA5 }, /* INFINITY      # infinity */
+    { 0x2220, 0xD0 }, /* ANGLE # angle */
+    { 0x2227, 0xD9 }, /* LOGICAL AND   # logicaland */
+    { 0x2228, 0xDA }, /* LOGICAL OR    # logicalor */
+    { 0x2229, 0xC7 }, /* INTERSECTION  # intersection */
+    { 0x222A, 0xC8 }, /* UNION # union */
+    { 0x222B, 0xF2 }, /* INTEGRAL      # integral */
+    { 0x2234, 0x5C }, /* THEREFORE     # therefore */
+    { 0x223C, 0x7E }, /* TILDE OPERATOR        # similar */
+    { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO        # congruent */
+    { 0x2248, 0xBB }, /* ALMOST EQUAL TO       # approxequal */
+    { 0x2260, 0xB9 }, /* NOT EQUAL TO  # notequal */
+    { 0x2261, 0xBA }, /* IDENTICAL TO  # equivalence */
+    { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */
+    { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO      # greaterequal */
+    { 0x2282, 0xCC }, /* SUBSET OF     # propersubset */
+    { 0x2283, 0xC9 }, /* SUPERSET OF   # propersuperset */
+    { 0x2284, 0xCB }, /* NOT A SUBSET OF       # notsubset */
+    { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */
+    { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO       # reflexsuperset */
+    { 0x2295, 0xC5 }, /* CIRCLED PLUS  # circleplus */
+    { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */
+    { 0x22A5, 0x5E }, /* UP TACK       # perpendicular */
+    { 0x22C5, 0xD7 }, /* DOT OPERATOR  # dotmath */
+    { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL     # integraltp */
+    { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL  # integralbt */
+    { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET   # angleleft */
+    { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET  # angleright */
+    { 0x25CA, 0xE0 }, /* LOZENGE       # lozenge */
+    { 0x2660, 0xAA }, /* BLACK SPADE SUIT      # spade */
+    { 0x2663, 0xA7 }, /* BLACK CLUB SUIT       # club */
+    { 0x2665, 0xA9 }, /* BLACK HEART SUIT      # heart */
+    { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT    # diamond */
+    { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF  # copyrightserif (CUS) */
+    { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */
+    { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */
+    { 0xF8E5, 0x60 }, /* RADICAL EXTENDER      # radicalex (CUS) */
+    { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER       # arrowvertex (CUS) */
+    { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER     # arrowhorizex (CUS) */
+    { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF    # registersans (CUS) */
+    { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF     # copyrightsans (CUS) */
+    { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF    # trademarksans (CUS) */
+    { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP        # parenlefttp (CUS) */
+    { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER   # parenleftex (CUS) */
+    { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM     # parenleftbt (CUS) */
+    { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP       # bracketlefttp (CUS) */
+    { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER  # bracketleftex (CUS) */
+    { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM    # bracketleftbt (CUS) */
+    { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP        # bracelefttp (CUS) */
+    { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID        # braceleftmid (CUS) */
+    { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM     # braceleftbt (CUS) */
+    { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER        # braceex (CUS) */
+    { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER     # integralex (CUS) */
+    { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP       # parenrighttp (CUS) */
+    { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER  # parenrightex (CUS) */
+    { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM    # parenrightbt (CUS) */
+    { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP      # bracketrighttp (CUS) */
+    { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */
+    { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM   # bracketrightbt (CUS) */
+    { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP       # bracerighttp (CUS) */
+    { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID       # bracerightmid (CUS) */
+    { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM    # bracerightbt (CUS) */
+};
+
+static const FcCharMap AdobeSymbol = {
+    AdobeSymbolEnt,
+    sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]),
+};
+    
+static const FcFontDecode fcFontDecoders[] = {
+    { ft_encoding_unicode,     0,              (1 << 21) - 1 },
+    { ft_encoding_symbol,      &AdobeSymbol,   (1 << 16) - 1 },
+    { ft_encoding_apple_roman, &AppleRoman,    (1 << 16) - 1 },
+};
+
+#define NUM_DECODE  (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
+
+FcChar32
+FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map)
+{
+    int                low, high, mid;
+    FcChar16   bmp;
+
+    low = 0;
+    high = map->nent - 1;
+    if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4)
+       return ~0;
+    while (low <= high)
+    {
+       mid = (high + low) >> 1;
+       bmp = map->ent[mid].bmp;
+       if (ucs4 == bmp)
+           return (FT_ULong) map->ent[mid].encode;
+       if (ucs4 < bmp)
+           high = mid - 1;
+       else
+           low = mid + 1;
+    }
+    return ~0;
+}
+
+FcChar32
+FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map)
+{
+    int            i;
+
+    for (i = 0; i < map->nent; i++)
+       if (map->ent[i].encode == private)
+           return (FcChar32) map->ent[i].bmp;
+    return ~0;
+}
+
+const FcCharMap *
+FcFreeTypeGetPrivateMap (FT_Encoding encoding)
+{
+    int        i;
+
+    for (i = 0; i < NUM_DECODE; i++)
+       if (fcFontDecoders[i].encoding == encoding)
+           return fcFontDecoders[i].map;
+    return 0;
+}
+
+/*
+ * Map a UCS4 glyph to a glyph index.  Use all available encoding
+ * tables to try and find one that works.  This information is expected
+ * to be cached by higher levels, so performance isn't critical
+ */
+
+FT_UInt
+FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
+{
+    int                    initial, offset, decode;
+    FT_UInt        glyphindex;
+    FcChar32       charcode;
+
+    initial = 0;
+    /*
+     * Find the current encoding
+     */
+    if (face->charmap)
+    {
+       for (; initial < NUM_DECODE; initial++)
+           if (fcFontDecoders[initial].encoding == face->charmap->encoding)
+               break;
+       if (initial == NUM_DECODE)
+           initial = 0;
+    }
+    /*
+     * Check each encoding for the glyph, starting with the current one
+     */
+    for (offset = 0; offset < NUM_DECODE; offset++)
+    {
+       decode = (initial + offset) % NUM_DECODE;
+       if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding)
+           if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0)
+               continue;
+       if (fcFontDecoders[decode].map)
+       {
+           charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map);
+           if (charcode == ~0)
+               continue;
+       }
+       else
+           charcode = ucs4;
+       glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode);
+       if (glyphindex)
+           return glyphindex;
+    }
+    return 0;
+}
+
+static FcBool
+FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4, 
+                     FT_UInt glyph, FcBlanks *blanks)
+{
+    FT_Int         load_flags = FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
+    FT_GlyphSlot    slot;
+    
+    /*
+     * When using scalable fonts, only report those glyphs
+     * which can be scaled; otherwise those fonts will
+     * only be available at some sizes, and never when
+     * transformed.  Avoid this by simply reporting bitmap-only
+     * glyphs as missing
+     */
+    if (face->face_flags & FT_FACE_FLAG_SCALABLE)
+       load_flags |= FT_LOAD_NO_BITMAP;
+    
+    if (FT_Load_Glyph (face, glyph, load_flags))
+       return FcFalse;
+    
+    slot = face->glyph;
+    if (!glyph)
+       return FcFalse;
+    
+    switch (slot->format) {
+    case ft_glyph_format_bitmap:
+       /*
+        * Bitmaps are assumed to be reasonable; if
+        * this proves to be a rash assumption, this
+        * code can be easily modified
+        */
+       return FcTrue;
+    case ft_glyph_format_outline:
+       /*
+        * Glyphs with contours are always OK
+        */
+       if (slot->outline.n_contours != 0)
+           return FcTrue;
+       /*
+        * Glyphs with no contours are only OK if
+        * they're members of the Blanks set specified
+        * in the configuration.  If blanks isn't set,
+        * then allow any glyph to be blank
+        */
+       if (!blanks || FcBlanksIsMember (blanks, ucs4))
+           return FcTrue;
+       /* fall through ... */
+    default:
+       break;
+    }
+    return FcFalse;
+}
+
+FcCharSet *
+FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
+{
+    FcChar32       page, off, max, ucs4;
+#ifdef CHECK
+    FcChar32       font_max = 0;
+#endif
+    FcCharSet      *fcs;
+    FcCharLeaf     *leaf;
+    const FcCharMap *map;
+    int                    o;
+    int                    i;
+    FT_UInt        glyph;
+
+    fcs = FcCharSetCreate ();
+    if (!fcs)
+       goto bail0;
+    
+    for (o = 0; o < NUM_DECODE; o++)
+    {
+       if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0)
+           continue;
+       map = fcFontDecoders[o].map;
+       if (map)
+       {
+           /*
+            * Non-Unicode tables are easy; there's a list of all possible
+            * characters
+            */
+           for (i = 0; i < map->nent; i++)
+           {
+               ucs4 = map->ent[i].bmp;
+               glyph = FT_Get_Char_Index (face, map->ent[i].encode);
+               if (glyph && FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks))
+               {
+                   leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+                   if (!leaf)
+                       goto bail1;
+                   leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
+#ifdef CHECK
+                   if (ucs4 > font_max)
+                       font_max = ucs4;
+#endif
+               }
+           }
+       }
+       else
+       {
+           FT_UInt gindex;
+         
+           max = fcFontDecoders[o].max;
+           /*
+            * Find the first encoded character in the font
+            */
+           if (FT_Get_Char_Index (face, 0))
+           {
+               ucs4 = 0;
+               gindex = 1;
+           }
+           else
+           {
+               ucs4 = FT_Get_Next_Char (face, 0, &gindex);
+               if (!ucs4)
+                   gindex = 0;
+           }
+
+           while (gindex)
+           {
+               page = ucs4 >> 8;
+               leaf = 0;
+               while ((ucs4 >> 8) == page)
+               {
+                   glyph = FT_Get_Char_Index (face, ucs4);
+                   if (glyph && FcFreeTypeCheckGlyph (face, ucs4, 
+                                                      glyph, blanks))
+                   {
+                       if (!leaf)
+                       {
+                           leaf = FcCharSetFindLeafCreate (fcs, ucs4);
+                           if (!leaf)
+                               goto bail1;
+                       }
+                       off = ucs4 & 0xff;
+                       leaf->map[off >> 5] |= (1 << (off & 0x1f));
+#ifdef CHECK
+                       if (ucs4 > font_max)
+                           font_max = ucs4;
+#endif
+                   }
+                   ucs4++;
+               }
+               ucs4 = FT_Get_Next_Char (face, ucs4 - 1, &gindex);
+               if (!ucs4)
+                   gindex = 0;
+           }
+#ifdef CHECK
+           for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
+           {
+               FcBool      FT_Has, FC_Has;
+
+               FT_Has = FT_Get_Char_Index (face, ucs4) != 0;
+               FC_Has = FcCharSetHasChar (fcs, ucs4);
+               if (FT_Has != FC_Has)
+               {
+                   printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has);
+               }
+           }
+#endif
+       }
+    }
+#ifdef CHECK
+    printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs));
+    for (ucs4 = 0; ucs4 <= font_max; ucs4++)
+    {
+       FcBool  has_char = FcFreeTypeCharIndex (face, ucs4) != 0;
+       FcBool  has_bit = FcCharSetHasChar (fcs, ucs4);
+
+       if (has_char && !has_bit)
+           printf ("Bitmap missing char 0x%x\n", ucs4);
+       else if (!has_char && has_bit)
+           printf ("Bitmap extra char 0x%x\n", ucs4);
+    }
+#endif
+    return fcs;
+bail1:
+    FcCharSetDestroy (fcs);
+bail0:
+    return 0;
+}
+
index 63e335f5f3bfca64bc24bb46cc3460c333e0faf0..9546c567f3fe0a47b140d0d380782ecc3a82a9a6 100644 (file)
@@ -435,15 +435,9 @@ FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
 FcCharSet *
 FcNameParseCharSet (FcChar8 *string);
 
-FcChar32
-FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
-
-FcChar32
-FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
+FcCharLeaf *
+FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
 
-const FcCharMap *
-FcFreeTypeGetPrivateMap (FT_Encoding encoding);
-    
 /* fcdbg.c */
 void
 FcValueListPrint (const FcValueList *l);
@@ -479,6 +473,15 @@ FcFreeTypeIsExclusiveLang (const FcChar8  *lang);
 FcBool
 FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
 
+FcChar32
+FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
+
+FcChar32
+FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
+
+const FcCharMap *
+FcFreeTypeGetPrivateMap (FT_Encoding encoding);
+    
 /* fcfs.c */
 /* fcgram.y */
 int