summaryrefslogtreecommitdiff
path: root/dviware/dvisvgm/libs
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvisvgm/libs
Initial commit
Diffstat (limited to 'dviware/dvisvgm/libs')
-rw-r--r--dviware/dvisvgm/libs/Makefile.am10
-rw-r--r--dviware/dvisvgm/libs/Makefile.in665
-rw-r--r--dviware/dvisvgm/libs/brotli/LICENSE19
-rw-r--r--dviware/dvisvgm/libs/brotli/Makefile.am83
-rw-r--r--dviware/dvisvgm/libs/brotli/Makefile.in897
-rw-r--r--dviware/dvisvgm/libs/brotli/common/constants.h64
-rw-r--r--dviware/dvisvgm/libs/brotli/common/context.h261
-rw-r--r--dviware/dvisvgm/libs/brotli/common/dictionary.c5905
-rw-r--r--dviware/dvisvgm/libs/brotli/common/dictionary.h64
-rw-r--r--dviware/dvisvgm/libs/brotli/common/platform.h568
-rw-r--r--dviware/dvisvgm/libs/brotli/common/transform.c235
-rw-r--r--dviware/dvisvgm/libs/brotli/common/transform.h80
-rw-r--r--dviware/dvisvgm/libs/brotli/common/version.h26
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/backward_references.c144
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/backward_references.h38
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/backward_references_hq.c825
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/backward_references_hq.h92
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/backward_references_inc.h153
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/bit_cost.c35
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/bit_cost.h63
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/bit_cost_inc.h127
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/block_encoder_inc.h34
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/block_splitter.c194
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/block_splitter.h51
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/block_splitter_inc.h431
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.c1331
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.h84
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/cluster.c56
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/cluster.h48
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/cluster_inc.h317
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/command.h190
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/compress_fragment.c790
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/compress_fragment.h61
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.c645
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.h54
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/dictionary_hash.c1120
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/dictionary_hash.h24
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/encode.c1862
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/encoder_dict.c32
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/encoder_dict.h41
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/entropy_encode.c501
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/entropy_encode.h122
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/entropy_encode_static.h539
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/fast_log.h147
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/find_match_length.h80
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash.h498
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_composite_inc.h136
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h254
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_longest_match64_inc.h267
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_longest_match_inc.h259
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_longest_match_quickly_inc.h235
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_rolling_inc.h216
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/hash_to_binary_tree_inc.h328
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/histogram.c100
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/histogram.h63
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/histogram_inc.h51
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/literal_cost.c175
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/literal_cost.h30
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/memory.c170
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/memory.h102
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/metablock.c667
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/metablock.h105
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/metablock_inc.h183
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/params.h44
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/prefix.h53
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/quality.h165
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/ringbuffer.h164
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/static_dict.c486
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/static_dict.h40
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/static_dict_lut.h5864
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/utf8_util.c85
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/utf8_util.h32
-rw-r--r--dviware/dvisvgm/libs/brotli/enc/write_bits.h85
-rw-r--r--dviware/dvisvgm/libs/brotli/include/brotli/decode.h344
-rw-r--r--dviware/dvisvgm/libs/brotli/include/brotli/encode.h427
-rw-r--r--dviware/dvisvgm/libs/brotli/include/brotli/port.h274
-rw-r--r--dviware/dvisvgm/libs/brotli/include/brotli/types.h83
-rw-r--r--dviware/dvisvgm/libs/clipper/License.txt24
-rw-r--r--dviware/dvisvgm/libs/clipper/Makefile.am11
-rw-r--r--dviware/dvisvgm/libs/clipper/Makefile.in667
-rw-r--r--dviware/dvisvgm/libs/clipper/clipper.cpp4457
-rw-r--r--dviware/dvisvgm/libs/clipper/clipper.hpp429
-rw-r--r--dviware/dvisvgm/libs/defs.am19
-rw-r--r--dviware/dvisvgm/libs/ff-woff/LICENSE281
-rw-r--r--dviware/dvisvgm/libs/ff-woff/Makefile.am90
-rw-r--r--dviware/dvisvgm/libs/ff-woff/Makefile.in1084
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/PfEd.h218
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c3348
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c1007
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/autohint.c2708
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/char.c72
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/cjk.c15591
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/configure-fontforge.h109
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/cvundoes.c46
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/dumppfa.c131
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/edgelist.h144
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/edgelist2.h87
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/encoding.c791
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/encoding.h5
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.c44
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.h23
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fontforge-config.h22
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fontforge.h93
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fontforgevw.h32
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/fvfonts.c253
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/gwwiconv.c797
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/libffstamp.h8
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/lookups.c679
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/macbinary.c227
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/macenc.c1805
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/mathconstants.c99
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/memory.c51
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/mm.c307
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/namehash.h61
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/namelist.c19965
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/nouiutil.c161
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/nowakowskittfinstr.c5258
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/parsepfa.c583
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/parsettf.c505
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/parsettfatt.c42
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/psfont.h188
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/psread.c73
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/pua.c1612
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/sd.h168
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/sfd.c4669
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.c164
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.h122
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinechar.c328
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.c504
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.h2554
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splineorder2.c1523
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splineoverlap.c442
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinerefigure.c107
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinesave.c2065
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splinesaveafm.c322
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splineutil.c3579
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/splineutil2.c1518
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/start.c53
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.c6068
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.h214
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tables.h4
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp75
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tottf.c6757
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tottfaat.c2526
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tottfgpos.c4613
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/tottfvar.c820
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/ttf.h871
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.c473
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.h57
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/ttfspecial.c2095
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/uiinterface.h159
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/unialt.c8937
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/ustring.c225
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/utype.c24592
-rw-r--r--dviware/dvisvgm/libs/ff-woff/fontforge/woff.c318
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/basics.h125
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/chardata.h78
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/charset.h71
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/dlist.h151
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/ffintl.h37
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/gimage.h204
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/gnetwork.h87
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/gwwiconv.h48
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/ustring.h212
-rw-r--r--dviware/dvisvgm/libs/ff-woff/inc/utype.h155
-rw-r--r--dviware/dvisvgm/libs/md5/Makefile.am13
-rw-r--r--dviware/dvisvgm/libs/md5/Makefile.in649
-rw-r--r--dviware/dvisvgm/libs/md5/md5.c291
-rw-r--r--dviware/dvisvgm/libs/md5/md5.h51
-rw-r--r--dviware/dvisvgm/libs/potrace/Makefile.am23
-rw-r--r--dviware/dvisvgm/libs/potrace/Makefile.in675
-rw-r--r--dviware/dvisvgm/libs/potrace/auxiliary.h80
-rw-r--r--dviware/dvisvgm/libs/potrace/bitmap.h228
-rw-r--r--dviware/dvisvgm/libs/potrace/config.h5
-rw-r--r--dviware/dvisvgm/libs/potrace/curve.c112
-rw-r--r--dviware/dvisvgm/libs/potrace/curve.h77
-rw-r--r--dviware/dvisvgm/libs/potrace/decompose.c521
-rw-r--r--dviware/dvisvgm/libs/potrace/decompose.h16
-rw-r--r--dviware/dvisvgm/libs/potrace/lists.h285
-rw-r--r--dviware/dvisvgm/libs/potrace/potracelib.c114
-rw-r--r--dviware/dvisvgm/libs/potrace/potracelib.h139
-rw-r--r--dviware/dvisvgm/libs/potrace/progress.h79
-rw-r--r--dviware/dvisvgm/libs/potrace/trace.c1249
-rw-r--r--dviware/dvisvgm/libs/potrace/trace.h15
-rw-r--r--dviware/dvisvgm/libs/variant/LICENSE.md23
-rw-r--r--dviware/dvisvgm/libs/variant/Makefile.am4
-rw-r--r--dviware/dvisvgm/libs/variant/Makefile.in555
-rw-r--r--dviware/dvisvgm/libs/variant/include/mpark/variant.hpp2813
-rw-r--r--dviware/dvisvgm/libs/woff2/LICENSE202
-rw-r--r--dviware/dvisvgm/libs/woff2/Makefile.am35
-rw-r--r--dviware/dvisvgm/libs/woff2/Makefile.in760
-rw-r--r--dviware/dvisvgm/libs/woff2/include/woff2/decode.h36
-rw-r--r--dviware/dvisvgm/libs/woff2/include/woff2/encode.h43
-rw-r--r--dviware/dvisvgm/libs/woff2/include/woff2/output.h86
-rw-r--r--dviware/dvisvgm/libs/woff2/include/woff2/version.h8
-rw-r--r--dviware/dvisvgm/libs/woff2/src/buffer.h164
-rw-r--r--dviware/dvisvgm/libs/woff2/src/font.cc400
-rw-r--r--dviware/dvisvgm/libs/woff2/src/font.h105
-rw-r--r--dviware/dvisvgm/libs/woff2/src/glyph.cc374
-rw-r--r--dviware/dvisvgm/libs/woff2/src/glyph.h63
-rw-r--r--dviware/dvisvgm/libs/woff2/src/normalize.cc309
-rw-r--r--dviware/dvisvgm/libs/woff2/src/normalize.h39
-rw-r--r--dviware/dvisvgm/libs/woff2/src/port.h66
-rw-r--r--dviware/dvisvgm/libs/woff2/src/round.h27
-rw-r--r--dviware/dvisvgm/libs/woff2/src/store_bytes.h71
-rw-r--r--dviware/dvisvgm/libs/woff2/src/table_tags.cc82
-rw-r--r--dviware/dvisvgm/libs/woff2/src/table_tags.h30
-rw-r--r--dviware/dvisvgm/libs/woff2/src/transform.cc412
-rw-r--r--dviware/dvisvgm/libs/woff2/src/transform.h26
-rw-r--r--dviware/dvisvgm/libs/woff2/src/variable_length.cc129
-rw-r--r--dviware/dvisvgm/libs/woff2/src/variable_length.h30
-rw-r--r--dviware/dvisvgm/libs/woff2/src/woff2_common.cc58
-rw-r--r--dviware/dvisvgm/libs/woff2/src/woff2_common.h64
-rw-r--r--dviware/dvisvgm/libs/woff2/src/woff2_enc.cc457
-rw-r--r--dviware/dvisvgm/libs/woff2/src/woff2_out.cc67
-rw-r--r--dviware/dvisvgm/libs/xxHash/Makefile.am13
-rw-r--r--dviware/dvisvgm/libs/xxHash/Makefile.in649
-rw-r--r--dviware/dvisvgm/libs/xxHash/xxhash.c1010
-rw-r--r--dviware/dvisvgm/libs/xxHash/xxhash.h445
219 files changed, 187667 insertions, 0 deletions
diff --git a/dviware/dvisvgm/libs/Makefile.am b/dviware/dvisvgm/libs/Makefile.am
new file mode 100644
index 0000000000..7b6b80229d
--- /dev/null
+++ b/dviware/dvisvgm/libs/Makefile.am
@@ -0,0 +1,10 @@
+## This file is part of dvisvgm
+## Copyright (C) 2005-2019 Martin Gieseking <martin.gieseking@uos.de>
+##
+## Process this file with automake.
+
+SUBDIRS = clipper md5 potrace variant xxHash
+
+if ENABLE_WOFF
+SUBDIRS += brotli ff-woff woff2
+endif
diff --git a/dviware/dvisvgm/libs/Makefile.in b/dviware/dvisvgm/libs/Makefile.in
new file mode 100644
index 0000000000..8741ea511c
--- /dev/null
+++ b/dviware/dvisvgm/libs/Makefile.in
@@ -0,0 +1,665 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+@ENABLE_WOFF_TRUE@am__append_1 = brotli ff-woff woff2
+subdir = libs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = clipper md5 potrace variant xxHash brotli ff-woff woff2
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = clipper md5 potrace variant xxHash $(am__append_1)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/brotli/LICENSE b/dviware/dvisvgm/libs/brotli/LICENSE
new file mode 100644
index 0000000000..33b7cdd2db
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/dviware/dvisvgm/libs/brotli/Makefile.am b/dviware/dvisvgm/libs/brotli/Makefile.am
new file mode 100644
index 0000000000..1c3336c48e
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/Makefile.am
@@ -0,0 +1,83 @@
+if !HAVE_BROTLI
+noinst_LIBRARIES = libbrotli.a
+libbrotli_a_SOURCES = \
+ common/constants.h \
+ common/context.h \
+ common/dictionary.c \
+ common/dictionary.h \
+ common/platform.h \
+ common/transform.c \
+ common/transform.h \
+ common/version.h \
+ enc/backward_references.c \
+ enc/backward_references.h \
+ enc/backward_references_hq.c \
+ enc/backward_references_hq.h \
+ enc/backward_references_inc.h \
+ enc/bit_cost.c \
+ enc/bit_cost.h \
+ enc/bit_cost_inc.h \
+ enc/block_encoder_inc.h \
+ enc/block_splitter.c \
+ enc/block_splitter.h \
+ enc/block_splitter_inc.h \
+ enc/brotli_bit_stream.c \
+ enc/brotli_bit_stream.h \
+ enc/cluster.c \
+ enc/cluster.h \
+ enc/cluster_inc.h \
+ enc/command.h \
+ enc/compress_fragment.c \
+ enc/compress_fragment.h \
+ enc/compress_fragment_two_pass.c \
+ enc/compress_fragment_two_pass.h \
+ enc/dictionary_hash.c \
+ enc/dictionary_hash.h \
+ enc/encode.c \
+ enc/encoder_dict.c \
+ enc/encoder_dict.h \
+ enc/entropy_encode.c \
+ enc/entropy_encode.h \
+ enc/entropy_encode_static.h \
+ enc/fast_log.h \
+ enc/find_match_length.h \
+ enc/hash_composite_inc.h \
+ enc/hash_forgetful_chain_inc.h \
+ enc/hash.h \
+ enc/hash_longest_match64_inc.h \
+ enc/hash_longest_match_inc.h \
+ enc/hash_longest_match_quickly_inc.h \
+ enc/hash_rolling_inc.h \
+ enc/hash_to_binary_tree_inc.h \
+ enc/histogram.c \
+ enc/histogram.h \
+ enc/histogram_inc.h \
+ enc/literal_cost.c \
+ enc/literal_cost.h \
+ enc/memory.c \
+ enc/memory.h \
+ enc/metablock.c \
+ enc/metablock.h \
+ enc/metablock_inc.h \
+ enc/params.h \
+ enc/prefix.h \
+ enc/quality.h \
+ enc/ringbuffer.h \
+ enc/static_dict.c \
+ enc/static_dict.h \
+ enc/static_dict_lut.h \
+ enc/utf8_util.c \
+ enc/utf8_util.h \
+ enc/write_bits.h \
+ include/brotli/decode.h \
+ include/brotli/encode.h \
+ include/brotli/port.h \
+ include/brotli/types.h
+
+AM_CFLAGS = -Wall -I$(srcdir)/include
+
+@CODE_COVERAGE_RULES@
+endif
+
+EXTRA_DIST = LICENSE
+CLEANFILES = *.gcda *.gcno
diff --git a/dviware/dvisvgm/libs/brotli/Makefile.in b/dviware/dvisvgm/libs/brotli/Makefile.in
new file mode 100644
index 0000000000..a68bbc14bf
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/Makefile.in
@@ -0,0 +1,897 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/brotli
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libbrotli_a_AR = $(AR) $(ARFLAGS)
+libbrotli_a_LIBADD =
+am__libbrotli_a_SOURCES_DIST = common/constants.h common/context.h \
+ common/dictionary.c common/dictionary.h common/platform.h \
+ common/transform.c common/transform.h common/version.h \
+ enc/backward_references.c enc/backward_references.h \
+ enc/backward_references_hq.c enc/backward_references_hq.h \
+ enc/backward_references_inc.h enc/bit_cost.c enc/bit_cost.h \
+ enc/bit_cost_inc.h enc/block_encoder_inc.h \
+ enc/block_splitter.c enc/block_splitter.h \
+ enc/block_splitter_inc.h enc/brotli_bit_stream.c \
+ enc/brotli_bit_stream.h enc/cluster.c enc/cluster.h \
+ enc/cluster_inc.h enc/command.h enc/compress_fragment.c \
+ enc/compress_fragment.h enc/compress_fragment_two_pass.c \
+ enc/compress_fragment_two_pass.h enc/dictionary_hash.c \
+ enc/dictionary_hash.h enc/encode.c enc/encoder_dict.c \
+ enc/encoder_dict.h enc/entropy_encode.c enc/entropy_encode.h \
+ enc/entropy_encode_static.h enc/fast_log.h \
+ enc/find_match_length.h enc/hash_composite_inc.h \
+ enc/hash_forgetful_chain_inc.h enc/hash.h \
+ enc/hash_longest_match64_inc.h enc/hash_longest_match_inc.h \
+ enc/hash_longest_match_quickly_inc.h enc/hash_rolling_inc.h \
+ enc/hash_to_binary_tree_inc.h enc/histogram.c enc/histogram.h \
+ enc/histogram_inc.h enc/literal_cost.c enc/literal_cost.h \
+ enc/memory.c enc/memory.h enc/metablock.c enc/metablock.h \
+ enc/metablock_inc.h enc/params.h enc/prefix.h enc/quality.h \
+ enc/ringbuffer.h enc/static_dict.c enc/static_dict.h \
+ enc/static_dict_lut.h enc/utf8_util.c enc/utf8_util.h \
+ enc/write_bits.h include/brotli/decode.h \
+ include/brotli/encode.h include/brotli/port.h \
+ include/brotli/types.h
+am__dirstamp = $(am__leading_dot)dirstamp
+@HAVE_BROTLI_FALSE@am_libbrotli_a_OBJECTS = \
+@HAVE_BROTLI_FALSE@ common/dictionary.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ common/transform.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/backward_references.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/backward_references_hq.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/bit_cost.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/block_splitter.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/brotli_bit_stream.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/cluster.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment_two_pass.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/dictionary_hash.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/encode.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/encoder_dict.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/entropy_encode.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/histogram.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/literal_cost.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/memory.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/metablock.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/static_dict.$(OBJEXT) \
+@HAVE_BROTLI_FALSE@ enc/utf8_util.$(OBJEXT)
+libbrotli_a_OBJECTS = $(am_libbrotli_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = common/$(DEPDIR)/dictionary.Po \
+ common/$(DEPDIR)/transform.Po \
+ enc/$(DEPDIR)/backward_references.Po \
+ enc/$(DEPDIR)/backward_references_hq.Po \
+ enc/$(DEPDIR)/bit_cost.Po enc/$(DEPDIR)/block_splitter.Po \
+ enc/$(DEPDIR)/brotli_bit_stream.Po enc/$(DEPDIR)/cluster.Po \
+ enc/$(DEPDIR)/compress_fragment.Po \
+ enc/$(DEPDIR)/compress_fragment_two_pass.Po \
+ enc/$(DEPDIR)/dictionary_hash.Po enc/$(DEPDIR)/encode.Po \
+ enc/$(DEPDIR)/encoder_dict.Po enc/$(DEPDIR)/entropy_encode.Po \
+ enc/$(DEPDIR)/histogram.Po enc/$(DEPDIR)/literal_cost.Po \
+ enc/$(DEPDIR)/memory.Po enc/$(DEPDIR)/metablock.Po \
+ enc/$(DEPDIR)/static_dict.Po enc/$(DEPDIR)/utf8_util.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libbrotli_a_SOURCES)
+DIST_SOURCES = $(am__libbrotli_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_BROTLI_FALSE@noinst_LIBRARIES = libbrotli.a
+@HAVE_BROTLI_FALSE@libbrotli_a_SOURCES = \
+@HAVE_BROTLI_FALSE@ common/constants.h \
+@HAVE_BROTLI_FALSE@ common/context.h \
+@HAVE_BROTLI_FALSE@ common/dictionary.c \
+@HAVE_BROTLI_FALSE@ common/dictionary.h \
+@HAVE_BROTLI_FALSE@ common/platform.h \
+@HAVE_BROTLI_FALSE@ common/transform.c \
+@HAVE_BROTLI_FALSE@ common/transform.h \
+@HAVE_BROTLI_FALSE@ common/version.h \
+@HAVE_BROTLI_FALSE@ enc/backward_references.c \
+@HAVE_BROTLI_FALSE@ enc/backward_references.h \
+@HAVE_BROTLI_FALSE@ enc/backward_references_hq.c \
+@HAVE_BROTLI_FALSE@ enc/backward_references_hq.h \
+@HAVE_BROTLI_FALSE@ enc/backward_references_inc.h \
+@HAVE_BROTLI_FALSE@ enc/bit_cost.c \
+@HAVE_BROTLI_FALSE@ enc/bit_cost.h \
+@HAVE_BROTLI_FALSE@ enc/bit_cost_inc.h \
+@HAVE_BROTLI_FALSE@ enc/block_encoder_inc.h \
+@HAVE_BROTLI_FALSE@ enc/block_splitter.c \
+@HAVE_BROTLI_FALSE@ enc/block_splitter.h \
+@HAVE_BROTLI_FALSE@ enc/block_splitter_inc.h \
+@HAVE_BROTLI_FALSE@ enc/brotli_bit_stream.c \
+@HAVE_BROTLI_FALSE@ enc/brotli_bit_stream.h \
+@HAVE_BROTLI_FALSE@ enc/cluster.c \
+@HAVE_BROTLI_FALSE@ enc/cluster.h \
+@HAVE_BROTLI_FALSE@ enc/cluster_inc.h \
+@HAVE_BROTLI_FALSE@ enc/command.h \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment.c \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment.h \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment_two_pass.c \
+@HAVE_BROTLI_FALSE@ enc/compress_fragment_two_pass.h \
+@HAVE_BROTLI_FALSE@ enc/dictionary_hash.c \
+@HAVE_BROTLI_FALSE@ enc/dictionary_hash.h \
+@HAVE_BROTLI_FALSE@ enc/encode.c \
+@HAVE_BROTLI_FALSE@ enc/encoder_dict.c \
+@HAVE_BROTLI_FALSE@ enc/encoder_dict.h \
+@HAVE_BROTLI_FALSE@ enc/entropy_encode.c \
+@HAVE_BROTLI_FALSE@ enc/entropy_encode.h \
+@HAVE_BROTLI_FALSE@ enc/entropy_encode_static.h \
+@HAVE_BROTLI_FALSE@ enc/fast_log.h \
+@HAVE_BROTLI_FALSE@ enc/find_match_length.h \
+@HAVE_BROTLI_FALSE@ enc/hash_composite_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash_forgetful_chain_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash.h \
+@HAVE_BROTLI_FALSE@ enc/hash_longest_match64_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash_longest_match_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash_longest_match_quickly_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash_rolling_inc.h \
+@HAVE_BROTLI_FALSE@ enc/hash_to_binary_tree_inc.h \
+@HAVE_BROTLI_FALSE@ enc/histogram.c \
+@HAVE_BROTLI_FALSE@ enc/histogram.h \
+@HAVE_BROTLI_FALSE@ enc/histogram_inc.h \
+@HAVE_BROTLI_FALSE@ enc/literal_cost.c \
+@HAVE_BROTLI_FALSE@ enc/literal_cost.h \
+@HAVE_BROTLI_FALSE@ enc/memory.c \
+@HAVE_BROTLI_FALSE@ enc/memory.h \
+@HAVE_BROTLI_FALSE@ enc/metablock.c \
+@HAVE_BROTLI_FALSE@ enc/metablock.h \
+@HAVE_BROTLI_FALSE@ enc/metablock_inc.h \
+@HAVE_BROTLI_FALSE@ enc/params.h \
+@HAVE_BROTLI_FALSE@ enc/prefix.h \
+@HAVE_BROTLI_FALSE@ enc/quality.h \
+@HAVE_BROTLI_FALSE@ enc/ringbuffer.h \
+@HAVE_BROTLI_FALSE@ enc/static_dict.c \
+@HAVE_BROTLI_FALSE@ enc/static_dict.h \
+@HAVE_BROTLI_FALSE@ enc/static_dict_lut.h \
+@HAVE_BROTLI_FALSE@ enc/utf8_util.c \
+@HAVE_BROTLI_FALSE@ enc/utf8_util.h \
+@HAVE_BROTLI_FALSE@ enc/write_bits.h \
+@HAVE_BROTLI_FALSE@ include/brotli/decode.h \
+@HAVE_BROTLI_FALSE@ include/brotli/encode.h \
+@HAVE_BROTLI_FALSE@ include/brotli/port.h \
+@HAVE_BROTLI_FALSE@ include/brotli/types.h
+
+@HAVE_BROTLI_FALSE@AM_CFLAGS = -Wall -I$(srcdir)/include
+EXTRA_DIST = LICENSE
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/brotli/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/brotli/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+common/$(am__dirstamp):
+ @$(MKDIR_P) common
+ @: > common/$(am__dirstamp)
+common/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) common/$(DEPDIR)
+ @: > common/$(DEPDIR)/$(am__dirstamp)
+common/dictionary.$(OBJEXT): common/$(am__dirstamp) \
+ common/$(DEPDIR)/$(am__dirstamp)
+common/transform.$(OBJEXT): common/$(am__dirstamp) \
+ common/$(DEPDIR)/$(am__dirstamp)
+enc/$(am__dirstamp):
+ @$(MKDIR_P) enc
+ @: > enc/$(am__dirstamp)
+enc/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) enc/$(DEPDIR)
+ @: > enc/$(DEPDIR)/$(am__dirstamp)
+enc/backward_references.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/backward_references_hq.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/bit_cost.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/block_splitter.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/brotli_bit_stream.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/cluster.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/compress_fragment.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/compress_fragment_two_pass.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/dictionary_hash.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/encode.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/encoder_dict.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/entropy_encode.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/histogram.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/literal_cost.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/memory.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/metablock.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/static_dict.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+enc/utf8_util.$(OBJEXT): enc/$(am__dirstamp) \
+ enc/$(DEPDIR)/$(am__dirstamp)
+
+libbrotli.a: $(libbrotli_a_OBJECTS) $(libbrotli_a_DEPENDENCIES) $(EXTRA_libbrotli_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libbrotli.a
+ $(AM_V_AR)$(libbrotli_a_AR) libbrotli.a $(libbrotli_a_OBJECTS) $(libbrotli_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libbrotli.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f common/*.$(OBJEXT)
+ -rm -f enc/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/dictionary.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/transform.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/backward_references.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/backward_references_hq.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/bit_cost.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/block_splitter.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/brotli_bit_stream.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/cluster.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/compress_fragment.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/compress_fragment_two_pass.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/dictionary_hash.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/encode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/encoder_dict.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/entropy_encode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/histogram.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/literal_cost.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/metablock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/static_dict.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@enc/$(DEPDIR)/utf8_util.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f common/$(DEPDIR)/$(am__dirstamp)
+ -rm -f common/$(am__dirstamp)
+ -rm -f enc/$(DEPDIR)/$(am__dirstamp)
+ -rm -f enc/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f common/$(DEPDIR)/dictionary.Po
+ -rm -f common/$(DEPDIR)/transform.Po
+ -rm -f enc/$(DEPDIR)/backward_references.Po
+ -rm -f enc/$(DEPDIR)/backward_references_hq.Po
+ -rm -f enc/$(DEPDIR)/bit_cost.Po
+ -rm -f enc/$(DEPDIR)/block_splitter.Po
+ -rm -f enc/$(DEPDIR)/brotli_bit_stream.Po
+ -rm -f enc/$(DEPDIR)/cluster.Po
+ -rm -f enc/$(DEPDIR)/compress_fragment.Po
+ -rm -f enc/$(DEPDIR)/compress_fragment_two_pass.Po
+ -rm -f enc/$(DEPDIR)/dictionary_hash.Po
+ -rm -f enc/$(DEPDIR)/encode.Po
+ -rm -f enc/$(DEPDIR)/encoder_dict.Po
+ -rm -f enc/$(DEPDIR)/entropy_encode.Po
+ -rm -f enc/$(DEPDIR)/histogram.Po
+ -rm -f enc/$(DEPDIR)/literal_cost.Po
+ -rm -f enc/$(DEPDIR)/memory.Po
+ -rm -f enc/$(DEPDIR)/metablock.Po
+ -rm -f enc/$(DEPDIR)/static_dict.Po
+ -rm -f enc/$(DEPDIR)/utf8_util.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f common/$(DEPDIR)/dictionary.Po
+ -rm -f common/$(DEPDIR)/transform.Po
+ -rm -f enc/$(DEPDIR)/backward_references.Po
+ -rm -f enc/$(DEPDIR)/backward_references_hq.Po
+ -rm -f enc/$(DEPDIR)/bit_cost.Po
+ -rm -f enc/$(DEPDIR)/block_splitter.Po
+ -rm -f enc/$(DEPDIR)/brotli_bit_stream.Po
+ -rm -f enc/$(DEPDIR)/cluster.Po
+ -rm -f enc/$(DEPDIR)/compress_fragment.Po
+ -rm -f enc/$(DEPDIR)/compress_fragment_two_pass.Po
+ -rm -f enc/$(DEPDIR)/dictionary_hash.Po
+ -rm -f enc/$(DEPDIR)/encode.Po
+ -rm -f enc/$(DEPDIR)/encoder_dict.Po
+ -rm -f enc/$(DEPDIR)/entropy_encode.Po
+ -rm -f enc/$(DEPDIR)/histogram.Po
+ -rm -f enc/$(DEPDIR)/literal_cost.Po
+ -rm -f enc/$(DEPDIR)/memory.Po
+ -rm -f enc/$(DEPDIR)/metablock.Po
+ -rm -f enc/$(DEPDIR)/static_dict.Po
+ -rm -f enc/$(DEPDIR)/utf8_util.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@HAVE_BROTLI_FALSE@@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/brotli/common/constants.h b/dviware/dvisvgm/libs/brotli/common/constants.h
new file mode 100644
index 0000000000..d1b88d12af
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/constants.h
@@ -0,0 +1,64 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#ifndef BROTLI_COMMON_CONSTANTS_H_
+#define BROTLI_COMMON_CONSTANTS_H_
+
+/* Specification: 7.3. Encoding of the context map */
+#define BROTLI_CONTEXT_MAP_MAX_RLE 16
+
+/* Specification: 2. Compressed representation overview */
+#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
+
+/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
+#define BROTLI_NUM_LITERAL_SYMBOLS 256
+#define BROTLI_NUM_COMMAND_SYMBOLS 704
+#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
+#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
+ BROTLI_CONTEXT_MAP_MAX_RLE)
+#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
+
+/* Specification: 3.5. Complex prefix codes */
+#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
+#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
+#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
+/* "code length of 8 is repeated" */
+#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
+
+/* "Large Window Brotli" */
+#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
+#define BROTLI_LARGE_MIN_WBITS 10
+#define BROTLI_LARGE_MAX_WBITS 30
+
+/* Specification: 4. Encoding of distances */
+#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
+#define BROTLI_MAX_NPOSTFIX 3
+#define BROTLI_MAX_NDIRECT 120
+#define BROTLI_MAX_DISTANCE_BITS 24U
+#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
+ BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
+ ((MAXNBITS) << ((NPOSTFIX) + 1)))
+/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
+#define BROTLI_NUM_DISTANCE_SYMBOLS \
+ BROTLI_DISTANCE_ALPHABET_SIZE( \
+ BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
+#define BROTLI_MAX_DISTANCE 0x3FFFFFC
+#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
+
+/* 7.1. Context modes and context ID lookup for literals */
+/* "context IDs for literals are in the range of 0..63" */
+#define BROTLI_LITERAL_CONTEXT_BITS 6
+
+/* 7.2. Context ID for distances */
+#define BROTLI_DISTANCE_CONTEXT_BITS 2
+
+/* 9.1. Format of the Stream Header */
+/* Number of slack bytes for window size. Don't confuse
+ with BROTLI_NUM_DISTANCE_SHORT_CODES. */
+#define BROTLI_WINDOW_GAP 16
+#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
+
+#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/common/context.h b/dviware/dvisvgm/libs/brotli/common/context.h
new file mode 100644
index 0000000000..24b3eb48f5
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/context.h
@@ -0,0 +1,261 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Lookup table to map the previous two bytes to a context id.
+
+ There are four different context modeling modes defined here:
+ CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
+ CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
+ CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
+ CONTEXT_SIGNED: second-order context model tuned for signed integers.
+
+ If |p1| and |p2| are the previous two bytes, and |mode| is current context
+ mode, we calculate the context as:
+
+ context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
+
+ For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
+ (i.e. < 128), this will be equivalent to
+
+ context = 4 * context1(p1) + context2(p2),
+
+ where context1 is based on the previous byte in the following way:
+
+ 0 : non-ASCII control
+ 1 : \t, \n, \r
+ 2 : space
+ 3 : other punctuation
+ 4 : " '
+ 5 : %
+ 6 : ( < [ {
+ 7 : ) > ] }
+ 8 : , ; :
+ 9 : .
+ 10 : =
+ 11 : number
+ 12 : upper-case vowel
+ 13 : upper-case consonant
+ 14 : lower-case vowel
+ 15 : lower-case consonant
+
+ and context2 is based on the second last byte:
+
+ 0 : control, space
+ 1 : punctuation
+ 2 : upper-case letter, number
+ 3 : lower-case letter
+
+ If the last byte is ASCII, and the second last byte is not (in a valid UTF8
+ stream it will be a continuation byte, value between 128 and 191), the
+ context is the same as if the second last byte was an ASCII control or space.
+
+ If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
+ be a continuation byte and the context id is 2 or 3 depending on the LSB of
+ the last byte and to a lesser extent on the second last byte if it is ASCII.
+
+ If the last byte is a UTF8 continuation byte, the second last byte can be:
+ - continuation byte: the next byte is probably ASCII or lead byte (assuming
+ 4-byte UTF8 characters are rare) and the context id is 0 or 1.
+ - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
+ - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
+
+ The possible value combinations of the previous two bytes, the range of
+ context ids and the type of the next byte is summarized in the table below:
+
+ |--------\-----------------------------------------------------------------|
+ | \ Last byte |
+ | Second \---------------------------------------------------------------|
+ | last byte \ ASCII | cont. byte | lead byte |
+ | \ (0-127) | (128-191) | (192-) |
+ |=============|===================|=====================|==================|
+ | ASCII | next: ASCII/lead | not valid | next: cont. |
+ | (0-127) | context: 4 - 63 | | context: 2 - 3 |
+ |-------------|-------------------|---------------------|------------------|
+ | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
+ | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
+ |-------------|-------------------|---------------------|------------------|
+ | lead byte | not valid | next: ASCII/lead | not valid |
+ | (192-207) | | context: 0 - 1 | |
+ |-------------|-------------------|---------------------|------------------|
+ | lead byte | not valid | next: cont. | not valid |
+ | (208-) | | context: 2 - 3 | |
+ |-------------|-------------------|---------------------|------------------|
+*/
+
+#ifndef BROTLI_COMMON_CONTEXT_H_
+#define BROTLI_COMMON_CONTEXT_H_
+
+#include <brotli/types.h>
+
+typedef enum ContextType {
+ CONTEXT_LSB6 = 0,
+ CONTEXT_MSB6 = 1,
+ CONTEXT_UTF8 = 2,
+ CONTEXT_SIGNED = 3
+} ContextType;
+
+/* Common context lookup table for all context modes. */
+static const uint8_t kContextLookup[2048] = {
+ /* CONTEXT_LSB6, last byte. */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+
+ /* CONTEXT_LSB6, second last byte, */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ /* CONTEXT_MSB6, last byte. */
+ 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
+ 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
+ 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
+ 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
+ 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
+ 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
+ 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
+ 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
+ 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
+ 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
+ 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
+ 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
+ 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
+ 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
+ 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
+ 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
+
+ /* CONTEXT_MSB6, second last byte, */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ /* CONTEXT_UTF8, last byte. */
+ /* ASCII range. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
+ 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
+ 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
+ 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
+ 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
+ 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
+ /* UTF8 continuation byte range. */
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+ /* UTF8 lead byte range. */
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+ 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+
+ /* CONTEXT_UTF8 second last byte. */
+ /* ASCII range. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
+ /* UTF8 continuation byte range. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* UTF8 lead byte range. */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+
+ /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
+ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
+
+ /* CONTEXT_SIGNED, second last byte. */
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
+};
+
+typedef const uint8_t* ContextLut;
+
+/* typeof(MODE) == ContextType; returns ContextLut */
+#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
+
+/* typeof(LUT) == ContextLut */
+#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
+
+#endif /* BROTLI_COMMON_CONTEXT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/common/dictionary.c b/dviware/dvisvgm/libs/brotli/common/dictionary.c
new file mode 100644
index 0000000000..64822a381b
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/dictionary.c
@@ -0,0 +1,5905 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#include "./dictionary.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
+static const uint8_t kBrotliDictionaryData[] =
+{
+116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
+111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
+,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
+,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
+118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
+110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
+114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
+103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
+104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
+117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
+101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
+,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
+,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
+,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
+101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
+115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
+97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
+105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
+111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
+105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
+,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
+108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
+101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
+108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
+102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
+111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
+111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
+115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
+37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
+,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
+,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
+115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
+101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
+107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
+110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
+,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
+117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
+,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
+114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
+,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
+,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
+116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
+,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
+117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
+,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
+,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
+,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
+112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
+117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
+110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
+115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
+,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
+,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
+120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
+,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
+116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
+,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
+102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
+116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
+111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
+110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
+119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
+46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
+,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
+99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
+101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
+121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
+116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
+101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
+,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
+115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
+,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
+105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
+108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
+108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
+102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
+100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
+104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
+99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
+102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
+101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
+108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
+35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
+,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
+,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
+,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
+97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
+108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
+109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
+111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
+116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
+97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
+,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
+103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
+,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
+108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
+101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
+103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
+,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
+116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
+109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
+,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
+97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
+122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
+99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
+98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
+116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
+115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
+108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
+60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
+114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
+102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
+47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
+115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
+,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
+111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
+56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
+110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
+,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
+100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
+107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
+112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
+115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
+101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
+100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
+72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
+120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
+,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
+,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
+101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
+,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
+119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
+119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
+117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
+111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
+97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
+110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
+10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
+,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
+,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
+116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
+,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
+60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
+45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
+97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
+,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
+47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
+115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
+117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
+49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
+,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
+57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
+,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
+50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
+,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
+57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
+,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
+56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
+,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
+57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
+,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
+49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
+,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
+115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
+,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
+105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
+,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
+,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
+111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
+111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
+116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
+,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
+100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
+,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
+,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
+,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
+,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
+,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
+,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
+,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
+,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
+,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
+,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
+,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
+,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
+,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
+,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
+,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
+,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
+,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
+,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
+101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
+98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
+114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
+97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
+114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
+101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
+101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
+117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
+108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
+,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
+101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
+103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
+,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
+111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
+114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
+114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
+101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
+,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
+108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
+115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
+100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
+115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
+100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
+111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
+108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
+115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
+109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
+116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
+114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
+116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
+,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
+105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
+111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
+,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
+114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
+114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
+,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
+115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
+97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
+,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
+101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
+,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
+,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
+,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
+,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
+117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
+114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
+108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
+99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
+,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
+116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
+116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
+114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
+,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
+112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
+103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
+97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
+110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
+,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
+114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
+101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
+118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
+,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
+105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
+116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
+113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
+,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
+,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
+116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
+114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
+83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
+,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
+,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
+105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
+97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
+105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
+110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
+105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
+,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
+115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
+,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
+105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
+108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
+,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
+105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
+97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
+109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
+101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
+109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
+110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
+105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
+109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
+48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
+115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
+,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
+100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
+116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
+108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
+102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
+,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
+121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
+,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
+,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
+,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
+117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
+110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
+118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
+120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
+34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
+111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
+107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
+100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
+,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
+,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
+,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
+,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
+111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
+,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
+102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
+101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
+101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
+,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
+,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
+,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
+102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
+115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
+60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
+,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
+,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
+119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
+103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
+117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
+,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
+,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
+,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
+,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
+100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
+101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
+,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
+110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
+,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
+100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
+111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
+101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
+,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
+35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
+112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
+108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
+104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
+114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
+97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
+109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
+,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
+114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
+115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
+111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
+105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
+,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
+118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
+103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
+,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
+101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
+35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
+101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
+116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
+111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
+108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
+60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
+34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
+,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
+97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
+34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
+97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
+104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
+121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
+115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
+102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
+,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
+110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
+,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
+115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
+112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
+104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
+,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
+101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
+195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
+110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
+116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
+111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
+101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
+118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
+101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
+195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
+,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
+115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
+,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
+116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
+105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
+114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
+101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
+114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
+111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
+,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
+,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
+,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
+117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
+99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
+,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
+97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
+114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
+,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
+101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
+97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
+106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
+,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
+103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
+115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
+,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
+195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
+102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
+97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
+116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
+112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
+114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
+115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
+117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
+105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
+97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
+,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
+108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
+,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
+108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
+97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
+97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
+,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
+114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
+,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
+111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
+99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
+116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
+101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
+101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
+116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
+118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
+,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
+117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
+,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
+116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
+114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
+,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
+111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
+,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
+97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
+108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
+104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
+,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
+101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
+101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
+,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
+110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
+111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
+112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
+,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
+102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
+105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
+104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
+104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
+,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
+,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
+108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
+115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
+117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
+101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
+114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
+101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
+,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
+103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
+99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
+116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
+101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
+118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
+114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
+,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
+105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
+101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
+118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
+118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
+121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
+111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
+101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
+111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
+116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
+101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
+110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
+,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
+101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
+,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
+115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
+115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
+,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
+114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
+114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
+105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
+118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
+114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
+110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
+101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
+110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
+,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
+110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
+116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
+115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
+109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
+103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
+104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
+121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
+123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
+101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
+114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
+110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
+66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
+,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
+108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
+,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
+,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
+101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
+,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
+101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
+105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
+101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
+110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
+,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
+,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
+,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
+110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
+101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
+,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
+101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
+111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
+60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
+114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
+100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
+114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
+110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
+,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
+95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
+,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
+,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
+,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
+112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
+107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
+110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
+110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
+114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
+34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
+,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
+,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
+,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
+116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
+105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
+34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
+,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
+101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
+105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
+101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
+114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
+,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
+121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
+114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
+111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
+114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
+117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
+116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
+,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
+,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
+70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
+32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
+,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
+97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
+102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
+,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
+114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
+101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
+103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
+116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
+,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
+115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
+,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
+104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
+115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
+121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
+111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
+112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
+105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
+112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
+109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
+97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
+,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
+104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
+109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
+114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
+115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
+108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
+101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
+,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
+34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
+,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
+101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
+110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
+61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
+112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
+111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
+32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
+106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
+114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
+101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
+120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
+,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
+105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
+103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
+10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
+121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
+136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
+191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
+228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
+155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
+184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
+228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
+187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
+175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
+230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
+175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
+144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
+231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
+145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
+148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
+229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
+131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
+155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
+230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
+143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
+155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
+233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
+150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
+188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
+230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
+161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
+180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
+229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
+149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
+164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
+232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
+133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
+156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
+231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
+183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
+155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
+228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
+154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
+144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
+231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
+174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
+131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
+231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
+144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
+181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
+230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
+189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
+159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
+232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
+183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
+187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
+228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
+186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
+136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
+229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
+139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
+142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
+229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
+140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
+191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
+232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
+186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
+168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
+229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
+142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
+187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
+230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
+186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
+166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
+229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
+162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
+190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
+231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
+144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
+133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
+232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
+179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
+187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
+229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
+128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
+157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
+230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
+165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
+175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
+229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
+143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
+138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
+232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
+183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
+143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
+231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
+142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
+168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
+230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
+148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
+138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
+233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
+145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
+130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
+229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
+162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
+186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
+229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
+187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
+184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
+232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
+131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
+137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
+231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
+139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
+157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
+229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
+186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
+155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
+230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
+154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
+156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
+232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
+183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
+174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
+229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
+129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
+174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
+230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
+186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
+131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
+229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
+154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
+142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
+229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
+142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
+174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
+228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
+176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
+173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
+231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
+136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
+155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
+232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
+161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
+186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
+231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
+140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
+179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
+228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
+151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
+138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
+229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
+141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
+184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
+230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
+189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
+156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
+233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
+137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
+156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
+228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
+169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
+133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
+231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
+154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
+173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
+228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
+138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
+128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
+229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
+182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
+130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
+231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
+174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
+167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
+229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
+179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
+142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
+230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
+179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
+164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
+230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
+133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
+141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
+231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
+156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
+187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
+230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
+155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
+186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
+230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
+147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
+189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
+229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
+133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
+185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
+230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
+165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
+135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
+229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
+135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
+155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
+233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
+191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
+187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
+228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
+161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
+187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
+230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
+182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
+191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
+232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
+152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
+137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
+229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
+150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
+175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
+229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
+166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
+153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
+232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
+147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
+189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
+230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
+140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
+161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
+229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
+129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
+156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
+230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
+150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
+171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
+229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
+165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
+156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
+232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
+147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
+130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
+229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
+183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
+138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
+232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
+161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
+167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
+232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
+151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
+143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
+228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
+159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
+187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
+231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
+159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
+143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
+229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
+170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
+136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
+230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
+182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
+136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
+233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
+155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
+156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
+230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
+160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
+133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
+231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
+167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
+133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
+229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
+136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
+190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
+228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
+144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
+134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
+232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
+185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
+189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
+232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
+145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
+189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
+231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
+154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
+149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
+233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
+142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
+173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
+230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
+176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
+136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
+229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
+141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
+139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
+229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
+175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
+131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
+232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
+139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
+187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
+229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
+138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
+188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
+230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
+187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
+144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
+105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
+116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
+116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
+114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
+112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
+100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
+,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
+103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
+111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
+117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
+105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
+,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
+,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
+118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
+114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
+110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
+101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
+109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
+,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
+,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
+109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
+,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
+109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
+111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
+105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
+,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
+113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
+105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
+116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
+,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
+112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
+118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
+101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
+115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
+,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
+98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
+,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
+110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
+115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
+105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
+111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
+118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
+101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
+161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
+179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
+,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
+195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
+,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
+,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
+190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
+178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
+176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
+186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
+146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
+190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
+130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
+188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
+176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
+190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
+161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
+176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
+186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
+141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
+128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
+143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
+146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
+190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
+128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
+141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
+190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
+190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
+164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
+224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
+135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
+164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
+224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
+185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
+97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
+224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
+190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
+164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
+224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
+128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
+164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
+224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
+139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
+164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
+224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
+178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
+164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
+176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
+137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
+131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
+177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
+133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
+132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
+173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
+175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
+167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
+185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
+134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
+132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
+138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
+176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
+131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
+181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
+138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
+167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
+167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
+138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
+174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
+167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
+181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
+134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
+173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
+168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
+179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
+178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
+135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
+132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
+138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
+131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
+168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
+138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
+133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
+130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
+114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
+101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
+115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
+102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
+97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
+114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
+115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
+,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
+119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
+,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
+101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
+,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
+105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
+105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
+108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
+100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
+111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
+,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
+,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
+117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
+,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
+115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
+,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
+109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
+101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
+,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
+110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
+,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
+116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
+106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
+105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
+108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
+101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
+101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
+97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
+,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
+117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
+,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
+119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
+108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
+114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
+105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
+116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
+,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
+116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
+115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
+115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
+114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
+108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
+111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
+,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
+101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
+110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
+112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
+99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
+,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
+100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
+110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
+101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
+80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
+99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
+99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
+105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
+112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
+101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
+,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
+,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
+105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
+101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
+100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
+101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
+108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
+,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
+,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
+105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
+,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
+45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
+100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
+,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
+71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
+105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
+100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
+98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
+109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
+111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
+101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
+103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
+108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
+,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
+101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
+100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
+116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
+,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
+,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
+,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
+97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
+,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
+,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
+117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
+116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
+,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
+,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
+,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
+97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
+110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
+111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
+100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
+114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
+115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
+108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
+116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
+32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
+100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
+101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
+104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
+101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
+100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
+110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
+97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
+117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
+,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
+,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
+,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
+118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
+,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
+121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
+117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
+41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
+110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
+97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
+,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
+,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
+105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
+,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
+101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
+100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
+,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
+97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
+,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
+104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
+,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
+117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
+104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
+,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
+58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
+95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
+99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
+112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
+,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
+114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
+,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
+112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
+115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
+116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
+,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
+101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
+112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
+101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
+101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
+118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
+116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
+,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
+118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
+104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
+114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
+,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
+115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
+111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
+116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
+101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
+105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
+108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
+114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
+,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
+10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
+111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
+103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
+,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
+108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
+104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
+,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
+97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
+104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
+101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
+115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
+117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
+114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
+104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
+,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
+109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
+,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
+108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
+100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
+105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
+100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
+112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
+,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
+105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
+110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
+32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
+,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
+110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
+,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
+97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
+,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
+,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
+116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
+,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
+101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
+116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
+115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
+105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
+119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
+105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
+107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
+98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
+32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
+99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
+,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
+105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
+99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
+,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
+,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
+100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
+116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
+117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
+,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
+114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
+,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
+114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
+105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
+,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
+,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
+101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
+101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
+,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
+,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
+62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
+103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
+116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
+100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
+103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
+,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
+97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
+108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
+117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
+,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
+114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
+113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
+114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
+97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
+100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
+104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
+103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
+,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
+118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
+104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
+115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
+32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
+108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
+,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
+101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
+112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
+,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
+109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
+109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
+,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
+99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
+116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
+,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
+117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
+116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
+,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
+32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
+105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
+104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
+105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
+118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
+100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
+97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
+,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
+,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
+115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
+,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
+,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
+116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
+108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
+,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
+114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,
+104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32
+,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101
+,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,
+101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,
+116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,
+110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,
+105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,
+108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,
+114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,
+108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,
+78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,
+116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,
+116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,
+119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,
+119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,
+10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,
+101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,
+116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,
+104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101
+,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,
+105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,
+101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,
+115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115
+,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102
+,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,
+115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112
+,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,
+111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,
+101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,
+108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,
+101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32
+,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,
+116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32
+,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,
+102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68
+,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41
+,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,
+108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,
+105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,
+101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,
+114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,
+100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97
+,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,
+101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,
+104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100
+,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,
+103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,
+32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,
+66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,
+116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,
+100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,
+105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,
+101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,
+111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,
+97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,
+101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,
+117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,
+111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,
+97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,
+102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,
+117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,
+116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117
+,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106
+,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,
+105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,
+115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97
+,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,
+121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,
+110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,
+115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,
+62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,
+101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116
+,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103
+,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108
+,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,
+104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,
+111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,
+97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59
+,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,
+108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,
+97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101
+,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,
+105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,
+101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,
+108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,
+115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,
+32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,
+98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108
+,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,
+114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101
+,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97
+,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,
+101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,
+101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,
+100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109
+,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,
+100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,
+108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32
+,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,
+101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,
+101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,
+108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,
+99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111
+,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,
+103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,
+116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116
+,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101
+,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103
+,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,
+97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115
+,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,
+111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,
+115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65
+,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67
+,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,
+117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,
+115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,
+111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,
+101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,
+104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87
+,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112
+,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,
+195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114
+,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,
+101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97
+,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,
+97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,
+100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,
+101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111
+,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32
+,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,
+116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97
+,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,
+105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,
+72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115
+,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,
+112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,
+32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,
+97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,
+105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,
+116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,
+99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,
+46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,
+116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62
+,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,
+114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115
+,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,
+114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,
+110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,
+116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,
+121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,
+44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101
+,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,
+32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59
+,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,
+116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115
+,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,
+105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,
+32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101
+,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,
+115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,
+116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,
+105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,
+105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111
+,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,
+59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,
+111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116
+,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103
+,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,
+108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,
+116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,
+111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,
+108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,
+103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,
+110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,
+110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119
+,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32
+,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,
+114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,
+101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,
+101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,
+121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,
+115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,
+100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101
+,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,
+119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,
+104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101
+,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61
+,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,
+97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110
+,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,
+110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,
+110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,
+115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,
+97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,
+109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111
+,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,
+97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,
+116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,
+110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,
+108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,
+101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,
+97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,
+110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,
+97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,
+100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,
+119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,
+108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,
+109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112
+,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,
+114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,
+115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,
+105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,
+78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,
+60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,
+97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115
+,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,
+46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,
+115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,
+114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,
+101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32
+,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,
+111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,
+105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,
+116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114
+,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,
+105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,
+117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,
+97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,
+116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116
+,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,
+32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,
+115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59
+,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,
+61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,
+110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,
+108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,
+32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109
+,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,
+117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109
+,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,
+110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,
+101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,
+116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,
+101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,
+103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,
+110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,
+114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,
+115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58
+,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,
+97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110
+,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108
+,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112
+,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,
+65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,
+112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,
+117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,
+111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,
+110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101
+,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,
+116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99
+,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108
+,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,
+118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,
+109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,
+110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,
+111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,
+104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,
+111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,
+105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,
+101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,
+101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,
+118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,
+97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,
+116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101
+,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116
+,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,
+101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,
+119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,
+119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,
+111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,
+59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101
+,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108
+,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,
+101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,
+111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,
+109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,
+114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,
+46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,
+102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,
+101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67
+,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,
+97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,
+103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,
+118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110
+,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,
+114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,
+32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,
+110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,
+32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,
+101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,
+116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,
+60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111
+,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,
+97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,
+111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,
+105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,
+34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,
+111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,
+101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114
+,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97
+,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,
+121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,
+108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70
+,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,
+99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,
+101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,
+105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,
+32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108
+,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,
+105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,
+33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,
+121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61
+,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97
+,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,
+116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,
+101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121
+,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,
+114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,
+32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,
+32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,
+112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112
+,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,
+114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,
+115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,
+97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105
+,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109
+,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,
+110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40
+,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,
+114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,
+121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,
+100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,
+101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,
+73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115
+,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,
+103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,
+115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62
+,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,
+61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,
+117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,
+97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,
+103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97
+,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,
+107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,
+97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,
+98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,
+109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114
+,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109
+,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,
+97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,
+111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,
+114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195
+,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,
+103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,
+101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,
+103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,
+111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,
+195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,
+111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100
+,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,
+111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,
+101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,
+115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,
+99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,
+105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,
+105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,
+105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103
+,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110
+,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,
+101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101
+,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,
+103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117
+,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,
+98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,
+101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,
+108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,
+109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,
+111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,
+110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117
+,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,
+97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,
+114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,
+115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,
+101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,
+105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,
+115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,
+100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,
+111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,
+114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,
+118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,
+110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,
+108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,
+107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,
+97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,
+115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,
+101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97
+,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,
+105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,
+97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,
+115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111
+,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,
+100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,
+117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,
+97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,
+101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100
+,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,
+121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,
+97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,
+108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,
+100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,
+117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110
+,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,
+111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,
+100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99
+,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114
+,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,
+101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,
+108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99
+,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,
+101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,
+98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,
+32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,
+116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109
+,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116
+,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,
+115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,
+101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,
+34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,
+108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,
+47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,
+104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,
+99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115
+,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,
+99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,
+99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,
+99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,
+103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110
+,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,
+117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,
+83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,
+105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,
+108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,
+114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116
+,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,
+118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,
+105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101
+,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108
+,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,
+108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,
+110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,
+117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114
+,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,
+117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114
+,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,
+105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,
+109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,
+115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,
+111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101
+,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,
+114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,
+97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,
+68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116
+,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114
+,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,
+97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,
+117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,
+101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,
+111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,
+114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,
+115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,
+117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118
+,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47
+,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,
+114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,
+111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115
+,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107
+,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,
+60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105
+,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,
+117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,
+34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116
+,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,
+115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,
+101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,
+103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,
+114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,
+112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60
+,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105
+,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,
+99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,
+60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,
+105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99
+,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,
+112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105
+,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114
+,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,
+99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,
+47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,
+101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,
+97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,
+116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,
+114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,
+101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,
+110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,
+111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,
+97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,
+99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,
+116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,
+97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,
+121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,
+105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114
+,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,
+107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99
+,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100
+,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,
+101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,
+105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,
+97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,
+116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120
+,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,
+114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116
+,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109
+,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,
+114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,
+108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,
+110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116
+,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,
+105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,
+101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,
+100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,
+108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,
+105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118
+,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,
+110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,
+101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,
+115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108
+,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,
+97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,
+110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,
+108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,
+114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110
+,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100
+,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,
+105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,
+101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,
+119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97
+,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,
+117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,
+68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104
+,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,
+104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,
+112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,
+107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67
+,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97
+,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,
+99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97
+,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114
+,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,
+97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,
+110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,
+61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,
+109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,
+103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105
+,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,
+112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,
+109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105
+,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,
+101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115
+,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,
+108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,
+118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115
+,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,
+99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115
+,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,
+32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,
+108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114
+,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,
+61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,
+107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,
+97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,
+104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,
+101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,
+101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,
+115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,
+111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115
+,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99
+,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,
+32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,
+104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97
+,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,
+60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,
+110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,
+111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121
+,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,
+115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111
+,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,
+109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,
+111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101
+,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,
+109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,
+110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,
+104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,
+104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,
+99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,
+111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,
+62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100
+,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,
+79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,
+114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,
+114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103
+,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98
+,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83
+,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115
+,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,
+99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,
+98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,
+41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98
+,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,
+109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,
+103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,
+111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,
+119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,
+105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,
+112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,
+97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,
+110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,
+112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,
+114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,
+32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,
+34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,
+128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,
+105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,
+107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,
+110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111
+,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,
+114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,
+115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114
+,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,
+111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,
+116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,
+195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,
+114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,
+101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105
+,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110
+,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,
+110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,
+169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,
+114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115
+,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110
+,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111
+,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,
+103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,
+108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,
+108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,
+109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,
+116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,
+101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99
+,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,
+101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121
+,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,
+195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108
+,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,
+109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,
+97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,
+116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114
+,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,
+99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105
+,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116
+,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,
+114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,
+111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,
+116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,
+111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,
+112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,
+195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,
+114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,
+111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99
+,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101
+,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,
+105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,
+173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,
+100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,
+115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,
+114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,
+105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115
+,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,
+114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114
+,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,
+101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,
+115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,
+103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,
+110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,
+177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,
+116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,
+115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,
+114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115
+,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,
+180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,
+177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,
+190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,
+188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,
+190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,
+179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,
+190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,
+190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,
+180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,
+189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,
+190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,
+178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,
+136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,
+180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,
+128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,
+133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,
+130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,
+188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,
+190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,
+141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,
+188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,
+178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,
+180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,
+189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,
+188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,
+190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,
+176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,
+178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,
+189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,
+180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,
+189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,
+128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,
+132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,
+174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,
+138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,
+167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,
+173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,
+138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,
+135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,
+163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,
+173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,
+167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,
+167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,
+167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,
+177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,
+180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,
+138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,
+180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,
+133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,
+133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,
+133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,
+181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,
+177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,
+133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,
+136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,
+168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,
+167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,
+163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,
+138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,
+133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,
+177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,
+134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,
+136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,
+167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,
+132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,
+0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
+5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
+23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,
+255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
+3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
+0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
+101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,
+99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,
+104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,
+105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,
+103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117
+,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99
+,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,
+117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,
+116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,
+110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99
+,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,
+110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105
+,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,
+101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,
+116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,
+101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104
+,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111
+,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,
+109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104
+,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,
+104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,
+108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105
+,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,
+105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,
+102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116
+,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,
+109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114
+,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,
+105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97
+,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,
+101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,
+110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,
+110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,
+111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,
+114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110
+,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,
+116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,
+101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114
+,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,
+100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,
+101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97
+,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,
+34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101
+,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,
+119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100
+,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,
+99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,
+105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,
+115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,
+114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,
+115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,
+102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101
+,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,
+107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,
+99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,
+97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115
+,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,
+116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,
+111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102
+,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,
+104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,
+108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,
+108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32
+,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,
+101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,
+102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,
+110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,
+71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,
+112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,
+99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,
+62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,
+111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,
+100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,
+103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,
+101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,
+112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,
+105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,
+110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,
+116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,
+115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,
+116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,
+112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,
+114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105
+,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,
+32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,
+117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,
+110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104
+,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114
+,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,
+108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,
+100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104
+,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,
+108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,
+101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,
+117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,
+104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,
+121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,
+114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,
+116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,
+116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,
+109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,
+110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,
+105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,
+116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,
+111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,
+111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105
+,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32
+,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,
+109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,
+108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97
+,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,
+117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,
+75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32
+,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,
+102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,
+111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,
+59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,
+118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,
+105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101
+,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,
+34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,
+115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,
+115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105
+,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97
+,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116
+,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,
+101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,
+98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,
+101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,
+115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100
+,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,
+100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,
+111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,
+116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,
+114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,
+112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,
+99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,
+115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,
+100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,
+116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,
+101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,
+116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108
+,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,
+109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101
+,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97
+,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122
+,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104
+,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101
+,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,
+32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,
+115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,
+116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,
+114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,
+97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,
+102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,
+111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111
+,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,
+116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,
+116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,
+101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,
+102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,
+32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,
+114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,
+119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110
+,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,
+115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,
+114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,
+101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101
+,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,
+101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,
+101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,
+115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101
+,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,
+101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,
+121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101
+,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110
+,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,
+112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97
+,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,
+111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101
+,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105
+,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97
+,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,
+102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97
+,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,
+101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,
+120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,
+115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,
+97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,
+114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56
+,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
+117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,
+115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,
+112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,
+101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117
+,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100
+,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,
+102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,
+111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62
+,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99
+,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,
+114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,
+105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,
+105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,
+105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121
+,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,
+114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,
+116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110
+,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114
+,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,
+116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,
+118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,
+114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,
+101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59
+,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,
+108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,
+116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,
+116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,
+114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,
+105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,
+110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,
+97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32
+,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,
+62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,
+115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,
+110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,
+97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,
+105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,
+115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,
+115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,
+101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,
+101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32
+,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,
+97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,
+111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32
+,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,
+110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,
+97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,
+100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,
+116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112
+,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,
+116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99
+,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,
+101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,
+104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,
+101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,
+101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,
+112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116
+,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104
+,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,
+110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,
+115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,
+110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,
+102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118
+,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110
+,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109
+,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,
+110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,
+110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97
+,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59
+,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,
+119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,
+107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,
+97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,
+119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,
+101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101
+,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,
+111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,
+114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,
+105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,
+110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,
+115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,
+108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,
+110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105
+,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,
+116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116
+,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105
+,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,
+101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104
+,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114
+,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,
+101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110
+,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,
+101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,
+115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,
+116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,
+32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,
+97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,
+105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,
+116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,
+109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,
+114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,
+99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97
+,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101
+,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116
+,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,
+32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,
+110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,
+110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,
+100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,
+116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111
+,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,
+116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,
+100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,
+110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,
+112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,
+115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,
+61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101
+,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,
+34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111
+,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,
+111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,
+110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101
+,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103
+,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,
+114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,
+115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,
+103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,
+115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98
+,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,
+105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,
+97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109
+,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,
+110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,
+103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34
+,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,
+99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99
+,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105
+,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114
+,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,
+116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99
+,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,
+105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118
+,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110
+,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,
+59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99
+,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,
+104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,
+59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110
+,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,
+110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,
+104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,
+98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,
+101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,
+118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,
+116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,
+184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,
+231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,
+186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,
+174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,
+229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,
+167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,
+142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,
+228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,
+129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,
+186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,
+232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,
+173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,
+173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,
+229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,
+115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,
+114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,
+99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,
+97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105
+,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,
+110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112
+,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,
+114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,
+111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,
+105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,
+101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105
+,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117
+,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,
+110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110
+,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195
+,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110
+,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110
+,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,
+109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,
+116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,
+115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,
+111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115
+,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,
+110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,
+109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99
+,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,
+97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,
+101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101
+,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,
+99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,
+97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,
+116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224
+,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130
+,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164
+,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224
+,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185
+,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164
+,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224
+,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166
+,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111
+,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,
+164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,
+224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,
+164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,
+165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,
+224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,
+178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,
+164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,
+224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,
+190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,
+164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,
+224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,
+133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,
+164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,
+224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,
+135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,
+164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,
+224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,
+173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,
+164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,
+224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,
+174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,
+164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,
+224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,
+176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,
+164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,
+224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,
+128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,
+164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,
+224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,
+178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,
+165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,
+224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,
+156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,
+164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,
+224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,
+130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,
+164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,
+224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,
+182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,
+164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,
+224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,
+101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,
+10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99
+,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,
+112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,
+107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,
+101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105
+,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98
+,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,
+103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,
+99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,
+118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110
+,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101
+,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,
+111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,
+105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,
+97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,
+111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,
+116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,
+97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112
+,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,
+114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,
+111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110
+,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,
+116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,
+105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111
+,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,
+110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,
+111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111
+,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118
+,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,
+101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109
+,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115
+,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,
+105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,
+108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,
+110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111
+,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,
+111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,
+110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,
+44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110
+,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,
+111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40
+,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,
+115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,
+101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,
+104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105
+,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,
+99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101
+,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,
+101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,
+118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,
+115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,
+111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,
+100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,
+112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,
+112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,
+99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115
+,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,
+114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,
+111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,
+110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,
+101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110
+,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,
+108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,
+112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,
+110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,
+115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,
+111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,
+112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99
+,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110
+,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,
+116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,
+32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,
+108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,
+100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,
+60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101
+,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,
+103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,
+101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,
+103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117
+,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,
+101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,
+103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101
+,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,
+47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,
+117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,
+114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117
+,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,
+117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,
+100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,
+32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,
+105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,
+120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,
+114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,
+101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105
+,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,
+116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,
+58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,
+111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,
+111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,
+108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,
+109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,
+110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,
+110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,
+111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,
+105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,
+100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100
+,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,
+108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,
+105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,
+115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,
+116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,
+110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,
+112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110
+,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99
+,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,
+117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,
+102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,
+116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114
+,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,
+114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,
+10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111
+,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,
+111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116
+,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,
+47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116
+,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,
+32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,
+111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101
+,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110
+,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,
+111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,
+32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,
+32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,
+111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,
+110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,
+32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101
+,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,
+115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,
+110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,
+115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,
+111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,
+111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,
+108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103
+,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,
+118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,
+110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114
+,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101
+,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,
+114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,
+108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,
+97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,
+34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62
+,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,
+111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,
+99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116
+,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,
+74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,
+116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,
+110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,
+105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32
+,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,
+102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117
+,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101
+,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,
+105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,
+111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100
+,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,
+115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,
+117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,
+114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,
+47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,
+116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120
+,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,
+110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,
+59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,
+105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111
+,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,
+110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,
+97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,
+105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,
+112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109
+,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105
+,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,
+100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111
+,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,
+105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108
+,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105
+,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,
+116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113
+,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,
+100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,
+116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,
+100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58
+,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,
+116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,
+111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,
+119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,
+101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,
+101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,
+105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97
+,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,
+99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,
+114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,
+101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101
+,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112
+,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,
+97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,
+115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,
+108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111
+,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,
+117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,
+116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,
+115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,
+119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,
+110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,
+62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119
+,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121
+,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101
+,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114
+,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117
+,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,
+114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,
+115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98
+,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,
+101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110
+,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,
+101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,
+13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,
+105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117
+,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,
+103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,
+105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103
+,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,
+111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101
+,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,
+100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,
+100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,
+108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,
+105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,
+114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,
+115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,
+105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,
+114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,
+105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117
+,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108
+,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105
+,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,
+101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,
+101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105
+,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,
+110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,
+115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,
+105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,
+116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101
+,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119
+,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,
+110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,
+105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110
+,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116
+,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,
+116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,
+104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,
+112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99
+,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,
+108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,
+102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,
+99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,
+105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32
+,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,
+101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111
+,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121
+,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97
+,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,
+101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,
+101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,
+110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117
+,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,
+101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114
+,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,
+107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,
+108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,
+112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,
+98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,
+100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,
+105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,
+105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,
+32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,
+104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,
+39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101
+,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110
+,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112
+,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,
+102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,
+114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,
+110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,
+97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,
+119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121
+,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111
+,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,
+102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105
+,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,
+110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,
+100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,
+114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,
+101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121
+,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,
+32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,
+117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114
+,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,
+44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,
+105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,
+116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108
+,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,
+108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,
+110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,
+59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110
+,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,
+104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,
+100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,
+32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101
+,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,
+101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99
+,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,
+105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110
+,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,
+101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75
+,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,
+97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,
+106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,
+112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97
+,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,
+101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,
+114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,
+108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108
+,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,
+34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,
+101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,
+116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,
+109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,
+119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118
+,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114
+,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98
+,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102
+,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,
+100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,
+101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,
+114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,
+111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,
+101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,
+111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,
+103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100
+,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,
+105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,
+101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,
+111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,
+66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,
+32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116
+,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,
+103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110
+,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111
+,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,
+111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,
+97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100
+,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,
+116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,
+61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32
+,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115
+,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,
+101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105
+,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,
+116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,
+103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100
+,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215
+,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,
+111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,
+115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,
+100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,
+117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,
+115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,
+115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102
+,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112
+,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,
+115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,
+116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,
+105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,
+105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,
+97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,
+173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,
+101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,
+118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,
+101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,
+108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,
+117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,
+114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,
+179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173
+,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116
+,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,
+117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,
+101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,
+116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,
+209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,
+209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,
+209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,
+209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,
+208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,
+208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,
+208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,
+208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,
+209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,
+208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,
+208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,
+208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,
+208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,
+208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,
+209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,
+208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,
+209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,
+208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,
+208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,
+209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,
+209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,
+208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,
+208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,
+208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,
+208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,
+208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,
+208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,
+208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,
+209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,
+209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,
+208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,
+208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,
+208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,
+208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,
+208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,
+208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,
+208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,
+208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,
+209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,
+209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,
+209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,
+208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,
+208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,
+208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,
+208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,
+209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,
+208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,
+209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,
+208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,
+208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,
+208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,
+217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,
+216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,
+216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,
+217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,
+216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,
+216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,
+216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,
+216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,
+217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,
+216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,
+217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,
+216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,
+216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,
+216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,
+216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,
+217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,
+216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,
+217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,
+217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,
+217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,
+216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,
+217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,
+216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,
+217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,
+217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,
+216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,
+216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,
+217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,
+216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,
+217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,
+216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,
+217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,
+216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,
+217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,
+216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,
+217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,
+216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,
+217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,
+217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61
+,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,
+34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,
+111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107
+,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,
+105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,
+109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112
+,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,
+105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101
+,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,
+101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,
+108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,
+99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,
+101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110
+,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,
+105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,
+105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,
+99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,
+116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105
+,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,
+114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,
+108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114
+,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,
+111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,
+110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111
+,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,
+111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32
+,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58
+,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,
+100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,
+105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,
+101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110
+,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122
+,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,
+101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116
+,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101
+,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,
+112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115
+,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,
+99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,
+101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,
+114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,
+105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,
+115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,
+112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107
+,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,
+104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,
+104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,
+110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97
+,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60
+,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105
+,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,
+41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108
+,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34
+,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,
+111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,
+105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97
+,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,
+101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116
+,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,
+118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111
+,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,
+117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110
+,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,
+109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,
+105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,
+111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,
+105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,
+114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,
+117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110
+,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,
+105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,
+116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,
+114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,
+116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,
+114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,
+32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,
+101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,
+111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,
+61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,
+111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122
+,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,
+115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,
+115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,
+110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,
+114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,
+116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116
+,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,
+109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,
+121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,
+37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61
+,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40
+,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,
+32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,
+101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,
+61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105
+,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,
+116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101
+,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,
+101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115
+,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99
+,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,
+101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,
+110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,
+110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,
+115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,
+120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97
+,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,
+100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111
+,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,
+34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,
+98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110
+,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114
+,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,
+116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,
+117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,
+116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,
+101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,
+111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,
+100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32
+,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118
+,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,
+32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,
+116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,
+108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,
+115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111
+,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,
+116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,
+102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,
+104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,
+105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,
+105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,
+101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,
+60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,
+32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,
+102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,
+114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,
+110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112
+,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121
+,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,
+105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110
+,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
+104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,
+115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,
+111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111
+,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,
+105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117
+,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101
+,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,
+108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103
+,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,
+84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32
+,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115
+,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,
+110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,
+112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103
+,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,
+101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,
+115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,
+104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,
+32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,
+114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,
+99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,
+97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116
+,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116
+,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,
+112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,
+104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,
+102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,
+116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109
+,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,
+105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99
+,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,
+116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,
+117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,
+114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100
+,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,
+105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32
+,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,
+34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,
+60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,
+32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,
+116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110
+,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114
+,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,
+104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,
+115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102
+,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,
+114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,
+112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,
+112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,
+114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,
+68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,
+110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,
+104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101
+,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114
+,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110
+,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,
+105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,
+101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,
+101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,
+114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,
+99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101
+,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114
+,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,
+112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108
+,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,
+111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,
+72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,
+114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,
+114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,
+116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,
+105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,
+108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,
+83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99
+,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,
+104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,
+104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,
+101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,
+101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,
+97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,
+99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100
+,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,
+100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,
+32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97
+,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,
+116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,
+112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114
+,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,
+101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,
+114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,
+112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97
+,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105
+,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,
+47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,
+116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,
+101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,
+110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,
+114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,
+101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100
+,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,
+97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,
+115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110
+,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,
+105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,
+105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114
+,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,
+105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,
+105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,
+99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,
+116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,
+111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,
+112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,
+110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,
+110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,
+109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,
+116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,
+111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111
+,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108
+,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,
+109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,
+105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,
+116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,
+111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97
+,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,
+111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,
+116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32
+,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,
+101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,
+118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,
+115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,
+109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108
+,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116
+,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,
+111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,
+99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108
+,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,
+110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,
+105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,
+105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,
+97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,
+104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,
+108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,
+115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,
+32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116
+,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,
+101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,
+111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,
+111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121
+,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,
+110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,
+104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,
+37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116
+,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,
+101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46
+,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,
+110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,
+110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,
+99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,
+117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,
+101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,
+34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,
+97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,
+105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,
+116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,
+44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,
+105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,
+99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101
+,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97
+,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,
+32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,
+101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108
+,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,
+32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,
+101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111
+,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,
+116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,
+108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,
+104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,
+97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102
+,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97
+,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,
+102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,
+116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,
+101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,
+34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,
+111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,
+32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,
+116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110
+,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,
+115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114
+,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,
+115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,
+32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115
+,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,
+101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,
+116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,
+102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,
+111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,
+32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,
+116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,
+103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,
+115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111
+,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,
+111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,
+105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,
+114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,
+101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,
+115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,
+101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,
+32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,
+109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,
+118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,
+105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,
+118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,
+104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,
+112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,
+105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,
+119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,
+102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104
+,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,
+110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,
+116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,
+101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,
+116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,
+101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32
+,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,
+109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,
+101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,
+99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101
+,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,
+121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,
+105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101
+,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,
+110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101
+,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,
+101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,
+32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117
+,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,
+111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,
+122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111
+,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,
+32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112
+,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,
+108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,
+102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104
+,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48
+,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,
+110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,
+32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60
+,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,
+101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,
+111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,
+102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105
+,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,
+112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,
+101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,
+111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,
+69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102
+,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,
+44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,
+101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,
+111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,
+111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,
+108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32
+,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109
+,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,
+116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,
+105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,
+121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,
+101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97
+,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106
+,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,
+115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111
+,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,
+32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,
+111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,
+104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,
+101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,
+116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116
+,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104
+,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,
+110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,
+110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,
+32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,
+115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,
+119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,
+34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,
+97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,
+116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,
+101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,
+108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,
+116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116
+,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,
+101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110
+,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,
+101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,
+116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72
+,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,
+115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,
+116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,
+32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,
+114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,
+32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,
+111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32
+,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32
+,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,
+117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,
+110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,
+116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,
+100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,
+104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,
+114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,
+32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32
+,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111
+,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101
+,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,
+105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114
+,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,
+112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,
+101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,
+100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,
+111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,
+101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,
+111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,
+115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,
+46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,
+109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,
+110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,
+32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,
+32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,
+109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,
+111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,
+109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,
+102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32
+,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,
+111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100
+,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,
+111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,
+32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,
+32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114
+,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,
+102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32
+,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,
+101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,
+111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,
+104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115
+,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,
+97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,
+97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116
+,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,
+112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115
+,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,
+108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,
+32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,
+105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,
+108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110
+,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101
+,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,
+117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,
+104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,
+99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,
+102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,
+110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118
+,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,
+60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105
+,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114
+,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,
+32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109
+,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,
+111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,
+101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173
+,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,
+179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,
+195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,
+97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,
+105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,
+101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,
+116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109
+,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,
+110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111
+,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115
+,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,
+101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,
+116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99
+,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,
+114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114
+,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,
+114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,
+108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111
+,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,
+115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116
+,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100
+,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,
+109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99
+,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,
+99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,
+97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110
+,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,
+104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,
+108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,
+115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105
+,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,
+110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,
+105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,
+46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,
+116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,
+116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,
+97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,
+105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110
+,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,
+110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,
+115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,
+105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99
+,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,
+100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101
+,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,
+100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,
+102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,
+108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,
+112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,
+108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,
+105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,
+117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,
+108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117
+,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,
+112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,
+97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,
+59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,
+58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105
+,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,
+110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,
+102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,
+111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104
+,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,
+110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,
+114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,
+110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,
+101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,
+116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97
+,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,
+99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,
+105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,
+105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,
+108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,
+97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,
+62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,
+108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,
+101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,
+97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,
+111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114
+,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,
+116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121
+,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,
+117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,
+109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,
+111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,
+115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,
+103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,
+114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,
+103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,
+111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,
+105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,
+99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,
+108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,
+110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,
+105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,
+110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,
+105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,
+117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,
+97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,
+10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,
+121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,
+111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,
+101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,
+115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,
+115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101
+,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,
+101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,
+112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,
+105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,
+103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,
+113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,
+100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,
+103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97
+,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,
+97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,
+99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111
+,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,
+48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,
+111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,
+100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,
+105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,
+103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108
+,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,
+97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,
+97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,
+102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114
+,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110
+,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116
+,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,
+97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,
+100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,
+116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,
+103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99
+,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,
+115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,
+115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,
+114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,
+114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,
+102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,
+115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110
+,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,
+101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,
+121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,
+97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,
+104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,
+114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32
+,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,
+105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,
+115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101
+,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,
+101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,
+115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,
+105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119
+,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105
+,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,
+102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,
+105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114
+,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100
+,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,
+111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61
+,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,
+116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114
+,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,
+97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116
+,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,
+114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110
+,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,
+110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,
+97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,
+98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,
+115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,
+103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,
+32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,
+109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,
+110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,
+110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,
+32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,
+112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,
+99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117
+,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,
+32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110
+,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,
+109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,
+100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,
+109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,
+98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,
+116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,
+108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,
+117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,
+34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,
+105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,
+111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,
+97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105
+,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,
+116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,
+115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,
+119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121
+,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,
+102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100
+,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,
+115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,
+100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,
+105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111
+,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,
+10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100
+,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,
+32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,
+110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,
+101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,
+100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,
+103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115
+,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,
+116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,
+110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,
+117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,
+105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,
+98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,
+111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,
+101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,
+101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,
+97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,
+111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101
+,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,
+101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,
+111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,
+121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,
+99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,
+32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,
+121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,
+116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,
+103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116
+,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116
+,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114
+,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104
+,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,
+115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,
+101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,
+119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,
+110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117
+,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,
+101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,
+101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,
+114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,
+108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,
+111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116
+,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,
+105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,
+98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,
+103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,
+118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111
+,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114
+,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,
+112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98
+,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99
+,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,
+101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,
+110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,
+101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,
+34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,
+105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,
+62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,
+114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121
+,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32
+,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,
+108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115
+,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32
+,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,
+115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,
+112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116
+,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105
+,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116
+,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,
+97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,
+110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105
+,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,
+116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,
+111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,
+102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115
+,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101
+,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32
+,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,
+32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99
+,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,
+101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101
+,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116
+,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,
+101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,
+116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48
+,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,
+111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,
+114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,
+111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,
+101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,
+109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,
+101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,
+101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121
+,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110
+,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,
+117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99
+,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,
+104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,
+97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,
+115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117
+,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,
+114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,
+10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,
+105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,
+115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,
+32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,
+101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,
+110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115
+,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,
+104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,
+110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,
+108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,
+110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,
+111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,
+102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,
+97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,
+102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,
+101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,
+114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,
+32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,
+108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,
+119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,
+34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101
+,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101
+,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,
+109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,
+116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,
+105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97
+,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,
+111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,
+108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,
+108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,
+105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,
+101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,
+101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,
+108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,
+105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97
+,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,
+101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,
+116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,
+112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,
+97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,
+105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,
+62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,
+100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,
+102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,
+32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104
+,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,
+114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,
+114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,
+101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116
+,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,
+100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110
+,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115
+,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,
+101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,
+105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,
+115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,
+104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,
+103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,
+104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,
+114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,
+110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,
+101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105
+,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,
+97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,
+122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110
+,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,
+115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,
+101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,
+115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,
+110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,
+32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100
+,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32
+,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,
+116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114
+,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,
+32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119
+,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,
+111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,
+109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105
+,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111
+,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75
+,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,
+208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,
+208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,
+217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,
+173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,
+189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,
+228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,
+180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,
+189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,
+105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110
+,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105
+,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,
+111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,
+114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,
+105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97
+,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101
+,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109
+,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,
+111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,
+105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,
+112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,
+101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110
+,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,
+99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,
+105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,
+110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,
+116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,
+116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,
+98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,
+190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,
+190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,
+128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,
+181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,
+135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,
+129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,
+143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,
+179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,
+190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,
+133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,
+189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,
+131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,
+176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,
+181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,
+190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,
+184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,
+176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,
+176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,
+143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,
+190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,
+130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,
+185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,
+190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,
+129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,
+185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,
+191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,
+176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,
+187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,
+176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,
+181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,
+129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,
+181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,
+190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,
+133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,
+190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,
+190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,
+185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,
+129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,
+184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,
+184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,
+190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,
+190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,
+140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,
+187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,
+176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,
+181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,
+135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,
+176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,
+189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,
+129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,
+184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,
+143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,
+176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,
+189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,
+181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,
+189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,
+181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,
+176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,
+143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,
+131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,
+130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,
+164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,
+224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,
+175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,
+164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,
+224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,
+190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,
+164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,
+224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,
+135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,
+164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,
+224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,
+135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,
+164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,
+224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,
+159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,
+164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,
+224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,
+135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,
+164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,
+224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,
+135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,
+164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,
+224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,
+176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,
+164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,
+224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,
+163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,
+164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,
+224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,
+166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,
+164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,
+224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,
+190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,
+164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,
+224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,
+135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,
+164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,
+224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,
+181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,
+164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,
+224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,
+130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,
+164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,
+224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,
+166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,
+164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,
+224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,
+184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,
+164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,
+224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,
+135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,
+164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,
+224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,
+135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,
+164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,
+224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,
+185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,
+164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,
+224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,
+190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,
+164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,
+224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,
+135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,
+164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,
+224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,
+190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,
+164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,
+224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,
+190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,
+164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,
+224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,
+165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,
+164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,
+224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,
+190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,
+165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,
+224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,
+135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,
+164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,
+224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,
+130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,
+164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,
+224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,
+181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,
+164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,
+224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,
+172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,
+164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,
+224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,
+135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,
+164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,
+224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,
+178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,
+164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,
+224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,
+185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,
+183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,
+136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,
+169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,
+167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,
+132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,
+168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,
+167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,
+132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,
+185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,
+177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,
+132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,
+169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,
+177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,
+173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,
+138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,
+177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,
+132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,
+177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,
+179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,
+172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,
+134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,
+183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,
+132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,
+135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,
+167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,
+132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,
+175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,
+167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,
+138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,
+171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,
+175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,
+132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,
+185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,
+133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,
+180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,
+179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,
+134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,
+132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,
+179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,
+133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,
+132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,
+110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,
+99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,
+110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,
+104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,
+110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,
+105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99
+,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,
+122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60
+,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,
+101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,
+105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,
+118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,
+111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,
+111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97
+,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,
+110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,
+110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112
+,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,
+108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47
+,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,
+105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,
+112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112
+,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116
+,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,
+97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,
+97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,
+101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,
+101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,
+114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,
+119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,
+105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,
+34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,
+117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120
+,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,
+105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111
+,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,
+116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,
+110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,
+108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,
+108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,
+108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,
+110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,
+110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,
+116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,
+103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,
+111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,
+111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,
+102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99
+,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,
+32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,
+71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,
+105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,
+101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32
+,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,
+100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,
+116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,
+116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,
+105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,
+108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,
+47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116
+,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
+103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,
+110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,
+111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,
+121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,
+60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,
+32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105
+,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,
+116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,
+109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,
+114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,
+110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111
+,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38
+,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,
+110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,
+110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,
+114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97
+,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,
+111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115
+,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,
+114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108
+,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,
+98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,
+115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,
+104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,
+110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,
+62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105
+,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,
+116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100
+,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,
+108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,
+102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,
+99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,
+118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,
+32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,
+109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,
+105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,
+116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111
+,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,
+114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,
+105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,
+114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,
+69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,
+112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101
+,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119
+,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,
+104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,
+111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32
+,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,
+111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,
+111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,
+110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,
+97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,
+116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,
+115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,
+111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,
+111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,
+104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,
+101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,
+109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104
+,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32
+,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,
+113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32
+,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,
+115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97
+,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32
+,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114
+,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,
+32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,
+116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,
+100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32
+,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98
+,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97
+,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,
+116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101
+,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,
+110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,
+105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100
+,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,
+101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,
+114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,
+102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,
+109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,
+110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,
+116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,
+105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110
+,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,
+32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,
+109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111
+,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,
+104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,
+101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,
+116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,
+116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,
+115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,
+32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109
+,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115
+,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115
+,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,
+100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,
+117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,
+32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101
+,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,
+100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,
+105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116
+,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110
+,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102
+,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,
+116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,
+111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,
+39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98
+,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,
+97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32
+,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,
+102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,
+116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110
+,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,
+104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,
+120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,
+78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,
+111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,
+101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,
+45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,
+117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104
+,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,
+101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,
+114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115
+,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,
+32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,
+108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,
+110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,
+100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121
+,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,
+111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,
+101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,
+116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,
+97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,
+114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112
+,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,
+97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,
+110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111
+,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,
+110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,
+114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,
+111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,
+116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116
+,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,
+100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,
+105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,
+110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,
+32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97
+,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,
+98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,
+101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,
+117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,
+115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,
+108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32
+,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,
+110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,
+116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,
+111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118
+,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,
+116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103
+,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101
+,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,
+32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112
+,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105
+,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,
+117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60
+,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,
+97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,
+115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,
+102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,
+97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,
+108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,
+32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114
+,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,
+32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101
+,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,
+115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,
+101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102
+,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,
+105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,
+108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,
+110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100
+,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,
+97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,
+105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,
+104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111
+,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119
+,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,
+121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120
+,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,
+115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,
+97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97
+,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97
+,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,
+116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,
+97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,
+114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110
+,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,
+115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,
+111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116
+,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,
+108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32
+,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111
+,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112
+,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,
+117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,
+67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,
+100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110
+,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,
+117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,
+114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,
+116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,
+117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111
+,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,
+116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,
+101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,
+99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117
+,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32
+,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,
+102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,
+108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,
+32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,
+117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,
+111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,
+101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105
+,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,
+101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32
+,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101
+,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,
+116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32
+,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61
+,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115
+,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116
+,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108
+,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,
+32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,
+115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,
+116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32
+,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,
+115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,
+108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,
+99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,
+101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111
+,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110
+,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,
+121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32
+,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,
+105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,
+105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,
+116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,
+34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78
+,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,
+115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,
+111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,
+32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,
+115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47
+,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,
+116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114
+,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98
+,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,
+116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111
+,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105
+,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,
+46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,
+116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33
+,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,
+111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,
+98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34
+,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,
+102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44
+,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,
+110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,
+116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,
+109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,
+111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,
+110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,
+111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115
+,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,
+100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,
+116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,
+111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,
+111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105
+,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62
+,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,
+101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,
+101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111
+,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,
+114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105
+,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,
+97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116
+,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,
+91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,
+32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,
+99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,
+101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101
+,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111
+,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,
+110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,
+104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,
+32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,
+99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115
+,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101
+,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,
+110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,
+100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,
+101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,
+101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,
+101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,
+108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111
+,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,
+109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62
+,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,
+119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,
+119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,
+60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,
+97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,
+34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,
+32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,
+101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32
+,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,
+111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,
+105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,
+108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,
+114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121
+,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,
+115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,
+32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
+62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,
+100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,
+118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,
+111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,
+97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,
+97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,
+121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,
+32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97
+,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104
+,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,
+115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35
+,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
+100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116
+,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,
+62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,
+115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101
+,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121
+,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110
+,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,
+112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,
+32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115
+,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34
+,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110
+,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,
+116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,
+115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,
+101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,
+104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,
+114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,
+58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,
+101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,
+110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,
+32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,
+111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,
+100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101
+,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,
+101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114
+,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,
+116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,
+116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,
+101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97
+,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,
+100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,
+105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116
+,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,
+108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,
+32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105
+,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111
+,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,
+32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,
+101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,
+110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,
+101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,
+114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,
+111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,
+61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,
+101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,
+34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110
+,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,
+116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,
+101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32
+,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,
+119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114
+,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,
+118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100
+,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,
+116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103
+,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,
+99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,
+61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,
+100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,
+101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97
+,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102
+,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,
+101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,
+102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105
+,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,
+120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,
+110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,
+101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111
+,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,
+110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,
+110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,
+101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,
+105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,
+117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32
+,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115
+,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,
+111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115
+,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110
+,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,
+105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,
+32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,
+32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,
+100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,
+114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,
+105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,
+98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115
+,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,
+115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,
+98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101
+,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
+119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105
+,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99
+,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114
+,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,
+105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113
+,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99
+,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,
+114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,
+114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,
+111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,
+101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,
+101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,
+32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,
+102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,
+32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,
+101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,
+114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,
+97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101
+,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,
+115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117
+,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121
+,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100
+,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119
+,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108
+,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,
+116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99
+,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,
+121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,
+101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,
+101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,
+100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,
+116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,
+107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116
+,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,
+105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,
+115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,
+116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,
+60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,
+116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,
+108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32
+,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105
+,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,
+34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,
+116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,
+101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109
+,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,
+110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,
+101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,
+105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101
+,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,
+100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116
+,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,
+104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,
+110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,
+105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116
+,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32
+,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,
+117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100
+,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,
+105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115
+,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,
+32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,
+101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,
+102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,
+111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,
+97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,
+116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,
+104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,
+100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115
+,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101
+,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116
+,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,
+114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,
+116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,
+47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,
+114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98
+,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,
+104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,
+97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114
+,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,
+116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,
+101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,
+116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111
+,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,
+101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,
+110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114
+,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,
+101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,
+101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,
+111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,
+105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,
+110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,
+116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,
+110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,
+113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,
+101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121
+,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,
+32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,
+60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,
+101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110
+,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,
+116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,
+115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105
+,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128
+,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103
+,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,
+186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,
+176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,
+185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,
+129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,
+130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,
+177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,
+181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,
+129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,
+135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,
+184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,
+191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,
+190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,
+190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,
+129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,
+129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,
+129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,
+181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,
+130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,
+188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,
+186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,
+190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,
+129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,
+176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,
+190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,
+130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,
+190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,
+181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,
+170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,
+167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,
+177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,
+185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,
+167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,
+167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,
+132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,
+182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,
+167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,
+179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,
+133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,
+129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,
+138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,
+132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,
+168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,
+167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,
+167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,
+169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,
+174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,
+133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,
+132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,
+132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,
+167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,
+175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,
+177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,
+167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,
+116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,
+114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,
+115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,
+110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,
+45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33
+,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,
+99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,
+102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,
+108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,
+32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47
+,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,
+100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,
+103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,
+118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103
+,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,
+32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,
+32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108
+,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,
+118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,
+98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114
+,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46
+,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,
+32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,
+32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,
+58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,
+105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109
+,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,
+105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,
+116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,
+115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32
+,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,
+97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97
+,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,
+115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,
+60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,
+44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,
+108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,
+32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,
+108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101
+,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,
+62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116
+,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,
+97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119
+,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115
+,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,
+111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101
+,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99
+,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,
+99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114
+,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116
+,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105
+,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,
+116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,
+116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,
+116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,
+119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,
+104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,
+116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,
+97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,
+102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,
+104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,
+117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,
+104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,
+117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,
+105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110
+,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,
+100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,
+111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,
+111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105
+,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,
+101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,
+61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,
+101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,
+99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103
+,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,
+110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105
+,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,
+104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116
+,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,
+100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,
+101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,
+111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,
+100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,
+112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,
+116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,
+115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,
+111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114
+,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,
+117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,
+111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,
+116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,
+105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,
+101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,
+114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115
+,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,
+80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,
+110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112
+,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,
+97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40
+,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,
+105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105
+,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,
+116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,
+116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,
+111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,
+61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,
+121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,
+112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,
+13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32
+,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116
+,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,
+112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,
+110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105
+,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,
+32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,
+100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,
+101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,
+100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,
+151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,
+164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,
+224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,
+181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,
+164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,
+224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,
+130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,
+165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,
+224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,
+128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,
+164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,
+224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,
+151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,
+164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,
+224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,
+135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,
+165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,
+224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,
+171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,
+164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,
+224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,
+176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,
+165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,
+224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,
+154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,
+164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,
+224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,
+135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,
+164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,
+224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,
+136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,
+164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,
+224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,
+164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,
+165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,
+224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,
+128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,
+164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,
+224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,
+135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,
+164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,
+224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,
+184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,
+164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,
+224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,
+184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,
+164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,
+224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,
+128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,
+164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,
+224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,
+190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,
+165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,
+224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,
+164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,
+165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,
+224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,
+130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,
+164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,
+224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,
+175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,
+164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,
+224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,
+135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,
+164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116
+,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34
+,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,
+101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,
+112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47
+,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45
+,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,
+34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,
+108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,
+105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,
+32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,
+110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,
+111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,
+100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101
+,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105
+,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,
+116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,
+101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,
+118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114
+,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,
+101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115
+,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,
+110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,
+116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114
+,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,
+118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102
+,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,
+110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,
+104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
+,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,
+114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,
+111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,
+110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101
+,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111
+,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,
+100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,
+105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,
+41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,
+101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,
+109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105
+,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,
+115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,
+121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,
+114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,
+109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,
+111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,
+111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,
+101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,
+114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,
+119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,
+116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,
+97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,
+49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109
+,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,
+48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,
+111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,
+121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114
+,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115
+,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
+114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,
+10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61
+,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,
+32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,
+47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32
+,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,
+116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,
+97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,
+105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
+206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,
+208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,
+209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,
+208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,
+208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,
+208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,
+208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,
+208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,
+209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,
+209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,
+208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,
+208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,
+209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,
+208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,
+208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,
+208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,
+208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,
+217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,
+216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,
+217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,
+217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,
+217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,
+216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,
+217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,
+216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,
+217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,
+216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,
+216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,
+216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,
+98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,
+61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,
+116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,
+46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,
+62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112
+,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,
+34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,
+60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,
+104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,
+111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,
+97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,
+34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,
+111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,
+117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,
+116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,
+99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,
+32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,
+62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,
+101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,
+111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10
+,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,
+103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,
+103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109
+,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,
+99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,
+32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,
+97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,
+112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47
+,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,
+58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,
+32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,
+111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101
+,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,
+102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,
+104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32
+,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,
+116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97
+,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,
+109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,
+101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,
+101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,
+105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,
+114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,
+32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,
+114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114
+,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105
+,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110
+,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,
+108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116
+,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,
+110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,
+108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,
+115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,
+111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,
+114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,
+100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,
+112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,
+104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105
+,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106
+,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112
+,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,
+97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,
+101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,
+108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,
+116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114
+,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,
+118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,
+111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,
+104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
+206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,
+100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,
+116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,
+105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117
+,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,
+105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,
+108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,
+120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115
+,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,
+116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,
+99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,
+100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32
+,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,
+110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115
+,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116
+,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,
+97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,
+108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,
+103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,
+116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,
+116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,
+101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110
+,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114
+,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,
+116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111
+,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,
+32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,
+101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,
+97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,
+110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117
+,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32
+,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,
+108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
+117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112
+,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,
+116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,
+115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,
+99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,
+111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,
+109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97
+,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,
+112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,
+107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,
+106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,
+118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,
+108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,
+99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,
+62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,
+101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,
+119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,
+103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,
+101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48
+,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,
+105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52
+,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,
+104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,
+116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32
+,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59
+,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117
+,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116
+,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,
+101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101
+,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70
+,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,
+101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,
+104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,
+115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116
+,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,
+114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37
+,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,
+108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47
+,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114
+,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,
+104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,
+99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114
+,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,
+32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104
+,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114
+,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121
+,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,
+111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,
+32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,
+46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,
+114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108
+,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,
+110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,
+116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,
+104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,
+101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,
+111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,
+114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,
+47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,
+116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,
+46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,
+101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34
+,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,
+32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,
+105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34
+,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109
+,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108
+,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,
+112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,
+32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45
+,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65
+,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32
+,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111
+,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,
+115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,
+101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,
+110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117
+,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,
+102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,
+116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,
+108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,
+105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101
+,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118
+,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,
+105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,
+117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,
+101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116
+,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,
+105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,
+99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,
+110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32
+,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101
+,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,
+111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,
+100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111
+,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101
+,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,
+110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,
+104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,
+101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,
+101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,
+114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110
+,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116
+,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,
+119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110
+,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,
+105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114
+,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,
+97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,
+111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,
+101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,
+97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62
+,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,
+100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,
+100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,
+112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116
+,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34
+,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,
+101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,
+111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,
+116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,
+111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,
+62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114
+,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,
+103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,
+110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,
+121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,
+10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,
+101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,
+111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,
+101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208
+,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208
+,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209
+,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208
+,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208
+,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208
+,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209
+,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208
+,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208
+,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208
+,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208
+,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208
+,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208
+,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208
+,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209
+,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209
+,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208
+,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208
+,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209
+,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208
+,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181
+,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165
+,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224
+,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128
+,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164
+,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224
+,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166
+,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164
+,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224
+,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159
+,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164
+,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224
+,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175
+,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164
+,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224
+,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170
+,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164
+,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224
+,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141
+,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164
+,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224
+,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175
+,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164
+,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224
+,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137
+,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164
+,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224
+,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175
+,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164
+,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224
+,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190
+,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165
+,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224
+,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184
+,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164
+,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224
+,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141
+,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164
+,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224
+,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141
+,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164
+,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224
+,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182
+,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165
+,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224
+,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172
+,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165
+,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224
+,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130
+,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164
+,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224
+,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170
+,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164
+,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224
+,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176
+,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164
+,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224
+,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216
+,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216
+,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216
+,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216
+,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216
+,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216
+,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216
+,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216
+,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217
+,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216
+,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216
+,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216
+,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121
+,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,
+103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,
+61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104
+,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,
+34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97
+,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,
+116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,
+116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110
+,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,
+58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32
+,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,
+62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,
+116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116
+,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,
+47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,
+101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,
+58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,
+99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,
+116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32
+,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,
+114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,
+114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,
+115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,
+13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105
+,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,
+101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,
+61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,
+45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,
+101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,
+105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,
+121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,
+116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,
+101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,
+61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,
+108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32
+,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
+101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115
+,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,
+101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,
+105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,
+100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,
+98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,
+102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32
+,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,
+32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,
+115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,
+121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61
+,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,
+110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,
+101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,
+97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,
+101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,
+110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,
+109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,
+112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179
+,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120
+,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99
+,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116
+,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116
+,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,
+100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32
+,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,
+117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,
+32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105
+,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46
+,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,
+109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103
+,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,
+99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,
+114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,
+101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,
+99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,
+114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,
+110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,
+101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,
+47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,
+120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,
+97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,
+97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,
+103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,
+100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,
+32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,
+102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108
+,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,
+60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,
+114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,
+98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32
+,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114
+,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,
+110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,
+32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,
+101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,
+101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,
+116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,
+32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,
+32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,
+101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,
+116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,
+32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,
+101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111
+,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,
+104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,
+116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,
+45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112
+,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67
+,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99
+,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105
+,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101
+,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,
+32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,
+97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,
+116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100
+,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,
+37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119
+,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,
+47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,
+101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,
+121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,
+116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,
+97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,
+105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,
+112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97
+,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,
+111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,
+114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,
+61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46
+,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,
+100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105
+,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,
+115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115
+,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,
+61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,
+114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,
+32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,
+101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,
+32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115
+,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,
+114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32
+,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,
+108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,
+34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,
+115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101
+,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,
+32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34
+,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,
+61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,
+108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,
+104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97
+,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,
+32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,
+99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,
+111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,
+102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,
+61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
+101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,
+60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99
+,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105
+,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,
+32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,
+101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,
+102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,
+110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,
+60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,
+116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,
+101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34
+,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32
+,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,
+110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,
+110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,
+99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,
+104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,
+109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,
+105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,
+105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108
+,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,
+103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45
+,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117
+,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,
+111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,
+101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,
+32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120
+,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,
+105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,
+99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,
+116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,
+60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,
+97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,
+32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,
+101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,
+103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,
+101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,
+111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,
+32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100
+,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,
+115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101
+,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,
+40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,
+97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,
+105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97
+,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,
+61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97
+,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,
+101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32
+,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,
+116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,
+114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,
+101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110
+,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,
+103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114
+,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,
+105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101
+,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,
+104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111
+,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,
+112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,
+163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,
+131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,
+160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,
+188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,
+184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,
+131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,
+189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,
+184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
+152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
+160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,
+186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,
+184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,
+130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,
+180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,
+167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,
+167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,
+167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,
+116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,
+84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,
+112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112
+,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,
+32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,
+115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,
+112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,
+116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,
+109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62
+,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,
+105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,
+120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,
+104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,
+116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110
+,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,
+101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,
+112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,
+41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32
+,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,
+60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,
+120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,
+101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100
+,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98
+,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,
+62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,
+111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,
+112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,
+60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,
+101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,
+62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32
+,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,
+97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,
+116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,
+116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185
+,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225
+,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135
+,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,
+141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,
+164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,
+224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,
+168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,
+164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,
+224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,
+141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,
+164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,
+224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,
+154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,
+164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,
+224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,
+190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,
+164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,
+224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,
+149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,
+164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,
+224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,
+130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,
+164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,
+224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,
+190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,
+164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,
+224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,
+188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,
+164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,
+224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,
+105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,
+109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,
+116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79
+,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97
+,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32
+,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,
+114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101
+,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61
+,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,
+103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,
+34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104
+,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,
+114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111
+,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,
+101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108
+,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,
+34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,
+47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116
+,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,
+101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,
+100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97
+,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,
+68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,
+61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,
+100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,
+112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112
+,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,
+97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,
+101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,
+112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115
+,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106
+,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,
+99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99
+,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,
+32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,
+67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97
+,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,
+110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114
+,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,
+116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,
+116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,
+121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,
+60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,
+118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,
+34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,
+116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,
+110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109
+,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,
+32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
+104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,
+101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,
+58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99
+,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,
+110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,
+32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,
+100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,
+116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,
+32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,
+183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,
+182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,
+183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,
+184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,
+183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,
+177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,
+33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45
+,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109
+,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,
+114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,
+58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,
+119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,
+84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108
+,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,
+47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,
+39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,
+105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,
+101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,
+100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,
+106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,
+100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,
+34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,
+101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98
+,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115
+,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,
+34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,
+101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105
+,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,
+117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116
+,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,
+111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,
+110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61
+,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,
+105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,
+97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,
+34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34
+,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,
+32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,
+116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,
+34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,
+116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,
+121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69
+,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,
+99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,
+116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,
+32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,
+101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110
+,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,
+46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,
+60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34
+,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,
+115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,
+120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,
+116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,
+115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,
+101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105
+,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,
+114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,
+39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181
+,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184
+,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178
+,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180
+,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176
+,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164
+,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224
+,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184
+,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164
+,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224
+,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141
+,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164
+,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224
+,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159
+,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164
+,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224
+,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176
+,224,164,191,224,164,175,224,164,164,224,164,190
+}
+;
+#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
+
+static BrotliDictionary kBrotliDictionary = {
+ /* size_bits_by_length */
+ {
+ 0, 0, 0, 0, 10, 10, 11, 11,
+ 10, 10, 10, 10, 10, 9, 9, 8,
+ 7, 7, 8, 7, 7, 6, 6, 5,
+ 5, 0, 0, 0, 0, 0, 0, 0
+ },
+
+ /* offsets_by_length */
+ {
+ 0, 0, 0, 0, 0, 4096, 9216, 21504,
+ 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
+ 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
+ 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
+ },
+
+ /* data_size == sizeof(kBrotliDictionaryData) */
+ 122784,
+
+ /* data */
+#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
+ NULL
+#else
+ kBrotliDictionaryData
+#endif
+};
+
+const BrotliDictionary* BrotliGetDictionary() {
+ return &kBrotliDictionary;
+}
+
+void BrotliSetDictionaryData(const uint8_t* data) {
+ if (!!data && !kBrotliDictionary.data) {
+ kBrotliDictionary.data = data;
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/common/dictionary.h b/dviware/dvisvgm/libs/brotli/common/dictionary.h
new file mode 100644
index 0000000000..b1c6f7f580
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/dictionary.h
@@ -0,0 +1,64 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Collection of static dictionary words. */
+
+#ifndef BROTLI_COMMON_DICTIONARY_H_
+#define BROTLI_COMMON_DICTIONARY_H_
+
+#include <brotli/port.h>
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct BrotliDictionary {
+ /**
+ * Number of bits to encode index of dictionary word in a bucket.
+ *
+ * Specification: Appendix A. Static Dictionary Data
+ *
+ * Words in a dictionary are bucketed by length.
+ * @c 0 means that there are no words of a given length.
+ * Dictionary consists of words with length of [4..24] bytes.
+ * Values at [0..3] and [25..31] indices should not be addressed.
+ */
+ uint8_t size_bits_by_length[32];
+
+ /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
+ uint32_t offsets_by_length[32];
+
+ /* assert(data_size == offsets_by_length[31]) */
+ size_t data_size;
+
+ /* Data array is not bound, and should obey to size_bits_by_length values.
+ Specified size matches default (RFC 7932) dictionary. Its size is
+ defined by data_size */
+ const uint8_t* data;
+} BrotliDictionary;
+
+BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
+
+/**
+ * Sets dictionary data.
+ *
+ * When dictionary data is already set / present, this method is no-op.
+ *
+ * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
+ * This method is used ONLY in multi-client environment (e.g. C + Java),
+ * to reduce storage by sharing single dictionary between implementations.
+ */
+BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
+
+#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
+#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/common/platform.h b/dviware/dvisvgm/libs/brotli/common/platform.h
new file mode 100644
index 0000000000..84c448c4cf
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/platform.h
@@ -0,0 +1,568 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Macros for compiler / platform specific features and build options.
+
+ Build options are:
+ * BROTLI_BUILD_32_BIT disables 64-bit optimizations
+ * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
+ * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
+ * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
+ * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
+ * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned
+ read and overlapping memcpy; this reduces decompression speed by 5%
+ * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
+ * BROTLI_DEBUG dumps file name and line number when decoder detects stream
+ or memory error
+ * BROTLI_ENABLE_LOG enables asserts and dumps various state information
+*/
+
+#ifndef BROTLI_COMMON_PLATFORM_H_
+#define BROTLI_COMMON_PLATFORM_H_
+
+#include <string.h> /* memcpy */
+#include <stdlib.h> /* malloc, free */
+
+#include <brotli/port.h>
+#include <brotli/types.h>
+
+#if defined(OS_LINUX) || defined(OS_CYGWIN)
+#include <endian.h>
+#elif defined(OS_FREEBSD)
+#include <machine/endian.h>
+#elif defined(OS_MACOSX)
+#include <machine/endian.h>
+/* Let's try and follow the Linux convention */
+#define BROTLI_X_BYTE_ORDER BYTE_ORDER
+#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
+#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
+#endif
+
+#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
+#include <assert.h>
+#include <stdio.h>
+#endif
+
+/* The following macros were borrowed from https://github.com/nemequ/hedley
+ * with permission of original author - Evan Nemerson <evan@nemerson.com> */
+
+/* >>> >>> >>> hedley macros */
+
+/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable
+ compilers.
+
+To apply compiler hint, enclose the branching condition into macros, like this:
+
+ if (BROTLI_PREDICT_TRUE(zero == 0)) {
+ // main execution path
+ } else {
+ // compiler should place this code outside of main execution path
+ }
+
+OR:
+
+ if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
+ // compiler should place this code outside of main execution path
+ }
+
+*/
+#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_SUNPRO_VERSION_CHECK(5, 15, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
+ BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
+ BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
+#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
+#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
+#else
+#define BROTLI_PREDICT_FALSE(x) (x)
+#define BROTLI_PREDICT_TRUE(x) (x)
+#endif
+
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
+ !defined(__cplusplus)
+#define BROTLI_RESTRICT restrict
+#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
+ BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
+ BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
+ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
+ BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
+ (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
+#define BROTLI_RESTRICT __restrict
+#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
+#define BROTLI_RESTRICT _Restrict
+#else
+#define BROTLI_RESTRICT
+#endif
+
+#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
+ (defined(__cplusplus) && (__cplusplus >= 199711L))
+#define BROTLI_MAYBE_INLINE inline
+#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \
+ BROTLI_ARM_VERSION_CHECK(6, 2, 0)
+#define BROTLI_MAYBE_INLINE __inline__
+#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)
+#define BROTLI_MAYBE_INLINE __inline
+#else
+#define BROTLI_MAYBE_INLINE
+#endif
+
+#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
+ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
+ (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
+#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))
+#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
+#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
+#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
+#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
+#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
+#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
+#else
+#define BROTLI_INLINE BROTLI_MAYBE_INLINE
+#endif
+
+#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
+ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
+ (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
+#define BROTLI_NOINLINE __attribute__((__noinline__))
+#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
+#define BROTLI_NOINLINE __declspec(noinline)
+#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
+#define BROTLI_NOINLINE _Pragma("noinline")
+#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
+#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
+#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
+#define BROTLI_NOINLINE _Pragma("inline=never")
+#else
+#define BROTLI_NOINLINE
+#endif
+
+/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
+#if !defined(BROTLI_INTERNAL)
+#if defined(_WIN32) || defined(__CYGWIN__)
+#define BROTLI_INTERNAL
+#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
+ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
+ BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
+ defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
+#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
+#else
+#define BROTLI_INTERNAL
+#endif
+#endif
+
+/* <<< <<< <<< end of hedley macros. */
+
+#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
+#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))
+#else
+#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
+#endif
+
+#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
+#define BROTLI_ALIGNED(N) __attribute__((aligned(N)))
+#else
+#define BROTLI_ALIGNED(N)
+#endif
+
+#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
+ (defined(M_ARM) && (M_ARM == 7))
+#define BROTLI_TARGET_ARMV7
+#endif /* ARMv7 */
+
+#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
+ defined(__aarch64__) || defined(__ARM64_ARCH_8__)
+#define BROTLI_TARGET_ARMV8_ANY
+
+#if defined(__ARM_32BIT_STATE)
+#define BROTLI_TARGET_ARMV8_32
+#elif defined(__ARM_64BIT_STATE)
+#define BROTLI_TARGET_ARMV8_64
+#endif
+
+#endif /* ARMv8 */
+
+#if defined(__ARM_NEON__) || defined(__ARM_NEON)
+#define BROTLI_TARGET_NEON
+#endif
+
+#if defined(__i386) || defined(_M_IX86)
+#define BROTLI_TARGET_X86
+#endif
+
+#if defined(__x86_64__) || defined(_M_X64)
+#define BROTLI_TARGET_X64
+#endif
+
+#if defined(__PPC64__)
+#define BROTLI_TARGET_POWERPC64
+#endif
+
+#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
+#define BROTLI_TARGET_RISCV64
+#endif
+
+#if defined(BROTLI_BUILD_64_BIT)
+#define BROTLI_64_BITS 1
+#elif defined(BROTLI_BUILD_32_BIT)
+#define BROTLI_64_BITS 0
+#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \
+ defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64)
+#define BROTLI_64_BITS 1
+#else
+#define BROTLI_64_BITS 0
+#endif
+
+#if (BROTLI_64_BITS)
+#define brotli_reg_t uint64_t
+#else
+#define brotli_reg_t uint32_t
+#endif
+
+#if defined(BROTLI_BUILD_BIG_ENDIAN)
+#define BROTLI_BIG_ENDIAN 1
+#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
+#define BROTLI_LITTLE_ENDIAN 1
+#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
+/* Just break elif chain. */
+#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+#define BROTLI_LITTLE_ENDIAN 1
+#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
+/* Win32 & x64 can currently always be assumed to be little endian */
+#define BROTLI_LITTLE_ENDIAN 1
+#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#define BROTLI_BIG_ENDIAN 1
+#elif defined(BROTLI_X_BYTE_ORDER)
+#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
+#define BROTLI_LITTLE_ENDIAN 1
+#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
+#define BROTLI_BIG_ENDIAN 1
+#endif
+#endif /* BROTLI_X_BYTE_ORDER */
+
+#if !defined(BROTLI_LITTLE_ENDIAN)
+#define BROTLI_LITTLE_ENDIAN 0
+#endif
+
+#if !defined(BROTLI_BIG_ENDIAN)
+#define BROTLI_BIG_ENDIAN 0
+#endif
+
+#if defined(BROTLI_X_BYTE_ORDER)
+#undef BROTLI_X_BYTE_ORDER
+#undef BROTLI_X_LITTLE_ENDIAN
+#undef BROTLI_X_BIG_ENDIAN
+#endif
+
+#if defined(BROTLI_BUILD_PORTABLE)
+#define BROTLI_ALIGNED_READ (!!1)
+#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
+ defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \
+ defined(BROTLI_TARGET_RISCV64)
+/* Allow unaligned read only for white-listed CPUs. */
+#define BROTLI_ALIGNED_READ (!!0)
+#else
+#define BROTLI_ALIGNED_READ (!!1)
+#endif
+
+#if BROTLI_ALIGNED_READ
+/* Portable unaligned memory access: read / write values via memcpy. */
+static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
+ uint16_t t;
+ memcpy(&t, p, sizeof t);
+ return t;
+}
+static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
+ uint32_t t;
+ memcpy(&t, p, sizeof t);
+ return t;
+}
+static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
+ uint64_t t;
+ memcpy(&t, p, sizeof t);
+ return t;
+}
+static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
+ memcpy(p, &v, sizeof v);
+}
+#else /* BROTLI_ALIGNED_READ */
+/* Unaligned memory access is allowed: just cast pointer to requested type. */
+#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
+ defined(MEMORY_SANITIZER)
+/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
+ AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
+ will miss a bug if 08 is the first unaddressable byte.
+ ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
+ miss a race between this access and some other accesses to 08.
+ MemorySanitizer will correctly propagate the shadow on unaligned stores
+ and correctly report bugs on unaligned loads, but it may not properly
+ update and report the origin of the uninitialized memory.
+ For all three tools, replacing an unaligned access with a tool-specific
+ callback solves the problem. */
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+ uint16_t __sanitizer_unaligned_load16(const void* p);
+ uint32_t __sanitizer_unaligned_load32(const void* p);
+ uint64_t __sanitizer_unaligned_load64(const void* p);
+ void __sanitizer_unaligned_store64(void* p, uint64_t v);
+#if defined(__cplusplus)
+} /* extern "C" */
+#endif /* __cplusplus */
+#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
+#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
+#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
+#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
+#else
+static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
+ return *(const uint16_t*)p;
+}
+static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
+ return *(const uint32_t*)p;
+}
+#if (BROTLI_64_BITS)
+static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
+ return *(const uint64_t*)p;
+}
+static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
+ *(uint64_t*)p = v;
+}
+#else /* BROTLI_64_BITS */
+/* Avoid emitting LDRD / STRD, which require properly aligned address. */
+/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
+
+#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
+typedef BROTLI_ALIGNED(1) uint64_t brotli_unaligned_uint64_t;
+
+static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
+ return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
+}
+static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
+ brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
+ dwords[0] = (brotli_unaligned_uint64_t) v;
+}
+#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
+static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
+ uint64_t v;
+ memcpy(&v, p, sizeof(uint64_t));
+ return v;
+}
+
+static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
+ memcpy(p, &v, sizeof(uint64_t));
+}
+#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
+#endif /* BROTLI_64_BITS */
+#endif /* ASAN / TSAN / MSAN */
+#endif /* BROTLI_ALIGNED_READ */
+
+#if BROTLI_LITTLE_ENDIAN
+/* Straight endianness. Just read / write values. */
+#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
+#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
+#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
+#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
+#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
+/* Explain compiler to byte-swap values. */
+#define BROTLI_BSWAP16_(V) ((uint16_t)( \
+ (((V) & 0xFFU) << 8) | \
+ (((V) >> 8) & 0xFFU)))
+static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
+ uint16_t value = BrotliUnalignedRead16(p);
+ return BROTLI_BSWAP16_(value);
+}
+#define BROTLI_BSWAP32_(V) ( \
+ (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
+ (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
+static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
+ uint32_t value = BrotliUnalignedRead32(p);
+ return BROTLI_BSWAP32_(value);
+}
+#define BROTLI_BSWAP64_(V) ( \
+ (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
+ (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
+ (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
+ (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
+static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
+ uint64_t value = BrotliUnalignedRead64(p);
+ return BROTLI_BSWAP64_(value);
+}
+static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
+ uint64_t value = BROTLI_BSWAP64_(v);
+ BrotliUnalignedWrite64(p, value);
+}
+#else /* BROTLI_LITTLE_ENDIAN */
+/* Read / store values byte-wise; hopefully compiler will understand. */
+static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
+ const uint8_t* in = (const uint8_t*)p;
+ return (uint16_t)(in[0] | (in[1] << 8));
+}
+static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
+ const uint8_t* in = (const uint8_t*)p;
+ uint32_t value = (uint32_t)(in[0]);
+ value |= (uint32_t)(in[1]) << 8;
+ value |= (uint32_t)(in[2]) << 16;
+ value |= (uint32_t)(in[3]) << 24;
+ return value;
+}
+static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
+ const uint8_t* in = (const uint8_t*)p;
+ uint64_t value = (uint64_t)(in[0]);
+ value |= (uint64_t)(in[1]) << 8;
+ value |= (uint64_t)(in[2]) << 16;
+ value |= (uint64_t)(in[3]) << 24;
+ value |= (uint64_t)(in[4]) << 32;
+ value |= (uint64_t)(in[5]) << 40;
+ value |= (uint64_t)(in[6]) << 48;
+ value |= (uint64_t)(in[7]) << 56;
+ return value;
+}
+static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
+ uint8_t* out = (uint8_t*)p;
+ out[0] = (uint8_t)v;
+ out[1] = (uint8_t)(v >> 8);
+ out[2] = (uint8_t)(v >> 16);
+ out[3] = (uint8_t)(v >> 24);
+ out[4] = (uint8_t)(v >> 32);
+ out[5] = (uint8_t)(v >> 40);
+ out[6] = (uint8_t)(v >> 48);
+ out[7] = (uint8_t)(v >> 56);
+}
+#endif /* BROTLI_LITTLE_ENDIAN */
+
+/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */
+#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
+#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
+#else
+#define BROTLI_IS_CONSTANT(x) (!!0)
+#endif
+
+#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
+#define BROTLI_HAS_UBFX (!!1)
+#else
+#define BROTLI_HAS_UBFX (!!0)
+#endif
+
+#if defined(BROTLI_ENABLE_LOG)
+#define BROTLI_DCHECK(x) assert(x)
+#define BROTLI_LOG(x) printf x
+#else
+#define BROTLI_DCHECK(x)
+#define BROTLI_LOG(x)
+#endif
+
+#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
+static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
+ fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
+ fflush(stderr);
+}
+#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
+#else
+#define BROTLI_DUMP() (void)(0)
+#endif
+
+/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
+#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
+ !defined(BROTLI_BUILD_NO_RBIT)
+#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
+/* TODO: detect ARMv6T2 and enable this code for it. */
+static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
+ brotli_reg_t output;
+ __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
+ return output;
+}
+#define BROTLI_RBIT(x) BrotliRBit(x)
+#endif /* armv7 / armv8 */
+#endif /* gcc || clang */
+#if !defined(BROTLI_RBIT)
+static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
+#endif /* BROTLI_RBIT */
+
+#define BROTLI_REPEAT(N, X) { \
+ if ((N & 1) != 0) {X;} \
+ if ((N & 2) != 0) {X; X;} \
+ if ((N & 4) != 0) {X; X; X; X;} \
+}
+
+#define BROTLI_UNUSED(X) (void)(X)
+
+#define BROTLI_MIN_MAX(T) \
+ static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
+ static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
+BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)
+BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)
+#undef BROTLI_MIN_MAX
+#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
+#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
+
+#define BROTLI_SWAP(T, A, I, J) { \
+ T __brotli_swap_tmp = (A)[(I)]; \
+ (A)[(I)] = (A)[(J)]; \
+ (A)[(J)] = __brotli_swap_tmp; \
+}
+
+/* Default brotli_alloc_func */
+static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
+ BROTLI_UNUSED(opaque);
+ return malloc(size);
+}
+
+/* Default brotli_free_func */
+static void BrotliDefaultFreeFunc(void* opaque, void* address) {
+ BROTLI_UNUSED(opaque);
+ free(address);
+}
+
+BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
+ BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
+ BROTLI_UNUSED(&BrotliUnalignedRead16);
+ BROTLI_UNUSED(&BrotliUnalignedRead32);
+ BROTLI_UNUSED(&BrotliUnalignedRead64);
+ BROTLI_UNUSED(&BrotliUnalignedWrite64);
+ BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
+ BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
+ BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
+ BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
+ BROTLI_UNUSED(&BrotliRBit);
+ BROTLI_UNUSED(&brotli_min_double);
+ BROTLI_UNUSED(&brotli_max_double);
+ BROTLI_UNUSED(&brotli_min_float);
+ BROTLI_UNUSED(&brotli_max_float);
+ BROTLI_UNUSED(&brotli_min_int);
+ BROTLI_UNUSED(&brotli_max_int);
+ BROTLI_UNUSED(&brotli_min_size_t);
+ BROTLI_UNUSED(&brotli_max_size_t);
+ BROTLI_UNUSED(&brotli_min_uint32_t);
+ BROTLI_UNUSED(&brotli_max_uint32_t);
+ BROTLI_UNUSED(&brotli_min_uint8_t);
+ BROTLI_UNUSED(&brotli_max_uint8_t);
+ BROTLI_UNUSED(&BrotliDefaultAllocFunc);
+ BROTLI_UNUSED(&BrotliDefaultFreeFunc);
+#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
+ BROTLI_UNUSED(&BrotliDump);
+#endif
+}
+
+#endif /* BROTLI_COMMON_PLATFORM_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/common/transform.c b/dviware/dvisvgm/libs/brotli/common/transform.c
new file mode 100644
index 0000000000..426e635fd3
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/transform.c
@@ -0,0 +1,235 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#include "./transform.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* RFC 7932 transforms string data */
+static const char kPrefixSuffix[217] =
+ "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
+/* 0x _0 _2 __5 _E _3 _6 _8 _E */
+ "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
+/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
+ "that \1\'\6 with \6 from \4 by \1(\6. T"
+/* 4x _5_ _7 _E _5 _A _C */
+ "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
+/* 6x _3 _8 _D _2 _7_ _ _A _C */
+ "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
+/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
+ " not \3er \3al \4ful \4ive \5less \4es"
+/* Ax _5 _9 _D _2 _7 _D */
+ "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
+/* Cx _2 _7___ ___ _A _F _5 _8 */
+
+static const uint16_t kPrefixSuffixMap[50] = {
+ 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
+ 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
+ 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
+ 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
+ 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
+};
+
+/* RFC 7932 transforms */
+static const uint8_t kTransformsData[] = {
+ 49, BROTLI_TRANSFORM_IDENTITY, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 0,
+ 0, BROTLI_TRANSFORM_IDENTITY, 0,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 47,
+ 0, BROTLI_TRANSFORM_IDENTITY, 49,
+ 4, BROTLI_TRANSFORM_IDENTITY, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 3,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 6,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
+ 1, BROTLI_TRANSFORM_IDENTITY, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 1,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 7,
+ 49, BROTLI_TRANSFORM_IDENTITY, 9,
+ 48, BROTLI_TRANSFORM_IDENTITY, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 8,
+ 49, BROTLI_TRANSFORM_IDENTITY, 5,
+ 49, BROTLI_TRANSFORM_IDENTITY, 10,
+ 49, BROTLI_TRANSFORM_IDENTITY, 11,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 13,
+ 49, BROTLI_TRANSFORM_IDENTITY, 14,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 15,
+ 49, BROTLI_TRANSFORM_IDENTITY, 16,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 12,
+ 5, BROTLI_TRANSFORM_IDENTITY, 49,
+ 0, BROTLI_TRANSFORM_IDENTITY, 1,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 18,
+ 49, BROTLI_TRANSFORM_IDENTITY, 17,
+ 49, BROTLI_TRANSFORM_IDENTITY, 19,
+ 49, BROTLI_TRANSFORM_IDENTITY, 20,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
+ 47, BROTLI_TRANSFORM_IDENTITY, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 22,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 23,
+ 49, BROTLI_TRANSFORM_IDENTITY, 24,
+ 49, BROTLI_TRANSFORM_IDENTITY, 25,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
+ 49, BROTLI_TRANSFORM_IDENTITY, 27,
+ 49, BROTLI_TRANSFORM_IDENTITY, 28,
+ 0, BROTLI_TRANSFORM_IDENTITY, 12,
+ 49, BROTLI_TRANSFORM_IDENTITY, 29,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
+ 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 21,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 31,
+ 49, BROTLI_TRANSFORM_IDENTITY, 32,
+ 47, BROTLI_TRANSFORM_IDENTITY, 3,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
+ 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
+ 5, BROTLI_TRANSFORM_IDENTITY, 21,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
+ 49, BROTLI_TRANSFORM_IDENTITY, 30,
+ 0, BROTLI_TRANSFORM_IDENTITY, 5,
+ 35, BROTLI_TRANSFORM_IDENTITY, 49,
+ 47, BROTLI_TRANSFORM_IDENTITY, 2,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
+ 49, BROTLI_TRANSFORM_IDENTITY, 36,
+ 49, BROTLI_TRANSFORM_IDENTITY, 33,
+ 5, BROTLI_TRANSFORM_IDENTITY, 0,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
+ 49, BROTLI_TRANSFORM_IDENTITY, 37,
+ 0, BROTLI_TRANSFORM_IDENTITY, 30,
+ 49, BROTLI_TRANSFORM_IDENTITY, 38,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
+ 49, BROTLI_TRANSFORM_IDENTITY, 39,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
+ 49, BROTLI_TRANSFORM_IDENTITY, 34,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
+ 0, BROTLI_TRANSFORM_IDENTITY, 21,
+ 49, BROTLI_TRANSFORM_IDENTITY, 40,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
+ 49, BROTLI_TRANSFORM_IDENTITY, 41,
+ 49, BROTLI_TRANSFORM_IDENTITY, 42,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
+ 49, BROTLI_TRANSFORM_IDENTITY, 43,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
+ 0, BROTLI_TRANSFORM_IDENTITY, 34,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
+ 49, BROTLI_TRANSFORM_IDENTITY, 44,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
+ 45, BROTLI_TRANSFORM_IDENTITY, 49,
+ 0, BROTLI_TRANSFORM_IDENTITY, 33,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
+ 49, BROTLI_TRANSFORM_IDENTITY, 46,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
+ 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
+ 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
+ 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
+ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
+};
+
+static BrotliTransforms kBrotliTransforms = {
+ sizeof(kPrefixSuffix),
+ (const uint8_t*)kPrefixSuffix,
+ kPrefixSuffixMap,
+ sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
+ kTransformsData,
+ {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
+};
+
+const BrotliTransforms* BrotliGetTransforms(void) {
+ return &kBrotliTransforms;
+}
+
+static int ToUpperCase(uint8_t* p) {
+ if (p[0] < 0xC0) {
+ if (p[0] >= 'a' && p[0] <= 'z') {
+ p[0] ^= 32;
+ }
+ return 1;
+ }
+ /* An overly simplified uppercasing model for UTF-8. */
+ if (p[0] < 0xE0) {
+ p[1] ^= 32;
+ return 2;
+ }
+ /* An arbitrary transform for three byte characters. */
+ p[2] ^= 5;
+ return 3;
+}
+
+int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
+ const BrotliTransforms* transforms, int transform_idx) {
+ int idx = 0;
+ const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transform_idx);
+ uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transform_idx);
+ const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transform_idx);
+ {
+ int prefix_len = *prefix++;
+ while (prefix_len--) { dst[idx++] = *prefix++; }
+ }
+ {
+ const int t = type;
+ int i = 0;
+ if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
+ len -= t;
+ } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
+ && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
+ int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
+ word += skip;
+ len -= skip;
+ }
+ while (i < len) { dst[idx++] = word[i++]; }
+ if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
+ ToUpperCase(&dst[idx - len]);
+ } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
+ uint8_t* uppercase = &dst[idx - len];
+ while (len > 0) {
+ int step = ToUpperCase(uppercase);
+ uppercase += step;
+ len -= step;
+ }
+ }
+ }
+ {
+ int suffix_len = *suffix++;
+ while (suffix_len--) { dst[idx++] = *suffix++; }
+ return idx;
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/common/transform.h b/dviware/dvisvgm/libs/brotli/common/transform.h
new file mode 100644
index 0000000000..456c12db9b
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/transform.h
@@ -0,0 +1,80 @@
+/* transforms is a part of ABI, but not API.
+
+ It means that there are some functions that are supposed to be in "common"
+ library, but header itself is not placed into include/brotli. This way,
+ aforementioned functions will be available only to brotli internals.
+ */
+
+#ifndef BROTLI_COMMON_TRANSFORM_H_
+#define BROTLI_COMMON_TRANSFORM_H_
+
+#include <brotli/port.h>
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+enum BrotliWordTransformType {
+ BROTLI_TRANSFORM_IDENTITY = 0,
+ BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
+ BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
+ BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
+ BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
+ BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
+ BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
+ BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
+ BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
+ BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
+ BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
+ BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
+ BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
+ BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
+ BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
+ BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
+ BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
+ BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
+ BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
+ BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
+ BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
+ BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */
+};
+
+#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9
+
+typedef struct BrotliTransforms {
+ uint16_t prefix_suffix_size;
+ /* Last character must be null, so prefix_suffix_size must be at least 1. */
+ const uint8_t* prefix_suffix;
+ const uint16_t* prefix_suffix_map;
+ uint32_t num_transforms;
+ /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
+ const uint8_t* transforms;
+ /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
+ 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
+ -1, if cut-off transform does not exist. */
+ int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
+} BrotliTransforms;
+
+/* T is BrotliTransforms*; result is uint8_t. */
+#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
+#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
+#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
+
+/* T is BrotliTransforms*; result is const uint8_t*. */
+#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
+ (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
+#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
+ (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
+
+BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
+
+BROTLI_COMMON_API int BrotliTransformDictionaryWord(
+ uint8_t* dst, const uint8_t* word, int len,
+ const BrotliTransforms* transforms, int transform_idx);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_COMMON_TRANSFORM_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/common/version.h b/dviware/dvisvgm/libs/brotli/common/version.h
new file mode 100644
index 0000000000..0d0d0c7967
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/common/version.h
@@ -0,0 +1,26 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Version definition. */
+
+#ifndef BROTLI_COMMON_VERSION_H_
+#define BROTLI_COMMON_VERSION_H_
+
+/* This macro should only be used when library is compiled together with client.
+ If library is dynamically linked, use BrotliDecoderVersion and
+ BrotliEncoderVersion methods. */
+
+/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */
+#define BROTLI_VERSION 0x1000007
+
+/* This macro is used by build system to produce Libtool-friendly soname. See
+ https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
+ */
+
+/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
+#define BROTLI_ABI_VERSION 0x1007000
+
+#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/backward_references.c b/dviware/dvisvgm/libs/brotli/enc/backward_references.c
new file mode 100644
index 0000000000..cd023d9b41
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/backward_references.c
@@ -0,0 +1,144 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function to find backward reference copies. */
+
+#include "./backward_references.h"
+
+#include "../common/constants.h"
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./dictionary_hash.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
+ size_t max_distance,
+ const int* dist_cache) {
+ if (distance <= max_distance) {
+ size_t distance_plus_3 = distance + 3;
+ size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
+ size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
+ if (distance == (size_t)dist_cache[0]) {
+ return 0;
+ } else if (distance == (size_t)dist_cache[1]) {
+ return 1;
+ } else if (offset0 < 7) {
+ return (0x9750468 >> (4 * offset0)) & 0xF;
+ } else if (offset1 < 7) {
+ return (0xFDB1ACE >> (4 * offset1)) & 0xF;
+ } else if (distance == (size_t)dist_cache[2]) {
+ return 2;
+ } else if (distance == (size_t)dist_cache[3]) {
+ return 3;
+ }
+ }
+ return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
+}
+
+#define EXPAND_CAT(a, b) CAT(a, b)
+#define CAT(a, b) a ## b
+#define FN(X) EXPAND_CAT(X, HASHER())
+#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
+
+#define PREFIX() N
+
+#define HASHER() H2
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H3
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H4
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H5
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H6
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H40
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H41
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H42
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H54
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H35
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H55
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#define HASHER() H65
+/* NOLINTNEXTLINE(build/include) */
+#include "./backward_references_inc.h"
+#undef HASHER
+
+#undef PREFIX
+
+#undef EXPORT_FN
+#undef FN
+#undef CAT
+#undef EXPAND_CAT
+
+void BrotliCreateBackwardReferences(
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask, const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals) {
+ switch (params->hasher.type) {
+#define CASE_(N) \
+ case N: \
+ CreateBackwardReferencesNH ## N( \
+ num_bytes, position, ringbuffer, \
+ ringbuffer_mask, params, hasher, dist_cache, \
+ last_insert_len, commands, num_commands, num_literals); \
+ return;
+ FOR_GENERIC_HASHERS(CASE_)
+#undef CASE_
+ default:
+ break;
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/backward_references.h b/dviware/dvisvgm/libs/brotli/enc/backward_references.h
new file mode 100644
index 0000000000..3a4146647c
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/backward_references.h
@@ -0,0 +1,38 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function to find backward reference copies. */
+
+#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_
+#define BROTLI_ENC_BACKWARD_REFERENCES_H_
+
+#include "../common/constants.h"
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./hash.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* "commands" points to the next output command to write to, "*num_commands" is
+ initially the total amount of commands output by previous
+ CreateBackwardReferences calls, and must be incremented by the amount written
+ by this call. */
+BROTLI_INTERNAL void BrotliCreateBackwardReferences(
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask, const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.c b/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.c
new file mode 100644
index 0000000000..96b0e708de
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.c
@@ -0,0 +1,825 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function to find backward reference copies. */
+
+#include "./backward_references_hq.h"
+
+#include <string.h> /* memcpy, memset */
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./fast_log.h"
+#include "./find_match_length.h"
+#include "./literal_cost.h"
+#include "./memory.h"
+#include "./params.h"
+#include "./prefix.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544
+
+static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */
+
+static const uint32_t kDistanceCacheIndex[] = {
+ 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+};
+static const int kDistanceCacheOffset[] = {
+ 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
+};
+
+void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
+ ZopfliNode stub;
+ size_t i;
+ stub.length = 1;
+ stub.distance = 0;
+ stub.dcode_insert_length = 0;
+ stub.u.cost = kInfinity;
+ for (i = 0; i < length; ++i) array[i] = stub;
+}
+
+static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {
+ return self->length & 0x1FFFFFF;
+}
+
+static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {
+ const uint32_t modifier = self->length >> 25;
+ return ZopfliNodeCopyLength(self) + 9u - modifier;
+}
+
+static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {
+ return self->distance;
+}
+
+static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {
+ const uint32_t short_code = self->dcode_insert_length >> 27;
+ return short_code == 0 ?
+ ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :
+ short_code - 1;
+}
+
+static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {
+ return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);
+}
+
+/* Histogram based cost model for zopflification. */
+typedef struct ZopfliCostModel {
+ /* The insert and copy length symbols. */
+ float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];
+ float* cost_dist_;
+ uint32_t distance_histogram_size;
+ /* Cumulative costs of literals per position in the stream. */
+ float* literal_costs_;
+ float min_cost_cmd_;
+ size_t num_bytes_;
+} ZopfliCostModel;
+
+static void InitZopfliCostModel(
+ MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,
+ size_t num_bytes) {
+ uint32_t distance_histogram_size = dist->alphabet_size;
+ if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) {
+ distance_histogram_size = BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE;
+ }
+ self->num_bytes_ = num_bytes;
+ self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);
+ self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size);
+ self->distance_histogram_size = distance_histogram_size;
+ if (BROTLI_IS_OOM(m)) return;
+}
+
+static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {
+ BROTLI_FREE(m, self->literal_costs_);
+ BROTLI_FREE(m, self->cost_dist_);
+}
+
+static void SetCost(const uint32_t* histogram, size_t histogram_size,
+ BROTLI_BOOL literal_histogram, float* cost) {
+ size_t sum = 0;
+ size_t missing_symbol_sum;
+ float log2sum;
+ float missing_symbol_cost;
+ size_t i;
+ for (i = 0; i < histogram_size; i++) {
+ sum += histogram[i];
+ }
+ log2sum = (float)FastLog2(sum);
+ missing_symbol_sum = sum;
+ if (!literal_histogram) {
+ for (i = 0; i < histogram_size; i++) {
+ if (histogram[i] == 0) missing_symbol_sum++;
+ }
+ }
+ missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;
+ for (i = 0; i < histogram_size; i++) {
+ if (histogram[i] == 0) {
+ cost[i] = missing_symbol_cost;
+ continue;
+ }
+
+ /* Shannon bits for this symbol. */
+ cost[i] = log2sum - (float)FastLog2(histogram[i]);
+
+ /* Cannot be coded with less than 1 bit */
+ if (cost[i] < 1) cost[i] = 1;
+ }
+}
+
+static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
+ size_t position,
+ const uint8_t* ringbuffer,
+ size_t ringbuffer_mask,
+ const Command* commands,
+ size_t num_commands,
+ size_t last_insert_len) {
+ uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];
+ float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];
+ size_t pos = position - last_insert_len;
+ float min_cost_cmd = kInfinity;
+ size_t i;
+ float* cost_cmd = self->cost_cmd_;
+
+ memset(histogram_literal, 0, sizeof(histogram_literal));
+ memset(histogram_cmd, 0, sizeof(histogram_cmd));
+ memset(histogram_dist, 0, sizeof(histogram_dist));
+
+ for (i = 0; i < num_commands; i++) {
+ size_t inslength = commands[i].insert_len_;
+ size_t copylength = CommandCopyLen(&commands[i]);
+ size_t distcode = commands[i].dist_prefix_ & 0x3FF;
+ size_t cmdcode = commands[i].cmd_prefix_;
+ size_t j;
+
+ histogram_cmd[cmdcode]++;
+ if (cmdcode >= 128) histogram_dist[distcode]++;
+
+ for (j = 0; j < inslength; j++) {
+ histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;
+ }
+
+ pos += inslength + copylength;
+ }
+
+ SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,
+ cost_literal);
+ SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,
+ cost_cmd);
+ SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE,
+ self->cost_dist_);
+
+ for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
+ min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);
+ }
+ self->min_cost_cmd_ = min_cost_cmd;
+
+ {
+ float* literal_costs = self->literal_costs_;
+ float literal_carry = 0.0;
+ size_t num_bytes = self->num_bytes_;
+ literal_costs[0] = 0.0;
+ for (i = 0; i < num_bytes; ++i) {
+ literal_carry +=
+ cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];
+ literal_costs[i + 1] = literal_costs[i] + literal_carry;
+ literal_carry -= literal_costs[i + 1] - literal_costs[i];
+ }
+ }
+}
+
+static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
+ size_t position,
+ const uint8_t* ringbuffer,
+ size_t ringbuffer_mask) {
+ float* literal_costs = self->literal_costs_;
+ float literal_carry = 0.0;
+ float* cost_dist = self->cost_dist_;
+ float* cost_cmd = self->cost_cmd_;
+ size_t num_bytes = self->num_bytes_;
+ size_t i;
+ BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,
+ ringbuffer, &literal_costs[1]);
+ literal_costs[0] = 0.0;
+ for (i = 0; i < num_bytes; ++i) {
+ literal_carry += literal_costs[i + 1];
+ literal_costs[i + 1] = literal_costs[i] + literal_carry;
+ literal_carry -= literal_costs[i + 1] - literal_costs[i];
+ }
+ for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
+ cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);
+ }
+ for (i = 0; i < self->distance_histogram_size; ++i) {
+ cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);
+ }
+ self->min_cost_cmd_ = (float)FastLog2(11);
+}
+
+static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
+ const ZopfliCostModel* self, uint16_t cmdcode) {
+ return self->cost_cmd_[cmdcode];
+}
+
+static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
+ const ZopfliCostModel* self, size_t distcode) {
+ return self->cost_dist_[distcode];
+}
+
+static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
+ const ZopfliCostModel* self, size_t from, size_t to) {
+ return self->literal_costs_[to] - self->literal_costs_[from];
+}
+
+static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
+ const ZopfliCostModel* self) {
+ return self->min_cost_cmd_;
+}
+
+/* REQUIRES: len >= 2, start_pos <= pos */
+/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
+/* Maintains the "ZopfliNode array invariant". */
+static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
+ size_t start_pos, size_t len, size_t len_code, size_t dist,
+ size_t short_code, float cost) {
+ ZopfliNode* next = &nodes[pos + len];
+ next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));
+ next->distance = (uint32_t)dist;
+ next->dcode_insert_length = (uint32_t)(
+ (short_code << 27) | (pos - start_pos));
+ next->u.cost = cost;
+}
+
+typedef struct PosData {
+ size_t pos;
+ int distance_cache[4];
+ float costdiff;
+ float cost;
+} PosData;
+
+/* Maintains the smallest 8 cost difference together with their positions */
+typedef struct StartPosQueue {
+ PosData q_[8];
+ size_t idx_;
+} StartPosQueue;
+
+static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
+ self->idx_ = 0;
+}
+
+static size_t StartPosQueueSize(const StartPosQueue* self) {
+ return BROTLI_MIN(size_t, self->idx_, 8);
+}
+
+static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {
+ size_t offset = ~(self->idx_++) & 7;
+ size_t len = StartPosQueueSize(self);
+ size_t i;
+ PosData* q = self->q_;
+ q[offset] = *posdata;
+ /* Restore the sorted order. In the list of |len| items at most |len - 1|
+ adjacent element comparisons / swaps are required. */
+ for (i = 1; i < len; ++i) {
+ if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {
+ BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);
+ }
+ ++offset;
+ }
+}
+
+static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {
+ return &self->q_[(k - self->idx_) & 7];
+}
+
+/* Returns the minimum possible copy length that can improve the cost of any */
+/* future position. */
+static size_t ComputeMinimumCopyLength(const float start_cost,
+ const ZopfliNode* nodes,
+ const size_t num_bytes,
+ const size_t pos) {
+ /* Compute the minimum possible cost of reaching any future position. */
+ float min_cost = start_cost;
+ size_t len = 2;
+ size_t next_len_bucket = 4;
+ size_t next_len_offset = 10;
+ while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
+ /* We already reached (pos + len) with no more cost than the minimum
+ possible cost of reaching anything from this pos, so there is no point in
+ looking for lengths <= len. */
+ ++len;
+ if (len == next_len_offset) {
+ /* We reached the next copy length code bucket, so we add one more
+ extra bit to the minimum cost. */
+ min_cost += 1.0f;
+ next_len_offset += next_len_bucket;
+ next_len_bucket *= 2;
+ }
+ }
+ return len;
+}
+
+/* REQUIRES: nodes[pos].cost < kInfinity
+ REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
+static uint32_t ComputeDistanceShortcut(const size_t block_start,
+ const size_t pos,
+ const size_t max_backward_limit,
+ const size_t gap,
+ const ZopfliNode* nodes) {
+ const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
+ const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
+ const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
+ /* Since |block_start + pos| is the end position of the command, the copy part
+ starts from |block_start + pos - clen|. Distances that are greater than
+ this or greater than |max_backward_limit| + |gap| are static dictionary
+ references, and do not update the last distances.
+ Also distance code 0 (last distance) does not update the last distances. */
+ if (pos == 0) {
+ return 0;
+ } else if (dist + clen <= block_start + pos + gap &&
+ dist <= max_backward_limit + gap &&
+ ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
+ return (uint32_t)pos;
+ } else {
+ return nodes[pos - clen - ilen].u.shortcut;
+ }
+}
+
+/* Fills in dist_cache[0..3] with the last four distances (as defined by
+ Section 4. of the Spec) that would be used at (block_start + pos) if we
+ used the shortest path of commands from block_start, computed from
+ nodes[0..pos]. The last four distances at block_start are in
+ starting_dist_cache[0..3].
+ REQUIRES: nodes[pos].cost < kInfinity
+ REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
+static void ComputeDistanceCache(const size_t pos,
+ const int* starting_dist_cache,
+ const ZopfliNode* nodes,
+ int* dist_cache) {
+ int idx = 0;
+ size_t p = nodes[pos].u.shortcut;
+ while (idx < 4 && p > 0) {
+ const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
+ const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
+ const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
+ dist_cache[idx++] = (int)dist;
+ /* Because of prerequisite, p >= clen + ilen >= 2. */
+ p = nodes[p - clen - ilen].u.shortcut;
+ }
+ for (; idx < 4; ++idx) {
+ dist_cache[idx] = *starting_dist_cache++;
+ }
+}
+
+/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it
+ is eligible. */
+static void EvaluateNode(
+ const size_t block_start, const size_t pos, const size_t max_backward_limit,
+ const size_t gap, const int* starting_dist_cache,
+ const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {
+ /* Save cost, because ComputeDistanceCache invalidates it. */
+ float node_cost = nodes[pos].u.cost;
+ nodes[pos].u.shortcut = ComputeDistanceShortcut(
+ block_start, pos, max_backward_limit, gap, nodes);
+ if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {
+ PosData posdata;
+ posdata.pos = pos;
+ posdata.cost = node_cost;
+ posdata.costdiff = node_cost -
+ ZopfliCostModelGetLiteralCosts(model, 0, pos);
+ ComputeDistanceCache(
+ pos, starting_dist_cache, nodes, posdata.distance_cache);
+ StartPosQueuePush(queue, &posdata);
+ }
+}
+
+/* Returns longest copy length. */
+static size_t UpdateNodes(
+ const size_t num_bytes, const size_t block_start, const size_t pos,
+ const uint8_t* ringbuffer, const size_t ringbuffer_mask,
+ const BrotliEncoderParams* params, const size_t max_backward_limit,
+ const int* starting_dist_cache, const size_t num_matches,
+ const BackwardMatch* matches, const ZopfliCostModel* model,
+ StartPosQueue* queue, ZopfliNode* nodes) {
+ const size_t cur_ix = block_start + pos;
+ const size_t cur_ix_masked = cur_ix & ringbuffer_mask;
+ const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);
+ const size_t max_len = num_bytes - pos;
+ const size_t max_zopfli_len = MaxZopfliLen(params);
+ const size_t max_iters = MaxZopfliCandidates(params);
+ size_t min_len;
+ size_t result = 0;
+ size_t k;
+ size_t gap = 0;
+
+ EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache,
+ model, queue, nodes);
+
+ {
+ const PosData* posdata = StartPosQueueAt(queue, 0);
+ float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +
+ ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));
+ min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);
+ }
+
+ /* Go over the command starting positions in order of increasing cost
+ difference. */
+ for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {
+ const PosData* posdata = StartPosQueueAt(queue, k);
+ const size_t start = posdata->pos;
+ const uint16_t inscode = GetInsertLengthCode(pos - start);
+ const float start_costdiff = posdata->costdiff;
+ const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +
+ ZopfliCostModelGetLiteralCosts(model, 0, pos);
+
+ /* Look for last distance matches using the distance cache from this
+ starting position. */
+ size_t best_len = min_len - 1;
+ size_t j = 0;
+ for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {
+ const size_t idx = kDistanceCacheIndex[j];
+ const size_t backward =
+ (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);
+ size_t prev_ix = cur_ix - backward;
+ size_t len = 0;
+ uint8_t continuation = ringbuffer[cur_ix_masked + best_len];
+ if (cur_ix_masked + best_len > ringbuffer_mask) {
+ break;
+ }
+ if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) {
+ /* Word dictionary -> ignore. */
+ continue;
+ }
+ if (backward <= max_distance) {
+ /* Regular backward reference. */
+ if (prev_ix >= cur_ix) {
+ continue;
+ }
+
+ prev_ix &= ringbuffer_mask;
+ if (prev_ix + best_len > ringbuffer_mask ||
+ continuation != ringbuffer[prev_ix + best_len]) {
+ continue;
+ }
+ len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],
+ &ringbuffer[cur_ix_masked],
+ max_len);
+ } else {
+ continue;
+ }
+ {
+ const float dist_cost = base_cost +
+ ZopfliCostModelGetDistanceCost(model, j);
+ size_t l;
+ for (l = best_len + 1; l <= len; ++l) {
+ const uint16_t copycode = GetCopyLengthCode(l);
+ const uint16_t cmdcode =
+ CombineLengthCodes(inscode, copycode, j == 0);
+ const float cost = (cmdcode < 128 ? base_cost : dist_cost) +
+ (float)GetCopyExtra(copycode) +
+ ZopfliCostModelGetCommandCost(model, cmdcode);
+ if (cost < nodes[pos + l].u.cost) {
+ UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
+ result = BROTLI_MAX(size_t, result, l);
+ }
+ best_len = l;
+ }
+ }
+ }
+
+ /* At higher iterations look only for new last distance matches, since
+ looking only for new command start positions with the same distances
+ does not help much. */
+ if (k >= 2) continue;
+
+ {
+ /* Loop through all possible copy lengths at this position. */
+ size_t len = min_len;
+ for (j = 0; j < num_matches; ++j) {
+ BackwardMatch match = matches[j];
+ size_t dist = match.distance;
+ BROTLI_BOOL is_dictionary_match =
+ TO_BROTLI_BOOL(dist > max_distance + gap);
+ /* We already tried all possible last distance matches, so we can use
+ normal distance code here. */
+ size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
+ uint16_t dist_symbol;
+ uint32_t distextra;
+ uint32_t distnumextra;
+ float dist_cost;
+ size_t max_match_len;
+ PrefixEncodeCopyDistance(
+ dist_code, params->dist.num_direct_distance_codes,
+ params->dist.distance_postfix_bits, &dist_symbol, &distextra);
+ distnumextra = dist_symbol >> 10;
+ dist_cost = base_cost + (float)distnumextra +
+ ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);
+
+ /* Try all copy lengths up until the maximum copy length corresponding
+ to this distance. If the distance refers to the static dictionary, or
+ the maximum length is long enough, try only one maximum length. */
+ max_match_len = BackwardMatchLength(&match);
+ if (len < max_match_len &&
+ (is_dictionary_match || max_match_len > max_zopfli_len)) {
+ len = max_match_len;
+ }
+ for (; len <= max_match_len; ++len) {
+ const size_t len_code =
+ is_dictionary_match ? BackwardMatchLengthCode(&match) : len;
+ const uint16_t copycode = GetCopyLengthCode(len_code);
+ const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);
+ const float cost = dist_cost + (float)GetCopyExtra(copycode) +
+ ZopfliCostModelGetCommandCost(model, cmdcode);
+ if (cost < nodes[pos + len].u.cost) {
+ UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
+ result = BROTLI_MAX(size_t, result, len);
+ }
+ }
+ }
+ }
+ }
+ return result;
+}
+
+static size_t ComputeShortestPathFromNodes(size_t num_bytes,
+ ZopfliNode* nodes) {
+ size_t index = num_bytes;
+ size_t num_commands = 0;
+ while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
+ nodes[index].length == 1) --index;
+ nodes[index].u.next = BROTLI_UINT32_MAX;
+ while (index != 0) {
+ size_t len = ZopfliNodeCommandLength(&nodes[index]);
+ index -= len;
+ nodes[index].u.next = (uint32_t)len;
+ num_commands++;
+ }
+ return num_commands;
+}
+
+/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
+void BrotliZopfliCreateCommands(const size_t num_bytes,
+ const size_t block_start, const ZopfliNode* nodes, int* dist_cache,
+ size_t* last_insert_len, const BrotliEncoderParams* params,
+ Command* commands, size_t* num_literals) {
+ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
+ size_t pos = 0;
+ uint32_t offset = nodes[0].u.next;
+ size_t i;
+ size_t gap = 0;
+ for (i = 0; offset != BROTLI_UINT32_MAX; i++) {
+ const ZopfliNode* next = &nodes[pos + offset];
+ size_t copy_length = ZopfliNodeCopyLength(next);
+ size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;
+ pos += insert_length;
+ offset = next->u.next;
+ if (i == 0) {
+ insert_length += *last_insert_len;
+ *last_insert_len = 0;
+ }
+ {
+ size_t distance = ZopfliNodeCopyDistance(next);
+ size_t len_code = ZopfliNodeLengthCode(next);
+ size_t max_distance =
+ BROTLI_MIN(size_t, block_start + pos, max_backward_limit);
+ BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap);
+ size_t dist_code = ZopfliNodeDistanceCode(next);
+ InitCommand(&commands[i], &params->dist, insert_length,
+ copy_length, (int)len_code - (int)copy_length, dist_code);
+
+ if (!is_dictionary && dist_code > 0) {
+ dist_cache[3] = dist_cache[2];
+ dist_cache[2] = dist_cache[1];
+ dist_cache[1] = dist_cache[0];
+ dist_cache[0] = (int)distance;
+ }
+ }
+
+ *num_literals += insert_length;
+ pos += copy_length;
+ }
+ *last_insert_len += num_bytes - pos;
+}
+
+static size_t ZopfliIterate(size_t num_bytes, size_t position,
+ const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params, const size_t gap, const int* dist_cache,
+ const ZopfliCostModel* model, const uint32_t* num_matches,
+ const BackwardMatch* matches, ZopfliNode* nodes) {
+ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
+ const size_t max_zopfli_len = MaxZopfliLen(params);
+ StartPosQueue queue;
+ size_t cur_match_pos = 0;
+ size_t i;
+ nodes[0].length = 0;
+ nodes[0].u.cost = 0;
+ InitStartPosQueue(&queue);
+ for (i = 0; i + 3 < num_bytes; i++) {
+ size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,
+ ringbuffer_mask, params, max_backward_limit, dist_cache,
+ num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
+ if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
+ cur_match_pos += num_matches[i];
+ if (num_matches[i] == 1 &&
+ BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {
+ skip = BROTLI_MAX(size_t,
+ BackwardMatchLength(&matches[cur_match_pos - 1]), skip);
+ }
+ if (skip > 1) {
+ skip--;
+ while (skip) {
+ i++;
+ if (i + 3 >= num_bytes) break;
+ EvaluateNode(position, i, max_backward_limit, gap,
+ dist_cache, model, &queue, nodes);
+ cur_match_pos += num_matches[i];
+ skip--;
+ }
+ }
+ }
+ return ComputeShortestPathFromNodes(num_bytes, nodes);
+}
+
+/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
+size_t BrotliZopfliComputeShortestPath(MemoryManager* m, size_t num_bytes,
+ size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params,
+ const int* dist_cache, HasherHandle hasher, ZopfliNode* nodes) {
+ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
+ const size_t max_zopfli_len = MaxZopfliLen(params);
+ ZopfliCostModel model;
+ StartPosQueue queue;
+ BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)];
+ const size_t store_end = num_bytes >= StoreLookaheadH10() ?
+ position + num_bytes - StoreLookaheadH10() + 1 : position;
+ size_t i;
+ size_t gap = 0;
+ size_t lz_matches_offset = 0;
+ nodes[0].length = 0;
+ nodes[0].u.cost = 0;
+ InitZopfliCostModel(m, &model, &params->dist, num_bytes);
+ if (BROTLI_IS_OOM(m)) return 0;
+ ZopfliCostModelSetFromLiteralCosts(
+ &model, position, ringbuffer, ringbuffer_mask);
+ InitStartPosQueue(&queue);
+ for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {
+ const size_t pos = position + i;
+ const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
+ size_t skip;
+ size_t num_matches;
+ num_matches = FindAllMatchesH10(hasher,
+ &params->dictionary,
+ ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance,
+ gap, params, &matches[lz_matches_offset]);
+ if (num_matches > 0 &&
+ BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {
+ matches[0] = matches[num_matches - 1];
+ num_matches = 1;
+ }
+ skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,
+ params, max_backward_limit, dist_cache, num_matches, matches, &model,
+ &queue, nodes);
+ if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
+ if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {
+ skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);
+ }
+ if (skip > 1) {
+ /* Add the tail of the copy to the hasher. */
+ StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(
+ size_t, pos + skip, store_end));
+ skip--;
+ while (skip) {
+ i++;
+ if (i + HashTypeLengthH10() - 1 >= num_bytes) break;
+ EvaluateNode(position, i, max_backward_limit, gap,
+ dist_cache, &model, &queue, nodes);
+ skip--;
+ }
+ }
+ }
+ CleanupZopfliCostModel(m, &model);
+ return ComputeShortestPathFromNodes(num_bytes, nodes);
+}
+
+void BrotliCreateZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,
+ size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals) {
+ ZopfliNode* nodes;
+ nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
+ if (BROTLI_IS_OOM(m)) return;
+ BrotliInitZopfliNodes(nodes, num_bytes + 1);
+ *num_commands += BrotliZopfliComputeShortestPath(m, num_bytes,
+ position, ringbuffer, ringbuffer_mask, params,
+ dist_cache, hasher, nodes);
+ if (BROTLI_IS_OOM(m)) return;
+ BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,
+ last_insert_len, params, commands, num_literals);
+ BROTLI_FREE(m, nodes);
+}
+
+void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,
+ size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals) {
+ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
+ uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);
+ size_t matches_size = 4 * num_bytes;
+ const size_t store_end = num_bytes >= StoreLookaheadH10() ?
+ position + num_bytes - StoreLookaheadH10() + 1 : position;
+ size_t cur_match_pos = 0;
+ size_t i;
+ size_t orig_num_literals;
+ size_t orig_last_insert_len;
+ int orig_dist_cache[4];
+ size_t orig_num_commands;
+ ZopfliCostModel model;
+ ZopfliNode* nodes;
+ BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);
+ size_t gap = 0;
+ size_t shadow_matches = 0;
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {
+ const size_t pos = position + i;
+ size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
+ size_t max_length = num_bytes - i;
+ size_t num_found_matches;
+ size_t cur_match_end;
+ size_t j;
+ /* Ensure that we have enough free slots. */
+ BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,
+ cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);
+ if (BROTLI_IS_OOM(m)) return;
+ num_found_matches = FindAllMatchesH10(hasher,
+ &params->dictionary,
+ ringbuffer, ringbuffer_mask, pos, max_length,
+ max_distance, gap, params,
+ &matches[cur_match_pos + shadow_matches]);
+ cur_match_end = cur_match_pos + num_found_matches;
+ for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {
+ BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=
+ BackwardMatchLength(&matches[j + 1]));
+ }
+ num_matches[i] = (uint32_t)num_found_matches;
+ if (num_found_matches > 0) {
+ const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);
+ if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {
+ const size_t skip = match_len - 1;
+ matches[cur_match_pos++] = matches[cur_match_end - 1];
+ num_matches[i] = 1;
+ /* Add the tail of the copy to the hasher. */
+ StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
+ BROTLI_MIN(size_t, pos + match_len, store_end));
+ memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));
+ i += skip;
+ } else {
+ cur_match_pos = cur_match_end;
+ }
+ }
+ }
+ orig_num_literals = *num_literals;
+ orig_last_insert_len = *last_insert_len;
+ memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
+ orig_num_commands = *num_commands;
+ nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
+ if (BROTLI_IS_OOM(m)) return;
+ InitZopfliCostModel(m, &model, &params->dist, num_bytes);
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < 2; i++) {
+ BrotliInitZopfliNodes(nodes, num_bytes + 1);
+ if (i == 0) {
+ ZopfliCostModelSetFromLiteralCosts(
+ &model, position, ringbuffer, ringbuffer_mask);
+ } else {
+ ZopfliCostModelSetFromCommands(&model, position, ringbuffer,
+ ringbuffer_mask, commands, *num_commands - orig_num_commands,
+ orig_last_insert_len);
+ }
+ *num_commands = orig_num_commands;
+ *num_literals = orig_num_literals;
+ *last_insert_len = orig_last_insert_len;
+ memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));
+ *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,
+ ringbuffer_mask, params, gap, dist_cache, &model, num_matches, matches,
+ nodes);
+ BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,
+ last_insert_len, params, commands, num_literals);
+ }
+ CleanupZopfliCostModel(m, &model);
+ BROTLI_FREE(m, nodes);
+ BROTLI_FREE(m, matches);
+ BROTLI_FREE(m, num_matches);
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.h b/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.h
new file mode 100644
index 0000000000..1e4275d403
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/backward_references_hq.h
@@ -0,0 +1,92 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function to find backward reference copies. */
+
+#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
+#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
+
+#include "../common/constants.h"
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./hash.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask, const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals);
+
+BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask, const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals);
+
+typedef struct ZopfliNode {
+ /* Best length to get up to this byte (not including this byte itself)
+ highest 7 bit is used to reconstruct the length code. */
+ uint32_t length;
+ /* Distance associated with the length. */
+ uint32_t distance;
+ /* Number of literal inserts before this copy; highest 5 bits contain
+ distance short code + 1 (or zero if no short code). */
+ uint32_t dcode_insert_length;
+
+ /* This union holds information used by dynamic-programming. During forward
+ pass |cost| it used to store the goal function. When node is processed its
+ |cost| is invalidated in favor of |shortcut|. On path back-tracing pass
+ |next| is assigned the offset to next node on the path. */
+ union {
+ /* Smallest cost to get to this byte from the beginning, as found so far. */
+ float cost;
+ /* Offset to the next node on the path. Equals to command_length() of the
+ next node on the path. For last node equals to BROTLI_UINT32_MAX */
+ uint32_t next;
+ /* Node position that provides next distance for distance cache. */
+ uint32_t shortcut;
+ } u;
+} ZopfliNode;
+
+BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);
+
+/* Computes the shortest path of commands from position to at most
+ position + num_bytes.
+
+ On return, path->size() is the number of commands found and path[i] is the
+ length of the i-th command (copy length plus insert length).
+ Note that the sum of the lengths of all commands can be less than num_bytes.
+
+ On return, the nodes[0..num_bytes] array will have the following
+ "ZopfliNode array invariant":
+ For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then
+ (1) nodes[i].copy_length() >= 2
+ (2) nodes[i].command_length() <= i and
+ (3) nodes[i - nodes[i].command_length()].cost < kInfinity */
+BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(
+ MemoryManager* m, size_t num_bytes,
+ size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params,
+ const int* dist_cache, HasherHandle hasher, ZopfliNode* nodes);
+
+BROTLI_INTERNAL void BrotliZopfliCreateCommands(
+ const size_t num_bytes, const size_t block_start, const ZopfliNode* nodes,
+ int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,
+ Command* commands, size_t* num_literals);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/backward_references_inc.h b/dviware/dvisvgm/libs/brotli/enc/backward_references_inc.h
new file mode 100644
index 0000000000..c18cdb00cb
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/backward_references_inc.h
@@ -0,0 +1,153 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: EXPORT_FN, FN */
+
+static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
+ size_t num_bytes, size_t position,
+ const uint8_t* ringbuffer, size_t ringbuffer_mask,
+ const BrotliEncoderParams* params,
+ HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
+ Command* commands, size_t* num_commands, size_t* num_literals) {
+ /* Set maximum distance, see section 9.1. of the spec. */
+ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
+
+ const Command* const orig_commands = commands;
+ size_t insert_length = *last_insert_len;
+ const size_t pos_end = position + num_bytes;
+ const size_t store_end = num_bytes >= FN(StoreLookahead)() ?
+ position + num_bytes - FN(StoreLookahead)() + 1 : position;
+
+ /* For speed up heuristics for random data. */
+ const size_t random_heuristics_window_size =
+ LiteralSpreeLengthForSparseSearch(params);
+ size_t apply_random_heuristics = position + random_heuristics_window_size;
+ const size_t gap = 0;
+
+ /* Minimum score to accept a backward reference. */
+ const score_t kMinScore = BROTLI_SCORE_BASE + 100;
+
+ FN(PrepareDistanceCache)(hasher, dist_cache);
+
+ while (position + FN(HashTypeLength)() < pos_end) {
+ size_t max_length = pos_end - position;
+ size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
+ HasherSearchResult sr;
+ sr.len = 0;
+ sr.len_code_delta = 0;
+ sr.distance = 0;
+ sr.score = kMinScore;
+ FN(FindLongestMatch)(hasher, &params->dictionary,
+ ringbuffer, ringbuffer_mask, dist_cache, position, max_length,
+ max_distance, gap, params->dist.max_distance, &sr);
+ if (sr.score > kMinScore) {
+ /* Found a match. Let's look for something even better ahead. */
+ int delayed_backward_references_in_row = 0;
+ --max_length;
+ for (;; --max_length) {
+ const score_t cost_diff_lazy = 175;
+ HasherSearchResult sr2;
+ sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?
+ BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;
+ sr2.len_code_delta = 0;
+ sr2.distance = 0;
+ sr2.score = kMinScore;
+ max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);
+ FN(FindLongestMatch)(hasher,
+ &params->dictionary,
+ ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,
+ max_distance, gap, params->dist.max_distance, &sr2);
+ if (sr2.score >= sr.score + cost_diff_lazy) {
+ /* Ok, let's just write one byte for now and start a match from the
+ next byte. */
+ ++position;
+ ++insert_length;
+ sr = sr2;
+ if (++delayed_backward_references_in_row < 4 &&
+ position + FN(HashTypeLength)() < pos_end) {
+ continue;
+ }
+ }
+ break;
+ }
+ apply_random_heuristics =
+ position + 2 * sr.len + random_heuristics_window_size;
+ max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
+ {
+ /* The first 16 codes are special short-codes,
+ and the minimum offset is 1. */
+ size_t distance_code = ComputeDistanceCode(
+ sr.distance, max_distance + gap, dist_cache);
+ if ((sr.distance <= (max_distance + gap)) && distance_code > 0) {
+ dist_cache[3] = dist_cache[2];
+ dist_cache[2] = dist_cache[1];
+ dist_cache[1] = dist_cache[0];
+ dist_cache[0] = (int)sr.distance;
+ FN(PrepareDistanceCache)(hasher, dist_cache);
+ }
+ InitCommand(commands++, &params->dist, insert_length,
+ sr.len, sr.len_code_delta, distance_code);
+ }
+ *num_literals += insert_length;
+ insert_length = 0;
+ /* Put the hash keys into the table, if there are enough bytes left.
+ Depending on the hasher implementation, it can push all positions
+ in the given range or only a subset of them.
+ Avoid hash poisoning with RLE data. */
+ {
+ size_t range_start = position + 2;
+ size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);
+ if (sr.distance < (sr.len >> 2)) {
+ range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,
+ range_start, position + sr.len - (sr.distance << 2)));
+ }
+ FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start,
+ range_end);
+ }
+ position += sr.len;
+ } else {
+ ++insert_length;
+ ++position;
+ /* If we have not seen matches for a long time, we can skip some
+ match lookups. Unsuccessful match lookups are very very expensive
+ and this kind of a heuristic speeds up compression quite
+ a lot. */
+ if (position > apply_random_heuristics) {
+ /* Going through uncompressible data, jump. */
+ if (position >
+ apply_random_heuristics + 4 * random_heuristics_window_size) {
+ /* It is quite a long time since we saw a copy, so we assume
+ that this data is not compressible, and store hashes less
+ often. Hashes of non compressible data are less likely to
+ turn out to be useful in the future, too, so we store less of
+ them to not to flood out the hash table of good compressible
+ data. */
+ const size_t kMargin =
+ BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);
+ size_t pos_jump =
+ BROTLI_MIN(size_t, position + 16, pos_end - kMargin);
+ for (; position < pos_jump; position += 4) {
+ FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
+ insert_length += 4;
+ }
+ } else {
+ const size_t kMargin =
+ BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);
+ size_t pos_jump =
+ BROTLI_MIN(size_t, position + 8, pos_end - kMargin);
+ for (; position < pos_jump; position += 2) {
+ FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
+ insert_length += 2;
+ }
+ }
+ }
+ }
+ }
+ insert_length += pos_end - position;
+ *last_insert_len = insert_length;
+ *num_commands += (size_t)(commands - orig_commands);
+}
diff --git a/dviware/dvisvgm/libs/brotli/enc/bit_cost.c b/dviware/dvisvgm/libs/brotli/enc/bit_cost.c
new file mode 100644
index 0000000000..1f3f7ad5c9
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/bit_cost.c
@@ -0,0 +1,35 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions to estimate the bit cost of Huffman trees. */
+
+#include "./bit_cost.h"
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./fast_log.h"
+#include "./histogram.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define FN(X) X ## Literal
+#include "./bit_cost_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Command
+#include "./bit_cost_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Distance
+#include "./bit_cost_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/bit_cost.h b/dviware/dvisvgm/libs/brotli/enc/bit_cost.h
new file mode 100644
index 0000000000..6586469e62
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/bit_cost.h
@@ -0,0 +1,63 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions to estimate the bit cost of Huffman trees. */
+
+#ifndef BROTLI_ENC_BIT_COST_H_
+#define BROTLI_ENC_BIT_COST_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./fast_log.h"
+#include "./histogram.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static BROTLI_INLINE double ShannonEntropy(
+ const uint32_t* population, size_t size, size_t* total) {
+ size_t sum = 0;
+ double retval = 0;
+ const uint32_t* population_end = population + size;
+ size_t p;
+ if (size & 1) {
+ goto odd_number_of_elements_left;
+ }
+ while (population < population_end) {
+ p = *population++;
+ sum += p;
+ retval -= (double)p * FastLog2(p);
+ odd_number_of_elements_left:
+ p = *population++;
+ sum += p;
+ retval -= (double)p * FastLog2(p);
+ }
+ if (sum) retval += (double)sum * FastLog2(sum);
+ *total = sum;
+ return retval;
+}
+
+static BROTLI_INLINE double BitsEntropy(
+ const uint32_t* population, size_t size) {
+ size_t sum;
+ double retval = ShannonEntropy(population, size, &sum);
+ if (retval < sum) {
+ /* At least one bit per literal is needed. */
+ retval = (double)sum;
+ }
+ return retval;
+}
+
+BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*);
+BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*);
+BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_BIT_COST_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/bit_cost_inc.h b/dviware/dvisvgm/libs/brotli/enc/bit_cost_inc.h
new file mode 100644
index 0000000000..453c226042
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/bit_cost_inc.h
@@ -0,0 +1,127 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+#define HistogramType FN(Histogram)
+
+double FN(BrotliPopulationCost)(const HistogramType* histogram) {
+ static const double kOneSymbolHistogramCost = 12;
+ static const double kTwoSymbolHistogramCost = 20;
+ static const double kThreeSymbolHistogramCost = 28;
+ static const double kFourSymbolHistogramCost = 37;
+ const size_t data_size = FN(HistogramDataSize)();
+ int count = 0;
+ size_t s[5];
+ double bits = 0.0;
+ size_t i;
+ if (histogram->total_count_ == 0) {
+ return kOneSymbolHistogramCost;
+ }
+ for (i = 0; i < data_size; ++i) {
+ if (histogram->data_[i] > 0) {
+ s[count] = i;
+ ++count;
+ if (count > 4) break;
+ }
+ }
+ if (count == 1) {
+ return kOneSymbolHistogramCost;
+ }
+ if (count == 2) {
+ return (kTwoSymbolHistogramCost + (double)histogram->total_count_);
+ }
+ if (count == 3) {
+ const uint32_t histo0 = histogram->data_[s[0]];
+ const uint32_t histo1 = histogram->data_[s[1]];
+ const uint32_t histo2 = histogram->data_[s[2]];
+ const uint32_t histomax =
+ BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));
+ return (kThreeSymbolHistogramCost +
+ 2 * (histo0 + histo1 + histo2) - histomax);
+ }
+ if (count == 4) {
+ uint32_t histo[4];
+ uint32_t h23;
+ uint32_t histomax;
+ for (i = 0; i < 4; ++i) {
+ histo[i] = histogram->data_[s[i]];
+ }
+ /* Sort */
+ for (i = 0; i < 4; ++i) {
+ size_t j;
+ for (j = i + 1; j < 4; ++j) {
+ if (histo[j] > histo[i]) {
+ BROTLI_SWAP(uint32_t, histo, j, i);
+ }
+ }
+ }
+ h23 = histo[2] + histo[3];
+ histomax = BROTLI_MAX(uint32_t, h23, histo[0]);
+ return (kFourSymbolHistogramCost +
+ 3 * h23 + 2 * (histo[0] + histo[1]) - histomax);
+ }
+
+ {
+ /* In this loop we compute the entropy of the histogram and simultaneously
+ build a simplified histogram of the code length codes where we use the
+ zero repeat code 17, but we don't use the non-zero repeat code 16. */
+ size_t max_depth = 1;
+ uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };
+ const double log2total = FastLog2(histogram->total_count_);
+ for (i = 0; i < data_size;) {
+ if (histogram->data_[i] > 0) {
+ /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =
+ = log2(total_count) - log2(count(symbol)) */
+ double log2p = log2total - FastLog2(histogram->data_[i]);
+ /* Approximate the bit depth by round(-log2(P(symbol))) */
+ size_t depth = (size_t)(log2p + 0.5);
+ bits += histogram->data_[i] * log2p;
+ if (depth > 15) {
+ depth = 15;
+ }
+ if (depth > max_depth) {
+ max_depth = depth;
+ }
+ ++depth_histo[depth];
+ ++i;
+ } else {
+ /* Compute the run length of zeros and add the appropriate number of 0
+ and 17 code length codes to the code length code histogram. */
+ uint32_t reps = 1;
+ size_t k;
+ for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {
+ ++reps;
+ }
+ i += reps;
+ if (i == data_size) {
+ /* Don't add any cost for the last zero run, since these are encoded
+ only implicitly. */
+ break;
+ }
+ if (reps < 3) {
+ depth_histo[0] += reps;
+ } else {
+ reps -= 2;
+ while (reps > 0) {
+ ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];
+ /* Add the 3 extra bits for the 17 code length code. */
+ bits += 3;
+ reps >>= 3;
+ }
+ }
+ }
+ }
+ /* Add the estimated encoding cost of the code length code histogram. */
+ bits += (double)(18 + 2 * max_depth);
+ /* Add the entropy of the code length code histogram. */
+ bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);
+ }
+ return bits;
+}
+
+#undef HistogramType
diff --git a/dviware/dvisvgm/libs/brotli/enc/block_encoder_inc.h b/dviware/dvisvgm/libs/brotli/enc/block_encoder_inc.h
new file mode 100644
index 0000000000..8cbd5eac67
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/block_encoder_inc.h
@@ -0,0 +1,34 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+#define HistogramType FN(Histogram)
+
+/* Creates entropy codes for all block types and stores them to the bit
+ stream. */
+static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,
+ const HistogramType* histograms, const size_t histograms_size,
+ const size_t alphabet_size, HuffmanTree* tree,
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t table_size = histograms_size * self->histogram_length_;
+ self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
+ self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ {
+ size_t i;
+ for (i = 0; i < histograms_size; ++i) {
+ size_t ix = i * self->histogram_length_;
+ BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,
+ alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],
+ storage_ix, storage);
+ }
+ }
+}
+
+#undef HistogramType
diff --git a/dviware/dvisvgm/libs/brotli/enc/block_splitter.c b/dviware/dvisvgm/libs/brotli/enc/block_splitter.c
new file mode 100644
index 0000000000..d308eca59d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/block_splitter.c
@@ -0,0 +1,194 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Block split point selection utilities. */
+
+#include "./block_splitter.h"
+
+#include <string.h> /* memcpy, memset */
+
+#include "../common/platform.h"
+#include "./bit_cost.h"
+#include "./cluster.h"
+#include "./command.h"
+#include "./fast_log.h"
+#include "./histogram.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static const size_t kMaxLiteralHistograms = 100;
+static const size_t kMaxCommandHistograms = 50;
+static const double kLiteralBlockSwitchCost = 28.1;
+static const double kCommandBlockSwitchCost = 13.5;
+static const double kDistanceBlockSwitchCost = 14.6;
+static const size_t kLiteralStrideLength = 70;
+static const size_t kCommandStrideLength = 40;
+static const size_t kSymbolsPerLiteralHistogram = 544;
+static const size_t kSymbolsPerCommandHistogram = 530;
+static const size_t kSymbolsPerDistanceHistogram = 544;
+static const size_t kMinLengthForBlockSplitting = 128;
+static const size_t kIterMulForRefining = 2;
+static const size_t kMinItersForRefining = 100;
+
+static size_t CountLiterals(const Command* cmds, const size_t num_commands) {
+ /* Count how many we have. */
+ size_t total_length = 0;
+ size_t i;
+ for (i = 0; i < num_commands; ++i) {
+ total_length += cmds[i].insert_len_;
+ }
+ return total_length;
+}
+
+static void CopyLiteralsToByteArray(const Command* cmds,
+ const size_t num_commands,
+ const uint8_t* data,
+ const size_t offset,
+ const size_t mask,
+ uint8_t* literals) {
+ size_t pos = 0;
+ size_t from_pos = offset & mask;
+ size_t i;
+ for (i = 0; i < num_commands; ++i) {
+ size_t insert_len = cmds[i].insert_len_;
+ if (from_pos + insert_len > mask) {
+ size_t head_size = mask + 1 - from_pos;
+ memcpy(literals + pos, data + from_pos, head_size);
+ from_pos = 0;
+ pos += head_size;
+ insert_len -= head_size;
+ }
+ if (insert_len > 0) {
+ memcpy(literals + pos, data + from_pos, insert_len);
+ pos += insert_len;
+ }
+ from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;
+ }
+}
+
+static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
+ /* Initial seed should be 7. In this case, loop length is (1 << 29). */
+ *seed *= 16807U;
+ return *seed;
+}
+
+static BROTLI_INLINE double BitCost(size_t count) {
+ return count == 0 ? -2.0 : FastLog2(count);
+}
+
+#define HISTOGRAMS_PER_BATCH 64
+#define CLUSTERS_PER_BATCH 16
+
+#define FN(X) X ## Literal
+#define DataType uint8_t
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_splitter_inc.h"
+#undef DataType
+#undef FN
+
+#define FN(X) X ## Command
+#define DataType uint16_t
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_splitter_inc.h"
+#undef FN
+
+#define FN(X) X ## Distance
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_splitter_inc.h"
+#undef DataType
+#undef FN
+
+void BrotliInitBlockSplit(BlockSplit* self) {
+ self->num_types = 0;
+ self->num_blocks = 0;
+ self->types = 0;
+ self->lengths = 0;
+ self->types_alloc_size = 0;
+ self->lengths_alloc_size = 0;
+}
+
+void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
+ BROTLI_FREE(m, self->types);
+ BROTLI_FREE(m, self->lengths);
+}
+
+void BrotliSplitBlock(MemoryManager* m,
+ const Command* cmds,
+ const size_t num_commands,
+ const uint8_t* data,
+ const size_t pos,
+ const size_t mask,
+ const BrotliEncoderParams* params,
+ BlockSplit* literal_split,
+ BlockSplit* insert_and_copy_split,
+ BlockSplit* dist_split) {
+ {
+ size_t literals_count = CountLiterals(cmds, num_commands);
+ uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);
+ if (BROTLI_IS_OOM(m)) return;
+ /* Create a continuous array of literals. */
+ CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);
+ /* Create the block split on the array of literals.
+ Literal histograms have alphabet size 256. */
+ SplitByteVectorLiteral(
+ m, literals, literals_count,
+ kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,
+ kLiteralStrideLength, kLiteralBlockSwitchCost, params,
+ literal_split);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, literals);
+ }
+
+ {
+ /* Compute prefix codes for commands. */
+ uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < num_commands; ++i) {
+ insert_and_copy_codes[i] = cmds[i].cmd_prefix_;
+ }
+ /* Create the block split on the array of command prefixes. */
+ SplitByteVectorCommand(
+ m, insert_and_copy_codes, num_commands,
+ kSymbolsPerCommandHistogram, kMaxCommandHistograms,
+ kCommandStrideLength, kCommandBlockSwitchCost, params,
+ insert_and_copy_split);
+ if (BROTLI_IS_OOM(m)) return;
+ /* TODO: reuse for distances? */
+ BROTLI_FREE(m, insert_and_copy_codes);
+ }
+
+ {
+ /* Create a continuous array of distance prefixes. */
+ uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);
+ size_t j = 0;
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < num_commands; ++i) {
+ const Command* cmd = &cmds[i];
+ if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
+ distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;
+ }
+ }
+ /* Create the block split on the array of distance prefixes. */
+ SplitByteVectorDistance(
+ m, distance_prefixes, j,
+ kSymbolsPerDistanceHistogram, kMaxCommandHistograms,
+ kCommandStrideLength, kDistanceBlockSwitchCost, params,
+ dist_split);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, distance_prefixes);
+ }
+}
+
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/block_splitter.h b/dviware/dvisvgm/libs/brotli/enc/block_splitter.h
new file mode 100644
index 0000000000..a5e006c4b3
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/block_splitter.h
@@ -0,0 +1,51 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Block split point selection utilities. */
+
+#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_
+#define BROTLI_ENC_BLOCK_SPLITTER_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct BlockSplit {
+ size_t num_types; /* Amount of distinct types */
+ size_t num_blocks; /* Amount of values in types and length */
+ uint8_t* types;
+ uint32_t* lengths;
+
+ size_t types_alloc_size;
+ size_t lengths_alloc_size;
+} BlockSplit;
+
+BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);
+BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,
+ BlockSplit* self);
+
+BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,
+ const Command* cmds,
+ const size_t num_commands,
+ const uint8_t* data,
+ const size_t offset,
+ const size_t mask,
+ const BrotliEncoderParams* params,
+ BlockSplit* literal_split,
+ BlockSplit* insert_and_copy_split,
+ BlockSplit* dist_split);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/block_splitter_inc.h b/dviware/dvisvgm/libs/brotli/enc/block_splitter_inc.h
new file mode 100644
index 0000000000..023712b84d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/block_splitter_inc.h
@@ -0,0 +1,431 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, DataType */
+
+#define HistogramType FN(Histogram)
+
+static void FN(InitialEntropyCodes)(const DataType* data, size_t length,
+ size_t stride,
+ size_t num_histograms,
+ HistogramType* histograms) {
+ uint32_t seed = 7;
+ size_t block_length = length / num_histograms;
+ size_t i;
+ FN(ClearHistograms)(histograms, num_histograms);
+ for (i = 0; i < num_histograms; ++i) {
+ size_t pos = length * i / num_histograms;
+ if (i != 0) {
+ pos += MyRand(&seed) % block_length;
+ }
+ if (pos + stride >= length) {
+ pos = length - stride - 1;
+ }
+ FN(HistogramAddVector)(&histograms[i], data + pos, stride);
+ }
+}
+
+static void FN(RandomSample)(uint32_t* seed,
+ const DataType* data,
+ size_t length,
+ size_t stride,
+ HistogramType* sample) {
+ size_t pos = 0;
+ if (stride >= length) {
+ stride = length;
+ } else {
+ pos = MyRand(seed) % (length - stride + 1);
+ }
+ FN(HistogramAddVector)(sample, data + pos, stride);
+}
+
+static void FN(RefineEntropyCodes)(const DataType* data, size_t length,
+ size_t stride,
+ size_t num_histograms,
+ HistogramType* histograms) {
+ size_t iters =
+ kIterMulForRefining * length / stride + kMinItersForRefining;
+ uint32_t seed = 7;
+ size_t iter;
+ iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;
+ for (iter = 0; iter < iters; ++iter) {
+ HistogramType sample;
+ FN(HistogramClear)(&sample);
+ FN(RandomSample)(&seed, data, length, stride, &sample);
+ FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample);
+ }
+}
+
+/* Assigns a block id from the range [0, num_histograms) to each data element
+ in data[0..length) and fills in block_id[0..length) with the assigned values.
+ Returns the number of blocks, i.e. one plus the number of block switches. */
+static size_t FN(FindBlocks)(const DataType* data, const size_t length,
+ const double block_switch_bitcost,
+ const size_t num_histograms,
+ const HistogramType* histograms,
+ double* insert_cost,
+ double* cost,
+ uint8_t* switch_signal,
+ uint8_t* block_id) {
+ const size_t data_size = FN(HistogramDataSize)();
+ const size_t bitmaplen = (num_histograms + 7) >> 3;
+ size_t num_blocks = 1;
+ size_t i;
+ size_t j;
+ BROTLI_DCHECK(num_histograms <= 256);
+ if (num_histograms <= 1) {
+ for (i = 0; i < length; ++i) {
+ block_id[i] = 0;
+ }
+ return 1;
+ }
+ memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms);
+ for (i = 0; i < num_histograms; ++i) {
+ insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);
+ }
+ for (i = data_size; i != 0;) {
+ --i;
+ for (j = 0; j < num_histograms; ++j) {
+ insert_cost[i * num_histograms + j] =
+ insert_cost[j] - BitCost(histograms[j].data_[i]);
+ }
+ }
+ memset(cost, 0, sizeof(cost[0]) * num_histograms);
+ memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen);
+ /* After each iteration of this loop, cost[k] will contain the difference
+ between the minimum cost of arriving at the current byte position using
+ entropy code k, and the minimum cost of arriving at the current byte
+ position. This difference is capped at the block switch cost, and if it
+ reaches block switch cost, it means that when we trace back from the last
+ position, we need to switch here. */
+ for (i = 0; i < length; ++i) {
+ const size_t byte_ix = i;
+ size_t ix = byte_ix * bitmaplen;
+ size_t insert_cost_ix = data[byte_ix] * num_histograms;
+ double min_cost = 1e99;
+ double block_switch_cost = block_switch_bitcost;
+ size_t k;
+ for (k = 0; k < num_histograms; ++k) {
+ /* We are coding the symbol in data[byte_ix] with entropy code k. */
+ cost[k] += insert_cost[insert_cost_ix + k];
+ if (cost[k] < min_cost) {
+ min_cost = cost[k];
+ block_id[byte_ix] = (uint8_t)k;
+ }
+ }
+ /* More blocks for the beginning. */
+ if (byte_ix < 2000) {
+ block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000;
+ }
+ for (k = 0; k < num_histograms; ++k) {
+ cost[k] -= min_cost;
+ if (cost[k] >= block_switch_cost) {
+ const uint8_t mask = (uint8_t)(1u << (k & 7));
+ cost[k] = block_switch_cost;
+ BROTLI_DCHECK((k >> 3) < bitmaplen);
+ switch_signal[ix + (k >> 3)] |= mask;
+ }
+ }
+ }
+ { /* Trace back from the last position and switch at the marked places. */
+ size_t byte_ix = length - 1;
+ size_t ix = byte_ix * bitmaplen;
+ uint8_t cur_id = block_id[byte_ix];
+ while (byte_ix > 0) {
+ const uint8_t mask = (uint8_t)(1u << (cur_id & 7));
+ BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen);
+ --byte_ix;
+ ix -= bitmaplen;
+ if (switch_signal[ix + (cur_id >> 3)] & mask) {
+ if (cur_id != block_id[byte_ix]) {
+ cur_id = block_id[byte_ix];
+ ++num_blocks;
+ }
+ }
+ block_id[byte_ix] = cur_id;
+ }
+ }
+ return num_blocks;
+}
+
+static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,
+ uint16_t* new_id, const size_t num_histograms) {
+ static const uint16_t kInvalidId = 256;
+ uint16_t next_id = 0;
+ size_t i;
+ for (i = 0; i < num_histograms; ++i) {
+ new_id[i] = kInvalidId;
+ }
+ for (i = 0; i < length; ++i) {
+ BROTLI_DCHECK(block_ids[i] < num_histograms);
+ if (new_id[block_ids[i]] == kInvalidId) {
+ new_id[block_ids[i]] = next_id++;
+ }
+ }
+ for (i = 0; i < length; ++i) {
+ block_ids[i] = (uint8_t)new_id[block_ids[i]];
+ BROTLI_DCHECK(block_ids[i] < num_histograms);
+ }
+ BROTLI_DCHECK(next_id <= num_histograms);
+ return next_id;
+}
+
+static void FN(BuildBlockHistograms)(const DataType* data, const size_t length,
+ const uint8_t* block_ids,
+ const size_t num_histograms,
+ HistogramType* histograms) {
+ size_t i;
+ FN(ClearHistograms)(histograms, num_histograms);
+ for (i = 0; i < length; ++i) {
+ FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);
+ }
+}
+
+static void FN(ClusterBlocks)(MemoryManager* m,
+ const DataType* data, const size_t length,
+ const size_t num_blocks,
+ uint8_t* block_ids,
+ BlockSplit* split) {
+ uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);
+ uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks);
+ const size_t expected_num_clusters = CLUSTERS_PER_BATCH *
+ (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;
+ size_t all_histograms_size = 0;
+ size_t all_histograms_capacity = expected_num_clusters;
+ HistogramType* all_histograms =
+ BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);
+ size_t cluster_size_size = 0;
+ size_t cluster_size_capacity = expected_num_clusters;
+ uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);
+ size_t num_clusters = 0;
+ HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,
+ BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));
+ size_t max_num_pairs =
+ HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;
+ size_t pairs_capacity = max_num_pairs + 1;
+ HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);
+ size_t pos = 0;
+ uint32_t* clusters;
+ size_t num_final_clusters;
+ static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
+ uint32_t* new_index;
+ size_t i;
+ uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 };
+ uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 };
+ uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 };
+ uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 };
+
+ if (BROTLI_IS_OOM(m)) return;
+
+ memset(block_lengths, 0, num_blocks * sizeof(uint32_t));
+
+ {
+ size_t block_idx = 0;
+ for (i = 0; i < length; ++i) {
+ BROTLI_DCHECK(block_idx < num_blocks);
+ ++block_lengths[block_idx];
+ if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {
+ ++block_idx;
+ }
+ }
+ BROTLI_DCHECK(block_idx == num_blocks);
+ }
+
+ for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {
+ const size_t num_to_combine =
+ BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);
+ size_t num_new_clusters;
+ size_t j;
+ for (j = 0; j < num_to_combine; ++j) {
+ size_t k;
+ FN(HistogramClear)(&histograms[j]);
+ for (k = 0; k < block_lengths[i + j]; ++k) {
+ FN(HistogramAdd)(&histograms[j], data[pos++]);
+ }
+ histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);
+ new_clusters[j] = (uint32_t)j;
+ symbols[j] = (uint32_t)j;
+ sizes[j] = 1;
+ }
+ num_new_clusters = FN(BrotliHistogramCombine)(
+ histograms, sizes, symbols, new_clusters, pairs, num_to_combine,
+ num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);
+ BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,
+ all_histograms_capacity, all_histograms_size + num_new_clusters);
+ BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,
+ cluster_size_capacity, cluster_size_size + num_new_clusters);
+ if (BROTLI_IS_OOM(m)) return;
+ for (j = 0; j < num_new_clusters; ++j) {
+ all_histograms[all_histograms_size++] = histograms[new_clusters[j]];
+ cluster_size[cluster_size_size++] = sizes[new_clusters[j]];
+ remap[new_clusters[j]] = (uint32_t)j;
+ }
+ for (j = 0; j < num_to_combine; ++j) {
+ histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];
+ }
+ num_clusters += num_new_clusters;
+ BROTLI_DCHECK(num_clusters == cluster_size_size);
+ BROTLI_DCHECK(num_clusters == all_histograms_size);
+ }
+ BROTLI_FREE(m, histograms);
+
+ max_num_pairs =
+ BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);
+ if (pairs_capacity < max_num_pairs + 1) {
+ BROTLI_FREE(m, pairs);
+ pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+
+ clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < num_clusters; ++i) {
+ clusters[i] = (uint32_t)i;
+ }
+ num_final_clusters = FN(BrotliHistogramCombine)(
+ all_histograms, cluster_size, histogram_symbols, clusters, pairs,
+ num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,
+ max_num_pairs);
+ BROTLI_FREE(m, pairs);
+ BROTLI_FREE(m, cluster_size);
+
+ new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;
+ pos = 0;
+ {
+ uint32_t next_index = 0;
+ for (i = 0; i < num_blocks; ++i) {
+ HistogramType histo;
+ size_t j;
+ uint32_t best_out;
+ double best_bits;
+ FN(HistogramClear)(&histo);
+ for (j = 0; j < block_lengths[i]; ++j) {
+ FN(HistogramAdd)(&histo, data[pos++]);
+ }
+ best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];
+ best_bits =
+ FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]);
+ for (j = 0; j < num_final_clusters; ++j) {
+ const double cur_bits = FN(BrotliHistogramBitCostDistance)(
+ &histo, &all_histograms[clusters[j]]);
+ if (cur_bits < best_bits) {
+ best_bits = cur_bits;
+ best_out = clusters[j];
+ }
+ }
+ histogram_symbols[i] = best_out;
+ if (new_index[best_out] == kInvalidIndex) {
+ new_index[best_out] = next_index++;
+ }
+ }
+ }
+ BROTLI_FREE(m, clusters);
+ BROTLI_FREE(m, all_histograms);
+ BROTLI_ENSURE_CAPACITY(
+ m, uint8_t, split->types, split->types_alloc_size, num_blocks);
+ BROTLI_ENSURE_CAPACITY(
+ m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);
+ if (BROTLI_IS_OOM(m)) return;
+ {
+ uint32_t cur_length = 0;
+ size_t block_idx = 0;
+ uint8_t max_type = 0;
+ for (i = 0; i < num_blocks; ++i) {
+ cur_length += block_lengths[i];
+ if (i + 1 == num_blocks ||
+ histogram_symbols[i] != histogram_symbols[i + 1]) {
+ const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];
+ split->types[block_idx] = id;
+ split->lengths[block_idx] = cur_length;
+ max_type = BROTLI_MAX(uint8_t, max_type, id);
+ cur_length = 0;
+ ++block_idx;
+ }
+ }
+ split->num_blocks = block_idx;
+ split->num_types = (size_t)max_type + 1;
+ }
+ BROTLI_FREE(m, new_index);
+ BROTLI_FREE(m, block_lengths);
+ BROTLI_FREE(m, histogram_symbols);
+}
+
+static void FN(SplitByteVector)(MemoryManager* m,
+ const DataType* data, const size_t length,
+ const size_t literals_per_histogram,
+ const size_t max_histograms,
+ const size_t sampling_stride_length,
+ const double block_switch_cost,
+ const BrotliEncoderParams* params,
+ BlockSplit* split) {
+ const size_t data_size = FN(HistogramDataSize)();
+ size_t num_histograms = length / literals_per_histogram + 1;
+ HistogramType* histograms;
+ if (num_histograms > max_histograms) {
+ num_histograms = max_histograms;
+ }
+ if (length == 0) {
+ split->num_types = 1;
+ return;
+ } else if (length < kMinLengthForBlockSplitting) {
+ BROTLI_ENSURE_CAPACITY(m, uint8_t,
+ split->types, split->types_alloc_size, split->num_blocks + 1);
+ BROTLI_ENSURE_CAPACITY(m, uint32_t,
+ split->lengths, split->lengths_alloc_size, split->num_blocks + 1);
+ if (BROTLI_IS_OOM(m)) return;
+ split->num_types = 1;
+ split->types[split->num_blocks] = 0;
+ split->lengths[split->num_blocks] = (uint32_t)length;
+ split->num_blocks++;
+ return;
+ }
+ histograms = BROTLI_ALLOC(m, HistogramType, num_histograms);
+ if (BROTLI_IS_OOM(m)) return;
+ /* Find good entropy codes. */
+ FN(InitialEntropyCodes)(data, length,
+ sampling_stride_length,
+ num_histograms, histograms);
+ FN(RefineEntropyCodes)(data, length,
+ sampling_stride_length,
+ num_histograms, histograms);
+ {
+ /* Find a good path through literals with the good entropy codes. */
+ uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);
+ size_t num_blocks = 0;
+ const size_t bitmaplen = (num_histograms + 7) >> 3;
+ double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);
+ double* cost = BROTLI_ALLOC(m, double, num_histograms);
+ uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);
+ uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);
+ const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < iters; ++i) {
+ num_blocks = FN(FindBlocks)(data, length,
+ block_switch_cost,
+ num_histograms, histograms,
+ insert_cost, cost, switch_signal,
+ block_ids);
+ num_histograms = FN(RemapBlockIds)(block_ids, length,
+ new_id, num_histograms);
+ FN(BuildBlockHistograms)(data, length, block_ids,
+ num_histograms, histograms);
+ }
+ BROTLI_FREE(m, insert_cost);
+ BROTLI_FREE(m, cost);
+ BROTLI_FREE(m, switch_signal);
+ BROTLI_FREE(m, new_id);
+ BROTLI_FREE(m, histograms);
+ FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, block_ids);
+ }
+}
+
+#undef HistogramType
diff --git a/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.c b/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.c
new file mode 100644
index 0000000000..aaf2dad7db
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.c
@@ -0,0 +1,1331 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Brotli bit stream functions to support the low level format. There are no
+ compression algorithms here, just the right ordering of bits to match the
+ specs. */
+
+#include "./brotli_bit_stream.h"
+
+#include <string.h> /* memcpy, memset */
+
+#include "../common/constants.h"
+#include "../common/context.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./entropy_encode.h"
+#include "./entropy_encode_static.h"
+#include "./fast_log.h"
+#include "./histogram.h"
+#include "./memory.h"
+#include "./write_bits.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)
+/* The maximum size of Huffman dictionary for distances assuming that
+ NPOSTFIX = 0 and NDIRECT = 0. */
+#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \
+ BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)
+/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */
+
+/* Represents the range of values belonging to a prefix code:
+ [offset, offset + 2^nbits) */
+typedef struct PrefixCodeRange {
+ uint32_t offset;
+ uint32_t nbits;
+} PrefixCodeRange;
+
+static const PrefixCodeRange
+ kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
+ { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3},
+ {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5},
+ {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
+ {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24}
+};
+
+static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
+ uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);
+ while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&
+ len >= kBlockLengthPrefixCode[code + 1].offset) ++code;
+ return code;
+}
+
+static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,
+ uint32_t* n_extra, uint32_t* extra) {
+ *code = BlockLengthPrefixCode(len);
+ *n_extra = kBlockLengthPrefixCode[*code].nbits;
+ *extra = len - kBlockLengthPrefixCode[*code].offset;
+}
+
+typedef struct BlockTypeCodeCalculator {
+ size_t last_type;
+ size_t second_last_type;
+} BlockTypeCodeCalculator;
+
+static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
+ self->last_type = 1;
+ self->second_last_type = 0;
+}
+
+static BROTLI_INLINE size_t NextBlockTypeCode(
+ BlockTypeCodeCalculator* calculator, uint8_t type) {
+ size_t type_code = (type == calculator->last_type + 1) ? 1u :
+ (type == calculator->second_last_type) ? 0u : type + 2u;
+ calculator->second_last_type = calculator->last_type;
+ calculator->last_type = type;
+ return type_code;
+}
+
+/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+static void BrotliEncodeMlen(size_t length, uint64_t* bits,
+ size_t* numbits, uint64_t* nibblesbits) {
+ size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;
+ size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;
+ BROTLI_DCHECK(length > 0);
+ BROTLI_DCHECK(length <= (1 << 24));
+ BROTLI_DCHECK(lg <= 24);
+ *nibblesbits = mnibbles - 4;
+ *numbits = mnibbles * 4;
+ *bits = length - 1;
+}
+
+static BROTLI_INLINE void StoreCommandExtra(
+ const Command* cmd, size_t* storage_ix, uint8_t* storage) {
+ uint32_t copylen_code = CommandCopyLenCode(cmd);
+ uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);
+ uint16_t copycode = GetCopyLengthCode(copylen_code);
+ uint32_t insnumextra = GetInsertExtra(inscode);
+ uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);
+ uint64_t copyextraval = copylen_code - GetCopyBase(copycode);
+ uint64_t bits = (copyextraval << insnumextra) | insextraval;
+ BrotliWriteBits(
+ insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);
+}
+
+/* Data structure that stores almost everything that is needed to encode each
+ block switch command. */
+typedef struct BlockSplitCode {
+ BlockTypeCodeCalculator type_code_calculator;
+ uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
+ uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
+ uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
+ uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
+} BlockSplitCode;
+
+/* Stores a number between 0 and 255. */
+static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {
+ if (n == 0) {
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ } else {
+ size_t nbits = Log2FloorNonZero(n);
+ BrotliWriteBits(1, 1, storage_ix, storage);
+ BrotliWriteBits(3, nbits, storage_ix, storage);
+ BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);
+ }
+}
+
+/* Stores the compressed meta-block header.
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
+ size_t length,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ uint64_t lenbits;
+ size_t nlenbits;
+ uint64_t nibblesbits;
+
+ /* Write ISLAST bit. */
+ BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);
+ /* Write ISEMPTY bit. */
+ if (is_final_block) {
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ }
+
+ BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
+ BrotliWriteBits(2, nibblesbits, storage_ix, storage);
+ BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
+
+ if (!is_final_block) {
+ /* Write ISUNCOMPRESSED bit. */
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ }
+}
+
+/* Stores the uncompressed meta-block header.
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ uint64_t lenbits;
+ size_t nlenbits;
+ uint64_t nibblesbits;
+
+ /* Write ISLAST bit.
+ Uncompressed block cannot be the last one, so set to 0. */
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
+ BrotliWriteBits(2, nibblesbits, storage_ix, storage);
+ BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
+ /* Write ISUNCOMPRESSED bit. */
+ BrotliWriteBits(1, 1, storage_ix, storage);
+}
+
+static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
+ const int num_codes, const uint8_t* code_length_bitdepth,
+ size_t* storage_ix, uint8_t* storage) {
+ static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {
+ 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15
+ };
+ /* The bit lengths of the Huffman code over the code length alphabet
+ are compressed with the following static Huffman code:
+ Symbol Code
+ ------ ----
+ 0 00
+ 1 1110
+ 2 110
+ 3 01
+ 4 10
+ 5 1111 */
+ static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {
+ 0, 7, 3, 2, 1, 15
+ };
+ static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {
+ 2, 4, 3, 2, 2, 4
+ };
+
+ size_t skip_some = 0; /* skips none. */
+
+ /* Throw away trailing zeros: */
+ size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;
+ if (num_codes > 1) {
+ for (; codes_to_store > 0; --codes_to_store) {
+ if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
+ break;
+ }
+ }
+ }
+ if (code_length_bitdepth[kStorageOrder[0]] == 0 &&
+ code_length_bitdepth[kStorageOrder[1]] == 0) {
+ skip_some = 2; /* skips two. */
+ if (code_length_bitdepth[kStorageOrder[2]] == 0) {
+ skip_some = 3; /* skips three. */
+ }
+ }
+ BrotliWriteBits(2, skip_some, storage_ix, storage);
+ {
+ size_t i;
+ for (i = skip_some; i < codes_to_store; ++i) {
+ size_t l = code_length_bitdepth[kStorageOrder[i]];
+ BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],
+ kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);
+ }
+ }
+}
+
+static void BrotliStoreHuffmanTreeToBitMask(
+ const size_t huffman_tree_size, const uint8_t* huffman_tree,
+ const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,
+ const uint16_t* code_length_bitdepth_symbols,
+ size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {
+ size_t i;
+ for (i = 0; i < huffman_tree_size; ++i) {
+ size_t ix = huffman_tree[i];
+ BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],
+ storage_ix, storage);
+ /* Extra bits */
+ switch (ix) {
+ case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:
+ BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);
+ break;
+ case BROTLI_REPEAT_ZERO_CODE_LENGTH:
+ BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);
+ break;
+ }
+ }
+}
+
+static void StoreSimpleHuffmanTree(const uint8_t* depths,
+ size_t symbols[4],
+ size_t num_symbols,
+ size_t max_bits,
+ size_t* storage_ix, uint8_t* storage) {
+ /* value of 1 indicates a simple Huffman code */
+ BrotliWriteBits(2, 1, storage_ix, storage);
+ BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */
+
+ {
+ /* Sort */
+ size_t i;
+ for (i = 0; i < num_symbols; i++) {
+ size_t j;
+ for (j = i + 1; j < num_symbols; j++) {
+ if (depths[symbols[j]] < depths[symbols[i]]) {
+ BROTLI_SWAP(size_t, symbols, j, i);
+ }
+ }
+ }
+ }
+
+ if (num_symbols == 2) {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ } else if (num_symbols == 3) {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
+ } else {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
+ /* tree-select */
+ BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
+ }
+}
+
+/* num = alphabet size
+ depths = symbol depths */
+void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
+ HuffmanTree* tree,
+ size_t* storage_ix, uint8_t* storage) {
+ /* Write the Huffman tree into the brotli-representation.
+ The command alphabet is the largest, so this allocation will fit all
+ alphabets. */
+ uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];
+ size_t huffman_tree_size = 0;
+ uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };
+ uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];
+ uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };
+ size_t i;
+ int num_codes = 0;
+ size_t code = 0;
+
+ BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);
+
+ BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,
+ huffman_tree_extra_bits);
+
+ /* Calculate the statistics of the Huffman tree in brotli-representation. */
+ for (i = 0; i < huffman_tree_size; ++i) {
+ ++huffman_tree_histogram[huffman_tree[i]];
+ }
+
+ for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {
+ if (huffman_tree_histogram[i]) {
+ if (num_codes == 0) {
+ code = i;
+ num_codes = 1;
+ } else if (num_codes == 1) {
+ num_codes = 2;
+ break;
+ }
+ }
+ }
+
+ /* Calculate another Huffman tree to use for compressing both the
+ earlier Huffman tree with. */
+ BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,
+ 5, tree, code_length_bitdepth);
+ BrotliConvertBitDepthsToSymbols(code_length_bitdepth,
+ BROTLI_CODE_LENGTH_CODES,
+ code_length_bitdepth_symbols);
+
+ /* Now, we have all the data, let's start storing it */
+ BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,
+ storage_ix, storage);
+
+ if (num_codes == 1) {
+ code_length_bitdepth[code] = 0;
+ }
+
+ /* Store the real Huffman tree now. */
+ BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,
+ huffman_tree,
+ huffman_tree_extra_bits,
+ code_length_bitdepth,
+ code_length_bitdepth_symbols,
+ storage_ix, storage);
+}
+
+/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and
+ bits[0:length] and stores the encoded tree to the bit stream. */
+static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
+ const size_t histogram_length,
+ const size_t alphabet_size,
+ HuffmanTree* tree,
+ uint8_t* depth,
+ uint16_t* bits,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ size_t count = 0;
+ size_t s4[4] = { 0 };
+ size_t i;
+ size_t max_bits = 0;
+ for (i = 0; i < histogram_length; i++) {
+ if (histogram[i]) {
+ if (count < 4) {
+ s4[count] = i;
+ } else if (count > 4) {
+ break;
+ }
+ count++;
+ }
+ }
+
+ {
+ size_t max_bits_counter = alphabet_size - 1;
+ while (max_bits_counter) {
+ max_bits_counter >>= 1;
+ ++max_bits;
+ }
+ }
+
+ if (count <= 1) {
+ BrotliWriteBits(4, 1, storage_ix, storage);
+ BrotliWriteBits(max_bits, s4[0], storage_ix, storage);
+ depth[s4[0]] = 0;
+ bits[s4[0]] = 0;
+ return;
+ }
+
+ memset(depth, 0, histogram_length * sizeof(depth[0]));
+ BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);
+ BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);
+
+ if (count <= 4) {
+ StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);
+ } else {
+ BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);
+ }
+}
+
+static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
+ const HuffmanTree* v0, const HuffmanTree* v1) {
+ return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
+}
+
+void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m,
+ const uint32_t* histogram,
+ const size_t histogram_total,
+ const size_t max_bits,
+ uint8_t* depth, uint16_t* bits,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ size_t count = 0;
+ size_t symbols[4] = { 0 };
+ size_t length = 0;
+ size_t total = histogram_total;
+ while (total != 0) {
+ if (histogram[length]) {
+ if (count < 4) {
+ symbols[count] = length;
+ }
+ ++count;
+ total -= histogram[length];
+ }
+ ++length;
+ }
+
+ if (count <= 1) {
+ BrotliWriteBits(4, 1, storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ depth[symbols[0]] = 0;
+ bits[symbols[0]] = 0;
+ return;
+ }
+
+ memset(depth, 0, length * sizeof(depth[0]));
+ {
+ const size_t max_tree_size = 2 * length + 1;
+ HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size);
+ uint32_t count_limit;
+ if (BROTLI_IS_OOM(m)) return;
+ for (count_limit = 1; ; count_limit *= 2) {
+ HuffmanTree* node = tree;
+ size_t l;
+ for (l = length; l != 0;) {
+ --l;
+ if (histogram[l]) {
+ if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {
+ InitHuffmanTree(node, histogram[l], -1, (int16_t)l);
+ } else {
+ InitHuffmanTree(node, count_limit, -1, (int16_t)l);
+ }
+ ++node;
+ }
+ }
+ {
+ const int n = (int)(node - tree);
+ HuffmanTree sentinel;
+ int i = 0; /* Points to the next leaf node. */
+ int j = n + 1; /* Points to the next non-leaf node. */
+ int k;
+
+ SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);
+ /* The nodes are:
+ [0, n): the sorted leaf nodes that we start with.
+ [n]: we add a sentinel here.
+ [n + 1, 2n): new parent nodes are added here, starting from
+ (n+1). These are naturally in ascending order.
+ [2n]: we add a sentinel at the end as well.
+ There will be (2n+1) elements at the end. */
+ InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
+ *node++ = sentinel;
+ *node++ = sentinel;
+
+ for (k = n - 1; k > 0; --k) {
+ int left, right;
+ if (tree[i].total_count_ <= tree[j].total_count_) {
+ left = i;
+ ++i;
+ } else {
+ left = j;
+ ++j;
+ }
+ if (tree[i].total_count_ <= tree[j].total_count_) {
+ right = i;
+ ++i;
+ } else {
+ right = j;
+ ++j;
+ }
+ /* The sentinel node becomes the parent node. */
+ node[-1].total_count_ =
+ tree[left].total_count_ + tree[right].total_count_;
+ node[-1].index_left_ = (int16_t)left;
+ node[-1].index_right_or_value_ = (int16_t)right;
+ /* Add back the last sentinel node. */
+ *node++ = sentinel;
+ }
+ if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {
+ /* We need to pack the Huffman tree in 14 bits. If this was not
+ successful, add fake entities to the lowest values and retry. */
+ break;
+ }
+ }
+ }
+ BROTLI_FREE(m, tree);
+ }
+ BrotliConvertBitDepthsToSymbols(depth, length, bits);
+ if (count <= 4) {
+ size_t i;
+ /* value of 1 indicates a simple Huffman code */
+ BrotliWriteBits(2, 1, storage_ix, storage);
+ BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */
+
+ /* Sort */
+ for (i = 0; i < count; i++) {
+ size_t j;
+ for (j = i + 1; j < count; j++) {
+ if (depth[symbols[j]] < depth[symbols[i]]) {
+ BROTLI_SWAP(size_t, symbols, j, i);
+ }
+ }
+ }
+
+ if (count == 2) {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ } else if (count == 3) {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
+ } else {
+ BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
+ BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
+ /* tree-select */
+ BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
+ }
+ } else {
+ uint8_t previous_value = 8;
+ size_t i;
+ /* Complex Huffman Tree */
+ StoreStaticCodeLengthCode(storage_ix, storage);
+
+ /* Actual RLE coding. */
+ for (i = 0; i < length;) {
+ const uint8_t value = depth[i];
+ size_t reps = 1;
+ size_t k;
+ for (k = i + 1; k < length && depth[k] == value; ++k) {
+ ++reps;
+ }
+ i += reps;
+ if (value == 0) {
+ BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],
+ storage_ix, storage);
+ } else {
+ if (previous_value != value) {
+ BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
+ storage_ix, storage);
+ --reps;
+ }
+ if (reps < 3) {
+ while (reps != 0) {
+ reps--;
+ BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
+ storage_ix, storage);
+ }
+ } else {
+ reps -= 3;
+ BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],
+ storage_ix, storage);
+ }
+ previous_value = value;
+ }
+ }
+ }
+}
+
+static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
+ size_t i = 0;
+ for (; i < v_size; ++i) {
+ if (v[i] == value) return i;
+ }
+ return i;
+}
+
+static void MoveToFront(uint8_t* v, size_t index) {
+ uint8_t value = v[index];
+ size_t i;
+ for (i = index; i != 0; --i) {
+ v[i] = v[i - 1];
+ }
+ v[0] = value;
+}
+
+static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
+ const size_t v_size,
+ uint32_t* v_out) {
+ size_t i;
+ uint8_t mtf[256];
+ uint32_t max_value;
+ if (v_size == 0) {
+ return;
+ }
+ max_value = v_in[0];
+ for (i = 1; i < v_size; ++i) {
+ if (v_in[i] > max_value) max_value = v_in[i];
+ }
+ BROTLI_DCHECK(max_value < 256u);
+ for (i = 0; i <= max_value; ++i) {
+ mtf[i] = (uint8_t)i;
+ }
+ {
+ size_t mtf_size = max_value + 1;
+ for (i = 0; i < v_size; ++i) {
+ size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);
+ BROTLI_DCHECK(index < mtf_size);
+ v_out[i] = (uint32_t)index;
+ MoveToFront(mtf, index);
+ }
+ }
+}
+
+/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of
+ the run length plus extra bits (lower 9 bits is the prefix code and the rest
+ are the extra bits). Non-zero values in v[] are shifted by
+ *max_length_prefix. Will not create prefix codes bigger than the initial
+ value of *max_run_length_prefix. The prefix code of run length L is simply
+ Log2Floor(L) and the number of extra bits is the same as the prefix code. */
+static void RunLengthCodeZeros(const size_t in_size,
+ uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,
+ uint32_t* BROTLI_RESTRICT max_run_length_prefix) {
+ uint32_t max_reps = 0;
+ size_t i;
+ uint32_t max_prefix;
+ for (i = 0; i < in_size;) {
+ uint32_t reps = 0;
+ for (; i < in_size && v[i] != 0; ++i) ;
+ for (; i < in_size && v[i] == 0; ++i) {
+ ++reps;
+ }
+ max_reps = BROTLI_MAX(uint32_t, reps, max_reps);
+ }
+ max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;
+ max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);
+ *max_run_length_prefix = max_prefix;
+ *out_size = 0;
+ for (i = 0; i < in_size;) {
+ BROTLI_DCHECK(*out_size <= i);
+ if (v[i] != 0) {
+ v[*out_size] = v[i] + *max_run_length_prefix;
+ ++i;
+ ++(*out_size);
+ } else {
+ uint32_t reps = 1;
+ size_t k;
+ for (k = i + 1; k < in_size && v[k] == 0; ++k) {
+ ++reps;
+ }
+ i += reps;
+ while (reps != 0) {
+ if (reps < (2u << max_prefix)) {
+ uint32_t run_length_prefix = Log2FloorNonZero(reps);
+ const uint32_t extra_bits = reps - (1u << run_length_prefix);
+ v[*out_size] = run_length_prefix + (extra_bits << 9);
+ ++(*out_size);
+ break;
+ } else {
+ const uint32_t extra_bits = (1u << max_prefix) - 1u;
+ v[*out_size] = max_prefix + (extra_bits << 9);
+ reps -= (2u << max_prefix) - 1u;
+ ++(*out_size);
+ }
+ }
+ }
+ }
+}
+
+#define SYMBOL_BITS 9
+
+static void EncodeContextMap(MemoryManager* m,
+ const uint32_t* context_map,
+ size_t context_map_size,
+ size_t num_clusters,
+ HuffmanTree* tree,
+ size_t* storage_ix, uint8_t* storage) {
+ size_t i;
+ uint32_t* rle_symbols;
+ uint32_t max_run_length_prefix = 6;
+ size_t num_rle_symbols = 0;
+ uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+ static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;
+ uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+ uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+
+ StoreVarLenUint8(num_clusters - 1, storage_ix, storage);
+
+ if (num_clusters == 1) {
+ return;
+ }
+
+ rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);
+ if (BROTLI_IS_OOM(m)) return;
+ MoveToFrontTransform(context_map, context_map_size, rle_symbols);
+ RunLengthCodeZeros(context_map_size, rle_symbols,
+ &num_rle_symbols, &max_run_length_prefix);
+ memset(histogram, 0, sizeof(histogram));
+ for (i = 0; i < num_rle_symbols; ++i) {
+ ++histogram[rle_symbols[i] & kSymbolMask];
+ }
+ {
+ BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);
+ BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);
+ if (use_rle) {
+ BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);
+ }
+ }
+ BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,
+ num_clusters + max_run_length_prefix,
+ tree, depths, bits, storage_ix, storage);
+ for (i = 0; i < num_rle_symbols; ++i) {
+ const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;
+ const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;
+ BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);
+ if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {
+ BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);
+ }
+ }
+ BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */
+ BROTLI_FREE(m, rle_symbols);
+}
+
+/* Stores the block switch command with index block_ix to the bit stream. */
+static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
+ const uint32_t block_len,
+ const uint8_t block_type,
+ BROTLI_BOOL is_first_block,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);
+ size_t lencode;
+ uint32_t len_nextra;
+ uint32_t len_extra;
+ if (!is_first_block) {
+ BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],
+ storage_ix, storage);
+ }
+ GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);
+
+ BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],
+ storage_ix, storage);
+ BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);
+}
+
+/* Builds a BlockSplitCode data structure from the block split given by the
+ vector of block types and block lengths and stores it to the bit stream. */
+static void BuildAndStoreBlockSplitCode(const uint8_t* types,
+ const uint32_t* lengths,
+ const size_t num_blocks,
+ const size_t num_types,
+ HuffmanTree* tree,
+ BlockSplitCode* code,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
+ uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
+ size_t i;
+ BlockTypeCodeCalculator type_code_calculator;
+ memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));
+ memset(length_histo, 0, sizeof(length_histo));
+ InitBlockTypeCodeCalculator(&type_code_calculator);
+ for (i = 0; i < num_blocks; ++i) {
+ size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);
+ if (i != 0) ++type_histo[type_code];
+ ++length_histo[BlockLengthPrefixCode(lengths[i])];
+ }
+ StoreVarLenUint8(num_types - 1, storage_ix, storage);
+ if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */
+ BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,
+ &code->type_depths[0], &code->type_bits[0],
+ storage_ix, storage);
+ BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,
+ BROTLI_NUM_BLOCK_LEN_SYMBOLS,
+ tree, &code->length_depths[0],
+ &code->length_bits[0], storage_ix, storage);
+ StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);
+ }
+}
+
+/* Stores a context map where the histogram type is always the block type. */
+static void StoreTrivialContextMap(size_t num_types,
+ size_t context_bits,
+ HuffmanTree* tree,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ StoreVarLenUint8(num_types - 1, storage_ix, storage);
+ if (num_types > 1) {
+ size_t repeat_code = context_bits - 1u;
+ size_t repeat_bits = (1u << repeat_code) - 1u;
+ size_t alphabet_size = num_types + repeat_code;
+ uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+ uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+ uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
+ size_t i;
+ memset(histogram, 0, alphabet_size * sizeof(histogram[0]));
+ /* Write RLEMAX. */
+ BrotliWriteBits(1, 1, storage_ix, storage);
+ BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);
+ histogram[repeat_code] = (uint32_t)num_types;
+ histogram[0] = 1;
+ for (i = context_bits; i < alphabet_size; ++i) {
+ histogram[i] = 1;
+ }
+ BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,
+ tree, depths, bits, storage_ix, storage);
+ for (i = 0; i < num_types; ++i) {
+ size_t code = (i == 0 ? 0 : i + context_bits - 1);
+ BrotliWriteBits(depths[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(
+ depths[repeat_code], bits[repeat_code], storage_ix, storage);
+ BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);
+ }
+ /* Write IMTF (inverse-move-to-front) bit. */
+ BrotliWriteBits(1, 1, storage_ix, storage);
+ }
+}
+
+/* Manages the encoding of one block category (literal, command or distance). */
+typedef struct BlockEncoder {
+ size_t histogram_length_;
+ size_t num_block_types_;
+ const uint8_t* block_types_; /* Not owned. */
+ const uint32_t* block_lengths_; /* Not owned. */
+ size_t num_blocks_;
+ BlockSplitCode block_split_code_;
+ size_t block_ix_;
+ size_t block_len_;
+ size_t entropy_ix_;
+ uint8_t* depths_;
+ uint16_t* bits_;
+} BlockEncoder;
+
+static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
+ size_t num_block_types, const uint8_t* block_types,
+ const uint32_t* block_lengths, const size_t num_blocks) {
+ self->histogram_length_ = histogram_length;
+ self->num_block_types_ = num_block_types;
+ self->block_types_ = block_types;
+ self->block_lengths_ = block_lengths;
+ self->num_blocks_ = num_blocks;
+ InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);
+ self->block_ix_ = 0;
+ self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];
+ self->entropy_ix_ = 0;
+ self->depths_ = 0;
+ self->bits_ = 0;
+}
+
+static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {
+ BROTLI_FREE(m, self->depths_);
+ BROTLI_FREE(m, self->bits_);
+}
+
+/* Creates entropy codes of block lengths and block types and stores them
+ to the bit stream. */
+static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
+ HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
+ BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,
+ self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,
+ storage_ix, storage);
+}
+
+/* Stores the next symbol with the entropy code of the current block type.
+ Updates the block type and block length at block boundaries. */
+static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,
+ uint8_t* storage) {
+ if (self->block_len_ == 0) {
+ size_t block_ix = ++self->block_ix_;
+ uint32_t block_len = self->block_lengths_[block_ix];
+ uint8_t block_type = self->block_types_[block_ix];
+ self->block_len_ = block_len;
+ self->entropy_ix_ = block_type * self->histogram_length_;
+ StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
+ storage_ix, storage);
+ }
+ --self->block_len_;
+ {
+ size_t ix = self->entropy_ix_ + symbol;
+ BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
+ }
+}
+
+/* Stores the next symbol with the entropy code of the current block type and
+ context value.
+ Updates the block type and block length at block boundaries. */
+static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
+ size_t context, const uint32_t* context_map, size_t* storage_ix,
+ uint8_t* storage, const size_t context_bits) {
+ if (self->block_len_ == 0) {
+ size_t block_ix = ++self->block_ix_;
+ uint32_t block_len = self->block_lengths_[block_ix];
+ uint8_t block_type = self->block_types_[block_ix];
+ self->block_len_ = block_len;
+ self->entropy_ix_ = (size_t)block_type << context_bits;
+ StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
+ storage_ix, storage);
+ }
+ --self->block_len_;
+ {
+ size_t histo_ix = context_map[self->entropy_ix_ + context];
+ size_t ix = histo_ix * self->histogram_length_ + symbol;
+ BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
+ }
+}
+
+#define FN(X) X ## Literal
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_encoder_inc.h"
+#undef FN
+
+#define FN(X) X ## Command
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_encoder_inc.h"
+#undef FN
+
+#define FN(X) X ## Distance
+/* NOLINTNEXTLINE(build/include) */
+#include "./block_encoder_inc.h"
+#undef FN
+
+static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ storage[*storage_ix >> 3] = 0;
+}
+
+void BrotliStoreMetaBlock(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
+ const BrotliEncoderParams* params, ContextType literal_context_mode,
+ const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
+ size_t* storage_ix, uint8_t* storage) {
+
+ size_t pos = start_pos;
+ size_t i;
+ uint32_t num_distance_symbols = params->dist.alphabet_size;
+ uint32_t num_effective_distance_symbols = num_distance_symbols;
+ HuffmanTree* tree;
+ ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
+ BlockEncoder literal_enc;
+ BlockEncoder command_enc;
+ BlockEncoder distance_enc;
+ const BrotliDistanceParams* dist = &params->dist;
+ if (params->large_window &&
+ num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
+ num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
+ }
+
+ StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
+
+ tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
+ if (BROTLI_IS_OOM(m)) return;
+ InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,
+ mb->literal_split.num_types, mb->literal_split.types,
+ mb->literal_split.lengths, mb->literal_split.num_blocks);
+ InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS,
+ mb->command_split.num_types, mb->command_split.types,
+ mb->command_split.lengths, mb->command_split.num_blocks);
+ InitBlockEncoder(&distance_enc, num_effective_distance_symbols,
+ mb->distance_split.num_types, mb->distance_split.types,
+ mb->distance_split.lengths, mb->distance_split.num_blocks);
+
+ BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage);
+ BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage);
+ BuildAndStoreBlockSwitchEntropyCodes(
+ &distance_enc, tree, storage_ix, storage);
+
+ BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);
+ BrotliWriteBits(
+ 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,
+ storage_ix, storage);
+ for (i = 0; i < mb->literal_split.num_types; ++i) {
+ BrotliWriteBits(2, literal_context_mode, storage_ix, storage);
+ }
+
+ if (mb->literal_context_map_size == 0) {
+ StoreTrivialContextMap(mb->literal_histograms_size,
+ BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);
+ } else {
+ EncodeContextMap(m,
+ mb->literal_context_map, mb->literal_context_map_size,
+ mb->literal_histograms_size, tree, storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+
+ if (mb->distance_context_map_size == 0) {
+ StoreTrivialContextMap(mb->distance_histograms_size,
+ BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);
+ } else {
+ EncodeContextMap(m,
+ mb->distance_context_map, mb->distance_context_map_size,
+ mb->distance_histograms_size, tree, storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+
+ BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms,
+ mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms,
+ mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms,
+ mb->distance_histograms_size, num_distance_symbols, tree,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, tree);
+
+ for (i = 0; i < n_commands; ++i) {
+ const Command cmd = commands[i];
+ size_t cmd_code = cmd.cmd_prefix_;
+ StoreSymbol(&command_enc, cmd_code, storage_ix, storage);
+ StoreCommandExtra(&cmd, storage_ix, storage);
+ if (mb->literal_context_map_size == 0) {
+ size_t j;
+ for (j = cmd.insert_len_; j != 0; --j) {
+ StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage);
+ ++pos;
+ }
+ } else {
+ size_t j;
+ for (j = cmd.insert_len_; j != 0; --j) {
+ size_t context =
+ BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
+ uint8_t literal = input[pos & mask];
+ StoreSymbolWithContext(&literal_enc, literal, context,
+ mb->literal_context_map, storage_ix, storage,
+ BROTLI_LITERAL_CONTEXT_BITS);
+ prev_byte2 = prev_byte;
+ prev_byte = literal;
+ ++pos;
+ }
+ }
+ pos += CommandCopyLen(&cmd);
+ if (CommandCopyLen(&cmd)) {
+ prev_byte2 = input[(pos - 2) & mask];
+ prev_byte = input[(pos - 1) & mask];
+ if (cmd.cmd_prefix_ >= 128) {
+ size_t dist_code = cmd.dist_prefix_ & 0x3FF;
+ uint32_t distnumextra = cmd.dist_prefix_ >> 10;
+ uint64_t distextra = cmd.dist_extra_;
+ if (mb->distance_context_map_size == 0) {
+ StoreSymbol(&distance_enc, dist_code, storage_ix, storage);
+ } else {
+ size_t context = CommandDistanceContext(&cmd);
+ StoreSymbolWithContext(&distance_enc, dist_code, context,
+ mb->distance_context_map, storage_ix, storage,
+ BROTLI_DISTANCE_CONTEXT_BITS);
+ }
+ BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
+ }
+ }
+ }
+ CleanupBlockEncoder(m, &distance_enc);
+ CleanupBlockEncoder(m, &command_enc);
+ CleanupBlockEncoder(m, &literal_enc);
+ if (is_last) {
+ JumpToByteBoundary(storage_ix, storage);
+ }
+}
+
+static void BuildHistograms(const uint8_t* input,
+ size_t start_pos,
+ size_t mask,
+ const Command* commands,
+ size_t n_commands,
+ HistogramLiteral* lit_histo,
+ HistogramCommand* cmd_histo,
+ HistogramDistance* dist_histo) {
+ size_t pos = start_pos;
+ size_t i;
+ for (i = 0; i < n_commands; ++i) {
+ const Command cmd = commands[i];
+ size_t j;
+ HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);
+ for (j = cmd.insert_len_; j != 0; --j) {
+ HistogramAddLiteral(lit_histo, input[pos & mask]);
+ ++pos;
+ }
+ pos += CommandCopyLen(&cmd);
+ if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
+ HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);
+ }
+ }
+}
+
+static void StoreDataWithHuffmanCodes(const uint8_t* input,
+ size_t start_pos,
+ size_t mask,
+ const Command* commands,
+ size_t n_commands,
+ const uint8_t* lit_depth,
+ const uint16_t* lit_bits,
+ const uint8_t* cmd_depth,
+ const uint16_t* cmd_bits,
+ const uint8_t* dist_depth,
+ const uint16_t* dist_bits,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ size_t pos = start_pos;
+ size_t i;
+ for (i = 0; i < n_commands; ++i) {
+ const Command cmd = commands[i];
+ const size_t cmd_code = cmd.cmd_prefix_;
+ size_t j;
+ BrotliWriteBits(
+ cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);
+ StoreCommandExtra(&cmd, storage_ix, storage);
+ for (j = cmd.insert_len_; j != 0; --j) {
+ const uint8_t literal = input[pos & mask];
+ BrotliWriteBits(
+ lit_depth[literal], lit_bits[literal], storage_ix, storage);
+ ++pos;
+ }
+ pos += CommandCopyLen(&cmd);
+ if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
+ const size_t dist_code = cmd.dist_prefix_ & 0x3FF;
+ const uint32_t distnumextra = cmd.dist_prefix_ >> 10;
+ const uint32_t distextra = cmd.dist_extra_;
+ BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],
+ storage_ix, storage);
+ BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
+ }
+ }
+}
+
+void BrotliStoreMetaBlockTrivial(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ BROTLI_BOOL is_last, const BrotliEncoderParams* params,
+ const Command* commands, size_t n_commands,
+ size_t* storage_ix, uint8_t* storage) {
+ HistogramLiteral lit_histo;
+ HistogramCommand cmd_histo;
+ HistogramDistance dist_histo;
+ uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
+ uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
+ HuffmanTree* tree;
+ uint32_t num_distance_symbols = params->dist.alphabet_size;
+
+ StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
+
+ HistogramClearLiteral(&lit_histo);
+ HistogramClearCommand(&cmd_histo);
+ HistogramClearDistance(&dist_histo);
+
+ BuildHistograms(input, start_pos, mask, commands, n_commands,
+ &lit_histo, &cmd_histo, &dist_histo);
+
+ BrotliWriteBits(13, 0, storage_ix, storage);
+
+ tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
+ if (BROTLI_IS_OOM(m)) return;
+ BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,
+ BROTLI_NUM_LITERAL_SYMBOLS, tree,
+ lit_depth, lit_bits,
+ storage_ix, storage);
+ BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,
+ BROTLI_NUM_COMMAND_SYMBOLS, tree,
+ cmd_depth, cmd_bits,
+ storage_ix, storage);
+ BuildAndStoreHuffmanTree(dist_histo.data_, MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,
+ num_distance_symbols, tree,
+ dist_depth, dist_bits,
+ storage_ix, storage);
+ BROTLI_FREE(m, tree);
+ StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
+ n_commands, lit_depth, lit_bits,
+ cmd_depth, cmd_bits,
+ dist_depth, dist_bits,
+ storage_ix, storage);
+ if (is_last) {
+ JumpToByteBoundary(storage_ix, storage);
+ }
+}
+
+void BrotliStoreMetaBlockFast(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ BROTLI_BOOL is_last, const BrotliEncoderParams* params,
+ const Command* commands, size_t n_commands,
+ size_t* storage_ix, uint8_t* storage) {
+ uint32_t num_distance_symbols = params->dist.alphabet_size;
+ uint32_t distance_alphabet_bits =
+ Log2FloorNonZero(num_distance_symbols - 1) + 1;
+
+ StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
+
+ BrotliWriteBits(13, 0, storage_ix, storage);
+
+ if (n_commands <= 128) {
+ uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };
+ size_t pos = start_pos;
+ size_t num_literals = 0;
+ size_t i;
+ uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
+ for (i = 0; i < n_commands; ++i) {
+ const Command cmd = commands[i];
+ size_t j;
+ for (j = cmd.insert_len_; j != 0; --j) {
+ ++histogram[input[pos & mask]];
+ ++pos;
+ }
+ num_literals += cmd.insert_len_;
+ pos += CommandCopyLen(&cmd);
+ }
+ BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals,
+ /* max_bits = */ 8,
+ lit_depth, lit_bits,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ StoreStaticCommandHuffmanTree(storage_ix, storage);
+ StoreStaticDistanceHuffmanTree(storage_ix, storage);
+ StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
+ n_commands, lit_depth, lit_bits,
+ kStaticCommandCodeDepth,
+ kStaticCommandCodeBits,
+ kStaticDistanceCodeDepth,
+ kStaticDistanceCodeBits,
+ storage_ix, storage);
+ } else {
+ HistogramLiteral lit_histo;
+ HistogramCommand cmd_histo;
+ HistogramDistance dist_histo;
+ uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
+ uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
+ uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
+ uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
+ HistogramClearLiteral(&lit_histo);
+ HistogramClearCommand(&cmd_histo);
+ HistogramClearDistance(&dist_histo);
+ BuildHistograms(input, start_pos, mask, commands, n_commands,
+ &lit_histo, &cmd_histo, &dist_histo);
+ BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_,
+ lit_histo.total_count_,
+ /* max_bits = */ 8,
+ lit_depth, lit_bits,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_,
+ cmd_histo.total_count_,
+ /* max_bits = */ 10,
+ cmd_depth, cmd_bits,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_,
+ dist_histo.total_count_,
+ /* max_bits = */
+ distance_alphabet_bits,
+ dist_depth, dist_bits,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
+ n_commands, lit_depth, lit_bits,
+ cmd_depth, cmd_bits,
+ dist_depth, dist_bits,
+ storage_ix, storage);
+ }
+
+ if (is_last) {
+ JumpToByteBoundary(storage_ix, storage);
+ }
+}
+
+/* This is for storing uncompressed blocks (simple raw storage of
+ bytes-as-bytes). */
+void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
+ const uint8_t* BROTLI_RESTRICT input,
+ size_t position, size_t mask,
+ size_t len,
+ size_t* BROTLI_RESTRICT storage_ix,
+ uint8_t* BROTLI_RESTRICT storage) {
+ size_t masked_pos = position & mask;
+ BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);
+ JumpToByteBoundary(storage_ix, storage);
+
+ if (masked_pos + len > mask + 1) {
+ size_t len1 = mask + 1 - masked_pos;
+ memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);
+ *storage_ix += len1 << 3;
+ len -= len1;
+ masked_pos = 0;
+ }
+ memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);
+ *storage_ix += len << 3;
+
+ /* We need to clear the next 4 bytes to continue to be
+ compatible with BrotliWriteBits. */
+ BrotliWriteBitsPrepareStorage(*storage_ix, storage);
+
+ /* Since the uncompressed block itself may not be the final block, add an
+ empty one after this. */
+ if (is_final_block) {
+ BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
+ BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
+ JumpToByteBoundary(storage_ix, storage);
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.h b/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.h
new file mode 100644
index 0000000000..2ed703bf79
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/brotli_bit_stream.h
@@ -0,0 +1,84 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions to convert brotli-related data structures into the
+ brotli bit stream. The functions here operate under
+ assumption that there is enough space in the storage, i.e., there are
+ no out-of-range checks anywhere.
+
+ These functions do bit addressing into a byte array. The byte array
+ is called "storage" and the index to the bit is called storage_ix
+ in function arguments. */
+
+#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_
+#define BROTLI_ENC_BROTLI_BIT_STREAM_H_
+
+#include "../common/context.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./command.h"
+#include "./entropy_encode.h"
+#include "./memory.h"
+#include "./metablock.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* All Store functions here will use a storage_ix, which is always the bit
+ position for the current storage. */
+
+BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
+ HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);
+
+BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(
+ MemoryManager* m, const uint32_t* histogram, const size_t histogram_total,
+ const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,
+ uint8_t* storage);
+
+/* REQUIRES: length > 0 */
+/* REQUIRES: length <= (1 << 24) */
+BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
+ const BrotliEncoderParams* params, ContextType literal_context_mode,
+ const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
+ size_t* storage_ix, uint8_t* storage);
+
+/* Stores the meta-block without doing any block splitting, just collects
+ one histogram per block category and uses that for entropy coding.
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ BROTLI_BOOL is_last, const BrotliEncoderParams* params,
+ const Command* commands, size_t n_commands,
+ size_t* storage_ix, uint8_t* storage);
+
+/* Same as above, but uses static prefix codes for histograms with a only a few
+ symbols, and uses static code length prefix codes for all other histograms.
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,
+ const uint8_t* input, size_t start_pos, size_t length, size_t mask,
+ BROTLI_BOOL is_last, const BrotliEncoderParams* params,
+ const Command* commands, size_t n_commands,
+ size_t* storage_ix, uint8_t* storage);
+
+/* This is for storing uncompressed blocks (simple raw storage of
+ bytes-as-bytes).
+ REQUIRES: length > 0
+ REQUIRES: length <= (1 << 24) */
+BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(
+ BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,
+ size_t position, size_t mask, size_t len,
+ size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/cluster.c b/dviware/dvisvgm/libs/brotli/enc/cluster.c
new file mode 100644
index 0000000000..a20dfd385f
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/cluster.c
@@ -0,0 +1,56 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions for clustering similar histograms together. */
+
+#include "./cluster.h"
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./bit_cost.h" /* BrotliPopulationCost */
+#include "./fast_log.h"
+#include "./histogram.h"
+#include "./memory.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
+ const HistogramPair* p1, const HistogramPair* p2) {
+ if (p1->cost_diff != p2->cost_diff) {
+ return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
+ }
+ return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
+}
+
+/* Returns entropy reduction of the context map when we combine two clusters. */
+static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
+ size_t size_c = size_a + size_b;
+ return (double)size_a * FastLog2(size_a) +
+ (double)size_b * FastLog2(size_b) -
+ (double)size_c * FastLog2(size_c);
+}
+
+#define CODE(X) X
+
+#define FN(X) X ## Literal
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Command
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Distance
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#undef CODE
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/cluster.h b/dviware/dvisvgm/libs/brotli/enc/cluster.h
new file mode 100644
index 0000000000..bb26124d24
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/cluster.h
@@ -0,0 +1,48 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions for clustering similar histograms together. */
+
+#ifndef BROTLI_ENC_CLUSTER_H_
+#define BROTLI_ENC_CLUSTER_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./histogram.h"
+#include "./memory.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct HistogramPair {
+ uint32_t idx1;
+ uint32_t idx2;
+ double cost_combo;
+ double cost_diff;
+} HistogramPair;
+
+#define CODE(X) /* Declaration */;
+
+#define FN(X) X ## Literal
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Command
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Distance
+#include "./cluster_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#undef CODE
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_CLUSTER_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/cluster_inc.h b/dviware/dvisvgm/libs/brotli/enc/cluster_inc.h
new file mode 100644
index 0000000000..22ecb3cca8
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/cluster_inc.h
@@ -0,0 +1,317 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, CODE */
+
+#define HistogramType FN(Histogram)
+
+/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if
+ it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */
+BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
+ const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1,
+ uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,
+ size_t* num_pairs) CODE({
+ BROTLI_BOOL is_good_pair = BROTLI_FALSE;
+ HistogramPair p;
+ p.idx1 = p.idx2 = 0;
+ p.cost_diff = p.cost_combo = 0;
+ if (idx1 == idx2) {
+ return;
+ }
+ if (idx2 < idx1) {
+ uint32_t t = idx2;
+ idx2 = idx1;
+ idx1 = t;
+ }
+ p.idx1 = idx1;
+ p.idx2 = idx2;
+ p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);
+ p.cost_diff -= out[idx1].bit_cost_;
+ p.cost_diff -= out[idx2].bit_cost_;
+
+ if (out[idx1].total_count_ == 0) {
+ p.cost_combo = out[idx2].bit_cost_;
+ is_good_pair = BROTLI_TRUE;
+ } else if (out[idx2].total_count_ == 0) {
+ p.cost_combo = out[idx1].bit_cost_;
+ is_good_pair = BROTLI_TRUE;
+ } else {
+ double threshold = *num_pairs == 0 ? 1e99 :
+ BROTLI_MAX(double, 0.0, pairs[0].cost_diff);
+ HistogramType combo = out[idx1];
+ double cost_combo;
+ FN(HistogramAddHistogram)(&combo, &out[idx2]);
+ cost_combo = FN(BrotliPopulationCost)(&combo);
+ if (cost_combo < threshold - p.cost_diff) {
+ p.cost_combo = cost_combo;
+ is_good_pair = BROTLI_TRUE;
+ }
+ }
+ if (is_good_pair) {
+ p.cost_diff += p.cost_combo;
+ if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {
+ /* Replace the top of the queue if needed. */
+ if (*num_pairs < max_num_pairs) {
+ pairs[*num_pairs] = pairs[0];
+ ++(*num_pairs);
+ }
+ pairs[0] = p;
+ } else if (*num_pairs < max_num_pairs) {
+ pairs[*num_pairs] = p;
+ ++(*num_pairs);
+ }
+ }
+})
+
+BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
+ uint32_t* cluster_size,
+ uint32_t* symbols,
+ uint32_t* clusters,
+ HistogramPair* pairs,
+ size_t num_clusters,
+ size_t symbols_size,
+ size_t max_clusters,
+ size_t max_num_pairs) CODE({
+ double cost_diff_threshold = 0.0;
+ size_t min_cluster_size = 1;
+ size_t num_pairs = 0;
+
+ {
+ /* We maintain a vector of histogram pairs, with the property that the pair
+ with the maximum bit cost reduction is the first. */
+ size_t idx1;
+ for (idx1 = 0; idx1 < num_clusters; ++idx1) {
+ size_t idx2;
+ for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {
+ FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1],
+ clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);
+ }
+ }
+ }
+
+ while (num_clusters > min_cluster_size) {
+ uint32_t best_idx1;
+ uint32_t best_idx2;
+ size_t i;
+ if (pairs[0].cost_diff >= cost_diff_threshold) {
+ cost_diff_threshold = 1e99;
+ min_cluster_size = max_clusters;
+ continue;
+ }
+ /* Take the best pair from the top of heap. */
+ best_idx1 = pairs[0].idx1;
+ best_idx2 = pairs[0].idx2;
+ FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);
+ out[best_idx1].bit_cost_ = pairs[0].cost_combo;
+ cluster_size[best_idx1] += cluster_size[best_idx2];
+ for (i = 0; i < symbols_size; ++i) {
+ if (symbols[i] == best_idx2) {
+ symbols[i] = best_idx1;
+ }
+ }
+ for (i = 0; i < num_clusters; ++i) {
+ if (clusters[i] == best_idx2) {
+ memmove(&clusters[i], &clusters[i + 1],
+ (num_clusters - i - 1) * sizeof(clusters[0]));
+ break;
+ }
+ }
+ --num_clusters;
+ {
+ /* Remove pairs intersecting the just combined best pair. */
+ size_t copy_to_idx = 0;
+ for (i = 0; i < num_pairs; ++i) {
+ HistogramPair* p = &pairs[i];
+ if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||
+ p->idx1 == best_idx2 || p->idx2 == best_idx2) {
+ /* Remove invalid pair from the queue. */
+ continue;
+ }
+ if (HistogramPairIsLess(&pairs[0], p)) {
+ /* Replace the top of the queue if needed. */
+ HistogramPair front = pairs[0];
+ pairs[0] = *p;
+ pairs[copy_to_idx] = front;
+ } else {
+ pairs[copy_to_idx] = *p;
+ }
+ ++copy_to_idx;
+ }
+ num_pairs = copy_to_idx;
+ }
+
+ /* Push new pairs formed with the combined histogram to the heap. */
+ for (i = 0; i < num_clusters; ++i) {
+ FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i],
+ max_num_pairs, &pairs[0], &num_pairs);
+ }
+ }
+ return num_clusters;
+})
+
+/* What is the bit cost of moving histogram from cur_symbol to candidate. */
+BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
+ const HistogramType* histogram, const HistogramType* candidate) CODE({
+ if (histogram->total_count_ == 0) {
+ return 0.0;
+ } else {
+ HistogramType tmp = *histogram;
+ FN(HistogramAddHistogram)(&tmp, candidate);
+ return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_;
+ }
+})
+
+/* Find the best 'out' histogram for each of the 'in' histograms.
+ When called, clusters[0..num_clusters) contains the unique values from
+ symbols[0..in_size), but this property is not preserved in this function.
+ Note: we assume that out[]->bit_cost_ is already up-to-date. */
+BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
+ size_t in_size, const uint32_t* clusters, size_t num_clusters,
+ HistogramType* out, uint32_t* symbols) CODE({
+ size_t i;
+ for (i = 0; i < in_size; ++i) {
+ uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];
+ double best_bits =
+ FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]);
+ size_t j;
+ for (j = 0; j < num_clusters; ++j) {
+ const double cur_bits =
+ FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]);
+ if (cur_bits < best_bits) {
+ best_bits = cur_bits;
+ best_out = clusters[j];
+ }
+ }
+ symbols[i] = best_out;
+ }
+
+ /* Recompute each out based on raw and symbols. */
+ for (i = 0; i < num_clusters; ++i) {
+ FN(HistogramClear)(&out[clusters[i]]);
+ }
+ for (i = 0; i < in_size; ++i) {
+ FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);
+ }
+})
+
+/* Reorders elements of the out[0..length) array and changes values in
+ symbols[0..length) array in the following way:
+ * when called, symbols[] contains indexes into out[], and has N unique
+ values (possibly N < length)
+ * on return, symbols'[i] = f(symbols[i]) and
+ out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,
+ where f is a bijection between the range of symbols[] and [0..N), and
+ the first occurrences of values in symbols'[i] come in consecutive
+ increasing order.
+ Returns N, the number of unique values in symbols[]. */
+BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
+ HistogramType* out, uint32_t* symbols, size_t length) CODE({
+ static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
+ uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);
+ uint32_t next_index;
+ HistogramType* tmp;
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return 0;
+ for (i = 0; i < length; ++i) {
+ new_index[i] = kInvalidIndex;
+ }
+ next_index = 0;
+ for (i = 0; i < length; ++i) {
+ if (new_index[symbols[i]] == kInvalidIndex) {
+ new_index[symbols[i]] = next_index;
+ ++next_index;
+ }
+ }
+ /* TODO: by using idea of "cycle-sort" we can avoid allocation of
+ tmp and reduce the number of copying by the factor of 2. */
+ tmp = BROTLI_ALLOC(m, HistogramType, next_index);
+ if (BROTLI_IS_OOM(m)) return 0;
+ next_index = 0;
+ for (i = 0; i < length; ++i) {
+ if (new_index[symbols[i]] == next_index) {
+ tmp[next_index] = out[symbols[i]];
+ ++next_index;
+ }
+ symbols[i] = new_index[symbols[i]];
+ }
+ BROTLI_FREE(m, new_index);
+ for (i = 0; i < next_index; ++i) {
+ out[i] = tmp[i];
+ }
+ BROTLI_FREE(m, tmp);
+ return next_index;
+})
+
+BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
+ MemoryManager* m, const HistogramType* in, const size_t in_size,
+ size_t max_histograms, HistogramType* out, size_t* out_size,
+ uint32_t* histogram_symbols) CODE({
+ uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);
+ uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);
+ size_t num_clusters = 0;
+ const size_t max_input_histograms = 64;
+ size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;
+ /* For the first pass of clustering, we allow all pairs. */
+ HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);
+ size_t i;
+
+ if (BROTLI_IS_OOM(m)) return;
+
+ for (i = 0; i < in_size; ++i) {
+ cluster_size[i] = 1;
+ }
+
+ for (i = 0; i < in_size; ++i) {
+ out[i] = in[i];
+ out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);
+ histogram_symbols[i] = (uint32_t)i;
+ }
+
+ for (i = 0; i < in_size; i += max_input_histograms) {
+ size_t num_to_combine =
+ BROTLI_MIN(size_t, in_size - i, max_input_histograms);
+ size_t num_new_clusters;
+ size_t j;
+ for (j = 0; j < num_to_combine; ++j) {
+ clusters[num_clusters + j] = (uint32_t)(i + j);
+ }
+ num_new_clusters =
+ FN(BrotliHistogramCombine)(out, cluster_size,
+ &histogram_symbols[i],
+ &clusters[num_clusters], pairs,
+ num_to_combine, num_to_combine,
+ max_histograms, pairs_capacity);
+ num_clusters += num_new_clusters;
+ }
+
+ {
+ /* For the second pass, we limit the total number of histogram pairs.
+ After this limit is reached, we only keep searching for the best pair. */
+ size_t max_num_pairs = BROTLI_MIN(size_t,
+ 64 * num_clusters, (num_clusters / 2) * num_clusters);
+ BROTLI_ENSURE_CAPACITY(
+ m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);
+ if (BROTLI_IS_OOM(m)) return;
+
+ /* Collapse similar histograms. */
+ num_clusters = FN(BrotliHistogramCombine)(out, cluster_size,
+ histogram_symbols, clusters,
+ pairs, num_clusters, in_size,
+ max_histograms, max_num_pairs);
+ }
+ BROTLI_FREE(m, pairs);
+ BROTLI_FREE(m, cluster_size);
+ /* Find the optimal map from original histograms to the final ones. */
+ FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,
+ out, histogram_symbols);
+ BROTLI_FREE(m, clusters);
+ /* Convert the context map to a canonical form. */
+ *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);
+ if (BROTLI_IS_OOM(m)) return;
+})
+
+#undef HistogramType
diff --git a/dviware/dvisvgm/libs/brotli/enc/command.h b/dviware/dvisvgm/libs/brotli/enc/command.h
new file mode 100644
index 0000000000..1aac85689b
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/command.h
@@ -0,0 +1,190 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* This class models a sequence of literals and a backward reference copy. */
+
+#ifndef BROTLI_ENC_COMMAND_H_
+#define BROTLI_ENC_COMMAND_H_
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./fast_log.h"
+#include "./params.h"
+#include "./prefix.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
+ 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
+static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
+static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
+ 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
+static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
+ 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
+
+static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
+ if (insertlen < 6) {
+ return (uint16_t)insertlen;
+ } else if (insertlen < 130) {
+ uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;
+ return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);
+ } else if (insertlen < 2114) {
+ return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);
+ } else if (insertlen < 6210) {
+ return 21u;
+ } else if (insertlen < 22594) {
+ return 22u;
+ } else {
+ return 23u;
+ }
+}
+
+static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
+ if (copylen < 10) {
+ return (uint16_t)(copylen - 2);
+ } else if (copylen < 134) {
+ uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;
+ return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);
+ } else if (copylen < 2118) {
+ return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);
+ } else {
+ return 23u;
+ }
+}
+
+static BROTLI_INLINE uint16_t CombineLengthCodes(
+ uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {
+ uint16_t bits64 =
+ (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));
+ if (use_last_distance && inscode < 8u && copycode < 16u) {
+ return (copycode < 8u) ? bits64 : (bits64 | 64u);
+ } else {
+ /* Specification: 5 Encoding of ... (last table) */
+ /* offset = 2 * index, where index is in range [0..8] */
+ uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));
+ /* All values in specification are K * 64,
+ where K = [2, 3, 6, 4, 5, 8, 7, 9, 10],
+ i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9],
+ K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D.
+ All values in D require only 2 bits to encode.
+ Magic constant is shifted 6 bits left, to avoid final multiplication. */
+ offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);
+ return (uint16_t)(offset | bits64);
+ }
+}
+
+static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
+ BROTLI_BOOL use_last_distance,
+ uint16_t* code) {
+ uint16_t inscode = GetInsertLengthCode(insertlen);
+ uint16_t copycode = GetCopyLengthCode(copylen);
+ *code = CombineLengthCodes(inscode, copycode, use_last_distance);
+}
+
+static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
+ return kInsBase[inscode];
+}
+
+static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
+ return kInsExtra[inscode];
+}
+
+static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
+ return kCopyBase[copycode];
+}
+
+static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
+ return kCopyExtra[copycode];
+}
+
+typedef struct Command {
+ uint32_t insert_len_;
+ /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */
+ uint32_t copy_len_;
+ /* Stores distance extra bits. */
+ uint32_t dist_extra_;
+ uint16_t cmd_prefix_;
+ /* Stores distance code in low 10 bits
+ and number of extra bits in high 6 bits. */
+ uint16_t dist_prefix_;
+} Command;
+
+/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */
+static BROTLI_INLINE void InitCommand(Command* self,
+ const BrotliDistanceParams* dist, size_t insertlen,
+ size_t copylen, int copylen_code_delta, size_t distance_code) {
+ /* Don't rely on signed int representation, use honest casts. */
+ uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);
+ self->insert_len_ = (uint32_t)insertlen;
+ self->copy_len_ = (uint32_t)(copylen | (delta << 25));
+ /* The distance prefix and extra bits are stored in this Command as if
+ npostfix and ndirect were 0, they are only recomputed later after the
+ clustering if needed. */
+ PrefixEncodeCopyDistance(
+ distance_code, dist->num_direct_distance_codes,
+ dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);
+ GetLengthCode(
+ insertlen, (size_t)((int)copylen + copylen_code_delta),
+ TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);
+}
+
+static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {
+ self->insert_len_ = (uint32_t)insertlen;
+ self->copy_len_ = 4 << 25;
+ self->dist_extra_ = 0;
+ self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;
+ GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);
+}
+
+static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
+ const Command* self, const BrotliDistanceParams* dist) {
+ if ((self->dist_prefix_ & 0x3FFu) <
+ BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {
+ return self->dist_prefix_ & 0x3FFu;
+ } else {
+ uint32_t dcode = self->dist_prefix_ & 0x3FFu;
+ uint32_t nbits = self->dist_prefix_ >> 10;
+ uint32_t extra = self->dist_extra_;
+ uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;
+ uint32_t hcode = (dcode - dist->num_direct_distance_codes -
+ BROTLI_NUM_DISTANCE_SHORT_CODES) >>
+ dist->distance_postfix_bits;
+ uint32_t lcode = (dcode - dist->num_direct_distance_codes -
+ BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;
+ uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;
+ return ((offset + extra) << dist->distance_postfix_bits) + lcode +
+ dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;
+ }
+}
+
+static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {
+ uint32_t r = self->cmd_prefix_ >> 6;
+ uint32_t c = self->cmd_prefix_ & 7;
+ if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
+ return c;
+ }
+ return 3;
+}
+
+static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
+ return self->copy_len_ & 0x1FFFFFF;
+}
+
+static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {
+ uint32_t modifier = self->copy_len_ >> 25;
+ int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));
+ return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_COMMAND_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/compress_fragment.c b/dviware/dvisvgm/libs/brotli/enc/compress_fragment.c
new file mode 100644
index 0000000000..9e50b2098a
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/compress_fragment.c
@@ -0,0 +1,790 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function for fast encoding of an input fragment, independently from the input
+ history. This function uses one-pass processing: when we find a backward
+ match, we immediately emit the corresponding command and literal codes to
+ the bit stream.
+
+ Adapted from the CompressFragment() function in
+ https://github.com/google/snappy/blob/master/snappy.cc */
+
+#include "./compress_fragment.h"
+
+#include <string.h> /* memcmp, memcpy, memset */
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./brotli_bit_stream.h"
+#include "./entropy_encode.h"
+#include "./fast_log.h"
+#include "./find_match_length.h"
+#include "./memory.h"
+#include "./write_bits.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
+
+/* kHashMul32 multiplier has these properties:
+ * The multiplier must be odd. Otherwise we may lose the highest bit.
+ * No long streaks of ones or zeros.
+ * There is no effort to ensure that it is a prime, the oddity is enough
+ for this use.
+ * The number has been tuned heuristically against compression benchmarks. */
+static const uint32_t kHashMul32 = 0x1E35A7BD;
+
+static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
+ const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;
+ return (uint32_t)(h >> shift);
+}
+
+static BROTLI_INLINE uint32_t HashBytesAtOffset(
+ uint64_t v, int offset, size_t shift) {
+ BROTLI_DCHECK(offset >= 0);
+ BROTLI_DCHECK(offset <= 3);
+ {
+ const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;
+ return (uint32_t)(h >> shift);
+ }
+}
+
+static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {
+ return TO_BROTLI_BOOL(
+ BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&
+ p1[4] == p2[4]);
+}
+
+/* Builds a literal prefix code into "depths" and "bits" based on the statistics
+ of the "input" string and stores it into the bit stream.
+ Note that the prefix code here is built from the pre-LZ77 input, therefore
+ we can only approximate the statistics of the actual literal stream.
+ Moreover, for long inputs we build a histogram from a sample of the input
+ and thus have to assign a non-zero depth for each literal.
+ Returns estimated compression ratio millibytes/char for encoding given input
+ with generated code. */
+static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m,
+ const uint8_t* input,
+ const size_t input_size,
+ uint8_t depths[256],
+ uint16_t bits[256],
+ size_t* storage_ix,
+ uint8_t* storage) {
+ uint32_t histogram[256] = { 0 };
+ size_t histogram_total;
+ size_t i;
+ if (input_size < (1 << 15)) {
+ for (i = 0; i < input_size; ++i) {
+ ++histogram[input[i]];
+ }
+ histogram_total = input_size;
+ for (i = 0; i < 256; ++i) {
+ /* We weigh the first 11 samples with weight 3 to account for the
+ balancing effect of the LZ77 phase on the histogram. */
+ const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
+ histogram[i] += adjust;
+ histogram_total += adjust;
+ }
+ } else {
+ static const size_t kSampleRate = 29;
+ for (i = 0; i < input_size; i += kSampleRate) {
+ ++histogram[input[i]];
+ }
+ histogram_total = (input_size + kSampleRate - 1) / kSampleRate;
+ for (i = 0; i < 256; ++i) {
+ /* We add 1 to each population count to avoid 0 bit depths (since this is
+ only a sample and we don't know if the symbol appears or not), and we
+ weigh the first 11 samples with weight 3 to account for the balancing
+ effect of the LZ77 phase on the histogram (more frequent symbols are
+ more likely to be in backward references instead as literals). */
+ const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
+ histogram[i] += adjust;
+ histogram_total += adjust;
+ }
+ }
+ BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total,
+ /* max_bits = */ 8,
+ depths, bits, storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return 0;
+ {
+ size_t literal_ratio = 0;
+ for (i = 0; i < 256; ++i) {
+ if (histogram[i]) literal_ratio += histogram[i] * depths[i];
+ }
+ /* Estimated encoding ratio, millibytes per symbol. */
+ return (literal_ratio * 125) / histogram_total;
+ }
+}
+
+/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
+ "bits" based on "histogram" and stores it into the bit stream. */
+static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128],
+ uint8_t depth[128], uint16_t bits[128], size_t* storage_ix,
+ uint8_t* storage) {
+ /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
+ HuffmanTree tree[129];
+ uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
+ uint16_t cmd_bits[64];
+
+ BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
+ BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
+ /* We have to jump through a few hoops here in order to compute
+ the command bits because the symbols are in a different order than in
+ the full alphabet. This looks complicated, but having the symbols
+ in this order in the command bits saves a few branches in the Emit*
+ functions. */
+ memcpy(cmd_depth, depth, 24);
+ memcpy(cmd_depth + 24, depth + 40, 8);
+ memcpy(cmd_depth + 32, depth + 24, 8);
+ memcpy(cmd_depth + 40, depth + 48, 8);
+ memcpy(cmd_depth + 48, depth + 32, 8);
+ memcpy(cmd_depth + 56, depth + 56, 8);
+ BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
+ memcpy(bits, cmd_bits, 48);
+ memcpy(bits + 24, cmd_bits + 32, 16);
+ memcpy(bits + 32, cmd_bits + 48, 16);
+ memcpy(bits + 40, cmd_bits + 24, 16);
+ memcpy(bits + 48, cmd_bits + 40, 16);
+ memcpy(bits + 56, cmd_bits + 56, 16);
+ BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
+ {
+ /* Create the bit length array for the full command alphabet. */
+ size_t i;
+ memset(cmd_depth, 0, 64); /* only 64 first values were used */
+ memcpy(cmd_depth, depth, 8);
+ memcpy(cmd_depth + 64, depth + 8, 8);
+ memcpy(cmd_depth + 128, depth + 16, 8);
+ memcpy(cmd_depth + 192, depth + 24, 8);
+ memcpy(cmd_depth + 384, depth + 32, 8);
+ for (i = 0; i < 8; ++i) {
+ cmd_depth[128 + 8 * i] = depth[40 + i];
+ cmd_depth[256 + 8 * i] = depth[48 + i];
+ cmd_depth[448 + 8 * i] = depth[56 + i];
+ }
+ BrotliStoreHuffmanTree(
+ cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
+ }
+ BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
+}
+
+/* REQUIRES: insertlen < 6210 */
+static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
+ const uint8_t depth[128],
+ const uint16_t bits[128],
+ uint32_t histo[128],
+ size_t* storage_ix,
+ uint8_t* storage) {
+ if (insertlen < 6) {
+ const size_t code = insertlen + 40;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ ++histo[code];
+ } else if (insertlen < 130) {
+ const size_t tail = insertlen - 2;
+ const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
+ const size_t prefix = tail >> nbits;
+ const size_t inscode = (nbits << 1) + prefix + 42;
+ BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
+ ++histo[inscode];
+ } else if (insertlen < 2114) {
+ const size_t tail = insertlen - 66;
+ const uint32_t nbits = Log2FloorNonZero(tail);
+ const size_t code = nbits + 50;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
+ ++histo[code];
+ } else {
+ BrotliWriteBits(depth[61], bits[61], storage_ix, storage);
+ BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);
+ ++histo[61];
+ }
+}
+
+static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
+ const uint8_t depth[128],
+ const uint16_t bits[128],
+ uint32_t histo[128],
+ size_t* storage_ix,
+ uint8_t* storage) {
+ if (insertlen < 22594) {
+ BrotliWriteBits(depth[62], bits[62], storage_ix, storage);
+ BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);
+ ++histo[62];
+ } else {
+ BrotliWriteBits(depth[63], bits[63], storage_ix, storage);
+ BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);
+ ++histo[63];
+ }
+}
+
+static BROTLI_INLINE void EmitCopyLen(size_t copylen,
+ const uint8_t depth[128],
+ const uint16_t bits[128],
+ uint32_t histo[128],
+ size_t* storage_ix,
+ uint8_t* storage) {
+ if (copylen < 10) {
+ BrotliWriteBits(
+ depth[copylen + 14], bits[copylen + 14], storage_ix, storage);
+ ++histo[copylen + 14];
+ } else if (copylen < 134) {
+ const size_t tail = copylen - 6;
+ const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
+ const size_t prefix = tail >> nbits;
+ const size_t code = (nbits << 1) + prefix + 20;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
+ ++histo[code];
+ } else if (copylen < 2118) {
+ const size_t tail = copylen - 70;
+ const uint32_t nbits = Log2FloorNonZero(tail);
+ const size_t code = nbits + 28;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
+ ++histo[code];
+ } else {
+ BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
+ BrotliWriteBits(24, copylen - 2118, storage_ix, storage);
+ ++histo[39];
+ }
+}
+
+static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
+ const uint8_t depth[128],
+ const uint16_t bits[128],
+ uint32_t histo[128],
+ size_t* storage_ix,
+ uint8_t* storage) {
+ if (copylen < 12) {
+ BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);
+ ++histo[copylen - 4];
+ } else if (copylen < 72) {
+ const size_t tail = copylen - 8;
+ const uint32_t nbits = Log2FloorNonZero(tail) - 1;
+ const size_t prefix = tail >> nbits;
+ const size_t code = (nbits << 1) + prefix + 4;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
+ ++histo[code];
+ } else if (copylen < 136) {
+ const size_t tail = copylen - 8;
+ const size_t code = (tail >> 5) + 30;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(5, tail & 31, storage_ix, storage);
+ BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
+ ++histo[code];
+ ++histo[64];
+ } else if (copylen < 2120) {
+ const size_t tail = copylen - 72;
+ const uint32_t nbits = Log2FloorNonZero(tail);
+ const size_t code = nbits + 28;
+ BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
+ BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
+ BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
+ ++histo[code];
+ ++histo[64];
+ } else {
+ BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
+ BrotliWriteBits(24, copylen - 2120, storage_ix, storage);
+ BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
+ ++histo[39];
+ ++histo[64];
+ }
+}
+
+static BROTLI_INLINE void EmitDistance(size_t distance,
+ const uint8_t depth[128],
+ const uint16_t bits[128],
+ uint32_t histo[128],
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t d = distance + 3;
+ const uint32_t nbits = Log2FloorNonZero(d) - 1u;
+ const size_t prefix = (d >> nbits) & 1;
+ const size_t offset = (2 + prefix) << nbits;
+ const size_t distcode = 2 * (nbits - 1) + prefix + 80;
+ BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);
+ BrotliWriteBits(nbits, d - offset, storage_ix, storage);
+ ++histo[distcode];
+}
+
+static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,
+ const uint8_t depth[256],
+ const uint16_t bits[256],
+ size_t* storage_ix, uint8_t* storage) {
+ size_t j;
+ for (j = 0; j < len; j++) {
+ const uint8_t lit = input[j];
+ BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);
+ }
+}
+
+/* REQUIRES: len <= 1 << 24. */
+static void BrotliStoreMetaBlockHeader(
+ size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
+ uint8_t* storage) {
+ size_t nibbles = 6;
+ /* ISLAST */
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ if (len <= (1U << 16)) {
+ nibbles = 4;
+ } else if (len <= (1U << 20)) {
+ nibbles = 5;
+ }
+ BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
+ BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
+ /* ISUNCOMPRESSED */
+ BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
+}
+
+static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
+ uint8_t* array) {
+ while (n_bits > 0) {
+ size_t byte_pos = pos >> 3;
+ size_t n_unchanged_bits = pos & 7;
+ size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);
+ size_t total_bits = n_unchanged_bits + n_changed_bits;
+ uint32_t mask =
+ (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);
+ uint32_t unchanged_bits = array[byte_pos] & mask;
+ uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);
+ array[byte_pos] =
+ (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);
+ n_bits -= n_changed_bits;
+ bits >>= n_changed_bits;
+ pos += n_changed_bits;
+ }
+}
+
+static void RewindBitPosition(const size_t new_storage_ix,
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t bitpos = new_storage_ix & 7;
+ const size_t mask = (1u << bitpos) - 1;
+ storage[new_storage_ix >> 3] &= (uint8_t)mask;
+ *storage_ix = new_storage_ix;
+}
+
+static BROTLI_BOOL ShouldMergeBlock(
+ const uint8_t* data, size_t len, const uint8_t* depths) {
+ size_t histo[256] = { 0 };
+ static const size_t kSampleRate = 43;
+ size_t i;
+ for (i = 0; i < len; i += kSampleRate) {
+ ++histo[data[i]];
+ }
+ {
+ const size_t total = (len + kSampleRate - 1) / kSampleRate;
+ double r = (FastLog2(total) + 0.5) * (double)total + 200;
+ for (i = 0; i < 256; ++i) {
+ r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));
+ }
+ return TO_BROTLI_BOOL(r >= 0.0);
+ }
+}
+
+/* Acceptable loss for uncompressible speedup is 2% */
+#define MIN_RATIO 980
+
+static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
+ const uint8_t* metablock_start, const uint8_t* next_emit,
+ const size_t insertlen, const size_t literal_ratio) {
+ const size_t compressed = (size_t)(next_emit - metablock_start);
+ if (compressed * 50 > insertlen) {
+ return BROTLI_FALSE;
+ } else {
+ return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);
+ }
+}
+
+static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,
+ const size_t storage_ix_start,
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t len = (size_t)(end - begin);
+ RewindBitPosition(storage_ix_start, storage_ix, storage);
+ BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ memcpy(&storage[*storage_ix >> 3], begin, len);
+ *storage_ix += len << 3;
+ storage[*storage_ix >> 3] = 0;
+}
+
+static uint32_t kCmdHistoSeed[128] = {
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0,
+};
+
+static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
+ MemoryManager* m, const uint8_t* input, size_t input_size,
+ BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128],
+ uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
+ size_t* storage_ix, uint8_t* storage) {
+ uint32_t cmd_histo[128];
+ const uint8_t* ip_end;
+
+ /* "next_emit" is a pointer to the first byte that is not covered by a
+ previous copy. Bytes between "next_emit" and the start of the next copy or
+ the end of the input will be emitted as literal bytes. */
+ const uint8_t* next_emit = input;
+ /* Save the start of the first block for position and distance computations.
+ */
+ const uint8_t* base_ip = input;
+
+ static const size_t kFirstBlockSize = 3 << 15;
+ static const size_t kMergeBlockSize = 1 << 16;
+
+ const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
+ const size_t kMinMatchLen = 5;
+
+ const uint8_t* metablock_start = input;
+ size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
+ size_t total_block_size = block_size;
+ /* Save the bit position of the MLEN field of the meta-block header, so that
+ we can update it later if we decide to extend this meta-block. */
+ size_t mlen_storage_ix = *storage_ix + 3;
+
+ uint8_t lit_depth[256];
+ uint16_t lit_bits[256];
+
+ size_t literal_ratio;
+
+ const uint8_t* ip;
+ int last_distance;
+
+ const size_t shift = 64u - table_bits;
+
+ BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
+ /* No block splits, no contexts. */
+ BrotliWriteBits(13, 0, storage_ix, storage);
+
+ literal_ratio = BuildAndStoreLiteralPrefixCode(
+ m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+
+ {
+ /* Store the pre-compressed command and distance prefix codes. */
+ size_t i;
+ for (i = 0; i + 7 < *cmd_code_numbits; i += 8) {
+ BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage);
+ }
+ }
+ BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3],
+ storage_ix, storage);
+
+ emit_commands:
+ /* Initialize the command and distance histograms. We will gather
+ statistics of command and distance codes during the processing
+ of this block and use it to update the command and distance
+ prefix codes for the next block. */
+ memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));
+
+ /* "ip" is the input pointer. */
+ ip = input;
+ last_distance = -1;
+ ip_end = input + block_size;
+
+ if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
+ /* For the last block, we need to keep a 16 bytes margin so that we can be
+ sure that all distances are at most window size - 16.
+ For all other blocks, we only need to keep a margin of 5 bytes so that
+ we don't go over the block size with a copy. */
+ const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,
+ input_size - kInputMarginBytes);
+ const uint8_t* ip_limit = input + len_limit;
+
+ uint32_t next_hash;
+ for (next_hash = Hash(++ip, shift); ; ) {
+ /* Step 1: Scan forward in the input looking for a 5-byte-long match.
+ If we get close to exhausting the input then goto emit_remainder.
+
+ Heuristic match skipping: If 32 bytes are scanned with no matches
+ found, start looking only at every other byte. If 32 more bytes are
+ scanned, look at every third byte, etc.. When a match is found,
+ immediately go back to looking at every byte. This is a small loss
+ (~5% performance, ~0.1% density) for compressible data due to more
+ bookkeeping, but for non-compressible data (such as JPEG) it's a huge
+ win since the compressor quickly "realizes" the data is incompressible
+ and doesn't bother looking for matches everywhere.
+
+ The "skip" variable keeps track of how many bytes there are since the
+ last match; dividing it by 32 (i.e. right-shifting by five) gives the
+ number of bytes to move ahead for each iteration. */
+ uint32_t skip = 32;
+
+ const uint8_t* next_ip = ip;
+ const uint8_t* candidate;
+ BROTLI_DCHECK(next_emit < ip);
+trawl:
+ do {
+ uint32_t hash = next_hash;
+ uint32_t bytes_between_hash_lookups = skip++ >> 5;
+ BROTLI_DCHECK(hash == Hash(next_ip, shift));
+ ip = next_ip;
+ next_ip = ip + bytes_between_hash_lookups;
+ if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
+ goto emit_remainder;
+ }
+ next_hash = Hash(next_ip, shift);
+ candidate = ip - last_distance;
+ if (IsMatch(ip, candidate)) {
+ if (BROTLI_PREDICT_TRUE(candidate < ip)) {
+ table[hash] = (int)(ip - base_ip);
+ break;
+ }
+ }
+ candidate = base_ip + table[hash];
+ BROTLI_DCHECK(candidate >= base_ip);
+ BROTLI_DCHECK(candidate < ip);
+
+ table[hash] = (int)(ip - base_ip);
+ } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));
+
+ /* Check copy distance. If candidate is not feasible, continue search.
+ Checking is done outside of hot loop to reduce overhead. */
+ if (ip - candidate > MAX_DISTANCE) goto trawl;
+
+ /* Step 2: Emit the found match together with the literal bytes from
+ "next_emit" to the bit stream, and then see if we can find a next match
+ immediately afterwards. Repeat until we find no match for the input
+ without emitting some literal bytes. */
+
+ {
+ /* We have a 5-byte match at ip, and we need to emit bytes in
+ [next_emit, ip). */
+ const uint8_t* base = ip;
+ size_t matched = 5 + FindMatchLengthWithLimit(
+ candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
+ int distance = (int)(base - candidate); /* > 0 */
+ size_t insert = (size_t)(base - next_emit);
+ ip += matched;
+ BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
+ if (BROTLI_PREDICT_TRUE(insert < 6210)) {
+ EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+ } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
+ literal_ratio)) {
+ EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,
+ storage_ix, storage);
+ input_size -= (size_t)(base - input);
+ input = base;
+ next_emit = input;
+ goto next_block;
+ } else {
+ EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+ }
+ EmitLiterals(next_emit, insert, lit_depth, lit_bits,
+ storage_ix, storage);
+ if (distance == last_distance) {
+ BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);
+ ++cmd_histo[64];
+ } else {
+ EmitDistance((size_t)distance, cmd_depth, cmd_bits,
+ cmd_histo, storage_ix, storage);
+ last_distance = distance;
+ }
+ EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+
+ next_emit = ip;
+ if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
+ goto emit_remainder;
+ }
+ /* We could immediately start working at ip now, but to improve
+ compression we first update "table" with the hashes of some positions
+ within the last copy. */
+ {
+ uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
+ uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
+ uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+
+ candidate = base_ip + table[cur_hash];
+ table[cur_hash] = (int)(ip - base_ip);
+ }
+ }
+
+ while (IsMatch(ip, candidate)) {
+ /* We have a 5-byte match at ip, and no need to emit any literal bytes
+ prior to ip. */
+ const uint8_t* base = ip;
+ size_t matched = 5 + FindMatchLengthWithLimit(
+ candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
+ if (ip - candidate > MAX_DISTANCE) break;
+ ip += matched;
+ last_distance = (int)(base - candidate); /* > 0 */
+ BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
+ EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+ EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,
+ cmd_histo, storage_ix, storage);
+
+ next_emit = ip;
+ if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
+ goto emit_remainder;
+ }
+ /* We could immediately start working at ip now, but to improve
+ compression we first update "table" with the hashes of some positions
+ within the last copy. */
+ {
+ uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
+ uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
+ uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+
+ candidate = base_ip + table[cur_hash];
+ table[cur_hash] = (int)(ip - base_ip);
+ }
+ }
+
+ next_hash = Hash(++ip, shift);
+ }
+ }
+
+ emit_remainder:
+ BROTLI_DCHECK(next_emit <= ip_end);
+ input += block_size;
+ input_size -= block_size;
+ block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);
+
+ /* Decide if we want to continue this meta-block instead of emitting the
+ last insert-only command. */
+ if (input_size > 0 &&
+ total_block_size + block_size <= (1 << 20) &&
+ ShouldMergeBlock(input, block_size, lit_depth)) {
+ BROTLI_DCHECK(total_block_size > (1 << 16));
+ /* Update the size of the current meta-block and continue emitting commands.
+ We can do this because the current size and the new size both have 5
+ nibbles. */
+ total_block_size += block_size;
+ UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);
+ goto emit_commands;
+ }
+
+ /* Emit the remaining bytes as literals. */
+ if (next_emit < ip_end) {
+ const size_t insert = (size_t)(ip_end - next_emit);
+ if (BROTLI_PREDICT_TRUE(insert < 6210)) {
+ EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+ EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);
+ } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
+ literal_ratio)) {
+ EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,
+ storage_ix, storage);
+ } else {
+ EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
+ storage_ix, storage);
+ EmitLiterals(next_emit, insert, lit_depth, lit_bits,
+ storage_ix, storage);
+ }
+ }
+ next_emit = ip_end;
+
+next_block:
+ /* If we have more data, write a new meta-block header and prefix codes and
+ then continue emitting commands. */
+ if (input_size > 0) {
+ metablock_start = input;
+ block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
+ total_block_size = block_size;
+ /* Save the bit position of the MLEN field of the meta-block header, so that
+ we can update it later if we decide to extend this meta-block. */
+ mlen_storage_ix = *storage_ix + 3;
+ BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
+ /* No block splits, no contexts. */
+ BrotliWriteBits(13, 0, storage_ix, storage);
+ literal_ratio = BuildAndStoreLiteralPrefixCode(
+ m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
+ storage_ix, storage);
+ goto emit_commands;
+ }
+
+ if (!is_last) {
+ /* If this is not the last block, update the command and distance prefix
+ codes for the next block and store the compressed forms. */
+ cmd_code[0] = 0;
+ *cmd_code_numbits = 0;
+ BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
+ cmd_code_numbits, cmd_code);
+ }
+}
+
+#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)
+
+#define BAKE_METHOD_PARAM_(B) \
+static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \
+ MemoryManager* m, const uint8_t* input, size_t input_size, \
+ BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \
+ uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \
+ size_t* storage_ix, uint8_t* storage) { \
+ BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \
+ cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \
+}
+FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
+#undef BAKE_METHOD_PARAM_
+
+void BrotliCompressFragmentFast(
+ MemoryManager* m, const uint8_t* input, size_t input_size,
+ BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128],
+ uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t initial_storage_ix = *storage_ix;
+ const size_t table_bits = Log2FloorNonZero(table_size);
+
+ if (input_size == 0) {
+ BROTLI_DCHECK(is_last);
+ BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
+ BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ return;
+ }
+
+ switch (table_bits) {
+#define CASE_(B) \
+ case B: \
+ BrotliCompressFragmentFastImpl ## B( \
+ m, input, input_size, is_last, table, cmd_depth, cmd_bits, \
+ cmd_code_numbits, cmd_code, storage_ix, storage); \
+ break;
+ FOR_TABLE_BITS_(CASE_)
+#undef CASE_
+ default: BROTLI_DCHECK(0); break;
+ }
+
+ /* If output is larger than single uncompressed block, rewrite it. */
+ if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
+ EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,
+ storage_ix, storage);
+ }
+
+ if (is_last) {
+ BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
+ BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ }
+}
+
+#undef FOR_TABLE_BITS_
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/compress_fragment.h b/dviware/dvisvgm/libs/brotli/enc/compress_fragment.h
new file mode 100644
index 0000000000..80007f5dca
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/compress_fragment.h
@@ -0,0 +1,61 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function for fast encoding of an input fragment, independently from the input
+ history. This function uses one-pass processing: when we find a backward
+ match, we immediately emit the corresponding command and literal codes to
+ the bit stream. */
+
+#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_
+#define BROTLI_ENC_COMPRESS_FRAGMENT_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./memory.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Compresses "input" string to the "*storage" buffer as one or more complete
+ meta-blocks, and updates the "*storage_ix" bit position.
+
+ If "is_last" is 1, emits an additional empty last meta-block.
+
+ "cmd_depth" and "cmd_bits" contain the command and distance prefix codes
+ (see comment in encode.h) used for the encoding of this input fragment.
+ If "is_last" is 0, they are updated to reflect the statistics
+ of this input fragment, to be used for the encoding of the next fragment.
+
+ "*cmd_code_numbits" is the number of bits of the compressed representation
+ of the command and distance prefix codes, and "cmd_code" is an array of
+ at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed
+ command and distance prefix codes. If "is_last" is 0, these are also
+ updated to represent the updated "cmd_depth" and "cmd_bits".
+
+ REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
+ REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
+ REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
+ REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two
+ OUTPUT: maximal copy distance <= |input_size|
+ OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
+BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m,
+ const uint8_t* input,
+ size_t input_size,
+ BROTLI_BOOL is_last,
+ int* table, size_t table_size,
+ uint8_t cmd_depth[128],
+ uint16_t cmd_bits[128],
+ size_t* cmd_code_numbits,
+ uint8_t* cmd_code,
+ size_t* storage_ix,
+ uint8_t* storage);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.c b/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.c
new file mode 100644
index 0000000000..f8a5606384
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.c
@@ -0,0 +1,645 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function for fast encoding of an input fragment, independently from the input
+ history. This function uses two-pass processing: in the first pass we save
+ the found backward matches and literal bytes into a buffer, and in the
+ second pass we emit them into the bit stream using prefix codes built based
+ on the actual command and literal byte histograms. */
+
+#include "./compress_fragment_two_pass.h"
+
+#include <string.h> /* memcmp, memcpy, memset */
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./bit_cost.h"
+#include "./brotli_bit_stream.h"
+#include "./entropy_encode.h"
+#include "./fast_log.h"
+#include "./find_match_length.h"
+#include "./memory.h"
+#include "./write_bits.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
+
+/* kHashMul32 multiplier has these properties:
+ * The multiplier must be odd. Otherwise we may lose the highest bit.
+ * No long streaks of ones or zeros.
+ * There is no effort to ensure that it is a prime, the oddity is enough
+ for this use.
+ * The number has been tuned heuristically against compression benchmarks. */
+static const uint32_t kHashMul32 = 0x1E35A7BD;
+
+static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
+ size_t shift, size_t length) {
+ const uint64_t h =
+ (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;
+ return (uint32_t)(h >> shift);
+}
+
+static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
+ size_t shift, size_t length) {
+ BROTLI_DCHECK(offset <= 8 - length);
+ {
+ const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;
+ return (uint32_t)(h >> shift);
+ }
+}
+
+static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,
+ size_t length) {
+ if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {
+ if (length == 4) return BROTLI_TRUE;
+ return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);
+ }
+ return BROTLI_FALSE;
+}
+
+/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
+ "bits" based on "histogram" and stores it into the bit stream. */
+static void BuildAndStoreCommandPrefixCode(
+ const uint32_t histogram[128],
+ uint8_t depth[128], uint16_t bits[128],
+ size_t* storage_ix, uint8_t* storage) {
+ /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
+ HuffmanTree tree[129];
+ uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
+ uint16_t cmd_bits[64];
+ BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
+ BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
+ /* We have to jump through a few hoops here in order to compute
+ the command bits because the symbols are in a different order than in
+ the full alphabet. This looks complicated, but having the symbols
+ in this order in the command bits saves a few branches in the Emit*
+ functions. */
+ memcpy(cmd_depth, depth + 24, 24);
+ memcpy(cmd_depth + 24, depth, 8);
+ memcpy(cmd_depth + 32, depth + 48, 8);
+ memcpy(cmd_depth + 40, depth + 8, 8);
+ memcpy(cmd_depth + 48, depth + 56, 8);
+ memcpy(cmd_depth + 56, depth + 16, 8);
+ BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
+ memcpy(bits, cmd_bits + 24, 16);
+ memcpy(bits + 8, cmd_bits + 40, 16);
+ memcpy(bits + 16, cmd_bits + 56, 16);
+ memcpy(bits + 24, cmd_bits, 48);
+ memcpy(bits + 48, cmd_bits + 32, 16);
+ memcpy(bits + 56, cmd_bits + 48, 16);
+ BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
+ {
+ /* Create the bit length array for the full command alphabet. */
+ size_t i;
+ memset(cmd_depth, 0, 64); /* only 64 first values were used */
+ memcpy(cmd_depth, depth + 24, 8);
+ memcpy(cmd_depth + 64, depth + 32, 8);
+ memcpy(cmd_depth + 128, depth + 40, 8);
+ memcpy(cmd_depth + 192, depth + 48, 8);
+ memcpy(cmd_depth + 384, depth + 56, 8);
+ for (i = 0; i < 8; ++i) {
+ cmd_depth[128 + 8 * i] = depth[i];
+ cmd_depth[256 + 8 * i] = depth[8 + i];
+ cmd_depth[448 + 8 * i] = depth[16 + i];
+ }
+ BrotliStoreHuffmanTree(
+ cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
+ }
+ BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
+}
+
+static BROTLI_INLINE void EmitInsertLen(
+ uint32_t insertlen, uint32_t** commands) {
+ if (insertlen < 6) {
+ **commands = insertlen;
+ } else if (insertlen < 130) {
+ const uint32_t tail = insertlen - 2;
+ const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
+ const uint32_t prefix = tail >> nbits;
+ const uint32_t inscode = (nbits << 1) + prefix + 2;
+ const uint32_t extra = tail - (prefix << nbits);
+ **commands = inscode | (extra << 8);
+ } else if (insertlen < 2114) {
+ const uint32_t tail = insertlen - 66;
+ const uint32_t nbits = Log2FloorNonZero(tail);
+ const uint32_t code = nbits + 10;
+ const uint32_t extra = tail - (1u << nbits);
+ **commands = code | (extra << 8);
+ } else if (insertlen < 6210) {
+ const uint32_t extra = insertlen - 2114;
+ **commands = 21 | (extra << 8);
+ } else if (insertlen < 22594) {
+ const uint32_t extra = insertlen - 6210;
+ **commands = 22 | (extra << 8);
+ } else {
+ const uint32_t extra = insertlen - 22594;
+ **commands = 23 | (extra << 8);
+ }
+ ++(*commands);
+}
+
+static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {
+ if (copylen < 10) {
+ **commands = (uint32_t)(copylen + 38);
+ } else if (copylen < 134) {
+ const size_t tail = copylen - 6;
+ const size_t nbits = Log2FloorNonZero(tail) - 1;
+ const size_t prefix = tail >> nbits;
+ const size_t code = (nbits << 1) + prefix + 44;
+ const size_t extra = tail - (prefix << nbits);
+ **commands = (uint32_t)(code | (extra << 8));
+ } else if (copylen < 2118) {
+ const size_t tail = copylen - 70;
+ const size_t nbits = Log2FloorNonZero(tail);
+ const size_t code = nbits + 52;
+ const size_t extra = tail - ((size_t)1 << nbits);
+ **commands = (uint32_t)(code | (extra << 8));
+ } else {
+ const size_t extra = copylen - 2118;
+ **commands = (uint32_t)(63 | (extra << 8));
+ }
+ ++(*commands);
+}
+
+static BROTLI_INLINE void EmitCopyLenLastDistance(
+ size_t copylen, uint32_t** commands) {
+ if (copylen < 12) {
+ **commands = (uint32_t)(copylen + 20);
+ ++(*commands);
+ } else if (copylen < 72) {
+ const size_t tail = copylen - 8;
+ const size_t nbits = Log2FloorNonZero(tail) - 1;
+ const size_t prefix = tail >> nbits;
+ const size_t code = (nbits << 1) + prefix + 28;
+ const size_t extra = tail - (prefix << nbits);
+ **commands = (uint32_t)(code | (extra << 8));
+ ++(*commands);
+ } else if (copylen < 136) {
+ const size_t tail = copylen - 8;
+ const size_t code = (tail >> 5) + 54;
+ const size_t extra = tail & 31;
+ **commands = (uint32_t)(code | (extra << 8));
+ ++(*commands);
+ **commands = 64;
+ ++(*commands);
+ } else if (copylen < 2120) {
+ const size_t tail = copylen - 72;
+ const size_t nbits = Log2FloorNonZero(tail);
+ const size_t code = nbits + 52;
+ const size_t extra = tail - ((size_t)1 << nbits);
+ **commands = (uint32_t)(code | (extra << 8));
+ ++(*commands);
+ **commands = 64;
+ ++(*commands);
+ } else {
+ const size_t extra = copylen - 2120;
+ **commands = (uint32_t)(63 | (extra << 8));
+ ++(*commands);
+ **commands = 64;
+ ++(*commands);
+ }
+}
+
+static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {
+ uint32_t d = distance + 3;
+ uint32_t nbits = Log2FloorNonZero(d) - 1;
+ const uint32_t prefix = (d >> nbits) & 1;
+ const uint32_t offset = (2 + prefix) << nbits;
+ const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;
+ uint32_t extra = d - offset;
+ **commands = distcode | (extra << 8);
+ ++(*commands);
+}
+
+/* REQUIRES: len <= 1 << 24. */
+static void BrotliStoreMetaBlockHeader(
+ size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
+ uint8_t* storage) {
+ size_t nibbles = 6;
+ /* ISLAST */
+ BrotliWriteBits(1, 0, storage_ix, storage);
+ if (len <= (1U << 16)) {
+ nibbles = 4;
+ } else if (len <= (1U << 20)) {
+ nibbles = 5;
+ }
+ BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
+ BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
+ /* ISUNCOMPRESSED */
+ BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
+}
+
+static BROTLI_INLINE void CreateCommands(const uint8_t* input,
+ size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,
+ size_t table_bits, size_t min_match,
+ uint8_t** literals, uint32_t** commands) {
+ /* "ip" is the input pointer. */
+ const uint8_t* ip = input;
+ const size_t shift = 64u - table_bits;
+ const uint8_t* ip_end = input + block_size;
+ /* "next_emit" is a pointer to the first byte that is not covered by a
+ previous copy. Bytes between "next_emit" and the start of the next copy or
+ the end of the input will be emitted as literal bytes. */
+ const uint8_t* next_emit = input;
+
+ int last_distance = -1;
+ const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
+
+ if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
+ /* For the last block, we need to keep a 16 bytes margin so that we can be
+ sure that all distances are at most window size - 16.
+ For all other blocks, we only need to keep a margin of 5 bytes so that
+ we don't go over the block size with a copy. */
+ const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,
+ input_size - kInputMarginBytes);
+ const uint8_t* ip_limit = input + len_limit;
+
+ uint32_t next_hash;
+ for (next_hash = Hash(++ip, shift, min_match); ; ) {
+ /* Step 1: Scan forward in the input looking for a 6-byte-long match.
+ If we get close to exhausting the input then goto emit_remainder.
+
+ Heuristic match skipping: If 32 bytes are scanned with no matches
+ found, start looking only at every other byte. If 32 more bytes are
+ scanned, look at every third byte, etc.. When a match is found,
+ immediately go back to looking at every byte. This is a small loss
+ (~5% performance, ~0.1% density) for compressible data due to more
+ bookkeeping, but for non-compressible data (such as JPEG) it's a huge
+ win since the compressor quickly "realizes" the data is incompressible
+ and doesn't bother looking for matches everywhere.
+
+ The "skip" variable keeps track of how many bytes there are since the
+ last match; dividing it by 32 (ie. right-shifting by five) gives the
+ number of bytes to move ahead for each iteration. */
+ uint32_t skip = 32;
+
+ const uint8_t* next_ip = ip;
+ const uint8_t* candidate;
+
+ BROTLI_DCHECK(next_emit < ip);
+trawl:
+ do {
+ uint32_t hash = next_hash;
+ uint32_t bytes_between_hash_lookups = skip++ >> 5;
+ ip = next_ip;
+ BROTLI_DCHECK(hash == Hash(ip, shift, min_match));
+ next_ip = ip + bytes_between_hash_lookups;
+ if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
+ goto emit_remainder;
+ }
+ next_hash = Hash(next_ip, shift, min_match);
+ candidate = ip - last_distance;
+ if (IsMatch(ip, candidate, min_match)) {
+ if (BROTLI_PREDICT_TRUE(candidate < ip)) {
+ table[hash] = (int)(ip - base_ip);
+ break;
+ }
+ }
+ candidate = base_ip + table[hash];
+ BROTLI_DCHECK(candidate >= base_ip);
+ BROTLI_DCHECK(candidate < ip);
+
+ table[hash] = (int)(ip - base_ip);
+ } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));
+
+ /* Check copy distance. If candidate is not feasible, continue search.
+ Checking is done outside of hot loop to reduce overhead. */
+ if (ip - candidate > MAX_DISTANCE) goto trawl;
+
+ /* Step 2: Emit the found match together with the literal bytes from
+ "next_emit", and then see if we can find a next match immediately
+ afterwards. Repeat until we find no match for the input
+ without emitting some literal bytes. */
+
+ {
+ /* We have a 6-byte match at ip, and we need to emit bytes in
+ [next_emit, ip). */
+ const uint8_t* base = ip;
+ size_t matched = min_match + FindMatchLengthWithLimit(
+ candidate + min_match, ip + min_match,
+ (size_t)(ip_end - ip) - min_match);
+ int distance = (int)(base - candidate); /* > 0 */
+ int insert = (int)(base - next_emit);
+ ip += matched;
+ BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
+ EmitInsertLen((uint32_t)insert, commands);
+ memcpy(*literals, next_emit, (size_t)insert);
+ *literals += insert;
+ if (distance == last_distance) {
+ **commands = 64;
+ ++(*commands);
+ } else {
+ EmitDistance((uint32_t)distance, commands);
+ last_distance = distance;
+ }
+ EmitCopyLenLastDistance(matched, commands);
+
+ next_emit = ip;
+ if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
+ goto emit_remainder;
+ }
+ {
+ /* We could immediately start working at ip now, but to improve
+ compression we first update "table" with the hashes of some
+ positions within the last copy. */
+ uint64_t input_bytes;
+ uint32_t cur_hash;
+ uint32_t prev_hash;
+ if (min_match == 4) {
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
+ cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+ } else {
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 5);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 4);
+ prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
+ cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+ }
+
+ candidate = base_ip + table[cur_hash];
+ table[cur_hash] = (int)(ip - base_ip);
+ }
+ }
+
+ while (ip - candidate <= MAX_DISTANCE &&
+ IsMatch(ip, candidate, min_match)) {
+ /* We have a 6-byte match at ip, and no need to emit any
+ literal bytes prior to ip. */
+ const uint8_t* base = ip;
+ size_t matched = min_match + FindMatchLengthWithLimit(
+ candidate + min_match, ip + min_match,
+ (size_t)(ip_end - ip) - min_match);
+ ip += matched;
+ last_distance = (int)(base - candidate); /* > 0 */
+ BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
+ EmitCopyLen(matched, commands);
+ EmitDistance((uint32_t)last_distance, commands);
+
+ next_emit = ip;
+ if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
+ goto emit_remainder;
+ }
+ {
+ /* We could immediately start working at ip now, but to improve
+ compression we first update "table" with the hashes of some
+ positions within the last copy. */
+ uint64_t input_bytes;
+ uint32_t cur_hash;
+ uint32_t prev_hash;
+ if (min_match == 4) {
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
+ cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+ } else {
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 5);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 4);
+ prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 3);
+ input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
+ cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
+ prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 2);
+ prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
+ table[prev_hash] = (int)(ip - base_ip - 1);
+ }
+
+ candidate = base_ip + table[cur_hash];
+ table[cur_hash] = (int)(ip - base_ip);
+ }
+ }
+
+ next_hash = Hash(++ip, shift, min_match);
+ }
+ }
+
+emit_remainder:
+ BROTLI_DCHECK(next_emit <= ip_end);
+ /* Emit the remaining bytes as literals. */
+ if (next_emit < ip_end) {
+ const uint32_t insert = (uint32_t)(ip_end - next_emit);
+ EmitInsertLen(insert, commands);
+ memcpy(*literals, next_emit, insert);
+ *literals += insert;
+ }
+}
+
+static void StoreCommands(MemoryManager* m,
+ const uint8_t* literals, const size_t num_literals,
+ const uint32_t* commands, const size_t num_commands,
+ size_t* storage_ix, uint8_t* storage) {
+ static const uint32_t kNumExtraBits[128] = {
+ 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
+ 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,
+ 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
+ };
+ static const uint32_t kInsertOffset[24] = {
+ 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578,
+ 1090, 2114, 6210, 22594,
+ };
+
+ uint8_t lit_depths[256];
+ uint16_t lit_bits[256];
+ uint32_t lit_histo[256] = { 0 };
+ uint8_t cmd_depths[128] = { 0 };
+ uint16_t cmd_bits[128] = { 0 };
+ uint32_t cmd_histo[128] = { 0 };
+ size_t i;
+ for (i = 0; i < num_literals; ++i) {
+ ++lit_histo[literals[i]];
+ }
+ BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals,
+ /* max_bits = */ 8,
+ lit_depths, lit_bits,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+
+ for (i = 0; i < num_commands; ++i) {
+ const uint32_t code = commands[i] & 0xFF;
+ BROTLI_DCHECK(code < 128);
+ ++cmd_histo[code];
+ }
+ cmd_histo[1] += 1;
+ cmd_histo[2] += 1;
+ cmd_histo[64] += 1;
+ cmd_histo[84] += 1;
+ BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits,
+ storage_ix, storage);
+
+ for (i = 0; i < num_commands; ++i) {
+ const uint32_t cmd = commands[i];
+ const uint32_t code = cmd & 0xFF;
+ const uint32_t extra = cmd >> 8;
+ BROTLI_DCHECK(code < 128);
+ BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage);
+ BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);
+ if (code < 24) {
+ const uint32_t insert = kInsertOffset[code] + extra;
+ uint32_t j;
+ for (j = 0; j < insert; ++j) {
+ const uint8_t lit = *literals;
+ BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage);
+ ++literals;
+ }
+ }
+ }
+}
+
+/* Acceptable loss for uncompressible speedup is 2% */
+#define MIN_RATIO 0.98
+#define SAMPLE_RATE 43
+
+static BROTLI_BOOL ShouldCompress(
+ const uint8_t* input, size_t input_size, size_t num_literals) {
+ double corpus_size = (double)input_size;
+ if (num_literals < MIN_RATIO * corpus_size) {
+ return BROTLI_TRUE;
+ } else {
+ uint32_t literal_histo[256] = { 0 };
+ const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;
+ size_t i;
+ for (i = 0; i < input_size; i += SAMPLE_RATE) {
+ ++literal_histo[input[i]];
+ }
+ return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost);
+ }
+}
+
+static void RewindBitPosition(const size_t new_storage_ix,
+ size_t* storage_ix, uint8_t* storage) {
+ const size_t bitpos = new_storage_ix & 7;
+ const size_t mask = (1u << bitpos) - 1;
+ storage[new_storage_ix >> 3] &= (uint8_t)mask;
+ *storage_ix = new_storage_ix;
+}
+
+static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,
+ size_t* storage_ix, uint8_t* storage) {
+ BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ memcpy(&storage[*storage_ix >> 3], input, input_size);
+ *storage_ix += input_size << 3;
+ storage[*storage_ix >> 3] = 0;
+}
+
+static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
+ MemoryManager* m, const uint8_t* input, size_t input_size,
+ BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
+ int* table, size_t table_bits, size_t min_match,
+ size_t* storage_ix, uint8_t* storage) {
+ /* Save the start of the first block for position and distance computations.
+ */
+ const uint8_t* base_ip = input;
+ BROTLI_UNUSED(is_last);
+
+ while (input_size > 0) {
+ size_t block_size =
+ BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);
+ uint32_t* commands = command_buf;
+ uint8_t* literals = literal_buf;
+ size_t num_literals;
+ CreateCommands(input, block_size, input_size, base_ip, table,
+ table_bits, min_match, &literals, &commands);
+ num_literals = (size_t)(literals - literal_buf);
+ if (ShouldCompress(input, block_size, num_literals)) {
+ const size_t num_commands = (size_t)(commands - command_buf);
+ BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
+ /* No block splits, no contexts. */
+ BrotliWriteBits(13, 0, storage_ix, storage);
+ StoreCommands(m, literal_buf, num_literals, command_buf, num_commands,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ } else {
+ /* Since we did not find many backward references and the entropy of
+ the data is close to 8 bits, we can simply emit an uncompressed block.
+ This makes compression speed of uncompressible data about 3x faster. */
+ EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);
+ }
+ input += block_size;
+ input_size -= block_size;
+ }
+}
+
+#define FOR_TABLE_BITS_(X) \
+ X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)
+
+#define BAKE_METHOD_PARAM_(B) \
+static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \
+ MemoryManager* m, const uint8_t* input, size_t input_size, \
+ BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \
+ int* table, size_t* storage_ix, uint8_t* storage) { \
+ size_t min_match = (B <= 15) ? 4 : 6; \
+ BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\
+ literal_buf, table, B, min_match, storage_ix, storage); \
+}
+FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
+#undef BAKE_METHOD_PARAM_
+
+void BrotliCompressFragmentTwoPass(
+ MemoryManager* m, const uint8_t* input, size_t input_size,
+ BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
+ int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {
+ const size_t initial_storage_ix = *storage_ix;
+ const size_t table_bits = Log2FloorNonZero(table_size);
+ switch (table_bits) {
+#define CASE_(B) \
+ case B: \
+ BrotliCompressFragmentTwoPassImpl ## B( \
+ m, input, input_size, is_last, command_buf, \
+ literal_buf, table, storage_ix, storage); \
+ break;
+ FOR_TABLE_BITS_(CASE_)
+#undef CASE_
+ default: BROTLI_DCHECK(0); break;
+ }
+
+ /* If output is larger than single uncompressed block, rewrite it. */
+ if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
+ RewindBitPosition(initial_storage_ix, storage_ix, storage);
+ EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);
+ }
+
+ if (is_last) {
+ BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
+ BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ }
+}
+
+#undef FOR_TABLE_BITS_
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.h b/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.h
new file mode 100644
index 0000000000..928677df42
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/compress_fragment_two_pass.h
@@ -0,0 +1,54 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function for fast encoding of an input fragment, independently from the input
+ history. This function uses two-pass processing: in the first pass we save
+ the found backward matches and literal bytes into a buffer, and in the
+ second pass we emit them into the bit stream using prefix codes built based
+ on the actual command and literal byte histograms. */
+
+#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
+#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./memory.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;
+
+/* Compresses "input" string to the "*storage" buffer as one or more complete
+ meta-blocks, and updates the "*storage_ix" bit position.
+
+ If "is_last" is 1, emits an additional empty last meta-block.
+
+ REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
+ REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
+ REQUIRES: "command_buf" and "literal_buf" point to at least
+ kCompressFragmentTwoPassBlockSize long arrays.
+ REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
+ REQUIRES: "table_size" is a power of two
+ OUTPUT: maximal copy distance <= |input_size|
+ OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
+BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m,
+ const uint8_t* input,
+ size_t input_size,
+ BROTLI_BOOL is_last,
+ uint32_t* command_buf,
+ uint8_t* literal_buf,
+ int* table,
+ size_t table_size,
+ size_t* storage_ix,
+ uint8_t* storage);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.c b/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.c
new file mode 100644
index 0000000000..3677d7ddb4
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.c
@@ -0,0 +1,1120 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Hash table on the 4-byte prefixes of static dictionary words. */
+
+#include "../common/platform.h"
+#include "./dictionary_hash.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = {
+32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292
+,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0
+,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0
+,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206
+,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934
+,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0
+,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936,
+3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0
+,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0
+,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705,
+17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0
+,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0
+,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0,
+0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0
+,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0
+,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914
+,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633,
+965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0,
+0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0
+,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512,
+25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0,
+0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0,
+16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794,
+16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0,
+25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768
+,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0,
+21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0,
+29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318,
+0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0
+,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0,
+27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116,
+0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0,
+0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0,
+26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0
+,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016,
+55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0,
+28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0,
+13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077,
+0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0,
+0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009
+,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0
+,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626,
+1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848,
+7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0
+,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0
+,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0,
+31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0,
+50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0,
+25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0
+,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447
+,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0,
+16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0
+,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0
+,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0,
+0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0
+,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0,
+5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0,
+0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0,
+6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975
+,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0,
+0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0
+,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0,
+20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,
+0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0
+,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732
+,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592,
+57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0,
+0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0,
+45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0,
+0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0,
+0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790
+,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192,
+453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499
+,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0,
+9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0,
+2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293,
+0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433,
+61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0,
+0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0
+,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0,
+26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0,
+5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0
+,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0
+,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0,
+16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0
+,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0
+,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0,
+0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0,
+0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027,
+9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336,
+64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0,
+21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0,
+38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0
+,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0,
+0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519,
+0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0,
+0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0,
+24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0
+,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0,
+23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718,
+0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815,
+0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0,
+34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0
+,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0
+,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0
+,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0
+,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0
+,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0,
+0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337,
+17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0
+,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237,
+12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0,
+0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929
+,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0,
+28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685
+,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0,
+0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0
+,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883,
+1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0
+,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638
+,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405
+,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176,
+57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665
+,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0
+,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0
+,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0,
+0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0,
+53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0,
+20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0,
+26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0,
+4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0,
+7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0
+,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0,
+24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0
+,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116,
+292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505,
+15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0,
+0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0
+,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0
+,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0
+,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871,
+0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0
+,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0,
+37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0,
+10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0
+,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0
+,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282
+,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0,
+2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0,
+3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0
+,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0,
+63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0,
+0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0,
+0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0,
+19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248
+,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0
+,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593
+,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967,
+0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0,
+0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0
+,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0
+,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0,
+23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767,
+0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806,
+16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0,
+0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439,
+15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0,
+23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567
+,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0,
+0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0,
+9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0,
+39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0,
+23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0
+,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0
+,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0,
+0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0
+,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571,
+13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0,
+0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563,
+0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601,
+35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0,
+0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0
+,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0,
+21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0,
+4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720,
+26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0
+,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0,
+46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0,
+0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0
+,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0
+,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0,
+27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648,
+5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625,
+1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0,
+14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0,
+15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660,
+21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637,
+0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171,
+4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0,
+20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0,
+0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556
+,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0,
+0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0,
+0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910,
+0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0,
+0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373,
+10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0,
+0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0
+,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0,
+42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0
+,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813
+,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0
+,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0,
+23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199
+,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0,
+26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0
+,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960,
+8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764,
+9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0,
+9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470
+,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0
+,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884,
+9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025,
+389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032,
+21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0,
+11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206,
+3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0
+,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0,
+0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0,
+30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0,
+13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0
+,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338,
+10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895,
+15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0,
+0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0,
+0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0,
+17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0
+,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0,
+14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0
+,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052,
+0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0,
+24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233,
+1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0
+,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003
+,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0,
+6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0,
+40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0,
+5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0
+,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0
+,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0,
+47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0,
+25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0,
+0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0,
+10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0
+,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0
+,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0
+,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0,
+0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0,
+1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0,
+14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0
+,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0,
+0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0
+,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0,
+22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735,
+0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0
+,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0,
+29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0,
+25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0
+,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182,
+32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0,
+21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0,
+23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0
+,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0
+,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0
+,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0,
+0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0,
+18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0,
+617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823,
+0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0,
+0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0
+,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0,
+16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743
+,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0,
+0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0,
+0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0,
+0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0,
+0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644
+,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003
+,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0,
+0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087,
+0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0,
+0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0,
+0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0
+,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0,
+0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021,
+0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110
+,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0
+,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0,
+0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0
+,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0
+,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0
+,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0
+,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0,
+0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0,
+462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0,
+54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0,
+14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0
+,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0,
+0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0
+,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0,
+0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0,
+0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0
+,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271,
+3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0,
+0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219
+,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0,
+721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0
+,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0,
+38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248,
+1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0
+,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0
+,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714
+,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0,
+0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0,
+0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0
+,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0,
+6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399,
+12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0,
+0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0,
+695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0,
+45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0,
+44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0
+,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0
+,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0,
+10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0
+,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0
+,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0,
+7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134
+,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0
+,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0,
+2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0
+,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0,
+8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877
+,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0,
+10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0,
+35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0,
+53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0,
+0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0,
+8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0
+,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511,
+21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0,
+0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679,
+0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0,
+19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465,
+15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0,
+0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0,
+0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0,
+1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0,
+25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0,
+0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0,
+0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0,
+0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020,
+2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0,
+0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353
+,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0,
+0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0,
+0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0
+,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0,
+5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0
+,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149,
+0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0
+,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0
+,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0
+,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0
+,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094
+,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488
+,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0,
+0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142,
+0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0,
+0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0
+,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0
+,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0,
+0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0
+,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0,
+0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711
+,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0
+,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734
+,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0
+,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069
+,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0
+,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0
+,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132,
+0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0,
+18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0,
+59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0
+,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0,
+0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0,
+16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130,
+12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824,
+18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0,
+53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711
+,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0,
+0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0
+,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248,
+0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0,
+15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0,
+427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156
+,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806
+,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453,
+0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0,
+29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0
+,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0,
+0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0
+,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0
+,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0,
+0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0,
+0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0,
+21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769,
+60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977,
+52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0,
+11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712,
+62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358,
+22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0,
+0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0,
+0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0
+,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0
+,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0,
+0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0,
+10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0
+,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0,
+38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0
+,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0
+,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0
+,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0,
+25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0,
+34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0,
+25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590
+,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0,
+21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0,
+0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0,
+28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0,
+28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0,
+15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0
+,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0,
+14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0
+,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0
+,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524,
+0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0,
+0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0,
+0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0
+,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0
+,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0,
+17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0,
+41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0,
+0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0
+,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0
+,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0,
+23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0,
+14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0
+,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0,
+0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0,
+0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0,
+0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0
+,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0,
+62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752,
+7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567,
+16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459,
+10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0,
+50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0,
+23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716,
+28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0,
+13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854,
+0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0
+,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0,
+0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365,
+27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0
+,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0
+,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0
+,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0,
+18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518
+,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0,
+0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543,
+0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0
+,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0,
+8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0,
+18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0
+,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0
+,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0
+,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0,
+48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0,
+23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0,
+0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718,
+46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0,
+65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0,
+0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0,
+0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447,
+12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142,
+0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340,
+18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902,
+0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0,
+5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0,
+0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0,
+0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0,
+0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008,
+62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0,
+0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776
+,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119,
+5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0,
+12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624,
+0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0
+,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0,
+0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0,
+52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0,
+44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0
+,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0,
+19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440,
+63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0,
+5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0,
+42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0,
+0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0,
+0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0
+,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0
+,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0
+,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0,
+4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324,
+18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0
+,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0,
+0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0,
+28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0
+,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726
+,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901
+,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0,
+0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0,
+0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0
+,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,
+46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0
+,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0,
+10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0
+,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0,
+21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0,
+7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0
+,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0,
+0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0
+,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0,
+0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0,
+65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0,
+31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0,
+0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0,
+46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0
+,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0,
+0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0
+,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452,
+9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0
+,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0,
+31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0,
+0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0,
+0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0,
+394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0,
+12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0,
+0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0
+,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409,
+51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0,
+9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134,
+0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0,
+0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0,
+18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0
+,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0,
+18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486,
+0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0,
+4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0,
+0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0
+,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0,
+0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0,
+0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025,
+29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0,
+1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028
+,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0
+,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0,
+0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208,
+7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0,
+0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0,
+13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189
+,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430
+,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0
+,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0
+,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861,
+16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0
+,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0
+,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0,
+0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0,
+0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0
+,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0,
+0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932,
+0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767,
+25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0,
+18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0,
+14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0,
+57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0,
+11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0
+,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0,
+38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0,
+0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677
+,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0,
+24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530,
+45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0,
+0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353,
+7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754
+,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0
+,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359
+,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0,
+0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0,
+17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826,
+12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862,
+1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0,
+14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580,
+0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0
+,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0
+,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261,
+21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0,
+14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228,
+0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0
+,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0,
+0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704,
+3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317
+,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763
+,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0
+,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0
+,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0,
+27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0,
+0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0,
+40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0
+,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759,
+0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969,
+7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0,
+27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0,
+0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0
+,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0,
+0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0,
+25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0,
+9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0
+,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0,
+2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0,
+0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0,
+1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0
+,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911,
+16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0
+,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0,
+0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178,
+132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382,
+0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119,
+0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0
+,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0
+,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616,
+65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848,
+62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0
+,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0
+,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285,
+5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0,
+31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0
+,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0
+,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0,
+0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944,
+999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0,
+38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0,
+17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0,
+9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723,
+28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0
+,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322,
+14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223,
+1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0,
+13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0,
+1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0,
+0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0
+,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0
+,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0,
+0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0,
+0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0,
+0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0,
+182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0
+,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595,
+24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0,
+0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231,
+8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0,
+0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468,
+24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0
+,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0
+,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0
+,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782,
+0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329,
+0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688,
+0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0,
+28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0,
+27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0
+,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0,
+11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0,
+0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302
+,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0,
+28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0,
+29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060,
+329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0,
+4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579,
+49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0
+,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0,
+30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0,
+0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0,
+11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0
+,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0,
+0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0,
+0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0
+,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0,
+8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0
+,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104
+,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497,
+22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680,
+0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0,
+0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160,
+1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848,
+2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0
+,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0
+,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0
+,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0
+,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779
+,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135,
+26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0,
+22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0
+,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0,
+4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0,
+0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0
+,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216,
+8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0,
+0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0,
+11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0,
+32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194,
+23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239
+,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0
+,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0,
+5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0,
+0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304,
+11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0
+,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0,
+33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0
+,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320,
+38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0,
+32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0,
+0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0,
+0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17,
+11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0,
+52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773
+,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0,
+10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0
+,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0
+,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0,
+22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0
+,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0
+,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0,
+0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0,
+0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0,
+49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0,
+0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0
+,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0,
+0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0,
+27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0,
+0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0,
+0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0
+,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154
+,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0,
+43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0
+,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334,
+2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0,
+0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0,
+0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0,
+0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0
+,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0
+,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0,
+0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0,
+0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528,
+34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0
+,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0,
+16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0,
+0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0,
+0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0
+,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0
+,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711,
+0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895,
+0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498,
+2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0
+,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0
+,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0,
+0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0,
+0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0,
+0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0,
+29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0
+,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726,
+26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0,
+42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0,
+0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476,
+29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0,
+24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198,
+0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0
+,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0,
+45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0
+,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,
+54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0
+,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0,
+0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318
+,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918,
+0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126,
+7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415,
+0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228,
+0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072,
+2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396,
+13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0,
+0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022,
+1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0,
+0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879,
+0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300
+,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589,
+0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0,
+0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879
+,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892,
+0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0
+,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0,
+0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0,
+0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0
+,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0
+,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0,
+57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0
+,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662,
+0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0,
+23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0
+,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120
+,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0,
+0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0,
+28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0,
+5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0,
+0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0,
+41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0
+,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0,
+17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0,
+0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358,
+0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880,
+12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0,
+0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0,
+0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0
+,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0,
+0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0
+,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0,
+10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0
+,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0,
+0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0,
+0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0,
+24230,0,55527,0,0,3464,19141,0,0,0,0};
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.h b/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.h
new file mode 100644
index 0000000000..b3bb9599f4
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/dictionary_hash.h
@@ -0,0 +1,24 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Hash table on the 4-byte prefixes of static dictionary words. */
+
+#ifndef BROTLI_ENC_DICTIONARY_HASH_H_
+#define BROTLI_ENC_DICTIONARY_HASH_H_
+
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+extern const uint16_t kStaticDictionaryHash[32768];
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/encode.c b/dviware/dvisvgm/libs/brotli/enc/encode.c
new file mode 100644
index 0000000000..141e70aa2a
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/encode.c
@@ -0,0 +1,1862 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Implementation of Brotli compressor. */
+
+#include <brotli/encode.h>
+
+#include <stdlib.h> /* free, malloc */
+#include <string.h> /* memcpy, memset */
+
+#include "../common/constants.h"
+#include "../common/context.h"
+#include "../common/platform.h"
+#include "../common/version.h"
+#include "./backward_references.h"
+#include "./backward_references_hq.h"
+#include "./bit_cost.h"
+#include "./brotli_bit_stream.h"
+#include "./compress_fragment.h"
+#include "./compress_fragment_two_pass.h"
+#include "./encoder_dict.h"
+#include "./entropy_encode.h"
+#include "./fast_log.h"
+#include "./hash.h"
+#include "./histogram.h"
+#include "./memory.h"
+#include "./metablock.h"
+#include "./prefix.h"
+#include "./quality.h"
+#include "./ringbuffer.h"
+#include "./utf8_util.h"
+#include "./write_bits.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));
+
+typedef enum BrotliEncoderStreamState {
+ /* Default state. */
+ BROTLI_STREAM_PROCESSING = 0,
+ /* Intermediate state; after next block is emitted, byte-padding should be
+ performed before getting back to default state. */
+ BROTLI_STREAM_FLUSH_REQUESTED = 1,
+ /* Last metablock was produced; no more input is acceptable. */
+ BROTLI_STREAM_FINISHED = 2,
+ /* Flushing compressed block and writing meta-data block header. */
+ BROTLI_STREAM_METADATA_HEAD = 3,
+ /* Writing metadata block body. */
+ BROTLI_STREAM_METADATA_BODY = 4
+} BrotliEncoderStreamState;
+
+typedef struct BrotliEncoderStateStruct {
+ BrotliEncoderParams params;
+
+ MemoryManager memory_manager_;
+
+ HasherHandle hasher_;
+ uint64_t input_pos_;
+ RingBuffer ringbuffer_;
+ size_t cmd_alloc_size_;
+ Command* commands_;
+ size_t num_commands_;
+ size_t num_literals_;
+ size_t last_insert_len_;
+ uint64_t last_flush_pos_;
+ uint64_t last_processed_pos_;
+ int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];
+ int saved_dist_cache_[4];
+ uint16_t last_bytes_;
+ uint8_t last_bytes_bits_;
+ uint8_t prev_byte_;
+ uint8_t prev_byte2_;
+ size_t storage_size_;
+ uint8_t* storage_;
+ /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */
+ int small_table_[1 << 10]; /* 4KiB */
+ int* large_table_; /* Allocated only when needed */
+ size_t large_table_size_;
+ /* Command and distance prefix codes (each 64 symbols, stored back-to-back)
+ used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command
+ prefix code is over a smaller alphabet with the following 64 symbols:
+ 0 - 15: insert length code 0, copy length code 0 - 15, same distance
+ 16 - 39: insert length code 0, copy length code 0 - 23
+ 40 - 63: insert length code 0 - 23, copy length code 0
+ Note that symbols 16 and 40 represent the same code in the full alphabet,
+ but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */
+ uint8_t cmd_depths_[128];
+ uint16_t cmd_bits_[128];
+ /* The compressed form of the command and distance prefix codes for the next
+ block in FAST_ONE_PASS_COMPRESSION_QUALITY. */
+ uint8_t cmd_code_[512];
+ size_t cmd_code_numbits_;
+ /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */
+ uint32_t* command_buf_;
+ uint8_t* literal_buf_;
+
+ uint8_t* next_out_;
+ size_t available_out_;
+ size_t total_out_;
+ /* Temporary buffer for padding flush bits or metadata block header / body. */
+ union {
+ uint64_t u64[2];
+ uint8_t u8[16];
+ } tiny_buf_;
+ uint32_t remaining_metadata_bytes_;
+ BrotliEncoderStreamState stream_state_;
+
+ BROTLI_BOOL is_last_block_emitted_;
+ BROTLI_BOOL is_initialized_;
+} BrotliEncoderStateStruct;
+
+static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s);
+
+static size_t InputBlockSize(BrotliEncoderState* s) {
+ return (size_t)1 << s->params.lgblock;
+}
+
+static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
+ return s->input_pos_ - s->last_processed_pos_;
+}
+
+static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
+ const uint64_t delta = UnprocessedInputSize(s);
+ size_t block_size = InputBlockSize(s);
+ if (delta >= block_size) return 0;
+ return block_size - (size_t)delta;
+}
+
+BROTLI_BOOL BrotliEncoderSetParameter(
+ BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {
+ /* Changing parameters on the fly is not implemented yet. */
+ if (state->is_initialized_) return BROTLI_FALSE;
+ /* TODO: Validate/clamp parameters here. */
+ switch (p) {
+ case BROTLI_PARAM_MODE:
+ state->params.mode = (BrotliEncoderMode)value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_QUALITY:
+ state->params.quality = (int)value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_LGWIN:
+ state->params.lgwin = (int)value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_LGBLOCK:
+ state->params.lgblock = (int)value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:
+ if ((value != 0) && (value != 1)) return BROTLI_FALSE;
+ state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_SIZE_HINT:
+ state->params.size_hint = value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_LARGE_WINDOW:
+ state->params.large_window = TO_BROTLI_BOOL(!!value);
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_NPOSTFIX:
+ state->params.dist.distance_postfix_bits = value;
+ return BROTLI_TRUE;
+
+ case BROTLI_PARAM_NDIRECT:
+ state->params.dist.num_direct_distance_codes = value;
+ return BROTLI_TRUE;
+
+ default: return BROTLI_FALSE;
+ }
+}
+
+/* Wraps 64-bit input position to 32-bit ring-buffer position preserving
+ "not-a-first-lap" feature. */
+static uint32_t WrapPosition(uint64_t position) {
+ uint32_t result = (uint32_t)position;
+ uint64_t gb = position >> 30;
+ if (gb > 2) {
+ /* Wrap every 2GiB; The first 3GB are continuous. */
+ result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;
+ }
+ return result;
+}
+
+static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {
+ MemoryManager* m = &s->memory_manager_;
+ if (s->storage_size_ < size) {
+ BROTLI_FREE(m, s->storage_);
+ s->storage_ = BROTLI_ALLOC(m, uint8_t, size);
+ if (BROTLI_IS_OOM(m)) return NULL;
+ s->storage_size_ = size;
+ }
+ return s->storage_;
+}
+
+static size_t HashTableSize(size_t max_table_size, size_t input_size) {
+ size_t htsize = 256;
+ while (htsize < max_table_size && htsize < input_size) {
+ htsize <<= 1;
+ }
+ return htsize;
+}
+
+static int* GetHashTable(BrotliEncoderState* s, int quality,
+ size_t input_size, size_t* table_size) {
+ /* Use smaller hash table when input.size() is smaller, since we
+ fill the table, incurring O(hash table size) overhead for
+ compression, and if the input is short, we won't need that
+ many hash table entries anyway. */
+ MemoryManager* m = &s->memory_manager_;
+ const size_t max_table_size = MaxHashTableSize(quality);
+ size_t htsize = HashTableSize(max_table_size, input_size);
+ int* table;
+ BROTLI_DCHECK(max_table_size >= 256);
+ if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
+ /* Only odd shifts are supported by fast-one-pass. */
+ if ((htsize & 0xAAAAA) == 0) {
+ htsize <<= 1;
+ }
+ }
+
+ if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {
+ table = s->small_table_;
+ } else {
+ if (htsize > s->large_table_size_) {
+ s->large_table_size_ = htsize;
+ BROTLI_FREE(m, s->large_table_);
+ s->large_table_ = BROTLI_ALLOC(m, int, htsize);
+ if (BROTLI_IS_OOM(m)) return 0;
+ }
+ table = s->large_table_;
+ }
+
+ *table_size = htsize;
+ memset(table, 0, htsize * sizeof(*table));
+ return table;
+}
+
+static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
+ uint16_t* last_bytes, uint8_t* last_bytes_bits) {
+ if (large_window) {
+ *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);
+ *last_bytes_bits = 14;
+ } else {
+ if (lgwin == 16) {
+ *last_bytes = 0;
+ *last_bytes_bits = 1;
+ } else if (lgwin == 17) {
+ *last_bytes = 1;
+ *last_bytes_bits = 7;
+ } else if (lgwin > 17) {
+ *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);
+ *last_bytes_bits = 4;
+ } else {
+ *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);
+ *last_bytes_bits = 7;
+ }
+ }
+}
+
+/* Initializes the command and distance prefix codes for the first block. */
+static void InitCommandPrefixCodes(uint8_t cmd_depths[128],
+ uint16_t cmd_bits[128],
+ uint8_t cmd_code[512],
+ size_t* cmd_code_numbits) {
+ static const uint8_t kDefaultCommandDepths[128] = {
+ 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
+ 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,
+ 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,
+ 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,
+ 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ };
+ static const uint16_t kDefaultCommandBits[128] = {
+ 0, 0, 8, 9, 3, 35, 7, 71,
+ 39, 103, 23, 47, 175, 111, 239, 31,
+ 0, 0, 0, 4, 12, 2, 10, 6,
+ 13, 29, 11, 43, 27, 59, 87, 55,
+ 15, 79, 319, 831, 191, 703, 447, 959,
+ 0, 14, 1, 25, 5, 21, 19, 51,
+ 119, 159, 95, 223, 479, 991, 63, 575,
+ 127, 639, 383, 895, 255, 767, 511, 1023,
+ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,
+ 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,
+ 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,
+ };
+ static const uint8_t kDefaultCommandCode[] = {
+ 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,
+ 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,
+ 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,
+ 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,
+ 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,
+ };
+ static const size_t kDefaultCommandCodeNumBits = 448;
+ COPY_ARRAY(cmd_depths, kDefaultCommandDepths);
+ COPY_ARRAY(cmd_bits, kDefaultCommandBits);
+
+ /* Initialize the pre-compressed form of the command and distance prefix
+ codes. */
+ COPY_ARRAY(cmd_code, kDefaultCommandCode);
+ *cmd_code_numbits = kDefaultCommandCodeNumBits;
+}
+
+/* Decide about the context map based on the ability of the prediction
+ ability of the previous byte UTF8-prefix on the next byte. The
+ prediction ability is calculated as Shannon entropy. Here we need
+ Shannon entropy instead of 'BitsEntropy' since the prefix will be
+ encoded with the remaining 6 bits of the following byte, and
+ BitsEntropy will assume that symbol to be stored alone using Huffman
+ coding. */
+static void ChooseContextMap(int quality,
+ uint32_t* bigram_histo,
+ size_t* num_literal_contexts,
+ const uint32_t** literal_context_map) {
+ static const uint32_t kStaticContextMapContinuation[64] = {
+ 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ static const uint32_t kStaticContextMapSimpleUTF8[64] = {
+ 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+
+ uint32_t monogram_histo[3] = { 0 };
+ uint32_t two_prefix_histo[6] = { 0 };
+ size_t total;
+ size_t i;
+ size_t dummy;
+ double entropy[4];
+ for (i = 0; i < 9; ++i) {
+ monogram_histo[i % 3] += bigram_histo[i];
+ two_prefix_histo[i % 6] += bigram_histo[i];
+ }
+ entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy);
+ entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) +
+ ShannonEntropy(two_prefix_histo + 3, 3, &dummy));
+ entropy[3] = 0;
+ for (i = 0; i < 3; ++i) {
+ entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy);
+ }
+
+ total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];
+ BROTLI_DCHECK(total != 0);
+ entropy[0] = 1.0 / (double)total;
+ entropy[1] *= entropy[0];
+ entropy[2] *= entropy[0];
+ entropy[3] *= entropy[0];
+
+ if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {
+ /* 3 context models is a bit slower, don't use it at lower qualities. */
+ entropy[3] = entropy[1] * 10;
+ }
+ /* If expected savings by symbol are less than 0.2 bits, skip the
+ context modeling -- in exchange for faster decoding speed. */
+ if (entropy[1] - entropy[2] < 0.2 &&
+ entropy[1] - entropy[3] < 0.2) {
+ *num_literal_contexts = 1;
+ } else if (entropy[2] - entropy[3] < 0.02) {
+ *num_literal_contexts = 2;
+ *literal_context_map = kStaticContextMapSimpleUTF8;
+ } else {
+ *num_literal_contexts = 3;
+ *literal_context_map = kStaticContextMapContinuation;
+ }
+}
+
+/* Decide if we want to use a more complex static context map containing 13
+ context values, based on the entropy reduction of histograms over the
+ first 5 bits of literals. */
+static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
+ size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
+ size_t* num_literal_contexts, const uint32_t** literal_context_map) {
+ static const uint32_t kStaticContextMapComplexUTF8[64] = {
+ 11, 11, 12, 12, /* 0 special */
+ 0, 0, 0, 0, /* 4 lf */
+ 1, 1, 9, 9, /* 8 space */
+ 2, 2, 2, 2, /* !, first after space/lf and after something else. */
+ 1, 1, 1, 1, /* " */
+ 8, 3, 3, 3, /* % */
+ 1, 1, 1, 1, /* ({[ */
+ 2, 2, 2, 2, /* }]) */
+ 8, 4, 4, 4, /* :; */
+ 8, 7, 4, 4, /* . */
+ 8, 0, 0, 0, /* > */
+ 3, 3, 3, 3, /* [0..9] */
+ 5, 5, 10, 5, /* [A-Z] */
+ 5, 5, 10, 5,
+ 6, 6, 6, 6, /* [a-z] */
+ 6, 6, 6, 6,
+ };
+ BROTLI_UNUSED(quality);
+ /* Try the more complex static context map only for long data. */
+ if (size_hint < (1 << 20)) {
+ return BROTLI_FALSE;
+ } else {
+ const size_t end_pos = start_pos + length;
+ /* To make entropy calculations faster and to fit on the stack, we collect
+ histograms over the 5 most significant bits of literals. One histogram
+ without context and 13 additional histograms for each context value. */
+ uint32_t combined_histo[32] = { 0 };
+ uint32_t context_histo[13][32] = { { 0 } };
+ uint32_t total = 0;
+ double entropy[3];
+ size_t dummy;
+ size_t i;
+ ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
+ for (; start_pos + 64 <= end_pos; start_pos += 4096) {
+ const size_t stride_end_pos = start_pos + 64;
+ uint8_t prev2 = input[start_pos & mask];
+ uint8_t prev1 = input[(start_pos + 1) & mask];
+ size_t pos;
+ /* To make the analysis of the data faster we only examine 64 byte long
+ strides at every 4kB intervals. */
+ for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {
+ const uint8_t literal = input[pos & mask];
+ const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[
+ BROTLI_CONTEXT(prev1, prev2, utf8_lut)];
+ ++total;
+ ++combined_histo[literal >> 3];
+ ++context_histo[context][literal >> 3];
+ prev2 = prev1;
+ prev1 = literal;
+ }
+ }
+ entropy[1] = ShannonEntropy(combined_histo, 32, &dummy);
+ entropy[2] = 0;
+ for (i = 0; i < 13; ++i) {
+ entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy);
+ }
+ entropy[0] = 1.0 / (double)total;
+ entropy[1] *= entropy[0];
+ entropy[2] *= entropy[0];
+ /* The triggering heuristics below were tuned by compressing the individual
+ files of the silesia corpus. If we skip this kind of context modeling
+ for not very well compressible input (i.e. entropy using context modeling
+ is 60% of maximal entropy) or if expected savings by symbol are less
+ than 0.2 bits, then in every case when it triggers, the final compression
+ ratio is improved. Note however that this heuristics might be too strict
+ for some cases and could be tuned further. */
+ if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
+ return BROTLI_FALSE;
+ } else {
+ *num_literal_contexts = 13;
+ *literal_context_map = kStaticContextMapComplexUTF8;
+ return BROTLI_TRUE;
+ }
+ }
+}
+
+static void DecideOverLiteralContextModeling(const uint8_t* input,
+ size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
+ size_t* num_literal_contexts, const uint32_t** literal_context_map) {
+ if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {
+ return;
+ } else if (ShouldUseComplexStaticContextMap(
+ input, start_pos, length, mask, quality, size_hint,
+ num_literal_contexts, literal_context_map)) {
+ /* Context map was already set, nothing else to do. */
+ } else {
+ /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of
+ UTF8 data faster we only examine 64 byte long strides at every 4kB
+ intervals. */
+ const size_t end_pos = start_pos + length;
+ uint32_t bigram_prefix_histo[9] = { 0 };
+ for (; start_pos + 64 <= end_pos; start_pos += 4096) {
+ static const int lut[4] = { 0, 0, 1, 2 };
+ const size_t stride_end_pos = start_pos + 64;
+ int prev = lut[input[start_pos & mask] >> 6] * 3;
+ size_t pos;
+ for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {
+ const uint8_t literal = input[pos & mask];
+ ++bigram_prefix_histo[prev + lut[literal >> 6]];
+ prev = lut[literal >> 6] * 3;
+ }
+ }
+ ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,
+ literal_context_map);
+ }
+}
+
+static BROTLI_BOOL ShouldCompress(
+ const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,
+ const size_t bytes, const size_t num_literals, const size_t num_commands) {
+ /* TODO: find more precise minimal block overhead. */
+ if (bytes <= 2) return BROTLI_FALSE;
+ if (num_commands < (bytes >> 8) + 2) {
+ if (num_literals > 0.99 * (double)bytes) {
+ uint32_t literal_histo[256] = { 0 };
+ static const uint32_t kSampleRate = 13;
+ static const double kMinEntropy = 7.92;
+ const double bit_cost_threshold =
+ (double)bytes * kMinEntropy / kSampleRate;
+ size_t t = (bytes + kSampleRate - 1) / kSampleRate;
+ uint32_t pos = (uint32_t)last_flush_pos;
+ size_t i;
+ for (i = 0; i < t; i++) {
+ ++literal_histo[data[pos & mask]];
+ pos += kSampleRate;
+ }
+ if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) {
+ return BROTLI_FALSE;
+ }
+ }
+ }
+ return BROTLI_TRUE;
+}
+
+/* Chooses the literal context mode for a metablock */
+static ContextType ChooseContextMode(const BrotliEncoderParams* params,
+ const uint8_t* data, const size_t pos, const size_t mask,
+ const size_t length) {
+ /* We only do the computation for the option of something else than
+ CONTEXT_UTF8 for the highest qualities */
+ if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&
+ !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {
+ return CONTEXT_SIGNED;
+ }
+ return CONTEXT_UTF8;
+}
+
+static void WriteMetaBlockInternal(MemoryManager* m,
+ const uint8_t* data,
+ const size_t mask,
+ const uint64_t last_flush_pos,
+ const size_t bytes,
+ const BROTLI_BOOL is_last,
+ ContextType literal_context_mode,
+ const BrotliEncoderParams* params,
+ const uint8_t prev_byte,
+ const uint8_t prev_byte2,
+ const size_t num_literals,
+ const size_t num_commands,
+ Command* commands,
+ const int* saved_dist_cache,
+ int* dist_cache,
+ size_t* storage_ix,
+ uint8_t* storage) {
+ const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
+ uint16_t last_bytes;
+ uint8_t last_bytes_bits;
+ ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
+ BrotliEncoderParams block_params = *params;
+
+ if (bytes == 0) {
+ /* Write the ISLAST and ISEMPTY bits. */
+ BrotliWriteBits(2, 3, storage_ix, storage);
+ *storage_ix = (*storage_ix + 7u) & ~7u;
+ return;
+ }
+
+ if (!ShouldCompress(data, mask, last_flush_pos, bytes,
+ num_literals, num_commands)) {
+ /* Restore the distance cache, as its last update by
+ CreateBackwardReferences is now unused. */
+ memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
+ BrotliStoreUncompressedMetaBlock(is_last, data,
+ wrapped_last_flush_pos, mask, bytes,
+ storage_ix, storage);
+ return;
+ }
+
+ BROTLI_DCHECK(*storage_ix <= 14);
+ last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
+ last_bytes_bits = (uint8_t)(*storage_ix);
+ if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
+ BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
+ bytes, mask, is_last, params,
+ commands, num_commands,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
+ BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
+ bytes, mask, is_last, params,
+ commands, num_commands,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ } else {
+ MetaBlockSplit mb;
+ InitMetaBlockSplit(&mb);
+ if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {
+ size_t num_literal_contexts = 1;
+ const uint32_t* literal_context_map = NULL;
+ if (!params->disable_literal_context_modeling) {
+ DecideOverLiteralContextModeling(
+ data, wrapped_last_flush_pos, bytes, mask, params->quality,
+ params->size_hint, &num_literal_contexts,
+ &literal_context_map);
+ }
+ BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
+ prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
+ literal_context_map, commands, num_commands, &mb);
+ if (BROTLI_IS_OOM(m)) return;
+ } else {
+ BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,
+ prev_byte, prev_byte2,
+ commands, num_commands,
+ literal_context_mode,
+ &mb);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+ if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {
+ /* The number of distance symbols effectively used for distance
+ histograms. It might be less than distance alphabet size
+ for "Large Window Brotli" (32-bit). */
+ uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
+ if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
+ num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
+ }
+ BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
+ }
+ BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
+ prev_byte, prev_byte2,
+ is_last,
+ &block_params,
+ literal_context_mode,
+ commands, num_commands,
+ &mb,
+ storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return;
+ DestroyMetaBlockSplit(m, &mb);
+ }
+ if (bytes + 4 < (*storage_ix >> 3)) {
+ /* Restore the distance cache and last byte. */
+ memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
+ storage[0] = (uint8_t)last_bytes;
+ storage[1] = (uint8_t)(last_bytes >> 8);
+ *storage_ix = last_bytes_bits;
+ BrotliStoreUncompressedMetaBlock(is_last, data,
+ wrapped_last_flush_pos, mask,
+ bytes, storage_ix, storage);
+ }
+}
+
+static void ChooseDistanceParams(BrotliEncoderParams* params) {
+ uint32_t distance_postfix_bits = 0;
+ uint32_t num_direct_distance_codes = 0;
+
+ if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {
+ uint32_t ndirect_msb;
+ if (params->mode == BROTLI_MODE_FONT) {
+ distance_postfix_bits = 1;
+ num_direct_distance_codes = 12;
+ } else {
+ distance_postfix_bits = params->dist.distance_postfix_bits;
+ num_direct_distance_codes = params->dist.num_direct_distance_codes;
+ }
+ ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;
+ if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||
+ num_direct_distance_codes > BROTLI_MAX_NDIRECT ||
+ (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {
+ distance_postfix_bits = 0;
+ num_direct_distance_codes = 0;
+ }
+ }
+
+ BrotliInitDistanceParams(
+ params, distance_postfix_bits, num_direct_distance_codes);
+}
+
+static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
+ if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE;
+ if (s->is_initialized_) return BROTLI_TRUE;
+
+ s->last_bytes_bits_ = 0;
+ s->last_bytes_ = 0;
+ s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
+
+ SanitizeParams(&s->params);
+ s->params.lgblock = ComputeLgBlock(&s->params);
+ ChooseDistanceParams(&s->params);
+
+ RingBufferSetup(&s->params, &s->ringbuffer_);
+
+ /* Initialize last byte with stream header. */
+ {
+ int lgwin = s->params.lgwin;
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
+ s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ lgwin = BROTLI_MAX(int, lgwin, 18);
+ }
+ EncodeWindowBits(lgwin, s->params.large_window,
+ &s->last_bytes_, &s->last_bytes_bits_);
+ }
+
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
+ InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_,
+ s->cmd_code_, &s->cmd_code_numbits_);
+ }
+
+ s->is_initialized_ = BROTLI_TRUE;
+ return BROTLI_TRUE;
+}
+
+static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
+ params->mode = BROTLI_DEFAULT_MODE;
+ params->large_window = BROTLI_FALSE;
+ params->quality = BROTLI_DEFAULT_QUALITY;
+ params->lgwin = BROTLI_DEFAULT_WINDOW;
+ params->lgblock = 0;
+ params->size_hint = 0;
+ params->disable_literal_context_modeling = BROTLI_FALSE;
+ BrotliInitEncoderDictionary(&params->dictionary);
+ params->dist.distance_postfix_bits = 0;
+ params->dist.num_direct_distance_codes = 0;
+ params->dist.alphabet_size =
+ BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);
+ params->dist.max_distance = BROTLI_MAX_DISTANCE;
+}
+
+static void BrotliEncoderInitState(BrotliEncoderState* s) {
+ BrotliEncoderInitParams(&s->params);
+ s->input_pos_ = 0;
+ s->num_commands_ = 0;
+ s->num_literals_ = 0;
+ s->last_insert_len_ = 0;
+ s->last_flush_pos_ = 0;
+ s->last_processed_pos_ = 0;
+ s->prev_byte_ = 0;
+ s->prev_byte2_ = 0;
+ s->storage_size_ = 0;
+ s->storage_ = 0;
+ s->hasher_ = NULL;
+ s->large_table_ = NULL;
+ s->large_table_size_ = 0;
+ s->cmd_code_numbits_ = 0;
+ s->command_buf_ = NULL;
+ s->literal_buf_ = NULL;
+ s->next_out_ = NULL;
+ s->available_out_ = 0;
+ s->total_out_ = 0;
+ s->stream_state_ = BROTLI_STREAM_PROCESSING;
+ s->is_last_block_emitted_ = BROTLI_FALSE;
+ s->is_initialized_ = BROTLI_FALSE;
+
+ RingBufferInit(&s->ringbuffer_);
+
+ s->commands_ = 0;
+ s->cmd_alloc_size_ = 0;
+
+ /* Initialize distance cache. */
+ s->dist_cache_[0] = 4;
+ s->dist_cache_[1] = 11;
+ s->dist_cache_[2] = 15;
+ s->dist_cache_[3] = 16;
+ /* Save the state of the distance cache in case we need to restore it for
+ emitting an uncompressed block. */
+ memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
+}
+
+BrotliEncoderState* BrotliEncoderCreateInstance(
+ brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
+ BrotliEncoderState* state = 0;
+ if (!alloc_func && !free_func) {
+ state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState));
+ } else if (alloc_func && free_func) {
+ state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState));
+ }
+ if (state == 0) {
+ /* BROTLI_DUMP(); */
+ return 0;
+ }
+ BrotliInitMemoryManager(
+ &state->memory_manager_, alloc_func, free_func, opaque);
+ BrotliEncoderInitState(state);
+ return state;
+}
+
+static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
+ MemoryManager* m = &s->memory_manager_;
+ if (BROTLI_IS_OOM(m)) {
+ BrotliWipeOutMemoryManager(m);
+ return;
+ }
+ BROTLI_FREE(m, s->storage_);
+ BROTLI_FREE(m, s->commands_);
+ RingBufferFree(m, &s->ringbuffer_);
+ DestroyHasher(m, &s->hasher_);
+ BROTLI_FREE(m, s->large_table_);
+ BROTLI_FREE(m, s->command_buf_);
+ BROTLI_FREE(m, s->literal_buf_);
+}
+
+/* Deinitializes and frees BrotliEncoderState instance. */
+void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
+ if (!state) {
+ return;
+ } else {
+ MemoryManager* m = &state->memory_manager_;
+ brotli_free_func free_func = m->free_func;
+ void* opaque = m->opaque;
+ BrotliEncoderCleanupState(state);
+ free_func(opaque, state);
+ }
+}
+
+/*
+ Copies the given input data to the internal ring buffer of the compressor.
+ No processing of the data occurs at this time and this function can be
+ called multiple times before calling WriteBrotliData() to process the
+ accumulated input. At most input_block_size() bytes of input data can be
+ copied to the ring buffer, otherwise the next WriteBrotliData() will fail.
+ */
+static void CopyInputToRingBuffer(BrotliEncoderState* s,
+ const size_t input_size,
+ const uint8_t* input_buffer) {
+ RingBuffer* ringbuffer_ = &s->ringbuffer_;
+ MemoryManager* m = &s->memory_manager_;
+ RingBufferWrite(m, input_buffer, input_size, ringbuffer_);
+ if (BROTLI_IS_OOM(m)) return;
+ s->input_pos_ += input_size;
+
+ /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the
+ hashing not depend on uninitialized data. This makes compression
+ deterministic and it prevents uninitialized memory warnings in Valgrind.
+ Even without erasing, the output would be valid (but nondeterministic).
+
+ Background information: The compressor stores short (at most 8 bytes)
+ substrings of the input already read in a hash table, and detects
+ repetitions by looking up such substrings in the hash table. If it
+ can find a substring, it checks whether the substring is really there
+ in the ring buffer (or it's just a hash collision). Should the hash
+ table become corrupt, this check makes sure that the output is
+ still valid, albeit the compression ratio would be bad.
+
+ The compressor populates the hash table from the ring buffer as it's
+ reading new bytes from the input. However, at the last few indexes of
+ the ring buffer, there are not enough bytes to build full-length
+ substrings from. Since the hash table always contains full-length
+ substrings, we erase with dummy zeros here to make sure that those
+ substrings will contain zeros at the end instead of uninitialized
+ data.
+
+ Please note that erasing is not necessary (because the
+ memory region is already initialized since he ring buffer
+ has a `tail' that holds a copy of the beginning,) so we
+ skip erasing if we have already gone around at least once in
+ the ring buffer.
+
+ Only clear during the first round of ring-buffer writes. On
+ subsequent rounds data in the ring-buffer would be affected. */
+ if (ringbuffer_->pos_ <= ringbuffer_->mask_) {
+ /* This is the first time when the ring buffer is being written.
+ We clear 7 bytes just after the bytes that have been copied from
+ the input buffer.
+
+ The ring-buffer has a "tail" that holds a copy of the beginning,
+ but only once the ring buffer has been fully written once, i.e.,
+ pos <= mask. For the first time, we need to write values
+ in this tail (where index may be larger than mask), so that
+ we have exactly defined behavior and don't read uninitialized
+ memory. Due to performance reasons, hashing reads data using a
+ LOAD64, which can go 7 bytes beyond the bytes written in the
+ ring-buffer. */
+ memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);
+ }
+}
+
+/* Marks all input as processed.
+ Returns true if position wrapping occurs. */
+static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
+ uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
+ uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);
+ s->last_processed_pos_ = s->input_pos_;
+ return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);
+}
+
+static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
+ uint32_t* wrapped_last_processed_pos) {
+ Command* last_command = &s->commands_[s->num_commands_ - 1];
+ const uint8_t* data = s->ringbuffer_.buffer_;
+ const uint32_t mask = s->ringbuffer_.mask_;
+ uint64_t max_backward_distance =
+ (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;
+ uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;
+ uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;
+ uint64_t max_distance = last_processed_pos < max_backward_distance ?
+ last_processed_pos : max_backward_distance;
+ uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];
+ uint32_t distance_code = CommandRestoreDistanceCode(last_command,
+ &s->params.dist);
+ if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||
+ distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {
+ if (cmd_dist <= max_distance) {
+ while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==
+ data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {
+ last_command->copy_len_++;
+ (*bytes)--;
+ (*wrapped_last_processed_pos)++;
+ }
+ }
+ /* The copy length is at most the metablock size, and thus expressible. */
+ GetLengthCode(last_command->insert_len_,
+ (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +
+ (int)(last_command->copy_len_ >> 25)),
+ TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),
+ &last_command->cmd_prefix_);
+ }
+}
+
+/*
+ Processes the accumulated input data and sets |*out_size| to the length of
+ the new output meta-block, or to zero if no new output meta-block has been
+ created (in this case the processed input data is buffered internally).
+ If |*out_size| is positive, |*output| points to the start of the output
+ data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is
+ always created. However, until |is_last| is BROTLI_TRUE encoder may retain up
+ to 7 bits of the last byte of output. To force encoder to dump the remaining
+ bits use WriteMetadata() to append an empty meta-data block.
+ Returns BROTLI_FALSE if the size of the input data is larger than
+ input_block_size().
+ */
+static BROTLI_BOOL EncodeData(
+ BrotliEncoderState* s, const BROTLI_BOOL is_last,
+ const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {
+ const uint64_t delta = UnprocessedInputSize(s);
+ uint32_t bytes = (uint32_t)delta;
+ uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
+ uint8_t* data;
+ uint32_t mask;
+ MemoryManager* m = &s->memory_manager_;
+ ContextType literal_context_mode;
+
+ data = s->ringbuffer_.buffer_;
+ mask = s->ringbuffer_.mask_;
+
+ /* Adding more blocks after "last" block is forbidden. */
+ if (s->is_last_block_emitted_) return BROTLI_FALSE;
+ if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;
+
+ if (delta > InputBlockSize(s)) {
+ return BROTLI_FALSE;
+ }
+ if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&
+ !s->command_buf_) {
+ s->command_buf_ =
+ BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
+ s->literal_buf_ =
+ BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ }
+
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
+ s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ uint8_t* storage;
+ size_t storage_ix = s->last_bytes_bits_;
+ size_t table_size;
+ int* table;
+
+ if (delta == 0 && !is_last) {
+ /* We have no new input data and we don't have to finish the stream, so
+ nothing to do. */
+ *out_size = 0;
+ return BROTLI_TRUE;
+ }
+ storage = GetBrotliStorage(s, 2 * bytes + 503);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ storage[0] = (uint8_t)s->last_bytes_;
+ storage[1] = (uint8_t)(s->last_bytes_ >> 8);
+ table = GetHashTable(s, s->params.quality, bytes, &table_size);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
+ BrotliCompressFragmentFast(
+ m, &data[wrapped_last_processed_pos & mask],
+ bytes, is_last,
+ table, table_size,
+ s->cmd_depths_, s->cmd_bits_,
+ &s->cmd_code_numbits_, s->cmd_code_,
+ &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ } else {
+ BrotliCompressFragmentTwoPass(
+ m, &data[wrapped_last_processed_pos & mask],
+ bytes, is_last,
+ s->command_buf_, s->literal_buf_,
+ table, table_size,
+ &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ }
+ s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
+ s->last_bytes_bits_ = storage_ix & 7u;
+ UpdateLastProcessedPos(s);
+ *output = &storage[0];
+ *out_size = storage_ix >> 3;
+ return BROTLI_TRUE;
+ }
+
+ {
+ /* Theoretical max number of commands is 1 per 2 bytes. */
+ size_t newsize = s->num_commands_ + bytes / 2 + 1;
+ if (newsize > s->cmd_alloc_size_) {
+ Command* new_commands;
+ /* Reserve a bit more memory to allow merging with a next block
+ without reallocation: that would impact speed. */
+ newsize += (bytes / 4) + 16;
+ s->cmd_alloc_size_ = newsize;
+ new_commands = BROTLI_ALLOC(m, Command, newsize);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ if (s->commands_) {
+ memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);
+ BROTLI_FREE(m, s->commands_);
+ }
+ s->commands_ = new_commands;
+ }
+ }
+
+ InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,
+ wrapped_last_processed_pos, bytes, is_last);
+
+ literal_context_mode = ChooseContextMode(
+ &s->params, data, WrapPosition(s->last_flush_pos_),
+ mask, (size_t)(s->input_pos_ - s->last_flush_pos_));
+
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+
+ if (s->num_commands_ && s->last_insert_len_ == 0) {
+ ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);
+ }
+
+ if (s->params.quality == ZOPFLIFICATION_QUALITY) {
+ BROTLI_DCHECK(s->params.hasher.type == 10);
+ BrotliCreateZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,
+ data, mask, &s->params, s->hasher_, s->dist_cache_,
+ &s->last_insert_len_, &s->commands_[s->num_commands_],
+ &s->num_commands_, &s->num_literals_);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {
+ BROTLI_DCHECK(s->params.hasher.type == 10);
+ BrotliCreateHqZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,
+ data, mask, &s->params, s->hasher_, s->dist_cache_,
+ &s->last_insert_len_, &s->commands_[s->num_commands_],
+ &s->num_commands_, &s->num_literals_);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ } else {
+ BrotliCreateBackwardReferences(bytes, wrapped_last_processed_pos,
+ data, mask, &s->params, s->hasher_, s->dist_cache_,
+ &s->last_insert_len_, &s->commands_[s->num_commands_],
+ &s->num_commands_, &s->num_literals_);
+ }
+
+ {
+ const size_t max_length = MaxMetablockSize(&s->params);
+ const size_t max_literals = max_length / 8;
+ const size_t max_commands = max_length / 8;
+ const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);
+ /* If maximal possible additional block doesn't fit metablock, flush now. */
+ /* TODO: Postpone decision until next block arrives? */
+ const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(
+ processed_bytes + InputBlockSize(s) <= max_length);
+ /* If block splitting is not used, then flush as soon as there is some
+ amount of commands / literals produced. */
+ const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(
+ s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&
+ s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);
+ if (!is_last && !force_flush && !should_flush &&
+ next_input_fits_metablock &&
+ s->num_literals_ < max_literals &&
+ s->num_commands_ < max_commands) {
+ /* Merge with next input block. Everything will happen later. */
+ if (UpdateLastProcessedPos(s)) {
+ HasherReset(s->hasher_);
+ }
+ *out_size = 0;
+ return BROTLI_TRUE;
+ }
+ }
+
+ /* Create the last insert-only command. */
+ if (s->last_insert_len_ > 0) {
+ InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);
+ s->num_literals_ += s->last_insert_len_;
+ s->last_insert_len_ = 0;
+ }
+
+ if (!is_last && s->input_pos_ == s->last_flush_pos_) {
+ /* We have no new input data and we don't have to finish the stream, so
+ nothing to do. */
+ *out_size = 0;
+ return BROTLI_TRUE;
+ }
+ BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);
+ BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);
+ BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);
+ {
+ const uint32_t metablock_size =
+ (uint32_t)(s->input_pos_ - s->last_flush_pos_);
+ uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);
+ size_t storage_ix = s->last_bytes_bits_;
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ storage[0] = (uint8_t)s->last_bytes_;
+ storage[1] = (uint8_t)(s->last_bytes_ >> 8);
+ WriteMetaBlockInternal(
+ m, data, mask, s->last_flush_pos_, metablock_size, is_last,
+ literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,
+ s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,
+ s->dist_cache_, &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
+ s->last_bytes_bits_ = storage_ix & 7u;
+ s->last_flush_pos_ = s->input_pos_;
+ if (UpdateLastProcessedPos(s)) {
+ HasherReset(s->hasher_);
+ }
+ if (s->last_flush_pos_ > 0) {
+ s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];
+ }
+ if (s->last_flush_pos_ > 1) {
+ s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];
+ }
+ s->num_commands_ = 0;
+ s->num_literals_ = 0;
+ /* Save the state of the distance cache in case we need to restore it for
+ emitting an uncompressed block. */
+ memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
+ *output = &storage[0];
+ *out_size = storage_ix >> 3;
+ return BROTLI_TRUE;
+ }
+}
+
+/* Dumps remaining output bits and metadata header to |header|.
+ Returns number of produced bytes.
+ REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.
+ REQUIRED: |block_size| <= (1 << 24). */
+static size_t WriteMetadataHeader(
+ BrotliEncoderState* s, const size_t block_size, uint8_t* header) {
+ size_t storage_ix;
+ storage_ix = s->last_bytes_bits_;
+ header[0] = (uint8_t)s->last_bytes_;
+ header[1] = (uint8_t)(s->last_bytes_ >> 8);
+ s->last_bytes_ = 0;
+ s->last_bytes_bits_ = 0;
+
+ BrotliWriteBits(1, 0, &storage_ix, header);
+ BrotliWriteBits(2, 3, &storage_ix, header);
+ BrotliWriteBits(1, 0, &storage_ix, header);
+ if (block_size == 0) {
+ BrotliWriteBits(2, 0, &storage_ix, header);
+ } else {
+ uint32_t nbits = (block_size == 1) ? 0 :
+ (Log2FloorNonZero((uint32_t)block_size - 1) + 1);
+ uint32_t nbytes = (nbits + 7) / 8;
+ BrotliWriteBits(2, nbytes, &storage_ix, header);
+ BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);
+ }
+ return (storage_ix + 7u) >> 3;
+}
+
+static BROTLI_BOOL BrotliCompressBufferQuality10(
+ int lgwin, size_t input_size, const uint8_t* input_buffer,
+ size_t* encoded_size, uint8_t* encoded_buffer) {
+ MemoryManager memory_manager;
+ MemoryManager* m = &memory_manager;
+
+ const size_t mask = BROTLI_SIZE_MAX >> 1;
+ int dist_cache[4] = { 4, 11, 15, 16 };
+ int saved_dist_cache[4] = { 4, 11, 15, 16 };
+ BROTLI_BOOL ok = BROTLI_TRUE;
+ const size_t max_out_size = *encoded_size;
+ size_t total_out_size = 0;
+ uint16_t last_bytes;
+ uint8_t last_bytes_bits;
+ HasherHandle hasher = NULL;
+
+ const size_t hasher_eff_size = BROTLI_MIN(size_t,
+ input_size, BROTLI_MAX_BACKWARD_LIMIT(lgwin) + BROTLI_WINDOW_GAP);
+
+ BrotliEncoderParams params;
+
+ const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1);
+ size_t max_block_size;
+ const size_t max_metablock_size = (size_t)1 << lgmetablock;
+ const size_t max_literals_per_metablock = max_metablock_size / 8;
+ const size_t max_commands_per_metablock = max_metablock_size / 8;
+ size_t metablock_start = 0;
+ uint8_t prev_byte = 0;
+ uint8_t prev_byte2 = 0;
+
+ BrotliEncoderInitParams(&params);
+ params.quality = 10;
+ params.lgwin = lgwin;
+ if (lgwin > BROTLI_MAX_WINDOW_BITS) {
+ params.large_window = BROTLI_TRUE;
+ }
+ SanitizeParams(&params);
+ params.lgblock = ComputeLgBlock(&params);
+ ChooseDistanceParams(&params);
+ max_block_size = (size_t)1 << params.lgblock;
+
+ BrotliInitMemoryManager(m, 0, 0, 0);
+
+ BROTLI_DCHECK(input_size <= mask + 1);
+ EncodeWindowBits(lgwin, params.large_window, &last_bytes, &last_bytes_bits);
+ InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, &params,
+ 0, hasher_eff_size, BROTLI_TRUE);
+ if (BROTLI_IS_OOM(m)) goto oom;
+
+ while (ok && metablock_start < input_size) {
+ const size_t metablock_end =
+ BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size);
+ const size_t expected_num_commands =
+ (metablock_end - metablock_start) / 12 + 16;
+ Command* commands = 0;
+ size_t num_commands = 0;
+ size_t last_insert_len = 0;
+ size_t num_literals = 0;
+ size_t metablock_size = 0;
+ size_t cmd_alloc_size = 0;
+ BROTLI_BOOL is_last;
+ uint8_t* storage;
+ size_t storage_ix;
+
+ ContextType literal_context_mode = ChooseContextMode(&params,
+ input_buffer, metablock_start, mask, metablock_end - metablock_start);
+
+ size_t block_start;
+ for (block_start = metablock_start; block_start < metablock_end; ) {
+ size_t block_size =
+ BROTLI_MIN(size_t, metablock_end - block_start, max_block_size);
+ ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1);
+ size_t path_size;
+ size_t new_cmd_alloc_size;
+ if (BROTLI_IS_OOM(m)) goto oom;
+ BrotliInitZopfliNodes(nodes, block_size + 1);
+ StitchToPreviousBlockH10(hasher, block_size, block_start,
+ input_buffer, mask);
+ path_size = BrotliZopfliComputeShortestPath(m, block_size, block_start,
+ input_buffer, mask, &params, dist_cache, hasher,
+ nodes);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ /* We allocate a command buffer in the first iteration of this loop that
+ will be likely big enough for the whole metablock, so that for most
+ inputs we will not have to reallocate in later iterations. We do the
+ allocation here and not before the loop, because if the input is small,
+ this will be allocated after the Zopfli cost model is freed, so this
+ will not increase peak memory usage.
+ TODO: If the first allocation is too small, increase command
+ buffer size exponentially. */
+ new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands,
+ num_commands + path_size + 1);
+ if (cmd_alloc_size != new_cmd_alloc_size) {
+ Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ cmd_alloc_size = new_cmd_alloc_size;
+ if (commands) {
+ memcpy(new_commands, commands, sizeof(Command) * num_commands);
+ BROTLI_FREE(m, commands);
+ }
+ commands = new_commands;
+ }
+ BrotliZopfliCreateCommands(block_size, block_start, &nodes[0], dist_cache,
+ &last_insert_len, &params, &commands[num_commands], &num_literals);
+ num_commands += path_size;
+ block_start += block_size;
+ metablock_size += block_size;
+ BROTLI_FREE(m, nodes);
+ if (num_literals > max_literals_per_metablock ||
+ num_commands > max_commands_per_metablock) {
+ break;
+ }
+ }
+
+ if (last_insert_len > 0) {
+ InitInsertCommand(&commands[num_commands++], last_insert_len);
+ num_literals += last_insert_len;
+ }
+
+ is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size);
+ storage = NULL;
+ storage_ix = last_bytes_bits;
+
+ if (metablock_size == 0) {
+ /* Write the ISLAST and ISEMPTY bits. */
+ storage = BROTLI_ALLOC(m, uint8_t, 16);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ storage[0] = (uint8_t)last_bytes;
+ storage[1] = (uint8_t)(last_bytes >> 8);
+ BrotliWriteBits(2, 3, &storage_ix, storage);
+ storage_ix = (storage_ix + 7u) & ~7u;
+ } else if (!ShouldCompress(input_buffer, mask, metablock_start,
+ metablock_size, num_literals, num_commands)) {
+ /* Restore the distance cache, as its last update by
+ CreateBackwardReferences is now unused. */
+ memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
+ storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ storage[0] = (uint8_t)last_bytes;
+ storage[1] = (uint8_t)(last_bytes >> 8);
+ BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
+ metablock_start, mask, metablock_size,
+ &storage_ix, storage);
+ } else {
+ MetaBlockSplit mb;
+ BrotliEncoderParams block_params = params;
+ InitMetaBlockSplit(&mb);
+ BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask,
+ &block_params,
+ prev_byte, prev_byte2,
+ commands, num_commands,
+ literal_context_mode,
+ &mb);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ {
+ /* The number of distance symbols effectively used for distance
+ histograms. It might be less than distance alphabet size
+ for "Large Window Brotli" (32-bit). */
+ uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
+ if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
+ num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
+ }
+ BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
+ }
+ storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ storage[0] = (uint8_t)last_bytes;
+ storage[1] = (uint8_t)(last_bytes >> 8);
+ BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size,
+ mask, prev_byte, prev_byte2,
+ is_last,
+ &block_params,
+ literal_context_mode,
+ commands, num_commands,
+ &mb,
+ &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) goto oom;
+ if (metablock_size + 4 < (storage_ix >> 3)) {
+ /* Restore the distance cache and last byte. */
+ memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
+ storage[0] = (uint8_t)last_bytes;
+ storage[1] = (uint8_t)(last_bytes >> 8);
+ storage_ix = last_bytes_bits;
+ BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
+ metablock_start, mask,
+ metablock_size, &storage_ix, storage);
+ }
+ DestroyMetaBlockSplit(m, &mb);
+ }
+ last_bytes = (uint16_t)(storage[storage_ix >> 3]);
+ last_bytes_bits = storage_ix & 7u;
+ metablock_start += metablock_size;
+ if (metablock_start < input_size) {
+ prev_byte = input_buffer[metablock_start - 1];
+ prev_byte2 = input_buffer[metablock_start - 2];
+ }
+ /* Save the state of the distance cache in case we need to restore it for
+ emitting an uncompressed block. */
+ memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
+
+ {
+ const size_t out_size = storage_ix >> 3;
+ total_out_size += out_size;
+ if (total_out_size <= max_out_size) {
+ memcpy(encoded_buffer, storage, out_size);
+ encoded_buffer += out_size;
+ } else {
+ ok = BROTLI_FALSE;
+ }
+ }
+ BROTLI_FREE(m, storage);
+ BROTLI_FREE(m, commands);
+ }
+
+ *encoded_size = total_out_size;
+ DestroyHasher(m, &hasher);
+ return ok;
+
+oom:
+ BrotliWipeOutMemoryManager(m);
+ return BROTLI_FALSE;
+}
+
+size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
+ /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */
+ size_t num_large_blocks = input_size >> 14;
+ size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;
+ size_t result = input_size + overhead;
+ if (input_size == 0) return 2;
+ return (result < input_size) ? 0 : result;
+}
+
+/* Wraps data to uncompressed brotli stream with minimal window size.
+ |output| should point at region with at least BrotliEncoderMaxCompressedSize
+ addressable bytes.
+ Returns the length of stream. */
+static size_t MakeUncompressedStream(
+ const uint8_t* input, size_t input_size, uint8_t* output) {
+ size_t size = input_size;
+ size_t result = 0;
+ size_t offset = 0;
+ if (input_size == 0) {
+ output[0] = 6;
+ return 1;
+ }
+ output[result++] = 0x21; /* window bits = 10, is_last = false */
+ output[result++] = 0x03; /* empty metadata, padding */
+ while (size > 0) {
+ uint32_t nibbles = 0;
+ uint32_t chunk_size;
+ uint32_t bits;
+ chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;
+ if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;
+ bits =
+ (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));
+ output[result++] = (uint8_t)bits;
+ output[result++] = (uint8_t)(bits >> 8);
+ output[result++] = (uint8_t)(bits >> 16);
+ if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);
+ memcpy(&output[result], &input[offset], chunk_size);
+ result += chunk_size;
+ offset += chunk_size;
+ size -= chunk_size;
+ }
+ output[result++] = 3;
+ return result;
+}
+
+BROTLI_BOOL BrotliEncoderCompress(
+ int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
+ const uint8_t* input_buffer, size_t* encoded_size,
+ uint8_t* encoded_buffer) {
+ BrotliEncoderState* s;
+ size_t out_size = *encoded_size;
+ const uint8_t* input_start = input_buffer;
+ uint8_t* output_start = encoded_buffer;
+ size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);
+ if (out_size == 0) {
+ /* Output buffer needs at least one byte. */
+ return BROTLI_FALSE;
+ }
+ if (input_size == 0) {
+ /* Handle the special case of empty input. */
+ *encoded_size = 1;
+ *encoded_buffer = 6;
+ return BROTLI_TRUE;
+ }
+ if (quality == 10) {
+ /* TODO: Implement this direct path for all quality levels. */
+ const int lg_win = BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS,
+ BROTLI_MAX(int, 16, lgwin));
+ int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer,
+ encoded_size, encoded_buffer);
+ if (!ok || (max_out_size && *encoded_size > max_out_size)) {
+ goto fallback;
+ }
+ return BROTLI_TRUE;
+ }
+
+ s = BrotliEncoderCreateInstance(0, 0, 0);
+ if (!s) {
+ return BROTLI_FALSE;
+ } else {
+ size_t available_in = input_size;
+ const uint8_t* next_in = input_buffer;
+ size_t available_out = *encoded_size;
+ uint8_t* next_out = encoded_buffer;
+ size_t total_out = 0;
+ BROTLI_BOOL result = BROTLI_FALSE;
+ BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);
+ BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);
+ BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);
+ BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);
+ if (lgwin > BROTLI_MAX_WINDOW_BITS) {
+ BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);
+ }
+ result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,
+ &available_in, &next_in, &available_out, &next_out, &total_out);
+ if (!BrotliEncoderIsFinished(s)) result = 0;
+ *encoded_size = total_out;
+ BrotliEncoderDestroyInstance(s);
+ if (!result || (max_out_size && *encoded_size > max_out_size)) {
+ goto fallback;
+ }
+ return BROTLI_TRUE;
+ }
+fallback:
+ *encoded_size = 0;
+ if (!max_out_size) return BROTLI_FALSE;
+ if (out_size >= max_out_size) {
+ *encoded_size =
+ MakeUncompressedStream(input_start, input_size, output_start);
+ return BROTLI_TRUE;
+ }
+ return BROTLI_FALSE;
+}
+
+static void InjectBytePaddingBlock(BrotliEncoderState* s) {
+ uint32_t seal = s->last_bytes_;
+ size_t seal_bits = s->last_bytes_bits_;
+ uint8_t* destination;
+ s->last_bytes_ = 0;
+ s->last_bytes_bits_ = 0;
+ /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */
+ seal |= 0x6u << seal_bits;
+ seal_bits += 6;
+ /* If we have already created storage, then append to it.
+ Storage is valid until next block is being compressed. */
+ if (s->next_out_) {
+ destination = s->next_out_ + s->available_out_;
+ } else {
+ destination = s->tiny_buf_.u8;
+ s->next_out_ = destination;
+ }
+ destination[0] = (uint8_t)seal;
+ if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);
+ if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);
+ s->available_out_ += (seal_bits + 7) >> 3;
+}
+
+/* Injects padding bits or pushes compressed data to output.
+ Returns false if nothing is done. */
+static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
+ size_t* available_out, uint8_t** next_out, size_t* total_out) {
+ if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
+ s->last_bytes_bits_ != 0) {
+ InjectBytePaddingBlock(s);
+ return BROTLI_TRUE;
+ }
+
+ if (s->available_out_ != 0 && *available_out != 0) {
+ size_t copy_output_size =
+ BROTLI_MIN(size_t, s->available_out_, *available_out);
+ memcpy(*next_out, s->next_out_, copy_output_size);
+ *next_out += copy_output_size;
+ *available_out -= copy_output_size;
+ s->next_out_ += copy_output_size;
+ s->available_out_ -= copy_output_size;
+ s->total_out_ += copy_output_size;
+ if (total_out) *total_out = s->total_out_;
+ return BROTLI_TRUE;
+ }
+
+ return BROTLI_FALSE;
+}
+
+static void CheckFlushComplete(BrotliEncoderState* s) {
+ if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
+ s->available_out_ == 0) {
+ s->stream_state_ = BROTLI_STREAM_PROCESSING;
+ s->next_out_ = 0;
+ }
+}
+
+static BROTLI_BOOL BrotliEncoderCompressStreamFast(
+ BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
+ const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
+ size_t* total_out) {
+ const size_t block_size_limit = (size_t)1 << s->params.lgwin;
+ const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,
+ BROTLI_MIN(size_t, *available_in, block_size_limit));
+ uint32_t* tmp_command_buf = NULL;
+ uint32_t* command_buf = NULL;
+ uint8_t* tmp_literal_buf = NULL;
+ uint8_t* literal_buf = NULL;
+ MemoryManager* m = &s->memory_manager_;
+ if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&
+ s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ return BROTLI_FALSE;
+ }
+ if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {
+ s->command_buf_ =
+ BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
+ s->literal_buf_ =
+ BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ }
+ if (s->command_buf_) {
+ command_buf = s->command_buf_;
+ literal_buf = s->literal_buf_;
+ } else {
+ tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);
+ tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ command_buf = tmp_command_buf;
+ literal_buf = tmp_literal_buf;
+ }
+ }
+
+ while (BROTLI_TRUE) {
+ if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
+ continue;
+ }
+
+ /* Compress block only when internal output buffer is empty, stream is not
+ finished, there is no pending flush request, and there is either
+ additional input or pending operation. */
+ if (s->available_out_ == 0 &&
+ s->stream_state_ == BROTLI_STREAM_PROCESSING &&
+ (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {
+ size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);
+ BROTLI_BOOL is_last =
+ (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);
+ BROTLI_BOOL force_flush =
+ (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);
+ size_t max_out_size = 2 * block_size + 503;
+ BROTLI_BOOL inplace = BROTLI_TRUE;
+ uint8_t* storage = NULL;
+ size_t storage_ix = s->last_bytes_bits_;
+ size_t table_size;
+ int* table;
+
+ if (force_flush && block_size == 0) {
+ s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
+ continue;
+ }
+ if (max_out_size <= *available_out) {
+ storage = *next_out;
+ } else {
+ inplace = BROTLI_FALSE;
+ storage = GetBrotliStorage(s, max_out_size);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ }
+ storage[0] = (uint8_t)s->last_bytes_;
+ storage[1] = (uint8_t)(s->last_bytes_ >> 8);
+ table = GetHashTable(s, s->params.quality, block_size, &table_size);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
+ BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table,
+ table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_,
+ s->cmd_code_, &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ } else {
+ BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last,
+ command_buf, literal_buf, table, table_size,
+ &storage_ix, storage);
+ if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
+ }
+ *next_in += block_size;
+ *available_in -= block_size;
+ if (inplace) {
+ size_t out_bytes = storage_ix >> 3;
+ BROTLI_DCHECK(out_bytes <= *available_out);
+ BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);
+ *next_out += out_bytes;
+ *available_out -= out_bytes;
+ s->total_out_ += out_bytes;
+ if (total_out) *total_out = s->total_out_;
+ } else {
+ size_t out_bytes = storage_ix >> 3;
+ s->next_out_ = storage;
+ s->available_out_ = out_bytes;
+ }
+ s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
+ s->last_bytes_bits_ = storage_ix & 7u;
+
+ if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
+ if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
+ continue;
+ }
+ break;
+ }
+ BROTLI_FREE(m, tmp_command_buf);
+ BROTLI_FREE(m, tmp_literal_buf);
+ CheckFlushComplete(s);
+ return BROTLI_TRUE;
+}
+
+static BROTLI_BOOL ProcessMetadata(
+ BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,
+ size_t* available_out, uint8_t** next_out, size_t* total_out) {
+ if (*available_in > (1u << 24)) return BROTLI_FALSE;
+ /* Switch to metadata block workflow, if required. */
+ if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {
+ s->remaining_metadata_bytes_ = (uint32_t)*available_in;
+ s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;
+ }
+ if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&
+ s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {
+ return BROTLI_FALSE;
+ }
+
+ while (BROTLI_TRUE) {
+ if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
+ continue;
+ }
+ if (s->available_out_ != 0) break;
+
+ if (s->input_pos_ != s->last_flush_pos_) {
+ BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,
+ &s->available_out_, &s->next_out_);
+ if (!result) return BROTLI_FALSE;
+ continue;
+ }
+
+ if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {
+ s->next_out_ = s->tiny_buf_.u8;
+ s->available_out_ =
+ WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);
+ s->stream_state_ = BROTLI_STREAM_METADATA_BODY;
+ continue;
+ } else {
+ /* Exit workflow only when there is no more input and no more output.
+ Otherwise client may continue producing empty metadata blocks. */
+ if (s->remaining_metadata_bytes_ == 0) {
+ s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
+ s->stream_state_ = BROTLI_STREAM_PROCESSING;
+ break;
+ }
+ if (*available_out) {
+ /* Directly copy input to output. */
+ uint32_t copy = (uint32_t)BROTLI_MIN(
+ size_t, s->remaining_metadata_bytes_, *available_out);
+ memcpy(*next_out, *next_in, copy);
+ *next_in += copy;
+ *available_in -= copy;
+ s->remaining_metadata_bytes_ -= copy;
+ *next_out += copy;
+ *available_out -= copy;
+ } else {
+ /* This guarantees progress in "TakeOutput" workflow. */
+ uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);
+ s->next_out_ = s->tiny_buf_.u8;
+ memcpy(s->next_out_, *next_in, copy);
+ *next_in += copy;
+ *available_in -= copy;
+ s->remaining_metadata_bytes_ -= copy;
+ s->available_out_ = copy;
+ }
+ continue;
+ }
+ }
+
+ return BROTLI_TRUE;
+}
+
+static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
+ if (s->params.size_hint == 0) {
+ uint64_t delta = UnprocessedInputSize(s);
+ uint64_t tail = available_in;
+ uint32_t limit = 1u << 30;
+ uint32_t total;
+ if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {
+ total = limit;
+ } else {
+ total = (uint32_t)(delta + tail);
+ }
+ s->params.size_hint = total;
+ }
+}
+
+BROTLI_BOOL BrotliEncoderCompressStream(
+ BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
+ const uint8_t** next_in, size_t* available_out,uint8_t** next_out,
+ size_t* total_out) {
+ if (!EnsureInitialized(s)) return BROTLI_FALSE;
+
+ /* Unfinished metadata block; check requirements. */
+ if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {
+ if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;
+ if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;
+ }
+
+ if (op == BROTLI_OPERATION_EMIT_METADATA) {
+ UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */
+ return ProcessMetadata(
+ s, available_in, next_in, available_out, next_out, total_out);
+ }
+
+ if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||
+ s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {
+ return BROTLI_FALSE;
+ }
+
+ if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {
+ return BROTLI_FALSE;
+ }
+ if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
+ s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,
+ available_out, next_out, total_out);
+ }
+ while (BROTLI_TRUE) {
+ size_t remaining_block_size = RemainingInputBlockSize(s);
+
+ if (remaining_block_size != 0 && *available_in != 0) {
+ size_t copy_input_size =
+ BROTLI_MIN(size_t, remaining_block_size, *available_in);
+ CopyInputToRingBuffer(s, copy_input_size, *next_in);
+ *next_in += copy_input_size;
+ *available_in -= copy_input_size;
+ continue;
+ }
+
+ if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
+ continue;
+ }
+
+ /* Compress data only when internal output buffer is empty, stream is not
+ finished and there is no pending flush request. */
+ if (s->available_out_ == 0 &&
+ s->stream_state_ == BROTLI_STREAM_PROCESSING) {
+ if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {
+ BROTLI_BOOL is_last = TO_BROTLI_BOOL(
+ (*available_in == 0) && op == BROTLI_OPERATION_FINISH);
+ BROTLI_BOOL force_flush = TO_BROTLI_BOOL(
+ (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);
+ BROTLI_BOOL result;
+ UpdateSizeHint(s, *available_in);
+ result = EncodeData(s, is_last, force_flush,
+ &s->available_out_, &s->next_out_);
+ if (!result) return BROTLI_FALSE;
+ if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
+ if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
+ continue;
+ }
+ }
+ break;
+ }
+ CheckFlushComplete(s);
+ return BROTLI_TRUE;
+}
+
+BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
+ return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&
+ !BrotliEncoderHasMoreOutput(s));
+}
+
+BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
+ return TO_BROTLI_BOOL(s->available_out_ != 0);
+}
+
+const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {
+ size_t consumed_size = s->available_out_;
+ uint8_t* result = s->next_out_;
+ if (*size) {
+ consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);
+ }
+ if (consumed_size) {
+ s->next_out_ += consumed_size;
+ s->available_out_ -= consumed_size;
+ s->total_out_ += consumed_size;
+ CheckFlushComplete(s);
+ *size = consumed_size;
+ } else {
+ *size = 0;
+ result = 0;
+ }
+ return result;
+}
+
+uint32_t BrotliEncoderVersion(void) {
+ return BROTLI_VERSION;
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/encoder_dict.c b/dviware/dvisvgm/libs/brotli/enc/encoder_dict.c
new file mode 100644
index 0000000000..8b2f6ad4a4
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/encoder_dict.c
@@ -0,0 +1,32 @@
+/* Copyright 2017 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#include "./encoder_dict.h"
+
+#include "../common/dictionary.h"
+#include "../common/transform.h"
+#include "./dictionary_hash.h"
+#include "./hash.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) {
+ dict->words = BrotliGetDictionary();
+
+ dict->hash_table = kStaticDictionaryHash;
+ dict->buckets = kStaticDictionaryBuckets;
+ dict->dict_words = kStaticDictionaryWords;
+
+ dict->cutoffTransformsCount = kCutoffTransformsCount;
+ dict->cutoffTransforms = kCutoffTransforms;
+
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/encoder_dict.h b/dviware/dvisvgm/libs/brotli/enc/encoder_dict.h
new file mode 100644
index 0000000000..3cb6b0ac15
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/encoder_dict.h
@@ -0,0 +1,41 @@
+/* Copyright 2017 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#ifndef BROTLI_ENC_ENCODER_DICT_H_
+#define BROTLI_ENC_ENCODER_DICT_H_
+
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./static_dict_lut.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Dictionary data (words and transforms) for 1 possible context */
+typedef struct BrotliEncoderDictionary {
+ const BrotliDictionary* words;
+
+ /* cut off for fast encoder */
+ uint32_t cutoffTransformsCount;
+ uint64_t cutoffTransforms;
+
+ /* from dictionary_hash.h, for fast encoder */
+ const uint16_t* hash_table;
+
+ /* from static_dict_lut.h, for slow encoder */
+ const uint16_t* buckets;
+ const DictWord* dict_words;
+} BrotliEncoderDictionary;
+
+BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/entropy_encode.c b/dviware/dvisvgm/libs/brotli/enc/entropy_encode.c
new file mode 100644
index 0000000000..97f9dfb82a
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/entropy_encode.c
@@ -0,0 +1,501 @@
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Entropy encoding (Huffman) utilities. */
+
+#include "./entropy_encode.h"
+
+#include <string.h> /* memset */
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+BROTLI_BOOL BrotliSetDepth(
+ int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {
+ int stack[16];
+ int level = 0;
+ int p = p0;
+ BROTLI_DCHECK(max_depth <= 15);
+ stack[0] = -1;
+ while (BROTLI_TRUE) {
+ if (pool[p].index_left_ >= 0) {
+ level++;
+ if (level > max_depth) return BROTLI_FALSE;
+ stack[level] = pool[p].index_right_or_value_;
+ p = pool[p].index_left_;
+ continue;
+ } else {
+ depth[pool[p].index_right_or_value_] = (uint8_t)level;
+ }
+ while (level >= 0 && stack[level] == -1) level--;
+ if (level < 0) return BROTLI_TRUE;
+ p = stack[level];
+ stack[level] = -1;
+ }
+}
+
+/* Sort the root nodes, least popular first. */
+static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
+ const HuffmanTree* v0, const HuffmanTree* v1) {
+ if (v0->total_count_ != v1->total_count_) {
+ return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
+ }
+ return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);
+}
+
+/* This function will create a Huffman tree.
+
+ The catch here is that the tree cannot be arbitrarily deep.
+ Brotli specifies a maximum depth of 15 bits for "code trees"
+ and 7 bits for "code length code trees."
+
+ count_limit is the value that is to be faked as the minimum value
+ and this minimum value is raised until the tree matches the
+ maximum length requirement.
+
+ This algorithm is not of excellent performance for very long data blocks,
+ especially when population counts are longer than 2**tree_limit, but
+ we are not planning to use this with extremely long blocks.
+
+ See http://en.wikipedia.org/wiki/Huffman_coding */
+void BrotliCreateHuffmanTree(const uint32_t* data,
+ const size_t length,
+ const int tree_limit,
+ HuffmanTree* tree,
+ uint8_t* depth) {
+ uint32_t count_limit;
+ HuffmanTree sentinel;
+ InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
+ /* For block sizes below 64 kB, we never need to do a second iteration
+ of this loop. Probably all of our block sizes will be smaller than
+ that, so this loop is mostly of academic interest. If we actually
+ would need this, we would be better off with the Katajainen algorithm. */
+ for (count_limit = 1; ; count_limit *= 2) {
+ size_t n = 0;
+ size_t i;
+ size_t j;
+ size_t k;
+ for (i = length; i != 0;) {
+ --i;
+ if (data[i]) {
+ const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);
+ InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);
+ }
+ }
+
+ if (n == 1) {
+ depth[tree[0].index_right_or_value_] = 1; /* Only one element. */
+ break;
+ }
+
+ SortHuffmanTreeItems(tree, n, SortHuffmanTree);
+
+ /* The nodes are:
+ [0, n): the sorted leaf nodes that we start with.
+ [n]: we add a sentinel here.
+ [n + 1, 2n): new parent nodes are added here, starting from
+ (n+1). These are naturally in ascending order.
+ [2n]: we add a sentinel at the end as well.
+ There will be (2n+1) elements at the end. */
+ tree[n] = sentinel;
+ tree[n + 1] = sentinel;
+
+ i = 0; /* Points to the next leaf node. */
+ j = n + 1; /* Points to the next non-leaf node. */
+ for (k = n - 1; k != 0; --k) {
+ size_t left, right;
+ if (tree[i].total_count_ <= tree[j].total_count_) {
+ left = i;
+ ++i;
+ } else {
+ left = j;
+ ++j;
+ }
+ if (tree[i].total_count_ <= tree[j].total_count_) {
+ right = i;
+ ++i;
+ } else {
+ right = j;
+ ++j;
+ }
+
+ {
+ /* The sentinel node becomes the parent node. */
+ size_t j_end = 2 * n - k;
+ tree[j_end].total_count_ =
+ tree[left].total_count_ + tree[right].total_count_;
+ tree[j_end].index_left_ = (int16_t)left;
+ tree[j_end].index_right_or_value_ = (int16_t)right;
+
+ /* Add back the last sentinel node. */
+ tree[j_end + 1] = sentinel;
+ }
+ }
+ if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {
+ /* We need to pack the Huffman tree in tree_limit bits. If this was not
+ successful, add fake entities to the lowest values and retry. */
+ break;
+ }
+ }
+}
+
+static void Reverse(uint8_t* v, size_t start, size_t end) {
+ --end;
+ while (start < end) {
+ uint8_t tmp = v[start];
+ v[start] = v[end];
+ v[end] = tmp;
+ ++start;
+ --end;
+ }
+}
+
+static void BrotliWriteHuffmanTreeRepetitions(
+ const uint8_t previous_value,
+ const uint8_t value,
+ size_t repetitions,
+ size_t* tree_size,
+ uint8_t* tree,
+ uint8_t* extra_bits_data) {
+ BROTLI_DCHECK(repetitions > 0);
+ if (previous_value != value) {
+ tree[*tree_size] = value;
+ extra_bits_data[*tree_size] = 0;
+ ++(*tree_size);
+ --repetitions;
+ }
+ if (repetitions == 7) {
+ tree[*tree_size] = value;
+ extra_bits_data[*tree_size] = 0;
+ ++(*tree_size);
+ --repetitions;
+ }
+ if (repetitions < 3) {
+ size_t i;
+ for (i = 0; i < repetitions; ++i) {
+ tree[*tree_size] = value;
+ extra_bits_data[*tree_size] = 0;
+ ++(*tree_size);
+ }
+ } else {
+ size_t start = *tree_size;
+ repetitions -= 3;
+ while (BROTLI_TRUE) {
+ tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;
+ extra_bits_data[*tree_size] = repetitions & 0x3;
+ ++(*tree_size);
+ repetitions >>= 2;
+ if (repetitions == 0) {
+ break;
+ }
+ --repetitions;
+ }
+ Reverse(tree, start, *tree_size);
+ Reverse(extra_bits_data, start, *tree_size);
+ }
+}
+
+static void BrotliWriteHuffmanTreeRepetitionsZeros(
+ size_t repetitions,
+ size_t* tree_size,
+ uint8_t* tree,
+ uint8_t* extra_bits_data) {
+ if (repetitions == 11) {
+ tree[*tree_size] = 0;
+ extra_bits_data[*tree_size] = 0;
+ ++(*tree_size);
+ --repetitions;
+ }
+ if (repetitions < 3) {
+ size_t i;
+ for (i = 0; i < repetitions; ++i) {
+ tree[*tree_size] = 0;
+ extra_bits_data[*tree_size] = 0;
+ ++(*tree_size);
+ }
+ } else {
+ size_t start = *tree_size;
+ repetitions -= 3;
+ while (BROTLI_TRUE) {
+ tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;
+ extra_bits_data[*tree_size] = repetitions & 0x7;
+ ++(*tree_size);
+ repetitions >>= 3;
+ if (repetitions == 0) {
+ break;
+ }
+ --repetitions;
+ }
+ Reverse(tree, start, *tree_size);
+ Reverse(extra_bits_data, start, *tree_size);
+ }
+}
+
+void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
+ uint8_t* good_for_rle) {
+ size_t nonzero_count = 0;
+ size_t stride;
+ size_t limit;
+ size_t sum;
+ const size_t streak_limit = 1240;
+ /* Let's make the Huffman code more compatible with RLE encoding. */
+ size_t i;
+ for (i = 0; i < length; i++) {
+ if (counts[i]) {
+ ++nonzero_count;
+ }
+ }
+ if (nonzero_count < 16) {
+ return;
+ }
+ while (length != 0 && counts[length - 1] == 0) {
+ --length;
+ }
+ if (length == 0) {
+ return; /* All zeros. */
+ }
+ /* Now counts[0..length - 1] does not have trailing zeros. */
+ {
+ size_t nonzeros = 0;
+ uint32_t smallest_nonzero = 1 << 30;
+ for (i = 0; i < length; ++i) {
+ if (counts[i] != 0) {
+ ++nonzeros;
+ if (smallest_nonzero > counts[i]) {
+ smallest_nonzero = counts[i];
+ }
+ }
+ }
+ if (nonzeros < 5) {
+ /* Small histogram will model it well. */
+ return;
+ }
+ if (smallest_nonzero < 4) {
+ size_t zeros = length - nonzeros;
+ if (zeros < 6) {
+ for (i = 1; i < length - 1; ++i) {
+ if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {
+ counts[i] = 1;
+ }
+ }
+ }
+ }
+ if (nonzeros < 28) {
+ return;
+ }
+ }
+ /* 2) Let's mark all population counts that already can be encoded
+ with an RLE code. */
+ memset(good_for_rle, 0, length);
+ {
+ /* Let's not spoil any of the existing good RLE codes.
+ Mark any seq of 0's that is longer as 5 as a good_for_rle.
+ Mark any seq of non-0's that is longer as 7 as a good_for_rle. */
+ uint32_t symbol = counts[0];
+ size_t step = 0;
+ for (i = 0; i <= length; ++i) {
+ if (i == length || counts[i] != symbol) {
+ if ((symbol == 0 && step >= 5) ||
+ (symbol != 0 && step >= 7)) {
+ size_t k;
+ for (k = 0; k < step; ++k) {
+ good_for_rle[i - k - 1] = 1;
+ }
+ }
+ step = 1;
+ if (i != length) {
+ symbol = counts[i];
+ }
+ } else {
+ ++step;
+ }
+ }
+ }
+ /* 3) Let's replace those population counts that lead to more RLE codes.
+ Math here is in 24.8 fixed point representation. */
+ stride = 0;
+ limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;
+ sum = 0;
+ for (i = 0; i <= length; ++i) {
+ if (i == length || good_for_rle[i] ||
+ (i != 0 && good_for_rle[i - 1]) ||
+ (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {
+ if (stride >= 4 || (stride >= 3 && sum == 0)) {
+ size_t k;
+ /* The stride must end, collapse what we have, if we have enough (4). */
+ size_t count = (sum + stride / 2) / stride;
+ if (count == 0) {
+ count = 1;
+ }
+ if (sum == 0) {
+ /* Don't make an all zeros stride to be upgraded to ones. */
+ count = 0;
+ }
+ for (k = 0; k < stride; ++k) {
+ /* We don't want to change value at counts[i],
+ that is already belonging to the next stride. Thus - 1. */
+ counts[i - k - 1] = (uint32_t)count;
+ }
+ }
+ stride = 0;
+ sum = 0;
+ if (i < length - 2) {
+ /* All interesting strides have a count of at least 4, */
+ /* at least when non-zeros. */
+ limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;
+ } else if (i < length) {
+ limit = 256 * counts[i];
+ } else {
+ limit = 0;
+ }
+ }
+ ++stride;
+ if (i != length) {
+ sum += counts[i];
+ if (stride >= 4) {
+ limit = (256 * sum + stride / 2) / stride;
+ }
+ if (stride == 4) {
+ limit += 120;
+ }
+ }
+ }
+}
+
+static void DecideOverRleUse(const uint8_t* depth, const size_t length,
+ BROTLI_BOOL* use_rle_for_non_zero,
+ BROTLI_BOOL* use_rle_for_zero) {
+ size_t total_reps_zero = 0;
+ size_t total_reps_non_zero = 0;
+ size_t count_reps_zero = 1;
+ size_t count_reps_non_zero = 1;
+ size_t i;
+ for (i = 0; i < length;) {
+ const uint8_t value = depth[i];
+ size_t reps = 1;
+ size_t k;
+ for (k = i + 1; k < length && depth[k] == value; ++k) {
+ ++reps;
+ }
+ if (reps >= 3 && value == 0) {
+ total_reps_zero += reps;
+ ++count_reps_zero;
+ }
+ if (reps >= 4 && value != 0) {
+ total_reps_non_zero += reps;
+ ++count_reps_non_zero;
+ }
+ i += reps;
+ }
+ *use_rle_for_non_zero =
+ TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);
+ *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);
+}
+
+void BrotliWriteHuffmanTree(const uint8_t* depth,
+ size_t length,
+ size_t* tree_size,
+ uint8_t* tree,
+ uint8_t* extra_bits_data) {
+ uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
+ size_t i;
+ BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;
+ BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;
+
+ /* Throw away trailing zeros. */
+ size_t new_length = length;
+ for (i = 0; i < length; ++i) {
+ if (depth[length - i - 1] == 0) {
+ --new_length;
+ } else {
+ break;
+ }
+ }
+
+ /* First gather statistics on if it is a good idea to do RLE. */
+ if (length > 50) {
+ /* Find RLE coding for longer codes.
+ Shorter codes seem not to benefit from RLE. */
+ DecideOverRleUse(depth, new_length,
+ &use_rle_for_non_zero, &use_rle_for_zero);
+ }
+
+ /* Actual RLE coding. */
+ for (i = 0; i < new_length;) {
+ const uint8_t value = depth[i];
+ size_t reps = 1;
+ if ((value != 0 && use_rle_for_non_zero) ||
+ (value == 0 && use_rle_for_zero)) {
+ size_t k;
+ for (k = i + 1; k < new_length && depth[k] == value; ++k) {
+ ++reps;
+ }
+ }
+ if (value == 0) {
+ BrotliWriteHuffmanTreeRepetitionsZeros(
+ reps, tree_size, tree, extra_bits_data);
+ } else {
+ BrotliWriteHuffmanTreeRepetitions(previous_value,
+ value, reps, tree_size,
+ tree, extra_bits_data);
+ previous_value = value;
+ }
+ i += reps;
+ }
+}
+
+static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
+ static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */
+ 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
+ 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
+ };
+ size_t retval = kLut[bits & 0x0F];
+ size_t i;
+ for (i = 4; i < num_bits; i += 4) {
+ retval <<= 4;
+ bits = (uint16_t)(bits >> 4);
+ retval |= kLut[bits & 0x0F];
+ }
+ retval >>= ((0 - num_bits) & 0x03);
+ return (uint16_t)retval;
+}
+
+/* 0..15 are values for bits */
+#define MAX_HUFFMAN_BITS 16
+
+void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
+ size_t len,
+ uint16_t* bits) {
+ /* In Brotli, all bit depths are [1..15]
+ 0 bit depth means that the symbol does not exist. */
+ uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };
+ uint16_t next_code[MAX_HUFFMAN_BITS];
+ size_t i;
+ int code = 0;
+ for (i = 0; i < len; ++i) {
+ ++bl_count[depth[i]];
+ }
+ bl_count[0] = 0;
+ next_code[0] = 0;
+ for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {
+ code = (code + bl_count[i - 1]) << 1;
+ next_code[i] = (uint16_t)code;
+ }
+ for (i = 0; i < len; ++i) {
+ if (depth[i]) {
+ bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);
+ }
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/entropy_encode.h b/dviware/dvisvgm/libs/brotli/enc/entropy_encode.h
new file mode 100644
index 0000000000..f23d9c379d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/entropy_encode.h
@@ -0,0 +1,122 @@
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Entropy encoding (Huffman) utilities. */
+
+#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_
+#define BROTLI_ENC_ENTROPY_ENCODE_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* A node of a Huffman tree. */
+typedef struct HuffmanTree {
+ uint32_t total_count_;
+ int16_t index_left_;
+ int16_t index_right_or_value_;
+} HuffmanTree;
+
+static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,
+ int16_t left, int16_t right) {
+ self->total_count_ = count;
+ self->index_left_ = left;
+ self->index_right_or_value_ = right;
+}
+
+/* Returns 1 is assignment of depths succeeded, otherwise 0. */
+BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(
+ int p, HuffmanTree* pool, uint8_t* depth, int max_depth);
+
+/* This function will create a Huffman tree.
+
+ The (data,length) contains the population counts.
+ The tree_limit is the maximum bit depth of the Huffman codes.
+
+ The depth contains the tree, i.e., how many bits are used for
+ the symbol.
+
+ The actual Huffman tree is constructed in the tree[] array, which has to
+ be at least 2 * length + 1 long.
+
+ See http://en.wikipedia.org/wiki/Huffman_coding */
+BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,
+ const size_t length,
+ const int tree_limit,
+ HuffmanTree* tree,
+ uint8_t* depth);
+
+/* Change the population counts in a way that the consequent
+ Huffman tree compression, especially its RLE-part will be more
+ likely to compress this data more efficiently.
+
+ length contains the size of the histogram.
+ counts contains the population counts.
+ good_for_rle is a buffer of at least length size */
+BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(
+ size_t length, uint32_t* counts, uint8_t* good_for_rle);
+
+/* Write a Huffman tree from bit depths into the bit-stream representation
+ of a Huffman tree. The generated Huffman tree is to be compressed once
+ more using a Huffman tree */
+BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,
+ size_t num,
+ size_t* tree_size,
+ uint8_t* tree,
+ uint8_t* extra_bits_data);
+
+/* Get the actual bit values for a tree of bit depths. */
+BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
+ size_t len,
+ uint16_t* bits);
+
+/* Input size optimized Shell sort. */
+typedef BROTLI_BOOL (*HuffmanTreeComparator)(
+ const HuffmanTree*, const HuffmanTree*);
+static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
+ const size_t n, HuffmanTreeComparator comparator) {
+ static const size_t gaps[] = {132, 57, 23, 10, 4, 1};
+ if (n < 13) {
+ /* Insertion sort. */
+ size_t i;
+ for (i = 1; i < n; ++i) {
+ HuffmanTree tmp = items[i];
+ size_t k = i;
+ size_t j = i - 1;
+ while (comparator(&tmp, &items[j])) {
+ items[k] = items[j];
+ k = j;
+ if (!j--) break;
+ }
+ items[k] = tmp;
+ }
+ return;
+ } else {
+ /* Shell sort. */
+ int g = n < 57 ? 2 : 0;
+ for (; g < 6; ++g) {
+ size_t gap = gaps[g];
+ size_t i;
+ for (i = gap; i < n; ++i) {
+ size_t j = i;
+ HuffmanTree tmp = items[i];
+ for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {
+ items[j] = items[j - gap];
+ }
+ items[j] = tmp;
+ }
+ }
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/entropy_encode_static.h b/dviware/dvisvgm/libs/brotli/enc/entropy_encode_static.h
new file mode 100644
index 0000000000..62b99a954c
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/entropy_encode_static.h
@@ -0,0 +1,539 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Static entropy codes used for faster meta-block encoding. */
+
+#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
+#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./write_bits.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static const uint8_t kCodeLengthDepth[18] = {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,
+};
+
+static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+};
+
+static const uint8_t kStaticDistanceCodeDepth[64] = {
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+};
+
+static const uint32_t kCodeLengthBits[18] = {
+ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,
+};
+
+static BROTLI_INLINE void StoreStaticCodeLengthCode(
+ size_t* storage_ix, uint8_t* storage) {
+ BrotliWriteBits(
+ 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);
+}
+
+static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,
+ 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,
+ 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,
+ 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,
+ 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,
+ 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,
+ 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,
+ 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,
+ 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,
+ 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,
+ 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,
+ 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,
+ 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,
+ 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,
+ 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,
+ 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,
+ 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,
+ 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,
+ 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,
+ 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,
+ 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,
+ 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,
+ 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,
+ 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,
+ 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,
+ 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,
+ 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,
+ 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,
+ 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,
+ 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,
+ 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,
+ 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,
+ 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,
+ 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,
+ 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,
+ 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,
+ 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,
+ 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,
+ 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,
+ 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,
+ 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,
+ 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,
+ 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,
+ 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,
+ 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,
+ 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,
+ 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,
+ 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,
+ 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,
+ 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,
+ 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,
+ 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,
+ 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,
+ 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,
+ 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,
+ 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,
+ 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,
+ 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,
+ 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,
+ 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,
+ 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,
+ 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,
+ 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,
+ 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,
+ 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,
+ 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,
+ 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,
+ 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,
+ 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,
+ 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,
+ 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,
+ 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,
+ 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,
+ 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,
+ 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,
+ 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,
+ 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,
+ 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,
+ 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,
+ 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,
+ 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,
+ 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,
+ 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,
+ 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,
+ 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,
+ 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,
+ 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,
+ 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,
+ 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,
+ 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,
+ 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,
+ 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,
+ 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,
+ 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,
+ 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,
+ 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,
+ 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,
+ 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,
+ 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,
+ 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,
+ 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,
+ 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,
+ 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,
+ 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,
+ 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,
+ 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,
+ 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,
+ 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,
+ 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,
+ 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,
+ 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,
+ 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,
+ 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,
+ 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,
+ 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,
+ 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,
+ 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,
+ 0x06f9cb87, 0x08f9cb87,
+};
+
+static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+};
+
+static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,
+ 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,
+ 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,
+ 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,
+ 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,
+ 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,
+ 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,
+ 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,
+ 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,
+ 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,
+ 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,
+ 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,
+ 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,
+ 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,
+ 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,
+ 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,
+ 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,
+ 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,
+ 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,
+ 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,
+ 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,
+ 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,
+ 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,
+ 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,
+ 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,
+ 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,
+ 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,
+ 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,
+ 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,
+ 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,
+ 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,
+ 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,
+ 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,
+ 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,
+ 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,
+ 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,
+ 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,
+ 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,
+ 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,
+ 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,
+ 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,
+ 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,
+ 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,
+ 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,
+ 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,
+ 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,
+ 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,
+ 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,
+ 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,
+ 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,
+ 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,
+ 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,
+ 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,
+ 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,
+ 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,
+ 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,
+ 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,
+ 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,
+ 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,
+ 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,
+ 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,
+ 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,
+ 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,
+ 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,
+ 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,
+ 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,
+ 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,
+ 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,
+ 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,
+ 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,
+ 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,
+ 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,
+ 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,
+ 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,
+ 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,
+ 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,
+ 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,
+ 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,
+ 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,
+ 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,
+ 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,
+ 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,
+ 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,
+ 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,
+ 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,
+ 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,
+ 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,
+ 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,
+ 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,
+ 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,
+ 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,
+ 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,
+ 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,
+ 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,
+ 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,
+ 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,
+ 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,
+ 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,
+ 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,
+ 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,
+ 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,
+ 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,
+ 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,
+ 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,
+ 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,
+ 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,
+ 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,
+ 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,
+ 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,
+ 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,
+ 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,
+ 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,
+ 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,
+ 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,
+ 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,
+ 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,
+ 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,
+ 0x2baeb6db, 0x3baeb6db,
+};
+
+static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
+};
+
+static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
+ 0, 256, 128, 384, 64, 320, 192, 448,
+ 32, 288, 160, 416, 96, 352, 224, 480,
+ 16, 272, 144, 400, 80, 336, 208, 464,
+ 48, 304, 176, 432, 112, 368, 240, 496,
+ 8, 264, 136, 392, 72, 328, 200, 456,
+ 40, 296, 168, 424, 104, 360, 232, 488,
+ 24, 280, 152, 408, 88, 344, 216, 472,
+ 56, 312, 184, 440, 120, 376, 248, 504,
+ 4, 260, 132, 388, 68, 324, 196, 452,
+ 36, 292, 164, 420, 100, 356, 228, 484,
+ 20, 276, 148, 404, 84, 340, 212, 468,
+ 52, 308, 180, 436, 116, 372, 244, 500,
+ 12, 268, 140, 396, 76, 332, 204, 460,
+ 44, 300, 172, 428, 108, 364, 236, 492,
+ 28, 284, 156, 412, 92, 348, 220, 476,
+ 60, 316, 188, 444, 124, 380, 252, 508,
+ 2, 258, 130, 386, 66, 322, 194, 450,
+ 34, 290, 162, 418, 98, 354, 226, 482,
+ 18, 274, 146, 402, 82, 338, 210, 466,
+ 50, 306, 178, 434, 114, 370, 242, 498,
+ 10, 266, 138, 394, 74, 330, 202, 458,
+ 42, 298, 170, 426, 106, 362, 234, 490,
+ 26, 282, 154, 410, 90, 346, 218, 474,
+ 58, 314, 186, 442, 122, 378, 250, 506,
+ 6, 262, 134, 390, 70, 326, 198, 454,
+ 38, 294, 166, 422, 102, 358, 230, 486,
+ 22, 278, 150, 406, 86, 342, 214, 470,
+ 54, 310, 182, 438, 118, 374, 246, 502,
+ 14, 270, 142, 398, 78, 334, 206, 462,
+ 46, 302, 174, 430, 110, 366, 238, 494,
+ 30, 286, 158, 414, 94, 350, 222, 478,
+ 62, 318, 190, 446, 126, 382, 254, 510,
+ 1, 257, 129, 385, 65, 321, 193, 449,
+ 33, 289, 161, 417, 97, 353, 225, 481,
+ 17, 273, 145, 401, 81, 337, 209, 465,
+ 49, 305, 177, 433, 113, 369, 241, 497,
+ 9, 265, 137, 393, 73, 329, 201, 457,
+ 41, 297, 169, 425, 105, 361, 233, 489,
+ 25, 281, 153, 409, 89, 345, 217, 473,
+ 57, 313, 185, 441, 121, 377, 249, 505,
+ 5, 261, 133, 389, 69, 325, 197, 453,
+ 37, 293, 165, 421, 101, 357, 229, 485,
+ 21, 277, 149, 405, 85, 341, 213, 469,
+ 53, 309, 181, 437, 117, 373, 245, 501,
+ 13, 269, 141, 397, 77, 333, 205, 461,
+ 45, 301, 173, 429, 109, 365, 237, 493,
+ 29, 285, 157, 413, 93, 349, 221, 477,
+ 61, 317, 189, 445, 125, 381, 253, 509,
+ 3, 259, 131, 387, 67, 323, 195, 451,
+ 35, 291, 163, 419, 99, 355, 227, 483,
+ 19, 275, 147, 403, 83, 339, 211, 467,
+ 51, 307, 179, 435, 115, 371, 243, 499,
+ 11, 267, 139, 395, 75, 331, 203, 459,
+ 43, 299, 171, 427, 107, 363, 235, 491,
+ 27, 283, 155, 411, 91, 347, 219, 475,
+ 59, 315, 187, 443, 123, 379, 251, 507,
+ 7, 1031, 519, 1543, 263, 1287, 775, 1799,
+ 135, 1159, 647, 1671, 391, 1415, 903, 1927,
+ 71, 1095, 583, 1607, 327, 1351, 839, 1863,
+ 199, 1223, 711, 1735, 455, 1479, 967, 1991,
+ 39, 1063, 551, 1575, 295, 1319, 807, 1831,
+ 167, 1191, 679, 1703, 423, 1447, 935, 1959,
+ 103, 1127, 615, 1639, 359, 1383, 871, 1895,
+ 231, 1255, 743, 1767, 487, 1511, 999, 2023,
+ 23, 1047, 535, 1559, 279, 1303, 791, 1815,
+ 151, 1175, 663, 1687, 407, 1431, 919, 1943,
+ 87, 1111, 599, 1623, 343, 1367, 855, 1879,
+ 215, 1239, 727, 1751, 471, 1495, 983, 2007,
+ 55, 1079, 567, 1591, 311, 1335, 823, 1847,
+ 183, 1207, 695, 1719, 439, 1463, 951, 1975,
+ 119, 1143, 631, 1655, 375, 1399, 887, 1911,
+ 247, 1271, 759, 1783, 503, 1527, 1015, 2039,
+ 15, 1039, 527, 1551, 271, 1295, 783, 1807,
+ 143, 1167, 655, 1679, 399, 1423, 911, 1935,
+ 79, 1103, 591, 1615, 335, 1359, 847, 1871,
+ 207, 1231, 719, 1743, 463, 1487, 975, 1999,
+ 47, 1071, 559, 1583, 303, 1327, 815, 1839,
+ 175, 1199, 687, 1711, 431, 1455, 943, 1967,
+ 111, 1135, 623, 1647, 367, 1391, 879, 1903,
+ 239, 1263, 751, 1775, 495, 1519, 1007, 2031,
+ 31, 1055, 543, 1567, 287, 1311, 799, 1823,
+ 159, 1183, 671, 1695, 415, 1439, 927, 1951,
+ 95, 1119, 607, 1631, 351, 1375, 863, 1887,
+ 223, 1247, 735, 1759, 479, 1503, 991, 2015,
+ 63, 1087, 575, 1599, 319, 1343, 831, 1855,
+ 191, 1215, 703, 1727, 447, 1471, 959, 1983,
+ 127, 1151, 639, 1663, 383, 1407, 895, 1919,
+ 255, 1279, 767, 1791, 511, 1535, 1023, 2047,
+};
+
+static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
+ size_t* storage_ix, uint8_t* storage) {
+ BrotliWriteBits(
+ 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);
+ BrotliWriteBits(3, 0x00000000U, storage_ix, storage);
+}
+
+static const uint16_t kStaticDistanceCodeBits[64] = {
+ 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
+ 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
+ 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
+ 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63,
+};
+
+static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
+ size_t* storage_ix, uint8_t* storage) {
+ BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/fast_log.h b/dviware/dvisvgm/libs/brotli/enc/fast_log.h
new file mode 100644
index 0000000000..cade1235ad
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/fast_log.h
@@ -0,0 +1,147 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Utilities for fast computation of logarithms. */
+
+#ifndef BROTLI_ENC_FAST_LOG_H_
+#define BROTLI_ENC_FAST_LOG_H_
+
+#include <math.h>
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
+ /* TODO: generalize and move to platform.h */
+#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
+ return 31u ^ (uint32_t)__builtin_clz((uint32_t)n);
+#else
+ uint32_t result = 0;
+ while (n >>= 1) result++;
+ return result;
+#endif
+}
+
+/* A lookup table for small values of log2(int) to be used in entropy
+ computation.
+
+ ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */
+static const float kLog2Table[] = {
+ 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,
+ 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,
+ 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,
+ 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,
+ 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,
+ 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,
+ 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,
+ 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,
+ 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,
+ 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,
+ 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,
+ 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,
+ 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,
+ 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,
+ 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,
+ 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,
+ 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,
+ 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,
+ 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,
+ 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,
+ 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,
+ 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,
+ 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,
+ 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,
+ 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,
+ 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,
+ 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,
+ 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,
+ 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,
+ 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,
+ 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,
+ 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,
+ 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,
+ 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,
+ 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,
+ 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,
+ 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,
+ 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,
+ 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,
+ 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,
+ 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,
+ 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,
+ 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,
+ 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,
+ 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,
+ 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,
+ 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,
+ 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,
+ 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,
+ 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,
+ 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,
+ 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,
+ 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,
+ 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,
+ 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,
+ 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,
+ 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,
+ 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,
+ 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,
+ 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,
+ 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,
+ 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,
+ 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,
+ 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,
+ 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,
+ 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,
+ 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,
+ 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,
+ 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,
+ 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,
+ 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,
+ 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,
+ 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,
+ 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,
+ 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,
+ 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,
+ 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,
+ 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,
+ 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,
+ 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,
+ 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,
+ 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,
+ 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,
+ 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,
+ 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,
+ 7.9943534368588578f
+};
+
+#define LOG_2_INV 1.4426950408889634
+
+/* Faster logarithm for small integers, with the property of log2(0) == 0. */
+static BROTLI_INLINE double FastLog2(size_t v) {
+ if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
+ return kLog2Table[v];
+ }
+#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
+ (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
+ /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
+ * function defined, so we use log() and a multiplication instead. */
+ return log((double)v) * LOG_2_INV;
+#else
+ return log2((double)v);
+#endif
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_FAST_LOG_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/find_match_length.h b/dviware/dvisvgm/libs/brotli/enc/find_match_length.h
new file mode 100644
index 0000000000..bc428cffda
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/find_match_length.h
@@ -0,0 +1,80 @@
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Function to find maximal matching prefixes of strings. */
+
+#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_
+#define BROTLI_ENC_FIND_MATCH_LENGTH_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Separate implementation for little-endian 64-bit targets, for speed. */
+#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN)
+
+static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
+ const uint8_t* s2,
+ size_t limit) {
+ size_t matched = 0;
+ size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
+ while (BROTLI_PREDICT_TRUE(--limit2)) {
+ if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
+ BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
+ s2 += 8;
+ matched += 8;
+ } else {
+ uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
+ BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
+ size_t matching_bits = (size_t)__builtin_ctzll(x);
+ matched += matching_bits >> 3;
+ return matched;
+ }
+ }
+ limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
+ while (--limit) {
+ if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
+ ++s2;
+ ++matched;
+ } else {
+ return matched;
+ }
+ }
+ return matched;
+}
+#else
+static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
+ const uint8_t* s2,
+ size_t limit) {
+ size_t matched = 0;
+ const uint8_t* s2_limit = s2 + limit;
+ const uint8_t* s2_ptr = s2;
+ /* Find out how long the match is. We loop over the data 32 bits at a
+ time until we find a 32-bit block that doesn't match; then we find
+ the first non-matching bit and use that to calculate the total
+ length of the match. */
+ while (s2_ptr <= s2_limit - 4 &&
+ BrotliUnalignedRead32(s2_ptr) ==
+ BrotliUnalignedRead32(s1 + matched)) {
+ s2_ptr += 4;
+ matched += 4;
+ }
+ while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {
+ ++s2_ptr;
+ ++matched;
+ }
+ return matched;
+}
+#endif
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash.h b/dviware/dvisvgm/libs/brotli/enc/hash.h
new file mode 100644
index 0000000000..8c5a7bb5ad
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash.h
@@ -0,0 +1,498 @@
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* A (forgetful) hash table to the data seen by the compressor, to
+ help create backward references to previous data. */
+
+#ifndef BROTLI_ENC_HASH_H_
+#define BROTLI_ENC_HASH_H_
+
+#include <string.h> /* memcmp, memset */
+
+#include "../common/constants.h"
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./encoder_dict.h"
+#include "./fast_log.h"
+#include "./find_match_length.h"
+#include "./memory.h"
+#include "./quality.h"
+#include "./static_dict.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Pointer to hasher data.
+ *
+ * Excluding initialization and destruction, hasher can be passed as
+ * HasherHandle by value.
+ *
+ * Typically hasher data consists of 3 sections:
+ * * HasherCommon structure
+ * * private structured hasher data, depending on hasher type
+ * * private dynamic hasher data, depending on hasher type and parameters
+ *
+ * Using "define" instead of "typedef", because on MSVC __restrict does not work
+ * on typedef pointer types. */
+#define HasherHandle uint8_t*
+
+typedef struct {
+ BrotliHasherParams params;
+
+ /* False if hasher needs to be "prepared" before use. */
+ BROTLI_BOOL is_prepared_;
+
+ size_t dict_num_lookups;
+ size_t dict_num_matches;
+} HasherCommon;
+
+static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) {
+ return (HasherCommon*)handle;
+}
+
+#define score_t size_t
+
+static const uint32_t kCutoffTransformsCount = 10;
+/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */
+/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */
+static const uint64_t kCutoffTransforms =
+ BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);
+
+typedef struct HasherSearchResult {
+ size_t len;
+ size_t distance;
+ score_t score;
+ int len_code_delta; /* == len_code - len */
+} HasherSearchResult;
+
+/* kHashMul32 multiplier has these properties:
+ * The multiplier must be odd. Otherwise we may lose the highest bit.
+ * No long streaks of ones or zeros.
+ * There is no effort to ensure that it is a prime, the oddity is enough
+ for this use.
+ * The number has been tuned heuristically against compression benchmarks. */
+static const uint32_t kHashMul32 = 0x1E35A7BD;
+static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1E35A7BD, 0x1E35A7BD);
+static const uint64_t kHashMul64Long =
+ BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);
+
+static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
+ uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return h >> (32 - 14);
+}
+
+static BROTLI_INLINE void PrepareDistanceCache(
+ int* BROTLI_RESTRICT distance_cache, const int num_distances) {
+ if (num_distances > 4) {
+ int last_distance = distance_cache[0];
+ distance_cache[4] = last_distance - 1;
+ distance_cache[5] = last_distance + 1;
+ distance_cache[6] = last_distance - 2;
+ distance_cache[7] = last_distance + 2;
+ distance_cache[8] = last_distance - 3;
+ distance_cache[9] = last_distance + 3;
+ if (num_distances > 10) {
+ int next_last_distance = distance_cache[1];
+ distance_cache[10] = next_last_distance - 1;
+ distance_cache[11] = next_last_distance + 1;
+ distance_cache[12] = next_last_distance - 2;
+ distance_cache[13] = next_last_distance + 2;
+ distance_cache[14] = next_last_distance - 3;
+ distance_cache[15] = next_last_distance + 3;
+ }
+ }
+}
+
+#define BROTLI_LITERAL_BYTE_SCORE 135
+#define BROTLI_DISTANCE_BIT_PENALTY 30
+/* Score must be positive after applying maximal penalty. */
+#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))
+
+/* Usually, we always choose the longest backward reference. This function
+ allows for the exception of that rule.
+
+ If we choose a backward reference that is further away, it will
+ usually be coded with more bits. We approximate this by assuming
+ log2(distance). If the distance can be expressed in terms of the
+ last four distances, we use some heuristic constants to estimate
+ the bits cost. For the first up to four literals we use the bit
+ cost of the literals from the literal cost model, after that we
+ use the average bit cost of the cost model.
+
+ This function is used to sometimes discard a longer backward reference
+ when it is not much longer and the bit cost for encoding it is more
+ than the saved literals.
+
+ backward_reference_offset MUST be positive. */
+static BROTLI_INLINE score_t BackwardReferenceScore(
+ size_t copy_length, size_t backward_reference_offset) {
+ return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -
+ BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);
+}
+
+static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
+ size_t copy_length) {
+ return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +
+ BROTLI_SCORE_BASE + 15;
+}
+
+static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
+ size_t distance_short_code) {
+ return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);
+}
+
+static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
+ const BrotliEncoderDictionary* dictionary, size_t item,
+ const uint8_t* data, size_t max_length, size_t max_backward,
+ size_t max_distance, HasherSearchResult* out) {
+ size_t len;
+ size_t word_idx;
+ size_t offset;
+ size_t matchlen;
+ size_t backward;
+ score_t score;
+ len = item & 0x1F;
+ word_idx = item >> 5;
+ offset = dictionary->words->offsets_by_length[len] + len * word_idx;
+ if (len > max_length) {
+ return BROTLI_FALSE;
+ }
+
+ matchlen =
+ FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);
+ if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {
+ return BROTLI_FALSE;
+ }
+ {
+ size_t cut = len - matchlen;
+ size_t transform_id = (cut << 2) +
+ (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
+ backward = max_backward + 1 + word_idx +
+ (transform_id << dictionary->words->size_bits_by_length[len]);
+ }
+ if (backward > max_distance) {
+ return BROTLI_FALSE;
+ }
+ score = BackwardReferenceScore(matchlen, backward);
+ if (score < out->score) {
+ return BROTLI_FALSE;
+ }
+ out->len = matchlen;
+ out->len_code_delta = (int)len - (int)matchlen;
+ out->distance = backward;
+ out->score = score;
+ return BROTLI_TRUE;
+}
+
+static BROTLI_INLINE void SearchInStaticDictionary(
+ const BrotliEncoderDictionary* dictionary,
+ HasherHandle handle, const uint8_t* data, size_t max_length,
+ size_t max_backward, size_t max_distance,
+ HasherSearchResult* out, BROTLI_BOOL shallow) {
+ size_t key;
+ size_t i;
+ HasherCommon* self = GetHasherCommon(handle);
+ if (self->dict_num_matches < (self->dict_num_lookups >> 7)) {
+ return;
+ }
+ key = Hash14(data) << 1;
+ for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {
+ size_t item = dictionary->hash_table[key];
+ self->dict_num_lookups++;
+ if (item != 0) {
+ BROTLI_BOOL item_matches = TestStaticDictionaryItem(
+ dictionary, item, data,
+ max_length, max_backward, max_distance, out);
+ if (item_matches) {
+ self->dict_num_matches++;
+ }
+ }
+ }
+}
+
+typedef struct BackwardMatch {
+ uint32_t distance;
+ uint32_t length_and_code;
+} BackwardMatch;
+
+static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
+ size_t dist, size_t len) {
+ self->distance = (uint32_t)dist;
+ self->length_and_code = (uint32_t)(len << 5);
+}
+
+static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,
+ size_t dist, size_t len, size_t len_code) {
+ self->distance = (uint32_t)dist;
+ self->length_and_code =
+ (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));
+}
+
+static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {
+ return self->length_and_code >> 5;
+}
+
+static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {
+ size_t code = self->length_and_code & 31;
+ return code ? code : BackwardMatchLength(self);
+}
+
+#define EXPAND_CAT(a, b) CAT(a, b)
+#define CAT(a, b) a ## b
+#define FN(X) EXPAND_CAT(X, HASHER())
+
+#define HASHER() H10
+#define BUCKET_BITS 17
+#define MAX_TREE_SEARCH_DEPTH 64
+#define MAX_TREE_COMP_LENGTH 128
+#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */
+#undef MAX_TREE_SEARCH_DEPTH
+#undef MAX_TREE_COMP_LENGTH
+#undef BUCKET_BITS
+#undef HASHER
+/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */
+#define MAX_NUM_MATCHES_H10 128
+
+/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression
+ a little faster (0.5% - 1%) and it compresses 0.15% better on small text
+ and HTML inputs. */
+
+#define HASHER() H2
+#define BUCKET_BITS 16
+#define BUCKET_SWEEP 1
+#define HASH_LEN 5
+#define USE_DICTIONARY 1
+#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
+#undef BUCKET_SWEEP
+#undef USE_DICTIONARY
+#undef HASHER
+
+#define HASHER() H3
+#define BUCKET_SWEEP 2
+#define USE_DICTIONARY 0
+#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
+#undef USE_DICTIONARY
+#undef BUCKET_SWEEP
+#undef BUCKET_BITS
+#undef HASHER
+
+#define HASHER() H4
+#define BUCKET_BITS 17
+#define BUCKET_SWEEP 4
+#define USE_DICTIONARY 1
+#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
+#undef USE_DICTIONARY
+#undef HASH_LEN
+#undef BUCKET_SWEEP
+#undef BUCKET_BITS
+#undef HASHER
+
+#define HASHER() H5
+#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */
+#undef HASHER
+
+#define HASHER() H6
+#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */
+#undef HASHER
+
+#define BUCKET_BITS 15
+
+#define NUM_LAST_DISTANCES_TO_CHECK 4
+#define NUM_BANKS 1
+#define BANK_BITS 16
+#define HASHER() H40
+#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
+#undef HASHER
+#undef NUM_LAST_DISTANCES_TO_CHECK
+
+#define NUM_LAST_DISTANCES_TO_CHECK 10
+#define HASHER() H41
+#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
+#undef HASHER
+#undef NUM_LAST_DISTANCES_TO_CHECK
+#undef NUM_BANKS
+#undef BANK_BITS
+
+#define NUM_LAST_DISTANCES_TO_CHECK 16
+#define NUM_BANKS 512
+#define BANK_BITS 9
+#define HASHER() H42
+#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
+#undef HASHER
+#undef NUM_LAST_DISTANCES_TO_CHECK
+#undef NUM_BANKS
+#undef BANK_BITS
+
+#undef BUCKET_BITS
+
+#define HASHER() H54
+#define BUCKET_BITS 20
+#define BUCKET_SWEEP 4
+#define HASH_LEN 7
+#define USE_DICTIONARY 0
+#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
+#undef USE_DICTIONARY
+#undef HASH_LEN
+#undef BUCKET_SWEEP
+#undef BUCKET_BITS
+#undef HASHER
+
+/* fast large window hashers */
+
+#define HASHER() HROLLING_FAST
+#define CHUNKLEN 32
+#define JUMP 4
+#define NUMBUCKETS 16777216
+#define MASK ((NUMBUCKETS * 64) - 1)
+#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
+#undef JUMP
+#undef HASHER
+
+
+#define HASHER() HROLLING
+#define JUMP 1
+#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
+#undef MASK
+#undef NUMBUCKETS
+#undef JUMP
+#undef CHUNKLEN
+#undef HASHER
+
+#define HASHER() H35
+#define HASHER_A H3
+#define HASHER_B HROLLING_FAST
+#include "./hash_composite_inc.h" /* NOLINT(build/include) */
+#undef HASHER_A
+#undef HASHER_B
+#undef HASHER
+
+#define HASHER() H55
+#define HASHER_A H54
+#define HASHER_B HROLLING_FAST
+#include "./hash_composite_inc.h" /* NOLINT(build/include) */
+#undef HASHER_A
+#undef HASHER_B
+#undef HASHER
+
+#define HASHER() H65
+#define HASHER_A H6
+#define HASHER_B HROLLING
+#include "./hash_composite_inc.h" /* NOLINT(build/include) */
+#undef HASHER_A
+#undef HASHER_B
+#undef HASHER
+
+#undef FN
+#undef CAT
+#undef EXPAND_CAT
+
+#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\
+ H(35) H(55) H(65)
+#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)
+
+static BROTLI_INLINE void DestroyHasher(
+ MemoryManager* m, HasherHandle* handle) {
+ if (*handle == NULL) return;
+ BROTLI_FREE(m, *handle);
+}
+
+static BROTLI_INLINE void HasherReset(HasherHandle handle) {
+ if (handle == NULL) return;
+ GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE;
+}
+
+static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params,
+ BROTLI_BOOL one_shot, const size_t input_size) {
+ size_t result = sizeof(HasherCommon);
+ switch (params->hasher.type) {
+#define SIZE_(N) \
+ case N: \
+ result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \
+ break;
+ FOR_ALL_HASHERS(SIZE_)
+#undef SIZE_
+ default:
+ break;
+ }
+ return result;
+}
+
+static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle,
+ BrotliEncoderParams* params, const uint8_t* data, size_t position,
+ size_t input_size, BROTLI_BOOL is_last) {
+ HasherHandle self = NULL;
+ HasherCommon* common = NULL;
+ BROTLI_BOOL one_shot = (position == 0 && is_last);
+ if (*handle == NULL) {
+ size_t alloc_size;
+ ChooseHasher(params, &params->hasher);
+ alloc_size = HasherSize(params, one_shot, input_size);
+ self = BROTLI_ALLOC(m, uint8_t, alloc_size);
+ if (BROTLI_IS_OOM(m)) return;
+ *handle = self;
+ common = GetHasherCommon(self);
+ common->params = params->hasher;
+ switch (common->params.type) {
+#define INITIALIZE_(N) \
+ case N: \
+ InitializeH ## N(*handle, params); \
+ break;
+ FOR_ALL_HASHERS(INITIALIZE_);
+#undef INITIALIZE_
+ default:
+ break;
+ }
+ HasherReset(*handle);
+ }
+
+ self = *handle;
+ common = GetHasherCommon(self);
+ if (!common->is_prepared_) {
+ switch (common->params.type) {
+#define PREPARE_(N) \
+ case N: \
+ PrepareH ## N(self, one_shot, input_size, data); \
+ break;
+ FOR_ALL_HASHERS(PREPARE_)
+#undef PREPARE_
+ default: break;
+ }
+ if (position == 0) {
+ common->dict_num_lookups = 0;
+ common->dict_num_matches = 0;
+ }
+ common->is_prepared_ = BROTLI_TRUE;
+ }
+}
+
+static BROTLI_INLINE void InitOrStitchToPreviousBlock(
+ MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask,
+ BrotliEncoderParams* params, size_t position, size_t input_size,
+ BROTLI_BOOL is_last) {
+ HasherHandle self;
+ HasherSetup(m, handle, params, data, position, input_size, is_last);
+ if (BROTLI_IS_OOM(m)) return;
+ self = *handle;
+ switch (GetHasherCommon(self)->params.type) {
+#define INIT_(N) \
+ case N: \
+ StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \
+ break;
+ FOR_ALL_HASHERS(INIT_)
+#undef INIT_
+ default: break;
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_HASH_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_composite_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_composite_inc.h
new file mode 100644
index 0000000000..b266aa2f8d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_composite_inc.h
@@ -0,0 +1,136 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2018 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, HASHER_A, HASHER_B */
+
+/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A
+ and HASHER_B. */
+
+#define HashComposite HASHER()
+
+#define FN_A(X) EXPAND_CAT(X, HASHER_A)
+#define FN_B(X) EXPAND_CAT(X, HASHER_B)
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
+ size_t a = FN_A(HashTypeLength)();
+ size_t b = FN_B(HashTypeLength)();
+ return a > b ? a : b;
+}
+
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
+ size_t a = FN_A(StoreLookahead)();
+ size_t b = FN_B(StoreLookahead)();
+ return a > b ? a : b;
+}
+
+typedef struct HashComposite {
+ HasherHandle ha;
+ HasherHandle hb;
+ const BrotliEncoderParams* params;
+} HashComposite;
+
+static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) {
+ return (HashComposite*)&(GetHasherCommon(handle)[1]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ HashComposite* self = FN(Self)(handle);
+ self->ha = 0;
+ self->hb = 0;
+ self->params = params;
+ /* TODO: Initialize of the hashers is defered to Prepare (and params
+ remembered here) because we don't get the one_shot and input_size params
+ here that are needed to know the memory size of them. Instead provide
+ those params to all hashers FN(Initialize) */
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashComposite* self = FN(Self)(handle);
+ if (!self->ha) {
+ HasherCommon* common_a;
+ HasherCommon* common_b;
+
+ self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite);
+ common_a = (HasherCommon*)self->ha;
+ common_a->params = self->params->hasher;
+ common_a->is_prepared_ = BROTLI_FALSE;
+ common_a->dict_num_lookups = 0;
+ common_a->dict_num_matches = 0;
+ FN_A(Initialize)(self->ha, self->params);
+
+ self->hb = self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInBytes)(
+ self->params, one_shot, input_size);
+ common_b = (HasherCommon*)self->hb;
+ common_b->params = self->params->hasher;
+ common_b->is_prepared_ = BROTLI_FALSE;
+ common_b->dict_num_lookups = 0;
+ common_b->dict_num_matches = 0;
+ FN_B(Initialize)(self->hb, self->params);
+ }
+ FN_A(Prepare)(self->ha, one_shot, input_size, data);
+ FN_B(Prepare)(self->hb, one_shot, input_size, data);
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ return sizeof(HashComposite) + 2 * sizeof(HasherCommon) +
+ FN_A(HashMemAllocInBytes)(params, one_shot, input_size) +
+ FN_B(HashMemAllocInBytes)(params, one_shot, input_size);
+}
+
+static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
+ const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
+ HashComposite* self = FN(Self)(handle);
+ FN_A(Store)(self->ha, data, mask, ix);
+ FN_B(Store)(self->hb, data, mask, ix);
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ HashComposite* self = FN(Self)(handle);
+ FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end);
+ FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end);
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ring_buffer_mask) {
+ HashComposite* self = FN(Self)(handle);
+ FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer,
+ ring_buffer_mask);
+ FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer,
+ ring_buffer_mask);
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ HashComposite* self = FN(Self)(handle);
+ FN_A(PrepareDistanceCache)(self->ha, distance_cache);
+ FN_B(PrepareDistanceCache)(self->hb, distance_cache);
+}
+
+static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
+ const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
+ const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HashComposite* self = FN(Self)(handle);
+ FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask,
+ distance_cache, cur_ix, max_length, max_backward, gap,
+ max_distance, out);
+ FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask,
+ distance_cache, cur_ix, max_length, max_backward, gap,
+ max_distance, out);
+}
+
+#undef HashComposite
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
new file mode 100644
index 0000000000..41cb3ff03a
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_forgetful_chain_inc.h
@@ -0,0 +1,254 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,
+ NUM_LAST_DISTANCES_TO_CHECK */
+
+/* A (forgetful) hash table to the data seen by the compressor, to
+ help create backward references to previous data.
+
+ Hashes are stored in chains which are bucketed to groups. Group of chains
+ share a storage "bank". When more than "bank size" chain nodes are added,
+ oldest nodes are replaced; this way several chains may share a tail. */
+
+#define HashForgetfulChain HASHER()
+
+#define BANK_SIZE (1 << BANK_BITS)
+
+/* Number of hash buckets. */
+#define BUCKET_SIZE (1 << BUCKET_BITS)
+
+#define CAPPED_CHAINS 0
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
+
+/* HashBytes is the function that chooses the bucket to place the address in.*/
+static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) {
+ const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return h >> (32 - BUCKET_BITS);
+}
+
+typedef struct FN(Slot) {
+ uint16_t delta;
+ uint16_t next;
+} FN(Slot);
+
+typedef struct FN(Bank) {
+ FN(Slot) slots[BANK_SIZE];
+} FN(Bank);
+
+typedef struct HashForgetfulChain {
+ uint32_t addr[BUCKET_SIZE];
+ uint16_t head[BUCKET_SIZE];
+ /* Truncated hash used for quick rejection of "distance cache" candidates. */
+ uint8_t tiny_hash[65536];
+ FN(Bank) banks[NUM_BANKS];
+ uint16_t free_slot_idx[NUM_BANKS];
+ size_t max_hops;
+} HashForgetfulChain;
+
+static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) {
+ return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ FN(Self)(handle)->max_hops =
+ (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashForgetfulChain* self = FN(Self)(handle);
+ /* Partial preparation is 100 times slower (per socket). */
+ size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
+ if (one_shot && input_size <= partial_prepare_threshold) {
+ size_t i;
+ for (i = 0; i < input_size; ++i) {
+ size_t bucket = FN(HashBytes)(&data[i]);
+ /* See InitEmpty comment. */
+ self->addr[bucket] = 0xCCCCCCCC;
+ self->head[bucket] = 0xCCCC;
+ }
+ } else {
+ /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position
+ processed by hasher never reaches 3GB + 64M; this makes all new chains
+ to be terminated after the first node. */
+ memset(self->addr, 0xCC, sizeof(self->addr));
+ memset(self->head, 0, sizeof(self->head));
+ }
+ memset(self->tiny_hash, 0, sizeof(self->tiny_hash));
+ memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ BROTLI_UNUSED(params);
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+ return sizeof(HashForgetfulChain);
+}
+
+/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend
+ node to corresponding chain; also update tiny_hash for current position. */
+static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
+ const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
+ HashForgetfulChain* self = FN(Self)(handle);
+ const size_t key = FN(HashBytes)(&data[ix & mask]);
+ const size_t bank = key & (NUM_BANKS - 1);
+ const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
+ size_t delta = ix - self->addr[key];
+ self->tiny_hash[(uint16_t)ix] = (uint8_t)key;
+ if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;
+ self->banks[bank].slots[idx].delta = (uint16_t)delta;
+ self->banks[bank].slots[idx].next = self->head[key];
+ self->addr[key] = (uint32_t)ix;
+ self->head[key] = (uint16_t)idx;
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ size_t i;
+ for (i = ix_start; i < ix_end; ++i) {
+ FN(Store)(handle, data, mask, i);
+ }
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ring_buffer_mask) {
+ if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
+ /* Prepare the hashes for three last bytes of the last write.
+ These could not be calculated before, since they require knowledge
+ of both the previous and the current block. */
+ FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3);
+ FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2);
+ FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1);
+ }
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ BROTLI_UNUSED(handle);
+ PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);
+}
+
+/* Find a longest backward match of &data[cur_ix] up to the length of
+ max_length and stores the position cur_ix in the hash table.
+
+ REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
+ values; if this method is invoked repeatedly with the same distance
+ cache values, it is enough to invoke FN(PrepareDistanceCache) once.
+
+ Does not look for matches longer than max_length.
+ Does not look for matches further away than max_backward.
+ Writes the best match into |out|.
+ |out|->score is updated only if a better match is found. */
+static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
+ const int* BROTLI_RESTRICT distance_cache,
+ const size_t cur_ix, const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HashForgetfulChain* self = FN(Self)(handle);
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ /* Don't accept a short copy from far away. */
+ score_t min_score = out->score;
+ score_t best_score = out->score;
+ size_t best_len = out->len;
+ size_t i;
+ const size_t key = FN(HashBytes)(&data[cur_ix_masked]);
+ const uint8_t tiny_hash = (uint8_t)(key);
+ out->len = 0;
+ out->len_code_delta = 0;
+ /* Try last distance first. */
+ for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {
+ const size_t backward = (size_t)distance_cache[i];
+ size_t prev_ix = (cur_ix - backward);
+ /* For distance code 0 we want to consider 2-byte matches. */
+ if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue;
+ if (prev_ix >= cur_ix || backward > max_backward) {
+ continue;
+ }
+ prev_ix &= ring_buffer_mask;
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 2) {
+ score_t score = BackwardReferenceScoreUsingLastDistance(len);
+ if (best_score < score) {
+ if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ }
+ {
+ const size_t bank = key & (NUM_BANKS - 1);
+ size_t backward = 0;
+ size_t hops = self->max_hops;
+ size_t delta = cur_ix - self->addr[key];
+ size_t slot = self->head[key];
+ while (hops--) {
+ size_t prev_ix;
+ size_t last = slot;
+ backward += delta;
+ if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;
+ prev_ix = (cur_ix - backward) & ring_buffer_mask;
+ slot = self->banks[bank].slots[last].next;
+ delta = self->banks[bank].slots[last].delta;
+ if (cur_ix_masked + best_len > ring_buffer_mask ||
+ prev_ix + best_len > ring_buffer_mask ||
+ data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ continue;
+ }
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ /* Comparing for >= 3 does not change the semantics, but just saves
+ for a few unnecessary binary logarithms in backward reference
+ score, since we are not interested in such short matches. */
+ score_t score = BackwardReferenceScore(len, backward);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ FN(Store)(handle, data, ring_buffer_mask, cur_ix);
+ }
+ if (out->score == min_score) {
+ SearchInStaticDictionary(dictionary,
+ handle, &data[cur_ix_masked], max_length, max_backward + gap,
+ max_distance, out, BROTLI_FALSE);
+ }
+}
+
+#undef BANK_SIZE
+#undef BUCKET_SIZE
+#undef CAPPED_CHAINS
+
+#undef HashForgetfulChain
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_longest_match64_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match64_inc.h
new file mode 100644
index 0000000000..cb953a644f
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match64_inc.h
@@ -0,0 +1,267 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+/* A (forgetful) hash table to the data seen by the compressor, to
+ help create backward references to previous data.
+
+ This is a hash map of fixed size (bucket_size_) to a ring buffer of
+ fixed size (block_size_). The ring buffer contains the last block_size_
+ index positions of the given hash key in the compressed data. */
+
+#define HashLongestMatch HASHER()
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
+
+/* HashBytes is the function that chooses the bucket to place the address in. */
+static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data,
+ const uint64_t mask,
+ const int shift) {
+ const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return (uint32_t)(h >> shift);
+}
+
+typedef struct HashLongestMatch {
+ /* Number of hash buckets. */
+ size_t bucket_size_;
+ /* Only block_size_ newest backward references are kept,
+ and the older are forgotten. */
+ size_t block_size_;
+ /* Left-shift for computing hash bucket index from hash value. */
+ int hash_shift_;
+ /* Mask for selecting the next 4-8 bytes of input */
+ uint64_t hash_mask_;
+ /* Mask for accessing entries in a block (in a ring-buffer manner). */
+ uint32_t block_mask_;
+
+ /* --- Dynamic size members --- */
+
+ /* Number of entries in a particular bucket. */
+ /* uint16_t num[bucket_size]; */
+
+ /* Buckets containing block_size_ of backward references. */
+ /* uint32_t* buckets[bucket_size * block_size]; */
+} HashLongestMatch;
+
+static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
+ return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
+}
+
+static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
+ return (uint16_t*)(&self[1]);
+}
+
+static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
+ return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ HasherCommon* common = GetHasherCommon(handle);
+ HashLongestMatch* self = FN(Self)(handle);
+ BROTLI_UNUSED(params);
+ self->hash_shift_ = 64 - common->params.bucket_bits;
+ self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len);
+ self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
+ self->block_size_ = (size_t)1 << common->params.block_bits;
+ self->block_mask_ = (uint32_t)(self->block_size_ - 1);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ /* Partial preparation is 100 times slower (per socket). */
+ size_t partial_prepare_threshold = self->bucket_size_ >> 6;
+ if (one_shot && input_size <= partial_prepare_threshold) {
+ size_t i;
+ for (i = 0; i < input_size; ++i) {
+ const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_,
+ self->hash_shift_);
+ num[key] = 0;
+ }
+ } else {
+ memset(num, 0, self->bucket_size_ * sizeof(num[0]));
+ }
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
+ size_t block_size = (size_t)1 << params->hasher.block_bits;
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+ return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
+}
+
+/* Look at 4 bytes at &data[ix & mask].
+ Compute a hash from these, and store the value of ix at that position. */
+static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
+ const size_t mask, const size_t ix) {
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_,
+ self->hash_shift_);
+ const size_t minor_ix = num[key] & self->block_mask_;
+ const size_t offset =
+ minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
+ FN(Buckets)(self)[offset] = (uint32_t)ix;
+ ++num[key];
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ size_t i;
+ for (i = ix_start; i < ix_end; ++i) {
+ FN(Store)(handle, data, mask, i);
+ }
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask) {
+ if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
+ /* Prepare the hashes for three last bytes of the last write.
+ These could not be calculated before, since they require knowledge
+ of both the previous and the current block. */
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
+ }
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ PrepareDistanceCache(distance_cache,
+ GetHasherCommon(handle)->params.num_last_distances_to_check);
+}
+
+/* Find a longest backward match of &data[cur_ix] up to the length of
+ max_length and stores the position cur_ix in the hash table.
+
+ REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
+ values; if this method is invoked repeatedly with the same distance
+ cache values, it is enough to invoke FN(PrepareDistanceCache) once.
+
+ Does not look for matches longer than max_length.
+ Does not look for matches further away than max_backward.
+ Writes the best match into |out|.
+ |out|->score is updated only if a better match is found. */
+static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
+ const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
+ const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HasherCommon* common = GetHasherCommon(handle);
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ uint32_t* buckets = FN(Buckets)(self);
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ /* Don't accept a short copy from far away. */
+ score_t min_score = out->score;
+ score_t best_score = out->score;
+ size_t best_len = out->len;
+ size_t i;
+ out->len = 0;
+ out->len_code_delta = 0;
+ /* Try last distance first. */
+ for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
+ const size_t backward = (size_t)distance_cache[i];
+ size_t prev_ix = (size_t)(cur_ix - backward);
+ if (prev_ix >= cur_ix) {
+ continue;
+ }
+ if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
+ continue;
+ }
+ prev_ix &= ring_buffer_mask;
+
+ if (cur_ix_masked + best_len > ring_buffer_mask ||
+ prev_ix + best_len > ring_buffer_mask ||
+ data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ continue;
+ }
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 3 || (len == 2 && i < 2)) {
+ /* Comparing for >= 2 does not change the semantics, but just saves for
+ a few unnecessary binary logarithms in backward reference score,
+ since we are not interested in such short matches. */
+ score_t score = BackwardReferenceScoreUsingLastDistance(len);
+ if (best_score < score) {
+ if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ }
+ {
+ const uint32_t key = FN(HashBytes)(
+ &data[cur_ix_masked], self->hash_mask_, self->hash_shift_);
+ uint32_t* BROTLI_RESTRICT bucket =
+ &buckets[key << common->params.block_bits];
+ const size_t down =
+ (num[key] > self->block_size_) ?
+ (num[key] - self->block_size_) : 0u;
+ for (i = num[key]; i > down;) {
+ size_t prev_ix = bucket[--i & self->block_mask_];
+ const size_t backward = cur_ix - prev_ix;
+ if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
+ break;
+ }
+ prev_ix &= ring_buffer_mask;
+ if (cur_ix_masked + best_len > ring_buffer_mask ||
+ prev_ix + best_len > ring_buffer_mask ||
+ data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ continue;
+ }
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ /* Comparing for >= 3 does not change the semantics, but just saves
+ for a few unnecessary binary logarithms in backward reference
+ score, since we are not interested in such short matches. */
+ score_t score = BackwardReferenceScore(len, backward);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
+ ++num[key];
+ }
+ if (min_score == out->score) {
+ SearchInStaticDictionary(dictionary,
+ handle, &data[cur_ix_masked], max_length, max_backward + gap,
+ max_distance, out, BROTLI_FALSE);
+ }
+}
+
+#undef HashLongestMatch
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_inc.h
new file mode 100644
index 0000000000..457f5a9ed2
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_inc.h
@@ -0,0 +1,259 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+/* A (forgetful) hash table to the data seen by the compressor, to
+ help create backward references to previous data.
+
+ This is a hash map of fixed size (bucket_size_) to a ring buffer of
+ fixed size (block_size_). The ring buffer contains the last block_size_
+ index positions of the given hash key in the compressed data. */
+
+#define HashLongestMatch HASHER()
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
+
+/* HashBytes is the function that chooses the bucket to place the address in. */
+static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) {
+ uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return (uint32_t)(h >> shift);
+}
+
+typedef struct HashLongestMatch {
+ /* Number of hash buckets. */
+ size_t bucket_size_;
+ /* Only block_size_ newest backward references are kept,
+ and the older are forgotten. */
+ size_t block_size_;
+ /* Left-shift for computing hash bucket index from hash value. */
+ int hash_shift_;
+ /* Mask for accessing entries in a block (in a ring-buffer manner). */
+ uint32_t block_mask_;
+
+ /* --- Dynamic size members --- */
+
+ /* Number of entries in a particular bucket. */
+ /* uint16_t num[bucket_size]; */
+
+ /* Buckets containing block_size_ of backward references. */
+ /* uint32_t* buckets[bucket_size * block_size]; */
+} HashLongestMatch;
+
+static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
+ return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
+}
+
+static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
+ return (uint16_t*)(&self[1]);
+}
+
+static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
+ return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ HasherCommon* common = GetHasherCommon(handle);
+ HashLongestMatch* self = FN(Self)(handle);
+ BROTLI_UNUSED(params);
+ self->hash_shift_ = 32 - common->params.bucket_bits;
+ self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
+ self->block_size_ = (size_t)1 << common->params.block_bits;
+ self->block_mask_ = (uint32_t)(self->block_size_ - 1);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ /* Partial preparation is 100 times slower (per socket). */
+ size_t partial_prepare_threshold = self->bucket_size_ >> 6;
+ if (one_shot && input_size <= partial_prepare_threshold) {
+ size_t i;
+ for (i = 0; i < input_size; ++i) {
+ const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);
+ num[key] = 0;
+ }
+ } else {
+ memset(num, 0, self->bucket_size_ * sizeof(num[0]));
+ }
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
+ size_t block_size = (size_t)1 << params->hasher.block_bits;
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+ return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
+}
+
+/* Look at 4 bytes at &data[ix & mask].
+ Compute a hash from these, and store the value of ix at that position. */
+static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
+ const size_t mask, const size_t ix) {
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);
+ const size_t minor_ix = num[key] & self->block_mask_;
+ const size_t offset =
+ minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
+ FN(Buckets)(self)[offset] = (uint32_t)ix;
+ ++num[key];
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ size_t i;
+ for (i = ix_start; i < ix_end; ++i) {
+ FN(Store)(handle, data, mask, i);
+ }
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask) {
+ if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
+ /* Prepare the hashes for three last bytes of the last write.
+ These could not be calculated before, since they require knowledge
+ of both the previous and the current block. */
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
+ }
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ PrepareDistanceCache(distance_cache,
+ GetHasherCommon(handle)->params.num_last_distances_to_check);
+}
+
+/* Find a longest backward match of &data[cur_ix] up to the length of
+ max_length and stores the position cur_ix in the hash table.
+
+ REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
+ values; if this method is invoked repeatedly with the same distance
+ cache values, it is enough to invoke FN(PrepareDistanceCache) once.
+
+ Does not look for matches longer than max_length.
+ Does not look for matches further away than max_backward.
+ Writes the best match into |out|.
+ |out|->score is updated only if a better match is found. */
+static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
+ const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
+ const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HasherCommon* common = GetHasherCommon(handle);
+ HashLongestMatch* self = FN(Self)(handle);
+ uint16_t* num = FN(Num)(self);
+ uint32_t* buckets = FN(Buckets)(self);
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ /* Don't accept a short copy from far away. */
+ score_t min_score = out->score;
+ score_t best_score = out->score;
+ size_t best_len = out->len;
+ size_t i;
+ out->len = 0;
+ out->len_code_delta = 0;
+ /* Try last distance first. */
+ for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
+ const size_t backward = (size_t)distance_cache[i];
+ size_t prev_ix = (size_t)(cur_ix - backward);
+ if (prev_ix >= cur_ix) {
+ continue;
+ }
+ if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
+ continue;
+ }
+ prev_ix &= ring_buffer_mask;
+
+ if (cur_ix_masked + best_len > ring_buffer_mask ||
+ prev_ix + best_len > ring_buffer_mask ||
+ data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ continue;
+ }
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 3 || (len == 2 && i < 2)) {
+ /* Comparing for >= 2 does not change the semantics, but just saves for
+ a few unnecessary binary logarithms in backward reference score,
+ since we are not interested in such short matches. */
+ score_t score = BackwardReferenceScoreUsingLastDistance(len);
+ if (best_score < score) {
+ if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ }
+ {
+ const uint32_t key =
+ FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);
+ uint32_t* BROTLI_RESTRICT bucket =
+ &buckets[key << common->params.block_bits];
+ const size_t down =
+ (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;
+ for (i = num[key]; i > down;) {
+ size_t prev_ix = bucket[--i & self->block_mask_];
+ const size_t backward = cur_ix - prev_ix;
+ if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
+ break;
+ }
+ prev_ix &= ring_buffer_mask;
+ if (cur_ix_masked + best_len > ring_buffer_mask ||
+ prev_ix + best_len > ring_buffer_mask ||
+ data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
+ continue;
+ }
+ {
+ const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ /* Comparing for >= 3 does not change the semantics, but just saves
+ for a few unnecessary binary logarithms in backward reference
+ score, since we are not interested in such short matches. */
+ score_t score = BackwardReferenceScore(len, backward);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = best_score;
+ }
+ }
+ }
+ }
+ bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
+ ++num[key];
+ }
+ if (min_score == out->score) {
+ SearchInStaticDictionary(dictionary,
+ handle, &data[cur_ix_masked], max_length, max_backward + gap,
+ max_distance, out, BROTLI_FALSE);
+ }
+}
+
+#undef HashLongestMatch
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_quickly_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_quickly_inc.h
new file mode 100644
index 0000000000..a7b9639feb
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_longest_match_quickly_inc.h
@@ -0,0 +1,235 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN,
+ USE_DICTIONARY
+ */
+
+#define HashLongestMatchQuickly HASHER()
+
+#define BUCKET_SIZE (1 << BUCKET_BITS)
+
+#define HASH_MAP_SIZE (4 << BUCKET_BITS)
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
+
+/* HashBytes is the function that chooses the bucket to place
+ the address in. The HashLongestMatch and HashLongestMatchQuickly
+ classes have separate, different implementations of hashing. */
+static uint32_t FN(HashBytes)(const uint8_t* data) {
+ const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *
+ kHashMul64);
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return (uint32_t)(h >> (64 - BUCKET_BITS));
+}
+
+/* A (forgetful) hash table to the data seen by the compressor, to
+ help create backward references to previous data.
+
+ This is a hash map of fixed size (BUCKET_SIZE). Starting from the
+ given index, BUCKET_SWEEP buckets are used to store values of a key. */
+typedef struct HashLongestMatchQuickly {
+ uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP];
+} HashLongestMatchQuickly;
+
+static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) {
+ return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ BROTLI_UNUSED(handle);
+ BROTLI_UNUSED(params);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashLongestMatchQuickly* self = FN(Self)(handle);
+ /* Partial preparation is 100 times slower (per socket). */
+ size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7;
+ if (one_shot && input_size <= partial_prepare_threshold) {
+ size_t i;
+ for (i = 0; i < input_size; ++i) {
+ const uint32_t key = FN(HashBytes)(&data[i]);
+ memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0]));
+ }
+ } else {
+ /* It is not strictly necessary to fill this buffer here, but
+ not filling will make the results of the compression stochastic
+ (but correct). This is because random data would cause the
+ system to find accidentally good backward references here and there. */
+ memset(&self->buckets_[0], 0, sizeof(self->buckets_));
+ }
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ BROTLI_UNUSED(params);
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+ return sizeof(HashLongestMatchQuickly);
+}
+
+/* Look at 5 bytes at &data[ix & mask].
+ Compute a hash from these, and store the value somewhere within
+ [ix .. ix+3]. */
+static BROTLI_INLINE void FN(Store)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix) {
+ const uint32_t key = FN(HashBytes)(&data[ix & mask]);
+ /* Wiggle the value with the bucket sweep range. */
+ const uint32_t off = (ix >> 3) % BUCKET_SWEEP;
+ FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix;
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ size_t i;
+ for (i = ix_start; i < ix_end; ++i) {
+ FN(Store)(handle, data, mask, i);
+ }
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(
+ HasherHandle handle, size_t num_bytes, size_t position,
+ const uint8_t* ringbuffer, size_t ringbuffer_mask) {
+ if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
+ /* Prepare the hashes for three last bytes of the last write.
+ These could not be calculated before, since they require knowledge
+ of both the previous and the current block. */
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
+ FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
+ }
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ BROTLI_UNUSED(handle);
+ BROTLI_UNUSED(distance_cache);
+}
+
+/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]
+ up to the length of max_length and stores the position cur_ix in the
+ hash table.
+
+ Does not look for matches longer than max_length.
+ Does not look for matches further away than max_backward.
+ Writes the best match into |out|.
+ |out|->score is updated only if a better match is found. */
+static BROTLI_INLINE void FN(FindLongestMatch)(
+ HasherHandle handle, const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data,
+ const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,
+ const size_t cur_ix, const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HashLongestMatchQuickly* self = FN(Self)(handle);
+ const size_t best_len_in = out->len;
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
+ int compare_char = data[cur_ix_masked + best_len_in];
+ score_t min_score = out->score;
+ score_t best_score = out->score;
+ size_t best_len = best_len_in;
+ size_t cached_backward = (size_t)distance_cache[0];
+ size_t prev_ix = cur_ix - cached_backward;
+ out->len_code_delta = 0;
+ if (prev_ix < cur_ix) {
+ prev_ix &= (uint32_t)ring_buffer_mask;
+ if (compare_char == data[prev_ix + best_len]) {
+ size_t len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ const score_t score = BackwardReferenceScoreUsingLastDistance(len);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = len;
+ out->distance = cached_backward;
+ out->score = best_score;
+ compare_char = data[cur_ix_masked + best_len];
+ if (BUCKET_SWEEP == 1) {
+ self->buckets_[key] = (uint32_t)cur_ix;
+ return;
+ }
+ }
+ }
+ }
+ }
+ if (BUCKET_SWEEP == 1) {
+ size_t backward;
+ size_t len;
+ /* Only one to look for, don't bother to prepare for a loop. */
+ prev_ix = self->buckets_[key];
+ self->buckets_[key] = (uint32_t)cur_ix;
+ backward = cur_ix - prev_ix;
+ prev_ix &= (uint32_t)ring_buffer_mask;
+ if (compare_char != data[prev_ix + best_len_in]) {
+ return;
+ }
+ if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
+ return;
+ }
+ len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ const score_t score = BackwardReferenceScore(len, backward);
+ if (best_score < score) {
+ out->len = len;
+ out->distance = backward;
+ out->score = score;
+ return;
+ }
+ }
+ } else {
+ uint32_t* bucket = self->buckets_ + key;
+ int i;
+ prev_ix = *bucket++;
+ for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) {
+ const size_t backward = cur_ix - prev_ix;
+ size_t len;
+ prev_ix &= (uint32_t)ring_buffer_mask;
+ if (compare_char != data[prev_ix + best_len]) {
+ continue;
+ }
+ if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
+ continue;
+ }
+ len = FindMatchLengthWithLimit(&data[prev_ix],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4) {
+ const score_t score = BackwardReferenceScore(len, backward);
+ if (best_score < score) {
+ best_score = score;
+ best_len = len;
+ out->len = best_len;
+ out->distance = backward;
+ out->score = score;
+ compare_char = data[cur_ix_masked + best_len];
+ }
+ }
+ }
+ }
+ if (USE_DICTIONARY && min_score == out->score) {
+ SearchInStaticDictionary(dictionary,
+ handle, &data[cur_ix_masked], max_length, max_backward + gap,
+ max_distance, out, BROTLI_TRUE);
+ }
+ self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix;
+}
+
+#undef HASH_MAP_SIZE
+#undef BUCKET_SIZE
+
+#undef HashLongestMatchQuickly
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_rolling_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_rolling_inc.h
new file mode 100644
index 0000000000..17f8a408e2
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_rolling_inc.h
@@ -0,0 +1,216 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2018 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */
+/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */
+/* JUMP = skip bytes for speedup */
+
+/* Rolling hash for long distance long string matches. Stores one position
+ per bucket, bucket key is computed over a long region. */
+
+#define HashRolling HASHER()
+
+static const uint32_t FN(kRollingHashMul32) = 69069;
+static const uint32_t FN(kInvalidPos) = 0xffffffff;
+
+/* This hasher uses a longer forward length, but returning a higher value here
+ will hurt compression by the main hasher when combined with a composite
+ hasher. The hasher tests for forward itself instead. */
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
+
+/* Computes a code from a single byte. A lookup table of 256 values could be
+ used, but simply adding 1 works about as good. */
+static uint32_t FN(HashByte)(uint8_t byte) {
+ return (uint32_t)byte + 1u;
+}
+
+static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,
+ uint32_t factor) {
+ return (uint32_t)(factor * state + FN(HashByte)(add));
+}
+
+static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,
+ uint8_t rem, uint32_t factor,
+ uint32_t factor_remove) {
+ return (uint32_t)(factor * state +
+ FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));
+}
+
+typedef struct HashRolling {
+ uint32_t state;
+ uint32_t* table;
+ size_t next_ix;
+
+ uint32_t chunk_len;
+ uint32_t factor;
+ uint32_t factor_remove;
+} HashRolling;
+
+static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) {
+ return (HashRolling*)&(GetHasherCommon(handle)[1]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ HashRolling* self = FN(Self)(handle);
+ size_t i;
+ self->state = 0;
+ self->next_ix = 0;
+
+ self->factor = FN(kRollingHashMul32);
+
+ /* Compute the factor of the oldest byte to remove: factor**steps modulo
+ 0xffffffff (the multiplications rely on 32-bit overflow) */
+ self->factor_remove = 1;
+ for (i = 0; i < CHUNKLEN; i += JUMP) {
+ self->factor_remove *= self->factor;
+ }
+
+ self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling));
+ for (i = 0; i < NUMBUCKETS; i++) {
+ self->table[i] = FN(kInvalidPos);
+ }
+
+ BROTLI_UNUSED(params);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashRolling* self = FN(Self)(handle);
+ size_t i;
+ /* Too small size, cannot use this hasher. */
+ if (input_size < CHUNKLEN) return;
+ self->state = 0;
+ for (i = 0; i < CHUNKLEN; i += JUMP) {
+ self->state = FN(HashRollingFunctionInitial)(
+ self->state, data[i], self->factor);
+ }
+ BROTLI_UNUSED(one_shot);
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t);
+ BROTLI_UNUSED(params);
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+}
+
+static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
+ const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
+ BROTLI_UNUSED(handle);
+ BROTLI_UNUSED(data);
+ BROTLI_UNUSED(mask);
+ BROTLI_UNUSED(ix);
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ BROTLI_UNUSED(handle);
+ BROTLI_UNUSED(data);
+ BROTLI_UNUSED(mask);
+ BROTLI_UNUSED(ix_start);
+ BROTLI_UNUSED(ix_end);
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ring_buffer_mask) {
+ /* In this case we must re-initialize the hasher from scratch from the
+ current position. */
+ HashRolling* self = FN(Self)(handle);
+ size_t position_masked;
+ size_t available = num_bytes;
+ if ((position & (JUMP - 1)) != 0) {
+ size_t diff = JUMP - (position & (JUMP - 1));
+ available = (diff > available) ? 0 : (available - diff);
+ position += diff;
+ }
+ position_masked = position & ring_buffer_mask;
+ /* wrapping around ringbuffer not handled. */
+ if (available > ring_buffer_mask - position_masked) {
+ available = ring_buffer_mask - position_masked;
+ }
+
+ FN(Prepare)(handle, BROTLI_FALSE, available,
+ ringbuffer + (position & ring_buffer_mask));
+ self->next_ix = position;
+ BROTLI_UNUSED(num_bytes);
+}
+
+static BROTLI_INLINE void FN(PrepareDistanceCache)(
+ HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
+ BROTLI_UNUSED(handle);
+ BROTLI_UNUSED(distance_cache);
+}
+
+static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
+ const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
+ const size_t max_length, const size_t max_backward,
+ const size_t gap, const size_t max_distance,
+ HasherSearchResult* BROTLI_RESTRICT out) {
+ HashRolling* self = FN(Self)(handle);
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ size_t pos = self->next_ix;
+
+ if ((cur_ix & (JUMP - 1)) != 0) return;
+
+ /* Not enough lookahead */
+ if (max_length < CHUNKLEN) return;
+
+ for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {
+ uint32_t code = self->state & MASK;
+
+ uint8_t rem = data[pos & ring_buffer_mask];
+ uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];
+ size_t found_ix = FN(kInvalidPos);
+
+ self->state = FN(HashRollingFunction)(
+ self->state, add, rem, self->factor, self->factor_remove);
+
+ if (code < NUMBUCKETS) {
+ found_ix = self->table[code];
+ self->table[code] = (uint32_t)pos;
+ if (pos == cur_ix && found_ix != FN(kInvalidPos)) {
+ /* The cast to 32-bit makes backward distances up to 4GB work even
+ if cur_ix is above 4GB, despite using 32-bit values in the table. */
+ size_t backward = (uint32_t)(cur_ix - found_ix);
+ if (backward <= max_backward) {
+ const size_t found_ix_masked = found_ix & ring_buffer_mask;
+ const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],
+ &data[cur_ix_masked],
+ max_length);
+ if (len >= 4 && len > out->len) {
+ score_t score = BackwardReferenceScore(len, backward);
+ if (score > out->score) {
+ out->len = len;
+ out->distance = backward;
+ out->score = score;
+ out->len_code_delta = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ self->next_ix = cur_ix + JUMP;
+
+ /* NOTE: this hasher does not search in the dictionary. It is used as
+ backup-hasher, the main hasher already searches in it. */
+ BROTLI_UNUSED(dictionary);
+ BROTLI_UNUSED(distance_cache);
+ BROTLI_UNUSED(gap);
+ BROTLI_UNUSED(max_distance);
+}
+
+#undef HashRolling
diff --git a/dviware/dvisvgm/libs/brotli/enc/hash_to_binary_tree_inc.h b/dviware/dvisvgm/libs/brotli/enc/hash_to_binary_tree_inc.h
new file mode 100644
index 0000000000..7fb0356f55
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/hash_to_binary_tree_inc.h
@@ -0,0 +1,328 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,
+ MAX_TREE_SEARCH_DEPTH */
+
+/* A (forgetful) hash table where each hash bucket contains a binary tree of
+ sequences whose first 4 bytes share the same hash code.
+ Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting
+ position in the input data. The binary tree is sorted by the lexicographic
+ order of the sequences, and it is also a max-heap with respect to the
+ starting positions. */
+
+#define HashToBinaryTree HASHER()
+
+#define BUCKET_SIZE (1 << BUCKET_BITS)
+
+static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
+static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
+ return MAX_TREE_COMP_LENGTH;
+}
+
+static uint32_t FN(HashBytes)(const uint8_t* data) {
+ uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return h >> (32 - BUCKET_BITS);
+}
+
+typedef struct HashToBinaryTree {
+ /* The window size minus 1 */
+ size_t window_mask_;
+
+ /* Hash table that maps the 4-byte hashes of the sequence to the last
+ position where this hash was found, which is the root of the binary
+ tree of sequences that share this hash bucket. */
+ uint32_t buckets_[BUCKET_SIZE];
+
+ /* A position used to mark a non-existent sequence, i.e. a tree is empty if
+ its root is at invalid_pos_ and a node is a leaf if both its children
+ are at invalid_pos_. */
+ uint32_t invalid_pos_;
+
+ /* --- Dynamic size members --- */
+
+ /* The union of the binary trees of each hash bucket. The root of the tree
+ corresponding to a hash is a sequence starting at buckets_[hash] and
+ the left and right children of a sequence starting at pos are
+ forest_[2 * pos] and forest_[2 * pos + 1]. */
+ /* uint32_t forest[2 * num_nodes] */
+} HashToBinaryTree;
+
+static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) {
+ return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]);
+}
+
+static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) {
+ return (uint32_t*)(&self[1]);
+}
+
+static void FN(Initialize)(
+ HasherHandle handle, const BrotliEncoderParams* params) {
+ HashToBinaryTree* self = FN(Self)(handle);
+ self->window_mask_ = (1u << params->lgwin) - 1u;
+ self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);
+}
+
+static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
+ size_t input_size, const uint8_t* data) {
+ HashToBinaryTree* self = FN(Self)(handle);
+ uint32_t invalid_pos = self->invalid_pos_;
+ uint32_t i;
+ BROTLI_UNUSED(data);
+ BROTLI_UNUSED(one_shot);
+ BROTLI_UNUSED(input_size);
+ for (i = 0; i < BUCKET_SIZE; i++) {
+ self->buckets_[i] = invalid_pos;
+ }
+}
+
+static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
+ const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
+ size_t input_size) {
+ size_t num_nodes = (size_t)1 << params->lgwin;
+ if (one_shot && input_size < num_nodes) {
+ num_nodes = input_size;
+ }
+ return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes;
+}
+
+static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self,
+ const size_t pos) {
+ return 2 * (pos & self->window_mask_);
+}
+
+static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self,
+ const size_t pos) {
+ return 2 * (pos & self->window_mask_) + 1;
+}
+
+/* Stores the hash of the next 4 bytes and in a single tree-traversal, the
+ hash bucket's binary tree is searched for matches and is re-rooted at the
+ current position.
+
+ If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the
+ current position is searched for matches, but the state of the hash table
+ is not changed, since we can not know the final sorting order of the
+ current (incomplete) sequence.
+
+ This function must be called with increasing cur_ix positions. */
+static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(
+ HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data,
+ const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,
+ const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,
+ BackwardMatch* BROTLI_RESTRICT matches) {
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ const size_t max_comp_len =
+ BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);
+ const BROTLI_BOOL should_reroot_tree =
+ TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);
+ const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
+ uint32_t* forest = FN(Forest)(self);
+ size_t prev_ix = self->buckets_[key];
+ /* The forest index of the rightmost node of the left subtree of the new
+ root, updated as we traverse and re-root the tree of the hash bucket. */
+ size_t node_left = FN(LeftChildIndex)(self, cur_ix);
+ /* The forest index of the leftmost node of the right subtree of the new
+ root, updated as we traverse and re-root the tree of the hash bucket. */
+ size_t node_right = FN(RightChildIndex)(self, cur_ix);
+ /* The match length of the rightmost node of the left subtree of the new
+ root, updated as we traverse and re-root the tree of the hash bucket. */
+ size_t best_len_left = 0;
+ /* The match length of the leftmost node of the right subtree of the new
+ root, updated as we traverse and re-root the tree of the hash bucket. */
+ size_t best_len_right = 0;
+ size_t depth_remaining;
+ if (should_reroot_tree) {
+ self->buckets_[key] = (uint32_t)cur_ix;
+ }
+ for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {
+ const size_t backward = cur_ix - prev_ix;
+ const size_t prev_ix_masked = prev_ix & ring_buffer_mask;
+ if (backward == 0 || backward > max_backward || depth_remaining == 0) {
+ if (should_reroot_tree) {
+ forest[node_left] = self->invalid_pos_;
+ forest[node_right] = self->invalid_pos_;
+ }
+ break;
+ }
+ {
+ const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);
+ size_t len;
+ BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);
+ len = cur_len +
+ FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],
+ &data[prev_ix_masked + cur_len],
+ max_length - cur_len);
+ BROTLI_DCHECK(
+ 0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));
+ if (matches && len > *best_len) {
+ *best_len = len;
+ InitBackwardMatch(matches++, backward, len);
+ }
+ if (len >= max_comp_len) {
+ if (should_reroot_tree) {
+ forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];
+ forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];
+ }
+ break;
+ }
+ if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {
+ best_len_left = len;
+ if (should_reroot_tree) {
+ forest[node_left] = (uint32_t)prev_ix;
+ }
+ node_left = FN(RightChildIndex)(self, prev_ix);
+ prev_ix = forest[node_left];
+ } else {
+ best_len_right = len;
+ if (should_reroot_tree) {
+ forest[node_right] = (uint32_t)prev_ix;
+ }
+ node_right = FN(LeftChildIndex)(self, prev_ix);
+ prev_ix = forest[node_right];
+ }
+ }
+ }
+ return matches;
+}
+
+/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the
+ length of max_length and stores the position cur_ix in the hash table.
+
+ Sets *num_matches to the number of matches found, and stores the found
+ matches in matches[0] to matches[*num_matches - 1]. The matches will be
+ sorted by strictly increasing length and (non-strictly) increasing
+ distance. */
+static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle,
+ const BrotliEncoderDictionary* dictionary, const uint8_t* data,
+ const size_t ring_buffer_mask, const size_t cur_ix,
+ const size_t max_length, const size_t max_backward,
+ const size_t gap, const BrotliEncoderParams* params,
+ BackwardMatch* matches) {
+ BackwardMatch* const orig_matches = matches;
+ const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
+ size_t best_len = 1;
+ const size_t short_match_max_backward =
+ params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;
+ size_t stop = cur_ix - short_match_max_backward;
+ uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];
+ size_t i;
+ if (cur_ix < short_match_max_backward) { stop = 0; }
+ for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {
+ size_t prev_ix = i;
+ const size_t backward = cur_ix - prev_ix;
+ if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
+ break;
+ }
+ prev_ix &= ring_buffer_mask;
+ if (data[cur_ix_masked] != data[prev_ix] ||
+ data[cur_ix_masked + 1] != data[prev_ix + 1]) {
+ continue;
+ }
+ {
+ const size_t len =
+ FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],
+ max_length);
+ if (len > best_len) {
+ best_len = len;
+ InitBackwardMatch(matches++, backward, len);
+ }
+ }
+ }
+ if (best_len < max_length) {
+ matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix,
+ ring_buffer_mask, max_length, max_backward, &best_len, matches);
+ }
+ for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {
+ dict_matches[i] = kInvalidMatch;
+ }
+ {
+ size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);
+ if (BrotliFindAllStaticDictionaryMatches(dictionary,
+ &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {
+ size_t maxlen = BROTLI_MIN(
+ size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);
+ size_t l;
+ for (l = minlen; l <= maxlen; ++l) {
+ uint32_t dict_id = dict_matches[l];
+ if (dict_id < kInvalidMatch) {
+ size_t distance = max_backward + gap + (dict_id >> 5) + 1;
+ if (distance <= params->dist.max_distance) {
+ InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);
+ }
+ }
+ }
+ }
+ }
+ return (size_t)(matches - orig_matches);
+}
+
+/* Stores the hash of the next 4 bytes and re-roots the binary tree at the
+ current sequence, without returning any matches.
+ REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */
+static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
+ const size_t mask, const size_t ix) {
+ HashToBinaryTree* self = FN(Self)(handle);
+ /* Maximum distance is window size - 16, see section 9.1. of the spec. */
+ const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;
+ FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,
+ max_backward, NULL, NULL);
+}
+
+static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
+ const uint8_t* data, const size_t mask, const size_t ix_start,
+ const size_t ix_end) {
+ size_t i = ix_start;
+ size_t j = ix_start;
+ if (ix_start + 63 <= ix_end) {
+ i = ix_end - 63;
+ }
+ if (ix_start + 512 <= i) {
+ for (; j < i; j += 8) {
+ FN(Store)(handle, data, mask, j);
+ }
+ }
+ for (; i < ix_end; ++i) {
+ FN(Store)(handle, data, mask, i);
+ }
+}
+
+static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
+ size_t num_bytes, size_t position, const uint8_t* ringbuffer,
+ size_t ringbuffer_mask) {
+ HashToBinaryTree* self = FN(Self)(handle);
+ if (num_bytes >= FN(HashTypeLength)() - 1 &&
+ position >= MAX_TREE_COMP_LENGTH) {
+ /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.
+ These could not be calculated before, since they require knowledge
+ of both the previous and the current block. */
+ const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;
+ const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);
+ size_t i;
+ for (i = i_start; i < i_end; ++i) {
+ /* Maximum distance is window size - 16, see section 9.1. of the spec.
+ Furthermore, we have to make sure that we don't look further back
+ from the start of the next block than the window size, otherwise we
+ could access already overwritten areas of the ring-buffer. */
+ const size_t max_backward =
+ self->window_mask_ - BROTLI_MAX(size_t,
+ BROTLI_WINDOW_GAP - 1,
+ position - i);
+ /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the
+ end of the current block and that we have at least
+ MAX_TREE_COMP_LENGTH tail in the ring-buffer. */
+ FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,
+ MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);
+ }
+ }
+}
+
+#undef BUCKET_SIZE
+
+#undef HashToBinaryTree
diff --git a/dviware/dvisvgm/libs/brotli/enc/histogram.c b/dviware/dvisvgm/libs/brotli/enc/histogram.c
new file mode 100644
index 0000000000..6da2ff6bb4
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/histogram.c
@@ -0,0 +1,100 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Build per-context histograms of literals, commands and distance codes. */
+
+#include "./histogram.h"
+
+#include "../common/context.h"
+#include "./block_splitter.h"
+#include "./command.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct BlockSplitIterator {
+ const BlockSplit* split_; /* Not owned. */
+ size_t idx_;
+ size_t type_;
+ size_t length_;
+} BlockSplitIterator;
+
+static void InitBlockSplitIterator(BlockSplitIterator* self,
+ const BlockSplit* split) {
+ self->split_ = split;
+ self->idx_ = 0;
+ self->type_ = 0;
+ self->length_ = split->lengths ? split->lengths[0] : 0;
+}
+
+static void BlockSplitIteratorNext(BlockSplitIterator* self) {
+ if (self->length_ == 0) {
+ ++self->idx_;
+ self->type_ = self->split_->types[self->idx_];
+ self->length_ = self->split_->lengths[self->idx_];
+ }
+ --self->length_;
+}
+
+void BrotliBuildHistogramsWithContext(
+ const Command* cmds, const size_t num_commands,
+ const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
+ const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,
+ size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
+ const ContextType* context_modes, HistogramLiteral* literal_histograms,
+ HistogramCommand* insert_and_copy_histograms,
+ HistogramDistance* copy_dist_histograms) {
+ size_t pos = start_pos;
+ BlockSplitIterator literal_it;
+ BlockSplitIterator insert_and_copy_it;
+ BlockSplitIterator dist_it;
+ size_t i;
+
+ InitBlockSplitIterator(&literal_it, literal_split);
+ InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);
+ InitBlockSplitIterator(&dist_it, dist_split);
+ for (i = 0; i < num_commands; ++i) {
+ const Command* cmd = &cmds[i];
+ size_t j;
+ BlockSplitIteratorNext(&insert_and_copy_it);
+ HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],
+ cmd->cmd_prefix_);
+ /* TODO: unwrap iterator blocks. */
+ for (j = cmd->insert_len_; j != 0; --j) {
+ size_t context;
+ BlockSplitIteratorNext(&literal_it);
+ context = literal_it.type_;
+ if (context_modes) {
+ ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);
+ context = (context << BROTLI_LITERAL_CONTEXT_BITS) +
+ BROTLI_CONTEXT(prev_byte, prev_byte2, lut);
+ }
+ HistogramAddLiteral(&literal_histograms[context],
+ ringbuffer[pos & mask]);
+ prev_byte2 = prev_byte;
+ prev_byte = ringbuffer[pos & mask];
+ ++pos;
+ }
+ pos += CommandCopyLen(cmd);
+ if (CommandCopyLen(cmd)) {
+ prev_byte2 = ringbuffer[(pos - 2) & mask];
+ prev_byte = ringbuffer[(pos - 1) & mask];
+ if (cmd->cmd_prefix_ >= 128) {
+ size_t context;
+ BlockSplitIteratorNext(&dist_it);
+ context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +
+ CommandDistanceContext(cmd);
+ HistogramAddDistance(&copy_dist_histograms[context],
+ cmd->dist_prefix_ & 0x3FF);
+ }
+ }
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/histogram.h b/dviware/dvisvgm/libs/brotli/enc/histogram.h
new file mode 100644
index 0000000000..42af3c3f9d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/histogram.h
@@ -0,0 +1,63 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Models the histograms of literals, commands and distance codes. */
+
+#ifndef BROTLI_ENC_HISTOGRAM_H_
+#define BROTLI_ENC_HISTOGRAM_H_
+
+#include <string.h> /* memset */
+
+#include "../common/constants.h"
+#include "../common/context.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./block_splitter.h"
+#include "./command.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
+#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544
+
+#define FN(X) X ## Literal
+#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS
+#define DataType uint8_t
+#include "./histogram_inc.h" /* NOLINT(build/include) */
+#undef DataType
+#undef DATA_SIZE
+#undef FN
+
+#define FN(X) X ## Command
+#define DataType uint16_t
+#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS
+#include "./histogram_inc.h" /* NOLINT(build/include) */
+#undef DATA_SIZE
+#undef FN
+
+#define FN(X) X ## Distance
+#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS
+#include "./histogram_inc.h" /* NOLINT(build/include) */
+#undef DataType
+#undef DATA_SIZE
+#undef FN
+
+BROTLI_INTERNAL void BrotliBuildHistogramsWithContext(
+ const Command* cmds, const size_t num_commands,
+ const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
+ const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,
+ size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
+ const ContextType* context_modes, HistogramLiteral* literal_histograms,
+ HistogramCommand* insert_and_copy_histograms,
+ HistogramDistance* copy_dist_histograms);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_HISTOGRAM_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/histogram_inc.h b/dviware/dvisvgm/libs/brotli/enc/histogram_inc.h
new file mode 100644
index 0000000000..50eaf7468d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/histogram_inc.h
@@ -0,0 +1,51 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: Histogram, DATA_SIZE, DataType */
+
+/* A simple container for histograms of data in blocks. */
+
+typedef struct FN(Histogram) {
+ uint32_t data_[DATA_SIZE];
+ size_t total_count_;
+ double bit_cost_;
+} FN(Histogram);
+
+static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
+ memset(self->data_, 0, sizeof(self->data_));
+ self->total_count_ = 0;
+ self->bit_cost_ = HUGE_VAL;
+}
+
+static BROTLI_INLINE void FN(ClearHistograms)(
+ FN(Histogram)* array, size_t length) {
+ size_t i;
+ for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
+}
+
+static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
+ ++self->data_[val];
+ ++self->total_count_;
+}
+
+static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
+ const DataType* p, size_t n) {
+ self->total_count_ += n;
+ n += 1;
+ while (--n) ++self->data_[*p++];
+}
+
+static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
+ const FN(Histogram)* v) {
+ size_t i;
+ self->total_count_ += v->total_count_;
+ for (i = 0; i < DATA_SIZE; ++i) {
+ self->data_[i] += v->data_[i];
+ }
+}
+
+static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
diff --git a/dviware/dvisvgm/libs/brotli/enc/literal_cost.c b/dviware/dvisvgm/libs/brotli/enc/literal_cost.c
new file mode 100644
index 0000000000..c231100e34
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/literal_cost.c
@@ -0,0 +1,175 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Literal cost model to allow backward reference replacement to be efficient.
+*/
+
+#include "./literal_cost.h"
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./fast_log.h"
+#include "./utf8_util.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
+ if (c < 128) {
+ return 0; /* Next one is the 'Byte 1' again. */
+ } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */
+ return BROTLI_MIN(size_t, 1, clamp);
+ } else {
+ /* Let's decide over the last byte if this ends the sequence. */
+ if (last < 0xE0) {
+ return 0; /* Completed two or three byte coding. */
+ } else { /* Next one is the 'Byte 3' of utf-8 encoding. */
+ return BROTLI_MIN(size_t, 2, clamp);
+ }
+ }
+}
+
+static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,
+ const uint8_t* data) {
+ size_t counts[3] = { 0 };
+ size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */
+ size_t last_c = 0;
+ size_t i;
+ for (i = 0; i < len; ++i) {
+ size_t c = data[(pos + i) & mask];
+ ++counts[UTF8Position(last_c, c, 2)];
+ last_c = c;
+ }
+ if (counts[2] < 500) {
+ max_utf8 = 1;
+ }
+ if (counts[1] + counts[2] < 25) {
+ max_utf8 = 0;
+ }
+ return max_utf8;
+}
+
+static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,
+ const uint8_t* data, float* cost) {
+ /* max_utf8 is 0 (normal ASCII single byte modeling),
+ 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */
+ const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);
+ size_t histogram[3][256] = { { 0 } };
+ size_t window_half = 495;
+ size_t in_window = BROTLI_MIN(size_t, window_half, len);
+ size_t in_window_utf8[3] = { 0 };
+
+ size_t i;
+ { /* Bootstrap histograms. */
+ size_t last_c = 0;
+ size_t utf8_pos = 0;
+ for (i = 0; i < in_window; ++i) {
+ size_t c = data[(pos + i) & mask];
+ ++histogram[utf8_pos][c];
+ ++in_window_utf8[utf8_pos];
+ utf8_pos = UTF8Position(last_c, c, max_utf8);
+ last_c = c;
+ }
+ }
+
+ /* Compute bit costs with sliding window. */
+ for (i = 0; i < len; ++i) {
+ if (i >= window_half) {
+ /* Remove a byte in the past. */
+ size_t c =
+ i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];
+ size_t last_c =
+ i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];
+ size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
+ --histogram[utf8_pos2][data[(pos + i - window_half) & mask]];
+ --in_window_utf8[utf8_pos2];
+ }
+ if (i + window_half < len) {
+ /* Add a byte in the future. */
+ size_t c = data[(pos + i + window_half - 1) & mask];
+ size_t last_c = data[(pos + i + window_half - 2) & mask];
+ size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
+ ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]];
+ ++in_window_utf8[utf8_pos2];
+ }
+ {
+ size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];
+ size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];
+ size_t utf8_pos = UTF8Position(last_c, c, max_utf8);
+ size_t masked_pos = (pos + i) & mask;
+ size_t histo = histogram[utf8_pos][data[masked_pos]];
+ double lit_cost;
+ if (histo == 0) {
+ histo = 1;
+ }
+ lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);
+ lit_cost += 0.02905;
+ if (lit_cost < 1.0) {
+ lit_cost *= 0.5;
+ lit_cost += 0.5;
+ }
+ /* Make the first bytes more expensive -- seems to help, not sure why.
+ Perhaps because the entropy source is changing its properties
+ rapidly in the beginning of the file, perhaps because the beginning
+ of the data is a statistical "anomaly". */
+ if (i < 2000) {
+ lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35);
+ }
+ cost[i] = (float)lit_cost;
+ }
+ }
+}
+
+void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
+ const uint8_t* data, float* cost) {
+ if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {
+ EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost);
+ return;
+ } else {
+ size_t histogram[256] = { 0 };
+ size_t window_half = 2000;
+ size_t in_window = BROTLI_MIN(size_t, window_half, len);
+
+ /* Bootstrap histogram. */
+ size_t i;
+ for (i = 0; i < in_window; ++i) {
+ ++histogram[data[(pos + i) & mask]];
+ }
+
+ /* Compute bit costs with sliding window. */
+ for (i = 0; i < len; ++i) {
+ size_t histo;
+ if (i >= window_half) {
+ /* Remove a byte in the past. */
+ --histogram[data[(pos + i - window_half) & mask]];
+ --in_window;
+ }
+ if (i + window_half < len) {
+ /* Add a byte in the future. */
+ ++histogram[data[(pos + i + window_half) & mask]];
+ ++in_window;
+ }
+ histo = histogram[data[(pos + i) & mask]];
+ if (histo == 0) {
+ histo = 1;
+ }
+ {
+ double lit_cost = FastLog2(in_window) - FastLog2(histo);
+ lit_cost += 0.029;
+ if (lit_cost < 1.0) {
+ lit_cost *= 0.5;
+ lit_cost += 0.5;
+ }
+ cost[i] = (float)lit_cost;
+ }
+ }
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/literal_cost.h b/dviware/dvisvgm/libs/brotli/enc/literal_cost.h
new file mode 100644
index 0000000000..8f53f39d3f
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/literal_cost.h
@@ -0,0 +1,30 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Literal cost model to allow backward reference replacement to be efficient.
+*/
+
+#ifndef BROTLI_ENC_LITERAL_COST_H_
+#define BROTLI_ENC_LITERAL_COST_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Estimates how many bits the literals in the interval [pos, pos + len) in the
+ ring-buffer (data, mask) will take entropy coded and writes these estimates
+ to the cost[0..len) array. */
+BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(
+ size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_LITERAL_COST_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/memory.c b/dviware/dvisvgm/libs/brotli/enc/memory.c
new file mode 100644
index 0000000000..f6ed7e3cb7
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/memory.c
@@ -0,0 +1,170 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Algorithms for distributing the literals and commands of a metablock between
+ block types and contexts. */
+
+#include "./memory.h"
+
+#include <stdlib.h> /* exit, free, malloc */
+#include <string.h> /* memcpy */
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define MAX_PERM_ALLOCATED 128
+#define MAX_NEW_ALLOCATED 64
+#define MAX_NEW_FREED 64
+
+#define PERM_ALLOCATED_OFFSET 0
+#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED
+#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)
+
+void BrotliInitMemoryManager(
+ MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
+ void* opaque) {
+ if (!alloc_func) {
+ m->alloc_func = BrotliDefaultAllocFunc;
+ m->free_func = BrotliDefaultFreeFunc;
+ m->opaque = 0;
+ } else {
+ m->alloc_func = alloc_func;
+ m->free_func = free_func;
+ m->opaque = opaque;
+ }
+#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
+ m->is_oom = BROTLI_FALSE;
+ m->perm_allocated = 0;
+ m->new_allocated = 0;
+ m->new_freed = 0;
+#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
+}
+
+#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
+
+void* BrotliAllocate(MemoryManager* m, size_t n) {
+ void* result = m->alloc_func(m->opaque, n);
+ if (!result) exit(EXIT_FAILURE);
+ return result;
+}
+
+void BrotliFree(MemoryManager* m, void* p) {
+ m->free_func(m->opaque, p);
+}
+
+void BrotliWipeOutMemoryManager(MemoryManager* m) {
+ BROTLI_UNUSED(m);
+}
+
+#else /* BROTLI_ENCODER_EXIT_ON_OOM */
+
+static void SortPointers(void** items, const size_t n) {
+ /* Shell sort. */
+ static const size_t gaps[] = {23, 10, 4, 1};
+ int g = 0;
+ for (; g < 4; ++g) {
+ size_t gap = gaps[g];
+ size_t i;
+ for (i = gap; i < n; ++i) {
+ size_t j = i;
+ void* tmp = items[i];
+ for (; j >= gap && tmp < items[j - gap]; j -= gap) {
+ items[j] = items[j - gap];
+ }
+ items[j] = tmp;
+ }
+ }
+}
+
+static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
+ size_t a_read_index = 0;
+ size_t b_read_index = 0;
+ size_t a_write_index = 0;
+ size_t b_write_index = 0;
+ size_t annihilated = 0;
+ while (a_read_index < a_len && b_read_index < b_len) {
+ if (a[a_read_index] == b[b_read_index]) {
+ a_read_index++;
+ b_read_index++;
+ annihilated++;
+ } else if (a[a_read_index] < b[b_read_index]) {
+ a[a_write_index++] = a[a_read_index++];
+ } else {
+ b[b_write_index++] = b[b_read_index++];
+ }
+ }
+ while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];
+ while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];
+ return annihilated;
+}
+
+static void CollectGarbagePointers(MemoryManager* m) {
+ size_t annihilated;
+ SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);
+ SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);
+ annihilated = Annihilate(
+ m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,
+ m->pointers + NEW_FREED_OFFSET, m->new_freed);
+ m->new_allocated -= annihilated;
+ m->new_freed -= annihilated;
+
+ if (m->new_freed != 0) {
+ annihilated = Annihilate(
+ m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,
+ m->pointers + NEW_FREED_OFFSET, m->new_freed);
+ m->perm_allocated -= annihilated;
+ m->new_freed -= annihilated;
+ BROTLI_DCHECK(m->new_freed == 0);
+ }
+
+ if (m->new_allocated != 0) {
+ BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);
+ memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,
+ m->pointers + NEW_ALLOCATED_OFFSET,
+ sizeof(void*) * m->new_allocated);
+ m->perm_allocated += m->new_allocated;
+ m->new_allocated = 0;
+ SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);
+ }
+}
+
+void* BrotliAllocate(MemoryManager* m, size_t n) {
+ void* result = m->alloc_func(m->opaque, n);
+ if (!result) {
+ m->is_oom = BROTLI_TRUE;
+ return NULL;
+ }
+ if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);
+ m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;
+ return result;
+}
+
+void BrotliFree(MemoryManager* m, void* p) {
+ if (!p) return;
+ m->free_func(m->opaque, p);
+ if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
+ m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
+}
+
+void BrotliWipeOutMemoryManager(MemoryManager* m) {
+ size_t i;
+ CollectGarbagePointers(m);
+ /* Now all unfreed pointers are in perm-allocated list. */
+ for (i = 0; i < m->perm_allocated; ++i) {
+ m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
+ }
+ m->perm_allocated = 0;
+}
+
+#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/memory.h b/dviware/dvisvgm/libs/brotli/enc/memory.h
new file mode 100644
index 0000000000..ab928d019b
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/memory.h
@@ -0,0 +1,102 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Macros for memory management. */
+
+#ifndef BROTLI_ENC_MEMORY_H_
+#define BROTLI_ENC_MEMORY_H_
+
+#include <string.h> /* memcpy */
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
+ !defined(BROTLI_ENCODER_EXIT_ON_OOM)
+#define BROTLI_ENCODER_EXIT_ON_OOM
+#endif
+
+typedef struct MemoryManager {
+ brotli_alloc_func alloc_func;
+ brotli_free_func free_func;
+ void* opaque;
+#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
+ BROTLI_BOOL is_oom;
+ size_t perm_allocated;
+ size_t new_allocated;
+ size_t new_freed;
+ void* pointers[256];
+#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
+} MemoryManager;
+
+BROTLI_INTERNAL void BrotliInitMemoryManager(
+ MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
+ void* opaque);
+
+BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
+#define BROTLI_ALLOC(M, T, N) \
+ ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)
+
+BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
+#define BROTLI_FREE(M, P) { \
+ BrotliFree((M), (P)); \
+ P = NULL; \
+}
+
+#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
+#define BROTLI_IS_OOM(M) (!!0)
+#else /* BROTLI_ENCODER_EXIT_ON_OOM */
+#define BROTLI_IS_OOM(M) (!!(M)->is_oom)
+#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
+
+BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);
+
+/*
+Dynamically grows array capacity to at least the requested size
+M: MemoryManager
+T: data type
+A: array
+C: capacity
+R: requested size
+*/
+#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \
+ if (C < (R)) { \
+ size_t _new_size = (C == 0) ? (R) : C; \
+ T* new_array; \
+ while (_new_size < (R)) _new_size *= 2; \
+ new_array = BROTLI_ALLOC((M), T, _new_size); \
+ if (!BROTLI_IS_OOM(M) && C != 0) \
+ memcpy(new_array, A, C * sizeof(T)); \
+ BROTLI_FREE((M), A); \
+ A = new_array; \
+ C = _new_size; \
+ } \
+}
+
+/*
+Appends value and dynamically grows array capacity when needed
+M: MemoryManager
+T: data type
+A: array
+C: array capacity
+S: array size
+V: value to append
+*/
+#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \
+ (S)++; \
+ BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \
+ A[(S) - 1] = (V); \
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_MEMORY_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/metablock.c b/dviware/dvisvgm/libs/brotli/enc/metablock.c
new file mode 100644
index 0000000000..4e80044f31
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/metablock.c
@@ -0,0 +1,667 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Algorithms for distributing the literals and commands of a metablock between
+ block types and contexts. */
+
+#include "./metablock.h"
+
+#include "../common/constants.h"
+#include "../common/context.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./bit_cost.h"
+#include "./block_splitter.h"
+#include "./cluster.h"
+#include "./entropy_encode.h"
+#include "./histogram.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+void BrotliInitDistanceParams(BrotliEncoderParams* params,
+ uint32_t npostfix, uint32_t ndirect) {
+ BrotliDistanceParams* dist_params = &params->dist;
+ uint32_t alphabet_size, max_distance;
+
+ dist_params->distance_postfix_bits = npostfix;
+ dist_params->num_direct_distance_codes = ndirect;
+
+ alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
+ npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
+ max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -
+ (1U << (npostfix + 2));
+
+ if (params->large_window) {
+ static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
+ uint32_t postfix = 1U << npostfix;
+ alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
+ npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);
+ /* The maximum distance is set so that no distance symbol used can encode
+ a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all
+ its extra bits set. */
+ if (ndirect < bound[npostfix]) {
+ max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - ndirect);
+ } else if (ndirect >= bound[npostfix] + postfix) {
+ max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]);
+ } else {
+ max_distance = BROTLI_MAX_ALLOWED_DISTANCE;
+ }
+ }
+
+ dist_params->alphabet_size = alphabet_size;
+ dist_params->max_distance = max_distance;
+}
+
+static void RecomputeDistancePrefixes(Command* cmds,
+ size_t num_commands,
+ const BrotliDistanceParams* orig_params,
+ const BrotliDistanceParams* new_params) {
+ size_t i;
+
+ if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
+ orig_params->num_direct_distance_codes ==
+ new_params->num_direct_distance_codes) {
+ return;
+ }
+
+ for (i = 0; i < num_commands; ++i) {
+ Command* cmd = &cmds[i];
+ if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
+ PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),
+ new_params->num_direct_distance_codes,
+ new_params->distance_postfix_bits,
+ &cmd->dist_prefix_,
+ &cmd->dist_extra_);
+ }
+ }
+}
+
+static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
+ size_t num_commands,
+ const BrotliDistanceParams* orig_params,
+ const BrotliDistanceParams* new_params,
+ double* cost) {
+ size_t i;
+ BROTLI_BOOL equal_params = BROTLI_FALSE;
+ uint16_t dist_prefix;
+ uint32_t dist_extra;
+ double extra_bits = 0.0;
+ HistogramDistance histo;
+ HistogramClearDistance(&histo);
+
+ if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
+ orig_params->num_direct_distance_codes ==
+ new_params->num_direct_distance_codes) {
+ equal_params = BROTLI_TRUE;
+ }
+
+ for (i = 0; i < num_commands; i++) {
+ const Command* cmd = &cmds[i];
+ if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
+ if (equal_params) {
+ dist_prefix = cmd->dist_prefix_;
+ } else {
+ uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);
+ if (distance > new_params->max_distance) {
+ return BROTLI_FALSE;
+ }
+ PrefixEncodeCopyDistance(distance,
+ new_params->num_direct_distance_codes,
+ new_params->distance_postfix_bits,
+ &dist_prefix,
+ &dist_extra);
+ }
+ HistogramAddDistance(&histo, dist_prefix & 0x3FF);
+ extra_bits += dist_prefix >> 10;
+ }
+ }
+
+ *cost = BrotliPopulationCostDistance(&histo) + extra_bits;
+ return BROTLI_TRUE;
+}
+
+void BrotliBuildMetaBlock(MemoryManager* m,
+ const uint8_t* ringbuffer,
+ const size_t pos,
+ const size_t mask,
+ BrotliEncoderParams* params,
+ uint8_t prev_byte,
+ uint8_t prev_byte2,
+ Command* cmds,
+ size_t num_commands,
+ ContextType literal_context_mode,
+ MetaBlockSplit* mb) {
+ /* Histogram ids need to fit in one byte. */
+ static const size_t kMaxNumberOfHistograms = 256;
+ HistogramDistance* distance_histograms;
+ HistogramLiteral* literal_histograms;
+ ContextType* literal_context_modes = NULL;
+ size_t literal_histograms_size;
+ size_t distance_histograms_size;
+ size_t i;
+ size_t literal_context_multiplier = 1;
+ uint32_t npostfix;
+ uint32_t ndirect_msb = 0;
+ BROTLI_BOOL check_orig = BROTLI_TRUE;
+ double best_dist_cost = 1e99;
+ BrotliEncoderParams orig_params = *params;
+ BrotliEncoderParams new_params = *params;
+
+ for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {
+ for (; ndirect_msb < 16; ndirect_msb++) {
+ uint32_t ndirect = ndirect_msb << npostfix;
+ BROTLI_BOOL skip;
+ double dist_cost;
+ BrotliInitDistanceParams(&new_params, npostfix, ndirect);
+ if (npostfix == orig_params.dist.distance_postfix_bits &&
+ ndirect == orig_params.dist.num_direct_distance_codes) {
+ check_orig = BROTLI_FALSE;
+ }
+ skip = !ComputeDistanceCost(
+ cmds, num_commands,
+ &orig_params.dist, &new_params.dist, &dist_cost);
+ if (skip || (dist_cost > best_dist_cost)) {
+ break;
+ }
+ best_dist_cost = dist_cost;
+ params->dist = new_params.dist;
+ }
+ if (ndirect_msb > 0) ndirect_msb--;
+ ndirect_msb /= 2;
+ }
+ if (check_orig) {
+ double dist_cost;
+ ComputeDistanceCost(cmds, num_commands,
+ &orig_params.dist, &orig_params.dist, &dist_cost);
+ if (dist_cost < best_dist_cost) {
+ /* NB: currently unused; uncomment when more param tuning is added. */
+ /* best_dist_cost = dist_cost; */
+ params->dist = orig_params.dist;
+ }
+ }
+ RecomputeDistancePrefixes(cmds, num_commands,
+ &orig_params.dist, &params->dist);
+
+ BrotliSplitBlock(m, cmds, num_commands,
+ ringbuffer, pos, mask, params,
+ &mb->literal_split,
+ &mb->command_split,
+ &mb->distance_split);
+ if (BROTLI_IS_OOM(m)) return;
+
+ if (!params->disable_literal_context_modeling) {
+ literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;
+ literal_context_modes =
+ BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < mb->literal_split.num_types; ++i) {
+ literal_context_modes[i] = literal_context_mode;
+ }
+ }
+
+ literal_histograms_size =
+ mb->literal_split.num_types * literal_context_multiplier;
+ literal_histograms =
+ BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+ ClearHistogramsLiteral(literal_histograms, literal_histograms_size);
+
+ distance_histograms_size =
+ mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
+ distance_histograms =
+ BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+ ClearHistogramsDistance(distance_histograms, distance_histograms_size);
+
+ BROTLI_DCHECK(mb->command_histograms == 0);
+ mb->command_histograms_size = mb->command_split.num_types;
+ mb->command_histograms =
+ BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+ ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);
+
+ BrotliBuildHistogramsWithContext(cmds, num_commands,
+ &mb->literal_split, &mb->command_split, &mb->distance_split,
+ ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,
+ literal_histograms, mb->command_histograms, distance_histograms);
+ BROTLI_FREE(m, literal_context_modes);
+
+ BROTLI_DCHECK(mb->literal_context_map == 0);
+ mb->literal_context_map_size =
+ mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
+ mb->literal_context_map =
+ BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ BROTLI_DCHECK(mb->literal_histograms == 0);
+ mb->literal_histograms_size = mb->literal_context_map_size;
+ mb->literal_histograms =
+ BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,
+ kMaxNumberOfHistograms, mb->literal_histograms,
+ &mb->literal_histograms_size, mb->literal_context_map);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, literal_histograms);
+
+ if (params->disable_literal_context_modeling) {
+ /* Distribute assignment to all contexts. */
+ for (i = mb->literal_split.num_types; i != 0;) {
+ size_t j = 0;
+ i--;
+ for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {
+ mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
+ mb->literal_context_map[i];
+ }
+ }
+ }
+
+ BROTLI_DCHECK(mb->distance_context_map == 0);
+ mb->distance_context_map_size =
+ mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
+ mb->distance_context_map =
+ BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ BROTLI_DCHECK(mb->distance_histograms == 0);
+ mb->distance_histograms_size = mb->distance_context_map_size;
+ mb->distance_histograms =
+ BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ BrotliClusterHistogramsDistance(m, distance_histograms,
+ mb->distance_context_map_size,
+ kMaxNumberOfHistograms,
+ mb->distance_histograms,
+ &mb->distance_histograms_size,
+ mb->distance_context_map);
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_FREE(m, distance_histograms);
+}
+
+#define FN(X) X ## Literal
+#include "./metablock_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Command
+#include "./metablock_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define FN(X) X ## Distance
+#include "./metablock_inc.h" /* NOLINT(build/include) */
+#undef FN
+
+#define BROTLI_MAX_STATIC_CONTEXTS 13
+
+/* Greedy block splitter for one block category (literal, command or distance).
+ Gathers histograms for all context buckets. */
+typedef struct ContextBlockSplitter {
+ /* Alphabet size of particular block category. */
+ size_t alphabet_size_;
+ size_t num_contexts_;
+ size_t max_block_types_;
+ /* We collect at least this many symbols for each block. */
+ size_t min_block_size_;
+ /* We merge histograms A and B if
+ entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
+ where A is the current histogram and B is the histogram of the last or the
+ second last block type. */
+ double split_threshold_;
+
+ size_t num_blocks_;
+ BlockSplit* split_; /* not owned */
+ HistogramLiteral* histograms_; /* not owned */
+ size_t* histograms_size_; /* not owned */
+
+ /* The number of symbols that we want to collect before deciding on whether
+ or not to merge the block with a previous one or emit a new block. */
+ size_t target_block_size_;
+ /* The number of symbols in the current histogram. */
+ size_t block_size_;
+ /* Offset of the current histogram. */
+ size_t curr_histogram_ix_;
+ /* Offset of the histograms of the previous two block types. */
+ size_t last_histogram_ix_[2];
+ /* Entropy of the previous two block types. */
+ double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];
+ /* The number of times we merged the current block with the last one. */
+ size_t merge_last_count_;
+} ContextBlockSplitter;
+
+static void InitContextBlockSplitter(
+ MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,
+ size_t num_contexts, size_t min_block_size, double split_threshold,
+ size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,
+ size_t* histograms_size) {
+ size_t max_num_blocks = num_symbols / min_block_size + 1;
+ size_t max_num_types;
+ BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);
+
+ self->alphabet_size_ = alphabet_size;
+ self->num_contexts_ = num_contexts;
+ self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;
+ self->min_block_size_ = min_block_size;
+ self->split_threshold_ = split_threshold;
+ self->num_blocks_ = 0;
+ self->split_ = split;
+ self->histograms_size_ = histograms_size;
+ self->target_block_size_ = min_block_size;
+ self->block_size_ = 0;
+ self->curr_histogram_ix_ = 0;
+ self->merge_last_count_ = 0;
+
+ /* We have to allocate one more histogram than the maximum number of block
+ types for the current histogram when the meta-block is too big. */
+ max_num_types =
+ BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);
+ BROTLI_ENSURE_CAPACITY(m, uint8_t,
+ split->types, split->types_alloc_size, max_num_blocks);
+ BROTLI_ENSURE_CAPACITY(m, uint32_t,
+ split->lengths, split->lengths_alloc_size, max_num_blocks);
+ if (BROTLI_IS_OOM(m)) return;
+ split->num_blocks = max_num_blocks;
+ if (BROTLI_IS_OOM(m)) return;
+ BROTLI_DCHECK(*histograms == 0);
+ *histograms_size = max_num_types * num_contexts;
+ *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);
+ self->histograms_ = *histograms;
+ if (BROTLI_IS_OOM(m)) return;
+ /* Clear only current histogram. */
+ ClearHistogramsLiteral(&self->histograms_[0], num_contexts);
+ self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
+}
+
+/* Does either of three things:
+ (1) emits the current block with a new block type;
+ (2) emits the current block with the type of the second last block;
+ (3) merges the current block with the last block. */
+static void ContextBlockSplitterFinishBlock(
+ ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {
+ BlockSplit* split = self->split_;
+ const size_t num_contexts = self->num_contexts_;
+ double* last_entropy = self->last_entropy_;
+ HistogramLiteral* histograms = self->histograms_;
+
+ if (self->block_size_ < self->min_block_size_) {
+ self->block_size_ = self->min_block_size_;
+ }
+ if (self->num_blocks_ == 0) {
+ size_t i;
+ /* Create first block. */
+ split->lengths[0] = (uint32_t)self->block_size_;
+ split->types[0] = 0;
+
+ for (i = 0; i < num_contexts; ++i) {
+ last_entropy[i] =
+ BitsEntropy(histograms[i].data_, self->alphabet_size_);
+ last_entropy[num_contexts + i] = last_entropy[i];
+ }
+ ++self->num_blocks_;
+ ++split->num_types;
+ self->curr_histogram_ix_ += num_contexts;
+ if (self->curr_histogram_ix_ < *self->histograms_size_) {
+ ClearHistogramsLiteral(
+ &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
+ }
+ self->block_size_ = 0;
+ } else if (self->block_size_ > 0) {
+ /* Try merging the set of histograms for the current block type with the
+ respective set of histograms for the last and second last block types.
+ Decide over the split based on the total reduction of entropy across
+ all contexts. */
+ double entropy[BROTLI_MAX_STATIC_CONTEXTS];
+ HistogramLiteral* combined_histo =
+ BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);
+ double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];
+ double diff[2] = { 0.0 };
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return;
+ for (i = 0; i < num_contexts; ++i) {
+ size_t curr_histo_ix = self->curr_histogram_ix_ + i;
+ size_t j;
+ entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_,
+ self->alphabet_size_);
+ for (j = 0; j < 2; ++j) {
+ size_t jx = j * num_contexts + i;
+ size_t last_histogram_ix = self->last_histogram_ix_[j] + i;
+ combined_histo[jx] = histograms[curr_histo_ix];
+ HistogramAddHistogramLiteral(&combined_histo[jx],
+ &histograms[last_histogram_ix]);
+ combined_entropy[jx] = BitsEntropy(
+ &combined_histo[jx].data_[0], self->alphabet_size_);
+ diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];
+ }
+ }
+
+ if (split->num_types < self->max_block_types_ &&
+ diff[0] > self->split_threshold_ &&
+ diff[1] > self->split_threshold_) {
+ /* Create new block. */
+ split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
+ split->types[self->num_blocks_] = (uint8_t)split->num_types;
+ self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
+ self->last_histogram_ix_[0] = split->num_types * num_contexts;
+ for (i = 0; i < num_contexts; ++i) {
+ last_entropy[num_contexts + i] = last_entropy[i];
+ last_entropy[i] = entropy[i];
+ }
+ ++self->num_blocks_;
+ ++split->num_types;
+ self->curr_histogram_ix_ += num_contexts;
+ if (self->curr_histogram_ix_ < *self->histograms_size_) {
+ ClearHistogramsLiteral(
+ &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
+ }
+ self->block_size_ = 0;
+ self->merge_last_count_ = 0;
+ self->target_block_size_ = self->min_block_size_;
+ } else if (diff[1] < diff[0] - 20.0) {
+ /* Combine this block with second last block. */
+ split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
+ split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
+ BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
+ for (i = 0; i < num_contexts; ++i) {
+ histograms[self->last_histogram_ix_[0] + i] =
+ combined_histo[num_contexts + i];
+ last_entropy[num_contexts + i] = last_entropy[i];
+ last_entropy[i] = combined_entropy[num_contexts + i];
+ HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
+ }
+ ++self->num_blocks_;
+ self->block_size_ = 0;
+ self->merge_last_count_ = 0;
+ self->target_block_size_ = self->min_block_size_;
+ } else {
+ /* Combine this block with last block. */
+ split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
+ for (i = 0; i < num_contexts; ++i) {
+ histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];
+ last_entropy[i] = combined_entropy[i];
+ if (split->num_types == 1) {
+ last_entropy[num_contexts + i] = last_entropy[i];
+ }
+ HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
+ }
+ self->block_size_ = 0;
+ if (++self->merge_last_count_ > 1) {
+ self->target_block_size_ += self->min_block_size_;
+ }
+ }
+ BROTLI_FREE(m, combined_histo);
+ }
+ if (is_final) {
+ *self->histograms_size_ = split->num_types * num_contexts;
+ split->num_blocks = self->num_blocks_;
+ }
+}
+
+/* Adds the next symbol to the current block type and context. When the
+ current block reaches the target size, decides on merging the block. */
+static void ContextBlockSplitterAddSymbol(
+ ContextBlockSplitter* self, MemoryManager* m,
+ size_t symbol, size_t context) {
+ HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],
+ symbol);
+ ++self->block_size_;
+ if (self->block_size_ == self->target_block_size_) {
+ ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+}
+
+static void MapStaticContexts(MemoryManager* m,
+ size_t num_contexts,
+ const uint32_t* static_context_map,
+ MetaBlockSplit* mb) {
+ size_t i;
+ BROTLI_DCHECK(mb->literal_context_map == 0);
+ mb->literal_context_map_size =
+ mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
+ mb->literal_context_map =
+ BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ for (i = 0; i < mb->literal_split.num_types; ++i) {
+ uint32_t offset = (uint32_t)(i * num_contexts);
+ size_t j;
+ for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {
+ mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
+ offset + static_context_map[j];
+ }
+ }
+}
+
+static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
+ MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
+ uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
+ const size_t num_contexts, const uint32_t* static_context_map,
+ const Command* commands, size_t n_commands, MetaBlockSplit* mb) {
+ union {
+ BlockSplitterLiteral plain;
+ ContextBlockSplitter ctx;
+ } lit_blocks;
+ BlockSplitterCommand cmd_blocks;
+ BlockSplitterDistance dist_blocks;
+ size_t num_literals = 0;
+ size_t i;
+ for (i = 0; i < n_commands; ++i) {
+ num_literals += commands[i].insert_len_;
+ }
+
+ if (num_contexts == 1) {
+ InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0,
+ num_literals, &mb->literal_split, &mb->literal_histograms,
+ &mb->literal_histograms_size);
+ } else {
+ InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0,
+ num_literals, &mb->literal_split, &mb->literal_histograms,
+ &mb->literal_histograms_size);
+ }
+ if (BROTLI_IS_OOM(m)) return;
+ InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024,
+ 500.0, n_commands, &mb->command_split, &mb->command_histograms,
+ &mb->command_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+ InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands,
+ &mb->distance_split, &mb->distance_histograms,
+ &mb->distance_histograms_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ for (i = 0; i < n_commands; ++i) {
+ const Command cmd = commands[i];
+ size_t j;
+ BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_);
+ for (j = cmd.insert_len_; j != 0; --j) {
+ uint8_t literal = ringbuffer[pos & mask];
+ if (num_contexts == 1) {
+ BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal);
+ } else {
+ size_t context =
+ BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
+ ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal,
+ static_context_map[context]);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+ prev_byte2 = prev_byte;
+ prev_byte = literal;
+ ++pos;
+ }
+ pos += CommandCopyLen(&cmd);
+ if (CommandCopyLen(&cmd)) {
+ prev_byte2 = ringbuffer[(pos - 2) & mask];
+ prev_byte = ringbuffer[(pos - 1) & mask];
+ if (cmd.cmd_prefix_ >= 128) {
+ BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ & 0x3FF);
+ }
+ }
+ }
+
+ if (num_contexts == 1) {
+ BlockSplitterFinishBlockLiteral(
+ &lit_blocks.plain, /* is_final = */ BROTLI_TRUE);
+ } else {
+ ContextBlockSplitterFinishBlock(
+ &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);
+ if (BROTLI_IS_OOM(m)) return;
+ }
+ BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE);
+ BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE);
+
+ if (num_contexts > 1) {
+ MapStaticContexts(m, num_contexts, static_context_map, mb);
+ }
+}
+
+void BrotliBuildMetaBlockGreedy(MemoryManager* m,
+ const uint8_t* ringbuffer,
+ size_t pos,
+ size_t mask,
+ uint8_t prev_byte,
+ uint8_t prev_byte2,
+ ContextLut literal_context_lut,
+ size_t num_contexts,
+ const uint32_t* static_context_map,
+ const Command* commands,
+ size_t n_commands,
+ MetaBlockSplit* mb) {
+ if (num_contexts == 1) {
+ BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
+ prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, mb);
+ } else {
+ BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
+ prev_byte2, literal_context_lut, num_contexts, static_context_map,
+ commands, n_commands, mb);
+ }
+}
+
+void BrotliOptimizeHistograms(uint32_t num_distance_codes,
+ MetaBlockSplit* mb) {
+ uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];
+ size_t i;
+ for (i = 0; i < mb->literal_histograms_size; ++i) {
+ BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,
+ good_for_rle);
+ }
+ for (i = 0; i < mb->command_histograms_size; ++i) {
+ BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,
+ mb->command_histograms[i].data_,
+ good_for_rle);
+ }
+ for (i = 0; i < mb->distance_histograms_size; ++i) {
+ BrotliOptimizeHuffmanCountsForRle(num_distance_codes,
+ mb->distance_histograms[i].data_,
+ good_for_rle);
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/metablock.h b/dviware/dvisvgm/libs/brotli/enc/metablock.h
new file mode 100644
index 0000000000..334a79a443
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/metablock.h
@@ -0,0 +1,105 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Algorithms for distributing the literals and commands of a metablock between
+ block types and contexts. */
+
+#ifndef BROTLI_ENC_METABLOCK_H_
+#define BROTLI_ENC_METABLOCK_H_
+
+#include "../common/context.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./block_splitter.h"
+#include "./command.h"
+#include "./histogram.h"
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct MetaBlockSplit {
+ BlockSplit literal_split;
+ BlockSplit command_split;
+ BlockSplit distance_split;
+ uint32_t* literal_context_map;
+ size_t literal_context_map_size;
+ uint32_t* distance_context_map;
+ size_t distance_context_map_size;
+ HistogramLiteral* literal_histograms;
+ size_t literal_histograms_size;
+ HistogramCommand* command_histograms;
+ size_t command_histograms_size;
+ HistogramDistance* distance_histograms;
+ size_t distance_histograms_size;
+} MetaBlockSplit;
+
+static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
+ BrotliInitBlockSplit(&mb->literal_split);
+ BrotliInitBlockSplit(&mb->command_split);
+ BrotliInitBlockSplit(&mb->distance_split);
+ mb->literal_context_map = 0;
+ mb->literal_context_map_size = 0;
+ mb->distance_context_map = 0;
+ mb->distance_context_map_size = 0;
+ mb->literal_histograms = 0;
+ mb->literal_histograms_size = 0;
+ mb->command_histograms = 0;
+ mb->command_histograms_size = 0;
+ mb->distance_histograms = 0;
+ mb->distance_histograms_size = 0;
+}
+
+static BROTLI_INLINE void DestroyMetaBlockSplit(
+ MemoryManager* m, MetaBlockSplit* mb) {
+ BrotliDestroyBlockSplit(m, &mb->literal_split);
+ BrotliDestroyBlockSplit(m, &mb->command_split);
+ BrotliDestroyBlockSplit(m, &mb->distance_split);
+ BROTLI_FREE(m, mb->literal_context_map);
+ BROTLI_FREE(m, mb->distance_context_map);
+ BROTLI_FREE(m, mb->literal_histograms);
+ BROTLI_FREE(m, mb->command_histograms);
+ BROTLI_FREE(m, mb->distance_histograms);
+}
+
+/* Uses the slow shortest-path block splitter and does context clustering.
+ The distance parameters are dynamically selected based on the commands
+ which get recomputed under the new distance parameters. The new distance
+ parameters are stored into *params. */
+BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,
+ const uint8_t* ringbuffer,
+ const size_t pos,
+ const size_t mask,
+ BrotliEncoderParams* params,
+ uint8_t prev_byte,
+ uint8_t prev_byte2,
+ Command* cmds,
+ size_t num_commands,
+ ContextType literal_context_mode,
+ MetaBlockSplit* mb);
+
+/* Uses a fast greedy block splitter that tries to merge current block with the
+ last or the second last block and uses a static context clustering which
+ is the same for all block types. */
+BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(
+ MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
+ uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
+ size_t num_contexts, const uint32_t* static_context_map,
+ const Command* commands, size_t n_commands, MetaBlockSplit* mb);
+
+BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,
+ MetaBlockSplit* mb);
+
+BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams* params,
+ uint32_t npostfix, uint32_t ndirect);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_METABLOCK_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/metablock_inc.h b/dviware/dvisvgm/libs/brotli/enc/metablock_inc.h
new file mode 100644
index 0000000000..dcc9d3c4a6
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/metablock_inc.h
@@ -0,0 +1,183 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+#define HistogramType FN(Histogram)
+
+/* Greedy block splitter for one block category (literal, command or distance).
+*/
+typedef struct FN(BlockSplitter) {
+ /* Alphabet size of particular block category. */
+ size_t alphabet_size_;
+ /* We collect at least this many symbols for each block. */
+ size_t min_block_size_;
+ /* We merge histograms A and B if
+ entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
+ where A is the current histogram and B is the histogram of the last or the
+ second last block type. */
+ double split_threshold_;
+
+ size_t num_blocks_;
+ BlockSplit* split_; /* not owned */
+ HistogramType* histograms_; /* not owned */
+ size_t* histograms_size_; /* not owned */
+
+ /* The number of symbols that we want to collect before deciding on whether
+ or not to merge the block with a previous one or emit a new block. */
+ size_t target_block_size_;
+ /* The number of symbols in the current histogram. */
+ size_t block_size_;
+ /* Offset of the current histogram. */
+ size_t curr_histogram_ix_;
+ /* Offset of the histograms of the previous two block types. */
+ size_t last_histogram_ix_[2];
+ /* Entropy of the previous two block types. */
+ double last_entropy_[2];
+ /* The number of times we merged the current block with the last one. */
+ size_t merge_last_count_;
+} FN(BlockSplitter);
+
+static void FN(InitBlockSplitter)(
+ MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,
+ size_t min_block_size, double split_threshold, size_t num_symbols,
+ BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {
+ size_t max_num_blocks = num_symbols / min_block_size + 1;
+ /* We have to allocate one more histogram than the maximum number of block
+ types for the current histogram when the meta-block is too big. */
+ size_t max_num_types =
+ BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);
+ self->alphabet_size_ = alphabet_size;
+ self->min_block_size_ = min_block_size;
+ self->split_threshold_ = split_threshold;
+ self->num_blocks_ = 0;
+ self->split_ = split;
+ self->histograms_size_ = histograms_size;
+ self->target_block_size_ = min_block_size;
+ self->block_size_ = 0;
+ self->curr_histogram_ix_ = 0;
+ self->merge_last_count_ = 0;
+ BROTLI_ENSURE_CAPACITY(m, uint8_t,
+ split->types, split->types_alloc_size, max_num_blocks);
+ BROTLI_ENSURE_CAPACITY(m, uint32_t,
+ split->lengths, split->lengths_alloc_size, max_num_blocks);
+ if (BROTLI_IS_OOM(m)) return;
+ self->split_->num_blocks = max_num_blocks;
+ BROTLI_DCHECK(*histograms == 0);
+ *histograms_size = max_num_types;
+ *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);
+ self->histograms_ = *histograms;
+ if (BROTLI_IS_OOM(m)) return;
+ /* Clear only current histogram. */
+ FN(HistogramClear)(&self->histograms_[0]);
+ self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
+}
+
+/* Does either of three things:
+ (1) emits the current block with a new block type;
+ (2) emits the current block with the type of the second last block;
+ (3) merges the current block with the last block. */
+static void FN(BlockSplitterFinishBlock)(
+ FN(BlockSplitter)* self, BROTLI_BOOL is_final) {
+ BlockSplit* split = self->split_;
+ double* last_entropy = self->last_entropy_;
+ HistogramType* histograms = self->histograms_;
+ self->block_size_ =
+ BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);
+ if (self->num_blocks_ == 0) {
+ /* Create first block. */
+ split->lengths[0] = (uint32_t)self->block_size_;
+ split->types[0] = 0;
+ last_entropy[0] =
+ BitsEntropy(histograms[0].data_, self->alphabet_size_);
+ last_entropy[1] = last_entropy[0];
+ ++self->num_blocks_;
+ ++split->num_types;
+ ++self->curr_histogram_ix_;
+ if (self->curr_histogram_ix_ < *self->histograms_size_)
+ FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
+ self->block_size_ = 0;
+ } else if (self->block_size_ > 0) {
+ double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_,
+ self->alphabet_size_);
+ HistogramType combined_histo[2];
+ double combined_entropy[2];
+ double diff[2];
+ size_t j;
+ for (j = 0; j < 2; ++j) {
+ size_t last_histogram_ix = self->last_histogram_ix_[j];
+ combined_histo[j] = histograms[self->curr_histogram_ix_];
+ FN(HistogramAddHistogram)(&combined_histo[j],
+ &histograms[last_histogram_ix]);
+ combined_entropy[j] = BitsEntropy(
+ &combined_histo[j].data_[0], self->alphabet_size_);
+ diff[j] = combined_entropy[j] - entropy - last_entropy[j];
+ }
+
+ if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&
+ diff[0] > self->split_threshold_ &&
+ diff[1] > self->split_threshold_) {
+ /* Create new block. */
+ split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
+ split->types[self->num_blocks_] = (uint8_t)split->num_types;
+ self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
+ self->last_histogram_ix_[0] = (uint8_t)split->num_types;
+ last_entropy[1] = last_entropy[0];
+ last_entropy[0] = entropy;
+ ++self->num_blocks_;
+ ++split->num_types;
+ ++self->curr_histogram_ix_;
+ if (self->curr_histogram_ix_ < *self->histograms_size_)
+ FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
+ self->block_size_ = 0;
+ self->merge_last_count_ = 0;
+ self->target_block_size_ = self->min_block_size_;
+ } else if (diff[1] < diff[0] - 20.0) {
+ /* Combine this block with second last block. */
+ split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
+ split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
+ BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
+ histograms[self->last_histogram_ix_[0]] = combined_histo[1];
+ last_entropy[1] = last_entropy[0];
+ last_entropy[0] = combined_entropy[1];
+ ++self->num_blocks_;
+ self->block_size_ = 0;
+ FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
+ self->merge_last_count_ = 0;
+ self->target_block_size_ = self->min_block_size_;
+ } else {
+ /* Combine this block with last block. */
+ split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
+ histograms[self->last_histogram_ix_[0]] = combined_histo[0];
+ last_entropy[0] = combined_entropy[0];
+ if (split->num_types == 1) {
+ last_entropy[1] = last_entropy[0];
+ }
+ self->block_size_ = 0;
+ FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
+ if (++self->merge_last_count_ > 1) {
+ self->target_block_size_ += self->min_block_size_;
+ }
+ }
+ }
+ if (is_final) {
+ *self->histograms_size_ = split->num_types;
+ split->num_blocks = self->num_blocks_;
+ }
+}
+
+/* Adds the next symbol to the current histogram. When the current histogram
+ reaches the target size, decides on merging the block. */
+static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {
+ FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);
+ ++self->block_size_;
+ if (self->block_size_ == self->target_block_size_) {
+ FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);
+ }
+}
+
+#undef HistogramType
diff --git a/dviware/dvisvgm/libs/brotli/enc/params.h b/dviware/dvisvgm/libs/brotli/enc/params.h
new file mode 100644
index 0000000000..6ecf1d3f99
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/params.h
@@ -0,0 +1,44 @@
+/* Copyright 2017 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Parameters for the Brotli encoder with chosen quality levels. */
+
+#ifndef BROTLI_ENC_PARAMS_H_
+#define BROTLI_ENC_PARAMS_H_
+
+#include <brotli/encode.h>
+#include "./encoder_dict.h"
+
+typedef struct BrotliHasherParams {
+ int type;
+ int bucket_bits;
+ int block_bits;
+ int hash_len;
+ int num_last_distances_to_check;
+} BrotliHasherParams;
+
+typedef struct BrotliDistanceParams {
+ uint32_t distance_postfix_bits;
+ uint32_t num_direct_distance_codes;
+ uint32_t alphabet_size;
+ size_t max_distance;
+} BrotliDistanceParams;
+
+/* Encoding parameters */
+typedef struct BrotliEncoderParams {
+ BrotliEncoderMode mode;
+ int quality;
+ int lgwin;
+ int lgblock;
+ size_t size_hint;
+ BROTLI_BOOL disable_literal_context_modeling;
+ BROTLI_BOOL large_window;
+ BrotliHasherParams hasher;
+ BrotliDistanceParams dist;
+ BrotliEncoderDictionary dictionary;
+} BrotliEncoderParams;
+
+#endif /* BROTLI_ENC_PARAMS_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/prefix.h b/dviware/dvisvgm/libs/brotli/enc/prefix.h
new file mode 100644
index 0000000000..fd359a478d
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/prefix.h
@@ -0,0 +1,53 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions for encoding of integers into prefix codes the amount of extra
+ bits, and the actual values of the extra bits. */
+
+#ifndef BROTLI_ENC_PREFIX_H_
+#define BROTLI_ENC_PREFIX_H_
+
+#include "../common/constants.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./fast_log.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* Here distance_code is an intermediate code, i.e. one of the special codes or
+ the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */
+static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
+ size_t num_direct_codes,
+ size_t postfix_bits,
+ uint16_t* code,
+ uint32_t* extra_bits) {
+ if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {
+ *code = (uint16_t)distance_code;
+ *extra_bits = 0;
+ return;
+ } else {
+ size_t dist = ((size_t)1 << (postfix_bits + 2u)) +
+ (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);
+ size_t bucket = Log2FloorNonZero(dist) - 1;
+ size_t postfix_mask = (1u << postfix_bits) - 1;
+ size_t postfix = dist & postfix_mask;
+ size_t prefix = (dist >> bucket) & 1;
+ size_t offset = (2 + prefix) << bucket;
+ size_t nbits = bucket - postfix_bits;
+ *code = (uint16_t)((nbits << 10) |
+ (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +
+ ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));
+ *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_PREFIX_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/quality.h b/dviware/dvisvgm/libs/brotli/enc/quality.h
new file mode 100644
index 0000000000..5f4d034503
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/quality.h
@@ -0,0 +1,165 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Constants and formulas that affect speed-ratio trade-offs and thus define
+ quality levels. */
+
+#ifndef BROTLI_ENC_QUALITY_H_
+#define BROTLI_ENC_QUALITY_H_
+
+#include "../common/platform.h"
+#include <brotli/encode.h>
+#include "./params.h"
+
+#define FAST_ONE_PASS_COMPRESSION_QUALITY 0
+#define FAST_TWO_PASS_COMPRESSION_QUALITY 1
+#define ZOPFLIFICATION_QUALITY 10
+#define HQ_ZOPFLIFICATION_QUALITY 11
+
+#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2
+#define MIN_QUALITY_FOR_BLOCK_SPLIT 4
+#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4
+#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4
+#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5
+#define MIN_QUALITY_FOR_CONTEXT_MODELING 5
+#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7
+#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10
+
+/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,
+ so we buffer at most this much literals and commands. */
+#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF
+
+/* Returns hash-table size for quality levels 0 and 1. */
+static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
+ return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;
+}
+
+/* The maximum length for which the zopflification uses distinct distances. */
+#define MAX_ZOPFLI_LEN_QUALITY_10 150
+#define MAX_ZOPFLI_LEN_QUALITY_11 325
+
+/* Do not thoroughly search when a long copy is found. */
+#define BROTLI_LONG_COPY_QUICK_STEP 16384
+
+static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {
+ return params->quality <= 10 ?
+ MAX_ZOPFLI_LEN_QUALITY_10 :
+ MAX_ZOPFLI_LEN_QUALITY_11;
+}
+
+/* Number of best candidates to evaluate to expand Zopfli chain. */
+static BROTLI_INLINE size_t MaxZopfliCandidates(
+ const BrotliEncoderParams* params) {
+ return params->quality <= 10 ? 1 : 5;
+}
+
+static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
+ params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,
+ BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));
+ if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
+ params->large_window = BROTLI_FALSE;
+ }
+ if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {
+ params->lgwin = BROTLI_MIN_WINDOW_BITS;
+ } else {
+ int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :
+ BROTLI_MAX_WINDOW_BITS;
+ if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;
+ }
+}
+
+/* Returns optimized lg_block value. */
+static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {
+ int lgblock = params->lgblock;
+ if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
+ params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
+ lgblock = params->lgwin;
+ } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
+ lgblock = 14;
+ } else if (lgblock == 0) {
+ lgblock = 16;
+ if (params->quality >= 9 && params->lgwin > lgblock) {
+ lgblock = BROTLI_MIN(int, 18, params->lgwin);
+ }
+ } else {
+ lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,
+ BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));
+ }
+ return lgblock;
+}
+
+/* Returns log2 of the size of main ring buffer area.
+ Allocate at least lgwin + 1 bits for the ring buffer so that the newly
+ added block fits there completely and we still get lgwin bits and at least
+ read_block_size_bits + 1 bits because the copy tail length needs to be
+ smaller than ring-buffer size. */
+static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {
+ return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);
+}
+
+static BROTLI_INLINE size_t MaxMetablockSize(
+ const BrotliEncoderParams* params) {
+ int bits =
+ BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);
+ return (size_t)1 << bits;
+}
+
+/* When searching for backward references and have not seen matches for a long
+ time, we can skip some match lookups. Unsuccessful match lookups are very
+ expensive and this kind of a heuristic speeds up compression quite a lot.
+ At first 8 byte strides are taken and every second byte is put to hasher.
+ After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.
+ Applied only to qualities 2 to 9. */
+static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
+ const BrotliEncoderParams* params) {
+ return params->quality < 9 ? 64 : 512;
+}
+
+static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,
+ BrotliHasherParams* hparams) {
+ if (params->quality > 9) {
+ hparams->type = 10;
+ } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {
+ hparams->type = 54;
+ } else if (params->quality < 5) {
+ hparams->type = params->quality;
+ } else if (params->lgwin <= 16) {
+ hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;
+ } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {
+ hparams->type = 6;
+ hparams->block_bits = params->quality - 1;
+ hparams->bucket_bits = 15;
+ hparams->hash_len = 5;
+ hparams->num_last_distances_to_check =
+ params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
+ } else {
+ hparams->type = 5;
+ hparams->block_bits = params->quality - 1;
+ hparams->bucket_bits = params->quality < 7 ? 14 : 15;
+ hparams->num_last_distances_to_check =
+ params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
+ }
+
+ if (params->lgwin > 24) {
+ /* Different hashers for large window brotli: not for qualities <= 2,
+ these are too fast for large window. Not for qualities >= 10: their
+ hasher already works well with large window. So the changes are:
+ H3 --> H35: for quality 3.
+ H54 --> H55: for quality 4 with size hint > 1MB
+ H6 --> H65: for qualities 5, 6, 7, 8, 9. */
+ if (hparams->type == 3) {
+ hparams->type = 35;
+ }
+ if (hparams->type == 54) {
+ hparams->type = 55;
+ }
+ if (hparams->type == 6) {
+ hparams->type = 65;
+ }
+ }
+}
+
+#endif /* BROTLI_ENC_QUALITY_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/ringbuffer.h b/dviware/dvisvgm/libs/brotli/enc/ringbuffer.h
new file mode 100644
index 0000000000..86079a89d3
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/ringbuffer.h
@@ -0,0 +1,164 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Sliding window over the input data. */
+
+#ifndef BROTLI_ENC_RINGBUFFER_H_
+#define BROTLI_ENC_RINGBUFFER_H_
+
+#include <string.h> /* memcpy */
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./memory.h"
+#include "./quality.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of
+ data in a circular manner: writing a byte writes it to:
+ `position() % (1 << window_bits)'.
+ For convenience, the RingBuffer array contains another copy of the
+ first `1 << tail_bits' bytes:
+ buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),
+ and another copy of the last two bytes:
+ buffer_[-1] == buffer_[(1 << window_bits) - 1] and
+ buffer_[-2] == buffer_[(1 << window_bits) - 2]. */
+typedef struct RingBuffer {
+ /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */
+ const uint32_t size_;
+ const uint32_t mask_;
+ const uint32_t tail_size_;
+ const uint32_t total_size_;
+
+ uint32_t cur_size_;
+ /* Position to write in the ring buffer. */
+ uint32_t pos_;
+ /* The actual ring buffer containing the copy of the last two bytes, the data,
+ and the copy of the beginning as a tail. */
+ uint8_t* data_;
+ /* The start of the ring-buffer. */
+ uint8_t* buffer_;
+} RingBuffer;
+
+static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
+ rb->cur_size_ = 0;
+ rb->pos_ = 0;
+ rb->data_ = 0;
+ rb->buffer_ = 0;
+}
+
+static BROTLI_INLINE void RingBufferSetup(
+ const BrotliEncoderParams* params, RingBuffer* rb) {
+ int window_bits = ComputeRbBits(params);
+ int tail_bits = params->lgblock;
+ *(uint32_t*)&rb->size_ = 1u << window_bits;
+ *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;
+ *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;
+ *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;
+}
+
+static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {
+ BROTLI_FREE(m, rb->data_);
+}
+
+/* Allocates or re-allocates data_ to the given length + plus some slack
+ region before and after. Fills the slack regions with zeros. */
+static BROTLI_INLINE void RingBufferInitBuffer(
+ MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {
+ static const size_t kSlackForEightByteHashingEverywhere = 7;
+ uint8_t* new_data = BROTLI_ALLOC(
+ m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);
+ size_t i;
+ if (BROTLI_IS_OOM(m)) return;
+ if (rb->data_) {
+ memcpy(new_data, rb->data_,
+ 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);
+ BROTLI_FREE(m, rb->data_);
+ }
+ rb->data_ = new_data;
+ rb->cur_size_ = buflen;
+ rb->buffer_ = rb->data_ + 2;
+ rb->buffer_[-2] = rb->buffer_[-1] = 0;
+ for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {
+ rb->buffer_[rb->cur_size_ + i] = 0;
+ }
+}
+
+static BROTLI_INLINE void RingBufferWriteTail(
+ const uint8_t* bytes, size_t n, RingBuffer* rb) {
+ const size_t masked_pos = rb->pos_ & rb->mask_;
+ if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {
+ /* Just fill the tail buffer with the beginning data. */
+ const size_t p = rb->size_ + masked_pos;
+ memcpy(&rb->buffer_[p], bytes,
+ BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));
+ }
+}
+
+/* Push bytes into the ring buffer. */
+static BROTLI_INLINE void RingBufferWrite(
+ MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {
+ if (rb->pos_ == 0 && n < rb->tail_size_) {
+ /* Special case for the first write: to process the first block, we don't
+ need to allocate the whole ring-buffer and we don't need the tail
+ either. However, we do this memory usage optimization only if the
+ first write is less than the tail size, which is also the input block
+ size, otherwise it is likely that other blocks will follow and we
+ will need to reallocate to the full size anyway. */
+ rb->pos_ = (uint32_t)n;
+ RingBufferInitBuffer(m, rb->pos_, rb);
+ if (BROTLI_IS_OOM(m)) return;
+ memcpy(rb->buffer_, bytes, n);
+ return;
+ }
+ if (rb->cur_size_ < rb->total_size_) {
+ /* Lazily allocate the full buffer. */
+ RingBufferInitBuffer(m, rb->total_size_, rb);
+ if (BROTLI_IS_OOM(m)) return;
+ /* Initialize the last two bytes to zero, so that we don't have to worry
+ later when we copy the last two bytes to the first two positions. */
+ rb->buffer_[rb->size_ - 2] = 0;
+ rb->buffer_[rb->size_ - 1] = 0;
+ }
+ {
+ const size_t masked_pos = rb->pos_ & rb->mask_;
+ /* The length of the writes is limited so that we do not need to worry
+ about a write */
+ RingBufferWriteTail(bytes, n, rb);
+ if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {
+ /* A single write fits. */
+ memcpy(&rb->buffer_[masked_pos], bytes, n);
+ } else {
+ /* Split into two writes.
+ Copy into the end of the buffer, including the tail buffer. */
+ memcpy(&rb->buffer_[masked_pos], bytes,
+ BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));
+ /* Copy into the beginning of the buffer */
+ memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),
+ n - (rb->size_ - masked_pos));
+ }
+ }
+ {
+ BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;
+ uint32_t rb_pos_mask = (1u << 31) - 1;
+ rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];
+ rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];
+ rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);
+ if (not_first_lap) {
+ /* Wrap, but preserve not-a-first-lap feature. */
+ rb->pos_ |= 1u << 31;
+ }
+ }
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_RINGBUFFER_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/static_dict.c b/dviware/dvisvgm/libs/brotli/enc/static_dict.c
new file mode 100644
index 0000000000..7299ab7203
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/static_dict.c
@@ -0,0 +1,486 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+#include "./static_dict.h"
+
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include "../common/transform.h"
+#include "./encoder_dict.h"
+#include "./find_match_length.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static BROTLI_INLINE uint32_t Hash(const uint8_t* data) {
+ uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32;
+ /* The higher bits contain more mixture from the multiplication,
+ so we take our results from there. */
+ return h >> (32 - kDictNumBits);
+}
+
+static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,
+ uint32_t* matches) {
+ uint32_t match = (uint32_t)((distance << 5) + len_code);
+ matches[len] = BROTLI_MIN(uint32_t, matches[len], match);
+}
+
+static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,
+ const uint8_t* data,
+ size_t id,
+ size_t len,
+ size_t maxlen) {
+ const size_t offset = dictionary->offsets_by_length[len] + len * id;
+ return FindMatchLengthWithLimit(&dictionary->data[offset], data,
+ BROTLI_MIN(size_t, len, maxlen));
+}
+
+static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,
+ DictWord w, const uint8_t* data, size_t max_length) {
+ if (w.len > max_length) {
+ return BROTLI_FALSE;
+ } else {
+ const size_t offset = dictionary->offsets_by_length[w.len] +
+ (size_t)w.len * (size_t)w.idx;
+ const uint8_t* dict = &dictionary->data[offset];
+ if (w.transform == 0) {
+ /* Match against base dictionary word. */
+ return
+ TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);
+ } else if (w.transform == 10) {
+ /* Match against uppercase first transform.
+ Note that there are only ASCII uppercase words in the lookup table. */
+ return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&
+ (dict[0] ^ 32) == data[0] &&
+ FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==
+ w.len - 1u);
+ } else {
+ /* Match against uppercase all transform.
+ Note that there are only ASCII uppercase words in the lookup table. */
+ size_t i;
+ for (i = 0; i < w.len; ++i) {
+ if (dict[i] >= 'a' && dict[i] <= 'z') {
+ if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;
+ } else {
+ if (dict[i] != data[i]) return BROTLI_FALSE;
+ }
+ }
+ return BROTLI_TRUE;
+ }
+ }
+}
+
+BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
+ const BrotliEncoderDictionary* dictionary, const uint8_t* data,
+ size_t min_length, size_t max_length, uint32_t* matches) {
+ BROTLI_BOOL has_found_match = BROTLI_FALSE;
+ {
+ size_t offset = dictionary->buckets[Hash(data)];
+ BROTLI_BOOL end = !offset;
+ while (!end) {
+ DictWord w = dictionary->dict_words[offset++];
+ const size_t l = w.len & 0x1F;
+ const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
+ const size_t id = w.idx;
+ end = !!(w.len & 0x80);
+ w.len = (uint8_t)l;
+ if (w.transform == 0) {
+ const size_t matchlen =
+ DictMatchLength(dictionary->words, data, id, l, max_length);
+ const uint8_t* s;
+ size_t minlen;
+ size_t maxlen;
+ size_t len;
+ /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */
+ if (matchlen == l) {
+ AddMatch(id, l, l, matches);
+ has_found_match = BROTLI_TRUE;
+ }
+ /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and
+ "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */
+ if (matchlen >= l - 1) {
+ AddMatch(id + 12 * n, l - 1, l, matches);
+ if (l + 2 < max_length &&
+ data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&
+ data[l + 2] == ' ') {
+ AddMatch(id + 49 * n, l + 3, l, matches);
+ }
+ has_found_match = BROTLI_TRUE;
+ }
+ /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */
+ minlen = min_length;
+ if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);
+ maxlen = BROTLI_MIN(size_t, matchlen, l - 2);
+ for (len = minlen; len <= maxlen; ++len) {
+ size_t cut = l - len;
+ size_t transform_id = (cut << 2) +
+ (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
+ AddMatch(id + transform_id * n, len, l, matches);
+ has_found_match = BROTLI_TRUE;
+ }
+ if (matchlen < l || l + 6 >= max_length) {
+ continue;
+ }
+ s = &data[l];
+ /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + <suffix> */
+ if (s[0] == ' ') {
+ AddMatch(id + n, l + 1, l, matches);
+ if (s[1] == 'a') {
+ if (s[2] == ' ') {
+ AddMatch(id + 28 * n, l + 3, l, matches);
+ } else if (s[2] == 's') {
+ if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);
+ } else if (s[2] == 't') {
+ if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);
+ } else if (s[2] == 'n') {
+ if (s[3] == 'd' && s[4] == ' ') {
+ AddMatch(id + 10 * n, l + 5, l, matches);
+ }
+ }
+ } else if (s[1] == 'b') {
+ if (s[2] == 'y' && s[3] == ' ') {
+ AddMatch(id + 38 * n, l + 4, l, matches);
+ }
+ } else if (s[1] == 'i') {
+ if (s[2] == 'n') {
+ if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);
+ } else if (s[2] == 's') {
+ if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);
+ }
+ } else if (s[1] == 'f') {
+ if (s[2] == 'o') {
+ if (s[3] == 'r' && s[4] == ' ') {
+ AddMatch(id + 25 * n, l + 5, l, matches);
+ }
+ } else if (s[2] == 'r') {
+ if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {
+ AddMatch(id + 37 * n, l + 6, l, matches);
+ }
+ }
+ } else if (s[1] == 'o') {
+ if (s[2] == 'f') {
+ if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);
+ } else if (s[2] == 'n') {
+ if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);
+ }
+ } else if (s[1] == 'n') {
+ if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {
+ AddMatch(id + 80 * n, l + 5, l, matches);
+ }
+ } else if (s[1] == 't') {
+ if (s[2] == 'h') {
+ if (s[3] == 'e') {
+ if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);
+ } else if (s[3] == 'a') {
+ if (s[4] == 't' && s[5] == ' ') {
+ AddMatch(id + 29 * n, l + 6, l, matches);
+ }
+ }
+ } else if (s[2] == 'o') {
+ if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);
+ }
+ } else if (s[1] == 'w') {
+ if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {
+ AddMatch(id + 35 * n, l + 6, l, matches);
+ }
+ }
+ } else if (s[0] == '"') {
+ AddMatch(id + 19 * n, l + 1, l, matches);
+ if (s[1] == '>') {
+ AddMatch(id + 21 * n, l + 2, l, matches);
+ }
+ } else if (s[0] == '.') {
+ AddMatch(id + 20 * n, l + 1, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + 31 * n, l + 2, l, matches);
+ if (s[2] == 'T' && s[3] == 'h') {
+ if (s[4] == 'e') {
+ if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);
+ } else if (s[4] == 'i') {
+ if (s[5] == 's' && s[6] == ' ') {
+ AddMatch(id + 75 * n, l + 7, l, matches);
+ }
+ }
+ }
+ }
+ } else if (s[0] == ',') {
+ AddMatch(id + 76 * n, l + 1, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + 14 * n, l + 2, l, matches);
+ }
+ } else if (s[0] == '\n') {
+ AddMatch(id + 22 * n, l + 1, l, matches);
+ if (s[1] == '\t') {
+ AddMatch(id + 50 * n, l + 2, l, matches);
+ }
+ } else if (s[0] == ']') {
+ AddMatch(id + 24 * n, l + 1, l, matches);
+ } else if (s[0] == '\'') {
+ AddMatch(id + 36 * n, l + 1, l, matches);
+ } else if (s[0] == ':') {
+ AddMatch(id + 51 * n, l + 1, l, matches);
+ } else if (s[0] == '(') {
+ AddMatch(id + 57 * n, l + 1, l, matches);
+ } else if (s[0] == '=') {
+ if (s[1] == '"') {
+ AddMatch(id + 70 * n, l + 2, l, matches);
+ } else if (s[1] == '\'') {
+ AddMatch(id + 86 * n, l + 2, l, matches);
+ }
+ } else if (s[0] == 'a') {
+ if (s[1] == 'l' && s[2] == ' ') {
+ AddMatch(id + 84 * n, l + 3, l, matches);
+ }
+ } else if (s[0] == 'e') {
+ if (s[1] == 'd') {
+ if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);
+ } else if (s[1] == 'r') {
+ if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);
+ } else if (s[1] == 's') {
+ if (s[2] == 't' && s[3] == ' ') {
+ AddMatch(id + 95 * n, l + 4, l, matches);
+ }
+ }
+ } else if (s[0] == 'f') {
+ if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {
+ AddMatch(id + 90 * n, l + 4, l, matches);
+ }
+ } else if (s[0] == 'i') {
+ if (s[1] == 'v') {
+ if (s[2] == 'e' && s[3] == ' ') {
+ AddMatch(id + 92 * n, l + 4, l, matches);
+ }
+ } else if (s[1] == 'z') {
+ if (s[2] == 'e' && s[3] == ' ') {
+ AddMatch(id + 100 * n, l + 4, l, matches);
+ }
+ }
+ } else if (s[0] == 'l') {
+ if (s[1] == 'e') {
+ if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {
+ AddMatch(id + 93 * n, l + 5, l, matches);
+ }
+ } else if (s[1] == 'y') {
+ if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);
+ }
+ } else if (s[0] == 'o') {
+ if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {
+ AddMatch(id + 106 * n, l + 4, l, matches);
+ }
+ }
+ } else {
+ /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
+ is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
+ transform. */
+ const BROTLI_BOOL is_all_caps =
+ TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
+ const uint8_t* s;
+ if (!IsMatch(dictionary->words, w, data, max_length)) {
+ continue;
+ }
+ /* Transform "" + kUppercase{First,All} + "" */
+ AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);
+ has_found_match = BROTLI_TRUE;
+ if (l + 1 >= max_length) {
+ continue;
+ }
+ /* Transforms "" + kUppercase{First,All} + <suffix> */
+ s = &data[l];
+ if (s[0] == ' ') {
+ AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);
+ } else if (s[0] == '"') {
+ AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);
+ if (s[1] == '>') {
+ AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);
+ }
+ } else if (s[0] == '.') {
+ AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);
+ }
+ } else if (s[0] == ',') {
+ AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);
+ }
+ } else if (s[0] == '\'') {
+ AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);
+ } else if (s[0] == '(') {
+ AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);
+ } else if (s[0] == '=') {
+ if (s[1] == '"') {
+ AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);
+ } else if (s[1] == '\'') {
+ AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);
+ }
+ }
+ }
+ }
+ }
+ /* Transforms with prefixes " " and "." */
+ if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {
+ BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');
+ size_t offset = dictionary->buckets[Hash(&data[1])];
+ BROTLI_BOOL end = !offset;
+ while (!end) {
+ DictWord w = dictionary->dict_words[offset++];
+ const size_t l = w.len & 0x1F;
+ const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
+ const size_t id = w.idx;
+ end = !!(w.len & 0x80);
+ w.len = (uint8_t)l;
+ if (w.transform == 0) {
+ const uint8_t* s;
+ if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
+ continue;
+ }
+ /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and
+ "." + BROTLI_TRANSFORM_IDENTITY + "" */
+ AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);
+ has_found_match = BROTLI_TRUE;
+ if (l + 2 >= max_length) {
+ continue;
+ }
+ /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + <suffix> and
+ "." + BROTLI_TRANSFORM_IDENTITY + <suffix>
+ */
+ s = &data[l + 1];
+ if (s[0] == ' ') {
+ AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);
+ } else if (s[0] == '(') {
+ AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);
+ } else if (is_space) {
+ if (s[0] == ',') {
+ AddMatch(id + 103 * n, l + 2, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + 33 * n, l + 3, l, matches);
+ }
+ } else if (s[0] == '.') {
+ AddMatch(id + 71 * n, l + 2, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + 52 * n, l + 3, l, matches);
+ }
+ } else if (s[0] == '=') {
+ if (s[1] == '"') {
+ AddMatch(id + 81 * n, l + 3, l, matches);
+ } else if (s[1] == '\'') {
+ AddMatch(id + 98 * n, l + 3, l, matches);
+ }
+ }
+ }
+ } else if (is_space) {
+ /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
+ is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
+ transform. */
+ const BROTLI_BOOL is_all_caps =
+ TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
+ const uint8_t* s;
+ if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
+ continue;
+ }
+ /* Transforms " " + kUppercase{First,All} + "" */
+ AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);
+ has_found_match = BROTLI_TRUE;
+ if (l + 2 >= max_length) {
+ continue;
+ }
+ /* Transforms " " + kUppercase{First,All} + <suffix> */
+ s = &data[l + 1];
+ if (s[0] == ' ') {
+ AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);
+ } else if (s[0] == ',') {
+ if (!is_all_caps) {
+ AddMatch(id + 109 * n, l + 2, l, matches);
+ }
+ if (s[1] == ' ') {
+ AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);
+ }
+ } else if (s[0] == '.') {
+ AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);
+ if (s[1] == ' ') {
+ AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);
+ }
+ } else if (s[0] == '=') {
+ if (s[1] == '"') {
+ AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);
+ } else if (s[1] == '\'') {
+ AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);
+ }
+ }
+ }
+ }
+ }
+ if (max_length >= 6) {
+ /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */
+ if ((data[1] == ' ' &&
+ (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||
+ (data[0] == 0xC2 && data[1] == 0xA0)) {
+ size_t offset = dictionary->buckets[Hash(&data[2])];
+ BROTLI_BOOL end = !offset;
+ while (!end) {
+ DictWord w = dictionary->dict_words[offset++];
+ const size_t l = w.len & 0x1F;
+ const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
+ const size_t id = w.idx;
+ end = !!(w.len & 0x80);
+ w.len = (uint8_t)l;
+ if (w.transform == 0 &&
+ IsMatch(dictionary->words, w, &data[2], max_length - 2)) {
+ if (data[0] == 0xC2) {
+ AddMatch(id + 102 * n, l + 2, l, matches);
+ has_found_match = BROTLI_TRUE;
+ } else if (l + 2 < max_length && data[l + 2] == ' ') {
+ size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);
+ AddMatch(id + t * n, l + 3, l, matches);
+ has_found_match = BROTLI_TRUE;
+ }
+ }
+ }
+ }
+ }
+ if (max_length >= 9) {
+ /* Transforms with prefixes " the " and ".com/" */
+ if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&
+ data[3] == 'e' && data[4] == ' ') ||
+ (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&
+ data[3] == 'm' && data[4] == '/')) {
+ size_t offset = dictionary->buckets[Hash(&data[5])];
+ BROTLI_BOOL end = !offset;
+ while (!end) {
+ DictWord w = dictionary->dict_words[offset++];
+ const size_t l = w.len & 0x1F;
+ const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
+ const size_t id = w.idx;
+ end = !!(w.len & 0x80);
+ w.len = (uint8_t)l;
+ if (w.transform == 0 &&
+ IsMatch(dictionary->words, w, &data[5], max_length - 5)) {
+ AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);
+ has_found_match = BROTLI_TRUE;
+ if (l + 5 < max_length) {
+ const uint8_t* s = &data[l + 5];
+ if (data[0] == ' ') {
+ if (l + 8 < max_length &&
+ s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {
+ AddMatch(id + 62 * n, l + 9, l, matches);
+ if (l + 12 < max_length &&
+ s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {
+ AddMatch(id + 73 * n, l + 13, l, matches);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return has_found_match;
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/static_dict.h b/dviware/dvisvgm/libs/brotli/enc/static_dict.h
new file mode 100644
index 0000000000..6b5d4eb0c9
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/static_dict.h
@@ -0,0 +1,40 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Class to model the static dictionary. */
+
+#ifndef BROTLI_ENC_STATIC_DICT_H_
+#define BROTLI_ENC_STATIC_DICT_H_
+
+#include "../common/dictionary.h"
+#include "../common/platform.h"
+#include <brotli/types.h>
+#include "./encoder_dict.h"
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37
+static const uint32_t kInvalidMatch = 0xFFFFFFF;
+
+/* Matches data against static dictionary words, and for each length l,
+ for which a match is found, updates matches[l] to be the minimum possible
+ (distance << 5) + len_code.
+ Returns 1 if matches have been found, otherwise 0.
+ Prerequisites:
+ matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long
+ all elements are initialized to kInvalidMatch */
+BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
+ const BrotliEncoderDictionary* dictionary,
+ const uint8_t* data, size_t min_length, size_t max_length,
+ uint32_t* matches);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_STATIC_DICT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/static_dict_lut.h b/dviware/dvisvgm/libs/brotli/enc/static_dict_lut.h
new file mode 100644
index 0000000000..e299cda6d8
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/static_dict_lut.h
@@ -0,0 +1,5864 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Lookup table for static dictionary and transforms. */
+
+#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_
+#define BROTLI_ENC_STATIC_DICT_LUT_H_
+
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+typedef struct DictWord {
+ /* Highest bit is used to indicate end of bucket. */
+ uint8_t len;
+ uint8_t transform;
+ uint16_t idx;
+} DictWord;
+
+static const int kDictNumBits = 15;
+static const uint32_t kDictHashMul32 = 0x1E35A7BD;
+
+static const uint16_t kStaticDictionaryBuckets[32768] = {
+1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,
+0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,
+0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0
+,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0
+,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0
+,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,
+192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,
+0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,
+249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,
+271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,
+0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,
+329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,
+0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,
+0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,
+0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,
+458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,
+474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,
+0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,
+534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,
+0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,
+0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,
+0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,
+711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,
+0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,
+790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,
+844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,
+894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,
+0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,
+0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,
+984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,
+0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0
+,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,
+1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042
+,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0
+,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0
+,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,
+1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,
+0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0
+,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0
+,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,
+0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243
+,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,
+0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,
+1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,
+1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,
+1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,
+0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,
+1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,
+1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,
+1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,
+1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,
+1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,
+1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,
+1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,
+1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,
+1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,
+1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0
+,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,
+0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,
+1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0
+,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,
+0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958
+,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,
+2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,
+2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,
+2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,
+0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,
+0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,
+0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,
+2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,
+2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,
+0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0
+,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,
+0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,
+0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,
+0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0
+,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0
+,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,
+2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,
+0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434
+,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477
+,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,
+0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,
+2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,
+2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,
+0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0
+,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,
+2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,
+2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0
+,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,
+2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0
+,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0
+,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0
+,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0
+,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,
+2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,
+2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828
+,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,
+0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,
+2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,
+2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,
+2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0
+,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,
+0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,
+0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012
+,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,
+3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0
+,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0
+,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,
+0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,
+0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,
+3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,
+0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,
+3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0
+,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,
+3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0
+,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0
+,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,
+3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0
+,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,
+3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,
+3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0
+,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,
+0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,
+3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,
+3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,
+3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,
+3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,
+3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,
+3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658
+,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0
+,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711
+,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737
+,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0
+,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,
+0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0
+,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,
+3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,
+3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0
+,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966
+,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0
+,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0
+,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,
+4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,
+4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105
+,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0
+,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,
+0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350
+,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,
+0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386
+,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427
+,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0
+,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470
+,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,
+0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527
+,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,
+0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,
+4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,
+0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,
+4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,
+4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,
+0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,
+4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747
+,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,
+4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0
+,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,
+0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0
+,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0
+,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0
+,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,
+4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,
+5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,
+5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,
+5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,
+5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,
+0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,
+5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0
+,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,
+5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0
+,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,
+5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,
+0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,
+0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,
+0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,
+5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0
+,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,
+0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,
+5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,
+5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388
+,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,
+5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416
+,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,
+5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0
+,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0
+,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,
+0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,
+5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,
+5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,
+0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,
+5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,
+0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0
+,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,
+5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,
+0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,
+0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833
+,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,
+5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,
+0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924
+,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953
+,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,
+5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009
+,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,
+0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,
+0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,
+6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0
+,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0
+,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,
+6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,
+6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,
+6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,
+0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,
+6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,
+0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,
+6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,
+6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,
+0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,
+0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481
+,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,
+0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,
+6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532
+,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,
+6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0
+,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,
+0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,
+6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,
+6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,
+6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0
+,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,
+6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868
+,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879
+,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,
+0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919
+,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936
+,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0
+,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0
+,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,
+0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030
+,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,
+0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,
+7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,
+0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0
+,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,
+0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,
+7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,
+7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,
+7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,
+7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0
+,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0
+,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,
+7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,
+7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,
+7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,
+7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0
+,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,
+0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,
+0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,
+7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,
+7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,
+7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581
+,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,
+0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,
+7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0
+,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688
+,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,
+7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0
+,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0
+,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,
+0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,
+7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,
+7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0
+,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,
+7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0
+,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,
+7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,
+0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,
+8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,
+8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,
+0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,
+8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,
+0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,
+8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,
+0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,
+8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0
+,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286
+,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,
+8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,
+8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,
+0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,
+8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,
+0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0
+,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,
+8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0
+,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,
+0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,
+0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623
+,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,
+0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,
+0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0
+,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,
+8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,
+8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788
+,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,
+8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,
+8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,
+8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,
+8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913
+,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,
+8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,
+0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0
+,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095
+,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,
+9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,
+0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,
+9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,
+0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,
+9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225
+,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,
+0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,
+0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,
+9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0
+,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,
+9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,
+9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,
+9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,
+0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0
+,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,
+0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,
+0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0
+,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,
+0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,
+0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,
+9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,
+9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754
+,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0
+,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,
+0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0
+,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,
+9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0
+,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,
+9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0
+,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974
+,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0
+,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,
+0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,
+0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,
+10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,
+0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,
+10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,
+0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,
+10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,
+10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,
+10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,
+0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,
+0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,
+10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,
+0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,
+10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,
+0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,
+10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,
+0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,
+10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,
+10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,
+10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,
+0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,
+10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,
+10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,
+0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,
+10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,
+0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,
+0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,
+10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,
+10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,
+0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,
+0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,
+10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,
+10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,
+10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,
+10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,
+0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,
+10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,
+10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,
+10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,
+10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,
+0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,
+10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,
+0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,
+10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,
+10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,
+0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,
+10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,
+0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,
+11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,
+11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,
+11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,
+0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,
+11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,
+0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,
+11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,
+11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,
+11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,
+0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,
+0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,
+11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,
+11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,
+11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,
+0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,
+11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,
+11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,
+11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,
+0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,
+11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,
+0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,
+11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,
+11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,
+11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,
+11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,
+11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,
+11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,
+0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,
+11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,
+11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,
+0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,
+0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,
+11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,
+11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,
+0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,
+11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,
+0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,
+11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,
+12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,
+0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,
+12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,
+12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,
+0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,
+12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,
+0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,
+0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,
+12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,
+12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,
+12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,
+12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,
+12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,
+12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,
+0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,
+0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,
+12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,
+12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,
+12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,
+0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,
+0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,
+0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,
+0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,
+12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,
+0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,
+0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,
+0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,
+0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,
+0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,
+12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,
+12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,
+12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,
+0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,
+12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,
+0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,
+0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,
+12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,
+0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,
+0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,
+12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,
+0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,
+12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,
+0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,
+12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,
+13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,
+13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,
+13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,
+13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,
+13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,
+13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,
+0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,
+13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,
+13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,
+13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,
+13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,
+13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,
+13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,
+13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,
+0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,
+13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,
+0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,
+13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,
+13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,
+13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,
+13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,
+13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,
+0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,
+13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,
+13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,
+0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,
+0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,
+13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,
+13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,
+13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,
+13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,
+0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,
+13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,
+13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,
+13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,
+0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,
+13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,
+13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,
+13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,
+13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,
+0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,
+14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,
+14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,
+0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,
+14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,
+0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,
+14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,
+14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,
+14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,
+14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,
+14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,
+14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,
+0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,
+14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,
+14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,
+14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,
+14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,
+0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,
+14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,
+14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,
+0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,
+0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,
+0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,
+0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,
+0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,
+14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,
+14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,
+14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,
+0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,
+0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,
+0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,
+0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,
+14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,
+0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,
+14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,
+14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,
+14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,
+14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,
+0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,
+0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,
+0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,
+14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,
+14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,
+0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,
+0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,
+0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,
+15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,
+0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,
+0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,
+15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,
+15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,
+15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,
+0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,
+0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,
+0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,
+0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,
+15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,
+15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,
+0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,
+15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,
+15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,
+15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,
+15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,
+0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,
+15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,
+15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,
+0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,
+15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,
+15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,
+0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,
+0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,
+15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,
+0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,
+15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,
+15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,
+15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,
+0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,
+0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,
+15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,
+15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,
+0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,
+15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,
+0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,
+15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,
+0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,
+15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,
+0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,
+15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,
+0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,
+15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,
+0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,
+0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,
+0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,
+0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,
+0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,
+16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,
+16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,
+16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,
+0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,
+0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,
+0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,
+0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,
+16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,
+16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,
+0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,
+16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,
+16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,
+16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,
+0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,
+0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,
+16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,
+0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,
+16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,
+16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,
+0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,
+16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,
+16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,
+16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,
+0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,
+16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,
+0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,
+0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,
+16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,
+16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,
+0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,
+16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,
+0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,
+16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,
+0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,
+16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,
+16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,
+0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,
+17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,
+17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,
+0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,
+0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,
+0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,
+0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,
+17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,
+17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,
+0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,
+17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,
+0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,
+17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,
+0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,
+17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,
+0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,
+17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,
+0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,
+0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,
+17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,
+0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,
+17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,
+17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,
+0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,
+0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,
+17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,
+17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,
+0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,
+17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,
+0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,
+17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,
+0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,
+0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,
+0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,
+17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,
+17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,
+17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,
+0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,
+0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,
+0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,
+18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,
+18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,
+18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,
+18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,
+0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,
+18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,
+18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,
+18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,
+0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,
+0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,
+18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,
+18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,
+18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,
+0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,
+0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,
+18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,
+18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,
+0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,
+0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,
+18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,
+0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,
+0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,
+18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,
+18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,
+18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,
+18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,
+18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,
+0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,
+18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,
+18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,
+0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,
+18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,
+18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,
+0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,
+0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,
+18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,
+0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,
+18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,
+0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,
+18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,
+0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,
+0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,
+0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,
+0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,
+19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,
+0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,
+19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,
+0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,
+19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,
+19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,
+0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,
+0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,
+0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,
+0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,
+19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,
+0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,
+0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,
+19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,
+0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,
+19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,
+19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,
+19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,
+0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,
+19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,
+19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,
+0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,
+0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,
+19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,
+0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,
+0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,
+0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,
+19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,
+0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,
+0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,
+0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,
+19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,
+0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,
+0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,
+19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,
+0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,
+19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,
+19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,
+19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,
+19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,
+19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,
+20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,
+0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,
+20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,
+0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,
+20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,
+20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,
+20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,
+20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,
+20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,
+20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,
+20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,
+20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,
+20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,
+20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,
+0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,
+0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,
+20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,
+20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,
+0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,
+0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,
+20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,
+20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,
+20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,
+0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,
+20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,
+20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,
+20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,
+20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,
+0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,
+0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,
+0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,
+20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,
+20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,
+0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,
+0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,
+0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,
+0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,
+0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,
+20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,
+21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,
+0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,
+21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,
+0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,
+21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,
+0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,
+0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,
+21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,
+21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,
+0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,
+21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,
+0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,
+0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,
+0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,
+21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,
+0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,
+0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,
+0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,
+21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,
+0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,
+0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,
+0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,
+0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,
+21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,
+21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,
+21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,
+0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,
+0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,
+21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,
+21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,
+0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,
+21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,
+0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,
+0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,
+21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,
+21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,
+21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,
+21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,
+21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,
+21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,
+21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,
+0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,
+0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,
+0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,
+0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,
+21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,
+22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,
+0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,
+0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,
+22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,
+0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,
+0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,
+0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,
+0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,
+0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,
+22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,
+0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,
+0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,
+0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,
+0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,
+0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,
+22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,
+0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,
+22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,
+0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,
+0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,
+22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,
+22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,
+22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,
+22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,
+22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,
+22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,
+0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,
+0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,
+22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,
+0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,
+0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,
+0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,
+22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,
+22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,
+0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,
+0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,
+22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,
+0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,
+22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,
+22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,
+22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,
+22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,
+22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,
+22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,
+23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,
+23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,
+0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,
+0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,
+0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,
+0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,
+23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,
+0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,
+23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,
+0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,
+0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,
+23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,
+23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,
+23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,
+23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,
+23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,
+0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,
+23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,
+0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,
+0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,
+0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,
+23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,
+0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,
+23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,
+23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,
+0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,
+0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,
+23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,
+23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,
+23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,
+23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,
+23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,
+0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,
+0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,
+0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,
+24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,
+24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,
+24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,
+0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,
+0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,
+24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,
+24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,
+24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,
+24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,
+24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,
+24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,
+0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,
+24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,
+24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,
+0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,
+24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,
+24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,
+24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,
+0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,
+0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,
+0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,
+24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,
+0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,
+0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,
+24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,
+0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,
+0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,
+0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,
+0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,
+0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,
+24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,
+0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,
+0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,
+24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,
+0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,
+24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,
+24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,
+0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,
+24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,
+0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,
+24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,
+24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,
+24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,
+0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,
+0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,
+25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,
+25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,
+25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,
+0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,
+0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,
+25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,
+25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,
+0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,
+25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,
+25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,
+0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,
+25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,
+25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,
+0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,
+0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,
+25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,
+25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,
+25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,
+0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,
+0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,
+0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,
+0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,
+25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,
+25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,
+25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,
+0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,
+25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,
+0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,
+25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,
+25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,
+25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,
+0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,
+25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,
+25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,
+25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,
+0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,
+26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,
+26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,
+26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,
+0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,
+26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,
+26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,
+0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,
+0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,
+26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,
+26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,
+26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,
+26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,
+0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,
+0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,
+26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,
+0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,
+26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,
+0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,
+26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,
+26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,
+26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,
+26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,
+0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,
+0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,
+26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,
+26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,
+0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,
+26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,
+0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,
+26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,
+26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,
+26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,
+26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,
+0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,
+27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,
+27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,
+27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,
+27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,
+0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,
+0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,
+27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,
+27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,
+27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,
+27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,
+27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,
+0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,
+0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,
+0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,
+0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,
+27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,
+27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,
+27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,
+27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,
+0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,
+0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,
+0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,
+27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,
+27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,
+27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,
+0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,
+0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,
+27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,
+27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,
+0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,
+27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,
+27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,
+27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,
+27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,
+0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,
+28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,
+28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,
+28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,
+0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,
+0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,
+28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,
+28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,
+28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,
+28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,
+0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,
+28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,
+28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,
+0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,
+28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,
+0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,
+28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,
+28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,
+0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,
+0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,
+0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,
+28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,
+28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,
+28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,
+28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,
+28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,
+28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,
+28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,
+28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,
+0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,
+0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,
+0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,
+28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,
+0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,
+28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,
+0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,
+28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,
+0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,
+28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,
+28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,
+0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,
+0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,
+0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,
+29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,
+0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,
+0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,
+29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,
+0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,
+29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,
+29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,
+0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,
+0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,
+0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,
+0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,
+29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,
+29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,
+0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,
+0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,
+0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,
+0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,
+0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,
+29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,
+0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,
+0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,
+29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,
+29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,
+29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,
+29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,
+29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,
+0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,
+29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,
+29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,
+0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,
+29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,
+0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,
+29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,
+30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,
+0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,
+0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,
+30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,
+30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,
+30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,
+0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,
+30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,
+0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,
+30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,
+30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,
+30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,
+0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,
+30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,
+30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,
+0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,
+0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,
+0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,
+0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,
+0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,
+30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,
+30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,
+30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,
+0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,
+0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,
+0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,
+0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,
+30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,
+30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,
+0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,
+30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,
+0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,
+30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,
+30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,
+0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,
+30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,
+31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,
+31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,
+31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,
+0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,
+0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,
+0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,
+0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,
+0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,
+31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,
+31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,
+31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,
+0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,
+31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,
+0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,
+0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,
+31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,
+31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,
+31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,
+31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,
+0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,
+31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,
+31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,
+31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,
+0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,
+31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,
+0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,
+0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,
+31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,
+0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,
+0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,
+31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};
+
+static const DictWord kStaticDictionaryWords[31705] = {
+{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,
+11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},
+{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,
+1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10
+,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}
+,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,
+151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,
+10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}
+,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16,
+0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12,
+10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0,
+301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10,
+431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145
+,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139
+,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{
+135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,
+1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,
+989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,
+11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188}
+,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,
+11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0
+,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{
+132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664
+},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,
+11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,
+11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},
+{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537}
+,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,
+999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,
+359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{
+133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754}
+,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{
+132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{
+135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85},
+{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,
+225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0,
+110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345}
+,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{
+137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,
+1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{
+8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201}
+,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10
+,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},
+{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5,
+0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{
+4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{
+9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{
+133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{
+141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{
+138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{
+9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,
+877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10,
+661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11
+,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271
+},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,
+0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28},
+{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84}
+,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13
+,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{
+11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{
+138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187}
+,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},
+{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{
+137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878}
+,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,
+448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822
+},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,
+1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10
+,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},
+{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934}
+,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},
+{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63}
+,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10,
+288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10,
+322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},
+{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,
+11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,
+1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{
+9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,
+1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0
+,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9
+,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,
+1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0
+,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{
+11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,
+0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25}
+,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,
+0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,
+200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,
+0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,
+512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5
+,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,
+698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20
+},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11
+,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0
+,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,
+446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,
+862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10
+,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{
+137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{
+146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172}
+,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12
+,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,
+11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253
+},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,
+251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488}
+,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},
+{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807
+},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,
+11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0
+,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86}
+,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{
+134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12
+,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8
+,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13
+,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6
+,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},
+{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187}
+,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11
+,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834}
+,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,
+386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10,
+1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,
+540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,
+10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10
+,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5,
+10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{
+134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869},
+{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,
+11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,
+1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29
+},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137
+,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,
+513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10,
+95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134
+,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0
+},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671},
+{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10,
+438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{
+14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{
+5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786}
+,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684
+},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0
+,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},
+{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615}
+,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275
+},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,
+255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,
+10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{
+15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232
+},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11
+,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{
+5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{
+6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{
+6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0
+,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660
+},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140
+,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{
+136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179}
+,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{
+7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6,
+11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12
+,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,
+1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440
+},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{
+12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},
+{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10
+,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913
+},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0
+,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101
+},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{
+9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},
+{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11,
+320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0
+,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{
+4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7,
+10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999}
+,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,
+0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706}
+,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,
+10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10
+,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591}
+,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0
+,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{
+139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},
+{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723
+},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11
+,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},
+{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,
+0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369}
+,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,
+1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},
+{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0
+,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0
+,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10
+,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,
+10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10
+,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11
+,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,
+10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{
+141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10
+,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122
+},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{
+11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{
+7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,
+436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,
+11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138
+,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702
+},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},
+{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,
+165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,
+453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{
+7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,
+10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{
+11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10
+,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{
+14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{
+19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},
+{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,
+557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,
+169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,
+11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100}
+,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},
+{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,
+141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,
+466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7
+,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{
+12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7
+,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,
+140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{
+11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10
+,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659
+},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{
+135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483
+},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{
+17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615}
+,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227
+},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,
+1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882}
+,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476}
+,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{
+5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},
+{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,
+11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,
+0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,
+263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999},
+{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420
+},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,
+11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,
+0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5,
+10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302},
+{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{
+13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9,
+10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{
+14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10
+,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5
+,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{
+4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9
+,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{
+12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529}
+,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8,
+10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11,
+0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,
+297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303}
+,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},
+{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{
+136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,
+2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0,
+231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10,
+0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48
+},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{
+11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13,
+0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71}
+,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665
+},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11
+,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9
+,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0,
+792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10,
+1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{
+11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300
+},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,
+16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,
+10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{
+138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6,
+10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{
+13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,
+508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,
+10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{
+6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},
+{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533
+},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,
+128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6
+,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{
+15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391
+},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134
+,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10,
+1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{
+135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{
+6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{
+10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32}
+,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},
+{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389}
+,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0
+,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11
+,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{
+136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{
+5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7
+,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565
+},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10
+,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10,
+1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10,
+623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12,
+10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7,
+11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87}
+,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411}
+,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829
+},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11,
+231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,
+11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{
+142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,
+11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10
+,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192}
+,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,
+245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0
+,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134,
+0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7
+,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,
+679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139
+,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},
+{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992
+},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{
+134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508}
+,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141}
+,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0
+,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9
+,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,
+686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117
+},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11
+,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,
+10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,
+11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0
+,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244
+},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,
+7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10,
+662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{
+143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}
+,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,
+11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,
+10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7
+,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0,
+244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137
+,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0
+,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8
+,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10,
+543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10,
+205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,
+848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236
+},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{
+10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6
+,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,
+10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,
+0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272
+},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,
+480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0
+,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,
+2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26
+},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10,
+589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{
+136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,
+79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7
+,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4,
+10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{
+133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276
+},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},
+{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,
+309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,
+874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0
+,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,
+10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,
+11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,
+194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0
+,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9
+,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506
+},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14
+},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147
+,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,
+1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},
+{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7
+,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}
+,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{
+5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134
+,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,
+0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133
+,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10,
+243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{
+140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526
+},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8
+,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135,
+11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{
+135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{
+135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,
+1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47}
+,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11,
+134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{
+4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391},
+{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,
+11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},
+{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138
+,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,
+0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,
+0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6,
+10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10
+,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},
+{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14
+,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,
+518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,
+916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}
+,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,
+395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,
+0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,
+10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}
+,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11
+,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{
+134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11
+,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10,
+67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,
+0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,
+468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,
+460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0
+,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{
+147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277},
+{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,
+141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,
+311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{
+139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,
+143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,
+10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678}
+,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117},
+{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141
+},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517}
+,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,
+254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0,
+403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134,
+10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7,
+11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{
+12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270
+},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,
+1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8
+,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,
+400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11
+,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,
+77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,
+646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0,
+1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,
+389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132
+,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203
+},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7
+,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5,
+0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231}
+,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11,
+289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429
+},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10,
+265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131
+},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0,
+154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11
+,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0
+,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0,
+20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921},
+{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0
+,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6,
+0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6,
+11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355},
+{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{
+133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0,
+1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313
+},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0
+,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0,
+1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6,
+11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{
+142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,
+0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10,
+67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},
+{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503
+},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11
+,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{
+11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10
+,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10
+,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,
+1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10
+,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,
+10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{
+20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776},
+{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117
+},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,
+11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},
+{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,
+462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,
+10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296}
+,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,
+386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11,
+249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0
+,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11
+,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{
+138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{
+8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,
+524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10,
+1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421
+},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{
+13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,
+756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337},
+{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},
+{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,
+595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{
+8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,
+75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,
+954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,
+0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{
+17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{
+7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135
+,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},
+{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,
+514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,
+11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832}
+,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,
+784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0,
+556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561
+},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813},
+{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11,
+283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,
+0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0,
+150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10
+,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858}
+,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,
+0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169}
+,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,
+26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,
+11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,
+11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135
+,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851
+},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,
+11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,
+279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1
+},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{
+7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,
+0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,
+255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,
+567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,
+552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{
+14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0,
+405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11
+,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016}
+,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,
+826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,
+916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},
+{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950}
+,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,
+1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88
+},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0
+,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266},
+{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{
+7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,
+286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10,
+935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63
+},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0
+,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,
+53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{
+133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218
+},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637
+},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,
+651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,
+0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,
+72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10
+,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5
+},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},
+{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,
+1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135,
+11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{
+134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5,
+0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351}
+,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4
+,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999}
+,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{
+148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,
+11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,
+11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,
+11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888
+},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},
+{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0
+,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,
+273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135
+,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{
+7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0
+,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,
+1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},
+{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},
+{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0
+,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,
+980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,
+1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{
+10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}
+,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{
+12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,
+0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,
+986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998
+},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,
+1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{
+12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,
+1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,
+482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489
+},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{
+14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,
+0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,
+113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122
+},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{
+18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,
+0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11
+,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},
+{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,
+229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{
+135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,
+10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{
+135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,
+523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,
+580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,
+10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,
+665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,
+11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793
+},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,
+965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141
+},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,
+209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{
+133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{
+11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,
+463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,
+398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,
+11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142
+,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692
+},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138
+,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},
+{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}
+,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6
+,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10
+,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152,
+11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854},
+{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4
+,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0,
+902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,
+10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,
+525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,
+11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},
+{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}
+,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},
+{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0
+,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11
+,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135
+,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,
+0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11
+,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0
+,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,
+763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,
+172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6
+,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8,
+10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11,
+10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263}
+,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,
+190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11
+,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,
+426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,
+381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0,
+277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}
+,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{
+10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43
+},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537
+},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,
+730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369},
+{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,
+11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11
+,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{
+141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,
+642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,
+1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{
+11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,
+0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,
+171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}
+,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},
+{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203},
+{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827},
+{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,
+1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,
+1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,
+11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0
+,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469
+},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73
+},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11,
+147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0,
+396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7,
+0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10,
+651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150
+,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46
+},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11,
+182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,
+421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,
+1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0
+,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0
+,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,
+11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{
+15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9,
+10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},
+{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,
+11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0,
+588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275}
+,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149}
+,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{
+10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10,
+528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12,
+10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{
+13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71}
+,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,
+768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,
+498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13}
+,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4
+,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0
+,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,
+183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4,
+10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},
+{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,
+334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,
+11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,
+11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{
+15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},
+{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,
+11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{
+13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654
+},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}
+,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{
+137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,
+10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{
+138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575
+},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,
+0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13
+,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644
+},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{
+12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}
+,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,
+11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},
+{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{
+139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,
+0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7
+,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10,
+454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,
+792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{
+12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,
+513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7
+,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{
+12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297
+},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11,
+1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,
+1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,
+0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},
+{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{
+135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11,
+620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12,
+11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{
+135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9
+,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,
+1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{
+135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},
+{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5
+,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{
+7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7
+,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91
+},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,
+1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136
+,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144
+,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},
+{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281
+},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,
+211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}
+,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},
+{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11
+,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138
+},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638}
+,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11
+,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{
+140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}
+,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}
+,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}
+,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,
+149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,
+10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,
+0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5,
+10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,
+11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},
+{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279}
+,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,
+0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}
+,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{
+9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8
+,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933
+},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,
+589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12
+,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{
+18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{
+8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}
+,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400
+},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{
+4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11
+,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,
+11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{
+8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{
+6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{
+135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340
+},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229}
+,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,
+898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,
+10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7
+,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0
+,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,
+11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9,
+10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{
+10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}
+,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,
+6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,
+172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,
+478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,
+0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{
+136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,
+641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,
+69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0
+,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10,
+494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}
+,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10
+,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0
+,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,
+107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,
+11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}
+,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10
+,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6,
+11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{
+134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,
+1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11
+,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{
+144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7
+,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{
+137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}
+,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,
+1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,
+149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{
+11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,
+258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{
+135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7
+,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,
+10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},
+{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,
+699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145,
+10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,
+225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,
+1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},
+{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,
+1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11
+,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{
+10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,
+417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,
+1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134,
+11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,
+11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,
+386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750
+},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,
+26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,
+451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10
+,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,
+0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943
+},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,
+488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,
+1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,
+11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5
+},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0
+,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11,
+410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},
+{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,
+912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,
+921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},
+{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,
+10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10
+,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904
+},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10
+,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0,
+788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325},
+{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8
+,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8
+,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389},
+{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,
+148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24
+},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462}
+,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0
+,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805
+},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,
+81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,
+179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}
+,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0
+,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{
+6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}
+,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{
+12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,
+0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,
+227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10,
+86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10
+,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503}
+,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,
+858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371
+},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735
+},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138},
+{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10
+,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480}
+,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11,
+935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11,
+594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0,
+4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0
+,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{
+134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0,
+279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135,
+10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,
+938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132
+,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789
+},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905}
+,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301}
+,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11,
+693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12,
+11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{
+144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623
+},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6,
+10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{
+14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749}
+,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0
+,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,
+11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11
+,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,
+11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,
+11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},
+{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,
+947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13
+,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}
+,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}
+,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},
+{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,
+11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{
+132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91}
+,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800},
+{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0,
+464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10,
+0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{
+133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,
+114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,
+139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,
+179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134
+,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{
+7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,
+900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0,
+642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47}
+,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,
+273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10
+,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,
+1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,
+662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,
+10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},
+{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671},
+{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10
+,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763}
+,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,
+894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8
+,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{
+141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{
+137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,
+0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,
+11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882
+},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{
+13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,
+423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0,
+654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731}
+,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,
+68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,
+0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,
+902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,
+1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,
+11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,
+11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952
+},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,
+673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018}
+,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884}
+,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,
+5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,
+0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11,
+1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372}
+,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{
+10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10
+,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,
+658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10,
+1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138,
+10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117
+},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,
+0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,
+11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},
+{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{
+11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,
+0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},
+{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792
+},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{
+7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14}
+,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},
+{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186}
+,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,
+200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,
+1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},
+{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{
+140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,
+934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{
+7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15
+,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{
+19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5,
+10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,
+930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{
+133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,
+34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,
+513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10,
+723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,
+0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{
+7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0
+,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,
+11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142
+,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,
+1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291}
+,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,
+111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,
+811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651
+},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0
+,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11
+,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{
+139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337}
+,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259}
+,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405
+},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,
+76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132}
+,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7
+,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801},
+{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10
+,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23}
+,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},
+{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5
+,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14
+,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,
+10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,
+31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26}
+,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0,
+803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,
+526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,
+11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6
+,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{
+136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11
+,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,
+11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},
+{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,
+790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511}
+,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0
+,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610}
+,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602}
+,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,
+11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133,
+10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48
+},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480}
+,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,
+75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69}
+,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459}
+,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301
+},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,
+300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,
+1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0
+,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137
+,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624
+},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687}
+,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,
+72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10
+,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},
+{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},
+{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0
+,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667
+},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,
+11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,
+11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0,
+1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{
+11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445}
+,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72}
+,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10,
+181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138
+,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{
+140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109}
+,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11,
+152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,
+74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},
+{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,
+1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10,
+605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,
+10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132,
+10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{
+10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672}
+,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189}
+,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},
+{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99}
+,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},
+{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0,
+1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,
+0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384}
+,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,
+11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,
+10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},
+{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,
+44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815
+},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848}
+,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,
+271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10
+,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804
+},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,
+244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,
+0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,
+10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145
+,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{
+4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9
+,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},
+{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{
+12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10,
+79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233}
+,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120}
+,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10,
+27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13,
+10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{
+15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820}
+,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4
+,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},
+{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},
+{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414}
+,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0,
+816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{
+10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396
+},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494}
+,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{
+10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10,
+430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140
+,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0,
+593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288},
+{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420},
+{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7,
+11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{
+142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0,
+81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10,
+293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410},
+{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10,
+121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{
+132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16
+},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0,
+816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463}
+,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11
+,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153}
+,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0,
+652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11,
+43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604
+},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523
+},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76}
+,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{
+13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{
+7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135
+,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149
+,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151}
+,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{
+19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142
+,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581
+},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579}
+,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69},
+{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139,
+10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4
+,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7
+,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11,
+1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13,
+11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{
+145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496}
+,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323},
+{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384
+},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400}
+,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11,
+212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{
+140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{
+5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{
+8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0,
+283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401}
+,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136
+},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639},
+{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9,
+11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{
+12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664
+},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518
+},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10,
+1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0
+,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135,
+10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137},
+{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{
+135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0,
+664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{
+14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11,
+488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12,
+10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872
+},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0
+,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62
+},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10,
+5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12},
+{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781},
+{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927}
+,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654},
+{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238},
+{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{
+136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760},
+{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0
+,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114}
+,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9},
+{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139,
+10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{
+6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10,
+419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{
+11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0,
+123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11
+,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{
+136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110}
+,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11,
+569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11,
+128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{
+7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754},
+{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10
+,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11,
+982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142
+,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10,
+10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134
+,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10,
+468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5,
+10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0,
+82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6
+,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8
+,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{
+12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10
+,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{
+7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647
+},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11,
+694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5,
+0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100},
+{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810
+},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013
+},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0,
+2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7,
+10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574},
+{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11,
+150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11
+,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{
+14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799
+},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0,
+1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10,
+598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7,
+0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473},
+{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11,
+1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8,
+10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159},
+{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0
+,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329},
+{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9}
+,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533}
+,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11,
+609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947
+},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9,
+11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11,
+281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11
+,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150
+,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136
+,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136
+,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9,
+11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145},
+{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0
+},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0}
+,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126}
+,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{
+12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0,
+413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358
+},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{
+12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{
+11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10,
+622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4,
+11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507
+},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{
+7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{
+12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{
+6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10
+,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10
+,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712
+},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10,
+504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11,
+10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017}
+,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10,
+311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10
+,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11,
+188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140,
+11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132
+,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10
+,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7,
+0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11
+,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776},
+{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285}
+,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11,
+11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0,
+87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593}
+,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547
+},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12
+,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991},
+{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0,
+604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{
+4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030}
+,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0,
+558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11,
+477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0,
+24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{
+135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10
+,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136
+,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621},
+{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8
+,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947
+},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11,
+472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133,
+11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{
+139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0,
+8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11,
+163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16},
+{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{
+132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0,
+342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0,
+967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0,
+1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0
+,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{
+10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10,
+0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0,
+201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591
+},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{
+11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11,
+0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0,
+957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318
+},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{
+12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13,
+0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365
+},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{
+13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0,
+239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355
+},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{
+15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154
+},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0,
+112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18
+,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161
+},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10
+,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4
+,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815}
+,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0,
+639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10,
+0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{
+6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11
+,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{
+136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021}
+,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134,
+0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8
+,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957}
+,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057
+},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11,
+148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10,
+1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10,
+796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6,
+0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{
+132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{
+141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{
+9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165
+},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11,
+388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9},
+{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137
+,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0,
+847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338
+},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11,
+294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0,
+249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32}
+,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0,
+1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6,
+0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0,
+706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5
+,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10
+,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11
+,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0
+,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11,
+10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413},
+{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582}
+,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10,
+828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0,
+128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309},
+{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{
+137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745}
+,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198
+},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0,
+842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69}
+,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19
+},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{
+7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862},
+{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11,
+99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134
+},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526
+},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{
+7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{
+14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{
+146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833
+},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11
+,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10,
+1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0,
+627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401}
+,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0,
+742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{
+135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346}
+,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51}
+,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{
+6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929},
+{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,
+143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,
+584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4,
+11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{
+134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892}
+,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126
+},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10,
+352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0,
+1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{
+142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7,
+11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14,
+11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0,
+2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0,
+1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135,
+11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{
+4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{
+13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0,
+1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{
+141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0,
+2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7
+,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{
+12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{
+9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0,
+1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11,
+11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0,
+68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11,
+635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133
+,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{
+135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496}
+,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716
+},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135
+,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{
+8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7,
+11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{
+137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0,
+829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19,
+0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{
+7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0,
+314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11,
+82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290},
+{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325
+},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66}
+,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7
+,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136
+,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0,
+683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7
+,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{
+12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11,
+466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148
+,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5
+,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196}
+,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6
+,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4
+,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{
+132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138
+,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{
+6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465},
+{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898
+},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{
+7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{
+147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135
+,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619},
+{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{
+11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0,
+600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134,
+11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141
+,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{
+138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11,
+650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{
+136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131}
+,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11,
+1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10
+,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86}
+,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0,
+69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0,
+51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471},
+{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10
+,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554}
+,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517
+},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117},
+{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{
+11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{
+6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11,
+11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{
+6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{
+140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10,
+1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10,
+10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274},
+{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{
+10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11,
+434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205}
+,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11,
+10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829}
+,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11,
+219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,
+605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6
+,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,
+835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187
+},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434
+},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{
+9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,
+204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,
+10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137
+,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,
+697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{
+136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10
+,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,
+482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435
+},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},
+{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,
+11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,
+11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{
+135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10
+,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0,
+444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167}
+,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697}
+,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11
+,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9
+,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,
+91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0,
+313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,
+886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,
+623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,
+0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,
+606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135
+,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749
+},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,
+11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11
+,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,
+11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},
+{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,
+450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135
+,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7
+,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378
+},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},
+{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}
+,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,
+10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134,
+0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,
+913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132
+,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6
+,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,
+11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116
+},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10
+,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137
+,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366
+},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0,
+33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,
+0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134
+,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136
+,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},
+{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,
+549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{
+4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11,
+10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345}
+,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,
+520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11
+,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0,
+168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11,
+10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{
+13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,
+105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,
+1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7
+,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10
+,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14
+,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10
+,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{
+135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8,
+11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,
+41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,
+222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677
+},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,
+708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,
+10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15
+},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135
+,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,
+1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141
+,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5
+,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,
+0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11
+,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{
+139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},
+{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{
+139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{
+134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{
+11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{
+19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505
+},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,
+674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}
+,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{
+11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,
+0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,
+131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461
+},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14
+,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,
+929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,
+413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0,
+930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0
+,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,
+187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{
+14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0
+,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{
+132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,
+31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,
+0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},
+{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{
+7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272}
+,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303
+},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0,
+998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13},
+{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867
+},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10,
+282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6,
+0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{
+140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,
+0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530
+},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,
+0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,
+376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,
+106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34},
+{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,
+192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,
+6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,
+120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,
+1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{
+14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,
+300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,
+1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,
+448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,
+720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,
+0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10
+,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}
+,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,
+193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{
+5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{
+141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,
+1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0
+,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,
+609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},
+{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10,
+782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782
+},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,
+1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004
+},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{
+8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10,
+366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{
+132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},
+{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{
+11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}
+,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,
+189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0
+,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11,
+1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11,
+102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11,
+10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{
+14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{
+133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{
+11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9,
+10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475},
+{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645}
+,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{
+134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428
+},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399}
+,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,
+50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,
+97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136
+,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0
+,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10,
+411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10
+,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{
+12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101
+},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10,
+380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836}
+,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206
+},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{
+138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,
+1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{
+11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{
+6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,
+769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{
+133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,
+196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0,
+577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10,
+453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,
+1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},
+{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10
+,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,
+10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{
+14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,
+805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132
+,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{
+7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,
+11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{
+14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342}
+,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513
+},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,
+250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979
+},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,
+155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,
+10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0,
+20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10,
+0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10
+,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941}
+,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,
+1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},
+{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{
+135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37
+},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0,
+659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,
+583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971}
+,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{
+136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,
+405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,
+11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,
+495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,
+10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,
+0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{
+135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,
+1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11
+,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13
+,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0
+,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,
+1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,
+10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0
+,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,
+11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7
+,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,
+162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,
+933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,
+106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,
+883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756}
+,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974}
+,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11
+,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{
+15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19
+,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,
+10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,
+1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{
+5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{
+132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,
+11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0
+,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},
+{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0
+,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109
+},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11,
+493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185
+},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{
+11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7
+,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},
+{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{
+6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141
+,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,
+336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,
+226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},
+{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430
+},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{
+7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679},
+{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{
+151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,
+10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139
+,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135
+,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97
+},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{
+13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,
+0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198
+},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10
+,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},
+{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},
+{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{
+143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11
+,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,
+1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{
+134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,
+449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129},
+{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},
+{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,
+657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,
+1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,
+10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136
+,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{
+5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,
+11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11
+,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0
+,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,
+10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{
+13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141}
+,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{
+9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736}
+,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10,
+153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396}
+,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},
+{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{
+10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,
+913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,
+10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,
+400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,
+1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,
+329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0
+,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818}
+,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{
+12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,
+0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,
+328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,
+0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7
+,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124
+},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{
+11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,
+11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{
+133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{
+11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,
+131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},
+{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,
+813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872
+},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{
+15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561
+},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,
+491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{
+139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10,
+154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368}
+,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0,
+815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0
+,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{
+144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281}
+,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{
+12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495},
+{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{
+10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864}
+,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,
+0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6,
+0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0,
+1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{
+11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{
+135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{
+138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6
+,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,
+10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,
+0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0,
+806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7,
+11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146,
+11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746}
+,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10,
+1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11,
+10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10,
+1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133,
+11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10,
+392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134
+,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199}
+,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10,
+386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5}
+,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189}
+,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11,
+125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8,
+10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667},
+{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{
+14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9,
+0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562
+},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{
+14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10
+,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{
+136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493}
+,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11,
+90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0,
+961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186},
+{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10,
+595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0
+,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11,
+10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135
+,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465
+},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11,
+456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10,
+688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741
+},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514
+},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10,
+254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0,
+725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787
+},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834},
+{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352}
+,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0,
+144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146,
+10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0,
+97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{
+8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657},
+{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10,
+408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0
+,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11,
+598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11,
+215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11,
+769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{
+140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{
+140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9
+,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15},
+{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282}
+,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5,
+0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6
+,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{
+8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019}
+,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7
+,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9
+,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682},
+{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22
+,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0,
+383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11
+,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4,
+0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713
+},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11,
+553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{
+7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51
+},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10,
+762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{
+135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636}
+,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191
+},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0,
+336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0,
+568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90},
+{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19
+,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11,
+233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0,
+833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735},
+{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18,
+0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0
+,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139,
+11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{
+133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{
+6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11,
+802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80
+},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11,
+1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5
+,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11,
+11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{
+8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720},
+{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7,
+11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7,
+10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13,
+10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10
+,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432}
+,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11,
+1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{
+5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{
+11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11,
+30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11,
+1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20
+},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{
+11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170
+},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304}
+,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10
+,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{
+7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11,
+10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{
+133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7
+,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10,
+518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0,
+2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11,
+58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11,
+408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11,
+311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136,
+10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8,
+10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15
+,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10,
+13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10,
+569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0
+,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137
+,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12
+,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0,
+214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{
+5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4,
+10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{
+139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24},
+{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11,
+145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10
+,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11
+,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366},
+{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0,
+1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11,
+1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10,
+995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5
+,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{
+5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{
+16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514}
+,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560
+},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796
+},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11,
+0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689
+},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11
+,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196}
+,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10,
+270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15,
+10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0,
+299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10,
+0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0,
+419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11,
+497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{
+132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7,
+10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315}
+,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0,
+573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0
+,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0,
+936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140
+,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{
+6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0,
+505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10,
+11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981},
+{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{
+138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166
+},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135,
+11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7,
+11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292},
+{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0,
+1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6,
+10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{
+137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11,
+1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0,
+699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11,
+6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811
+},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139,
+10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9,
+0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0,
+155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363
+},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6,
+0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155}
+,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10,
+73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11,
+107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0,
+341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434
+},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10,
+725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460}
+,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10,
+659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{
+133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11,
+221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10
+,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{
+133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212
+},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0,
+273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0,
+543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0,
+250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10,
+495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146
+,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8,
+0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{
+5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727}
+,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{
+9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299}
+,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11,
+202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4
+,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{
+139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{
+136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11,
+569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11,
+711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6,
+11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11
+,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5
+,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13
+,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{
+7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4
+,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676}
+,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133,
+10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703}
+,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{
+9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138
+,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9
+,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219}
+,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780},
+{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10
+,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0,
+2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848}
+,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0,
+2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{
+135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841
+},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137
+,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464},
+{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11
+,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526},
+{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11,
+31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0,
+68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10
+,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{
+140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11,
+279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133,
+11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101
+},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10
+,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135
+,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157
+},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11,
+118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10,
+11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11
+,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{
+135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11,
+429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0,
+1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808
+},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10,
+498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005},
+{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11,
+916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0
+,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10,
+983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11,
+513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7,
+11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751
+},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0,
+582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{
+10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228
+},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140}
+,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11,
+344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0
+,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0,
+1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14,
+11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0,
+494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10,
+515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0
+,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0,
+315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{
+11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0,
+668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{
+12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524},
+{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13,
+0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221
+},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{
+135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{
+8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11,
+603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11
+,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0,
+31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514}
+,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0
+,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10,
+181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142,
+10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165},
+{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7,
+10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12
+,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{
+9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139},
+{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10,
+1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10,
+80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142
+,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{
+5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0,
+102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11,
+501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{
+135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0
+,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442
+},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{
+7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7,
+10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785},
+{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6
+,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{
+136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{
+5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5
+,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{
+134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0,
+251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11,
+695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134
+,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11
+,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11,
+839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10
+,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0,
+370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535
+},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10,
+117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134,
+0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140
+,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{
+12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10,
+1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11,
+1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213
+},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11
+,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6,
+11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{
+5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5,
+10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013
+},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60}
+,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{
+7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148
+},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11
+,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{
+134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418
+},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10,
+215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135
+,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0,
+1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{
+135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{
+11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9
+,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541
+},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0,
+86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45},
+{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79}
+,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{
+14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148,
+0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15,
+10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4,
+10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0,
+1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11,
+312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{
+11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10
+,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89
+},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290}
+,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945}
+,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6,
+11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{
+6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0,
+420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7,
+0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{
+13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0,
+1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0
+,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639}
+,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11,
+0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10
+,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10,
+410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886},
+{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11
+,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11
+,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7
+,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0,
+691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139},
+{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9
+,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{
+141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135,
+10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{
+10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143}
+,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135,
+10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0
+,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{
+135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{
+15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{
+10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198}
+,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664}
+,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135,
+0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{
+142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133,
+0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0,
+709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{
+132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{
+150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330
+},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11,
+328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{
+7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5
+,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135
+,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10},
+{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21},
+{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0,
+1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133,
+0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198},
+{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42
+},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10,
+492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10,
+404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13,
+10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420}
+,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{
+9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0
+,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228
+},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390
+},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0,
+190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{
+134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{
+135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0,
+764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0
+,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008},
+{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10,
+759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{
+7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0,
+355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250
+},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{
+132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11
+,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7,
+10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{
+10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7,
+0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255}
+,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11
+,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999}
+,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11,
+26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11,
+579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0,
+507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10,
+1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149,
+10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{
+7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{
+135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737
+},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11,
+890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{
+136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10
+,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{
+133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746},
+{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0,
+884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6,
+0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{
+145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0,
+1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11
+,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0,
+904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371
+},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572}
+,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11,
+397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10,
+342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11,
+0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9,
+10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,
+705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10
+,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{
+10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10,
+201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11
+,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761}
+,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10,
+868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11
+,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220}
+,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10,
+474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12
+,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{
+13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10,
+403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14
+,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14
+,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401}
+,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10,
+74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10,
+154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103
+},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90}
+,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22
+},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11,
+441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0,
+1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{
+138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133,
+11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{
+135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11
+,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11,
+340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109},
+{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36}
+,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298}
+,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{
+15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{
+10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{
+135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476
+},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824
+},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133,
+0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10
+,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783},
+{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206}
+,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389
+},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0,
+912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136,
+11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5
+,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{
+10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968
+},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56
+},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6
+,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{
+143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0,
+726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{
+133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{
+4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10
+,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600
+},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225}
+,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0,
+1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11,
+103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0
+,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92
+},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11,
+870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4,
+10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10,
+192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{
+7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0,
+253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624
+},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{
+12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149},
+{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{
+11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11
+,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204}
+,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134
+,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5
+,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5
+,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0,
+1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10,
+0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0,
+136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0,
+474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0,
+343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6
+,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11,
+468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0
+,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428},
+{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4,
+10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871}
+,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005}
+,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564
+},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570
+},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7,
+11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{
+135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138,
+11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11,
+967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10,
+138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0,
+446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{
+135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{
+149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{
+12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100}
+,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83}
+,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11,
+530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{
+10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10,
+11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847
+},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901
+},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33
+},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{
+135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12,
+0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0,
+660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10
+,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8,
+10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12,
+10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138,
+10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{
+4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{
+133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11,
+364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12
+,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{
+7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651},
+{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0,
+202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27},
+{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10
+,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139,
+11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5,
+0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12,
+0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0,
+242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0,
+830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0,
+327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4,
+0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7
+,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719
+},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139
+},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14,
+11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7,
+10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{
+134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11,
+596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0
+,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574},
+{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161}
+,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344
+},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155
+},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11,
+379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5,
+11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5
+,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7,
+11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483
+},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{
+136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410},
+{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10,
+411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{
+137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0,
+496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147,
+11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5,
+11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{
+145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0,
+380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0,
+345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168},
+{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10
+,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7,
+0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0
+,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11
+,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{
+132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0,
+1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11,
+544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0
+,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11
+,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0
+,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{
+18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0,
+395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0,
+210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227},
+{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579},
+{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108
+},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{
+138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0,
+497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132,
+11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{
+7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912},
+{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347
+},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10
+,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{
+132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0,
+1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680
+},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0,
+101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{
+7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10,
+11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10,
+1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11
+,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11
+,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{
+13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10,
+854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150
+,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0,
+1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481
+},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10,
+275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{
+6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155
+},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10,
+147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0,
+1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134
+,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10
+,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834}
+,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265
+},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465}
+,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137,
+11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9,
+11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7,
+11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132,
+11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11
+,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10,
+190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138}
+,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660}
+,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587}
+,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569}
+,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134
+,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,
+10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413},
+{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54
+},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8,
+0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296},
+{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{
+142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11,
+755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{
+132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819
+},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11,
+630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132
+,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655},
+{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11,
+634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11,
+445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0,
+1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{
+13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11
+,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11
+,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13,
+11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141
+,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11},
+{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11,
+655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259}
+,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10,
+649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11
+,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146
+,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0
+,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054}
+,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935}
+,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12
+,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0,
+188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193
+},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{
+18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137,
+0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0,
+321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55}
+,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{
+142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445
+},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184}
+,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11,
+546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{
+132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{
+140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11
+,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10,
+577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10,
+726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10
+,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{
+11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10,
+930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12
+,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131},
+{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10,
+461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14,
+10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{
+148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{
+7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{
+17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{
+133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{
+7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{
+9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11
+,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14
+,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{
+138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11,
+1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9,
+10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145},
+{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73
+},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10,
+120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10,
+21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11,
+614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7,
+0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5,
+0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399
+},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{
+11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72},
+{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,
+507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10,
+531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,
+11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{
+9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0,
+653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10
+,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{
+10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,
+0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,
+10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{
+11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164}
+,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,
+452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,
+161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{
+142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,
+420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0
+,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{
+138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0
+,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10
+,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,
+477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10
+,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116
+},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8
+,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9,
+0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11,
+734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{
+140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8
+,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,
+613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,
+32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799}
+,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11
+,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,
+11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,
+11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,
+11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{
+8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10
+,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,
+11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4,
+11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11,
+916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{
+146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{
+7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,
+214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471
+},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9
+,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11
+,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{
+10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929
+},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11
+,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,
+11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0
+,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215
+},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11,
+126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,
+10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,
+566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,
+796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530}
+,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4
+,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,
+292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12,
+10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,
+10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,
+616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142
+,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021
+},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,
+280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,
+11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598}
+,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249},
+{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},
+{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{
+146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7
+,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11
+,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{
+139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,
+11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{
+132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,
+627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,
+388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,
+490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,
+566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11
+,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0
+,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682}
+,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11
+,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,
+660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337
+},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013
+},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,
+740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582
+},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,
+11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11
+,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198}
+,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,
+19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,
+11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,
+10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{
+132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,
+2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},
+{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,
+0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,
+10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11,
+576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0
+,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0
+,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10,
+547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141
+,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{
+137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5
+,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394
+},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,
+11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{
+11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,
+0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7,
+11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18
+,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{
+140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436}
+,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,
+171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,
+0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,
+11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},
+{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{
+7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{
+142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917},
+{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{
+140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},
+{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905
+},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26}
+,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},
+{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138
+,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{
+134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{
+139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},
+{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,
+99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,
+209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,
+11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{
+134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0
+,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{
+10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{
+135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228}
+,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10,
+496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,
+0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,
+752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179
+},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,
+11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},
+{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,
+248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,
+958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,
+345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,
+744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,
+10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{
+151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936}
+,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916
+},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{
+12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9
+,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0
+,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648
+},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,
+335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14
+,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{
+7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553}
+,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,
+879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,
+723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11,
+719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11
+,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11,
+472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{
+139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{
+143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{
+11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480}
+,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,
+604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447}
+,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,
+60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10
+,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,
+1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{
+6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{
+14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221
+},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10
+,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,
+379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,
+1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{
+135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932}
+,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0
+,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10,
+1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,
+10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111}
+,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278
+},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,
+310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33}
+,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354}
+,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{
+9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58
+},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619
+},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,
+2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,
+1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891
+},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{
+148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10
+,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{
+134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{
+6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},
+{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,
+11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,
+11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0
+,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,
+0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{
+137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,
+197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},
+{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0
+,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,
+511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,
+219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{
+132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376}
+,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11
+,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,
+10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{
+138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0,
+777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{
+138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11,
+104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{
+142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{
+135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133
+,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9
+,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326
+},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{
+10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,
+757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11,
+0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0,
+1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815},
+{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{
+134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{
+138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0,
+926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{
+137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0,
+1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0,
+985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11,
+411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10
+,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465
+},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{
+137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10,
+242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10
+,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12
+,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487}
+,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10,
+286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11,
+481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{
+4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11,
+1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4
+,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116}
+,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11,
+516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10,
+517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0,
+829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0,
+1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10
+,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{
+134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519},
+{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0,
+895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0
+,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402},
+{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201},
+{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0,
+1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{
+135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81},
+{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0,
+1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0,
+212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5
+,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8}
+,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520},
+{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135,
+11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{
+135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792},
+{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11,
+1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0,
+1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0,
+9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0
+,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0,
+1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5,
+10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11,
+11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642}
+,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67}
+,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016
+},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11
+,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139,
+10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0,
+1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{
+143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904}
+,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10,
+618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688},
+{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7
+,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9
+,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{
+141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12
+,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136,
+10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13,
+11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5,
+0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757}
+,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11,
+817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11,
+235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{
+132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14,
+0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133,
+10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0,
+370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606}
+,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0,
+774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695},
+{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11
+,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0,
+189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174
+},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221
+},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151
+,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490},
+{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11,
+146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140,
+10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11
+,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0,
+325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7,
+10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{
+134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0
+,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0
+,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11,
+0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10
+,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150,
+0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5
+,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{
+11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11,
+263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0,
+285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327}
+,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7,
+11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{
+141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0
+,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{
+150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11
+,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{
+135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11,
+569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11,
+1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154
+},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38
+},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917},
+{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0
+,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7,
+11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704
+},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134
+,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7
+,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7,
+10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0,
+217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732}
+,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33},
+{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11,
+268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0
+,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11
+,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0,
+27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578}
+,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6,
+10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136,
+11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{
+4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7,
+0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252}
+,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{
+13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10
+,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{
+12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10,
+527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0
+,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10,
+178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10
+,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142,
+10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11,
+705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{
+16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121},
+{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{
+7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294}
+,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829}
+,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855},
+{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0
+,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929
+},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{
+12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0,
+197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7
+,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55}
+,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373},
+{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11,
+702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139
+,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{
+21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{
+133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8
+,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0,
+1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11
+,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{
+141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{
+14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6
+,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8,
+11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232},
+{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10,
+27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344}
+,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11
+,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{
+133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234},
+{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11
+,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531
+},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20}
+,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0,
+920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10,
+909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268
+},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11,
+1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7,
+10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13,
+10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7
+,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342}
+,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0,
+223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10,
+915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0
+,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142
+,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135,
+11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0
+,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10,
+675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13,
+11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0
+,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{
+4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{
+8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14}
+,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10,
+161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11
+,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300},
+{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{
+133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14
+},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111}
+,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11,
+1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10,
+273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11
+,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772
+},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132
+,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134,
+0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284},
+{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11,
+332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{
+139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706
+},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4,
+0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10,
+11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7,
+10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767}
+,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140,
+0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{
+10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844}
+,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263}
+,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823}
+,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139,
+10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11,
+21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{
+135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420},
+{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7,
+10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11,
+11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0,
+41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10,
+493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{
+5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921}
+,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622},
+{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89},
+{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6
+,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0,
+952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11,
+569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{
+141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7,
+10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844},
+{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151
+,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{
+10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0,
+459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{
+134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179}
+,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113},
+{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11
+,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0,
+1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12,
+10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{
+135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{
+133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0,
+260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0,
+1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10,
+350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{
+137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0
+,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8,
+11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13,
+11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114},
+{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831}
+,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7,
+10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10,
+0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0
+,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5,
+10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497}
+,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0,
+634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10
+,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11
+,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11,
+11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304},
+{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11,
+95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14,
+11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{
+136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10,
+1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738
+},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5
+,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10
+,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13,
+10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141,
+11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12,
+11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10
+,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11,
+10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{
+7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10,
+10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5
+,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0,
+340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137,
+11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11
+,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9,
+11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0,
+1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10,
+165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11
+,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0
+,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135
+,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0,
+675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225
+},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148
+,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0
+,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14,
+10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147}
+,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430}
+,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10,
+258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7,
+11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135
+,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135,
+11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11,
+1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5
+,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590
+},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132,
+11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9
+,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460}
+,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535}
+,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0
+,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{
+134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{
+140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718}
+,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15}
+,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240}
+,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66
+},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11,
+915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11,
+376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14,
+11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10,
+11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{
+147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{
+143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{
+7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481}
+,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4
+,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351}
+,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11,
+884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10
+,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0,
+356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{
+7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132,
+10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165}
+,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0,
+809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{
+142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11
+,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5
+,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11
+,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{
+13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10,
+116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4
+,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{
+132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773
+},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10
+,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{
+148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704}
+,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0,
+84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11
+,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135,
+0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24
+},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0,
+222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402}
+,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562},
+{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89}
+,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{
+139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10
+,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{
+138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645
+},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450
+},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{
+145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420}
+,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0,
+1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138
+,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10,
+166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10,
+317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0,
+455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11
+,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10,
+388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11
+,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5,
+11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7,
+10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395},
+{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{
+135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10,
+205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15,
+0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0,
+696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169
+},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715}
+,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0,
+496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0,
+1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11,
+493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7,
+0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0,
+545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0
+,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11
+,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,
+1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527
+},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0,
+13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{
+142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429}
+,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{
+139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320}
+,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905
+},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0,
+1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11,
+235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132,
+10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6,
+11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135
+,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0,
+147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9
+,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150,
+11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{
+136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{
+137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552}
+,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5
+,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11,
+10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{
+139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742},
+{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235
+},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159
+},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249
+},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80}
+,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59},
+{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0,
+1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11,
+331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14
+,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{
+142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9,
+11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123},
+{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{
+142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10
+,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19
+},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10,
+768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971}
+,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11
+,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266
+},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194},
+{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603},
+{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10,
+643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11,
+1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12
+,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542}
+,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10,
+355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{
+132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0
+,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0,
+263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11,
+302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},
+{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0
+,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0,
+647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10,
+356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10,
+29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6,
+11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367},
+{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11
+,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{
+6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184},
+{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0,
+199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266},
+{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519}
+,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0,
+606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134,
+11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135,
+11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58},
+{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0,
+481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{
+142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978}
+,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0,
+253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11,
+63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{
+148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0
+,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325
+},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133,
+10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134
+,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0,
+365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11,
+302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{
+142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{
+13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141,
+0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{
+135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{
+17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843
+},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472}
+,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11
+,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0,
+657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18,
+0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6
+,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{
+132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0
+,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11
+,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11
+,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830}
+,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0,
+637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42
+},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014},
+{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{
+11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{
+11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553}
+,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179},
+{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86},
+{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156},
+{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013
+},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0,
+503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925
+},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0
+,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0,
+868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933
+},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{
+15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18,
+0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0,
+42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133,
+0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7
+,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6,
+11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{
+137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973
+},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62
+},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114}
+,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},
+{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6,
+0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7,
+11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6,
+0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136,
+11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9,
+11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12
+,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50}
+,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7},
+{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99
+},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707
+},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11,
+197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11,
+74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131
+},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2},
+{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11
+,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12,
+11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140,
+11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6
+,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11,
+653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798}
+,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11,
+208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0,
+439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722}
+,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{
+133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133,
+11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10,
+253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615}
+,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624
+},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10,
+382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10,
+11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639
+},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10,
+816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11,
+265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6
+,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6
+,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8
+,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{
+11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0,
+226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232},
+{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44},
+{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698}
+,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10
+,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10,
+1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11,
+11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144},
+{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11,
+81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250}
+,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10,
+250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252}
+,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{
+6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0
+,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138,
+11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7,
+11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19,
+11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5
+,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{
+132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577
+},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10
+,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129}
+,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136,
+0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11,
+10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0
+,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0
+,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143
+,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{
+7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011}
+,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0
+,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19
+,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11,
+155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137,
+11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10,
+868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{
+138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10,
+1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10,
+660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12,
+11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11
+,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8,
+11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0,
+1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11,
+57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11,
+1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8,
+11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246
+},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6,
+11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7,
+0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692},
+{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{
+18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9,
+11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15
+,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8
+,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313}
+,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{
+9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837}
+,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46
+},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0
+,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7,
+11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7,
+11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11
+,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11,
+311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12,
+11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{
+15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304
+},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{
+10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166}
+,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5,
+11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0,
+32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{
+134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{
+5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0,
+116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0,
+89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7,
+0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{
+13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11
+,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135
+,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{
+133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11,
+947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0
+,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{
+139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0
+,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136,
+10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11,
+494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10,
+611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139
+,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703}
+,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9
+,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132,
+11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12,
+11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{
+149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133,
+11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529
+},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437},
+{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758
+},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10,
+579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0,
+335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5,
+11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0,
+205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0,
+370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10,
+501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0,
+286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10,
+71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493}
+,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11,
+10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980}
+,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11,
+384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18,
+0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11,
+676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{
+146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{
+134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10,
+310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14,
+11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136,
+11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11,
+5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9,
+10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12,
+0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8,
+0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350}
+,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{
+11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10,
+597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139
+,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12,
+11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{
+135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9,
+0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,
+929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247
+},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137
+,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11,
+606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10
+,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275}
+,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0
+,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10
+,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0,
+128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0
+,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0
+,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11
+,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0,
+892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11,
+889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10
+,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0
+,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11
+,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0,
+60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10,
+155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0
+,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5,
+10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409
+},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11,
+202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135,
+0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348},
+{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11
+,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0,
+315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0,
+1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201},
+{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11,
+769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7
+,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576},
+{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10,
+945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141,
+11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0,
+237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0
+,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132,
+11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{
+140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530},
+{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11,
+11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137
+,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0,
+784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509
+},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0,
+186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0,
+208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0,
+218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184},
+{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8,
+11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{
+7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7,
+10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428}
+,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0,
+1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{
+137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360
+},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0,
+509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739}
+,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{
+143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{
+7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0,
+1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5,
+10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{
+13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10
+,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157}
+,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11,
+133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{
+4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{
+145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11,
+758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7,
+11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065
+},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0
+,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0,
+528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150,
+0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{
+138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11,
+502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11
+,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14
+,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358}
+,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376
+},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{
+133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135,
+11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556
+},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{
+143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212}
+,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0,
+84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11,
+811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0,
+1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256}
+,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0
+,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0
+,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12
+,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5,
+10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{
+14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7
+,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990}
+,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{
+133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87},
+{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389}
+,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714
+},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0,
+215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95},
+{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7,
+10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102}
+,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10,
+120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7
+,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0,
+937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{
+137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074}
+,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135,
+11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{
+132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{
+8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11,
+1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11,
+520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11
+,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11,
+339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},
+{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{
+141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{
+138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0,
+225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11,
+72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7,
+10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0,
+1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11,
+10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0
+,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11,
+1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864},
+{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137}
+,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317},
+{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836},
+{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692}
+,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55
+},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11,
+617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138,
+11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0,
+385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133,
+10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0,
+365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11,
+639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115
+},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0,
+1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0,
+1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{
+6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0,
+921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0
+,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0,
+820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922
+},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{
+15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0
+,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888
+},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11,
+185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7,
+11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9,
+10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11,
+401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9
+,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,
+912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958}
+,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{
+141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}
+,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0,
+22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163
+},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{
+142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,
+1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,
+879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},
+{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},
+{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10,
+808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135
+,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{
+136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,
+2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134
+,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11
+,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0
+,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{
+150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{
+135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,
+11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10,
+1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373
+},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{
+10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196},
+{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,
+10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}
+,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,
+240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0
+,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11
+,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10
+,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14
+,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,
+685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209
+},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,
+725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50
+},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,
+0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},
+{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},
+{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,
+315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,
+117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11
+,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,
+674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335}
+,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0
+,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{
+9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}
+,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192
+},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},
+{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,
+1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11,
+10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11
+,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,
+10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,
+1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10
+,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},
+{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{
+18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150
+,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,
+0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},
+{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,
+11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10
+,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10
+,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213},
+{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811
+},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,
+895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435
+},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0
+,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{
+133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}
+,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}
+,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,
+109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134
+,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270}
+,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14
+,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10,
+766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{
+12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}
+,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948
+},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135,
+11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11
+,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,
+1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,
+212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10
+,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{
+135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,
+10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,
+11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,
+10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13
+,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7
+,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,
+149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10
+,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{
+136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,
+322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,
+10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{
+8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0
+,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,
+11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59
+},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{
+135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},
+{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,
+0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{
+7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0
+,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{
+139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0
+,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,
+317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{
+146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832
+},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,
+398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73
+},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,
+51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297},
+{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},
+{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893
+},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,
+1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,
+551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794
+},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11
+,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{
+10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,
+352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11
+,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}
+,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,
+902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11
+,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}
+,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,
+591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,
+11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{
+13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,
+478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,
+148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14
+,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}
+,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{
+15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17
+,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,
+11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149
+,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}
+,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{
+136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9
+,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{
+12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22
+},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311
+},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{
+12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0
+,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12,
+0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6
+,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9
+,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0
+,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607
+},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10,
+1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,
+1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,
+11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0
+,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142
+,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,
+168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,
+11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{
+141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505}
+,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{
+9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,
+616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{
+137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{
+136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,
+637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0
+,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137
+,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512
+},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,
+433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7,
+10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811},
+{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10,
+30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},
+{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{
+134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,
+379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{
+149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,
+801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10
+,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138
+,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,
+1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81}
+,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,
+946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,
+491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135
+,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{
+7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{
+10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466
+},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0
+,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,
+258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{
+147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,
+0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11
+,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,
+122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11
+,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{
+12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,
+478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,
+11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{
+15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{
+135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710
+},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653
+},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0
+,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},
+{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,
+0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,
+11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491
+},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138
+,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473}
+,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0
+,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},
+{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765},
+{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385}
+,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},
+{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,
+674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,
+1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,
+435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,
+10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,
+0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{
+10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},
+{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},
+{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10
+,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{
+134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},
+{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,
+319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},
+{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,
+202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,
+11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,
+11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137
+,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{
+136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},
+{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287},
+{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4
+,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,
+11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},
+{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{
+134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,
+909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,
+10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7
+,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{
+10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116}
+,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133
+,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{
+139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}
+,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,
+136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10,
+999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{
+135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,
+423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{
+140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,
+1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10
+,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,
+11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,
+11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,
+805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,
+2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149
+,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247
+},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10
+,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}
+,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,
+710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}
+,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,
+546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,
+11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},
+{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,
+10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,
+478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,
+11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},
+{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},
+{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,
+0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}
+,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501
+},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{
+8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,
+277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,
+1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,
+11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},
+{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9
+,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{
+11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,
+822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581
+},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{
+10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0,
+288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0,
+1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,
+414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135,
+11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{
+4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{
+6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146,
+10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0
+,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},
+{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{
+5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,
+235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,
+10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{
+9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{
+11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,
+848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12
+,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}
+,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,
+390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{
+133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11,
+1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,
+1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533},
+{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132,
+11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{
+20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8,
+10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,
+269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},
+{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},
+{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341
+},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0,
+19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055}
+,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11,
+29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140,
+10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{
+21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3},
+{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10,
+462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11,
+11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{
+5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13,
+11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11
+,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10,
+195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10
+,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221
+},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10
+,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{
+7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143},
+{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6
+,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{
+133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{
+145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10,
+959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11
+,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9,
+0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0,
+898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189
+},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156}
+,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13},
+{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548},
+{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0,
+707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733}
+,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11
+,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{
+5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9,
+11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12
+,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147,
+0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136,
+10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10
+,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11,
+158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14,
+11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10
+,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7
+,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11,
+0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0,
+137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7,
+0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42},
+{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0,
+238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{
+148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7,
+10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10
+,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15
+,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0
+,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11,
+11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23,
+0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7,
+10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10,
+10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6,
+0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9
+,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11,
+896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141
+,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{
+146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0
+,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{
+4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{
+138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673},
+{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0,
+353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10,
+1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,
+471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246}
+,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9
+,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759}
+,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10,
+987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12
+,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{
+14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{
+132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{
+135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164},
+{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11,
+134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{
+8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135,
+0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11,
+50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11,
+592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335
+},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11,
+60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11
+,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11
+,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143,
+11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0,
+746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11,
+24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11,
+768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10
+,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0
+,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249},
+{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432},
+{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11,
+744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10,
+20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10,
+920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{
+137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11,
+927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7
+,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11,
+502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0,
+429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0,
+621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{
+133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,
+613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}
+,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}
+,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682
+},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},
+{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8
+,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},
+{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,
+109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10,
+1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11
+,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,
+63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802
+},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11
+,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,
+347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11
+,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,
+556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,
+11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},
+{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,
+325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12
+,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},
+{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60
+},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,
+81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9
+,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{
+140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582
+},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,
+11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}
+,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,
+53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0
+,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{
+134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5
+,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,
+967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,
+1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,
+914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{
+139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,
+482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{
+135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,
+1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11,
+1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7
+,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731
+},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},
+{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,
+255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,
+153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{
+6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,
+1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10
+,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,
+177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,
+165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,
+449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5
+,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696}
+,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7
+,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4
+,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}
+,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,
+805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{
+14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{
+13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},
+{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,
+1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11
+,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,
+330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12,
+0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{
+6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020
+},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0,
+721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{
+9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392
+},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117
+},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6
+,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},
+{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,
+1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{
+133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{
+134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,
+0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{
+12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,
+1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,
+483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,
+977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{
+132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135},
+{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796
+},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{
+7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672},
+{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{
+5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,
+11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11
+,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10,
+110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,
+1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,
+11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,
+607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,
+33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,
+10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},
+{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}
+,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,
+1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{
+139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}
+,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,
+158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,
+11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11
+,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724
+},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,
+10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697
+},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},
+{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,
+0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,
+10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11
+,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,
+80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607}
+,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,
+965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4
+,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{
+140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{
+17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11
+,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,
+0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{
+7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0,
+416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735},
+{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11,
+469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,
+296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0
+,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0
+,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,
+1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11
+,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,
+11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{
+15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,
+11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,
+11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14,
+0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936}
+,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14
+,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,
+11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,
+0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{
+10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,
+0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390
+},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{
+13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,
+395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,
+1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,
+856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},
+{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,
+377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151
+},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36}
+,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},
+{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150
+,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501}
+,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180}
+,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,
+10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,
+0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{
+10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,
+560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},
+{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7,
+10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587}
+,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133
+,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},
+{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285},
+{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},
+{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,
+703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,
+53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{
+132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{
+138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},
+{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301}
+,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{
+140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,
+209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{
+13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0
+,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137
+,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0
+,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11
+,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,
+11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0,
+202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,
+0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,
+1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,
+0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0
+,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,
+11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{
+4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95}
+,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541
+},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,
+109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{
+132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584
+},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136
+},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,
+11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},
+{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,
+45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673
+},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0
+,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8
+,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},
+{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28}
+,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11
+,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5
+,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{
+134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,
+385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0,
+347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,
+65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,
+469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,
+342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0
+,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10,
+11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310
+},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546}
+,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,
+1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6,
+0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12,
+11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0
+,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11
+,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,
+10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{
+10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,
+529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,
+100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0
+,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,
+10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768
+},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},
+{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{
+11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454}
+,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,
+312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,
+11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15
+,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{
+145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},
+{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,
+2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137
+,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,
+11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975}
+,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,
+367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,
+520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{
+11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,
+0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222
+},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,
+396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,
+10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10
+,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,
+26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,
+253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,
+251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,
+11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{
+5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{
+133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10,
+322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,
+10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11
+,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},
+{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,
+146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938}
+,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{
+152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{
+134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},
+{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{
+9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466
+},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,
+1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9
+,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0
+,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0,
+179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4,
+0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{
+7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,
+820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,
+523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11
+,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{
+10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,
+422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695
+},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,
+1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6
+,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{
+8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135
+,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10
+,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424}
+,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10
+,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74
+},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,
+684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,
+422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,
+387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,
+0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,
+0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134
+,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},
+{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940
+},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614},
+{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0,
+1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,
+81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0
+,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{
+136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{
+138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{
+6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324}
+,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{
+135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362
+},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},
+{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115}
+,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11
+,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488}
+,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241
+},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{
+135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{
+141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,
+244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,
+952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11
+,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5,
+10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},
+{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253}
+,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684
+},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,
+11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,
+10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0
+,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0,
+785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{
+134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},
+{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146
+,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{
+12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5,
+11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0,
+1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10,
+10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552
+},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,
+373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,
+60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,
+702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,
+488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10
+,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,
+150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110}
+,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,
+11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{
+10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,
+633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{
+134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228
+},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,
+60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{
+148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},
+{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7,
+10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{
+12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33}
+,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,
+723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,
+548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,
+246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4
+,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10,
+640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136
+,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,
+811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,
+0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},
+{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11
+,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{
+13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056}
+,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,
+10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,
+0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0,
+264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136}
+,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,
+435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,
+1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0
+,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5
+,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{
+5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,
+446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,
+10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,
+1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,
+719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0,
+568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},
+{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10,
+504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10,
+975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172
+},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0
+,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134
+,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,
+306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{
+135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{
+138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813}
+,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,
+120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11
+,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10
+,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4,
+10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201
+},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,
+62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10
+,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40
+},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,
+16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0
+,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,
+994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11
+,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7
+,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{
+10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{
+9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772
+},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508}
+,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,
+607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139
+,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,
+0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7,
+0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10
+,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{
+4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,
+290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,
+0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,
+918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84
+},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10,
+458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,
+0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,
+1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},
+{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,
+1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,
+24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},
+{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10
+,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652}
+,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,
+365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{
+12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486
+},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,
+1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98}
+,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,
+176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10
+,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,
+199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13,
+0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177
+},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712
+},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,
+776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6
+,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855}
+,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{
+9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0
+,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11
+,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10
+,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,
+10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,
+11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540}
+,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},
+{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,
+817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,
+538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{
+11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{
+10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10
+,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0
+,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12
+},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{
+132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4
+,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933}
+,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077
+},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11
+,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14,
+0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989}
+,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,
+394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},
+{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35
+},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375}
+,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003
+},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,
+328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0
+,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0
+,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},
+{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223}
+,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,
+814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534
+},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,
+34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},
+{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635}
+,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12,
+0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11,
+308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{
+134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,
+472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,
+659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{
+133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9
+,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,
+11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{
+11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},
+{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8
+,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7
+,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962
+},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,
+942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,
+10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{
+14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10
+,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{
+134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707
+},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,
+1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{
+135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,
+469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,
+13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,
+696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132
+,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,
+698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236}
+,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,
+370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},
+{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{
+7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,
+458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135
+,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
+11,410},{9,11,660},{138,11,347}
+};
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/utf8_util.c b/dviware/dvisvgm/libs/brotli/enc/utf8_util.c
new file mode 100644
index 0000000000..04a7805161
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/utf8_util.c
@@ -0,0 +1,85 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Heuristics for deciding about the UTF8-ness of strings. */
+
+#include "./utf8_util.h"
+
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static size_t BrotliParseAsUTF8(
+ int* symbol, const uint8_t* input, size_t size) {
+ /* ASCII */
+ if ((input[0] & 0x80) == 0) {
+ *symbol = input[0];
+ if (*symbol > 0) {
+ return 1;
+ }
+ }
+ /* 2-byte UTF8 */
+ if (size > 1u &&
+ (input[0] & 0xE0) == 0xC0 &&
+ (input[1] & 0xC0) == 0x80) {
+ *symbol = (((input[0] & 0x1F) << 6) |
+ (input[1] & 0x3F));
+ if (*symbol > 0x7F) {
+ return 2;
+ }
+ }
+ /* 3-byte UFT8 */
+ if (size > 2u &&
+ (input[0] & 0xF0) == 0xE0 &&
+ (input[1] & 0xC0) == 0x80 &&
+ (input[2] & 0xC0) == 0x80) {
+ *symbol = (((input[0] & 0x0F) << 12) |
+ ((input[1] & 0x3F) << 6) |
+ (input[2] & 0x3F));
+ if (*symbol > 0x7FF) {
+ return 3;
+ }
+ }
+ /* 4-byte UFT8 */
+ if (size > 3u &&
+ (input[0] & 0xF8) == 0xF0 &&
+ (input[1] & 0xC0) == 0x80 &&
+ (input[2] & 0xC0) == 0x80 &&
+ (input[3] & 0xC0) == 0x80) {
+ *symbol = (((input[0] & 0x07) << 18) |
+ ((input[1] & 0x3F) << 12) |
+ ((input[2] & 0x3F) << 6) |
+ (input[3] & 0x3F));
+ if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {
+ return 4;
+ }
+ }
+ /* Not UTF8, emit a special symbol above the UTF8-code space */
+ *symbol = 0x110000 | input[0];
+ return 1;
+}
+
+/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/
+BROTLI_BOOL BrotliIsMostlyUTF8(
+ const uint8_t* data, const size_t pos, const size_t mask,
+ const size_t length, const double min_fraction) {
+ size_t size_utf8 = 0;
+ size_t i = 0;
+ while (i < length) {
+ int symbol;
+ size_t bytes_read =
+ BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);
+ i += bytes_read;
+ if (symbol < 0x110000) size_utf8 += bytes_read;
+ }
+ return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length);
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
diff --git a/dviware/dvisvgm/libs/brotli/enc/utf8_util.h b/dviware/dvisvgm/libs/brotli/enc/utf8_util.h
new file mode 100644
index 0000000000..8fda80c220
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/utf8_util.h
@@ -0,0 +1,32 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Heuristics for deciding about the UTF8-ness of strings. */
+
+#ifndef BROTLI_ENC_UTF8_UTIL_H_
+#define BROTLI_ENC_UTF8_UTIL_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+static const double kMinUTF8Ratio = 0.75;
+
+/* Returns 1 if at least min_fraction of the bytes between pos and
+ pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise
+ returns 0. */
+BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(
+ const uint8_t* data, const size_t pos, const size_t mask,
+ const size_t length, const double min_fraction);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/enc/write_bits.h b/dviware/dvisvgm/libs/brotli/enc/write_bits.h
new file mode 100644
index 0000000000..36515a6893
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/enc/write_bits.h
@@ -0,0 +1,85 @@
+/* Copyright 2010 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Write bits into a byte array. */
+
+#ifndef BROTLI_ENC_WRITE_BITS_H_
+#define BROTLI_ENC_WRITE_BITS_H_
+
+#include "../common/platform.h"
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/*#define BIT_WRITER_DEBUG */
+
+/* This function writes bits into bytes in increasing addresses, and within
+ a byte least-significant-bit first.
+
+ The function can write up to 56 bits in one go with WriteBits
+ Example: let's assume that 3 bits (Rs below) have been written already:
+
+ BYTE-0 BYTE+1 BYTE+2
+
+ 0000 0RRR 0000 0000 0000 0000
+
+ Now, we could write 5 or less bits in MSB by just sifting by 3
+ and OR'ing to BYTE-0.
+
+ For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,
+ and locate the rest in BYTE+1, BYTE+2, etc. */
+static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
+ uint64_t bits,
+ size_t* BROTLI_RESTRICT pos,
+ uint8_t* BROTLI_RESTRICT array) {
+#if defined(BROTLI_LITTLE_ENDIAN)
+ /* This branch of the code can write up to 56 bits at a time,
+ 7 bits are lost by being perhaps already in *p and at least
+ 1 bit is needed to initialize the bit-stream ahead (i.e. if 7
+ bits are in *p and we write 57 bits, then the next write will
+ access a byte that was never initialized). */
+ uint8_t* p = &array[*pos >> 3];
+ uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */
+ BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits,
+ (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
+ (int)*pos));
+ BROTLI_DCHECK((bits >> n_bits) == 0);
+ BROTLI_DCHECK(n_bits <= 56);
+ v |= bits << (*pos & 7);
+ BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */
+ *pos += n_bits;
+#else
+ /* implicit & 0xFF is assumed for uint8_t arithmetics */
+ uint8_t* array_pos = &array[*pos >> 3];
+ const size_t bits_reserved_in_first_byte = (*pos & 7);
+ size_t bits_left_to_write;
+ bits <<= bits_reserved_in_first_byte;
+ *array_pos++ |= (uint8_t)bits;
+ for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
+ bits_left_to_write >= 9;
+ bits_left_to_write -= 8) {
+ bits >>= 8;
+ *array_pos++ = (uint8_t)bits;
+ }
+ *array_pos = 0;
+ *pos += n_bits;
+#endif
+}
+
+static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
+ size_t pos, uint8_t* array) {
+ BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos));
+ BROTLI_DCHECK((pos & 7) == 0);
+ array[pos >> 3] = 0;
+}
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_WRITE_BITS_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/include/brotli/decode.h b/dviware/dvisvgm/libs/brotli/include/brotli/decode.h
new file mode 100644
index 0000000000..0f5c8f9d11
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/include/brotli/decode.h
@@ -0,0 +1,344 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/**
+ * @file
+ * API for Brotli decompression.
+ */
+
+#ifndef BROTLI_DEC_DECODE_H_
+#define BROTLI_DEC_DECODE_H_
+
+#include <brotli/port.h>
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/**
+ * Opaque structure that holds decoder state.
+ *
+ * Allocated and initialized with ::BrotliDecoderCreateInstance.
+ * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
+ */
+typedef struct BrotliDecoderStateStruct BrotliDecoderState;
+
+/**
+ * Result type for ::BrotliDecoderDecompress and
+ * ::BrotliDecoderDecompressStream functions.
+ */
+typedef enum {
+ /** Decoding error, e.g. corrupted input or memory allocation problem. */
+ BROTLI_DECODER_RESULT_ERROR = 0,
+ /** Decoding successfully completed. */
+ BROTLI_DECODER_RESULT_SUCCESS = 1,
+ /** Partially done; should be called again with more input. */
+ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
+ /** Partially done; should be called again with more output. */
+ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
+} BrotliDecoderResult;
+
+/**
+ * Template that evaluates items of ::BrotliDecoderErrorCode.
+ *
+ * Example: @code {.cpp}
+ * // Log Brotli error code.
+ * switch (brotliDecoderErrorCode) {
+ * #define CASE_(PREFIX, NAME, CODE) \
+ * case BROTLI_DECODER ## PREFIX ## NAME: \
+ * LOG(INFO) << "error code:" << #NAME; \
+ * break;
+ * #define NEWLINE_
+ * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
+ * #undef CASE_
+ * #undef NEWLINE_
+ * default: LOG(FATAL) << "unknown brotli error code";
+ * }
+ * @endcode
+ */
+#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \
+ BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
+ /* Same as BrotliDecoderResult values */ \
+ BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
+ BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
+ BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \
+ \
+ /* Errors caused by invalid input */ \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
+ \
+ /* -17..-18 codes are reserved */ \
+ \
+ BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
+ \
+ /* Memory allocation problems */ \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \
+ /* Literal, insert and distance trees together */ \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \
+ /* -23..-24 codes are reserved for distinct tree groups */ \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \
+ /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
+ BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \
+ \
+ /* "Impossible" states */ \
+ BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
+
+/**
+ * Error code for detailed logging / production debugging.
+ *
+ * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
+ */
+typedef enum {
+#define BROTLI_COMMA_ ,
+#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
+ BROTLI_DECODER ## PREFIX ## NAME = CODE
+ BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)
+} BrotliDecoderErrorCode;
+#undef BROTLI_ERROR_CODE_ENUM_ITEM_
+#undef BROTLI_COMMA_
+
+/**
+ * The value of the last error code, negative integer.
+ *
+ * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE
+ * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
+ * ::BrotliDecoderErrorCode enumeration.
+ */
+#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE
+
+/** Options to be used with ::BrotliDecoderSetParameter. */
+typedef enum BrotliDecoderParameter {
+ /**
+ * Disable "canny" ring buffer allocation strategy.
+ *
+ * Ring buffer is allocated according to window size, despite the real size of
+ * the content.
+ */
+ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
+ /**
+ * Flag that determines if "Large Window Brotli" is used.
+ */
+ BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
+} BrotliDecoderParameter;
+
+/**
+ * Sets the specified parameter to the given decoder instance.
+ *
+ * @param state decoder instance
+ * @param param parameter to set
+ * @param value new parameter value
+ * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
+ * @returns ::BROTLI_TRUE if value is accepted
+ */
+BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
+ BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
+
+/**
+ * Creates an instance of ::BrotliDecoderState and initializes it.
+ *
+ * The instance can be used once for decoding and should then be destroyed with
+ * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
+ * session.
+ *
+ * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
+ * case they are both zero, default memory allocators are used. @p opaque is
+ * passed to @p alloc_func and @p free_func when they are called. @p free_func
+ * has to return without doing anything when asked to free a NULL pointer.
+ *
+ * @param alloc_func custom memory allocation function
+ * @param free_func custom memory free function
+ * @param opaque custom memory manager handle
+ * @returns @c 0 if instance can not be allocated or initialized
+ * @returns pointer to initialized ::BrotliDecoderState otherwise
+ */
+BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
+ brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
+
+/**
+ * Deinitializes and frees ::BrotliDecoderState instance.
+ *
+ * @param state decoder instance to be cleaned up and deallocated
+ */
+BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);
+
+/**
+ * Performs one-shot memory-to-memory decompression.
+ *
+ * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets
+ * @p *decoded_size to the decompressed length.
+ *
+ * @param encoded_size size of @p encoded_buffer
+ * @param encoded_buffer compressed data buffer with at least @p encoded_size
+ * addressable bytes
+ * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
+ * @b out: length of decompressed data written to
+ * @p decoded_buffer
+ * @param decoded_buffer decompressed data destination buffer
+ * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
+ * allocation failed, or @p decoded_buffer is not large enough;
+ * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
+ */
+BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
+ size_t encoded_size,
+ const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
+ size_t* decoded_size,
+ uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
+
+/**
+ * Decompresses the input stream to the output stream.
+ *
+ * The values @p *available_in and @p *available_out must specify the number of
+ * bytes addressable at @p *next_in and @p *next_out respectively.
+ * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
+ *
+ * After each call, @p *available_in will be decremented by the amount of input
+ * bytes consumed, and the @p *next_in pointer will be incremented by that
+ * amount. Similarly, @p *available_out will be decremented by the amount of
+ * output bytes written, and the @p *next_out pointer will be incremented by
+ * that amount.
+ *
+ * @p total_out, if it is not a null-pointer, will be set to the number
+ * of bytes decompressed since the last @p state initialization.
+ *
+ * @note Input is never overconsumed, so @p next_in and @p available_in could be
+ * passed to the next consumer after decoding is complete.
+ *
+ * @param state decoder instance
+ * @param[in, out] available_in @b in: amount of available input; \n
+ * @b out: amount of unused input
+ * @param[in, out] next_in pointer to the next compressed byte
+ * @param[in, out] available_out @b in: length of output buffer; \n
+ * @b out: remaining size of output buffer
+ * @param[in, out] next_out output buffer cursor;
+ * can be @c NULL if @p available_out is @c 0
+ * @param[out] total_out number of bytes decompressed so far; can be @c NULL
+ * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
+ * allocation failed, arguments were invalid, etc.;
+ * use ::BrotliDecoderGetErrorCode to get detailed error code
+ * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until
+ * more input data is provided
+ * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until
+ * more output space is provided
+ * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more
+ * input might be consumed and no more output will be produced
+ */
+BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
+ BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
+ size_t* available_out, uint8_t** next_out, size_t* total_out);
+
+/**
+ * Checks if decoder has more output.
+ *
+ * @param state decoder instance
+ * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
+ * @returns ::BROTLI_FALSE otherwise
+ */
+BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
+ const BrotliDecoderState* state);
+
+/**
+ * Acquires pointer to internal output buffer.
+ *
+ * This method is used to make language bindings easier and more efficient:
+ * -# push data to ::BrotliDecoderDecompressStream,
+ * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
+ * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific
+ * entity
+ *
+ * Also this could be useful if there is an output stream that is able to
+ * consume all the provided data (e.g. when data is saved to file system).
+ *
+ * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of
+ * output are considered consumed for all consecutive calls to the
+ * instance methods; returned pointer becomes invalidated as well.
+ *
+ * @note Decoder output is not guaranteed to be contiguous. This means that
+ * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
+ * immediate next call to ::BrotliDecoderTakeOutput may return more data.
+ *
+ * @param state decoder instance
+ * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
+ * any amount could be handled; \n
+ * @b out: amount of data pointed by returned pointer and
+ * considered consumed; \n
+ * out value is never greater than in value, unless it is @c 0
+ * @returns pointer to output data
+ */
+BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
+ BrotliDecoderState* state, size_t* size);
+
+/**
+ * Checks if instance has already consumed input.
+ *
+ * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
+ * reused.
+ *
+ * @param state decoder instance
+ * @returns ::BROTLI_TRUE if decoder has already used some input bytes
+ * @returns ::BROTLI_FALSE otherwise
+ */
+BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);
+
+/**
+ * Checks if decoder instance reached the final state.
+ *
+ * @param state decoder instance
+ * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of
+ * the input and produced all of the output
+ * @returns ::BROTLI_FALSE otherwise
+ */
+BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
+ const BrotliDecoderState* state);
+
+/**
+ * Acquires a detailed error code.
+ *
+ * Should be used only after ::BrotliDecoderDecompressStream returns
+ * ::BROTLI_DECODER_RESULT_ERROR.
+ *
+ * See also ::BrotliDecoderErrorString
+ *
+ * @param state decoder instance
+ * @returns last saved error code
+ */
+BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
+ const BrotliDecoderState* state);
+
+/**
+ * Converts error code to a c-string.
+ */
+BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
+
+/**
+ * Gets a decoder library version.
+ *
+ * Look at BROTLI_VERSION for more information.
+ */
+BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/include/brotli/encode.h b/dviware/dvisvgm/libs/brotli/include/brotli/encode.h
new file mode 100644
index 0000000000..0ced7e55be
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/include/brotli/encode.h
@@ -0,0 +1,427 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/**
+ * @file
+ * API for Brotli compression.
+ */
+
+#ifndef BROTLI_ENC_ENCODE_H_
+#define BROTLI_ENC_ENCODE_H_
+
+#include <brotli/port.h>
+#include <brotli/types.h>
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+
+/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */
+#define BROTLI_MIN_WINDOW_BITS 10
+/**
+ * Maximal value for ::BROTLI_PARAM_LGWIN parameter.
+ *
+ * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.
+ */
+#define BROTLI_MAX_WINDOW_BITS 24
+/**
+ * Maximal value for ::BROTLI_PARAM_LGWIN parameter
+ * in "Large Window Brotli" (32-bit).
+ */
+#define BROTLI_LARGE_MAX_WINDOW_BITS 30
+/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */
+#define BROTLI_MIN_INPUT_BLOCK_BITS 16
+/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */
+#define BROTLI_MAX_INPUT_BLOCK_BITS 24
+/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */
+#define BROTLI_MIN_QUALITY 0
+/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */
+#define BROTLI_MAX_QUALITY 11
+
+/** Options for ::BROTLI_PARAM_MODE parameter. */
+typedef enum BrotliEncoderMode {
+ /**
+ * Default compression mode.
+ *
+ * In this mode compressor does not know anything in advance about the
+ * properties of the input.
+ */
+ BROTLI_MODE_GENERIC = 0,
+ /** Compression mode for UTF-8 formatted text input. */
+ BROTLI_MODE_TEXT = 1,
+ /** Compression mode used in WOFF 2.0. */
+ BROTLI_MODE_FONT = 2
+} BrotliEncoderMode;
+
+/** Default value for ::BROTLI_PARAM_QUALITY parameter. */
+#define BROTLI_DEFAULT_QUALITY 11
+/** Default value for ::BROTLI_PARAM_LGWIN parameter. */
+#define BROTLI_DEFAULT_WINDOW 22
+/** Default value for ::BROTLI_PARAM_MODE parameter. */
+#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC
+
+/** Operations that can be performed by streaming encoder. */
+typedef enum BrotliEncoderOperation {
+ /**
+ * Process input.
+ *
+ * Encoder may postpone producing output, until it has processed enough input.
+ */
+ BROTLI_OPERATION_PROCESS = 0,
+ /**
+ * Produce output for all processed input.
+ *
+ * Actual flush is performed when input stream is depleted and there is enough
+ * space in output stream. This means that client should repeat
+ * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and
+ * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
+ * via ::BrotliEncoderTakeOutput, then operation should be repeated after
+ * output buffer is drained.
+ *
+ * @warning Until flush is complete, client @b SHOULD @b NOT swap,
+ * reduce or extend input stream.
+ *
+ * When flush is complete, output data will be sufficient for decoder to
+ * reproduce all the given input.
+ */
+ BROTLI_OPERATION_FLUSH = 1,
+ /**
+ * Finalize the stream.
+ *
+ * Actual finalization is performed when input stream is depleted and there is
+ * enough space in output stream. This means that client should repeat
+ * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and
+ * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
+ * via ::BrotliEncoderTakeOutput, then operation should be repeated after
+ * output buffer is drained.
+ *
+ * @warning Until finalization is complete, client @b SHOULD @b NOT swap,
+ * reduce or extend input stream.
+ *
+ * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and
+ * output fully dumped.
+ *
+ * Adding more input data to finalized stream is impossible.
+ */
+ BROTLI_OPERATION_FINISH = 2,
+ /**
+ * Emit metadata block to stream.
+ *
+ * Metadata is opaque to Brotli: neither encoder, nor decoder processes this
+ * data or relies on it. It may be used to pass some extra information from
+ * encoder client to decoder client without interfering with main data stream.
+ *
+ * @note Encoder may emit empty metadata blocks internally, to pad encoded
+ * stream to byte boundary.
+ *
+ * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,
+ * reduce or extend input stream.
+ *
+ * @warning The whole content of input buffer is considered to be the content
+ * of metadata block. Do @b NOT @e append metadata to input stream,
+ * before it is depleted with other operations.
+ *
+ * Stream is soft-flushed before metadata block is emitted. Metadata block
+ * @b MUST be no longer than than 16MiB.
+ */
+ BROTLI_OPERATION_EMIT_METADATA = 3
+} BrotliEncoderOperation;
+
+/** Options to be used with ::BrotliEncoderSetParameter. */
+typedef enum BrotliEncoderParameter {
+ /**
+ * Tune encoder for specific input.
+ *
+ * ::BrotliEncoderMode enumerates all available values.
+ */
+ BROTLI_PARAM_MODE = 0,
+ /**
+ * The main compression speed-density lever.
+ *
+ * The higher the quality, the slower the compression. Range is
+ * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.
+ */
+ BROTLI_PARAM_QUALITY = 1,
+ /**
+ * Recommended sliding LZ77 window size.
+ *
+ * Encoder may reduce this value, e.g. if input is much smaller than
+ * window size.
+ *
+ * Window size is `(1 << value) - 16`.
+ *
+ * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.
+ */
+ BROTLI_PARAM_LGWIN = 2,
+ /**
+ * Recommended input block size.
+ *
+ * Encoder may reduce this value, e.g. if input is much smaller than input
+ * block size.
+ *
+ * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to
+ * ::BROTLI_MAX_INPUT_BLOCK_BITS.
+ *
+ * @note Bigger input block size allows better compression, but consumes more
+ * memory. \n The rough formula of memory used for temporary input
+ * storage is `3 << lgBlock`.
+ */
+ BROTLI_PARAM_LGBLOCK = 3,
+ /**
+ * Flag that affects usage of "literal context modeling" format feature.
+ *
+ * This flag is a "decoding-speed vs compression ratio" trade-off.
+ */
+ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,
+ /**
+ * Estimated total input size for all ::BrotliEncoderCompressStream calls.
+ *
+ * The default value is 0, which means that the total input size is unknown.
+ */
+ BROTLI_PARAM_SIZE_HINT = 5,
+ /**
+ * Flag that determines if "Large Window Brotli" is used.
+ */
+ BROTLI_PARAM_LARGE_WINDOW = 6,
+ /**
+ * Recommended number of postfix bits (NPOSTFIX).
+ *
+ * Encoder may change this value.
+ *
+ * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.
+ */
+ BROTLI_PARAM_NPOSTFIX = 7,
+ /**
+ * Recommended number of direct distance codes (NDIRECT).
+ *
+ * Encoder may change this value.
+ *
+ * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).
+ */
+ BROTLI_PARAM_NDIRECT = 8
+} BrotliEncoderParameter;
+
+/**
+ * Opaque structure that holds encoder state.
+ *
+ * Allocated and initialized with ::BrotliEncoderCreateInstance.
+ * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.
+ */
+typedef struct BrotliEncoderStateStruct BrotliEncoderState;
+
+/**
+ * Sets the specified parameter to the given encoder instance.
+ *
+ * @param state encoder instance
+ * @param param parameter to set
+ * @param value new parameter value
+ * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
+ * @returns ::BROTLI_FALSE if value of parameter can not be changed at current
+ * encoder state (e.g. when encoding is started, window size might be
+ * already encoded and therefore it is impossible to change it)
+ * @returns ::BROTLI_TRUE if value is accepted
+ * @warning invalid values might be accepted in case they would not break
+ * encoding process.
+ */
+BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(
+ BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);
+
+/**
+ * Creates an instance of ::BrotliEncoderState and initializes it.
+ *
+ * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
+ * case they are both zero, default memory allocators are used. @p opaque is
+ * passed to @p alloc_func and @p free_func when they are called. @p free_func
+ * has to return without doing anything when asked to free a NULL pointer.
+ *
+ * @param alloc_func custom memory allocation function
+ * @param free_func custom memory free function
+ * @param opaque custom memory manager handle
+ * @returns @c 0 if instance can not be allocated or initialized
+ * @returns pointer to initialized ::BrotliEncoderState otherwise
+ */
+BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
+ brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
+
+/**
+ * Deinitializes and frees ::BrotliEncoderState instance.
+ *
+ * @param state decoder instance to be cleaned up and deallocated
+ */
+BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);
+
+/**
+ * Calculates the output size bound for the given @p input_size.
+ *
+ * @warning Result is only valid if quality is at least @c 2 and, in
+ * case ::BrotliEncoderCompressStream was used, no flushes
+ * (::BROTLI_OPERATION_FLUSH) were performed.
+ *
+ * @param input_size size of projected input
+ * @returns @c 0 if result does not fit @c size_t
+ */
+BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);
+
+/**
+ * Performs one-shot memory-to-memory compression.
+ *
+ * Compresses the data in @p input_buffer into @p encoded_buffer, and sets
+ * @p *encoded_size to the compressed length.
+ *
+ * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero
+ * value, then output is guaranteed to be no longer than that.
+ *
+ * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY
+ * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW
+ * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE
+ * @param input_size size of @p input_buffer
+ * @param input_buffer input data buffer with at least @p input_size
+ * addressable bytes
+ * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n
+ * @b out: length of compressed data written to
+ * @p encoded_buffer, or @c 0 if compression fails
+ * @param encoded_buffer compressed data destination buffer
+ * @returns ::BROTLI_FALSE in case of compression error
+ * @returns ::BROTLI_FALSE if output buffer is too small
+ * @returns ::BROTLI_TRUE otherwise
+ */
+BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(
+ int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
+ const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],
+ size_t* encoded_size,
+ uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);
+
+/**
+ * Compresses input stream to output stream.
+ *
+ * The values @p *available_in and @p *available_out must specify the number of
+ * bytes addressable at @p *next_in and @p *next_out respectively.
+ * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
+ *
+ * After each call, @p *available_in will be decremented by the amount of input
+ * bytes consumed, and the @p *next_in pointer will be incremented by that
+ * amount. Similarly, @p *available_out will be decremented by the amount of
+ * output bytes written, and the @p *next_out pointer will be incremented by
+ * that amount.
+ *
+ * @p total_out, if it is not a null-pointer, will be set to the number
+ * of bytes compressed since the last @p state initialization.
+ *
+ *
+ *
+ * Internally workflow consists of 3 tasks:
+ * -# (optionally) copy input data to internal buffer
+ * -# actually compress data and (optionally) store it to internal buffer
+ * -# (optionally) copy compressed bytes from internal buffer to output stream
+ *
+ * Whenever all 3 tasks can't move forward anymore, or error occurs, this
+ * method returns the control flow to caller.
+ *
+ * @p op is used to perform flush, finish the stream, or inject metadata block.
+ * See ::BrotliEncoderOperation for more information.
+ *
+ * Flushing the stream means forcing encoding of all input passed to encoder and
+ * completing the current output block, so it could be fully decoded by stream
+ * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.
+ * Under some circumstances (e.g. lack of output stream capacity) this operation
+ * would require several calls to ::BrotliEncoderCompressStream. The method must
+ * be called again until both input stream is depleted and encoder has no more
+ * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
+ *
+ * Finishing the stream means encoding of all input passed to encoder and
+ * adding specific "final" marks, so stream decoder could determine that stream
+ * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.
+ * Under some circumstances (e.g. lack of output stream capacity) this operation
+ * would require several calls to ::BrotliEncoderCompressStream. The method must
+ * be called again until both input stream is depleted and encoder has no more
+ * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
+ *
+ * @warning When flushing and finishing, @p op should not change until operation
+ * is complete; input stream should not be swapped, reduced or
+ * extended as well.
+ *
+ * @param state encoder instance
+ * @param op requested operation
+ * @param[in, out] available_in @b in: amount of available input; \n
+ * @b out: amount of unused input
+ * @param[in, out] next_in pointer to the next input byte
+ * @param[in, out] available_out @b in: length of output buffer; \n
+ * @b out: remaining size of output buffer
+ * @param[in, out] next_out compressed output buffer cursor;
+ * can be @c NULL if @p available_out is @c 0
+ * @param[out] total_out number of bytes produced so far; can be @c NULL
+ * @returns ::BROTLI_FALSE if there was an error
+ * @returns ::BROTLI_TRUE otherwise
+ */
+BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(
+ BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,
+ const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
+ size_t* total_out);
+
+/**
+ * Checks if encoder instance reached the final state.
+ *
+ * @param state encoder instance
+ * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of
+ * the input and produced all of the output
+ * @returns ::BROTLI_FALSE otherwise
+ */
+BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);
+
+/**
+ * Checks if encoder has more output.
+ *
+ * @param state encoder instance
+ * @returns ::BROTLI_TRUE, if encoder has some unconsumed output
+ * @returns ::BROTLI_FALSE otherwise
+ */
+BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
+ BrotliEncoderState* state);
+
+/**
+ * Acquires pointer to internal output buffer.
+ *
+ * This method is used to make language bindings easier and more efficient:
+ * -# push data to ::BrotliEncoderCompressStream,
+ * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE
+ * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific
+ * entity
+ *
+ * Also this could be useful if there is an output stream that is able to
+ * consume all the provided data (e.g. when data is saved to file system).
+ *
+ * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of
+ * output are considered consumed for all consecutive calls to the
+ * instance methods; returned pointer becomes invalidated as well.
+ *
+ * @note Encoder output is not guaranteed to be contiguous. This means that
+ * after the size-unrestricted call to ::BrotliEncoderTakeOutput,
+ * immediate next call to ::BrotliEncoderTakeOutput may return more data.
+ *
+ * @param state encoder instance
+ * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
+ * any amount could be handled; \n
+ * @b out: amount of data pointed by returned pointer and
+ * considered consumed; \n
+ * out value is never greater than in value, unless it is @c 0
+ * @returns pointer to output data
+ */
+BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
+ BrotliEncoderState* state, size_t* size);
+
+
+/**
+ * Gets an encoder library version.
+ *
+ * Look at BROTLI_VERSION for more information.
+ */
+BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
+
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* extern "C" */
+#endif
+
+#endif /* BROTLI_ENC_ENCODE_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/include/brotli/port.h b/dviware/dvisvgm/libs/brotli/include/brotli/port.h
new file mode 100644
index 0000000000..20dc2314d8
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/include/brotli/port.h
@@ -0,0 +1,274 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Macros for compiler / platform specific API declarations. */
+
+#ifndef BROTLI_COMMON_PORT_H_
+#define BROTLI_COMMON_PORT_H_
+
+/* The following macros were borrowed from https://github.com/nemequ/hedley
+ * with permission of original author - Evan Nemerson <evan@nemerson.com> */
+
+/* >>> >>> >>> hedley macros */
+
+#define BROTLI_MAKE_VERSION(major, minor, revision) \
+ (((major) * 1000000) + ((minor) * 1000) + (revision))
+
+#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
+#define BROTLI_GNUC_VERSION \
+ BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
+#elif defined(__GNUC__)
+#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)
+#endif
+
+#if defined(BROTLI_GNUC_VERSION)
+#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
+#define BROTLI_MSVC_VERSION \
+ BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
+ (_MSC_FULL_VER % 10000000) / 100000, \
+ (_MSC_FULL_VER % 100000) / 100)
+#elif defined(_MSC_FULL_VER)
+#define BROTLI_MSVC_VERSION \
+ BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
+ (_MSC_FULL_VER % 1000000) / 10000, \
+ (_MSC_FULL_VER % 10000) / 10)
+#elif defined(_MSC_VER)
+#define BROTLI_MSVC_VERSION \
+ BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
+#endif
+
+#if !defined(_MSC_VER)
+#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
+#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
+#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
+ (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
+#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
+#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
+ (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
+#else
+#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
+ (_MSC_VER >= ((major * 100) + (minor)))
+#endif
+
+#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
+#define BROTLI_INTEL_VERSION \
+ BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
+ __INTEL_COMPILER % 100, \
+ __INTEL_COMPILER_UPDATE)
+#elif defined(__INTEL_COMPILER)
+#define BROTLI_INTEL_VERSION \
+ BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
+#endif
+
+#if defined(BROTLI_INTEL_VERSION)
+#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__PGI) && \
+ defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
+#define BROTLI_PGI_VERSION \
+ BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
+#endif
+
+#if defined(BROTLI_PGI_VERSION)
+#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
+#define BROTLI_SUNPRO_VERSION \
+ BROTLI_MAKE_VERSION( \
+ (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
+ (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
+ (__SUNPRO_C & 0xf) * 10)
+#elif defined(__SUNPRO_C)
+#define BROTLI_SUNPRO_VERSION \
+ BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
+ (__SUNPRO_C >> 4) & 0xf, \
+ (__SUNPRO_C) & 0xf)
+#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
+#define BROTLI_SUNPRO_VERSION \
+ BROTLI_MAKE_VERSION( \
+ (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
+ (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
+ (__SUNPRO_CC & 0xf) * 10)
+#elif defined(__SUNPRO_CC)
+#define BROTLI_SUNPRO_VERSION \
+ BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
+ (__SUNPRO_CC >> 4) & 0xf, \
+ (__SUNPRO_CC) & 0xf)
+#endif
+
+#if defined(BROTLI_SUNPRO_VERSION)
+#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
+#define BROTLI_ARM_VERSION \
+ BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
+ (__ARMCOMPILER_VERSION % 1000000) / 10000, \
+ (__ARMCOMPILER_VERSION % 10000) / 100)
+#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
+#define BROTLI_ARM_VERSION \
+ BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
+ (__ARMCC_VERSION % 1000000) / 10000, \
+ (__ARMCC_VERSION % 10000) / 100)
+#endif
+
+#if defined(BROTLI_ARM_VERSION)
+#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__ibmxl__)
+#define BROTLI_IBM_VERSION \
+ BROTLI_MAKE_VERSION(__ibmxl_version__, \
+ __ibmxl_release__, \
+ __ibmxl_modification__)
+#elif defined(__xlC__) && defined(__xlC_ver__)
+#define BROTLI_IBM_VERSION \
+ BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
+#elif defined(__xlC__)
+#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)
+#endif
+
+#if defined(BROTLI_IBM_VERSION)
+#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__TI_COMPILER_VERSION__)
+#define BROTLI_TI_VERSION \
+ BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
+ (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
+ (__TI_COMPILER_VERSION__ % 1000))
+#endif
+
+#if defined(BROTLI_TI_VERSION)
+#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__IAR_SYSTEMS_ICC__)
+#if __VER__ > 1000
+#define BROTLI_IAR_VERSION \
+ BROTLI_MAKE_VERSION((__VER__ / 1000000), \
+ (__VER__ / 1000) % 1000, \
+ (__VER__ % 1000))
+#else
+#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)
+#endif
+#endif
+
+#if defined(BROTLI_IAR_VERSION)
+#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__TINYC__)
+#define BROTLI_TINYC_VERSION \
+ BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
+#endif
+
+#if defined(BROTLI_TINYC_VERSION)
+#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
+ (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
+#else
+#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
+#endif
+
+#if defined(__has_attribute)
+#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
+ __has_attribute(attribute)
+#else
+#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
+ BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
+#endif
+
+#if defined(__has_builtin)
+#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
+ __has_builtin(builtin)
+#else
+#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
+ BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
+#endif
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+#define BROTLI_PUBLIC
+#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
+ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
+ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
+ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
+ BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
+ BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
+ defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
+#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
+#else
+#define BROTLI_PUBLIC
+#endif
+
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
+ !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
+ !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
+#define BROTLI_ARRAY_PARAM(name) (name)
+#else
+#define BROTLI_ARRAY_PARAM(name)
+#endif
+
+/* <<< <<< <<< end of hedley macros. */
+
+#if defined(BROTLI_SHARED_COMPILATION)
+#if defined(_WIN32)
+#if defined(BROTLICOMMON_SHARED_COMPILATION)
+#define BROTLI_COMMON_API __declspec(dllexport)
+#else
+#define BROTLI_COMMON_API __declspec(dllimport)
+#endif /* BROTLICOMMON_SHARED_COMPILATION */
+#if defined(BROTLIDEC_SHARED_COMPILATION)
+#define BROTLI_DEC_API __declspec(dllexport)
+#else
+#define BROTLI_DEC_API __declspec(dllimport)
+#endif /* BROTLIDEC_SHARED_COMPILATION */
+#if defined(BROTLIENC_SHARED_COMPILATION)
+#define BROTLI_ENC_API __declspec(dllexport)
+#else
+#define BROTLI_ENC_API __declspec(dllimport)
+#endif /* BROTLIENC_SHARED_COMPILATION */
+#else /* _WIN32 */
+#define BROTLI_COMMON_API BROTLI_PUBLIC
+#define BROTLI_DEC_API BROTLI_PUBLIC
+#define BROTLI_ENC_API BROTLI_PUBLIC
+#endif /* _WIN32 */
+#else /* BROTLI_SHARED_COMPILATION */
+#define BROTLI_COMMON_API
+#define BROTLI_DEC_API
+#define BROTLI_ENC_API
+#endif
+
+#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/dviware/dvisvgm/libs/brotli/include/brotli/types.h b/dviware/dvisvgm/libs/brotli/include/brotli/types.h
new file mode 100644
index 0000000000..eff1a3cd07
--- /dev/null
+++ b/dviware/dvisvgm/libs/brotli/include/brotli/types.h
@@ -0,0 +1,83 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/**
+ * @file
+ * Common types used in decoder and encoder API.
+ */
+
+#ifndef BROTLI_COMMON_TYPES_H_
+#define BROTLI_COMMON_TYPES_H_
+
+#include <stddef.h> /* for size_t */
+
+#if defined(_MSC_VER) && (_MSC_VER < 1600)
+typedef __int8 int8_t;
+typedef unsigned __int8 uint8_t;
+typedef __int16 int16_t;
+typedef unsigned __int16 uint16_t;
+typedef __int32 int32_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+typedef __int64 int64_t;
+#else
+#include <stdint.h>
+#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
+
+/**
+ * A portable @c bool replacement.
+ *
+ * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
+ * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
+ *
+ * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
+ * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
+ *
+ * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
+ * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
+ * evaluated, for example: @code{.cpp}
+ * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
+ * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
+ * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
+ * DoSomething(x);
+ * }
+ * @endcode
+ */
+#define BROTLI_BOOL int
+/** Portable @c true replacement. */
+#define BROTLI_TRUE 1
+/** Portable @c false replacement. */
+#define BROTLI_FALSE 0
+/** @c bool to ::BROTLI_BOOL conversion macros. */
+#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
+
+#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
+
+#define BROTLI_UINT32_MAX (~((uint32_t)0))
+#define BROTLI_SIZE_MAX (~((size_t)0))
+
+/**
+ * Allocating function pointer type.
+ *
+ * @param opaque custom memory manager handle provided by client
+ * @param size requested memory region size; can not be @c 0
+ * @returns @c 0 in the case of failure
+ * @returns a valid pointer to a memory region of at least @p size bytes
+ * long otherwise
+ */
+typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
+
+/**
+ * Deallocating function pointer type.
+ *
+ * This function @b SHOULD do nothing if @p address is @c 0.
+ *
+ * @param opaque custom memory manager handle provided by client
+ * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
+ */
+typedef void (*brotli_free_func)(void* opaque, void* address);
+
+#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/dviware/dvisvgm/libs/clipper/License.txt b/dviware/dvisvgm/libs/clipper/License.txt
new file mode 100644
index 0000000000..3e3af47ba3
--- /dev/null
+++ b/dviware/dvisvgm/libs/clipper/License.txt
@@ -0,0 +1,24 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+http://www.boost.org/LICENSE_1_0.txt
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/dviware/dvisvgm/libs/clipper/Makefile.am b/dviware/dvisvgm/libs/clipper/Makefile.am
new file mode 100644
index 0000000000..ad880e74b7
--- /dev/null
+++ b/dviware/dvisvgm/libs/clipper/Makefile.am
@@ -0,0 +1,11 @@
+noinst_LIBRARIES = libclipper.a
+libclipper_a_SOURCES = clipper.cpp clipper.hpp
+EXTRA_DIST = License.txt
+
+AM_CXXFLAGS = -Wall
+
+clipper.cpp: clipper.hpp
+
+@CODE_COVERAGE_RULES@
+
+CLEANFILES = *.gcda *.gcno
diff --git a/dviware/dvisvgm/libs/clipper/Makefile.in b/dviware/dvisvgm/libs/clipper/Makefile.in
new file mode 100644
index 0000000000..8b07d59358
--- /dev/null
+++ b/dviware/dvisvgm/libs/clipper/Makefile.in
@@ -0,0 +1,667 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/clipper
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libclipper_a_AR = $(AR) $(ARFLAGS)
+libclipper_a_LIBADD =
+am_libclipper_a_OBJECTS = clipper.$(OBJEXT)
+libclipper_a_OBJECTS = $(am_libclipper_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/clipper.Po
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libclipper_a_SOURCES)
+DIST_SOURCES = $(libclipper_a_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LIBRARIES = libclipper.a
+libclipper_a_SOURCES = clipper.cpp clipper.hpp
+EXTRA_DIST = License.txt
+AM_CXXFLAGS = -Wall
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/clipper/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/clipper/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libclipper.a: $(libclipper_a_OBJECTS) $(libclipper_a_DEPENDENCIES) $(EXTRA_libclipper_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libclipper.a
+ $(AM_V_AR)$(libclipper_a_AR) libclipper.a $(libclipper_a_OBJECTS) $(libclipper_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libclipper.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clipper.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/clipper.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/clipper.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+clipper.cpp: clipper.hpp
+
+@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/clipper/clipper.cpp b/dviware/dvisvgm/libs/clipper/clipper.cpp
new file mode 100644
index 0000000000..1a212478e0
--- /dev/null
+++ b/dviware/dvisvgm/libs/clipper/clipper.cpp
@@ -0,0 +1,4457 @@
+/*******************************************************************************
+* *
+* Author : Angus Johnson *
+* Version : 6.2.1 *
+* Date : 31 October 2014 *
+* Website : http://www.angusj.com *
+* Copyright : Angus Johnson 2010-2014 *
+* *
+* License: *
+* Use, modification & distribution is subject to Boost Software License Ver 1. *
+* http://www.boost.org/LICENSE_1_0.txt *
+* *
+* Attributions: *
+* The code in this library is an extension of Bala Vatti's clipping algorithm: *
+* "A generic solution to polygon clipping" *
+* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. *
+* http://portal.acm.org/citation.cfm?id=129906 *
+* *
+* Computer graphics and geometric modeling: implementation and algorithms *
+* By Max K. Agoston *
+* Springer; 1 edition (January 4, 2005) *
+* http://books.google.com/books?q=vatti+clipping+agoston *
+* *
+* See also: *
+* "Polygon Offsetting by Computing Winding Numbers" *
+* Paper no. DETC2005-85513 pp. 565-575 *
+* ASME 2005 International Design Engineering Technical Conferences *
+* and Computers and Information in Engineering Conference (IDETC/CIE2005) *
+* September 24-28, 2005 , Long Beach, California, USA *
+* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf *
+* *
+*******************************************************************************/
+
+/*******************************************************************************
+* *
+* This is a translation of the Delphi Clipper library and the naming style *
+* used has retained a Delphi flavour. *
+* *
+*******************************************************************************/
+
+#include "clipper.hpp"
+#include <cmath>
+#include <vector>
+#include <algorithm>
+#include <stdexcept>
+#include <cstring>
+#include <cstdlib>
+#include <ostream>
+#include <functional>
+
+namespace ClipperLib {
+
+static double const pi = 3.141592653589793238;
+static double const two_pi = pi *2;
+static double const def_arc_tolerance = 0.25;
+
+enum Direction { dRightToLeft, dLeftToRight };
+
+static int const Unassigned = -1; //edge not currently 'owning' a solution
+static int const Skip = -2; //edge that would otherwise close a path
+
+#define HORIZONTAL (-1.0E+40)
+#define TOLERANCE (1.0e-20)
+#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE))
+
+struct TEdge {
+ IntPoint Bot;
+ IntPoint Curr;
+ IntPoint Top;
+ IntPoint Delta;
+ double Dx = 0.0;
+ PolyType PolyTyp = ptSubject;
+ EdgeSide Side = esLeft;
+ int WindDelta = 0; //1 or -1 depending on winding direction
+ int WindCnt = 0;
+ int WindCnt2 = 0; //winding count of the opposite polytype
+ int OutIdx = 0;
+ TEdge *Next = nullptr;
+ TEdge *Prev = nullptr;
+ TEdge *NextInLML = nullptr;
+ TEdge *NextInAEL = nullptr;
+ TEdge *PrevInAEL = nullptr;
+ TEdge *NextInSEL = nullptr;
+ TEdge *PrevInSEL = nullptr;
+};
+
+struct IntersectNode {
+ TEdge *Edge1;
+ TEdge *Edge2;
+ IntPoint Pt;
+};
+
+struct LocalMinimum {
+ cInt Y;
+ TEdge *LeftBound;
+ TEdge *RightBound;
+};
+
+struct OutPt;
+
+struct OutRec {
+ int Idx;
+ bool IsHole;
+ bool IsOpen;
+ OutRec *FirstLeft; //see comments in clipper.pas
+ PolyNode *PolyNd;
+ OutPt *Pts;
+ OutPt *BottomPt;
+};
+
+struct OutPt {
+ int Idx;
+ IntPoint Pt;
+ OutPt *Next;
+ OutPt *Prev;
+};
+
+struct Join {
+ OutPt *OutPt1;
+ OutPt *OutPt2;
+ IntPoint OffPt;
+};
+
+struct LocMinSorter
+{
+ inline bool operator()(const LocalMinimum& locMin1, const LocalMinimum& locMin2)
+ {
+ return locMin2.Y < locMin1.Y;
+ }
+};
+
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+
+inline cInt Round(double val)
+{
+ if ((val < 0)) return static_cast<cInt>(val - 0.5);
+ else return static_cast<cInt>(val + 0.5);
+}
+//------------------------------------------------------------------------------
+
+inline cInt Abs(cInt val)
+{
+ return val < 0 ? -val : val;
+}
+
+//------------------------------------------------------------------------------
+// PolyTree methods ...
+//------------------------------------------------------------------------------
+
+void PolyTree::Clear()
+{
+ for (PolyNodes::size_type i = 0; i < AllNodes.size(); ++i)
+ delete AllNodes[i];
+ AllNodes.resize(0);
+ Childs.resize(0);
+}
+//------------------------------------------------------------------------------
+
+PolyNode* PolyTree::GetFirst() const
+{
+ if (!Childs.empty())
+ return Childs[0];
+ else
+ return 0;
+}
+//------------------------------------------------------------------------------
+
+int PolyTree::Total() const
+{
+ int result = (int)AllNodes.size();
+ //with negative offsets, ignore the hidden outer polygon ...
+ if (result > 0 && Childs[0] != AllNodes[0]) result--;
+ return result;
+}
+
+//------------------------------------------------------------------------------
+// PolyNode methods ...
+//------------------------------------------------------------------------------
+
+PolyNode::PolyNode(): Childs(), Parent(0), Index(0), m_IsOpen(false)
+{
+}
+//------------------------------------------------------------------------------
+
+int PolyNode::ChildCount() const
+{
+ return (int)Childs.size();
+}
+//------------------------------------------------------------------------------
+
+void PolyNode::AddChild(PolyNode& child)
+{
+ unsigned cnt = (unsigned)Childs.size();
+ Childs.push_back(&child);
+ child.Parent = this;
+ child.Index = cnt;
+}
+//------------------------------------------------------------------------------
+
+PolyNode* PolyNode::GetNext() const
+{
+ if (!Childs.empty())
+ return Childs[0];
+ else
+ return GetNextSiblingUp();
+}
+//------------------------------------------------------------------------------
+
+PolyNode* PolyNode::GetNextSiblingUp() const
+{
+ if (!Parent) //protects against PolyTree.GetNextSiblingUp()
+ return 0;
+ else if (Index == Parent->Childs.size() - 1)
+ return Parent->GetNextSiblingUp();
+ else
+ return Parent->Childs[Index + 1];
+}
+//------------------------------------------------------------------------------
+
+bool PolyNode::IsHole() const
+{
+ bool result = true;
+ PolyNode* node = Parent;
+ while (node)
+ {
+ result = !result;
+ node = node->Parent;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+bool PolyNode::IsOpen() const
+{
+ return m_IsOpen;
+}
+//------------------------------------------------------------------------------
+
+#ifndef use_int32
+
+//------------------------------------------------------------------------------
+// Int128 class (enables safe math on signed 64bit integers)
+// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1
+// Int128 val2((long64)9223372036854775807);
+// Int128 val3 = val1 * val2;
+// val3.AsString => "85070591730234615847396907784232501249" (8.5e+37)
+//------------------------------------------------------------------------------
+
+class Int128
+{
+ public:
+ ulong64 lo;
+ long64 hi;
+
+ Int128(long64 _lo = 0)
+ {
+ lo = (ulong64)_lo;
+ if (_lo < 0) hi = -1; else hi = 0;
+ }
+
+
+ Int128(const Int128 &val): lo(val.lo), hi(val.hi){}
+
+ Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){}
+
+ Int128& operator = (const long64 &val)
+ {
+ lo = (ulong64)val;
+ if (val < 0) hi = -1; else hi = 0;
+ return *this;
+ }
+
+ bool operator == (const Int128 &val) const
+ {return (hi == val.hi && lo == val.lo);}
+
+ bool operator != (const Int128 &val) const
+ { return !(*this == val);}
+
+ bool operator > (const Int128 &val) const
+ {
+ if (hi != val.hi)
+ return hi > val.hi;
+ else
+ return lo > val.lo;
+ }
+
+ bool operator < (const Int128 &val) const
+ {
+ if (hi != val.hi)
+ return hi < val.hi;
+ else
+ return lo < val.lo;
+ }
+
+ bool operator >= (const Int128 &val) const
+ { return !(*this < val);}
+
+ bool operator <= (const Int128 &val) const
+ { return !(*this > val);}
+
+ Int128& operator += (const Int128 &rhs)
+ {
+ hi += rhs.hi;
+ lo += rhs.lo;
+ if (lo < rhs.lo) hi++;
+ return *this;
+ }
+
+ Int128 operator + (const Int128 &rhs) const
+ {
+ Int128 result(*this);
+ result+= rhs;
+ return result;
+ }
+
+ Int128& operator -= (const Int128 &rhs)
+ {
+ *this += -rhs;
+ return *this;
+ }
+
+ Int128 operator - (const Int128 &rhs) const
+ {
+ Int128 result(*this);
+ result -= rhs;
+ return result;
+ }
+
+ Int128 operator-() const //unary negation
+ {
+ if (lo == 0)
+ return Int128(-hi, 0);
+ else
+ return Int128(~hi, ~lo + 1);
+ }
+
+ operator double() const
+ {
+ const double shift64 = 18446744073709551616.0; //2^64
+ if (hi < 0)
+ {
+ if (lo == 0) return (double)hi * shift64;
+ else return -(double)(~lo + ~hi * shift64);
+ }
+ else
+ return (double)(lo + hi * shift64);
+ }
+
+};
+//------------------------------------------------------------------------------
+
+Int128 Int128Mul (long64 lhs, long64 rhs)
+{
+ bool negate = (lhs < 0) != (rhs < 0);
+
+ if (lhs < 0) lhs = -lhs;
+ ulong64 int1Hi = ulong64(lhs) >> 32;
+ ulong64 int1Lo = ulong64(lhs & 0xFFFFFFFF);
+
+ if (rhs < 0) rhs = -rhs;
+ ulong64 int2Hi = ulong64(rhs) >> 32;
+ ulong64 int2Lo = ulong64(rhs & 0xFFFFFFFF);
+
+ //nb: see comments in clipper.pas
+ ulong64 a = int1Hi * int2Hi;
+ ulong64 b = int1Lo * int2Lo;
+ ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi;
+
+ Int128 tmp;
+ tmp.hi = long64(a + (c >> 32));
+ tmp.lo = long64(c << 32);
+ tmp.lo += long64(b);
+ if (tmp.lo < b) tmp.hi++;
+ if (negate) tmp = -tmp;
+ return tmp;
+};
+#endif
+
+//------------------------------------------------------------------------------
+// Miscellaneous global functions
+//------------------------------------------------------------------------------
+
+bool Orientation(const Path &poly)
+{
+ return Area(poly) >= 0;
+}
+//------------------------------------------------------------------------------
+
+double Area(const Path &poly)
+{
+ int size = (int)poly.size();
+ if (size < 3) return 0;
+
+ double a = 0;
+ for (int i = 0, j = size -1; i < size; ++i)
+ {
+ a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y);
+ j = i;
+ }
+ return -a * 0.5;
+}
+//------------------------------------------------------------------------------
+
+double Area(const OutRec &outRec)
+{
+ OutPt *op = outRec.Pts;
+ if (!op) return 0;
+ double a = 0;
+ do {
+ a += (double)(op->Prev->Pt.X + op->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y);
+ op = op->Next;
+ } while (op != outRec.Pts);
+ return a * 0.5;
+}
+//------------------------------------------------------------------------------
+
+bool PointIsVertex(const IntPoint &Pt, OutPt *pp)
+{
+ OutPt *pp2 = pp;
+ do
+ {
+ if (pp2->Pt == Pt) return true;
+ pp2 = pp2->Next;
+ }
+ while (pp2 != pp);
+ return false;
+}
+//------------------------------------------------------------------------------
+
+int PointInPolygon (const IntPoint &pt, const Path &path)
+{
+ //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
+ //See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos
+ //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf
+ int result = 0;
+ size_t cnt = path.size();
+ if (cnt < 3) return 0;
+ IntPoint ip = path[0];
+ for(size_t i = 1; i <= cnt; ++i)
+ {
+ IntPoint ipNext = (i == cnt ? path[0] : path[i]);
+ if (ipNext.Y == pt.Y)
+ {
+ if ((ipNext.X == pt.X) || (ip.Y == pt.Y &&
+ ((ipNext.X > pt.X) == (ip.X < pt.X)))) return -1;
+ }
+ if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y))
+ {
+ if (ip.X >= pt.X)
+ {
+ if (ipNext.X > pt.X) result = 1 - result;
+ else
+ {
+ double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) -
+ (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
+ }
+ } else
+ {
+ if (ipNext.X > pt.X)
+ {
+ double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) -
+ (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;
+ }
+ }
+ }
+ ip = ipNext;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+int PointInPolygon (const IntPoint &pt, OutPt *op)
+{
+ //returns 0 if false, +1 if true, -1 if pt ON polygon boundary
+ int result = 0;
+ OutPt* startOp = op;
+ for(;;)
+ {
+ if (op->Next->Pt.Y == pt.Y)
+ {
+ if ((op->Next->Pt.X == pt.X) || (op->Pt.Y == pt.Y &&
+ ((op->Next->Pt.X > pt.X) == (op->Pt.X < pt.X)))) return -1;
+ }
+ if ((op->Pt.Y < pt.Y) != (op->Next->Pt.Y < pt.Y))
+ {
+ if (op->Pt.X >= pt.X)
+ {
+ if (op->Next->Pt.X > pt.X) result = 1 - result;
+ else
+ {
+ double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) -
+ (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
+ }
+ } else
+ {
+ if (op->Next->Pt.X > pt.X)
+ {
+ double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) -
+ (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);
+ if (!d) return -1;
+ if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;
+ }
+ }
+ }
+ op = op->Next;
+ if (startOp == op) break;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+bool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2)
+{
+ OutPt* op = OutPt1;
+ do
+ {
+ //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon
+ int res = PointInPolygon(op->Pt, OutPt2);
+ if (res >= 0) return res > 0;
+ op = op->Next;
+ }
+ while (op != OutPt1);
+ return true;
+}
+//----------------------------------------------------------------------
+
+bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)
+{
+#ifndef use_int32
+ if (UseFullInt64Range)
+ return Int128Mul(e1.Delta.Y, e2.Delta.X) == Int128Mul(e1.Delta.X, e2.Delta.Y);
+ else
+#endif
+ return e1.Delta.Y * e2.Delta.X == e1.Delta.X * e2.Delta.Y;
+}
+//------------------------------------------------------------------------------
+
+bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
+ const IntPoint pt3, bool UseFullInt64Range)
+{
+#ifndef use_int32
+ if (UseFullInt64Range)
+ return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y);
+ else
+#endif
+ return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y);
+}
+//------------------------------------------------------------------------------
+
+bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
+ const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range)
+{
+#ifndef use_int32
+ if (UseFullInt64Range)
+ return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y);
+ else
+#endif
+ return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y);
+}
+//------------------------------------------------------------------------------
+
+inline bool IsHorizontal(TEdge &e)
+{
+ return e.Delta.Y == 0;
+}
+//------------------------------------------------------------------------------
+
+inline double GetDx(const IntPoint pt1, const IntPoint pt2)
+{
+ return (pt1.Y == pt2.Y) ?
+ HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y);
+}
+//---------------------------------------------------------------------------
+
+inline void SetDx(TEdge &e)
+{
+ e.Delta.X = (e.Top.X - e.Bot.X);
+ e.Delta.Y = (e.Top.Y - e.Bot.Y);
+
+ if (e.Delta.Y == 0) e.Dx = HORIZONTAL;
+ else e.Dx = (double)(e.Delta.X) / e.Delta.Y;
+}
+//---------------------------------------------------------------------------
+
+inline void SwapSides(TEdge &Edge1, TEdge &Edge2)
+{
+ EdgeSide Side = Edge1.Side;
+ Edge1.Side = Edge2.Side;
+ Edge2.Side = Side;
+}
+//------------------------------------------------------------------------------
+
+inline void SwapPolyIndexes(TEdge &Edge1, TEdge &Edge2)
+{
+ int OutIdx = Edge1.OutIdx;
+ Edge1.OutIdx = Edge2.OutIdx;
+ Edge2.OutIdx = OutIdx;
+}
+//------------------------------------------------------------------------------
+
+inline cInt TopX(TEdge &edge, const cInt currentY)
+{
+ return ( currentY == edge.Top.Y ) ?
+ edge.Top.X : edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y));
+}
+//------------------------------------------------------------------------------
+
+void IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip)
+{
+#ifdef use_xyz
+ ip.Z = 0;
+#endif
+
+ double b1, b2;
+ if (Edge1.Dx == Edge2.Dx)
+ {
+ ip.Y = Edge1.Curr.Y;
+ ip.X = TopX(Edge1, ip.Y);
+ return;
+ }
+ else if (Edge1.Delta.X == 0)
+ {
+ ip.X = Edge1.Bot.X;
+ if (IsHorizontal(Edge2))
+ ip.Y = Edge2.Bot.Y;
+ else
+ {
+ b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);
+ ip.Y = Round(ip.X / Edge2.Dx + b2);
+ }
+ }
+ else if (Edge2.Delta.X == 0)
+ {
+ ip.X = Edge2.Bot.X;
+ if (IsHorizontal(Edge1))
+ ip.Y = Edge1.Bot.Y;
+ else
+ {
+ b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);
+ ip.Y = Round(ip.X / Edge1.Dx + b1);
+ }
+ }
+ else
+ {
+ b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;
+ b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;
+ double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);
+ ip.Y = Round(q);
+ if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
+ ip.X = Round(Edge1.Dx * q + b1);
+ else
+ ip.X = Round(Edge2.Dx * q + b2);
+ }
+
+ if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y)
+ {
+ if (Edge1.Top.Y > Edge2.Top.Y)
+ ip.Y = Edge1.Top.Y;
+ else
+ ip.Y = Edge2.Top.Y;
+ if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))
+ ip.X = TopX(Edge1, ip.Y);
+ else
+ ip.X = TopX(Edge2, ip.Y);
+ }
+ //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ...
+ if (ip.Y > Edge1.Curr.Y)
+ {
+ ip.Y = Edge1.Curr.Y;
+ //use the more vertical edge to derive X ...
+ if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))
+ ip.X = TopX(Edge2, ip.Y); else
+ ip.X = TopX(Edge1, ip.Y);
+ }
+}
+//------------------------------------------------------------------------------
+
+void ReversePolyPtLinks(OutPt *pp)
+{
+ if (!pp) return;
+ OutPt *pp1, *pp2;
+ pp1 = pp;
+ do {
+ pp2 = pp1->Next;
+ pp1->Next = pp1->Prev;
+ pp1->Prev = pp2;
+ pp1 = pp2;
+ } while( pp1 != pp );
+}
+//------------------------------------------------------------------------------
+
+void DisposeOutPts(OutPt*& pp)
+{
+ if (pp == 0) return;
+ pp->Prev->Next = 0;
+ while( pp )
+ {
+ OutPt *tmpPp = pp;
+ pp = pp->Next;
+ delete tmpPp;
+ }
+}
+//------------------------------------------------------------------------------
+
+inline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt)
+{
+ *e = TEdge();
+ e->Next = eNext;
+ e->Prev = ePrev;
+ e->Curr = Pt;
+ e->OutIdx = Unassigned;
+}
+//------------------------------------------------------------------------------
+
+void InitEdge2(TEdge& e, PolyType Pt)
+{
+ if (e.Curr.Y >= e.Next->Curr.Y)
+ {
+ e.Bot = e.Curr;
+ e.Top = e.Next->Curr;
+ } else
+ {
+ e.Top = e.Curr;
+ e.Bot = e.Next->Curr;
+ }
+ SetDx(e);
+ e.PolyTyp = Pt;
+}
+//------------------------------------------------------------------------------
+
+TEdge* RemoveEdge(TEdge* e)
+{
+ //removes e from double_linked_list (but without removing from memory)
+ e->Prev->Next = e->Next;
+ e->Next->Prev = e->Prev;
+ TEdge* result = e->Next;
+ e->Prev = 0; //flag as removed (see ClipperBase.Clear)
+ return result;
+}
+//------------------------------------------------------------------------------
+
+inline void ReverseHorizontal(TEdge &e)
+{
+ //swap horizontal edges' Top and Bottom x's so they follow the natural
+ //progression of the bounds - ie so their xbots will align with the
+ //adjoining lower edge. [Helpful in the ProcessHorizontal() method.]
+ std::swap(e.Top.X, e.Bot.X);
+#ifdef use_xyz
+ std::swap(e.Top.Z, e.Bot.Z);
+#endif
+}
+//------------------------------------------------------------------------------
+
+void SwapPoints(IntPoint &pt1, IntPoint &pt2)
+{
+ IntPoint tmp = pt1;
+ pt1 = pt2;
+ pt2 = tmp;
+}
+//------------------------------------------------------------------------------
+
+bool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,
+ IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)
+{
+ //precondition: segments are Collinear.
+ if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y))
+ {
+ if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b);
+ if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b);
+ if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a;
+ if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b;
+ return pt1.X < pt2.X;
+ } else
+ {
+ if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b);
+ if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b);
+ if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a;
+ if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b;
+ return pt1.Y > pt2.Y;
+ }
+}
+//------------------------------------------------------------------------------
+
+bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2)
+{
+ OutPt *p = btmPt1->Prev;
+ while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev;
+ double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+ p = btmPt1->Next;
+ while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next;
+ double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt));
+
+ p = btmPt2->Prev;
+ while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev;
+ double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt));
+ p = btmPt2->Next;
+ while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Next;
+ double dx2n = std::fabs(GetDx(btmPt2->Pt, p->Pt));
+ return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n);
+}
+//------------------------------------------------------------------------------
+
+OutPt* GetBottomPt(OutPt *pp)
+{
+ OutPt* dups = 0;
+ OutPt* p = pp->Next;
+ while (p != pp)
+ {
+ if (p->Pt.Y > pp->Pt.Y)
+ {
+ pp = p;
+ dups = 0;
+ }
+ else if (p->Pt.Y == pp->Pt.Y && p->Pt.X <= pp->Pt.X)
+ {
+ if (p->Pt.X < pp->Pt.X)
+ {
+ dups = 0;
+ pp = p;
+ } else
+ {
+ if (p->Next != pp && p->Prev != pp) dups = p;
+ }
+ }
+ p = p->Next;
+ }
+ if (dups)
+ {
+ //there appears to be at least 2 vertices at BottomPt so ...
+ while (dups != p)
+ {
+ if (!FirstIsBottomPt(p, dups)) pp = dups;
+ dups = dups->Next;
+ while (dups->Pt != pp->Pt) dups = dups->Next;
+ }
+ }
+ return pp;
+}
+//------------------------------------------------------------------------------
+
+bool Pt2IsBetweenPt1AndPt3(const IntPoint pt1,
+ const IntPoint pt2, const IntPoint pt3)
+{
+ if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2))
+ return false;
+ else if (pt1.X != pt3.X)
+ return (pt2.X > pt1.X) == (pt2.X < pt3.X);
+ else
+ return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y);
+}
+//------------------------------------------------------------------------------
+
+bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b)
+{
+ if (seg1a > seg1b) std::swap(seg1a, seg1b);
+ if (seg2a > seg2b) std::swap(seg2a, seg2b);
+ return (seg1a < seg2b) && (seg2a < seg1b);
+}
+
+//------------------------------------------------------------------------------
+// ClipperBase class methods ...
+//------------------------------------------------------------------------------
+
+ClipperBase::ClipperBase() //constructor
+{
+ m_CurrentLM = m_MinimaList.begin(); //begin() == end() here
+ m_UseFullRange = false;
+}
+//------------------------------------------------------------------------------
+
+ClipperBase::~ClipperBase() //destructor
+{
+ Clear();
+}
+//------------------------------------------------------------------------------
+
+void RangeTest(const IntPoint& Pt, bool& useFullRange)
+{
+ if (useFullRange)
+ {
+ if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange)
+ throw "Coordinate outside allowed range";
+ }
+ else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange)
+ {
+ useFullRange = true;
+ RangeTest(Pt, useFullRange);
+ }
+}
+//------------------------------------------------------------------------------
+
+TEdge* FindNextLocMin(TEdge* E)
+{
+ for (;;)
+ {
+ while (E->Bot != E->Prev->Bot || E->Curr == E->Top) E = E->Next;
+ if (!IsHorizontal(*E) && !IsHorizontal(*E->Prev)) break;
+ while (IsHorizontal(*E->Prev)) E = E->Prev;
+ TEdge* E2 = E;
+ while (IsHorizontal(*E)) E = E->Next;
+ if (E->Top.Y == E->Prev->Bot.Y) continue; //ie just an intermediate horz.
+ if (E2->Prev->Bot.X < E->Bot.X) E = E2;
+ break;
+ }
+ return E;
+}
+//------------------------------------------------------------------------------
+
+TEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward)
+{
+ TEdge *Result = E;
+ TEdge *Horz = 0;
+
+ if (E->OutIdx == Skip)
+ {
+ //if edges still remain in the current bound beyond the skip edge then
+ //create another LocMin and call ProcessBound once more
+ if (NextIsForward)
+ {
+ while (E->Top.Y == E->Next->Bot.Y) E = E->Next;
+ //don't include top horizontals when parsing a bound a second time,
+ //they will be contained in the opposite bound ...
+ while (E != Result && IsHorizontal(*E)) E = E->Prev;
+ }
+ else
+ {
+ while (E->Top.Y == E->Prev->Bot.Y) E = E->Prev;
+ while (E != Result && IsHorizontal(*E)) E = E->Next;
+ }
+
+ if (E == Result)
+ {
+ if (NextIsForward) Result = E->Next;
+ else Result = E->Prev;
+ }
+ else
+ {
+ //there are more edges in the bound beyond result starting with E
+ if (NextIsForward)
+ E = Result->Next;
+ else
+ E = Result->Prev;
+ MinimaList::value_type locMin;
+ locMin.Y = E->Bot.Y;
+ locMin.LeftBound = 0;
+ locMin.RightBound = E;
+ E->WindDelta = 0;
+ Result = ProcessBound(E, NextIsForward);
+ m_MinimaList.push_back(locMin);
+ }
+ return Result;
+ }
+
+ TEdge *EStart;
+
+ if (IsHorizontal(*E))
+ {
+ //We need to be careful with open paths because this may not be a
+ //true local minima (ie E may be following a skip edge).
+ //Also, consecutive horz. edges may start heading left before going right.
+ if (NextIsForward)
+ EStart = E->Prev;
+ else
+ EStart = E->Next;
+ if (EStart->OutIdx != Skip)
+ {
+ if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge
+ {
+ if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X)
+ ReverseHorizontal(*E);
+ }
+ else if (EStart->Bot.X != E->Bot.X)
+ ReverseHorizontal(*E);
+ }
+ }
+
+ EStart = E;
+ if (NextIsForward)
+ {
+ while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip)
+ Result = Result->Next;
+ if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip)
+ {
+ //nb: at the top of a bound, horizontals are added to the bound
+ //only when the preceding edge attaches to the horizontal's left vertex
+ //unless a Skip edge is encountered when that becomes the top divide
+ Horz = Result;
+ while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev;
+ if (Horz->Prev->Top.X == Result->Next->Top.X)
+ {
+ if (!NextIsForward) Result = Horz->Prev;
+ }
+ else if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev;
+ }
+ while (E != Result)
+ {
+ E->NextInLML = E->Next;
+ if (IsHorizontal(*E) && E != EStart &&
+ E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
+ E = E->Next;
+ }
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X)
+ ReverseHorizontal(*E);
+ Result = Result->Next; //move to the edge just beyond current bound
+ } else
+ {
+ while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip)
+ Result = Result->Prev;
+ if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip)
+ {
+ Horz = Result;
+ while (IsHorizontal(*Horz->Next)) Horz = Horz->Next;
+ if (Horz->Next->Top.X == Result->Prev->Top.X)
+ {
+ if (!NextIsForward) Result = Horz->Next;
+ }
+ else if (Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next;
+ }
+
+ while (E != Result)
+ {
+ E->NextInLML = E->Prev;
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
+ ReverseHorizontal(*E);
+ E = E->Prev;
+ }
+ if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
+ ReverseHorizontal(*E);
+ Result = Result->Prev; //move to the edge just beyond current bound
+ }
+
+ return Result;
+}
+//------------------------------------------------------------------------------
+
+bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
+{
+#ifdef use_lines
+ if (!Closed && PolyTyp == ptClip)
+ throw clipperException("AddPath: Open paths must be subject.");
+#else
+ if (!Closed)
+ throw clipperException("AddPath: Open paths have been disabled.");
+#endif
+
+ int highI = (int)pg.size() -1;
+ if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI;
+ while (highI > 0 && (pg[highI] == pg[highI -1])) --highI;
+ if ((Closed && highI < 2) || (!Closed && highI < 1)) return false;
+
+ //create a new edge array ...
+ TEdge *edges = new TEdge [highI +1];
+
+ bool IsFlat = true;
+ //1. Basic (first) edge initialization ...
+ try
+ {
+ edges[1].Curr = pg[1];
+ RangeTest(pg[0], m_UseFullRange);
+ RangeTest(pg[highI], m_UseFullRange);
+ InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);
+ InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);
+ for (int i = highI - 1; i >= 1; --i)
+ {
+ RangeTest(pg[i], m_UseFullRange);
+ InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);
+ }
+ }
+ catch(...)
+ {
+ delete [] edges;
+ throw; //range test fails
+ }
+ TEdge *eStart = &edges[0];
+
+ //2. Remove duplicate vertices, and (when closed) collinear edges ...
+ TEdge *E = eStart, *eLoopStop = eStart;
+ for (;;)
+ {
+ //nb: allows matching start and end points when not Closed ...
+ if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart))
+ {
+ if (E == E->Next) break;
+ if (E == eStart) eStart = E->Next;
+ E = RemoveEdge(E);
+ eLoopStop = E;
+ continue;
+ }
+ if (E->Prev == E->Next)
+ break; //only two vertices
+ else if (Closed &&
+ SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) &&
+ (!m_PreserveCollinear ||
+ !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr)))
+ {
+ //Collinear edges are allowed for open paths but in closed paths
+ //the default is to merge adjacent collinear edges into a single edge.
+ //However, if the PreserveCollinear property is enabled, only overlapping
+ //collinear edges (ie spikes) will be removed from closed paths.
+ if (E == eStart) eStart = E->Next;
+ E = RemoveEdge(E);
+ E = E->Prev;
+ eLoopStop = E;
+ continue;
+ }
+ E = E->Next;
+ if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break;
+ }
+
+ if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))
+ {
+ delete [] edges;
+ return false;
+ }
+
+ if (!Closed)
+ {
+ m_HasOpenPaths = true;
+ eStart->Prev->OutIdx = Skip;
+ }
+
+ //3. Do second stage of edge initialization ...
+ E = eStart;
+ do
+ {
+ InitEdge2(*E, PolyTyp);
+ E = E->Next;
+ if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false;
+ }
+ while (E != eStart);
+
+ //4. Finally, add edge bounds to LocalMinima list ...
+
+ //Totally flat paths must be handled differently when adding them
+ //to LocalMinima list to avoid endless loops etc ...
+ if (IsFlat)
+ {
+ if (Closed)
+ {
+ delete [] edges;
+ return false;
+ }
+ E->Prev->OutIdx = Skip;
+ if (E->Prev->Bot.X < E->Prev->Top.X) ReverseHorizontal(*E->Prev);
+ MinimaList::value_type locMin;
+ locMin.Y = E->Bot.Y;
+ locMin.LeftBound = 0;
+ locMin.RightBound = E;
+ locMin.RightBound->Side = esRight;
+ locMin.RightBound->WindDelta = 0;
+ while (E->Next->OutIdx != Skip)
+ {
+ E->NextInLML = E->Next;
+ if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
+ E = E->Next;
+ }
+ m_MinimaList.push_back(locMin);
+ m_edges.push_back(edges);
+ return true;
+ }
+
+ m_edges.push_back(edges);
+ bool leftBoundIsForward;
+ TEdge* EMin = 0;
+
+ //workaround to avoid an endless loop in the while loop below when
+ //open paths have matching start and end points ...
+ if (E->Prev->Bot == E->Prev->Top) E = E->Next;
+
+ for (;;)
+ {
+ E = FindNextLocMin(E);
+ if (E == EMin) break;
+ else if (!EMin) EMin = E;
+
+ //E and E.Prev now share a local minima (left aligned if horizontal).
+ //Compare their slopes to find which starts which bound ...
+ MinimaList::value_type locMin;
+ locMin.Y = E->Bot.Y;
+ if (E->Dx < E->Prev->Dx)
+ {
+ locMin.LeftBound = E->Prev;
+ locMin.RightBound = E;
+ leftBoundIsForward = false; //Q.nextInLML = Q.prev
+ } else
+ {
+ locMin.LeftBound = E;
+ locMin.RightBound = E->Prev;
+ leftBoundIsForward = true; //Q.nextInLML = Q.next
+ }
+ locMin.LeftBound->Side = esLeft;
+ locMin.RightBound->Side = esRight;
+
+ if (!Closed) locMin.LeftBound->WindDelta = 0;
+ else if (locMin.LeftBound->Next == locMin.RightBound)
+ locMin.LeftBound->WindDelta = -1;
+ else locMin.LeftBound->WindDelta = 1;
+ locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta;
+
+ E = ProcessBound(locMin.LeftBound, leftBoundIsForward);
+ if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward);
+
+ TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward);
+ if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward);
+
+ if (locMin.LeftBound->OutIdx == Skip)
+ locMin.LeftBound = 0;
+ else if (locMin.RightBound->OutIdx == Skip)
+ locMin.RightBound = 0;
+ m_MinimaList.push_back(locMin);
+ if (!leftBoundIsForward) E = E2;
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
+{
+ bool result = false;
+ for (Paths::size_type i = 0; i < ppg.size(); ++i)
+ if (AddPath(ppg[i], PolyTyp, Closed)) result = true;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void ClipperBase::Clear()
+{
+ DisposeLocalMinimaList();
+ for (EdgeList::size_type i = 0; i < m_edges.size(); ++i)
+ {
+ //for each edge array in turn, find the first used edge and
+ //check for and remove any hiddenPts in each edge in the array.
+ TEdge* edges = m_edges[i];
+ delete [] edges;
+ }
+ m_edges.clear();
+ m_UseFullRange = false;
+ m_HasOpenPaths = false;
+}
+//------------------------------------------------------------------------------
+
+void ClipperBase::Reset()
+{
+ m_CurrentLM = m_MinimaList.begin();
+ if (m_CurrentLM == m_MinimaList.end()) return; //ie nothing to process
+ std::sort(m_MinimaList.begin(), m_MinimaList.end(), LocMinSorter());
+
+ //reset all edges ...
+ for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm)
+ {
+ TEdge* e = lm->LeftBound;
+ if (e)
+ {
+ e->Curr = e->Bot;
+ e->Side = esLeft;
+ e->OutIdx = Unassigned;
+ }
+
+ e = lm->RightBound;
+ if (e)
+ {
+ e->Curr = e->Bot;
+ e->Side = esRight;
+ e->OutIdx = Unassigned;
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperBase::DisposeLocalMinimaList()
+{
+ m_MinimaList.clear();
+ m_CurrentLM = m_MinimaList.begin();
+}
+//------------------------------------------------------------------------------
+
+void ClipperBase::PopLocalMinima()
+{
+ if (m_CurrentLM == m_MinimaList.end()) return;
+ ++m_CurrentLM;
+}
+//------------------------------------------------------------------------------
+
+IntRect ClipperBase::GetBounds()
+{
+ IntRect result;
+ MinimaList::iterator lm = m_MinimaList.begin();
+ if (lm == m_MinimaList.end())
+ {
+ result.left = result.top = result.right = result.bottom = 0;
+ return result;
+ }
+ result.left = lm->LeftBound->Bot.X;
+ result.top = lm->LeftBound->Bot.Y;
+ result.right = lm->LeftBound->Bot.X;
+ result.bottom = lm->LeftBound->Bot.Y;
+ while (lm != m_MinimaList.end())
+ {
+ result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y);
+ TEdge* e = lm->LeftBound;
+ for (;;) {
+ TEdge* bottomE = e;
+ while (e->NextInLML)
+ {
+ if (e->Bot.X < result.left) result.left = e->Bot.X;
+ if (e->Bot.X > result.right) result.right = e->Bot.X;
+ e = e->NextInLML;
+ }
+ result.left = std::min(result.left, e->Bot.X);
+ result.right = std::max(result.right, e->Bot.X);
+ result.left = std::min(result.left, e->Top.X);
+ result.right = std::max(result.right, e->Top.X);
+ result.top = std::min(result.top, e->Top.Y);
+ if (bottomE == lm->LeftBound) e = lm->RightBound;
+ else break;
+ }
+ ++lm;
+ }
+ return result;
+}
+
+//------------------------------------------------------------------------------
+// TClipper methods ...
+//------------------------------------------------------------------------------
+
+Clipper::Clipper(int initOptions) : ClipperBase() //constructor
+{
+ m_ActiveEdges = 0;
+ m_SortedEdges = 0;
+ m_ExecuteLocked = false;
+ m_UseFullRange = false;
+ m_ReverseOutput = ((initOptions & ioReverseSolution) != 0);
+ m_StrictSimple = ((initOptions & ioStrictlySimple) != 0);
+ m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0);
+ m_HasOpenPaths = false;
+#ifdef use_xyz
+ m_ZFill = 0;
+#endif
+}
+//------------------------------------------------------------------------------
+
+Clipper::~Clipper() //destructor
+{
+ Clear();
+}
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+void Clipper::ZFillFunction(ZFillCallback zFillFunc)
+{
+ m_ZFill = zFillFunc;
+}
+//------------------------------------------------------------------------------
+#endif
+
+void Clipper::Reset()
+{
+ ClipperBase::Reset();
+ m_Scanbeam = ScanbeamList();
+ m_ActiveEdges = 0;
+ m_SortedEdges = 0;
+ for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm)
+ InsertScanbeam(lm->Y);
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::Execute(ClipType clipType, Paths &solution,
+ PolyFillType subjFillType, PolyFillType clipFillType)
+{
+ if( m_ExecuteLocked ) return false;
+ if (m_HasOpenPaths)
+ throw clipperException("Error: PolyTree struct is need for open path clipping.");
+ m_ExecuteLocked = true;
+ solution.resize(0);
+ m_SubjFillType = subjFillType;
+ m_ClipFillType = clipFillType;
+ m_ClipType = clipType;
+ m_UsingPolyTree = false;
+ bool succeeded = ExecuteInternal();
+ if (succeeded) BuildResult(solution);
+ DisposeAllOutRecs();
+ m_ExecuteLocked = false;
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::Execute(ClipType clipType, PolyTree& polytree,
+ PolyFillType subjFillType, PolyFillType clipFillType)
+{
+ if( m_ExecuteLocked ) return false;
+ m_ExecuteLocked = true;
+ m_SubjFillType = subjFillType;
+ m_ClipFillType = clipFillType;
+ m_ClipType = clipType;
+ m_UsingPolyTree = true;
+ bool succeeded = ExecuteInternal();
+ if (succeeded) BuildResult2(polytree);
+ DisposeAllOutRecs();
+ m_ExecuteLocked = false;
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::FixHoleLinkage(OutRec &outrec)
+{
+ //skip OutRecs that (a) contain outermost polygons or
+ //(b) already have the correct owner/child linkage ...
+ if (!outrec.FirstLeft ||
+ (outrec.IsHole != outrec.FirstLeft->IsHole &&
+ outrec.FirstLeft->Pts)) return;
+
+ OutRec* orfl = outrec.FirstLeft;
+ while (orfl && ((orfl->IsHole == outrec.IsHole) || !orfl->Pts))
+ orfl = orfl->FirstLeft;
+ outrec.FirstLeft = orfl;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::ExecuteInternal()
+{
+ bool succeeded = true;
+ try {
+ Reset();
+ if (m_CurrentLM == m_MinimaList.end()) return true;
+ cInt botY = PopScanbeam();
+ do {
+ InsertLocalMinimaIntoAEL(botY);
+ ClearGhostJoins();
+ ProcessHorizontals(false);
+ if (m_Scanbeam.empty()) break;
+ cInt topY = PopScanbeam();
+ succeeded = ProcessIntersections(topY);
+ if (!succeeded) break;
+ ProcessEdgesAtTopOfScanbeam(topY);
+ botY = topY;
+ } while (!m_Scanbeam.empty() || m_CurrentLM != m_MinimaList.end());
+ }
+ catch(...)
+ {
+ succeeded = false;
+ }
+
+ if (succeeded)
+ {
+ //fix orientations ...
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ {
+ OutRec *outRec = m_PolyOuts[i];
+ if (!outRec->Pts || outRec->IsOpen) continue;
+ if ((outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0))
+ ReversePolyPtLinks(outRec->Pts);
+ }
+
+ if (!m_Joins.empty()) JoinCommonEdges();
+
+ //unfortunately FixupOutPolygon() must be done after JoinCommonEdges()
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ {
+ OutRec *outRec = m_PolyOuts[i];
+ if (outRec->Pts && !outRec->IsOpen)
+ FixupOutPolygon(*outRec);
+ }
+
+ if (m_StrictSimple) DoSimplePolygons();
+ }
+
+ ClearJoins();
+ ClearGhostJoins();
+ return succeeded;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::InsertScanbeam(const cInt Y)
+{
+ //if (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) return;// avoid duplicates.
+ m_Scanbeam.push(Y);
+}
+//------------------------------------------------------------------------------
+
+cInt Clipper::PopScanbeam()
+{
+ const cInt Y = m_Scanbeam.top();
+ m_Scanbeam.pop();
+ while (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) { m_Scanbeam.pop(); } // Pop duplicates.
+ return Y;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DisposeAllOutRecs(){
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ DisposeOutRec(i);
+ m_PolyOuts.clear();
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DisposeOutRec(PolyOutList::size_type index)
+{
+ OutRec *outRec = m_PolyOuts[index];
+ if (outRec->Pts) DisposeOutPts(outRec->Pts);
+ delete outRec;
+ m_PolyOuts[index] = 0;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SetWindingCount(TEdge &edge)
+{
+ TEdge *e = edge.PrevInAEL;
+ //find the edge of the same polytype that immediately preceeds 'edge' in AEL
+ while (e && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL;
+ if (!e)
+ {
+ edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
+ edge.WindCnt2 = 0;
+ e = m_ActiveEdges; //ie get ready to calc WindCnt2
+ }
+ else if (edge.WindDelta == 0 && m_ClipType != ctUnion)
+ {
+ edge.WindCnt = 1;
+ edge.WindCnt2 = e->WindCnt2;
+ e = e->NextInAEL; //ie get ready to calc WindCnt2
+ }
+ else if (IsEvenOddFillType(edge))
+ {
+ //EvenOdd filling ...
+ if (edge.WindDelta == 0)
+ {
+ //are we inside a subj polygon ...
+ bool Inside = true;
+ TEdge *e2 = e->PrevInAEL;
+ while (e2)
+ {
+ if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0)
+ Inside = !Inside;
+ e2 = e2->PrevInAEL;
+ }
+ edge.WindCnt = (Inside ? 0 : 1);
+ }
+ else
+ {
+ edge.WindCnt = edge.WindDelta;
+ }
+ edge.WindCnt2 = e->WindCnt2;
+ e = e->NextInAEL; //ie get ready to calc WindCnt2
+ }
+ else
+ {
+ //nonZero, Positive or Negative filling ...
+ if (e->WindCnt * e->WindDelta < 0)
+ {
+ //prev edge is 'decreasing' WindCount (WC) toward zero
+ //so we're outside the previous polygon ...
+ if (Abs(e->WindCnt) > 1)
+ {
+ //outside prev poly but still inside another.
+ //when reversing direction of prev poly use the same WC
+ if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+ //otherwise continue to 'decrease' WC ...
+ else edge.WindCnt = e->WindCnt + edge.WindDelta;
+ }
+ else
+ //now outside all polys of same polytype so set own WC ...
+ edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);
+ } else
+ {
+ //prev edge is 'increasing' WindCount (WC) away from zero
+ //so we're inside the previous polygon ...
+ if (edge.WindDelta == 0)
+ edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1);
+ //if wind direction is reversing prev then use same WC
+ else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;
+ //otherwise add to WC ...
+ else edge.WindCnt = e->WindCnt + edge.WindDelta;
+ }
+ edge.WindCnt2 = e->WindCnt2;
+ e = e->NextInAEL; //ie get ready to calc WindCnt2
+ }
+
+ //update WindCnt2 ...
+ if (IsEvenOddAltFillType(edge))
+ {
+ //EvenOdd filling ...
+ while (e != &edge)
+ {
+ if (e->WindDelta != 0)
+ edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0);
+ e = e->NextInAEL;
+ }
+ } else
+ {
+ //nonZero, Positive or Negative filling ...
+ while ( e != &edge )
+ {
+ edge.WindCnt2 += e->WindDelta;
+ e = e->NextInAEL;
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::IsEvenOddFillType(const TEdge& edge) const
+{
+ if (edge.PolyTyp == ptSubject)
+ return m_SubjFillType == pftEvenOdd; else
+ return m_ClipFillType == pftEvenOdd;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::IsEvenOddAltFillType(const TEdge& edge) const
+{
+ if (edge.PolyTyp == ptSubject)
+ return m_ClipFillType == pftEvenOdd; else
+ return m_SubjFillType == pftEvenOdd;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::IsContributing(const TEdge& edge) const
+{
+ PolyFillType pft, pft2;
+ if (edge.PolyTyp == ptSubject)
+ {
+ pft = m_SubjFillType;
+ pft2 = m_ClipFillType;
+ } else
+ {
+ pft = m_ClipFillType;
+ pft2 = m_SubjFillType;
+ }
+
+ switch(pft)
+ {
+ case pftEvenOdd:
+ //return false if a subj line has been flagged as inside a subj polygon
+ if (edge.WindDelta == 0 && edge.WindCnt != 1) return false;
+ break;
+ case pftNonZero:
+ if (Abs(edge.WindCnt) != 1) return false;
+ break;
+ case pftPositive:
+ if (edge.WindCnt != 1) return false;
+ break;
+ default: //pftNegative
+ if (edge.WindCnt != -1) return false;
+ }
+
+ switch(m_ClipType)
+ {
+ case ctIntersection:
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 != 0);
+ case pftPositive:
+ return (edge.WindCnt2 > 0);
+ default:
+ return (edge.WindCnt2 < 0);
+ }
+ break;
+ case ctUnion:
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 == 0);
+ case pftPositive:
+ return (edge.WindCnt2 <= 0);
+ default:
+ return (edge.WindCnt2 >= 0);
+ }
+ break;
+ case ctDifference:
+ if (edge.PolyTyp == ptSubject)
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 == 0);
+ case pftPositive:
+ return (edge.WindCnt2 <= 0);
+ default:
+ return (edge.WindCnt2 >= 0);
+ }
+ else
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 != 0);
+ case pftPositive:
+ return (edge.WindCnt2 > 0);
+ default:
+ return (edge.WindCnt2 < 0);
+ }
+ break;
+ case ctXor:
+ if (edge.WindDelta == 0) //XOr always contributing unless open
+ switch(pft2)
+ {
+ case pftEvenOdd:
+ case pftNonZero:
+ return (edge.WindCnt2 == 0);
+ case pftPositive:
+ return (edge.WindCnt2 <= 0);
+ default:
+ return (edge.WindCnt2 >= 0);
+ }
+ else
+ return true;
+ break;
+ default:
+ return true;
+ }
+}
+//------------------------------------------------------------------------------
+
+OutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
+{
+ OutPt* result;
+ TEdge *e, *prevE;
+ if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx ))
+ {
+ result = AddOutPt(e1, Pt);
+ e2->OutIdx = e1->OutIdx;
+ e1->Side = esLeft;
+ e2->Side = esRight;
+ e = e1;
+ if (e->PrevInAEL == e2)
+ prevE = e2->PrevInAEL;
+ else
+ prevE = e->PrevInAEL;
+ } else
+ {
+ result = AddOutPt(e2, Pt);
+ e1->OutIdx = e2->OutIdx;
+ e1->Side = esRight;
+ e2->Side = esLeft;
+ e = e2;
+ if (e->PrevInAEL == e1)
+ prevE = e1->PrevInAEL;
+ else
+ prevE = e->PrevInAEL;
+ }
+
+ if (prevE && prevE->OutIdx >= 0 &&
+ (TopX(*prevE, Pt.Y) == TopX(*e, Pt.Y)) &&
+ SlopesEqual(*e, *prevE, m_UseFullRange) &&
+ (e->WindDelta != 0) && (prevE->WindDelta != 0))
+ {
+ OutPt* outPt = AddOutPt(prevE, Pt);
+ AddJoin(result, outPt, e->Top);
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)
+{
+ AddOutPt( e1, Pt );
+ if (e2->WindDelta == 0) AddOutPt(e2, Pt);
+ if( e1->OutIdx == e2->OutIdx )
+ {
+ e1->OutIdx = Unassigned;
+ e2->OutIdx = Unassigned;
+ }
+ else if (e1->OutIdx < e2->OutIdx)
+ AppendPolygon(e1, e2);
+ else
+ AppendPolygon(e2, e1);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AddEdgeToSEL(TEdge *edge)
+{
+ //SEL pointers in PEdge are reused to build a list of horizontal edges.
+ //However, we don't need to worry about order with horizontal edge processing.
+ if( !m_SortedEdges )
+ {
+ m_SortedEdges = edge;
+ edge->PrevInSEL = 0;
+ edge->NextInSEL = 0;
+ }
+ else
+ {
+ edge->NextInSEL = m_SortedEdges;
+ edge->PrevInSEL = 0;
+ m_SortedEdges->PrevInSEL = edge;
+ m_SortedEdges = edge;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::CopyAELToSEL()
+{
+ TEdge* e = m_ActiveEdges;
+ m_SortedEdges = e;
+ while ( e )
+ {
+ e->PrevInSEL = e->PrevInAEL;
+ e->NextInSEL = e->NextInAEL;
+ e = e->NextInAEL;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AddJoin(OutPt *op1, OutPt *op2, const IntPoint OffPt)
+{
+ Join* j = new Join;
+ j->OutPt1 = op1;
+ j->OutPt2 = op2;
+ j->OffPt = OffPt;
+ m_Joins.push_back(j);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ClearJoins()
+{
+ for (JoinList::size_type i = 0; i < m_Joins.size(); i++)
+ delete m_Joins[i];
+ m_Joins.resize(0);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ClearGhostJoins()
+{
+ for (JoinList::size_type i = 0; i < m_GhostJoins.size(); i++)
+ delete m_GhostJoins[i];
+ m_GhostJoins.resize(0);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AddGhostJoin(OutPt *op, const IntPoint OffPt)
+{
+ Join* j = new Join;
+ j->OutPt1 = op;
+ j->OutPt2 = 0;
+ j->OffPt = OffPt;
+ m_GhostJoins.push_back(j);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::InsertLocalMinimaIntoAEL(const cInt botY)
+{
+ while (m_CurrentLM != m_MinimaList.end() && (m_CurrentLM->Y == botY))
+ {
+ TEdge* lb = m_CurrentLM->LeftBound;
+ TEdge* rb = m_CurrentLM->RightBound;
+ PopLocalMinima();
+ OutPt *Op1 = 0;
+ if (!lb)
+ {
+ //nb: don't insert LB into either AEL or SEL
+ InsertEdgeIntoAEL(rb, 0);
+ SetWindingCount(*rb);
+ if (IsContributing(*rb))
+ Op1 = AddOutPt(rb, rb->Bot);
+ }
+ else if (!rb)
+ {
+ InsertEdgeIntoAEL(lb, 0);
+ SetWindingCount(*lb);
+ if (IsContributing(*lb))
+ Op1 = AddOutPt(lb, lb->Bot);
+ InsertScanbeam(lb->Top.Y);
+ }
+ else
+ {
+ InsertEdgeIntoAEL(lb, 0);
+ InsertEdgeIntoAEL(rb, lb);
+ SetWindingCount( *lb );
+ rb->WindCnt = lb->WindCnt;
+ rb->WindCnt2 = lb->WindCnt2;
+ if (IsContributing(*lb))
+ Op1 = AddLocalMinPoly(lb, rb, lb->Bot);
+ InsertScanbeam(lb->Top.Y);
+ }
+
+ if (rb)
+ {
+ if(IsHorizontal(*rb)) AddEdgeToSEL(rb);
+ else InsertScanbeam( rb->Top.Y );
+ }
+
+ if (!lb || !rb) continue;
+
+ //if any output polygons share an edge, they'll need joining later ...
+ if (Op1 && IsHorizontal(*rb) &&
+ m_GhostJoins.size() > 0 && (rb->WindDelta != 0))
+ {
+ for (JoinList::size_type i = 0; i < m_GhostJoins.size(); ++i)
+ {
+ Join* jr = m_GhostJoins[i];
+ //if the horizontal Rb and a 'ghost' horizontal overlap, then convert
+ //the 'ghost' join to a real join ready for later ...
+ if (HorzSegmentsOverlap(jr->OutPt1->Pt.X, jr->OffPt.X, rb->Bot.X, rb->Top.X))
+ AddJoin(jr->OutPt1, Op1, jr->OffPt);
+ }
+ }
+
+ if (lb->OutIdx >= 0 && lb->PrevInAEL &&
+ lb->PrevInAEL->Curr.X == lb->Bot.X &&
+ lb->PrevInAEL->OutIdx >= 0 &&
+ SlopesEqual(*lb->PrevInAEL, *lb, m_UseFullRange) &&
+ (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0))
+ {
+ OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot);
+ AddJoin(Op1, Op2, lb->Top);
+ }
+
+ if(lb->NextInAEL != rb)
+ {
+
+ if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 &&
+ SlopesEqual(*rb->PrevInAEL, *rb, m_UseFullRange) &&
+ (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0))
+ {
+ OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot);
+ AddJoin(Op1, Op2, rb->Top);
+ }
+
+ TEdge* e = lb->NextInAEL;
+ if (e)
+ {
+ while( e != rb )
+ {
+ //nb: For calculating winding counts etc, IntersectEdges() assumes
+ //that param1 will be to the Right of param2 ABOVE the intersection ...
+ IntersectEdges(rb , e , lb->Curr); //order important here
+ e = e->NextInAEL;
+ }
+ }
+ }
+
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DeleteFromAEL(TEdge *e)
+{
+ TEdge* AelPrev = e->PrevInAEL;
+ TEdge* AelNext = e->NextInAEL;
+ if( !AelPrev && !AelNext && (e != m_ActiveEdges) ) return; //already deleted
+ if( AelPrev ) AelPrev->NextInAEL = AelNext;
+ else m_ActiveEdges = AelNext;
+ if( AelNext ) AelNext->PrevInAEL = AelPrev;
+ e->NextInAEL = 0;
+ e->PrevInAEL = 0;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DeleteFromSEL(TEdge *e)
+{
+ TEdge* SelPrev = e->PrevInSEL;
+ TEdge* SelNext = e->NextInSEL;
+ if( !SelPrev && !SelNext && (e != m_SortedEdges) ) return; //already deleted
+ if( SelPrev ) SelPrev->NextInSEL = SelNext;
+ else m_SortedEdges = SelNext;
+ if( SelNext ) SelNext->PrevInSEL = SelPrev;
+ e->NextInSEL = 0;
+ e->PrevInSEL = 0;
+}
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+void Clipper::SetZ(IntPoint& pt, TEdge& e1, TEdge& e2)
+{
+ if (pt.Z != 0 || !m_ZFill) return;
+ else if (pt == e1.Bot) pt.Z = e1.Bot.Z;
+ else if (pt == e1.Top) pt.Z = e1.Top.Z;
+ else if (pt == e2.Bot) pt.Z = e2.Bot.Z;
+ else if (pt == e2.Top) pt.Z = e2.Top.Z;
+ else (*m_ZFill)(e1.Bot, e1.Top, e2.Bot, e2.Top, pt);
+}
+//------------------------------------------------------------------------------
+#endif
+
+void Clipper::IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &Pt)
+{
+ bool e1Contributing = ( e1->OutIdx >= 0 );
+ bool e2Contributing = ( e2->OutIdx >= 0 );
+
+#ifdef use_xyz
+ SetZ(Pt, *e1, *e2);
+#endif
+
+#ifdef use_lines
+ //if either edge is on an OPEN path ...
+ if (e1->WindDelta == 0 || e2->WindDelta == 0)
+ {
+ //ignore subject-subject open path intersections UNLESS they
+ //are both open paths, AND they are both 'contributing maximas' ...
+ if (e1->WindDelta == 0 && e2->WindDelta == 0) return;
+
+ //if intersecting a subj line with a subj poly ...
+ else if (e1->PolyTyp == e2->PolyTyp &&
+ e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion)
+ {
+ if (e1->WindDelta == 0)
+ {
+ if (e2Contributing)
+ {
+ AddOutPt(e1, Pt);
+ if (e1Contributing) e1->OutIdx = Unassigned;
+ }
+ }
+ else
+ {
+ if (e1Contributing)
+ {
+ AddOutPt(e2, Pt);
+ if (e2Contributing) e2->OutIdx = Unassigned;
+ }
+ }
+ }
+ else if (e1->PolyTyp != e2->PolyTyp)
+ {
+ //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ...
+ if ((e1->WindDelta == 0) && abs(e2->WindCnt) == 1 &&
+ (m_ClipType != ctUnion || e2->WindCnt2 == 0))
+ {
+ AddOutPt(e1, Pt);
+ if (e1Contributing) e1->OutIdx = Unassigned;
+ }
+ else if ((e2->WindDelta == 0) && (abs(e1->WindCnt) == 1) &&
+ (m_ClipType != ctUnion || e1->WindCnt2 == 0))
+ {
+ AddOutPt(e2, Pt);
+ if (e2Contributing) e2->OutIdx = Unassigned;
+ }
+ }
+ return;
+ }
+#endif
+
+ //update winding counts...
+ //assumes that e1 will be to the Right of e2 ABOVE the intersection
+ if ( e1->PolyTyp == e2->PolyTyp )
+ {
+ if ( IsEvenOddFillType( *e1) )
+ {
+ int oldE1WindCnt = e1->WindCnt;
+ e1->WindCnt = e2->WindCnt;
+ e2->WindCnt = oldE1WindCnt;
+ } else
+ {
+ if (e1->WindCnt + e2->WindDelta == 0 ) e1->WindCnt = -e1->WindCnt;
+ else e1->WindCnt += e2->WindDelta;
+ if ( e2->WindCnt - e1->WindDelta == 0 ) e2->WindCnt = -e2->WindCnt;
+ else e2->WindCnt -= e1->WindDelta;
+ }
+ } else
+ {
+ if (!IsEvenOddFillType(*e2)) e1->WindCnt2 += e2->WindDelta;
+ else e1->WindCnt2 = ( e1->WindCnt2 == 0 ) ? 1 : 0;
+ if (!IsEvenOddFillType(*e1)) e2->WindCnt2 -= e1->WindDelta;
+ else e2->WindCnt2 = ( e2->WindCnt2 == 0 ) ? 1 : 0;
+ }
+
+ PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2;
+ if (e1->PolyTyp == ptSubject)
+ {
+ e1FillType = m_SubjFillType;
+ e1FillType2 = m_ClipFillType;
+ } else
+ {
+ e1FillType = m_ClipFillType;
+ e1FillType2 = m_SubjFillType;
+ }
+ if (e2->PolyTyp == ptSubject)
+ {
+ e2FillType = m_SubjFillType;
+ e2FillType2 = m_ClipFillType;
+ } else
+ {
+ e2FillType = m_ClipFillType;
+ e2FillType2 = m_SubjFillType;
+ }
+
+ cInt e1Wc, e2Wc;
+ switch (e1FillType)
+ {
+ case pftPositive: e1Wc = e1->WindCnt; break;
+ case pftNegative: e1Wc = -e1->WindCnt; break;
+ default: e1Wc = Abs(e1->WindCnt);
+ }
+ switch(e2FillType)
+ {
+ case pftPositive: e2Wc = e2->WindCnt; break;
+ case pftNegative: e2Wc = -e2->WindCnt; break;
+ default: e2Wc = Abs(e2->WindCnt);
+ }
+
+ if ( e1Contributing && e2Contributing )
+ {
+ if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||
+ (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) )
+ {
+ AddLocalMaxPoly(e1, e2, Pt);
+ }
+ else
+ {
+ AddOutPt(e1, Pt);
+ AddOutPt(e2, Pt);
+ SwapSides( *e1 , *e2 );
+ SwapPolyIndexes( *e1 , *e2 );
+ }
+ }
+ else if ( e1Contributing )
+ {
+ if (e2Wc == 0 || e2Wc == 1)
+ {
+ AddOutPt(e1, Pt);
+ SwapSides(*e1, *e2);
+ SwapPolyIndexes(*e1, *e2);
+ }
+ }
+ else if ( e2Contributing )
+ {
+ if (e1Wc == 0 || e1Wc == 1)
+ {
+ AddOutPt(e2, Pt);
+ SwapSides(*e1, *e2);
+ SwapPolyIndexes(*e1, *e2);
+ }
+ }
+ else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1))
+ {
+ //neither edge is currently contributing ...
+
+ cInt e1Wc2, e2Wc2;
+ switch (e1FillType2)
+ {
+ case pftPositive: e1Wc2 = e1->WindCnt2; break;
+ case pftNegative : e1Wc2 = -e1->WindCnt2; break;
+ default: e1Wc2 = Abs(e1->WindCnt2);
+ }
+ switch (e2FillType2)
+ {
+ case pftPositive: e2Wc2 = e2->WindCnt2; break;
+ case pftNegative: e2Wc2 = -e2->WindCnt2; break;
+ default: e2Wc2 = Abs(e2->WindCnt2);
+ }
+
+ if (e1->PolyTyp != e2->PolyTyp)
+ {
+ AddLocalMinPoly(e1, e2, Pt);
+ }
+ else if (e1Wc == 1 && e2Wc == 1)
+ switch( m_ClipType ) {
+ case ctIntersection:
+ if (e1Wc2 > 0 && e2Wc2 > 0)
+ AddLocalMinPoly(e1, e2, Pt);
+ break;
+ case ctUnion:
+ if ( e1Wc2 <= 0 && e2Wc2 <= 0 )
+ AddLocalMinPoly(e1, e2, Pt);
+ break;
+ case ctDifference:
+ if (((e1->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
+ ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
+ AddLocalMinPoly(e1, e2, Pt);
+ break;
+ case ctXor:
+ AddLocalMinPoly(e1, e2, Pt);
+ }
+ else
+ SwapSides( *e1, *e2 );
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SetHoleState(TEdge *e, OutRec *outrec)
+{
+ bool IsHole = false;
+ TEdge *e2 = e->PrevInAEL;
+ while (e2)
+ {
+ if (e2->OutIdx >= 0 && e2->WindDelta != 0)
+ {
+ IsHole = !IsHole;
+ if (! outrec->FirstLeft)
+ outrec->FirstLeft = m_PolyOuts[e2->OutIdx];
+ }
+ e2 = e2->PrevInAEL;
+ }
+ if (IsHole) outrec->IsHole = true;
+}
+//------------------------------------------------------------------------------
+
+OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2)
+{
+ //work out which polygon fragment has the correct hole state ...
+ if (!outRec1->BottomPt)
+ outRec1->BottomPt = GetBottomPt(outRec1->Pts);
+ if (!outRec2->BottomPt)
+ outRec2->BottomPt = GetBottomPt(outRec2->Pts);
+ OutPt *OutPt1 = outRec1->BottomPt;
+ OutPt *OutPt2 = outRec2->BottomPt;
+ if (OutPt1->Pt.Y > OutPt2->Pt.Y) return outRec1;
+ else if (OutPt1->Pt.Y < OutPt2->Pt.Y) return outRec2;
+ else if (OutPt1->Pt.X < OutPt2->Pt.X) return outRec1;
+ else if (OutPt1->Pt.X > OutPt2->Pt.X) return outRec2;
+ else if (OutPt1->Next == OutPt1) return outRec2;
+ else if (OutPt2->Next == OutPt2) return outRec1;
+ else if (FirstIsBottomPt(OutPt1, OutPt2)) return outRec1;
+ else return outRec2;
+}
+//------------------------------------------------------------------------------
+
+bool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2)
+{
+ do
+ {
+ outRec1 = outRec1->FirstLeft;
+ if (outRec1 == outRec2) return true;
+ } while (outRec1);
+ return false;
+}
+//------------------------------------------------------------------------------
+
+OutRec* Clipper::GetOutRec(int Idx)
+{
+ OutRec* outrec = m_PolyOuts[Idx];
+ while (outrec != m_PolyOuts[outrec->Idx])
+ outrec = m_PolyOuts[outrec->Idx];
+ return outrec;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::AppendPolygon(TEdge *e1, TEdge *e2)
+{
+ //get the start and ends of both output polygons ...
+ OutRec *outRec1 = m_PolyOuts[e1->OutIdx];
+ OutRec *outRec2 = m_PolyOuts[e2->OutIdx];
+
+ OutRec *holeStateRec;
+ if (Param1RightOfParam2(outRec1, outRec2))
+ holeStateRec = outRec2;
+ else if (Param1RightOfParam2(outRec2, outRec1))
+ holeStateRec = outRec1;
+ else
+ holeStateRec = GetLowermostRec(outRec1, outRec2);
+
+ //get the start and ends of both output polygons and
+ //join e2 poly onto e1 poly and delete pointers to e2 ...
+
+ OutPt* p1_lft = outRec1->Pts;
+ OutPt* p1_rt = p1_lft->Prev;
+ OutPt* p2_lft = outRec2->Pts;
+ OutPt* p2_rt = p2_lft->Prev;
+
+ EdgeSide Side;
+ //join e2 poly onto e1 poly and delete pointers to e2 ...
+ if( e1->Side == esLeft )
+ {
+ if( e2->Side == esLeft )
+ {
+ //z y x a b c
+ ReversePolyPtLinks(p2_lft);
+ p2_lft->Next = p1_lft;
+ p1_lft->Prev = p2_lft;
+ p1_rt->Next = p2_rt;
+ p2_rt->Prev = p1_rt;
+ outRec1->Pts = p2_rt;
+ } else
+ {
+ //x y z a b c
+ p2_rt->Next = p1_lft;
+ p1_lft->Prev = p2_rt;
+ p2_lft->Prev = p1_rt;
+ p1_rt->Next = p2_lft;
+ outRec1->Pts = p2_lft;
+ }
+ Side = esLeft;
+ } else
+ {
+ if( e2->Side == esRight )
+ {
+ //a b c z y x
+ ReversePolyPtLinks(p2_lft);
+ p1_rt->Next = p2_rt;
+ p2_rt->Prev = p1_rt;
+ p2_lft->Next = p1_lft;
+ p1_lft->Prev = p2_lft;
+ } else
+ {
+ //a b c x y z
+ p1_rt->Next = p2_lft;
+ p2_lft->Prev = p1_rt;
+ p1_lft->Prev = p2_rt;
+ p2_rt->Next = p1_lft;
+ }
+ Side = esRight;
+ }
+
+ outRec1->BottomPt = 0;
+ if (holeStateRec == outRec2)
+ {
+ if (outRec2->FirstLeft != outRec1)
+ outRec1->FirstLeft = outRec2->FirstLeft;
+ outRec1->IsHole = outRec2->IsHole;
+ }
+ outRec2->Pts = 0;
+ outRec2->BottomPt = 0;
+ outRec2->FirstLeft = outRec1;
+
+ int OKIdx = e1->OutIdx;
+ int ObsoleteIdx = e2->OutIdx;
+
+ e1->OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly
+ e2->OutIdx = Unassigned;
+
+ TEdge* e = m_ActiveEdges;
+ while( e )
+ {
+ if( e->OutIdx == ObsoleteIdx )
+ {
+ e->OutIdx = OKIdx;
+ e->Side = Side;
+ break;
+ }
+ e = e->NextInAEL;
+ }
+
+ outRec2->Idx = outRec1->Idx;
+}
+//------------------------------------------------------------------------------
+
+OutRec* Clipper::CreateOutRec()
+{
+ OutRec* result = new OutRec;
+ result->IsHole = false;
+ result->IsOpen = false;
+ result->FirstLeft = 0;
+ result->Pts = 0;
+ result->BottomPt = 0;
+ result->PolyNd = 0;
+ m_PolyOuts.push_back(result);
+ result->Idx = (int)m_PolyOuts.size()-1;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+OutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
+{
+ bool ToFront = (e->Side == esLeft);
+ if( e->OutIdx < 0 )
+ {
+ OutRec *outRec = CreateOutRec();
+ outRec->IsOpen = (e->WindDelta == 0);
+ OutPt* newOp = new OutPt;
+ outRec->Pts = newOp;
+ newOp->Idx = outRec->Idx;
+ newOp->Pt = pt;
+ newOp->Next = newOp;
+ newOp->Prev = newOp;
+ if (!outRec->IsOpen)
+ SetHoleState(e, outRec);
+ e->OutIdx = outRec->Idx;
+ return newOp;
+ } else
+ {
+ OutRec *outRec = m_PolyOuts[e->OutIdx];
+ //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most'
+ OutPt* op = outRec->Pts;
+
+ if (ToFront && (pt == op->Pt)) return op;
+ else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev;
+
+ OutPt* newOp = new OutPt;
+ newOp->Idx = outRec->Idx;
+ newOp->Pt = pt;
+ newOp->Next = op;
+ newOp->Prev = op->Prev;
+ newOp->Prev->Next = newOp;
+ op->Prev = newOp;
+ if (ToFront) outRec->Pts = newOp;
+ return newOp;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ProcessHorizontals(bool IsTopOfScanbeam)
+{
+ TEdge* horzEdge = m_SortedEdges;
+ while(horzEdge)
+ {
+ DeleteFromSEL(horzEdge);
+ ProcessHorizontal(horzEdge, IsTopOfScanbeam);
+ horzEdge = m_SortedEdges;
+ }
+}
+//------------------------------------------------------------------------------
+
+inline bool IsMinima(TEdge *e)
+{
+ return e && (e->Prev->NextInLML != e) && (e->Next->NextInLML != e);
+}
+//------------------------------------------------------------------------------
+
+inline bool IsMaxima(TEdge *e, const cInt Y)
+{
+ return e && e->Top.Y == Y && !e->NextInLML;
+}
+//------------------------------------------------------------------------------
+
+inline bool IsIntermediate(TEdge *e, const cInt Y)
+{
+ return e->Top.Y == Y && e->NextInLML;
+}
+//------------------------------------------------------------------------------
+
+TEdge *GetMaximaPair(TEdge *e)
+{
+ TEdge* result = 0;
+ if ((e->Next->Top == e->Top) && !e->Next->NextInLML)
+ result = e->Next;
+ else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML)
+ result = e->Prev;
+
+ if (result && (result->OutIdx == Skip ||
+ //result is false if both NextInAEL & PrevInAEL are nil & not horizontal ...
+ (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result))))
+ return 0;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2)
+{
+ //check that one or other edge hasn't already been removed from AEL ...
+ if (Edge1->NextInAEL == Edge1->PrevInAEL ||
+ Edge2->NextInAEL == Edge2->PrevInAEL) return;
+
+ if( Edge1->NextInAEL == Edge2 )
+ {
+ TEdge* Next = Edge2->NextInAEL;
+ if( Next ) Next->PrevInAEL = Edge1;
+ TEdge* Prev = Edge1->PrevInAEL;
+ if( Prev ) Prev->NextInAEL = Edge2;
+ Edge2->PrevInAEL = Prev;
+ Edge2->NextInAEL = Edge1;
+ Edge1->PrevInAEL = Edge2;
+ Edge1->NextInAEL = Next;
+ }
+ else if( Edge2->NextInAEL == Edge1 )
+ {
+ TEdge* Next = Edge1->NextInAEL;
+ if( Next ) Next->PrevInAEL = Edge2;
+ TEdge* Prev = Edge2->PrevInAEL;
+ if( Prev ) Prev->NextInAEL = Edge1;
+ Edge1->PrevInAEL = Prev;
+ Edge1->NextInAEL = Edge2;
+ Edge2->PrevInAEL = Edge1;
+ Edge2->NextInAEL = Next;
+ }
+ else
+ {
+ TEdge* Next = Edge1->NextInAEL;
+ TEdge* Prev = Edge1->PrevInAEL;
+ Edge1->NextInAEL = Edge2->NextInAEL;
+ if( Edge1->NextInAEL ) Edge1->NextInAEL->PrevInAEL = Edge1;
+ Edge1->PrevInAEL = Edge2->PrevInAEL;
+ if( Edge1->PrevInAEL ) Edge1->PrevInAEL->NextInAEL = Edge1;
+ Edge2->NextInAEL = Next;
+ if( Edge2->NextInAEL ) Edge2->NextInAEL->PrevInAEL = Edge2;
+ Edge2->PrevInAEL = Prev;
+ if( Edge2->PrevInAEL ) Edge2->PrevInAEL->NextInAEL = Edge2;
+ }
+
+ if( !Edge1->PrevInAEL ) m_ActiveEdges = Edge1;
+ else if( !Edge2->PrevInAEL ) m_ActiveEdges = Edge2;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::SwapPositionsInSEL(TEdge *Edge1, TEdge *Edge2)
+{
+ if( !( Edge1->NextInSEL ) && !( Edge1->PrevInSEL ) ) return;
+ if( !( Edge2->NextInSEL ) && !( Edge2->PrevInSEL ) ) return;
+
+ if( Edge1->NextInSEL == Edge2 )
+ {
+ TEdge* Next = Edge2->NextInSEL;
+ if( Next ) Next->PrevInSEL = Edge1;
+ TEdge* Prev = Edge1->PrevInSEL;
+ if( Prev ) Prev->NextInSEL = Edge2;
+ Edge2->PrevInSEL = Prev;
+ Edge2->NextInSEL = Edge1;
+ Edge1->PrevInSEL = Edge2;
+ Edge1->NextInSEL = Next;
+ }
+ else if( Edge2->NextInSEL == Edge1 )
+ {
+ TEdge* Next = Edge1->NextInSEL;
+ if( Next ) Next->PrevInSEL = Edge2;
+ TEdge* Prev = Edge2->PrevInSEL;
+ if( Prev ) Prev->NextInSEL = Edge1;
+ Edge1->PrevInSEL = Prev;
+ Edge1->NextInSEL = Edge2;
+ Edge2->PrevInSEL = Edge1;
+ Edge2->NextInSEL = Next;
+ }
+ else
+ {
+ TEdge* Next = Edge1->NextInSEL;
+ TEdge* Prev = Edge1->PrevInSEL;
+ Edge1->NextInSEL = Edge2->NextInSEL;
+ if( Edge1->NextInSEL ) Edge1->NextInSEL->PrevInSEL = Edge1;
+ Edge1->PrevInSEL = Edge2->PrevInSEL;
+ if( Edge1->PrevInSEL ) Edge1->PrevInSEL->NextInSEL = Edge1;
+ Edge2->NextInSEL = Next;
+ if( Edge2->NextInSEL ) Edge2->NextInSEL->PrevInSEL = Edge2;
+ Edge2->PrevInSEL = Prev;
+ if( Edge2->PrevInSEL ) Edge2->PrevInSEL->NextInSEL = Edge2;
+ }
+
+ if( !Edge1->PrevInSEL ) m_SortedEdges = Edge1;
+ else if( !Edge2->PrevInSEL ) m_SortedEdges = Edge2;
+}
+//------------------------------------------------------------------------------
+
+TEdge* GetNextInAEL(TEdge *e, Direction dir)
+{
+ return dir == dLeftToRight ? e->NextInAEL : e->PrevInAEL;
+}
+//------------------------------------------------------------------------------
+
+void GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right)
+{
+ if (HorzEdge.Bot.X < HorzEdge.Top.X)
+ {
+ Left = HorzEdge.Bot.X;
+ Right = HorzEdge.Top.X;
+ Dir = dLeftToRight;
+ } else
+ {
+ Left = HorzEdge.Top.X;
+ Right = HorzEdge.Bot.X;
+ Dir = dRightToLeft;
+ }
+}
+//------------------------------------------------------------------------
+
+/*******************************************************************************
+* Notes: Horizontal edges (HEs) at scanline intersections (ie at the Top or *
+* Bottom of a scanbeam) are processed as if layered. The order in which HEs *
+* are processed doesn't matter. HEs intersect with other HE Bot.Xs only [#] *
+* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs), *
+* and with other non-horizontal edges [*]. Once these intersections are *
+* processed, intermediate HEs then 'promote' the Edge above (NextInLML) into *
+* the AEL. These 'promoted' edges may in turn intersect [%] with other HEs. *
+*******************************************************************************/
+
+void Clipper::ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam)
+{
+ Direction dir;
+ cInt horzLeft, horzRight;
+
+ GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
+
+ TEdge* eLastHorz = horzEdge, *eMaxPair = 0;
+ while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML))
+ eLastHorz = eLastHorz->NextInLML;
+ if (!eLastHorz->NextInLML)
+ eMaxPair = GetMaximaPair(eLastHorz);
+
+ for (;;)
+ {
+ bool IsLastHorz = (horzEdge == eLastHorz);
+ TEdge* e = GetNextInAEL(horzEdge, dir);
+ while(e)
+ {
+ //Break if we've got to the end of an intermediate horizontal edge ...
+ //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal.
+ if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML &&
+ e->Dx < horzEdge->NextInLML->Dx) break;
+
+ TEdge* eNext = GetNextInAEL(e, dir); //saves eNext for later
+
+ if ((dir == dLeftToRight && e->Curr.X <= horzRight) ||
+ (dir == dRightToLeft && e->Curr.X >= horzLeft))
+ {
+ //so far we're still in range of the horizontal Edge but make sure
+ //we're at the last of consec. horizontals when matching with eMaxPair
+ if(e == eMaxPair && IsLastHorz)
+ {
+
+ if (horzEdge->OutIdx >= 0)
+ {
+ OutPt* op1 = AddOutPt(horzEdge, horzEdge->Top);
+ TEdge* eNextHorz = m_SortedEdges;
+ while (eNextHorz)
+ {
+ if (eNextHorz->OutIdx >= 0 &&
+ HorzSegmentsOverlap(horzEdge->Bot.X,
+ horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))
+ {
+ OutPt* op2 = AddOutPt(eNextHorz, eNextHorz->Bot);
+ AddJoin(op2, op1, eNextHorz->Top);
+ }
+ eNextHorz = eNextHorz->NextInSEL;
+ }
+ AddGhostJoin(op1, horzEdge->Bot);
+ AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge->Top);
+ }
+ DeleteFromAEL(horzEdge);
+ DeleteFromAEL(eMaxPair);
+ return;
+ }
+ else if(dir == dLeftToRight)
+ {
+ IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+ IntersectEdges(horzEdge, e, Pt);
+ }
+ else
+ {
+ IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);
+ IntersectEdges( e, horzEdge, Pt);
+ }
+ SwapPositionsInAEL( horzEdge, e );
+ }
+ else if( (dir == dLeftToRight && e->Curr.X >= horzRight) ||
+ (dir == dRightToLeft && e->Curr.X <= horzLeft) ) break;
+ e = eNext;
+ } //end while
+
+ if (horzEdge->NextInLML && IsHorizontal(*horzEdge->NextInLML))
+ {
+ UpdateEdgeIntoAEL(horzEdge);
+ if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot);
+ GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);
+ } else
+ break;
+ } //end for (;;)
+
+ if(horzEdge->NextInLML)
+ {
+ if(horzEdge->OutIdx >= 0)
+ {
+ OutPt* op1 = AddOutPt( horzEdge, horzEdge->Top);
+ if (isTopOfScanbeam) AddGhostJoin(op1, horzEdge->Bot);
+ UpdateEdgeIntoAEL(horzEdge);
+ if (horzEdge->WindDelta == 0) return;
+ //nb: HorzEdge is no longer horizontal here
+ TEdge* ePrev = horzEdge->PrevInAEL;
+ TEdge* eNext = horzEdge->NextInAEL;
+ if (ePrev && ePrev->Curr.X == horzEdge->Bot.X &&
+ ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 &&
+ (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+ SlopesEqual(*horzEdge, *ePrev, m_UseFullRange)))
+ {
+ OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot);
+ AddJoin(op1, op2, horzEdge->Top);
+ }
+ else if (eNext && eNext->Curr.X == horzEdge->Bot.X &&
+ eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 &&
+ eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+ SlopesEqual(*horzEdge, *eNext, m_UseFullRange))
+ {
+ OutPt* op2 = AddOutPt(eNext, horzEdge->Bot);
+ AddJoin(op1, op2, horzEdge->Top);
+ }
+ }
+ else
+ UpdateEdgeIntoAEL(horzEdge);
+ }
+ else
+ {
+ if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top);
+ DeleteFromAEL(horzEdge);
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::UpdateEdgeIntoAEL(TEdge *&e)
+{
+ if( !e->NextInLML ) throw
+ clipperException("UpdateEdgeIntoAEL: invalid call");
+
+ e->NextInLML->OutIdx = e->OutIdx;
+ TEdge* AelPrev = e->PrevInAEL;
+ TEdge* AelNext = e->NextInAEL;
+ if (AelPrev) AelPrev->NextInAEL = e->NextInLML;
+ else m_ActiveEdges = e->NextInLML;
+ if (AelNext) AelNext->PrevInAEL = e->NextInLML;
+ e->NextInLML->Side = e->Side;
+ e->NextInLML->WindDelta = e->WindDelta;
+ e->NextInLML->WindCnt = e->WindCnt;
+ e->NextInLML->WindCnt2 = e->WindCnt2;
+ e = e->NextInLML;
+ e->Curr = e->Bot;
+ e->PrevInAEL = AelPrev;
+ e->NextInAEL = AelNext;
+ if (!IsHorizontal(*e)) InsertScanbeam(e->Top.Y);
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::ProcessIntersections(const cInt topY)
+{
+ if( !m_ActiveEdges ) return true;
+ try {
+ BuildIntersectList(topY);
+ size_t IlSize = m_IntersectList.size();
+ if (IlSize == 0) return true;
+ if (IlSize == 1 || FixupIntersectionOrder()) ProcessIntersectList();
+ else return false;
+ }
+ catch(...)
+ {
+ m_SortedEdges = 0;
+ DisposeIntersectNodes();
+ throw clipperException("ProcessIntersections error");
+ }
+ m_SortedEdges = 0;
+ return true;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DisposeIntersectNodes()
+{
+ for (size_t i = 0; i < m_IntersectList.size(); ++i )
+ delete m_IntersectList[i];
+ m_IntersectList.clear();
+}
+//------------------------------------------------------------------------------
+
+void Clipper::BuildIntersectList(const cInt topY)
+{
+ if ( !m_ActiveEdges ) return;
+
+ //prepare for sorting ...
+ TEdge* e = m_ActiveEdges;
+ m_SortedEdges = e;
+ while( e )
+ {
+ e->PrevInSEL = e->PrevInAEL;
+ e->NextInSEL = e->NextInAEL;
+ e->Curr.X = TopX( *e, topY );
+ e = e->NextInAEL;
+ }
+
+ //bubblesort ...
+ bool isModified;
+ do
+ {
+ isModified = false;
+ e = m_SortedEdges;
+ while( e->NextInSEL )
+ {
+ TEdge *eNext = e->NextInSEL;
+ IntPoint Pt;
+ if(e->Curr.X > eNext->Curr.X)
+ {
+ IntersectPoint(*e, *eNext, Pt);
+ IntersectNode * newNode = new IntersectNode;
+ newNode->Edge1 = e;
+ newNode->Edge2 = eNext;
+ newNode->Pt = Pt;
+ m_IntersectList.push_back(newNode);
+
+ SwapPositionsInSEL(e, eNext);
+ isModified = true;
+ }
+ else
+ e = eNext;
+ }
+ if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0;
+ else break;
+ }
+ while ( isModified );
+ m_SortedEdges = 0; //important
+}
+//------------------------------------------------------------------------------
+
+
+void Clipper::ProcessIntersectList()
+{
+ for (size_t i = 0; i < m_IntersectList.size(); ++i)
+ {
+ IntersectNode* iNode = m_IntersectList[i];
+ {
+ IntersectEdges( iNode->Edge1, iNode->Edge2, iNode->Pt);
+ SwapPositionsInAEL( iNode->Edge1 , iNode->Edge2 );
+ }
+ delete iNode;
+ }
+ m_IntersectList.clear();
+}
+//------------------------------------------------------------------------------
+
+bool IntersectListSort(IntersectNode* node1, IntersectNode* node2)
+{
+ return node2->Pt.Y < node1->Pt.Y;
+}
+//------------------------------------------------------------------------------
+
+inline bool EdgesAdjacent(const IntersectNode &inode)
+{
+ return (inode.Edge1->NextInSEL == inode.Edge2) ||
+ (inode.Edge1->PrevInSEL == inode.Edge2);
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::FixupIntersectionOrder()
+{
+ //pre-condition: intersections are sorted Bottom-most first.
+ //Now it's crucial that intersections are made only between adjacent edges,
+ //so to ensure this the order of intersections may need adjusting ...
+ CopyAELToSEL();
+ std::sort(m_IntersectList.begin(), m_IntersectList.end(), IntersectListSort);
+ size_t cnt = m_IntersectList.size();
+ for (size_t i = 0; i < cnt; ++i)
+ {
+ if (!EdgesAdjacent(*m_IntersectList[i]))
+ {
+ size_t j = i + 1;
+ while (j < cnt && !EdgesAdjacent(*m_IntersectList[j])) j++;
+ if (j == cnt) return false;
+ std::swap(m_IntersectList[i], m_IntersectList[j]);
+ }
+ SwapPositionsInSEL(m_IntersectList[i]->Edge1, m_IntersectList[i]->Edge2);
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::DoMaxima(TEdge *e)
+{
+ TEdge* eMaxPair = GetMaximaPair(e);
+ if (!eMaxPair)
+ {
+ if (e->OutIdx >= 0)
+ AddOutPt(e, e->Top);
+ DeleteFromAEL(e);
+ return;
+ }
+
+ TEdge* eNext = e->NextInAEL;
+ while(eNext && eNext != eMaxPair)
+ {
+ IntersectEdges(e, eNext, e->Top);
+ SwapPositionsInAEL(e, eNext);
+ eNext = e->NextInAEL;
+ }
+
+ if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned)
+ {
+ DeleteFromAEL(e);
+ DeleteFromAEL(eMaxPair);
+ }
+ else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 )
+ {
+ if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top);
+ DeleteFromAEL(e);
+ DeleteFromAEL(eMaxPair);
+ }
+#ifdef use_lines
+ else if (e->WindDelta == 0)
+ {
+ if (e->OutIdx >= 0)
+ {
+ AddOutPt(e, e->Top);
+ e->OutIdx = Unassigned;
+ }
+ DeleteFromAEL(e);
+
+ if (eMaxPair->OutIdx >= 0)
+ {
+ AddOutPt(eMaxPair, e->Top);
+ eMaxPair->OutIdx = Unassigned;
+ }
+ DeleteFromAEL(eMaxPair);
+ }
+#endif
+ else throw clipperException("DoMaxima error");
+}
+//------------------------------------------------------------------------------
+
+void Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)
+{
+ TEdge* e = m_ActiveEdges;
+ while( e )
+ {
+ //1. process maxima, treating them as if they're 'bent' horizontal edges,
+ // but exclude maxima with horizontal edges. nb: e can't be a horizontal.
+ bool IsMaximaEdge = IsMaxima(e, topY);
+
+ if(IsMaximaEdge)
+ {
+ TEdge* eMaxPair = GetMaximaPair(e);
+ IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair));
+ }
+
+ if(IsMaximaEdge)
+ {
+ TEdge* ePrev = e->PrevInAEL;
+ DoMaxima(e);
+ if( !ePrev ) e = m_ActiveEdges;
+ else e = ePrev->NextInAEL;
+ }
+ else
+ {
+ //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ...
+ if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML))
+ {
+ UpdateEdgeIntoAEL(e);
+ if (e->OutIdx >= 0)
+ AddOutPt(e, e->Bot);
+ AddEdgeToSEL(e);
+ }
+ else
+ {
+ e->Curr.X = TopX( *e, topY );
+ e->Curr.Y = topY;
+ }
+
+ if (m_StrictSimple)
+ {
+ TEdge* ePrev = e->PrevInAEL;
+ if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) &&
+ (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0))
+ {
+ IntPoint pt = e->Curr;
+#ifdef use_xyz
+ SetZ(pt, *ePrev, *e);
+#endif
+ OutPt* op = AddOutPt(ePrev, pt);
+ OutPt* op2 = AddOutPt(e, pt);
+ AddJoin(op, op2, pt); //StrictlySimple (type-3) join
+ }
+ }
+
+ e = e->NextInAEL;
+ }
+ }
+
+ //3. Process horizontals at the Top of the scanbeam ...
+ ProcessHorizontals(true);
+
+ //4. Promote intermediate vertices ...
+ e = m_ActiveEdges;
+ while(e)
+ {
+ if(IsIntermediate(e, topY))
+ {
+ OutPt* op = 0;
+ if( e->OutIdx >= 0 )
+ op = AddOutPt(e, e->Top);
+ UpdateEdgeIntoAEL(e);
+
+ //if output polygons share an edge, they'll need joining later ...
+ TEdge* ePrev = e->PrevInAEL;
+ TEdge* eNext = e->NextInAEL;
+ if (ePrev && ePrev->Curr.X == e->Bot.X &&
+ ePrev->Curr.Y == e->Bot.Y && op &&
+ ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&
+ SlopesEqual(*e, *ePrev, m_UseFullRange) &&
+ (e->WindDelta != 0) && (ePrev->WindDelta != 0))
+ {
+ OutPt* op2 = AddOutPt(ePrev, e->Bot);
+ AddJoin(op, op2, e->Top);
+ }
+ else if (eNext && eNext->Curr.X == e->Bot.X &&
+ eNext->Curr.Y == e->Bot.Y && op &&
+ eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&
+ SlopesEqual(*e, *eNext, m_UseFullRange) &&
+ (e->WindDelta != 0) && (eNext->WindDelta != 0))
+ {
+ OutPt* op2 = AddOutPt(eNext, e->Bot);
+ AddJoin(op, op2, e->Top);
+ }
+ }
+ e = e->NextInAEL;
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::FixupOutPolygon(OutRec &outrec)
+{
+ //FixupOutPolygon() - removes duplicate points and simplifies consecutive
+ //parallel edges by removing the middle vertex.
+ OutPt *lastOK = 0;
+ outrec.BottomPt = 0;
+ OutPt *pp = outrec.Pts;
+
+ for (;;)
+ {
+ if (pp->Prev == pp || pp->Prev == pp->Next )
+ {
+ DisposeOutPts(pp);
+ outrec.Pts = 0;
+ return;
+ }
+
+ //test for duplicate points and collinear edges ...
+ if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) ||
+ (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) &&
+ (!m_PreserveCollinear ||
+ !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt))))
+ {
+ lastOK = 0;
+ OutPt *tmp = pp;
+ pp->Prev->Next = pp->Next;
+ pp->Next->Prev = pp->Prev;
+ pp = pp->Prev;
+ delete tmp;
+ }
+ else if (pp == lastOK) break;
+ else
+ {
+ if (!lastOK) lastOK = pp;
+ pp = pp->Next;
+ }
+ }
+ outrec.Pts = pp;
+}
+//------------------------------------------------------------------------------
+
+int PointCount(OutPt *Pts)
+{
+ if (!Pts) return 0;
+ int result = 0;
+ OutPt* p = Pts;
+ do
+ {
+ result++;
+ p = p->Next;
+ }
+ while (p != Pts);
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::BuildResult(Paths &polys)
+{
+ polys.reserve(m_PolyOuts.size());
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ {
+ if (!m_PolyOuts[i]->Pts) continue;
+ Path pg;
+ OutPt* p = m_PolyOuts[i]->Pts->Prev;
+ int cnt = PointCount(p);
+ if (cnt < 2) continue;
+ pg.reserve(cnt);
+ for (int i = 0; i < cnt; ++i)
+ {
+ pg.push_back(p->Pt);
+ p = p->Prev;
+ }
+ polys.push_back(pg);
+ }
+}
+//------------------------------------------------------------------------------
+
+void Clipper::BuildResult2(PolyTree& polytree)
+{
+ polytree.Clear();
+ polytree.AllNodes.reserve(m_PolyOuts.size());
+ //add each output polygon/contour to polytree ...
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)
+ {
+ OutRec* outRec = m_PolyOuts[i];
+ int cnt = PointCount(outRec->Pts);
+ if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3)) continue;
+ FixHoleLinkage(*outRec);
+ PolyNode* pn = new PolyNode();
+ //nb: polytree takes ownership of all the PolyNodes
+ polytree.AllNodes.push_back(pn);
+ outRec->PolyNd = pn;
+ pn->Parent = 0;
+ pn->Index = 0;
+ pn->Contour.reserve(cnt);
+ OutPt *op = outRec->Pts->Prev;
+ for (int j = 0; j < cnt; j++)
+ {
+ pn->Contour.push_back(op->Pt);
+ op = op->Prev;
+ }
+ }
+
+ //fixup PolyNode links etc ...
+ polytree.Childs.reserve(m_PolyOuts.size());
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)
+ {
+ OutRec* outRec = m_PolyOuts[i];
+ if (!outRec->PolyNd) continue;
+ if (outRec->IsOpen)
+ {
+ outRec->PolyNd->m_IsOpen = true;
+ polytree.AddChild(*outRec->PolyNd);
+ }
+ else if (outRec->FirstLeft && outRec->FirstLeft->PolyNd)
+ outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd);
+ else
+ polytree.AddChild(*outRec->PolyNd);
+ }
+}
+//------------------------------------------------------------------------------
+
+void SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2)
+{
+ //just swap the contents (because fIntersectNodes is a single-linked-list)
+ IntersectNode inode = int1; //gets a copy of Int1
+ int1.Edge1 = int2.Edge1;
+ int1.Edge2 = int2.Edge2;
+ int1.Pt = int2.Pt;
+ int2.Edge1 = inode.Edge1;
+ int2.Edge2 = inode.Edge2;
+ int2.Pt = inode.Pt;
+}
+//------------------------------------------------------------------------------
+
+inline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
+{
+ if (e2.Curr.X == e1.Curr.X)
+ {
+ if (e2.Top.Y > e1.Top.Y)
+ return e2.Top.X < TopX(e1, e2.Top.Y);
+ else return e1.Top.X > TopX(e2, e1.Top.Y);
+ }
+ else return e2.Curr.X < e1.Curr.X;
+}
+//------------------------------------------------------------------------------
+
+bool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2,
+ cInt& Left, cInt& Right)
+{
+ if (a1 < a2)
+ {
+ if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);}
+ else {Left = std::max(a1,b2); Right = std::min(a2,b1);}
+ }
+ else
+ {
+ if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);}
+ else {Left = std::max(a2,b2); Right = std::min(a1,b1);}
+ }
+ return Left < Right;
+}
+//------------------------------------------------------------------------------
+
+inline void UpdateOutPtIdxs(OutRec& outrec)
+{
+ OutPt* op = outrec.Pts;
+ do
+ {
+ op->Idx = outrec.Idx;
+ op = op->Prev;
+ }
+ while(op != outrec.Pts);
+}
+//------------------------------------------------------------------------------
+
+void Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge)
+{
+ if(!m_ActiveEdges)
+ {
+ edge->PrevInAEL = 0;
+ edge->NextInAEL = 0;
+ m_ActiveEdges = edge;
+ }
+ else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge))
+ {
+ edge->PrevInAEL = 0;
+ edge->NextInAEL = m_ActiveEdges;
+ m_ActiveEdges->PrevInAEL = edge;
+ m_ActiveEdges = edge;
+ }
+ else
+ {
+ if(!startEdge) startEdge = m_ActiveEdges;
+ while(startEdge->NextInAEL &&
+ !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge))
+ startEdge = startEdge->NextInAEL;
+ edge->NextInAEL = startEdge->NextInAEL;
+ if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge;
+ edge->PrevInAEL = startEdge;
+ startEdge->NextInAEL = edge;
+ }
+}
+//----------------------------------------------------------------------
+
+OutPt* DupOutPt(OutPt* outPt, bool InsertAfter)
+{
+ OutPt* result = new OutPt;
+ result->Pt = outPt->Pt;
+ result->Idx = outPt->Idx;
+ if (InsertAfter)
+ {
+ result->Next = outPt->Next;
+ result->Prev = outPt;
+ outPt->Next->Prev = result;
+ outPt->Next = result;
+ }
+ else
+ {
+ result->Prev = outPt->Prev;
+ result->Next = outPt;
+ outPt->Prev->Next = result;
+ outPt->Prev = result;
+ }
+ return result;
+}
+//------------------------------------------------------------------------------
+
+bool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b,
+ const IntPoint Pt, bool DiscardLeft)
+{
+ Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight);
+ Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight);
+ if (Dir1 == Dir2) return false;
+
+ //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we
+ //want Op1b to be on the Right. (And likewise with Op2 and Op2b.)
+ //So, to facilitate this while inserting Op1b and Op2b ...
+ //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b,
+ //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.)
+ if (Dir1 == dLeftToRight)
+ {
+ while (op1->Next->Pt.X <= Pt.X &&
+ op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
+ op1 = op1->Next;
+ if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+ op1b = DupOutPt(op1, !DiscardLeft);
+ if (op1b->Pt != Pt)
+ {
+ op1 = op1b;
+ op1->Pt = Pt;
+ op1b = DupOutPt(op1, !DiscardLeft);
+ }
+ }
+ else
+ {
+ while (op1->Next->Pt.X >= Pt.X &&
+ op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)
+ op1 = op1->Next;
+ if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;
+ op1b = DupOutPt(op1, DiscardLeft);
+ if (op1b->Pt != Pt)
+ {
+ op1 = op1b;
+ op1->Pt = Pt;
+ op1b = DupOutPt(op1, DiscardLeft);
+ }
+ }
+
+ if (Dir2 == dLeftToRight)
+ {
+ while (op2->Next->Pt.X <= Pt.X &&
+ op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
+ op2 = op2->Next;
+ if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+ op2b = DupOutPt(op2, !DiscardLeft);
+ if (op2b->Pt != Pt)
+ {
+ op2 = op2b;
+ op2->Pt = Pt;
+ op2b = DupOutPt(op2, !DiscardLeft);
+ };
+ } else
+ {
+ while (op2->Next->Pt.X >= Pt.X &&
+ op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)
+ op2 = op2->Next;
+ if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;
+ op2b = DupOutPt(op2, DiscardLeft);
+ if (op2b->Pt != Pt)
+ {
+ op2 = op2b;
+ op2->Pt = Pt;
+ op2b = DupOutPt(op2, DiscardLeft);
+ };
+ };
+
+ if ((Dir1 == dLeftToRight) == DiscardLeft)
+ {
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ }
+ else
+ {
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ }
+ return true;
+}
+//------------------------------------------------------------------------------
+
+bool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2)
+{
+ OutPt *op1 = j->OutPt1, *op1b;
+ OutPt *op2 = j->OutPt2, *op2b;
+
+ //There are 3 kinds of joins for output polygons ...
+ //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are a vertices anywhere
+ //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal).
+ //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same
+ //location at the Bottom of the overlapping segment (& Join.OffPt is above).
+ //3. StrictSimple joins where edges touch but are not collinear and where
+ //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point.
+ bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y);
+
+ if (isHorizontal && (j->OffPt == j->OutPt1->Pt) &&
+ (j->OffPt == j->OutPt2->Pt))
+ {
+ //Strictly Simple join ...
+ if (outRec1 != outRec2) return false;
+ op1b = j->OutPt1->Next;
+ while (op1b != op1 && (op1b->Pt == j->OffPt))
+ op1b = op1b->Next;
+ bool reverse1 = (op1b->Pt.Y > j->OffPt.Y);
+ op2b = j->OutPt2->Next;
+ while (op2b != op2 && (op2b->Pt == j->OffPt))
+ op2b = op2b->Next;
+ bool reverse2 = (op2b->Pt.Y > j->OffPt.Y);
+ if (reverse1 == reverse2) return false;
+ if (reverse1)
+ {
+ op1b = DupOutPt(op1, false);
+ op2b = DupOutPt(op2, true);
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ } else
+ {
+ op1b = DupOutPt(op1, true);
+ op2b = DupOutPt(op2, false);
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ }
+ }
+ else if (isHorizontal)
+ {
+ //treat horizontal joins differently to non-horizontal joins since with
+ //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt
+ //may be anywhere along the horizontal edge.
+ op1b = op1;
+ while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2)
+ op1 = op1->Prev;
+ while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2)
+ op1b = op1b->Next;
+ if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon'
+
+ op2b = op2;
+ while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b)
+ op2 = op2->Prev;
+ while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1)
+ op2b = op2b->Next;
+ if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon'
+
+ cInt Left, Right;
+ //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges
+ if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right))
+ return false;
+
+ //DiscardLeftSide: when overlapping edges are joined, a spike will created
+ //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up
+ //on the discard Side as either may still be needed for other joins ...
+ IntPoint Pt;
+ bool DiscardLeftSide;
+ if (op1->Pt.X >= Left && op1->Pt.X <= Right)
+ {
+ Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X);
+ }
+ else if (op2->Pt.X >= Left&& op2->Pt.X <= Right)
+ {
+ Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X);
+ }
+ else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right)
+ {
+ Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X;
+ }
+ else
+ {
+ Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X);
+ }
+ j->OutPt1 = op1; j->OutPt2 = op2;
+ return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide);
+ } else
+ {
+ //nb: For non-horizontal joins ...
+ // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y
+ // 2. Jr.OutPt1.Pt > Jr.OffPt.Y
+
+ //make sure the polygons are correctly oriented ...
+ op1b = op1->Next;
+ while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next;
+ bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) ||
+ !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange));
+ if (Reverse1)
+ {
+ op1b = op1->Prev;
+ while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev;
+ if ((op1b->Pt.Y > op1->Pt.Y) ||
+ !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false;
+ };
+ op2b = op2->Next;
+ while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next;
+ bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) ||
+ !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange));
+ if (Reverse2)
+ {
+ op2b = op2->Prev;
+ while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev;
+ if ((op2b->Pt.Y > op2->Pt.Y) ||
+ !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false;
+ }
+
+ if ((op1b == op1) || (op2b == op2) || (op1b == op2b) ||
+ ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false;
+
+ if (Reverse1)
+ {
+ op1b = DupOutPt(op1, false);
+ op2b = DupOutPt(op2, true);
+ op1->Prev = op2;
+ op2->Next = op1;
+ op1b->Next = op2b;
+ op2b->Prev = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ } else
+ {
+ op1b = DupOutPt(op1, true);
+ op2b = DupOutPt(op2, false);
+ op1->Next = op2;
+ op2->Prev = op1;
+ op1b->Prev = op2b;
+ op2b->Next = op1b;
+ j->OutPt1 = op1;
+ j->OutPt2 = op1b;
+ return true;
+ }
+ }
+}
+//----------------------------------------------------------------------
+
+static OutRec* ParseFirstLeft(OutRec* FirstLeft)
+{
+ while (FirstLeft && !FirstLeft->Pts)
+ FirstLeft = FirstLeft->FirstLeft;
+ return FirstLeft;
+}
+//------------------------------------------------------------------------------
+
+void Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec)
+{
+ //tests if NewOutRec contains the polygon before reassigning FirstLeft
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ {
+ OutRec* outRec = m_PolyOuts[i];
+ if (!outRec->Pts || !outRec->FirstLeft) continue;
+ OutRec* firstLeft = ParseFirstLeft(outRec->FirstLeft);
+ if (firstLeft == OldOutRec)
+ {
+ if (Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts))
+ outRec->FirstLeft = NewOutRec;
+ }
+ }
+}
+//----------------------------------------------------------------------
+
+void Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec)
+{
+ //reassigns FirstLeft WITHOUT testing if NewOutRec contains the polygon
+ for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
+ {
+ OutRec* outRec = m_PolyOuts[i];
+ if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec;
+ }
+}
+//----------------------------------------------------------------------
+
+void Clipper::JoinCommonEdges()
+{
+ for (JoinList::size_type i = 0; i < m_Joins.size(); i++)
+ {
+ Join* join = m_Joins[i];
+
+ OutRec *outRec1 = GetOutRec(join->OutPt1->Idx);
+ OutRec *outRec2 = GetOutRec(join->OutPt2->Idx);
+
+ if (!outRec1->Pts || !outRec2->Pts) continue;
+
+ //get the polygon fragment with the correct hole state (FirstLeft)
+ //before calling JoinPoints() ...
+ OutRec *holeStateRec;
+ if (outRec1 == outRec2) holeStateRec = outRec1;
+ else if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2;
+ else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1;
+ else holeStateRec = GetLowermostRec(outRec1, outRec2);
+
+ if (!JoinPoints(join, outRec1, outRec2)) continue;
+
+ if (outRec1 == outRec2)
+ {
+ //instead of joining two polygons, we've just created a new one by
+ //splitting one polygon into two.
+ outRec1->Pts = join->OutPt1;
+ outRec1->BottomPt = 0;
+ outRec2 = CreateOutRec();
+ outRec2->Pts = join->OutPt2;
+
+ //update all OutRec2.Pts Idx's ...
+ UpdateOutPtIdxs(*outRec2);
+
+ //We now need to check every OutRec.FirstLeft pointer. If it points
+ //to OutRec1 it may need to point to OutRec2 instead ...
+ if (m_UsingPolyTree)
+ for (PolyOutList::size_type j = 0; j < m_PolyOuts.size() - 1; j++)
+ {
+ OutRec* oRec = m_PolyOuts[j];
+ if (!oRec->Pts || ParseFirstLeft(oRec->FirstLeft) != outRec1 ||
+ oRec->IsHole == outRec1->IsHole) continue;
+ if (Poly2ContainsPoly1(oRec->Pts, join->OutPt2))
+ oRec->FirstLeft = outRec2;
+ }
+
+ if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts))
+ {
+ //outRec2 is contained by outRec1 ...
+ outRec2->IsHole = !outRec1->IsHole;
+ outRec2->FirstLeft = outRec1;
+
+ //fixup FirstLeft pointers that may need reassigning to OutRec1
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
+
+ if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0))
+ ReversePolyPtLinks(outRec2->Pts);
+
+ } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts))
+ {
+ //outRec1 is contained by outRec2 ...
+ outRec2->IsHole = outRec1->IsHole;
+ outRec1->IsHole = !outRec2->IsHole;
+ outRec2->FirstLeft = outRec1->FirstLeft;
+ outRec1->FirstLeft = outRec2;
+
+ //fixup FirstLeft pointers that may need reassigning to OutRec1
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2);
+
+ if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0))
+ ReversePolyPtLinks(outRec1->Pts);
+ }
+ else
+ {
+ //the 2 polygons are completely separate ...
+ outRec2->IsHole = outRec1->IsHole;
+ outRec2->FirstLeft = outRec1->FirstLeft;
+
+ //fixup FirstLeft pointers that may need reassigning to OutRec2
+ if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2);
+ }
+
+ } else
+ {
+ //joined 2 polygons together ...
+
+ outRec2->Pts = 0;
+ outRec2->BottomPt = 0;
+ outRec2->Idx = outRec1->Idx;
+
+ outRec1->IsHole = holeStateRec->IsHole;
+ if (holeStateRec == outRec2)
+ outRec1->FirstLeft = outRec2->FirstLeft;
+ outRec2->FirstLeft = outRec1;
+
+ //fixup FirstLeft pointers that may need reassigning to OutRec1
+ if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// ClipperOffset support functions ...
+//------------------------------------------------------------------------------
+
+DoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2)
+{
+ if(pt2.X == pt1.X && pt2.Y == pt1.Y)
+ return DoublePoint(0, 0);
+
+ double Dx = (double)(pt2.X - pt1.X);
+ double dy = (double)(pt2.Y - pt1.Y);
+ double f = 1 *1.0/ std::sqrt( Dx*Dx + dy*dy );
+ Dx *= f;
+ dy *= f;
+ return DoublePoint(dy, -Dx);
+}
+
+//------------------------------------------------------------------------------
+// ClipperOffset class
+//------------------------------------------------------------------------------
+
+ClipperOffset::ClipperOffset(double miterLimit, double arcTolerance)
+{
+ this->MiterLimit = miterLimit;
+ this->ArcTolerance = arcTolerance;
+ m_lowest.X = -1;
+}
+//------------------------------------------------------------------------------
+
+ClipperOffset::~ClipperOffset()
+{
+ Clear();
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Clear()
+{
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ delete m_polyNodes.Childs[i];
+ m_polyNodes.Childs.clear();
+ m_lowest.X = -1;
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::AddPath(const Path& path, JoinType joinType, EndType endType)
+{
+ int highI = (int)path.size() - 1;
+ if (highI < 0) return;
+ PolyNode* newNode = new PolyNode();
+ newNode->m_jointype = joinType;
+ newNode->m_endtype = endType;
+
+ //strip duplicate points from path and also get index to the lowest point ...
+ if (endType == etClosedLine || endType == etClosedPolygon)
+ while (highI > 0 && path[0] == path[highI]) highI--;
+ newNode->Contour.reserve(highI + 1);
+ newNode->Contour.push_back(path[0]);
+ int j = 0, k = 0;
+ for (int i = 1; i <= highI; i++)
+ if (newNode->Contour[j] != path[i])
+ {
+ j++;
+ newNode->Contour.push_back(path[i]);
+ if (path[i].Y > newNode->Contour[k].Y ||
+ (path[i].Y == newNode->Contour[k].Y &&
+ path[i].X < newNode->Contour[k].X)) k = j;
+ }
+ if (endType == etClosedPolygon && j < 2)
+ {
+ delete newNode;
+ return;
+ }
+ m_polyNodes.AddChild(*newNode);
+
+ //if this path's lowest pt is lower than all the others then update m_lowest
+ if (endType != etClosedPolygon) return;
+ if (m_lowest.X < 0)
+ m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
+ else
+ {
+ IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X]->Contour[(int)m_lowest.Y];
+ if (newNode->Contour[k].Y > ip.Y ||
+ (newNode->Contour[k].Y == ip.Y &&
+ newNode->Contour[k].X < ip.X))
+ m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::AddPaths(const Paths& paths, JoinType joinType, EndType endType)
+{
+ for (Paths::size_type i = 0; i < paths.size(); ++i)
+ AddPath(paths[i], joinType, endType);
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::FixOrientations()
+{
+ //fixup orientations of all closed paths if the orientation of the
+ //closed path with the lowermost vertex is wrong ...
+ if (m_lowest.X >= 0 &&
+ !Orientation(m_polyNodes.Childs[(int)m_lowest.X]->Contour))
+ {
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedPolygon ||
+ (node.m_endtype == etClosedLine && Orientation(node.Contour)))
+ ReversePath(node.Contour);
+ }
+ } else
+ {
+ for (int i = 0; i < m_polyNodes.ChildCount(); ++i)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedLine && !Orientation(node.Contour))
+ ReversePath(node.Contour);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Execute(Paths& solution, double delta)
+{
+ solution.clear();
+ FixOrientations();
+ DoOffset(delta);
+
+ //now clean up 'corners' ...
+ Clipper clpr;
+ clpr.AddPaths(m_destPolys, ptSubject, true);
+ if (delta > 0)
+ {
+ clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
+ }
+ else
+ {
+ IntRect r = clpr.GetBounds();
+ Path outer(4);
+ outer[0] = IntPoint(r.left - 10, r.bottom + 10);
+ outer[1] = IntPoint(r.right + 10, r.bottom + 10);
+ outer[2] = IntPoint(r.right + 10, r.top - 10);
+ outer[3] = IntPoint(r.left - 10, r.top - 10);
+
+ clpr.AddPath(outer, ptSubject, true);
+ clpr.ReverseSolution(true);
+ clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
+ if (solution.size() > 0) solution.erase(solution.begin());
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::Execute(PolyTree& solution, double delta)
+{
+ solution.Clear();
+ FixOrientations();
+ DoOffset(delta);
+
+ //now clean up 'corners' ...
+ Clipper clpr;
+ clpr.AddPaths(m_destPolys, ptSubject, true);
+ if (delta > 0)
+ {
+ clpr.Execute(ctUnion, solution, pftPositive, pftPositive);
+ }
+ else
+ {
+ IntRect r = clpr.GetBounds();
+ Path outer(4);
+ outer[0] = IntPoint(r.left - 10, r.bottom + 10);
+ outer[1] = IntPoint(r.right + 10, r.bottom + 10);
+ outer[2] = IntPoint(r.right + 10, r.top - 10);
+ outer[3] = IntPoint(r.left - 10, r.top - 10);
+
+ clpr.AddPath(outer, ptSubject, true);
+ clpr.ReverseSolution(true);
+ clpr.Execute(ctUnion, solution, pftNegative, pftNegative);
+ //remove the outer PolyNode rectangle ...
+ if (solution.ChildCount() == 1 && solution.Childs[0]->ChildCount() > 0)
+ {
+ PolyNode* outerNode = solution.Childs[0];
+ solution.Childs.reserve(outerNode->ChildCount());
+ solution.Childs[0] = outerNode->Childs[0];
+ solution.Childs[0]->Parent = outerNode->Parent;
+ for (int i = 1; i < outerNode->ChildCount(); ++i)
+ solution.AddChild(*outerNode->Childs[i]);
+ }
+ else
+ solution.Clear();
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoOffset(double delta)
+{
+ m_destPolys.clear();
+ m_delta = delta;
+
+ //if Zero offset, just copy any CLOSED polygons to m_p and return ...
+ if (NEAR_ZERO(delta))
+ {
+ m_destPolys.reserve(m_polyNodes.ChildCount());
+ for (int i = 0; i < m_polyNodes.ChildCount(); i++)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ if (node.m_endtype == etClosedPolygon)
+ m_destPolys.push_back(node.Contour);
+ }
+ return;
+ }
+
+ //see offset_triginometry3.svg in the documentation folder ...
+ if (MiterLimit > 2) m_miterLim = 2/(MiterLimit * MiterLimit);
+ else m_miterLim = 0.5;
+
+ double y;
+ if (ArcTolerance <= 0.0) y = def_arc_tolerance;
+ else if (ArcTolerance > std::fabs(delta) * def_arc_tolerance)
+ y = std::fabs(delta) * def_arc_tolerance;
+ else y = ArcTolerance;
+ //see offset_triginometry2.svg in the documentation folder ...
+ double steps = pi / std::acos(1 - y / std::fabs(delta));
+ if (steps > std::fabs(delta) * pi)
+ steps = std::fabs(delta) * pi; //ie excessive precision check
+ m_sin = std::sin(two_pi / steps);
+ m_cos = std::cos(two_pi / steps);
+ m_StepsPerRad = steps / two_pi;
+ if (delta < 0.0) m_sin = -m_sin;
+
+ m_destPolys.reserve(m_polyNodes.ChildCount() * 2);
+ for (int i = 0; i < m_polyNodes.ChildCount(); i++)
+ {
+ PolyNode& node = *m_polyNodes.Childs[i];
+ m_srcPoly = node.Contour;
+
+ int len = (int)m_srcPoly.size();
+ if (len == 0 || (delta <= 0 && (len < 3 || node.m_endtype != etClosedPolygon)))
+ continue;
+
+ m_destPoly.clear();
+ if (len == 1)
+ {
+ if (node.m_jointype == jtRound)
+ {
+ double X = 1.0, Y = 0.0;
+ for (cInt j = 1; j <= steps; j++)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[0].X + X * delta),
+ Round(m_srcPoly[0].Y + Y * delta)));
+ double X2 = X;
+ X = X * m_cos - m_sin * Y;
+ Y = X2 * m_sin + Y * m_cos;
+ }
+ }
+ else
+ {
+ double X = -1.0, Y = -1.0;
+ for (int j = 0; j < 4; ++j)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[0].X + X * delta),
+ Round(m_srcPoly[0].Y + Y * delta)));
+ if (X < 0) X = 1;
+ else if (Y < 0) Y = 1;
+ else X = -1;
+ }
+ }
+ m_destPolys.push_back(m_destPoly);
+ continue;
+ }
+ //build m_normals ...
+ m_normals.clear();
+ m_normals.reserve(len);
+ for (int j = 0; j < len - 1; ++j)
+ m_normals.push_back(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1]));
+ if (node.m_endtype == etClosedLine || node.m_endtype == etClosedPolygon)
+ m_normals.push_back(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0]));
+ else
+ m_normals.push_back(DoublePoint(m_normals[len - 2]));
+
+ if (node.m_endtype == etClosedPolygon)
+ {
+ int k = len - 1;
+ for (int j = 0; j < len; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ }
+ else if (node.m_endtype == etClosedLine)
+ {
+ int k = len - 1;
+ for (int j = 0; j < len; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ m_destPoly.clear();
+ //re-build m_normals ...
+ DoublePoint n = m_normals[len -1];
+ for (int j = len - 1; j > 0; j--)
+ m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
+ m_normals[0] = DoublePoint(-n.X, -n.Y);
+ k = 0;
+ for (int j = len - 1; j >= 0; j--)
+ OffsetPoint(j, k, node.m_jointype);
+ m_destPolys.push_back(m_destPoly);
+ }
+ else
+ {
+ int k = 0;
+ for (int j = 1; j < len - 1; ++j)
+ OffsetPoint(j, k, node.m_jointype);
+
+ IntPoint pt1;
+ if (node.m_endtype == etOpenButt)
+ {
+ int j = len - 1;
+ pt1 = IntPoint((cInt)Round(m_srcPoly[j].X + m_normals[j].X *
+ delta), (cInt)Round(m_srcPoly[j].Y + m_normals[j].Y * delta));
+ m_destPoly.push_back(pt1);
+ pt1 = IntPoint((cInt)Round(m_srcPoly[j].X - m_normals[j].X *
+ delta), (cInt)Round(m_srcPoly[j].Y - m_normals[j].Y * delta));
+ m_destPoly.push_back(pt1);
+ }
+ else
+ {
+ int j = len - 1;
+ k = len - 2;
+ m_sinA = 0;
+ m_normals[j] = DoublePoint(-m_normals[j].X, -m_normals[j].Y);
+ if (node.m_endtype == etOpenSquare)
+ DoSquare(j, k);
+ else
+ DoRound(j, k);
+ }
+
+ //re-build m_normals ...
+ for (int j = len - 1; j > 0; j--)
+ m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);
+ m_normals[0] = DoublePoint(-m_normals[1].X, -m_normals[1].Y);
+
+ k = len - 1;
+ for (int j = k - 1; j > 0; --j) OffsetPoint(j, k, node.m_jointype);
+
+ if (node.m_endtype == etOpenButt)
+ {
+ pt1 = IntPoint((cInt)Round(m_srcPoly[0].X - m_normals[0].X * delta),
+ (cInt)Round(m_srcPoly[0].Y - m_normals[0].Y * delta));
+ m_destPoly.push_back(pt1);
+ pt1 = IntPoint((cInt)Round(m_srcPoly[0].X + m_normals[0].X * delta),
+ (cInt)Round(m_srcPoly[0].Y + m_normals[0].Y * delta));
+ m_destPoly.push_back(pt1);
+ }
+ else
+ {
+ k = 1;
+ m_sinA = 0;
+ if (node.m_endtype == etOpenSquare)
+ DoSquare(0, 1);
+ else
+ DoRound(0, 1);
+ }
+ m_destPolys.push_back(m_destPoly);
+ }
+ }
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)
+{
+ //cross product ...
+ m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y);
+ if (std::fabs(m_sinA * m_delta) < 1.0)
+ {
+ //dot product ...
+ double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y );
+ if (cosA > 0) // angle => 0 degrees
+ {
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
+ return;
+ }
+ //else angle => 180 degrees
+ }
+ else if (m_sinA > 1.0) m_sinA = 1.0;
+ else if (m_sinA < -1.0) m_sinA = -1.0;
+
+ if (m_sinA * m_delta < 0)
+ {
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));
+ m_destPoly.push_back(m_srcPoly[j]);
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
+ }
+ else
+ switch (jointype)
+ {
+ case jtMiter:
+ {
+ double r = 1 + (m_normals[j].X * m_normals[k].X +
+ m_normals[j].Y * m_normals[k].Y);
+ if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k);
+ break;
+ }
+ case jtSquare: DoSquare(j, k); break;
+ case jtRound: DoRound(j, k); break;
+ }
+ k = j;
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoSquare(int j, int k)
+{
+ double dx = std::tan(std::atan2(m_sinA,
+ m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4);
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)),
+ Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx))));
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)),
+ Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx))));
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoMiter(int j, int k, double r)
+{
+ double q = m_delta / r;
+ m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q),
+ Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q)));
+}
+//------------------------------------------------------------------------------
+
+void ClipperOffset::DoRound(int j, int k)
+{
+ double a = std::atan2(m_sinA,
+ m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y);
+ int steps = std::max((int)Round(m_StepsPerRad * std::fabs(a)), 1);
+
+ double X = m_normals[k].X, Y = m_normals[k].Y, X2;
+ for (int i = 0; i < steps; ++i)
+ {
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + X * m_delta),
+ Round(m_srcPoly[j].Y + Y * m_delta)));
+ X2 = X;
+ X = X * m_cos - m_sin * Y;
+ Y = X2 * m_sin + Y * m_cos;
+ }
+ m_destPoly.push_back(IntPoint(
+ Round(m_srcPoly[j].X + m_normals[j].X * m_delta),
+ Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));
+}
+
+//------------------------------------------------------------------------------
+// Miscellaneous public functions
+//------------------------------------------------------------------------------
+
+void Clipper::DoSimplePolygons()
+{
+ PolyOutList::size_type i = 0;
+ while (i < m_PolyOuts.size())
+ {
+ OutRec* outrec = m_PolyOuts[i++];
+ OutPt* op = outrec->Pts;
+ if (!op || outrec->IsOpen) continue;
+ do //for each Pt in Polygon until duplicate found do ...
+ {
+ OutPt* op2 = op->Next;
+ while (op2 != outrec->Pts)
+ {
+ if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op)
+ {
+ //split the polygon into two ...
+ OutPt* op3 = op->Prev;
+ OutPt* op4 = op2->Prev;
+ op->Prev = op4;
+ op4->Next = op;
+ op2->Prev = op3;
+ op3->Next = op2;
+
+ outrec->Pts = op;
+ OutRec* outrec2 = CreateOutRec();
+ outrec2->Pts = op2;
+ UpdateOutPtIdxs(*outrec2);
+ if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts))
+ {
+ //OutRec2 is contained by OutRec1 ...
+ outrec2->IsHole = !outrec->IsHole;
+ outrec2->FirstLeft = outrec;
+ if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec);
+ }
+ else
+ if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts))
+ {
+ //OutRec1 is contained by OutRec2 ...
+ outrec2->IsHole = outrec->IsHole;
+ outrec->IsHole = !outrec2->IsHole;
+ outrec2->FirstLeft = outrec->FirstLeft;
+ outrec->FirstLeft = outrec2;
+ if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2);
+ }
+ else
+ {
+ //the 2 polygons are separate ...
+ outrec2->IsHole = outrec->IsHole;
+ outrec2->FirstLeft = outrec->FirstLeft;
+ if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2);
+ }
+ op2 = op; //ie get ready for the Next iteration
+ }
+ op2 = op2->Next;
+ }
+ op = op->Next;
+ }
+ while (op != outrec->Pts);
+ }
+}
+//------------------------------------------------------------------------------
+
+void ReversePath(Path& p)
+{
+ std::reverse(p.begin(), p.end());
+}
+//------------------------------------------------------------------------------
+
+void ReversePaths(Paths& p)
+{
+ for (Paths::size_type i = 0; i < p.size(); ++i)
+ ReversePath(p[i]);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType)
+{
+ Clipper c;
+ c.StrictlySimple(true);
+ c.AddPath(in_poly, ptSubject, true);
+ c.Execute(ctUnion, out_polys, fillType, fillType);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType)
+{
+ Clipper c;
+ c.StrictlySimple(true);
+ c.AddPaths(in_polys, ptSubject, true);
+ c.Execute(ctUnion, out_polys, fillType, fillType);
+}
+//------------------------------------------------------------------------------
+
+void SimplifyPolygons(Paths &polys, PolyFillType fillType)
+{
+ SimplifyPolygons(polys, polys, fillType);
+}
+//------------------------------------------------------------------------------
+
+inline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2)
+{
+ double Dx = ((double)pt1.X - pt2.X);
+ double dy = ((double)pt1.Y - pt2.Y);
+ return (Dx*Dx + dy*dy);
+}
+//------------------------------------------------------------------------------
+
+double DistanceFromLineSqrd(
+ const IntPoint& pt, const IntPoint& ln1, const IntPoint& ln2)
+{
+ //The equation of a line in general form (Ax + By + C = 0)
+ //given 2 points (x¹,y¹) & (x²,y²) is ...
+ //(y¹ - y²)x + (x² - x¹)y + (y² - y¹)x¹ - (x² - x¹)y¹ = 0
+ //A = (y¹ - y²); B = (x² - x¹); C = (y² - y¹)x¹ - (x² - x¹)y¹
+ //perpendicular distance of point (x³,y³) = (Ax³ + By³ + C)/Sqrt(A² + B²)
+ //see http://en.wikipedia.org/wiki/Perpendicular_distance
+ double A = double(ln1.Y - ln2.Y);
+ double B = double(ln2.X - ln1.X);
+ double C = A * ln1.X + B * ln1.Y;
+ C = A * pt.X + B * pt.Y - C;
+ return (C * C) / (A * A + B * B);
+}
+//---------------------------------------------------------------------------
+
+bool SlopesNearCollinear(const IntPoint& pt1,
+ const IntPoint& pt2, const IntPoint& pt3, double distSqrd)
+{
+ //this function is more accurate when the point that's geometrically
+ //between the other 2 points is the one that's tested for distance.
+ //ie makes it more likely to pick up 'spikes' ...
+ if (Abs(pt1.X - pt2.X) > Abs(pt1.Y - pt2.Y))
+ {
+ if ((pt1.X > pt2.X) == (pt1.X < pt3.X))
+ return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
+ else if ((pt2.X > pt1.X) == (pt2.X < pt3.X))
+ return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
+ else
+ return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
+ }
+ else
+ {
+ if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y))
+ return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;
+ else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y))
+ return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;
+ else
+ return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;
+ }
+}
+//------------------------------------------------------------------------------
+
+bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd)
+{
+ double Dx = (double)pt1.X - pt2.X;
+ double dy = (double)pt1.Y - pt2.Y;
+ return ((Dx * Dx) + (dy * dy) <= distSqrd);
+}
+//------------------------------------------------------------------------------
+
+OutPt* ExcludeOp(OutPt* op)
+{
+ OutPt* result = op->Prev;
+ result->Next = op->Next;
+ op->Next->Prev = result;
+ result->Idx = 0;
+ return result;
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance)
+{
+ //distance = proximity in units/pixels below which vertices
+ //will be stripped. Default ~= sqrt(2).
+
+ size_t size = in_poly.size();
+
+ if (size == 0)
+ {
+ out_poly.clear();
+ return;
+ }
+
+ OutPt* outPts = new OutPt[size];
+ for (size_t i = 0; i < size; ++i)
+ {
+ outPts[i].Pt = in_poly[i];
+ outPts[i].Next = &outPts[(i + 1) % size];
+ outPts[i].Next->Prev = &outPts[i];
+ outPts[i].Idx = 0;
+ }
+
+ double distSqrd = distance * distance;
+ OutPt* op = &outPts[0];
+ while (op->Idx == 0 && op->Next != op->Prev)
+ {
+ if (PointsAreClose(op->Pt, op->Prev->Pt, distSqrd))
+ {
+ op = ExcludeOp(op);
+ size--;
+ }
+ else if (PointsAreClose(op->Prev->Pt, op->Next->Pt, distSqrd))
+ {
+ ExcludeOp(op->Next);
+ op = ExcludeOp(op);
+ size -= 2;
+ }
+ else if (SlopesNearCollinear(op->Prev->Pt, op->Pt, op->Next->Pt, distSqrd))
+ {
+ op = ExcludeOp(op);
+ size--;
+ }
+ else
+ {
+ op->Idx = 1;
+ op = op->Next;
+ }
+ }
+
+ if (size < 3) size = 0;
+ out_poly.resize(size);
+ for (size_t i = 0; i < size; ++i)
+ {
+ out_poly[i] = op->Pt;
+ op = op->Next;
+ }
+ delete [] outPts;
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygon(Path& poly, double distance)
+{
+ CleanPolygon(poly, poly, distance);
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance)
+{
+ for (Paths::size_type i = 0; i < in_polys.size(); ++i)
+ CleanPolygon(in_polys[i], out_polys[i], distance);
+}
+//------------------------------------------------------------------------------
+
+void CleanPolygons(Paths& polys, double distance)
+{
+ CleanPolygons(polys, polys, distance);
+}
+//------------------------------------------------------------------------------
+
+void Minkowski(const Path& poly, const Path& path,
+ Paths& solution, bool isSum, bool isClosed)
+{
+ int delta = (isClosed ? 1 : 0);
+ size_t polyCnt = poly.size();
+ size_t pathCnt = path.size();
+ Paths pp;
+ pp.reserve(pathCnt);
+ if (isSum)
+ for (size_t i = 0; i < pathCnt; ++i)
+ {
+ Path p;
+ p.reserve(polyCnt);
+ for (size_t j = 0; j < poly.size(); ++j)
+ p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));
+ pp.push_back(p);
+ }
+ else
+ for (size_t i = 0; i < pathCnt; ++i)
+ {
+ Path p;
+ p.reserve(polyCnt);
+ for (size_t j = 0; j < poly.size(); ++j)
+ p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));
+ pp.push_back(p);
+ }
+
+ solution.clear();
+ solution.reserve((pathCnt + delta) * (polyCnt + 1));
+ for (size_t i = 0; i < pathCnt - 1 + delta; ++i)
+ for (size_t j = 0; j < polyCnt; ++j)
+ {
+ Path quad;
+ quad.reserve(4);
+ quad.push_back(pp[i % pathCnt][j % polyCnt]);
+ quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);
+ quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);
+ quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);
+ if (!Orientation(quad)) ReversePath(quad);
+ solution.push_back(quad);
+ }
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed)
+{
+ Minkowski(pattern, path, solution, true, pathIsClosed);
+ Clipper c;
+ c.AddPaths(solution, ptSubject, true);
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+void TranslatePath(const Path& input, Path& output, IntPoint delta)
+{
+ //precondition: input != output
+ output.resize(input.size());
+ for (size_t i = 0; i < input.size(); ++i)
+ output[i] = IntPoint(input[i].X + delta.X, input[i].Y + delta.Y);
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed)
+{
+ Clipper c;
+ for (size_t i = 0; i < paths.size(); ++i)
+ {
+ Paths tmp;
+ Minkowski(pattern, paths[i], tmp, true, pathIsClosed);
+ c.AddPaths(tmp, ptSubject, true);
+ if (pathIsClosed)
+ {
+ Path tmp2;
+ TranslatePath(paths[i], tmp2, pattern[0]);
+ c.AddPath(tmp2, ptClip, true);
+ }
+ }
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution)
+{
+ Minkowski(poly1, poly2, solution, false, true);
+ Clipper c;
+ c.AddPaths(solution, ptSubject, true);
+ c.Execute(ctUnion, solution, pftNonZero, pftNonZero);
+}
+//------------------------------------------------------------------------------
+
+enum NodeType {ntAny, ntOpen, ntClosed};
+
+void AddPolyNodeToPaths(const PolyNode& polynode, NodeType nodetype, Paths& paths)
+{
+ bool match = true;
+ if (nodetype == ntClosed) match = !polynode.IsOpen();
+ else if (nodetype == ntOpen) return;
+
+ if (!polynode.Contour.empty() && match)
+ paths.push_back(polynode.Contour);
+ for (int i = 0; i < polynode.ChildCount(); ++i)
+ AddPolyNodeToPaths(*polynode.Childs[i], nodetype, paths);
+}
+//------------------------------------------------------------------------------
+
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ AddPolyNodeToPaths(polytree, ntAny, paths);
+}
+//------------------------------------------------------------------------------
+
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ AddPolyNodeToPaths(polytree, ntClosed, paths);
+}
+//------------------------------------------------------------------------------
+
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths)
+{
+ paths.resize(0);
+ paths.reserve(polytree.Total());
+ //Open paths are top level only, so ...
+ for (int i = 0; i < polytree.ChildCount(); ++i)
+ if (polytree.Childs[i]->IsOpen())
+ paths.push_back(polytree.Childs[i]->Contour);
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p)
+{
+ s << "(" << p.X << "," << p.Y << ")";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const Path &p)
+{
+ if (p.empty()) return s;
+ Path::size_type last = p.size() -1;
+ for (Path::size_type i = 0; i < last; i++)
+ s << "(" << p[i].X << "," << p[i].Y << "), ";
+ s << "(" << p[last].X << "," << p[last].Y << ")\n";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+std::ostream& operator <<(std::ostream &s, const Paths &p)
+{
+ for (Paths::size_type i = 0; i < p.size(); i++)
+ s << p[i];
+ s << "\n";
+ return s;
+}
+//------------------------------------------------------------------------------
+
+} //ClipperLib namespace
diff --git a/dviware/dvisvgm/libs/clipper/clipper.hpp b/dviware/dvisvgm/libs/clipper/clipper.hpp
new file mode 100644
index 0000000000..fd4fe142a8
--- /dev/null
+++ b/dviware/dvisvgm/libs/clipper/clipper.hpp
@@ -0,0 +1,429 @@
+/*******************************************************************************
+* *
+* Author : Angus Johnson *
+* Version : 6.2.1 *
+* Date : 31 October 2014 *
+* Website : http://www.angusj.com *
+* Copyright : Angus Johnson 2010-2014 *
+* *
+* License: *
+* Use, modification & distribution is subject to Boost Software License Ver 1. *
+* http://www.boost.org/LICENSE_1_0.txt *
+* *
+* Attributions: *
+* The code in this library is an extension of Bala Vatti's clipping algorithm: *
+* "A generic solution to polygon clipping" *
+* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. *
+* http://portal.acm.org/citation.cfm?id=129906 *
+* *
+* Computer graphics and geometric modeling: implementation and algorithms *
+* By Max K. Agoston *
+* Springer; 1 edition (January 4, 2005) *
+* http://books.google.com/books?q=vatti+clipping+agoston *
+* *
+* See also: *
+* "Polygon Offsetting by Computing Winding Numbers" *
+* Paper no. DETC2005-85513 pp. 565-575 *
+* ASME 2005 International Design Engineering Technical Conferences *
+* and Computers and Information in Engineering Conference (IDETC/CIE2005) *
+* September 24-28, 2005 , Long Beach, California, USA *
+* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf *
+* *
+*******************************************************************************/
+
+#ifndef clipper_hpp
+#define clipper_hpp
+
+#define CLIPPER_VERSION "6.2.1"
+
+//use_int32: When enabled 32bit ints are used instead of 64bit ints. This
+//improve performance but coordinate values are limited to the range +/- 46340
+//#define use_int32
+
+//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance.
+#define use_xyz
+
+//use_lines: Enables line clipping. Adds a very minor cost to performance.
+#define use_lines
+
+//use_deprecated: Enables temporary support for the obsolete functions
+//#define use_deprecated
+
+#include <vector>
+#include <set>
+#include <stdexcept>
+#include <cstdint>
+#include <cstring>
+#include <cstdlib>
+#include <ostream>
+#include <functional>
+#include <queue>
+
+namespace ClipperLib {
+
+enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };
+enum PolyType { ptSubject, ptClip };
+//By far the most widely used winding rules for polygon filling are
+//EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32)
+//Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL)
+//see http://glprogramming.com/red/chapter11.html
+enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative };
+
+struct ZLabel {
+ ZLabel () : id(0), t(0) {}
+ ZLabel (int32_t ii) : id(ii), t(0) {}
+ ZLabel (int32_t ii, double tt) : id(ii), t(tt) {}
+ bool operator == (const ZLabel &l) const {return id == l.id;}
+ int32_t id;
+ double t;
+};
+
+inline std::ostream& operator << (std::ostream &os, const ZLabel &l) {
+ return os << l.id << ':' << l.t;
+}
+
+struct ZType {
+ ZType (uint64_t v) : label1(v >> 32), label2(v & 0xffffffff) {}
+ ZType (int32_t id1, int32_t id2) : label1(id1), label2(id2) {}
+ ZType (const ZLabel &l1, const ZLabel &l2) : label1(l1), label2(l2) {}
+ const ZLabel& minLabel () const {return (label1.id < label2.id) ? label1 : label2;}
+ const ZLabel& maxLabel () const {return (label1.id > label2.id) ? label1 : label2;}
+
+ const ZLabel& otherLabel (const ZLabel &l) const {
+ return (l.id == label1.id && l.t == label1.t) ? label2 : label1;
+ }
+
+ bool operator == (const ZType &p) const {return minLabel() == p.minLabel() && maxLabel() == p.maxLabel();}
+ operator uint64_t () const {return (uint64_t(label1.id) << 32) & label2.id;}
+ ZLabel label1, label2;
+};
+
+inline std::ostream& operator << (std::ostream &os, const ZType &z) {
+ return os << '[' << z.label1 << '|' << z.label2 << ']';
+}
+
+#ifdef use_int32
+ typedef int cInt;
+ static cInt const loRange = 0x7FFF;
+ static cInt const hiRange = 0x7FFF;
+#else
+ typedef signed long long cInt;
+ static cInt const loRange = 0x3FFFFFFF;
+ static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL;
+ typedef signed long long long64; //used by Int128 class
+ typedef unsigned long long ulong64;
+
+#endif
+
+struct IntPoint {
+ cInt X;
+ cInt Y;
+#ifdef use_xyz
+ ZType Z;
+ IntPoint(cInt x = 0, cInt y = 0, ZType z = 0): X(x), Y(y), Z(z) {};
+#else
+ IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};
+#endif
+
+ friend inline bool operator== (const IntPoint& a, const IntPoint& b)
+ {
+ return a.X == b.X && a.Y == b.Y;
+ }
+ friend inline bool operator!= (const IntPoint& a, const IntPoint& b)
+ {
+ return a.X != b.X || a.Y != b.Y;
+ }
+};
+//------------------------------------------------------------------------------
+
+typedef std::vector< IntPoint > Path;
+typedef std::vector< Path > Paths;
+
+inline Path& operator <<(Path& poly, const IntPoint& p) {poly.push_back(p); return poly;}
+inline Paths& operator <<(Paths& polys, const Path& p) {polys.push_back(p); return polys;}
+
+std::ostream& operator <<(std::ostream &s, const IntPoint &p);
+std::ostream& operator <<(std::ostream &s, const Path &p);
+std::ostream& operator <<(std::ostream &s, const Paths &p);
+
+struct DoublePoint
+{
+ double X;
+ double Y;
+ DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}
+ DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}
+};
+//------------------------------------------------------------------------------
+
+#ifdef use_xyz
+typedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);
+#endif
+
+enum InitOptions {ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4};
+enum JoinType {jtSquare, jtRound, jtMiter};
+enum EndType {etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound};
+
+class PolyNode;
+typedef std::vector< PolyNode* > PolyNodes;
+
+class PolyNode
+{
+public:
+ PolyNode();
+ virtual ~PolyNode(){};
+ Path Contour;
+ PolyNodes Childs;
+ PolyNode* Parent;
+ PolyNode* GetNext() const;
+ bool IsHole() const;
+ bool IsOpen() const;
+ int ChildCount() const;
+private:
+ unsigned Index; //node index in Parent.Childs
+ bool m_IsOpen;
+ JoinType m_jointype;
+ EndType m_endtype;
+ PolyNode* GetNextSiblingUp() const;
+ void AddChild(PolyNode& child);
+ friend class Clipper; //to access Index
+ friend class ClipperOffset;
+};
+
+class PolyTree: public PolyNode
+{
+public:
+ ~PolyTree(){Clear();};
+ PolyNode* GetFirst() const;
+ void Clear();
+ int Total() const;
+private:
+ PolyNodes AllNodes;
+ friend class Clipper; //to access AllNodes
+};
+
+bool Orientation(const Path &poly);
+double Area(const Path &poly);
+int PointInPolygon(const IntPoint &pt, const Path &path);
+
+void SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd);
+void SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);
+
+void CleanPolygon(const Path& in_poly, Path& out_poly, double distance = 1.415);
+void CleanPolygon(Path& poly, double distance = 1.415);
+void CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance = 1.415);
+void CleanPolygons(Paths& polys, double distance = 1.415);
+
+void MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed);
+void MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed);
+void MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution);
+
+void PolyTreeToPaths(const PolyTree& polytree, Paths& paths);
+void ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths);
+void OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);
+
+void ReversePath(Path& p);
+void ReversePaths(Paths& p);
+
+struct IntRect { cInt left; cInt top; cInt right; cInt bottom; };
+
+//enums that are used internally ...
+enum EdgeSide { esLeft = 1, esRight = 2};
+
+//forward declarations (for stuff used internally) ...
+struct TEdge;
+struct IntersectNode;
+struct LocalMinimum;
+struct Scanbeam;
+struct OutPt;
+struct OutRec;
+struct Join;
+
+typedef std::vector < OutRec* > PolyOutList;
+typedef std::vector < TEdge* > EdgeList;
+typedef std::vector < Join* > JoinList;
+typedef std::vector < IntersectNode* > IntersectList;
+
+//------------------------------------------------------------------------------
+
+//ClipperBase is the ancestor to the Clipper class. It should not be
+//instantiated directly. This class simply abstracts the conversion of sets of
+//polygon coordinates into edge objects that are stored in a LocalMinima list.
+class ClipperBase
+{
+public:
+ ClipperBase();
+ virtual ~ClipperBase();
+ bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);
+ bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);
+ virtual void Clear();
+ IntRect GetBounds();
+ bool PreserveCollinear() {return m_PreserveCollinear;};
+ void PreserveCollinear(bool value) {m_PreserveCollinear = value;};
+protected:
+ void DisposeLocalMinimaList();
+ TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);
+ void PopLocalMinima();
+ virtual void Reset();
+ TEdge* ProcessBound(TEdge* E, bool IsClockwise);
+ void DoMinimaLML(TEdge* E1, TEdge* E2, bool IsClosed);
+ TEdge* DescendToMin(TEdge *&E);
+ void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);
+
+ typedef std::vector<LocalMinimum> MinimaList;
+ MinimaList::iterator m_CurrentLM;
+ MinimaList m_MinimaList;
+
+ bool m_UseFullRange;
+ EdgeList m_edges;
+ bool m_PreserveCollinear;
+ bool m_HasOpenPaths;
+};
+//------------------------------------------------------------------------------
+
+class Clipper : public virtual ClipperBase
+{
+public:
+ Clipper(int initOptions = 0);
+ ~Clipper();
+ bool Execute(ClipType clipType,
+ Paths &solution,
+ PolyFillType subjFillType = pftEvenOdd,
+ PolyFillType clipFillType = pftEvenOdd);
+ bool Execute(ClipType clipType,
+ PolyTree &polytree,
+ PolyFillType subjFillType = pftEvenOdd,
+ PolyFillType clipFillType = pftEvenOdd);
+ bool ReverseSolution() {return m_ReverseOutput;};
+ void ReverseSolution(bool value) {m_ReverseOutput = value;};
+ bool StrictlySimple() {return m_StrictSimple;};
+ void StrictlySimple(bool value) {m_StrictSimple = value;};
+ //set the callback function for z value filling on intersections (otherwise Z is 0)
+#ifdef use_xyz
+ void ZFillFunction(ZFillCallback zFillFunc);
+#endif
+protected:
+ void Reset() override;
+ virtual bool ExecuteInternal();
+private:
+ PolyOutList m_PolyOuts;
+ JoinList m_Joins;
+ JoinList m_GhostJoins;
+ IntersectList m_IntersectList;
+ ClipType m_ClipType;
+ typedef std::priority_queue<cInt> ScanbeamList;
+ ScanbeamList m_Scanbeam;
+ TEdge *m_ActiveEdges;
+ TEdge *m_SortedEdges;
+ bool m_ExecuteLocked;
+ PolyFillType m_ClipFillType;
+ PolyFillType m_SubjFillType;
+ bool m_ReverseOutput;
+ bool m_UsingPolyTree;
+ bool m_StrictSimple;
+#ifdef use_xyz
+ ZFillCallback m_ZFill; //custom callback
+#endif
+ void SetWindingCount(TEdge& edge);
+ bool IsEvenOddFillType(const TEdge& edge) const;
+ bool IsEvenOddAltFillType(const TEdge& edge) const;
+ void InsertScanbeam(const cInt Y);
+ cInt PopScanbeam();
+ void InsertLocalMinimaIntoAEL(const cInt botY);
+ void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);
+ void AddEdgeToSEL(TEdge *edge);
+ void CopyAELToSEL();
+ void DeleteFromSEL(TEdge *e);
+ void DeleteFromAEL(TEdge *e);
+ void UpdateEdgeIntoAEL(TEdge *&e);
+ void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);
+ bool IsContributing(const TEdge& edge) const;
+ bool IsTopHorz(const cInt XPos);
+ void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);
+ void DoMaxima(TEdge *e);
+ void ProcessHorizontals(bool IsTopOfScanbeam);
+ void ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam);
+ void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
+ OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);
+ OutRec* GetOutRec(int idx);
+ void AppendPolygon(TEdge *e1, TEdge *e2);
+ void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);
+ OutRec* CreateOutRec();
+ OutPt* AddOutPt(TEdge *e, const IntPoint &pt);
+ void DisposeAllOutRecs();
+ void DisposeOutRec(PolyOutList::size_type index);
+ bool ProcessIntersections(const cInt topY);
+ void BuildIntersectList(const cInt topY);
+ void ProcessIntersectList();
+ void ProcessEdgesAtTopOfScanbeam(const cInt topY);
+ void BuildResult(Paths& polys);
+ void BuildResult2(PolyTree& polytree);
+ void SetHoleState(TEdge *e, OutRec *outrec);
+ void DisposeIntersectNodes();
+ bool FixupIntersectionOrder();
+ void FixupOutPolygon(OutRec &outrec);
+ bool IsHole(TEdge *e);
+ bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);
+ void FixHoleLinkage(OutRec &outrec);
+ void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt);
+ void ClearJoins();
+ void ClearGhostJoins();
+ void AddGhostJoin(OutPt *op, const IntPoint offPt);
+ bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);
+ void JoinCommonEdges();
+ void DoSimplePolygons();
+ void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec);
+ void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec);
+#ifdef use_xyz
+ void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);
+#endif
+};
+//------------------------------------------------------------------------------
+
+class ClipperOffset
+{
+public:
+ ClipperOffset(double miterLimit = 2.0, double roundPrecision = 0.25);
+ ~ClipperOffset();
+ void AddPath(const Path& path, JoinType joinType, EndType endType);
+ void AddPaths(const Paths& paths, JoinType joinType, EndType endType);
+ void Execute(Paths& solution, double delta);
+ void Execute(PolyTree& solution, double delta);
+ void Clear();
+ double MiterLimit;
+ double ArcTolerance;
+private:
+ Paths m_destPolys;
+ Path m_srcPoly;
+ Path m_destPoly;
+ std::vector<DoublePoint> m_normals;
+ double m_delta, m_sinA, m_sin, m_cos;
+ double m_miterLim, m_StepsPerRad;
+ IntPoint m_lowest;
+ PolyNode m_polyNodes;
+
+ void FixOrientations();
+ void DoOffset(double delta);
+ void OffsetPoint(int j, int& k, JoinType jointype);
+ void DoSquare(int j, int k);
+ void DoMiter(int j, int k, double r);
+ void DoRound(int j, int k);
+};
+//------------------------------------------------------------------------------
+
+class clipperException : public std::exception
+{
+ public:
+ clipperException(const char* description): m_descr(description) {}
+ virtual ~clipperException() throw() {}
+ virtual const char* what() const throw() override {return m_descr.c_str();}
+ private:
+ std::string m_descr;
+};
+//------------------------------------------------------------------------------
+
+} //ClipperLib namespace
+
+#endif //clipper_hpp
+
+
diff --git a/dviware/dvisvgm/libs/defs.am b/dviware/dvisvgm/libs/defs.am
new file mode 100644
index 0000000000..6e220e4334
--- /dev/null
+++ b/dviware/dvisvgm/libs/defs.am
@@ -0,0 +1,19 @@
+if !HAVE_BROTLI
+BROTLI_CFLAGS += -I$(dvisvgm_srcdir)/libs/brotli/include
+BROTLI_LIBS += ../libs/brotli/libbrotli.a
+endif
+
+if !HAVE_POTRACE
+POTRACE_CFLAGS = -I$(dvisvgm_srcdir)/libs/potrace
+POTRACE_LIBS = ../libs/potrace/libpotrace.a
+endif
+
+if !HAVE_WOFF2
+WOFF2_CFLAGS += -I$(dvisvgm_srcdir)/libs/woff2/include
+WOFF2_LIBS += ../libs/woff2/libwoff2.a
+endif
+
+if !HAVE_XXHASH
+XXHASH_CFLAGS = -I$(dvisvgm_srcdir)/libs/xxHash
+XXHASH_LIBS = ../libs/xxHash/libxxhash.a
+endif
diff --git a/dviware/dvisvgm/libs/ff-woff/LICENSE b/dviware/dvisvgm/libs/ff-woff/LICENSE
new file mode 100644
index 0000000000..57be819b4d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/LICENSE
@@ -0,0 +1,281 @@
+# FontForge Licensing
+
+FontForge is available as a whole under the terms of the [GNU GPL](http://www.gnu.org/copyleft/gpl.html), version
+3 or any later version.
+However, almost all of its parts are available under the "revised BSD license" ([pdf](http://www.law.yi.org/~sfllaw/talks/bsd.pdf)) because FontForge was mostly written by George Williams, using that license.
+
+The Revised BSD License is very permissive, and allows for code to be combined with other code under other licenses.
+There are many useful libraries available under copyleft libre licenses, such as the LGPL and GPL, which FontForge started to use in 2012.
+For example, Pango and Cairo are available under the LGPL, and gnulib is available under the GPL.
+Advanced features added since 2012 are licensed by their individual developers under the GPLv3.
+
+## How To License Contributions
+
+- Contributions to existing files must be made under the existing license for that file
+- Contributions in new files should be made under the original Revised BSD License, but any license compatible with the GPLv3 is fine
+
+The majority of FontForge was written by George Williams and published under the revised BSD license.
+This license is permitted to be compiled with added GNU GPL source code to build a FontForge executable program.
+
+FontForge was known from 2000 to 2004 as PfaEdit, and was written and developed primarily by George Williams from 2000 until 2012.
+It is published as free/libre software and distributed under the 3-clause BSD license.
+Later, when development slowed down and then stopped in 2012, the FontForge community began to take an interest in improving FontForge further with fixes, modifications, libraries, patches, and other additions which have been introduced under the same, or different, yet, compatible licenses.
+
+## Copyright Notices, Contributors, Translators
+
+See [`AUTHORS`](https://github.com/fontforge/fontforge/blob/master/AUTHORS)
+
+## The Revised BSD License used by FontForge
+
+```
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+The name of the author may not be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+```
+
+## LGPL and GPL
+
+FontForge includes the GPLv3 in the source tree as [COPYING.gplv3](https://github.com/fontforge/fontforge/blob/master/COPYING.gplv3)
+
+You can read the [LGPL](http://www.gnu.org/licenses/lgpl.html) and [GPL](http://www.gnu.org/copyleft/gpl.html) on the GNU website.
+
+## Source Files
+
+### FontForge Files Using The Revised BSD License
+
+These files were created under the Revised BSD License:
+```
+fontforge-20120731-b/
+install-sh
+
+fontforge-20120731-b/fontforge:
+alignment.c fontinfo.c savefont.h
+anchorsaway.c fontview.c savefontdlg.c
+asmfpst.c fontviewbase.c scriptfuncs.h
+autohint.c freetype.c scripting.c
+autosave.c freetypeui.c scripting.h
+autotrace.c ftdelta.c scriptingdlg.c
+autowidth.c fvcomposite.c scstyles.c
+autowidth2.c fvfonts.c scstylesui.c
+autowidth2.h fvfontsdlg.c sd.h
+autowidth2dlg.c fvmetrics.c search.c
+basedlg.c fvmetrics.h search.h
+baseviews.h fvmetricsdlg.c searchview.c
+bdfinfo.c glyphcomp.c sfd.c
+bitmapchar.c gotodlg.c sfd1.c
+bitmapcontrol.c groups.c sfd1.h
+bitmapcontrol.h groups.h sfddiff.c
+bitmapdlg.c groupsdlg.c sflayout.c
+bitmapview.c histograms.c sflayoutP.h
+bvedit.c http.c sftextfield.c
+charinfo.c ikarus.c sftextfieldP.h
+charview.c images.c showatt.c
+clipnoui.c justifydlg.c simplifydlg.c
+clipui.c kernclass.c spiro.c
+combinations.c layer2layer.c splashimage.c
+configure-fontforge.h lookups.c splinechar.c
+contextchain.c lookupui.c splinefill.c
+cursors.c macbinary.c splinefont.c
+cvaddpoints.c macenc.c splinefont.h
+cvdebug.c macencui.c splineorder2.c
+cvdgloss.c math.c splineoverlap.c
+cvexport.c mathconstants.c splinerefigure.c
+cvexportdlg.c metricsview.c splinesaveafm.c
+cvfreehand.c mm.c splinesave.c
+cvgetinfo.c mm.h splinestroke.c
+cvgridfit.c mmdlg.c splineutil.c
+cvhand.c namehash.h splineutil2.c
+cvhints.c namelist.c start.c
+cvimages.c nonlineartrans.c startnoui.c
+cvimportdlg.c nonlineartrans.h startui.c
+cvknife.c nonlineartransui.c statemachine.c
+cvpalettes.c noprefs.c stemdb.c
+cvpointer.c nouiutil.c stemdb.h
+cvruler.c nowakowskittfinstr.c svg.c
+cvshapes.c tilepath.c
+cvstroke.c openfontdlg.c tottf.c
+cvtranstools.c palmfonts.c tottfaat.c
+cvundoes.c parsepdf.c tottfgpos.c
+delta.h parsepfa.c tottfvar.c
+deltaui.c parsettf.c transform.c
+displayfonts.c parsettfatt.c ttf.h
+dumpbdf.c parsettfbmf.c ttfinstrs.c
+dumppfa.c parsettfvar.c ttfinstrs.h
+edgelist.h PfEd.h ttfinstrsui.c
+edgelist2.h plugins.c ttfspecial.c
+effects.c plugins.h ufo.c
+effectsui.c prefs.c uiinterface.h
+encoding.c print.c uiutil.c
+encodingui.c print.h unicoderange.c
+featurefile.c problems.c unicoderange.h
+fffreetype.h psfont.h utils.c
+ffpython.h psread.c views.h
+fontforge.h python.c windowmenu.c
+fontforgeui.h pythonui.c winfonts.c
+fontforgevw.h savefont.c woff.c
+
+fontforge-20120731-b/gdraw:
+choosericons.c gfiledlg.c gradio.c
+colorP.h ggadgetP.h gresedit.c
+ctlvalues.c ggadgets.c gresource.c
+drawboxborder.c ggroupbox.c gresourceimage.c
+gaskdlg.c ghvbox.c gresourceP.h
+gbuttons.c gimagebmpP.h growcol.c
+gchardlg.c gimageclut.c gsavefiledlg.c
+gcolor.c gimagecvt.c gscrollbar.c
+gcontainer.c gimagepsdraw.c gspacer.c
+gdraw.c gimagewriteeps.c gtabset.c
+gdrawable.c gimagexdraw.c gtextfield.c
+gdrawbuildchars.c gkeysym.c gtextinfo.c
+gdrawerror.c glist.c gwidgetP.h
+gdrawgimage.c gmatrixedit.c gwidgets.c
+gdrawP.h gmenu.c gxcdraw.c
+gdrawtxt.c gprogress.c gxcdrawP.h
+gdrawtxtinit.c gpsdraw.c gxdrawP.h
+gdrawwacomdriver.c gpsdrawP.h hotkeys.c
+gfilechooser.c gpstxtinit.c hotkeys.h
+
+fontforge-20120731-b/gutils:
+dynamic.c gimagereadrgb.c giofile.c
+fsys.c gimagereadtiff.c gioftp.c
+gcol.c gimagereadxbm.c gioftpP.h
+gimage.c gimagereadxpm.c giofuncP.h
+gimagebmpP.h gimagewritebmp.c giohosts.c
+gimageread.c gimagewritegimage.c giomime.c
+gimagereadbmp.c gimagewritejpeg.c gioP.h
+gimagereadgif.c gimagewritepng.c giothread.c
+gimagereadjpeg.c gimagewritexbm.c giotrans.c
+gimagereadpng.c gimagewritexpm.c gwwintl.c
+gimagereadras.c gio.c
+
+fontforge-20120731-b/inc:
+basics.h gfile.h gio.h gwidget.h
+charset.h ggadget.h gprogress.h gwwiconv.h
+fileutil.h gicons.h gresedit.h intl.h
+gdraw.h gimage.h gresource.h ustring.h
+
+fontforge-20120731-b/Packaging:
+fontforge.desktop FontForge.spec fontforge.xml
+FontForge-doc.spec FontForge.static.spec
+
+fontforge-20120731-b/pycontrib:
+excepthook.py
+
+fontforge-20120731-b/Unicode:
+char.c makebuildtables.c ucharmap.c
+dump.c makeutype.c usprintf.c
+gwwiconv.c memory.c ustring.c
+```
+
+### FontForge Files Using The GPL Licenses
+
+These files were created under the GPL License:
+```
+fontforge-20120731-b/
+aclocal.m4 configure.dynamic configure.static.in
+config.guess configure.dynamic.in ltmain.sh
+config.sub configure.in Makefile.dynamic.in
+configure configure.static Makefile.static.in
+
+fontforge-20120731-b/fontforge:
+Makefile.dynamic.in Makefile.static.in
+
+fontforge-20120731-b/gdraw:
+Makefile.dynamic.in Makefile.static.in
+
+fontforge-20120731-b/gutils:
+giomime.c Makefile.dynamic.in Makefile.static.in
+
+fontforge-20120731-b/inc:
+fontforge-config.h.in
+
+fontforge-20120731-b/plugins:
+ANALYZE_MAP.COM Makefile.in
+
+fontforge-20120731-b/Unicode:
+Makefile.dynamic.in Makefile.static.in
+```
+
+### FontForge Files Using The Open Group License
+
+```
+fontforge-20120731-b/fontforge:
+fvimportbdf.c
+
+fontforge-20120731-b/gdraw:
+fontP.h
+
+fontforge-20120731-b/inc:
+gkeysym.h
+
+### Other Files
+
+These are generated files, or do not have a license specified:
+
+```
+fontforge-20120731-b/
+LICENSE README-Unix.html
+fontforge.pc.in README-Mac.html systemspecific.in
+INSTALL README-unix VERSION
+
+fontforge-20120731-b/fontforge:
+acorn2sfd.c fontimage.pe pottitle.patch
+autowidth.h fontlint.1 pua.c
+bezctx_ff.c fontlint.pe sfddiff.1
+bezctx_ff.h langfreq.c sfddiff.pe
+crctab.c libffstamp.h stamp.c
+libstamp.pre stamper.c
+diffstubs.c threaddummy.c
+encoding.h lookups.h utf8.pot
+exelibstamp.pre MacFontForgeApp.zip
+fontforge.1 othersubrs.c zapfnomen.c
+fontimage.1 potmstitle.patch
+
+fontforge-20120731-b/gdraw:
+genkeysym.c gxdraw.c xkeysyms_unicode.c
+
+fontforge-20120731-b/inc:
+chardata.h dynamic.h utype.h
+
+fontforge-20120731-b/gutils:
+divisors.c
+
+fontforge-20120731-b/plugins:
+gb12345.c
+
+fontforge-20120731-b/po:
+ca.po el.po es.po it.po ml.po ru.po uk.po zh_CN.po
+de.po en_GB.po fr.po ja.po pl.po toengb.c vi.po zh_TW.po
+
+fontforge-20120731-b/pyhook:
+fontforgepyhook.c psMatpyhook.c setup.py.in
+loadfontforge.h README
+
+fontforge-20120731-b/Unicode:
+alphabet.c cjk.c README.TXT
+ArabicForms.c combiners.h unialt.c
+backtrns.c utype.c
+```
diff --git a/dviware/dvisvgm/libs/ff-woff/Makefile.am b/dviware/dvisvgm/libs/ff-woff/Makefile.am
new file mode 100644
index 0000000000..22492d9cc6
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/Makefile.am
@@ -0,0 +1,90 @@
+noinst_LIBRARIES = libfontforge.a
+
+libfontforge_a_SOURCES = \
+ fontforge/PfEd.h \
+ fontforge/alphabet.c \
+ fontforge/asmfpst.c \
+ fontforge/autohint.c \
+ fontforge/char.c \
+ fontforge/cjk.c \
+ fontforge/configure-fontforge.h \
+ fontforge/cvundoes.c \
+ fontforge/dumppfa.c \
+ fontforge/edgelist.h \
+ fontforge/edgelist2.h \
+ fontforge/encoding.c \
+ fontforge/encoding.h \
+ fontforge/fflocale.c \
+ fontforge/fflocale.h \
+ fontforge/fontforge-config.h \
+ fontforge/fontforge.h \
+ fontforge/fontforgevw.h \
+ fontforge/fvfonts.c \
+ fontforge/gwwiconv.c \
+ fontforge/libffstamp.h \
+ fontforge/lookups.c \
+ fontforge/macbinary.c \
+ fontforge/macenc.c \
+ fontforge/mathconstants.c \
+ fontforge/memory.c \
+ fontforge/mm.c \
+ fontforge/namehash.h \
+ fontforge/namelist.c \
+ fontforge/nouiutil.c \
+ fontforge/nowakowskittfinstr.c \
+ fontforge/parsepfa.c \
+ fontforge/parsettf.c \
+ fontforge/parsettfatt.c \
+ fontforge/psfont.h \
+ fontforge/psread.c \
+ fontforge/pua.c \
+ fontforge/sd.h \
+ fontforge/sfd.c \
+ fontforge/sfd1.c \
+ fontforge/sfd1.h \
+ fontforge/splinechar.c \
+ fontforge/splinefont.c \
+ fontforge/splinefont.h \
+ fontforge/splineorder2.c \
+ fontforge/splineoverlap.c \
+ fontforge/splinerefigure.c \
+ fontforge/splinesave.c \
+ fontforge/splinesaveafm.c \
+ fontforge/splineutil.c \
+ fontforge/splineutil2.c \
+ fontforge/start.c \
+ fontforge/stemdb.c \
+ fontforge/stemdb.h \
+ fontforge/tables.h \
+ fontforge/tmpfile2.cpp \
+ fontforge/tottf.c \
+ fontforge/tottfaat.c \
+ fontforge/tottfgpos.c \
+ fontforge/tottfvar.c \
+ fontforge/ttf.h \
+ fontforge/ttfinstrs.c \
+ fontforge/ttfinstrs.h \
+ fontforge/ttfspecial.c \
+ fontforge/uiinterface.h \
+ fontforge/unialt.c \
+ fontforge/ustring.c \
+ fontforge/utype.c \
+ fontforge/woff.c \
+ inc/basics.h \
+ inc/chardata.h \
+ inc/charset.h \
+ inc/dlist.h \
+ inc/ffintl.h \
+ inc/gimage.h \
+ inc/gnetwork.h \
+ inc/gwwiconv.h \
+ inc/ustring.h \
+ inc/utype.h
+
+EXTRA_DIST = LICENSE
+
+AM_CFLAGS = -I$(srcdir)/inc -I$(srcdir)/fontforge $(ZLIB_CFLAGS)
+
+@CODE_COVERAGE_RULES@
+
+CLEANFILES = *.gcda *.gcno
diff --git a/dviware/dvisvgm/libs/ff-woff/Makefile.in b/dviware/dvisvgm/libs/ff-woff/Makefile.in
new file mode 100644
index 0000000000..5b7a271e02
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/Makefile.in
@@ -0,0 +1,1084 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/ff-woff
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libfontforge_a_AR = $(AR) $(ARFLAGS)
+libfontforge_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
+am_libfontforge_a_OBJECTS = fontforge/alphabet.$(OBJEXT) \
+ fontforge/asmfpst.$(OBJEXT) fontforge/autohint.$(OBJEXT) \
+ fontforge/char.$(OBJEXT) fontforge/cjk.$(OBJEXT) \
+ fontforge/cvundoes.$(OBJEXT) fontforge/dumppfa.$(OBJEXT) \
+ fontforge/encoding.$(OBJEXT) fontforge/fflocale.$(OBJEXT) \
+ fontforge/fvfonts.$(OBJEXT) fontforge/gwwiconv.$(OBJEXT) \
+ fontforge/lookups.$(OBJEXT) fontforge/macbinary.$(OBJEXT) \
+ fontforge/macenc.$(OBJEXT) fontforge/mathconstants.$(OBJEXT) \
+ fontforge/memory.$(OBJEXT) fontforge/mm.$(OBJEXT) \
+ fontforge/namelist.$(OBJEXT) fontforge/nouiutil.$(OBJEXT) \
+ fontforge/nowakowskittfinstr.$(OBJEXT) \
+ fontforge/parsepfa.$(OBJEXT) fontforge/parsettf.$(OBJEXT) \
+ fontforge/parsettfatt.$(OBJEXT) fontforge/psread.$(OBJEXT) \
+ fontforge/pua.$(OBJEXT) fontforge/sfd.$(OBJEXT) \
+ fontforge/sfd1.$(OBJEXT) fontforge/splinechar.$(OBJEXT) \
+ fontforge/splinefont.$(OBJEXT) \
+ fontforge/splineorder2.$(OBJEXT) \
+ fontforge/splineoverlap.$(OBJEXT) \
+ fontforge/splinerefigure.$(OBJEXT) \
+ fontforge/splinesave.$(OBJEXT) \
+ fontforge/splinesaveafm.$(OBJEXT) \
+ fontforge/splineutil.$(OBJEXT) fontforge/splineutil2.$(OBJEXT) \
+ fontforge/start.$(OBJEXT) fontforge/stemdb.$(OBJEXT) \
+ fontforge/tmpfile2.$(OBJEXT) fontforge/tottf.$(OBJEXT) \
+ fontforge/tottfaat.$(OBJEXT) fontforge/tottfgpos.$(OBJEXT) \
+ fontforge/tottfvar.$(OBJEXT) fontforge/ttfinstrs.$(OBJEXT) \
+ fontforge/ttfspecial.$(OBJEXT) fontforge/unialt.$(OBJEXT) \
+ fontforge/ustring.$(OBJEXT) fontforge/utype.$(OBJEXT) \
+ fontforge/woff.$(OBJEXT)
+libfontforge_a_OBJECTS = $(am_libfontforge_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = fontforge/$(DEPDIR)/alphabet.Po \
+ fontforge/$(DEPDIR)/asmfpst.Po fontforge/$(DEPDIR)/autohint.Po \
+ fontforge/$(DEPDIR)/char.Po fontforge/$(DEPDIR)/cjk.Po \
+ fontforge/$(DEPDIR)/cvundoes.Po fontforge/$(DEPDIR)/dumppfa.Po \
+ fontforge/$(DEPDIR)/encoding.Po \
+ fontforge/$(DEPDIR)/fflocale.Po fontforge/$(DEPDIR)/fvfonts.Po \
+ fontforge/$(DEPDIR)/gwwiconv.Po fontforge/$(DEPDIR)/lookups.Po \
+ fontforge/$(DEPDIR)/macbinary.Po fontforge/$(DEPDIR)/macenc.Po \
+ fontforge/$(DEPDIR)/mathconstants.Po \
+ fontforge/$(DEPDIR)/memory.Po fontforge/$(DEPDIR)/mm.Po \
+ fontforge/$(DEPDIR)/namelist.Po \
+ fontforge/$(DEPDIR)/nouiutil.Po \
+ fontforge/$(DEPDIR)/nowakowskittfinstr.Po \
+ fontforge/$(DEPDIR)/parsepfa.Po \
+ fontforge/$(DEPDIR)/parsettf.Po \
+ fontforge/$(DEPDIR)/parsettfatt.Po \
+ fontforge/$(DEPDIR)/psread.Po fontforge/$(DEPDIR)/pua.Po \
+ fontforge/$(DEPDIR)/sfd.Po fontforge/$(DEPDIR)/sfd1.Po \
+ fontforge/$(DEPDIR)/splinechar.Po \
+ fontforge/$(DEPDIR)/splinefont.Po \
+ fontforge/$(DEPDIR)/splineorder2.Po \
+ fontforge/$(DEPDIR)/splineoverlap.Po \
+ fontforge/$(DEPDIR)/splinerefigure.Po \
+ fontforge/$(DEPDIR)/splinesave.Po \
+ fontforge/$(DEPDIR)/splinesaveafm.Po \
+ fontforge/$(DEPDIR)/splineutil.Po \
+ fontforge/$(DEPDIR)/splineutil2.Po \
+ fontforge/$(DEPDIR)/start.Po fontforge/$(DEPDIR)/stemdb.Po \
+ fontforge/$(DEPDIR)/tmpfile2.Po fontforge/$(DEPDIR)/tottf.Po \
+ fontforge/$(DEPDIR)/tottfaat.Po \
+ fontforge/$(DEPDIR)/tottfgpos.Po \
+ fontforge/$(DEPDIR)/tottfvar.Po \
+ fontforge/$(DEPDIR)/ttfinstrs.Po \
+ fontforge/$(DEPDIR)/ttfspecial.Po \
+ fontforge/$(DEPDIR)/unialt.Po fontforge/$(DEPDIR)/ustring.Po \
+ fontforge/$(DEPDIR)/utype.Po fontforge/$(DEPDIR)/woff.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+SOURCES = $(libfontforge_a_SOURCES)
+DIST_SOURCES = $(libfontforge_a_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LIBRARIES = libfontforge.a
+libfontforge_a_SOURCES = \
+ fontforge/PfEd.h \
+ fontforge/alphabet.c \
+ fontforge/asmfpst.c \
+ fontforge/autohint.c \
+ fontforge/char.c \
+ fontforge/cjk.c \
+ fontforge/configure-fontforge.h \
+ fontforge/cvundoes.c \
+ fontforge/dumppfa.c \
+ fontforge/edgelist.h \
+ fontforge/edgelist2.h \
+ fontforge/encoding.c \
+ fontforge/encoding.h \
+ fontforge/fflocale.c \
+ fontforge/fflocale.h \
+ fontforge/fontforge-config.h \
+ fontforge/fontforge.h \
+ fontforge/fontforgevw.h \
+ fontforge/fvfonts.c \
+ fontforge/gwwiconv.c \
+ fontforge/libffstamp.h \
+ fontforge/lookups.c \
+ fontforge/macbinary.c \
+ fontforge/macenc.c \
+ fontforge/mathconstants.c \
+ fontforge/memory.c \
+ fontforge/mm.c \
+ fontforge/namehash.h \
+ fontforge/namelist.c \
+ fontforge/nouiutil.c \
+ fontforge/nowakowskittfinstr.c \
+ fontforge/parsepfa.c \
+ fontforge/parsettf.c \
+ fontforge/parsettfatt.c \
+ fontforge/psfont.h \
+ fontforge/psread.c \
+ fontforge/pua.c \
+ fontforge/sd.h \
+ fontforge/sfd.c \
+ fontforge/sfd1.c \
+ fontforge/sfd1.h \
+ fontforge/splinechar.c \
+ fontforge/splinefont.c \
+ fontforge/splinefont.h \
+ fontforge/splineorder2.c \
+ fontforge/splineoverlap.c \
+ fontforge/splinerefigure.c \
+ fontforge/splinesave.c \
+ fontforge/splinesaveafm.c \
+ fontforge/splineutil.c \
+ fontforge/splineutil2.c \
+ fontforge/start.c \
+ fontforge/stemdb.c \
+ fontforge/stemdb.h \
+ fontforge/tables.h \
+ fontforge/tmpfile2.cpp \
+ fontforge/tottf.c \
+ fontforge/tottfaat.c \
+ fontforge/tottfgpos.c \
+ fontforge/tottfvar.c \
+ fontforge/ttf.h \
+ fontforge/ttfinstrs.c \
+ fontforge/ttfinstrs.h \
+ fontforge/ttfspecial.c \
+ fontforge/uiinterface.h \
+ fontforge/unialt.c \
+ fontforge/ustring.c \
+ fontforge/utype.c \
+ fontforge/woff.c \
+ inc/basics.h \
+ inc/chardata.h \
+ inc/charset.h \
+ inc/dlist.h \
+ inc/ffintl.h \
+ inc/gimage.h \
+ inc/gnetwork.h \
+ inc/gwwiconv.h \
+ inc/ustring.h \
+ inc/utype.h
+
+EXTRA_DIST = LICENSE
+AM_CFLAGS = -I$(srcdir)/inc -I$(srcdir)/fontforge $(ZLIB_CFLAGS)
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/ff-woff/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/ff-woff/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+fontforge/$(am__dirstamp):
+ @$(MKDIR_P) fontforge
+ @: > fontforge/$(am__dirstamp)
+fontforge/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) fontforge/$(DEPDIR)
+ @: > fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/alphabet.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/asmfpst.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/autohint.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/char.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/cjk.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/cvundoes.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/dumppfa.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/encoding.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/fflocale.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/fvfonts.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/gwwiconv.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/lookups.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/macbinary.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/macenc.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/mathconstants.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/memory.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/mm.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/namelist.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/nouiutil.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/nowakowskittfinstr.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/parsepfa.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/parsettf.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/parsettfatt.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/psread.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/pua.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/sfd.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/sfd1.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splinechar.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splinefont.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splineorder2.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splineoverlap.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splinerefigure.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splinesave.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splinesaveafm.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splineutil.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/splineutil2.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/start.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/stemdb.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/tmpfile2.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/tottf.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/tottfaat.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/tottfgpos.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/tottfvar.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/ttfinstrs.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/ttfspecial.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/unialt.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/ustring.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/utype.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+fontforge/woff.$(OBJEXT): fontforge/$(am__dirstamp) \
+ fontforge/$(DEPDIR)/$(am__dirstamp)
+
+libfontforge.a: $(libfontforge_a_OBJECTS) $(libfontforge_a_DEPENDENCIES) $(EXTRA_libfontforge_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libfontforge.a
+ $(AM_V_AR)$(libfontforge_a_AR) libfontforge.a $(libfontforge_a_OBJECTS) $(libfontforge_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libfontforge.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f fontforge/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/alphabet.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/asmfpst.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/autohint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/char.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/cjk.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/cvundoes.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/dumppfa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/encoding.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/fflocale.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/fvfonts.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/gwwiconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/lookups.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/macbinary.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/macenc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/mathconstants.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/memory.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/mm.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/namelist.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/nouiutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/nowakowskittfinstr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/parsepfa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/parsettf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/parsettfatt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/psread.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/pua.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/sfd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/sfd1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splinechar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splinefont.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splineorder2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splineoverlap.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splinerefigure.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splinesave.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splinesaveafm.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splineutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/splineutil2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/start.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/stemdb.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/tmpfile2.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/tottf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/tottfaat.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/tottfgpos.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/tottfvar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/ttfinstrs.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/ttfspecial.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/unialt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/ustring.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/utype.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fontforge/$(DEPDIR)/woff.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.cpp.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f fontforge/$(DEPDIR)/$(am__dirstamp)
+ -rm -f fontforge/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f fontforge/$(DEPDIR)/alphabet.Po
+ -rm -f fontforge/$(DEPDIR)/asmfpst.Po
+ -rm -f fontforge/$(DEPDIR)/autohint.Po
+ -rm -f fontforge/$(DEPDIR)/char.Po
+ -rm -f fontforge/$(DEPDIR)/cjk.Po
+ -rm -f fontforge/$(DEPDIR)/cvundoes.Po
+ -rm -f fontforge/$(DEPDIR)/dumppfa.Po
+ -rm -f fontforge/$(DEPDIR)/encoding.Po
+ -rm -f fontforge/$(DEPDIR)/fflocale.Po
+ -rm -f fontforge/$(DEPDIR)/fvfonts.Po
+ -rm -f fontforge/$(DEPDIR)/gwwiconv.Po
+ -rm -f fontforge/$(DEPDIR)/lookups.Po
+ -rm -f fontforge/$(DEPDIR)/macbinary.Po
+ -rm -f fontforge/$(DEPDIR)/macenc.Po
+ -rm -f fontforge/$(DEPDIR)/mathconstants.Po
+ -rm -f fontforge/$(DEPDIR)/memory.Po
+ -rm -f fontforge/$(DEPDIR)/mm.Po
+ -rm -f fontforge/$(DEPDIR)/namelist.Po
+ -rm -f fontforge/$(DEPDIR)/nouiutil.Po
+ -rm -f fontforge/$(DEPDIR)/nowakowskittfinstr.Po
+ -rm -f fontforge/$(DEPDIR)/parsepfa.Po
+ -rm -f fontforge/$(DEPDIR)/parsettf.Po
+ -rm -f fontforge/$(DEPDIR)/parsettfatt.Po
+ -rm -f fontforge/$(DEPDIR)/psread.Po
+ -rm -f fontforge/$(DEPDIR)/pua.Po
+ -rm -f fontforge/$(DEPDIR)/sfd.Po
+ -rm -f fontforge/$(DEPDIR)/sfd1.Po
+ -rm -f fontforge/$(DEPDIR)/splinechar.Po
+ -rm -f fontforge/$(DEPDIR)/splinefont.Po
+ -rm -f fontforge/$(DEPDIR)/splineorder2.Po
+ -rm -f fontforge/$(DEPDIR)/splineoverlap.Po
+ -rm -f fontforge/$(DEPDIR)/splinerefigure.Po
+ -rm -f fontforge/$(DEPDIR)/splinesave.Po
+ -rm -f fontforge/$(DEPDIR)/splinesaveafm.Po
+ -rm -f fontforge/$(DEPDIR)/splineutil.Po
+ -rm -f fontforge/$(DEPDIR)/splineutil2.Po
+ -rm -f fontforge/$(DEPDIR)/start.Po
+ -rm -f fontforge/$(DEPDIR)/stemdb.Po
+ -rm -f fontforge/$(DEPDIR)/tmpfile2.Po
+ -rm -f fontforge/$(DEPDIR)/tottf.Po
+ -rm -f fontforge/$(DEPDIR)/tottfaat.Po
+ -rm -f fontforge/$(DEPDIR)/tottfgpos.Po
+ -rm -f fontforge/$(DEPDIR)/tottfvar.Po
+ -rm -f fontforge/$(DEPDIR)/ttfinstrs.Po
+ -rm -f fontforge/$(DEPDIR)/ttfspecial.Po
+ -rm -f fontforge/$(DEPDIR)/unialt.Po
+ -rm -f fontforge/$(DEPDIR)/ustring.Po
+ -rm -f fontforge/$(DEPDIR)/utype.Po
+ -rm -f fontforge/$(DEPDIR)/woff.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f fontforge/$(DEPDIR)/alphabet.Po
+ -rm -f fontforge/$(DEPDIR)/asmfpst.Po
+ -rm -f fontforge/$(DEPDIR)/autohint.Po
+ -rm -f fontforge/$(DEPDIR)/char.Po
+ -rm -f fontforge/$(DEPDIR)/cjk.Po
+ -rm -f fontforge/$(DEPDIR)/cvundoes.Po
+ -rm -f fontforge/$(DEPDIR)/dumppfa.Po
+ -rm -f fontforge/$(DEPDIR)/encoding.Po
+ -rm -f fontforge/$(DEPDIR)/fflocale.Po
+ -rm -f fontforge/$(DEPDIR)/fvfonts.Po
+ -rm -f fontforge/$(DEPDIR)/gwwiconv.Po
+ -rm -f fontforge/$(DEPDIR)/lookups.Po
+ -rm -f fontforge/$(DEPDIR)/macbinary.Po
+ -rm -f fontforge/$(DEPDIR)/macenc.Po
+ -rm -f fontforge/$(DEPDIR)/mathconstants.Po
+ -rm -f fontforge/$(DEPDIR)/memory.Po
+ -rm -f fontforge/$(DEPDIR)/mm.Po
+ -rm -f fontforge/$(DEPDIR)/namelist.Po
+ -rm -f fontforge/$(DEPDIR)/nouiutil.Po
+ -rm -f fontforge/$(DEPDIR)/nowakowskittfinstr.Po
+ -rm -f fontforge/$(DEPDIR)/parsepfa.Po
+ -rm -f fontforge/$(DEPDIR)/parsettf.Po
+ -rm -f fontforge/$(DEPDIR)/parsettfatt.Po
+ -rm -f fontforge/$(DEPDIR)/psread.Po
+ -rm -f fontforge/$(DEPDIR)/pua.Po
+ -rm -f fontforge/$(DEPDIR)/sfd.Po
+ -rm -f fontforge/$(DEPDIR)/sfd1.Po
+ -rm -f fontforge/$(DEPDIR)/splinechar.Po
+ -rm -f fontforge/$(DEPDIR)/splinefont.Po
+ -rm -f fontforge/$(DEPDIR)/splineorder2.Po
+ -rm -f fontforge/$(DEPDIR)/splineoverlap.Po
+ -rm -f fontforge/$(DEPDIR)/splinerefigure.Po
+ -rm -f fontforge/$(DEPDIR)/splinesave.Po
+ -rm -f fontforge/$(DEPDIR)/splinesaveafm.Po
+ -rm -f fontforge/$(DEPDIR)/splineutil.Po
+ -rm -f fontforge/$(DEPDIR)/splineutil2.Po
+ -rm -f fontforge/$(DEPDIR)/start.Po
+ -rm -f fontforge/$(DEPDIR)/stemdb.Po
+ -rm -f fontforge/$(DEPDIR)/tmpfile2.Po
+ -rm -f fontforge/$(DEPDIR)/tottf.Po
+ -rm -f fontforge/$(DEPDIR)/tottfaat.Po
+ -rm -f fontforge/$(DEPDIR)/tottfgpos.Po
+ -rm -f fontforge/$(DEPDIR)/tottfvar.Po
+ -rm -f fontforge/$(DEPDIR)/ttfinstrs.Po
+ -rm -f fontforge/$(DEPDIR)/ttfspecial.Po
+ -rm -f fontforge/$(DEPDIR)/unialt.Po
+ -rm -f fontforge/$(DEPDIR)/ustring.Po
+ -rm -f fontforge/$(DEPDIR)/utype.Po
+ -rm -f fontforge/$(DEPDIR)/woff.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/PfEd.h b/dviware/dvisvgm/libs/ff-woff/fontforge/PfEd.h
new file mode 100644
index 0000000000..2130e38f03
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/PfEd.h
@@ -0,0 +1,218 @@
+/* Copyright (C) 2008-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _PFED_H
+# define _PFED_H
+/* The PfEd table (from PfaEdit, former name of FontForge) is designed to */
+/* store information useful for editing the font. This includes stuff like */
+/* guidelines, background layers, spiro layers, comments, lookup names, etc*/
+/* The idea is that much useful information can be retrieved even after the */
+/* font has been generated into its final form: ttf/otf */
+/* It is something of a catch all table composed of many subtables, each of */
+/* which preserves one particular item. I expect more subtables will be */
+/* added as I, or others, think of more things worth preserving. */
+
+
+# ifndef CHR
+# define CHR(ch1,ch2,ch3,ch4) (((ch1)<<24)|((ch2)<<16)|((ch3)<<8)|(ch4))
+# endif
+
+/* 'PfEd' table format is as follows... */
+/* uint32 version number 0x00010000 */
+/* uint32 subtable count */
+/* struct { uint32 tab, offset } tag/offset for first subtable */
+/* struct { uint32 tab, offset } tag/offset for second subtable */
+/* ... */
+
+/* 'PfEd' 'fcmt' font comment subtable format */
+/* short version number 0/1 */
+/* short string length */
+/* version 0=>String in latin1 (should be ASCII), version 1=>utf8*/
+
+ /* 'PfEd' 'cmnt' glyph comment subtable format */
+ /* THIS VERSION IS DEPRECATED IN FAVOR OF VERSION 1 DESCRIBED BELOW */
+ /* short version number 0 */
+ /* short count-of-ranges */
+ /* struct { short start-glyph, end-glyph, short offset } */
+ /* ... */
+ /* foreach glyph >=start-glyph, <=end-glyph(+1) */
+ /* uint32 offset to glyph comment string (in UCS2)*/
+ /* ... */
+ /* And one last offset pointing beyong the end of the last string to enable length calculations */
+ /* String table in UCS2 (NUL terminated). All offsets from start*/
+ /* of subtable */
+
+/* 'PfEd' 'cmnt' glyph comment subtable format */
+/* New version of 'cmnt' which uses utf8 rather than UCS2 */
+/* short version number 1 */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, short offset } */
+/* ... */
+/* foreach glyph >=start-glyph, <=end-glyph(+1) */
+/* uint32 offset to glyph comment string (in utf8)*/
+/* ... */
+/* And one last offset pointing beyong the end of the last string to enable length calculations */
+/* String table in utf8 (NUL terminated). All offsets from start*/
+/* of subtable */
+
+/* 'PfEd' 'cvt ' cvt comment subtable format */
+/* short version number 0 */
+/* short size of cvt comment array (might be less that cvt) */
+/* ushort offset[size] to utf8 strings describing cvt entries */
+/* (strings are NUL terminated) */
+/* String table in utf8 (NUL terminated). All offsets from start*/
+/* of subtable */
+
+/* 'PfEd' 'colr' glyph colour subtable */
+/* short version number 0 */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, uint32 colour (rgb) } */
+
+/* 'PfEd' 'GPOS' GPOS lookup/subtable/anchor names */
+/* short version number 0 */
+/* short count-of-lookups */
+/* struct { short offset name, offset subtables; } */
+/* A subtable: */
+/* short count-of-subtables */
+/* struct { short offset name, offset anchors; } */
+/* An anchor */
+/* short count-of-anchors */
+/* struct { short offset name; } */
+/* string data (utf8, nul terminated) */
+/* (all offsets from start of subtable) */
+
+/* 'PfEd' 'GSUB' GSUB lookup/subtable names */
+/* Same as GPOS (anchors will always be NULL) */
+
+/* The next two tables 'guid' and 'layr' will make use of the */
+/* following data type. The glyph_layer. */
+/* short contour-count */
+/* short image-count (always 0 for now) */
+/* struct { ushort offset; ushort name-off}[contour-count] */
+/* struct { ??? }[image-count] */
+/* Each contour consists of one byte of command and a random */
+/* amount of data dependant on the command. */
+/* See below for a description of the command verbs */
+/* string data in utf8 */
+/* (offsets relative to start of glyph_layer structure ) */
+
+/* 'PfEd' 'guid' Horizontal/Vertical guideline data */
+/* short version number 0 */
+/* short # vertical guidelines */
+/* short # horizontal guidelines */
+/* short mbz */
+/* offset guide spline data -- specifies all guides as splines */
+/* May be NULL */
+/* struct[# vert guidelines] { short x; short offset name} */
+/* struct[# h guidelines] { short y; short offset name} */
+/* a glyph_layer (includes all guides, even those listed above) */
+/* (all offsets, except those in the glyph_layer, relative to start of subtable) */
+
+/* 'PfEd' 'layr' layer data */
+/* short version number 0 */
+/* short layer-count */
+/* struct { short typeflags; short offset-name; uint32 offset-to-layer-data; } */
+/* the layer type is 2=>quadratic, 3=>PostScript, 1=>spiro */
+/* 0x102=>quadratic fore, 0x103=>PS fore */
+/* A layer: */
+/* short count-of-ranges */
+/* struct { short start-glyph, end-glyph, uint32 offset } */
+/* ... */
+/* foreach glyph >=start-glyph, <=end-glyph */
+/* uint32 offset to per-glyph outline data */
+/* many glyph_layers */
+/* (all offsets, except those in the glyph_layers, relative to start of subtable) */
+
+ /* Main table tag */
+# define PfEd_TAG CHR('P','f','E','d')
+
+ /* Subtable tags */
+# define fcmt_TAG CHR('f','c','m','t') /* Font Comment */
+# define flog_TAG CHR('f','l','o','g') /* FONTLOG */
+# define cmnt_TAG CHR('c','m','n','t') /* Glyph Comments */
+# define cvtc_TAG CHR('c','v','t','c') /* Comments for each cvt entry */
+# define colr_TAG CHR('c','o','l','r') /* Glyph color flags */
+# ifndef GPOS_TAG
+# define GPOS_TAG CHR('G','P','O','S') /* Names for GPOS lookups */
+# define GSUB_TAG CHR('G','S','U','B') /* Names for GSUB lookups */
+# endif
+# define guid_TAG CHR('g','u','i','d') /* Guideline data */
+# define layr_TAG CHR('l','a','y','r') /* Any layers which aren't part of the font */
+ /* Backgrounds, spiros, etc. */
+
+
+/* The layer commands used to draw quadratic and cubic layers have two */
+/* componants: A verb, which says what to do, and a modifier which says */
+/* how the data are stored. So a command looks like (verb)|(modifier) */
+/* A moveto command with byte data looks like (V_MoveTo|V_B) */
+/* The two commands to end a contour (V_Close and V_End) take no data */
+/* and use no modifier */
+
+/* layr subtable contour construction verb modifiers specifying data types */
+# define V_B 0 /* data are signed bytes */
+# define V_S 1 /* data are signed shorts */
+# define V_F 2 /* data are fixed longs, divide by 256.0 */
+
+/* layr subtable contour construction verbs */
+# define V_MoveTo 0 /* Start contour, absolute data (2 coords) */
+# define V_LineTo 4 /* Straight line, relative data (2 coords) */
+# define V_HLineTo 8 /* Horizontal line, relative (1 coord, x-off) */
+# define V_VLineTo 12 /* Vertical line, relative (1 coord, y-off) */
+
+# define V_QCurveTo 16 /* Quadratic spline, rel, rel (4 coords, cp, p) */
+# define V_QImplicit 20 /* Quadratic spline, rel (2 coords, cp) */
+ /* May only occur after a V_QCurveTo or V_QImplicit (may not start contour) */
+ /* Must be followed by a V_QCurveTo or V_QImplicit (this may end contour) */
+ /* The on-curve point is implicit by averaging the given cp with the cp in the next verb */
+# define V_QHImplicit 24 /* Quadratic spline, rel (1 coord, cp.x) */
+# define V_QVImplicit 28 /* Quadratic spline, rel (1 coord, cp.y) */
+
+# define V_CurveTo 32 /* Cubic spline, rel, rel (6 coords, cp1, cp2, p) */
+# define V_VHCurveTo 36 /* Cubic spline, rel, rel (4 coords, cp1.y cp2.* p.x) */
+ /* cp1.x == current.y, p.y == cp2.y */
+# define V_HVCurveTo 40 /* Cubic spline, rel, rel (4 coords, cp1.x cp2.* p.y) */
+
+# define V_Close 44 /* Close path (optionally adding a line) no data */
+# define V_End 45 /* End path (leave open) no data */
+
+#define COM_MOD(com) ((com)&3)
+#define COM_VERB(com) ((com)&~3)
+
+/* the layer commands used to draw spiro layers are the standard spiro verbs */
+/* these will always take fixed long data (V_L) as described above */
+# ifndef SPIRO_OPEN_CONTOUR
+# define SPIRO_OPEN_CONTOUR '{'
+# define SPIRO_CORNER 'v'
+# define SPIRO_G4 'o'
+# define SPIRO_G2 'c'
+# define SPIRO_LEFT '['
+# define SPIRO_RIGHT ']'
+# define SPIRO_END 'z'
+# endif
+# define SPIRO_CLOSE_CONTOUR '}'
+
+#endif /* _PFED_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c b/dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c
new file mode 100644
index 0000000000..166a33208a
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/alphabet.c
@@ -0,0 +1,3348 @@
+#include <chardata.h>
+
+const unsigned char c_allzeros[256] = { 0 };
+
+const unichar_t unicode_from_i8859_1[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 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,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+};
+
+static const unsigned char i8859_1_from_unicode_0[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const unsigned char * const i8859_1_from_unicode_[] = {
+ i8859_1_from_unicode_0
+};
+
+struct charmap i8859_1_from_unicode = { 0, 0, (unsigned char **) i8859_1_from_unicode_, (unichar_t *) unicode_from_i8859_1 };
+
+const unichar_t unicode_from_i8859_2[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
+ 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
+ 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
+ 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
+ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
+ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
+ 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
+ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
+ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
+ 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9
+};
+
+static const unsigned char i8859_2_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
+ 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00,
+ 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf,
+ 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00,
+ 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00
+};
+
+static const unsigned char i8859_2_from_unicode_1[] = {
+ 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef,
+ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00,
+ 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, 0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba,
+ 0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9,
+ 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_2_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_2_from_unicode_[] = {
+ i8859_2_from_unicode_0,
+ i8859_2_from_unicode_1,
+ i8859_2_from_unicode_2
+};
+
+struct charmap i8859_2_from_unicode = { 0, 2, (unsigned char **) i8859_2_from_unicode_, (unichar_t *) unicode_from_i8859_2 };
+
+const unichar_t unicode_from_i8859_3[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7,
+ 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b,
+ 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
+ 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c,
+ 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
+ 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
+ 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9
+};
+
+static const unsigned char i8859_3_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
+ 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00,
+ 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_3_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb,
+ 0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_3_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_3_from_unicode_[] = {
+ i8859_3_from_unicode_0,
+ i8859_3_from_unicode_1,
+ i8859_3_from_unicode_2
+};
+
+struct charmap i8859_3_from_unicode = { 0, 2, (unsigned char **) i8859_3_from_unicode_, (unichar_t *) unicode_from_i8859_3 };
+
+const unichar_t unicode_from_i8859_4[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
+ 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
+ 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
+ 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
+ 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
+ 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9
+};
+
+static const unsigned char i8859_4_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf,
+ 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
+ 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_4_from_unicode_1[] = {
+ 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00,
+ 0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, 0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, 0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_4_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_4_from_unicode_[] = {
+ i8859_4_from_unicode_0,
+ i8859_4_from_unicode_1,
+ i8859_4_from_unicode_2
+};
+
+struct charmap i8859_4_from_unicode = { 0, 2, (unsigned char **) i8859_4_from_unicode_, (unichar_t *) unicode_from_i8859_4 };
+
+const unichar_t unicode_from_i8859_5[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f
+};
+
+static const unsigned char i8859_5_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_5_from_unicode_4[] = {
+ 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_5_from_unicode_21[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_5_from_unicode_[] = {
+ i8859_5_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_5_from_unicode_4,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_5_from_unicode_21
+};
+
+struct charmap i8859_5_from_unicode = { 0, 33, (unsigned char **) i8859_5_from_unicode_, (unichar_t *) unicode_from_i8859_5 };
+
+const unichar_t unicode_from_i8859_6[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667,
+ 0x0668, 0x0669, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f,
+ 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+ 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
+ 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+static const unsigned char i8859_6_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_6_from_unicode_6[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf,
+ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_6_from_unicode_[] = {
+ i8859_6_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_6_from_unicode_6
+};
+
+struct charmap i8859_6_from_unicode = { 0, 6, (unsigned char **) i8859_6_from_unicode_, (unichar_t *) unicode_from_i8859_6 };
+
+const unichar_t unicode_from_i8859_7[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x02bd, 0x02bc, 0x00a3, 0x0000, 0x0000, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
+ 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
+ 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
+ 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
+ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
+ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
+ 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000
+};
+
+static const unsigned char i8859_7_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_7_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xa1, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_7_from_unicode_3[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_7_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_7_from_unicode_[] = {
+ i8859_7_from_unicode_0,
+ c_allzeros,
+ i8859_7_from_unicode_2,
+ i8859_7_from_unicode_3,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_7_from_unicode_20
+};
+
+struct charmap i8859_7_from_unicode = { 0, 32, (unsigned char **) i8859_7_from_unicode_, (unichar_t *) unicode_from_i8859_7 };
+
+const unichar_t unicode_from_i8859_8[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x203e,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+ 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017,
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+static const unsigned char i8859_8_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_8_from_unicode_5[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_8_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_8_from_unicode_[] = {
+ i8859_8_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_8_from_unicode_5,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_8_from_unicode_20
+};
+
+struct charmap i8859_8_from_unicode = { 0, 32, (unsigned char **) i8859_8_from_unicode_, (unichar_t *) unicode_from_i8859_8 };
+
+const unichar_t unicode_from_i8859_9[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 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,
+ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff
+};
+
+static const unsigned char i8859_9_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff
+};
+
+static const unsigned char i8859_9_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_9_from_unicode_[] = {
+ i8859_9_from_unicode_0,
+ i8859_9_from_unicode_1
+};
+
+struct charmap i8859_9_from_unicode = { 0, 1, (unsigned char **) i8859_9_from_unicode_, (unichar_t *) unicode_from_i8859_9 };
+
+const unichar_t unicode_from_i8859_10[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7,
+ 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a,
+ 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x0000,
+ 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x00af, 0x016b, 0x014b,
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0112, 0x00cd, 0x00ce, 0x00cf,
+ 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168,
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0113, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169,
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138
+};
+
+static const unsigned char i8859_10_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xbd,
+ 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0xcf,
+ 0xd0, 0x00, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0xef,
+ 0xf0, 0x00, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00
+};
+
+static const unsigned char i8859_10_from_unicode_1[] = {
+ 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00,
+ 0xa9, 0xb9, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, 0xa5, 0xb5, 0xa4, 0xb4, 0x00, 0x00, 0xc7, 0xe7,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, 0xff, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, 0x00, 0x00, 0xaf, 0xbf, 0xd2, 0xf2, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0xab, 0xbb, 0xd7, 0xf7, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_10_from_unicode_[] = {
+ i8859_10_from_unicode_0,
+ i8859_10_from_unicode_1
+};
+
+struct charmap i8859_10_from_unicode = { 0, 1, (unsigned char **) i8859_10_from_unicode_, (unichar_t *) unicode_from_i8859_10 };
+
+const unichar_t unicode_from_i8859_11[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0020, 0x0000, 0x0000, 0x0e3f,
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+static const unsigned char i8859_11_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xdc, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_11_from_unicode_e[] = {
+ 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_11_from_unicode_[] = {
+ i8859_11_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_11_from_unicode_e
+};
+
+struct charmap i8859_11_from_unicode = { 0, 14, (unsigned char **) i8859_11_from_unicode_, (unichar_t *) unicode_from_i8859_11 };
+
+const unichar_t unicode_from_i8859_13[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7,
+ 0x00d8, 0x00a9, 0x0157, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7,
+ 0x00f8, 0x00b9, 0x0000, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
+ 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112,
+ 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
+ 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7,
+ 0x0172, 0x0141, 0x00da, 0x00db, 0x00dc, 0x017b, 0x017d, 0x00df,
+ 0x0105, 0x012e, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113,
+ 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
+ 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7,
+ 0x0173, 0x0142, 0x00fa, 0x00fb, 0x00fc, 0x017c, 0x017e, 0x2019
+};
+
+static const unsigned char i8859_13_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, 0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, 0xa8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf,
+ 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, 0xb8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_13_from_unicode_1[] = {
+ 0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00,
+ 0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xe1, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, 0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00,
+ 0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_13_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_13_from_unicode_[] = {
+ i8859_13_from_unicode_0,
+ i8859_13_from_unicode_1,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_13_from_unicode_20
+};
+
+struct charmap i8859_13_from_unicode = { 0, 32, (unsigned char **) i8859_13_from_unicode_, (unichar_t *) unicode_from_i8859_13 };
+
+const unichar_t unicode_from_i8859_14[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
+ 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
+ 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
+ 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+ 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff
+};
+
+static const unsigned char i8859_14_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff
+};
+
+static const unsigned char i8859_14_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_14_from_unicode_1e[] = {
+ 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_14_from_unicode_[] = {
+ i8859_14_from_unicode_0,
+ i8859_14_from_unicode_1,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_14_from_unicode_1e
+};
+
+struct charmap i8859_14_from_unicode = { 0, 30, (unsigned char **) i8859_14_from_unicode_, (unichar_t *) unicode_from_i8859_14 };
+
+const unichar_t unicode_from_i8859_15[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7,
+ 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7,
+ 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 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,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+};
+
+static const unsigned char i8859_15_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const unsigned char i8859_15_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char i8859_15_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const i8859_15_from_unicode_[] = {
+ i8859_15_from_unicode_0,
+ i8859_15_from_unicode_1,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ i8859_15_from_unicode_20
+};
+
+struct charmap i8859_15_from_unicode = { 0, 32, (unsigned char **) i8859_15_from_unicode_, (unichar_t *) unicode_from_i8859_15 };
+
+const unichar_t unicode_from_koi8_r[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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, 0x0000,
+ 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
+ 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
+ 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
+ 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
+ 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
+ 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
+ 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
+ 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
+ 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
+ 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
+ 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
+ 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
+ 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
+};
+
+static const unsigned char koi8_r_from_unicode_0[] = {
+ 0x7f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char koi8_r_from_unicode_4[] = {
+ 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
+ 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1,
+ 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
+ 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1,
+ 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char koi8_r_from_unicode_22[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char koi8_r_from_unicode_23[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char koi8_r_from_unicode_25[] = {
+ 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
+ 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0,
+ 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
+ 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const koi8_r_from_unicode_[] = {
+ koi8_r_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ koi8_r_from_unicode_4,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ koi8_r_from_unicode_22,
+ koi8_r_from_unicode_23,
+ c_allzeros,
+ koi8_r_from_unicode_25
+};
+
+struct charmap koi8_r_from_unicode = { 0, 37, (unsigned char **) koi8_r_from_unicode_, (unichar_t *) unicode_from_koi8_r };
+
+const unichar_t unicode_from_jis201[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x00a5, 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, 0x203e, 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,
+ 0x0000, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67,
+ 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f,
+ 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77,
+ 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f,
+ 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87,
+ 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f,
+ 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97,
+ 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+static const unsigned char jis201_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x00, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char jis201_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char jis201_from_unicode_ff[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const jis201_from_unicode_[] = {
+ jis201_from_unicode_0,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ jis201_from_unicode_20,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ jis201_from_unicode_ff
+};
+
+struct charmap jis201_from_unicode = { 0, 255, (unsigned char **) jis201_from_unicode_, (unichar_t *) unicode_from_jis201 };
+
+const unichar_t unicode_from_win[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
+ 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+ 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 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,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+};
+
+static const unsigned char win_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+static const unsigned char win_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char win_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char win_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
+ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char win_from_unicode_21[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const win_from_unicode_[] = {
+ win_from_unicode_0,
+ win_from_unicode_1,
+ win_from_unicode_2,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ win_from_unicode_20,
+ win_from_unicode_21
+};
+
+struct charmap win_from_unicode = { 0, 33, (unsigned char **) win_from_unicode_, (unichar_t *) unicode_from_win };
+
+const unichar_t unicode_from_mac[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0xfb01, 0xfb02,
+ 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1,
+ 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc,
+ 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
+};
+
+static const unsigned char mac_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xca, 0xc1, 0xa2, 0xa3, 0x00, 0xb4, 0x00, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0x00, 0xa8, 0xf8,
+ 0xa1, 0xb1, 0x00, 0x00, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0x00, 0xbc, 0xc8, 0x00, 0x00, 0x00, 0xc0,
+ 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec,
+ 0x00, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0x00, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0x00, 0x00, 0xa7,
+ 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95,
+ 0x00, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0x00, 0x00, 0xd8
+};
+
+static const unsigned char mac_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_3[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xe2, 0x00, 0xd2, 0xd3, 0xe3, 0x00,
+ 0xa0, 0xe0, 0xa5, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_21[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_22[] = {
+ 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8,
+ 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xb0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xad, 0x00, 0x00, 0x00, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_25[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char mac_from_unicode_f8[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0
+};
+
+static const unsigned char mac_from_unicode_fb[] = {
+ 0x00, 0xde, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const mac_from_unicode_[] = {
+ mac_from_unicode_0,
+ mac_from_unicode_1,
+ mac_from_unicode_2,
+ mac_from_unicode_3,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ mac_from_unicode_20,
+ mac_from_unicode_21,
+ mac_from_unicode_22,
+ c_allzeros,
+ c_allzeros,
+ mac_from_unicode_25,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ mac_from_unicode_f8,
+ c_allzeros,
+ c_allzeros,
+ mac_from_unicode_fb
+};
+
+struct charmap mac_from_unicode = { 0, 251, (unsigned char **) mac_from_unicode_, (unichar_t *) unicode_from_mac };
+
+const unichar_t unicode_from_MacSymbol[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220d,
+ 0x0028, 0x0029, 0x2217, 0x002b, 0x002c, 0x2212, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x2245, 0x0391, 0x0392, 0x03a7, 0x0394, 0x0395, 0x03a6, 0x0393,
+ 0x0397, 0x0399, 0x03d1, 0x039a, 0x039b, 0x039c, 0x039d, 0x039f,
+ 0x03a0, 0x0398, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03c2, 0x03a9,
+ 0x039e, 0x03a8, 0x0396, 0x005b, 0x2234, 0x005d, 0x22a5, 0x005f,
+ 0xf8e5, 0x03b1, 0x03b2, 0x03c7, 0x03b4, 0x03b5, 0x03c6, 0x03b3,
+ 0x03b7, 0x03b9, 0x03d5, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf,
+ 0x03c0, 0x03b8, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03d6, 0x03c9,
+ 0x03be, 0x03c8, 0x03b6, 0x007b, 0x007c, 0x007d, 0x223c, 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,
+ 0x0000, 0x03d2, 0x2032, 0x2264, 0x2044, 0x221e, 0x0192, 0x2663,
+ 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193,
+ 0x00b0, 0x00b1, 0x2033, 0x2265, 0x00d7, 0x221d, 0x2202, 0x2022,
+ 0x00f7, 0x2260, 0x2261, 0x2248, 0x2026, 0xf8e6, 0xf8e7, 0x21b5,
+ 0x2135, 0x2111, 0x211c, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229,
+ 0x222a, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209,
+ 0x2220, 0x2207, 0x00ae, 0x00a9, 0x2122, 0x220f, 0x221a, 0x22c5,
+ 0x00ac, 0x2227, 0x2228, 0x21d4, 0x21d0, 0x21d1, 0x21d2, 0x21d3,
+ 0x22c4, 0x2329, 0xf8e8, 0xf8e9, 0xf8ea, 0x2211, 0xf8eb, 0xf8ec,
+ 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0, 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4,
+ 0xf8ff, 0x232a, 0x222b, 0x2320, 0xf8f5, 0x2321, 0xf8f6, 0xf8f7,
+ 0xf8f8, 0xf8f9, 0xf8fa, 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0x02c7
+};
+
+static const unsigned char MacSymbol_from_unicode_0[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x21, 0x00, 0x23, 0x00, 0x25, 0x26, 0x00, 0x28, 0x29, 0x00, 0x2b, 0x2c, 0x00, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x5d, 0x00, 0x5f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x7c, 0x7d, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0xd8, 0x00, 0xd2, 0x00,
+ 0xb0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_1[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_2[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_3[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x42, 0x47, 0x44, 0x45, 0x5a, 0x48, 0x51, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0x58, 0x4f,
+ 0x50, 0x52, 0x00, 0x53, 0x54, 0x55, 0x46, 0x43, 0x59, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x62, 0x67, 0x64, 0x65, 0x7a, 0x68, 0x71, 0x69, 0x6b, 0x6c, 0x6d, 0x6e, 0x78, 0x6f,
+ 0x70, 0x72, 0x56, 0x73, 0x74, 0x75, 0x66, 0x63, 0x79, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4a, 0xa1, 0x00, 0x00, 0x6a, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_20[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xa2, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_21[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xac, 0xad, 0xae, 0xaf, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xdc, 0xdd, 0xde, 0xdf, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_22[] = {
+ 0x22, 0x00, 0xb6, 0x24, 0x00, 0xc6, 0x00, 0xd1, 0xce, 0xcf, 0x00, 0x00, 0x00, 0x27, 0x00, 0xd5,
+ 0x00, 0xe5, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0xd6, 0x00, 0x00, 0xb5, 0xa5, 0x00,
+ 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xda, 0xc7, 0xc8, 0xf2, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb9, 0xba, 0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcc, 0xc9, 0xcb, 0x00, 0xcd, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_23[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf3, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_26[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xaa, 0x00, 0x00, 0xa7, 0x00, 0xa9, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char MacSymbol_from_unicode_f8[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xbd, 0xbe, 0xe2, 0xe3, 0xe4, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
+ 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf4, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xf0
+};
+
+static const unsigned char * const MacSymbol_from_unicode_[] = {
+ MacSymbol_from_unicode_0,
+ MacSymbol_from_unicode_1,
+ MacSymbol_from_unicode_2,
+ MacSymbol_from_unicode_3,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ MacSymbol_from_unicode_20,
+ MacSymbol_from_unicode_21,
+ MacSymbol_from_unicode_22,
+ MacSymbol_from_unicode_23,
+ c_allzeros,
+ c_allzeros,
+ MacSymbol_from_unicode_26,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ c_allzeros,
+ MacSymbol_from_unicode_f8
+};
+
+struct charmap MacSymbol_from_unicode = { 0, 248, (unsigned char **) MacSymbol_from_unicode_, (unichar_t *) unicode_from_MacSymbol };
+
+const unichar_t unicode_from_ZapfDingbats[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x2701, 0x2702, 0x2703, 0x2704, 0x260e, 0x2706, 0x2707,
+ 0x2708, 0x2709, 0x261b, 0x261e, 0x270c, 0x270d, 0x270e, 0x270f,
+ 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717,
+ 0x2718, 0x2719, 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f,
+ 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727,
+ 0x2605, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f,
+ 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737,
+ 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f,
+ 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747,
+ 0x2748, 0x2749, 0x274a, 0x274b, 0x25cf, 0x274d, 0x25a0, 0x274f,
+ 0x2750, 0x2751, 0x2752, 0x25b2, 0x25bc, 0x25c6, 0x2756, 0x25d7,
+ 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 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,
+ 0x0000, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767,
+ 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463,
+ 0x2464, 0x2465, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2777,
+ 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e, 0x277f,
+ 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787,
+ 0x2788, 0x2789, 0x278a, 0x278b, 0x278c, 0x278d, 0x278e, 0x278f,
+ 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195,
+ 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e, 0x279f,
+ 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7,
+ 0x27a8, 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af,
+ 0x0000, 0x27b1, 0x27b2, 0x27b3, 0x27b4, 0x27b5, 0x27b6, 0x27b7,
+ 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd, 0x27be, 0x27bf
+};
+
+static const unsigned char ZapfDingbats_from_unicode_21[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd5, 0x00, 0xd6, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char ZapfDingbats_from_unicode_24[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char ZapfDingbats_from_unicode_25[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char ZapfDingbats_from_unicode_26[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x2b, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xab, 0x00, 0x00, 0xa8, 0x00, 0xaa, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char ZapfDingbats_from_unicode_27[] = {
+ 0x00, 0x21, 0x22, 0x23, 0x24, 0x00, 0x26, 0x27, 0x28, 0x29, 0x00, 0x00, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x00, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x00, 0x6d, 0x00, 0x6f,
+ 0x70, 0x71, 0x72, 0x00, 0x00, 0x00, 0x76, 0x00, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x00,
+ 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0x00, 0x00, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static const unsigned char * const ZapfDingbats_from_unicode_[] = {
+ ZapfDingbats_from_unicode_21,
+ c_allzeros,
+ c_allzeros,
+ ZapfDingbats_from_unicode_24,
+ ZapfDingbats_from_unicode_25,
+ ZapfDingbats_from_unicode_26,
+ ZapfDingbats_from_unicode_27
+};
+
+struct charmap ZapfDingbats_from_unicode = { 33, 39, (unsigned char **) ZapfDingbats_from_unicode_, (unichar_t *) unicode_from_ZapfDingbats };
+
+unichar_t *unicode_from_alphabets[]={
+ (unichar_t *) unicode_from_win, 0,0,
+ (unichar_t *) unicode_from_i8859_1,
+ (unichar_t *) unicode_from_i8859_2,
+ (unichar_t *) unicode_from_i8859_3,
+ (unichar_t *) unicode_from_i8859_4,
+ (unichar_t *) unicode_from_i8859_5,
+ (unichar_t *) unicode_from_i8859_6,
+ (unichar_t *) unicode_from_i8859_7,
+ (unichar_t *) unicode_from_i8859_8,
+ (unichar_t *) unicode_from_i8859_9,
+ (unichar_t *) unicode_from_i8859_10,
+ (unichar_t *) unicode_from_i8859_11,
+ (unichar_t *) unicode_from_i8859_13,
+ (unichar_t *) unicode_from_i8859_14,
+ (unichar_t *) unicode_from_i8859_15,
+ (unichar_t *) unicode_from_koi8_r,
+ (unichar_t *) unicode_from_jis201,
+ (unichar_t *) unicode_from_win,
+ (unichar_t *) unicode_from_mac,
+ (unichar_t *) unicode_from_MacSymbol,
+ (unichar_t *) unicode_from_ZapfDingbats,
+ (unichar_t *) unicode_from_i8859_1, /* Place holder for user-defined map */
+ 0
+};
+
+struct charmap *alphabets_from_unicode[]={ 0,0,0,
+ &i8859_1_from_unicode,
+ &i8859_2_from_unicode,
+ &i8859_3_from_unicode,
+ &i8859_4_from_unicode,
+ &i8859_5_from_unicode,
+ &i8859_6_from_unicode,
+ &i8859_7_from_unicode,
+ &i8859_8_from_unicode,
+ &i8859_9_from_unicode,
+ &i8859_10_from_unicode,
+ &i8859_11_from_unicode,
+ &i8859_13_from_unicode,
+ &i8859_14_from_unicode,
+ &i8859_15_from_unicode,
+ &koi8_r_from_unicode,
+ &jis201_from_unicode,
+ &win_from_unicode,
+ &mac_from_unicode,
+ &MacSymbol_from_unicode,
+ &ZapfDingbats_from_unicode,
+ &i8859_1_from_unicode, /* Place holder for user-defined map*/
+ 0
+};
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c b/dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c
new file mode 100644
index 0000000000..9276f9aece
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/asmfpst.c
@@ -0,0 +1,1007 @@
+/* Copyright (C) 2003-2007 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "ttf.h"
+
+/* ************************************************************************** */
+/* *************** Routines to test conversion from OpenType **************** */
+/* ************************************************************************** */
+
+int ClassesMatch(int cnt1,char **classes1,int cnt2,char **classes2) {
+ int i;
+
+ if ( cnt1!=cnt2 )
+return( false );
+ for ( i=1; i<cnt2; ++i )
+ if ( strcmp(classes1[i],classes2[i])!=0 )
+return( false );
+
+return( true );
+}
+
+static char **classcopy(char **names,int nextclass) {
+ char **ret;
+ int i;
+
+ if ( nextclass <= 1 )
+return( NULL );
+
+ ret = malloc(nextclass*sizeof(char *));
+ ret[0] = NULL;
+ for ( i=1; i<nextclass; ++i )
+ ret[i] = copy(names[i]);
+return( ret );
+}
+
+FPST *FPSTGlyphToClass(FPST *fpst) {
+ FPST *new;
+ int nextclass=0, i,j,k, max, cnt, ch;
+ char *pt, *end;
+ char **names;
+
+ if ( fpst->format!=pst_glyphs )
+return( NULL );
+
+ new = chunkalloc(sizeof(FPST));
+ new->type = fpst->type;
+ new->format = pst_class;
+ new->subtable = fpst->subtable;
+ new->rule_cnt = fpst->rule_cnt;
+ new->rules = calloc(fpst->rule_cnt,sizeof(struct fpst_rule));
+
+ max = 100; nextclass=1;
+ names = malloc(max*sizeof(char *));
+ names[0] = NULL;
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ for ( j=0; j<3; ++j ) {
+ cnt = 0;
+ if ( (&fpst->rules[i].u.glyph.names)[j]!=NULL && *(&fpst->rules[i].u.glyph.names)[j]!='\0' ) {
+ for ( pt=(&fpst->rules[i].u.glyph.names)[j]; *pt; ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+ break;
+ while ( *pt!=' ' && *pt!='\0' ) ++pt;
+ ++cnt;
+ }
+ }
+ (&new->rules[i].u.class.ncnt)[j] = cnt;
+ if ( cnt!=0 ) {
+ (&new->rules[i].u.class.nclasses)[j] = malloc(cnt*sizeof(uint16));
+ cnt = 0;
+ for ( pt=(&fpst->rules[i].u.glyph.names)[j]; *pt; pt=end ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+ break;
+ for ( end=pt ; *end!=' ' && *end!='\0'; ++end );
+ ch = *end; *end='\0';
+ for ( k=1; k<nextclass; ++k )
+ if ( strcmp(pt,names[k])==0 )
+ break;
+ if ( k==nextclass ) {
+ if ( nextclass>=max )
+ names = realloc(names,(max+=100)*sizeof(char *));
+ names[nextclass++] = copy(pt);
+ }
+ *end = ch;
+ (&new->rules[i].u.class.nclasses)[j][cnt++] = k;
+ }
+ }
+ }
+ new->rules[i].lookup_cnt = fpst->rules[i].lookup_cnt;
+ new->rules[i].lookups = malloc(fpst->rules[i].lookup_cnt*sizeof(struct seqlookup));
+ memcpy(new->rules[i].lookups,fpst->rules[i].lookups,
+ fpst->rules[i].lookup_cnt*sizeof(struct seqlookup));
+ }
+ new->nccnt = nextclass;
+ new->nclass = names;
+ new->nclassnames = calloc(nextclass,sizeof(char *)); /* Leave as NULL */
+ if ( fpst->type==pst_chainpos || fpst->type==pst_chainsub ) {
+ /* our class set has one "class" for each glyph used anywhere */
+ /* all three class sets are the same */
+ new->bccnt = new->fccnt = nextclass;
+ new->bclass = classcopy(names,nextclass);
+ new->fclass = classcopy(names,nextclass);
+ new->bclassnames = calloc(nextclass,sizeof(char *)); /* Leave as NULL */
+ new->fclassnames = calloc(nextclass,sizeof(char *)); /* Leave as NULL */
+ }
+return( new );
+}
+
+static int ValidSubs(OTLookup *otl ) {
+return( otl->lookup_type == gsub_single );
+}
+
+static void TreeFree(struct contexttree *tree) {
+ int i;
+
+ if ( tree==NULL )
+return;
+
+ for ( i=0; i<tree->branch_cnt; ++i )
+ TreeFree(tree->branches[i].branch);
+
+ free( tree->branches );
+ free( tree->rules );
+ chunkfree( tree,sizeof(*tree) );
+}
+
+static int TreeLabelState(struct contexttree *tree, int snum) {
+ int i;
+
+ if ( tree->branch_cnt==0 && tree->ends_here!=NULL ) {
+ tree->state = 0;
+return( snum );
+ }
+
+ tree->state = snum++;
+ for ( i=0; i<tree->branch_cnt; ++i )
+ snum = TreeLabelState(tree->branches[i].branch,snum);
+ tree->next_state = snum;
+
+return( snum );
+}
+
+static OTLookup *RuleHasSubsHere(struct fpst_rule *rule,int depth) {
+ int i,j;
+
+ if ( depth<rule->u.class.bcnt )
+return( NULL );
+ depth -= rule->u.class.bcnt;
+ if ( depth>=rule->u.class.ncnt )
+return( NULL );
+ for ( i=0; i<rule->lookup_cnt; ++i ) {
+ if ( rule->lookups[i].seq==depth ) {
+ /* It is possible to have two substitutions applied at the same */
+ /* location. I can't deal with that here */
+ for ( j=i+1; j<rule->lookup_cnt; ++j ) {
+ if ( rule->lookups[j].seq==depth )
+return( (OTLookup *) 0xffffffff );
+ }
+return( rule->lookups[i].lookup );
+ }
+ }
+
+return( 0 );
+}
+
+static OTLookup *RulesAllSameSubsAt(struct contexttree *me,int pos) {
+ int i;
+ OTLookup *tag=(OTLookup *) 0x01, *newtag; /* Can't use 0 as an "unused" flag because it is perfectly valid for there to be no substititution. But then all rules must have no subs */
+
+ for ( i=0; i<me->rule_cnt; ++i ) {
+ newtag = RuleHasSubsHere(me->rules[i].rule,pos);
+ if ( tag==(OTLookup *) 0x01 )
+ tag=newtag;
+ else if ( newtag!=tag )
+return( (OTLookup *) 0xffffffff );
+ }
+ if ( tag==(OTLookup *) 0x01 )
+return( NULL ); /* Should never happen */
+
+return( tag );
+}
+
+static int TreeFollowBranches(SplineFont *sf,struct contexttree *me,int pending_pos) {
+ int i, j;
+
+ me->pending_pos = pending_pos;
+ if ( me->ends_here!=NULL ) {
+ /* If any rule ends here then we have to be able to apply all current */
+ /* and pending substitutions */
+ if ( pending_pos!=-1 ) {
+ me->applymarkedsubs = RulesAllSameSubsAt(me,pending_pos);
+ if ( me->applymarkedsubs==(OTLookup *) 0xffffffff )
+return( false );
+ if ( !ValidSubs(me->applymarkedsubs))
+return( false );
+ }
+ me->applycursubs = RulesAllSameSubsAt(me,me->depth);
+ if ( me->applycursubs==(OTLookup *) 0xffffffff )
+return( false );
+ if ( me->applycursubs!=NULL && !ValidSubs(me->applycursubs))
+return( false );
+ for ( i=0; i<me->branch_cnt; ++i ) {
+ if ( !TreeFollowBranches(sf,me->branches[i].branch,-1))
+return( false );
+ }
+ } else {
+ for ( i=0; i<me->branch_cnt; ++i ) {
+ for ( j=0; j<me->rule_cnt; ++j )
+ if ( me->rules[j].branch==me->branches[i].branch &&
+ RuleHasSubsHere(me->rules[j].rule,me->depth)!=NULL )
+ break;
+ if ( j<me->rule_cnt ) {
+ if ( pending_pos==-1 ) {
+ pending_pos = me->pending_pos = me->depth;
+ me->markme = true;
+ } else
+return( false );
+ }
+ if ( !TreeFollowBranches(sf,me->branches[i].branch,pending_pos))
+return( false );
+ }
+ }
+
+return( true );
+}
+
+static struct contexttree *_FPST2Tree(FPST *fpst,struct contexttree *parent,int class) {
+ struct contexttree *me = chunkalloc(sizeof(struct contexttree));
+ int i, rcnt, ccnt, k, thisclass;
+ uint16 *classes;
+
+ if ( fpst!=NULL ) {
+ me->depth = -1;
+ me->rule_cnt = fpst->rule_cnt;
+ me->rules = calloc(me->rule_cnt,sizeof(struct ct_subs));
+ for ( i=0; i<me->rule_cnt; ++i )
+ me->rules[i].rule = &fpst->rules[i];
+ me->parent = NULL;
+ } else {
+ me->depth = parent->depth+1;
+ for ( i=rcnt=0; i<parent->rule_cnt; ++i )
+ if ( parent->rules[i].rule->u.class.allclasses[me->depth] == class )
+ ++rcnt;
+ me->rule_cnt = rcnt;
+ me->rules = calloc(me->rule_cnt,sizeof(struct ct_subs));
+ for ( i=rcnt=0; i<parent->rule_cnt; ++i )
+ if ( parent->rules[i].rule->u.class.allclasses[me->depth] == class )
+ me->rules[rcnt++].rule = parent->rules[i].rule;
+ me->parent = parent;
+ }
+ classes = malloc(me->rule_cnt*sizeof(uint16));
+ for ( i=ccnt=0; i<me->rule_cnt; ++i ) {
+ thisclass = me->rules[i].thisclassnum = me->rules[i].rule->u.class.allclasses[me->depth+1];
+ if ( thisclass==0xffff ) {
+ if ( me->ends_here==NULL )
+ me->ends_here = me->rules[i].rule;
+ } else {
+ for ( k=0; k<ccnt; ++k )
+ if ( classes[k] == thisclass )
+ break;
+ if ( k==ccnt )
+ classes[ccnt++] = thisclass;
+ }
+ }
+ me->branch_cnt = ccnt;
+ me->branches = calloc(ccnt,sizeof(struct ct_branch));
+ for ( i=0; i<ccnt; ++i )
+ me->branches[i].classnum = classes[i];
+ for ( i=0; i<ccnt; ++i ) {
+ me->branches[i].branch = _FPST2Tree(NULL,me,classes[i]);
+ for ( k=0; k<me->rule_cnt; ++k )
+ if ( classes[i]==me->rules[k].thisclassnum )
+ me->rules[k].branch = me->branches[i].branch;
+ }
+ free(classes );
+return( me );
+}
+
+static void FPSTBuildAllClasses(FPST *fpst) {
+ int i, off,j;
+
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ fpst->rules[i].u.class.allclasses = malloc((fpst->rules[i].u.class.bcnt+
+ fpst->rules[i].u.class.ncnt+
+ fpst->rules[i].u.class.fcnt+
+ 1)*sizeof(uint16));
+ off = fpst->rules[i].u.class.bcnt;
+ for ( j=0; j<off; ++j )
+ fpst->rules[i].u.class.allclasses[j] = fpst->rules[i].u.class.bclasses[off-1-j];
+ for ( j=0; j<fpst->rules[i].u.class.ncnt; ++j )
+ fpst->rules[i].u.class.allclasses[off+j] = fpst->rules[i].u.class.nclasses[j];
+ off += j;
+ for ( j=0; j<fpst->rules[i].u.class.fcnt; ++j )
+ fpst->rules[i].u.class.allclasses[off+j] = fpst->rules[i].u.class.fclasses[j];
+ fpst->rules[i].u.class.allclasses[off+j] = 0xffff; /* End of rule marker */
+ }
+}
+
+static void FPSTFreeAllClasses(FPST *fpst) {
+ int i;
+
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ free( fpst->rules[i].u.class.allclasses );
+ fpst->rules[i].u.class.allclasses = NULL;
+ }
+}
+
+static struct contexttree *FPST2Tree(SplineFont *sf,FPST *fpst) {
+ struct contexttree *ret;
+
+ if ( fpst->format != pst_class )
+return( NULL );
+
+ /* I could check for subclasses rather than ClassesMatch, but then I'd have */
+ /* to make sure that class 0 was used (if at all) consistently */
+ if ( (fpst->bccnt!=0 && !ClassesMatch(fpst->bccnt,fpst->bclass,fpst->nccnt,fpst->nclass)) ||
+ (fpst->fccnt!=0 && !ClassesMatch(fpst->fccnt,fpst->fclass,fpst->nccnt,fpst->nclass)))
+return( NULL );
+
+ FPSTBuildAllClasses(fpst);
+
+ ret = _FPST2Tree(fpst,NULL,0);
+
+ if ( !TreeFollowBranches(sf,ret,-1) ) {
+ TreeFree(ret);
+ ret = NULL;
+ }
+
+ FPSTFreeAllClasses(fpst);
+
+ if ( ret!=NULL )
+ TreeLabelState(ret,1); /* actually, it's states 0&1, but this will do */
+
+return( ret );
+}
+
+static struct contexttree *TreeNext(struct contexttree *cur) {
+ struct contexttree *p;
+ int i;
+
+ if ( cur->branch_cnt!=0 )
+return( cur->branches[0].branch );
+ else {
+ for (;;) {
+ p = cur->parent;
+ if ( p==NULL )
+return( NULL );
+ for ( i=0; i<p->branch_cnt; ++i ) {
+ if ( p->branches[i].branch==cur ) {
+ ++i;
+ break;
+ }
+ }
+ if ( i<p->branch_cnt )
+return( p->branches[i].branch );
+ cur = p;
+ }
+ }
+}
+
+int FPSTisMacable(SplineFont *sf, FPST *fpst) {
+ int i;
+ int featureType, featureSetting;
+ struct contexttree *ret;
+ FeatureScriptLangList *fl;
+
+ if ( fpst->type!=pst_contextsub && fpst->type!=pst_chainsub )
+return( false );
+ for ( fl = fpst->subtable->lookup->features; fl!=NULL; fl=fl->next ) {
+ if ( OTTagToMacFeature(fl->featuretag,&featureType,&featureSetting) &&
+ scriptsHaveDefault(fl->scripts) )
+ break;
+ }
+ if ( fl==NULL )
+return( false );
+
+ if ( fpst->format == pst_glyphs ) {
+ FPST *tempfpst = FPSTGlyphToClass(fpst);
+ ret = FPST2Tree(sf, tempfpst);
+ FPSTFree(tempfpst);
+ TreeFree(ret);
+return( ret!=NULL );
+ } else if ( fpst->format == pst_class ) {
+ ret = FPST2Tree(sf, fpst);
+ TreeFree(ret);
+return( ret!=NULL );
+ } else if ( fpst->format != pst_coverage )
+return( false );
+
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ if ( fpst->rules[i].u.coverage.ncnt+
+ fpst->rules[i].u.coverage.bcnt+
+ fpst->rules[i].u.coverage.fcnt>=10 )
+return( false ); /* Let's not make a state machine this complicated */
+
+ if ( fpst->rules[i].lookup_cnt==2 ) {
+ switch ( fpst->format ) {
+ case pst_coverage:
+ /* Second substitution must be on the final glyph */
+ if ( fpst->rules[i].u.coverage.fcnt!=0 ||
+ fpst->rules[i].lookups[0].seq==fpst->rules[i].lookups[1].seq ||
+ (fpst->rules[i].lookups[0].seq!=fpst->rules[i].u.coverage.ncnt-1 &&
+ fpst->rules[i].lookups[1].seq!=fpst->rules[i].u.coverage.ncnt-1) )
+return( false );
+ break;
+ default:
+return( false );
+ }
+ if ( !ValidSubs(fpst->rules[i].lookups[1].lookup) )
+return( false );
+
+ } else if ( fpst->rules[i].lookup_cnt!=1 )
+return( false );
+ if ( !ValidSubs(fpst->rules[i].lookups[0].lookup) )
+return( false );
+ }
+
+return( fpst->rule_cnt>0 );
+}
+
+/* ************************************************************************** */
+/* *************** Conversion from OpenType Context/Chaining **************** */
+/* ************************************************************************** */
+
+ /* ********************** From Forms ********************** */
+static int IsMarkChar( SplineChar *sc ) {
+ AnchorPoint *ap;
+
+ ap=sc->anchor;
+ while ( ap!=NULL && (ap->type==at_centry || ap->type==at_cexit) )
+ ap = ap->next;
+ if ( ap!=NULL && (ap->type==at_mark || ap->type==at_basemark) )
+return( true );
+
+return( false );
+}
+
+static char *GlyphListToNames(SplineChar **classglyphs) {
+ int i, len;
+ char *ret, *pt;
+
+ for ( i=len=0; classglyphs[i]!=NULL; ++i )
+ len += strlen(classglyphs[i]->name)+1;
+ ret = pt = malloc(len+1);
+ for ( i=0; classglyphs[i]!=NULL; ++i ) {
+ strcpy(pt,classglyphs[i]->name);
+ pt += strlen(pt);
+ *pt++ = ' ';
+ }
+ if ( pt>ret )
+ pt[-1] = '\0';
+ else
+ *ret = '\0';
+return( ret );
+}
+
+static char *BuildMarkClass(SplineFont *sf) {
+ SplineChar *sc, **markglyphs;
+ int i, mg;
+ char *ret;
+
+ mg = 0;
+ markglyphs = malloc(sf->glyphcnt*sizeof(SplineChar *));
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc=sf->glyphs[i])!=NULL ) {
+ if ( IsMarkChar(sc)) {
+ markglyphs[mg++] = sc;
+ }
+ }
+ markglyphs[mg] = NULL;
+ ret = GlyphListToNames(markglyphs);
+ free(markglyphs);
+return(ret);
+}
+
+static char *BuildClassNames(SplineChar **glyphs,uint16 *map, int classnum) {
+ int i, len;
+ char *ret, *pt;
+
+ for ( i=len=0; glyphs[i]!=NULL; ++i ) {
+ if ( map[i]==classnum )
+ len += strlen(glyphs[i]->name)+1;
+ }
+ ret = pt = malloc(len+1);
+ for ( i=len=0; glyphs[i]!=NULL; ++i ) {
+ if ( map[i]==classnum ) {
+ strcpy(pt,glyphs[i]->name);
+ pt += strlen(pt);
+ *pt++ = ' ';
+ }
+ }
+ if ( pt>ret )
+ pt[-1] = '\0';
+ else
+ *ret = '\0';
+return( ret );
+}
+
+static int FindFormLookupsForScript(SplineFont *sf,uint32 script,OTLookup *lookups[4]) {
+ OTLookup *otl;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+ int which;
+
+ memset(lookups,0,4*sizeof(OTLookup *));
+ for ( otl=sf->gsub_lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused && otl->lookup_type == gsub_single ) {
+ for ( fl=otl->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->featuretag== CHR('i','n','i','t') ) which = 0;
+ else if ( fl->featuretag== CHR('m','e','d','i') ) which = 1;
+ else if ( fl->featuretag== CHR('f','i','n','a') ) which = 2;
+ else if ( fl->featuretag== CHR('i','s','o','l') ) which = 3;
+ else
+ continue;
+ if ( lookups[which]!=NULL )
+ continue;
+ for ( sl=fl->scripts; sl!=NULL && sl->script!=script; sl=sl->next );
+ if ( sl==NULL )
+ continue;
+ lookups[which] = otl;
+ break;
+ }
+ }
+ if ( lookups[0]!=NULL || lookups[1]!=NULL || lookups[2]!=NULL || lookups[3]!=NULL )
+return( true );
+
+return( false );
+}
+
+ASM *ASMFromOpenTypeForms(SplineFont *sf,uint32 script) {
+ int i, which, cg, mg;
+ SplineChar *sc, *rsc, **classglyphs, **markglyphs;
+ PST *pst;
+ OTLookup *lookups[4];
+ ASM *sm;
+ int flags;
+
+ if ( !FindFormLookupsForScript(sf,script,lookups))
+return( NULL );
+ flags = (lookups[0]!=NULL ? lookups[0]->lookup_flags
+ :lookups[1]!=NULL ? lookups[1]->lookup_flags
+ :lookups[2]!=NULL ? lookups[2]->lookup_flags
+ : lookups[3]->lookup_flags);
+ classglyphs = calloc((sf->glyphcnt+1),sizeof(SplineChar *));
+ markglyphs = malloc((sf->glyphcnt+1)*sizeof(SplineChar *));
+
+ mg = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc=sf->glyphs[i])!=NULL ) {
+ if ( (flags&pst_ignorecombiningmarks) && IsMarkChar(sc)) {
+ markglyphs[mg++] = sc;
+ } else if ( SCScriptFromUnicode(sc)==script ) {
+ classglyphs[sc->orig_pos] = sc;
+ for ( pst = sc->possub; pst!=NULL; pst=pst->next ) if ( pst->subtable!=NULL ) {
+ OTLookup *otl = pst->subtable->lookup;
+ for ( which=3; which>=0; --which ) {
+ if ( otl==lookups[which])
+ break;
+ }
+ if ( which==-1 )
+ continue;
+ rsc = SFGetChar(sf,-1,pst->u.subs.variant);
+ if ( rsc!=NULL )
+ classglyphs[rsc->orig_pos] = rsc;
+ }
+ }
+ }
+ markglyphs[mg] = NULL;
+
+ cg = 0;
+ for ( i=0; i<sf->glyphcnt; ++i )
+ if ( classglyphs[i]!=NULL )
+ classglyphs[cg++] = classglyphs[i];
+ classglyphs[cg] = NULL;
+
+ sm = chunkalloc(sizeof(ASM));
+ sm->type = asm_context;
+ sm->flags = (flags&pst_r2l) ? asm_descending : 0;
+ /* This is a temporary value. It should be replaced if we will retain */
+ /* this state machine */
+ sm->subtable = (lookups[3]!=NULL ? lookups[3] : lookups[0]!=NULL ? lookups[0] : lookups[1]!=NULL ? lookups[1] : lookups[2])->subtables;
+ /* Only one (or two) classes of any importance: Letter in this script */
+ /* might already be formed. Might be a lig. Might be normal */
+ /* Oh, if ignoremarks is true, then combining marks merit a class of their own */
+ sm->class_cnt = (flags&pst_ignorecombiningmarks) ? 6 : 5;
+ sm->classes = calloc(sm->class_cnt,sizeof(char *));
+
+ sm->classes[4] = GlyphListToNames(classglyphs);
+ if ( flags&pst_ignorecombiningmarks )
+ sm->classes[5] = GlyphListToNames(markglyphs);
+ free(classglyphs); free(markglyphs);
+
+
+ /* State 0,1 are start states */
+ /* State 2 means we have found one interesting letter, transformed current to 'init' and marked it (in case we need to make it isolated) */
+ /* State 3 means we have found two interesting letters, transformed current to 'medi' and marked (in case we need to make it final) */
+ sm->state_cnt = 4;
+ sm->state = calloc(sm->state_cnt*sm->class_cnt,sizeof(struct asm_state));
+
+ /* State 0,1 (start), Class 4 (char in script) takes us to state 2 */
+ sm->state[4].next_state = 2;
+ sm->state[4].flags = 0x8000;
+
+ sm->state[sm->class_cnt+4] = sm->state[4];
+
+ for ( i=0; i<4; ++i ) {
+ sm->state[2*sm->class_cnt+i].next_state = 0;
+ sm->state[2*sm->class_cnt+i].u.context.mark_lookup = lookups[3];/* Isolated */
+ }
+
+ sm->state[2*sm->class_cnt+4].next_state = 3;
+ sm->state[2*sm->class_cnt+4].flags = 0x8000;
+ sm->state[2*sm->class_cnt+4].u.context.mark_lookup = lookups[0]; /* Initial */
+
+ for ( i=0; i<4; ++i ) {
+ sm->state[3*sm->class_cnt+i].next_state = 0;
+ sm->state[3*sm->class_cnt+i].u.context.mark_lookup = lookups[2];/* Final */
+ }
+
+ sm->state[3*sm->class_cnt+4].next_state = 3;
+ sm->state[3*sm->class_cnt+4].flags = 0x8000;
+ sm->state[3*sm->class_cnt+4].u.context.mark_lookup = lookups[1]; /* Medial */
+
+ /* Deleted glyph retains same state, just eats the glyph */
+ for ( i=0; i<sm->state_cnt; ++i ) {
+ int pos = i*sm->class_cnt+2, mpos = i*sm->class_cnt+5;
+ sm->state[pos].next_state = i;
+ sm->state[pos].flags = 0;
+ sm->state[pos].u.context.cur_lookup = NULL;
+ sm->state[pos].u.context.mark_lookup = NULL;
+ /* same for ignored marks */
+ if ( flags&pst_ignorecombiningmarks )
+ sm->state[mpos].next_state = i;
+ }
+
+return( sm );
+}
+
+ /* ********************** From Coverage FPST ********************** */
+static SplineChar **morx_cg_FigureClasses(SplineChar ***tables,int match_len,
+ int ***classes, int *cc, uint16 **mp, int *gc,
+ FPST *fpst,SplineFont *sf,int ordered) {
+ int i,j,k, mask, max, class_cnt, gcnt, gtot;
+ SplineChar ***temp, *sc, **glyphs, **gall;
+ uint16 *map;
+ int *nc;
+ int *next;
+ /* For each glyph used, figure out what coverage tables it gets used in */
+ /* then all the glyphs which get used in the same set of coverage tables */
+ /* can form one class */
+
+ if ( match_len>10 ) /* would need too much space to figure out */
+return( NULL );
+
+ gtot = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ sf->glyphs[i]->lsidebearing = 1;
+ if ( !ordered )
+ sf->glyphs[i]->ttf_glyph = gtot++;
+ else if ( sf->glyphs[i]->ttf_glyph+1>gtot )
+ gtot = sf->glyphs[i]->ttf_glyph+1;
+ }
+
+ max=0;
+ for ( i=0; i<match_len; ++i ) {
+ for ( k=0; tables[i][k]!=NULL; ++k );
+ if ( k>max ) max=k;
+ }
+ next = calloc(1<<match_len,sizeof(int));
+ temp = malloc((1<<match_len)*sizeof(SplineChar **));
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ sf->glyphs[i]->lsidebearing = 0;
+ sf->glyphs[i]->ticked = false;
+ }
+ for ( i=0; i<match_len; ++i ) {
+ for ( j=0; tables[i][j]!=NULL ; ++j )
+ tables[i][j]->lsidebearing |= 1<<i;
+ }
+
+ for ( i=0; i<match_len; ++i ) {
+ for ( j=0; (sc=tables[i][j])!=NULL ; ++j ) if ( !sc->ticked ) {
+ mask = sc->lsidebearing;
+ if ( next[mask]==0 )
+ temp[mask] = malloc(max*sizeof(SplineChar *));
+ temp[mask][next[mask]++] = sc;
+ sc->ticked = true;
+ }
+ }
+
+ gall = calloc(gtot+1,sizeof(SplineChar *));
+ class_cnt = gcnt = 0;
+ for ( i=0; i<(1<<match_len); ++i ) {
+ if ( next[i]!=0 ) {
+ for ( k=0; k<next[i]; ++k ) {
+ gall[temp[i][k]->ttf_glyph] = temp[i][k];
+ temp[i][k]->lsidebearing = class_cnt;
+ }
+ ++class_cnt;
+ gcnt += next[i];
+ free(temp[i]);
+ }
+ }
+ if ( fpst->subtable->lookup->lookup_flags & pst_ignorecombiningmarks ) {
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->ttf_glyph!=-1 ) {
+ if ( sf->glyphs[i]->lsidebearing==0 && IsMarkChar(sf->glyphs[i])) {
+ sf->glyphs[i]->lsidebearing = class_cnt;
+ ++gcnt;
+ }
+ }
+ ++class_cnt; /* Add a class for the marks so we can ignore them */
+ }
+ *cc = class_cnt+4;
+ glyphs = malloc((gcnt+1)*sizeof(SplineChar *));
+ map = malloc((gcnt+1)*sizeof(uint16));
+ gcnt = 0;
+ for ( i=0; i<gtot; ++i ) if ( gall[i]!=NULL ) {
+ glyphs[gcnt] = gall[i];
+ map[gcnt++] = gall[i]->lsidebearing+4; /* there are 4 standard classes, so our first class starts at 4 */
+ }
+ glyphs[gcnt] = NULL;
+ free(gall);
+ free(temp);
+ *gc = gcnt;
+ *mp = map;
+
+ nc = calloc(match_len,sizeof(int));
+ *classes = malloc((match_len+1)*sizeof(int *));
+ for ( i=0; i<match_len; ++i )
+ (*classes)[i] = malloc((class_cnt+1)*sizeof(int));
+ (*classes)[i] = NULL;
+
+ class_cnt = 0;
+ for ( i=0; i<(1<<match_len); ++i ) {
+ if ( next[i]!=0 ) {
+ for ( j=0; j<match_len; ++j ) if ( i&(1<<j)) {
+ (*classes)[j][nc[j]++] = class_cnt+4; /* there are 4 standard classes, so our first class starts at 4 */
+ }
+ ++class_cnt;
+ }
+ }
+ for ( j=0; j<match_len; ++j )
+ (*classes)[j][nc[j]] = 0xffff; /* End marker */
+
+ free(next);
+ free(nc);
+return( glyphs );
+}
+
+static ASM *ASMFromCoverageFPST(SplineFont *sf,FPST *fpst,int ordered) {
+ SplineChar ***tables, **glyphs;
+ int **classes, class_cnt, gcnt;
+ int i, j, k, match_len;
+ struct fpst_rule *r = &fpst->rules[0];
+ int subspos = r->u.coverage.bcnt+r->lookups[0].seq;
+ OTLookup *substag = r->lookups[0].lookup, *finaltag=NULL;
+ uint16 *map;
+ ASM *sm;
+
+ /* In one very specific case we can support two substitutions */
+ if ( r->lookup_cnt==2 ) {
+ if ( r->lookups[0].seq==r->u.coverage.ncnt-1 ) {
+ finaltag = substag;
+ subspos = r->u.coverage.bcnt+r->lookups[1].seq;
+ substag = r->lookups[1].lookup;
+ } else
+ finaltag = r->lookups[1].lookup;
+ }
+
+ tables = malloc((r->u.coverage.ncnt+r->u.coverage.bcnt+r->u.coverage.fcnt+1)*sizeof(SplineChar **));
+ for ( j=0, i=r->u.coverage.bcnt-1; i>=0; --i, ++j )
+ tables[j] = SFGlyphsFromNames(sf,r->u.coverage.bcovers[i]);
+ for ( i=0; i<r->u.coverage.ncnt; ++i, ++j )
+ tables[j] = SFGlyphsFromNames(sf,r->u.coverage.ncovers[i]);
+ for ( i=0; i<r->u.coverage.fcnt; ++i, ++j )
+ tables[j] = SFGlyphsFromNames(sf,r->u.coverage.fcovers[i]);
+ tables[j] = NULL;
+ match_len = j;
+
+ for ( i=0; i<match_len; ++i )
+ if ( tables[i]==NULL || tables[i][0]==NULL )
+return( NULL );
+
+ glyphs = morx_cg_FigureClasses(tables,match_len,
+ &classes,&class_cnt,&map,&gcnt,fpst,sf,ordered);
+ if ( glyphs==NULL )
+return( NULL );
+
+ for ( i=0; i<match_len; ++i )
+ free(tables[i]);
+ free(tables);
+
+ sm = chunkalloc(sizeof(ASM));
+ sm->type = asm_context;
+ sm->flags = (fpst->subtable->lookup->lookup_flags&pst_r2l) ? asm_descending : 0;
+ sm->class_cnt = class_cnt;
+ sm->classes = malloc(class_cnt*sizeof(char *));
+ sm->classes[0] = sm->classes[1] = sm->classes[2] = sm->classes[3] = NULL;
+ for ( i=4; i<class_cnt; ++i )
+ sm->classes[i] = BuildClassNames(glyphs,map,i);
+ free(glyphs); free(map);
+
+ /* Now build the state machine */
+ /* we have match_len+1 states (there are 2 initial states) */
+ /* we transition from the initial state to our first state when we get */
+ /* any class which makes up the first coverage table. From the first */
+ /* to the second on any class which makes up the second ... */
+ sm->state_cnt = match_len+1;
+ sm->state = calloc(sm->state_cnt*sm->class_cnt,sizeof(struct asm_state));
+ for ( j=0; j<match_len; ++j ) {
+ int off = (j+1)*sm->class_cnt;
+ for ( i=0; i<class_cnt; ++i ) {
+ for ( k=0; classes[j][k]!=0xffff && classes[j][k]!=i; ++k );
+ if ( classes[j][k]==i ) {
+ sm->state[off+i].next_state = j+2;
+ if ( j==match_len-1 ) {
+ sm->state[off+i].next_state = 0;
+ sm->state[off+i].flags = 0x4000;
+ if ( subspos==j )
+ sm->state[off+i].u.context.cur_lookup = substag;
+ else {
+ sm->state[off+i].u.context.mark_lookup = substag;
+ sm->state[off+i].u.context.cur_lookup = finaltag;
+ }
+ } else if ( subspos==j )
+ sm->state[off+i].flags = 0x8000;
+ } else if ( i==2 || ((fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks) && i==class_cnt-1 ) )
+ sm->state[off+i].next_state = j+1; /* Deleted glyph is a noop */
+ else if ( j!=0 )
+ sm->state[off+i].flags = 0x4000; /* Don't eat the current glyph, go back to state 0 and see if it will start the sequence over again */
+ }
+ }
+ /* Class 0 and class 1 should be the same. We only filled in class 1 above*/
+ memcpy(sm->state,sm->state+sm->class_cnt,sm->class_cnt*sizeof(struct asm_state));
+ for ( j=0; j<match_len; ++j )
+ free(classes[j]);
+ free(classes);
+return( sm );
+}
+
+ /* ********************** From Class FPST ********************** */
+static void SMSetState(struct asm_state *trans,struct contexttree *cur,int class) {
+ int i;
+
+ for ( i=0; i<cur->branch_cnt; ++i ) {
+ if ( cur->branches[i].classnum==class ) {
+ trans->next_state = cur->branches[i].branch->state;
+ /* If we go back to state 0, it means we want to start from */
+ /* the begining again, and we should check against the */
+ /* current glyph (which failed for us, but might be useful */
+ /* to start a new operation). Even if we did not fail we */
+ /* should still do this (so don't advance the glyph) */
+ trans->flags = cur->branches[i].branch->state!=0
+ ? cur->branches[i].branch->markme?0x8000:0x0000
+ : cur->branches[i].branch->markme?0xc000:0x4000;
+ trans->u.context.mark_lookup = cur->branches[i].branch->applymarkedsubs;
+ trans->u.context.cur_lookup = cur->branches[i].branch->applycursubs;
+return;
+ }
+ }
+
+ if ( cur->ends_here!=NULL ) {
+ trans->next_state = 0;
+ trans->flags = 0x4000;
+ trans->u.context.mark_lookup = cur->applymarkedsubs;
+ trans->u.context.cur_lookup = cur->applycursubs;
+ } else
+ trans->next_state = 0;
+}
+
+static struct asm_state *AnyActiveSubstrings(struct contexttree *tree,
+ struct contexttree *cur,int class, struct asm_state *trans, int classcnt) {
+ struct fpc *any = &cur->rules[0].rule->u.class;
+ int i,rc,j, b;
+
+ for ( i=1; i<=cur->depth; ++i ) {
+ for ( rc=0; rc<tree->rule_cnt; ++rc ) {
+ struct fpc *r = &tree->rules[rc].rule->u.class;
+ int ok = true;
+ for ( j=0; j<=cur->depth-i; ++j ) {
+ if ( any->allclasses[j+i]!=r->allclasses[j] ) {
+ ok = false;
+ break;
+ }
+ }
+ if ( ok && r->allclasses[j]==class ) {
+ struct contexttree *sub = tree;
+ for ( j=0; j<=cur->depth-i; ++j ) {
+ for ( b=0; b<sub->branch_cnt; ++b ) {
+ if ( sub->branches[b].classnum==r->allclasses[j] ) {
+ sub = sub->branches[b].branch;
+ break;
+ }
+ }
+ }
+ if ( trans[sub->state*classcnt+class+3].next_state!=0 &&
+ (sub->pending_pos+i == cur->pending_pos ||
+ sub->pending_pos == -1 ))
+return( &trans[sub->state*classcnt+class+3] );
+ }
+ }
+ }
+return( NULL );
+}
+
+static int FailureTrans( struct asm_state *trans ) {
+return( trans->next_state==0 &&
+ trans->u.context.mark_lookup==NULL &&
+ trans->u.context.cur_lookup==NULL );
+}
+
+static ASM *ASMFromClassFPST(SplineFont *sf,FPST *fpst, struct contexttree *tree) {
+ ASM *sm;
+ struct contexttree *cur;
+ int i;
+
+ sm = chunkalloc(sizeof(ASM));
+ sm->type = asm_context;
+ sm->flags = (fpst->subtable->lookup->lookup_flags&pst_r2l) ? asm_descending : 0;
+ /* mac class sets have four magic classes, opentype sets only have one */
+ sm->class_cnt = (fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks) ? fpst->nccnt+4 : fpst->nccnt+3;
+ sm->classes = malloc(sm->class_cnt*sizeof(char *));
+ sm->classes[0] = sm->classes[1] = sm->classes[2] = sm->classes[3] = NULL;
+ for ( i=1; i<fpst->nccnt; ++i )
+ sm->classes[i+3] = copy(fpst->nclass[i]);
+ if ( fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks )
+ sm->classes[sm->class_cnt-1] = BuildMarkClass(sf);
+
+ /* Now build the state machine */
+ sm->state_cnt = tree->next_state;
+ sm->state = calloc(sm->state_cnt*sm->class_cnt,sizeof(struct asm_state));
+ for ( cur=tree; cur!=NULL; cur = TreeNext(cur)) if ( cur->state!=0 ) {
+ int off = cur->state*sm->class_cnt;
+
+ SMSetState(&sm->state[off+1],cur,0); /* Out of bounds state */
+ sm->state[off+2].next_state = cur->state; /* Deleted glyph gets eaten and ignored */
+ if ( fpst->subtable->lookup->lookup_flags&pst_ignorecombiningmarks )
+ sm->state[off+sm->class_cnt-1].next_state = cur->state; /* As do ignored marks */
+ for ( i=1; i<fpst->nccnt; ++i )
+ SMSetState(&sm->state[off+i+3],cur,i);
+ }
+ /* Class 0 and class 1 should be the same. We only filled in class 1 above*/
+ memcpy(sm->state,sm->state+sm->class_cnt,sm->class_cnt*sizeof(struct asm_state));
+ /* Do a sort of transitive closure on states, so if we are looking for */
+ /* either "abcd" or "bce", don't lose the "bce" inside "abce" */
+ FPSTBuildAllClasses(fpst);
+ for ( cur = tree; cur!=NULL; cur = TreeNext(cur)) if ( cur->state>1 ) {
+ int off = cur->state*sm->class_cnt;
+ for ( i=1; i<fpst->nccnt; ++i ) if ( FailureTrans(&sm->state[off+3+i]) ) {
+ struct asm_state *trans =
+ AnyActiveSubstrings(tree,cur,i, sm->state,sm->class_cnt);
+ if ( trans!=NULL )
+ sm->state[off+3+i] = *trans;
+ }
+ }
+ FPSTFreeAllClasses(fpst);
+return( sm );
+}
+
+ASM *ASMFromFPST(SplineFont *sf,FPST *fpst,int ordered) {
+ FPST *tempfpst=fpst;
+ struct contexttree *tree=NULL;
+ ASM *sm;
+
+ if ( fpst->format==pst_glyphs )
+ tempfpst = FPSTGlyphToClass( fpst );
+ if ( tempfpst->format==pst_coverage )
+ sm = ASMFromCoverageFPST(sf,fpst,ordered);
+ else {
+ tree = FPST2Tree(sf, tempfpst);
+ if ( tree!=NULL ) {
+ sm = ASMFromClassFPST(sf,tempfpst,tree);
+ TreeFree(tree);
+ } else
+ sm = NULL;
+ }
+
+ if ( tempfpst!=fpst )
+ FPSTFree(tempfpst);
+ /* This is a temporary value. It should be replaced if we plan to */
+ /* retain this state machine */
+ if ( sm!=NULL )
+ sm->subtable = fpst->subtable;
+return( sm );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/autohint.c b/dviware/dvisvgm/libs/ff-woff/fontforge/autohint.c
new file mode 100644
index 0000000000..034978b919
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/autohint.c
@@ -0,0 +1,2708 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+#include "stemdb.h"
+#include <utype.h>
+#include <chardata.h>
+#include "edgelist.h"
+
+float OpenTypeLoadHintEqualityTolerance = 0.0;
+
+/* to create a type 1 font we must come up with the following entries for the
+ private dictionary:
+ BlueValues -- an array of 2n entries where Blue[2i]<Blue[2i+1] max n=7, Blue[i]>0
+ OtherBlues -- (optional) OtherBlue[i]<0
+ (blue zones should be at least 3 units appart)
+ StdHW -- (o) array with one entry, standard hstem height
+ StdVW -- (o) ditto vstem width
+ StemSnapH -- (o) up to 12 numbers containing various hstem heights (includes StdHW), small widths first
+ StemSnapV -- (o) ditto, vstem
+This file has routines to figure out at least some of these
+
+Also other routines to guess at good per-character hints
+*/
+
+static void AddBlue(real val, real array[5], int force) {
+ val = rint(val);
+ if ( !force && (val<array[0]-array[1] || val >array[0]+array[1] ))
+return; /* Outside of one sd */
+ if ( array[3]==0 && array[4]==0 )
+ array[3] = array[4] = val;
+ else if ( val>array[4] )
+ array[4] = val;
+ else if ( val<array[3] )
+ array[3] = val;
+}
+
+static void MergeZones(real zone1[5], real zone2[5]) {
+ if ( zone1[2]!=0 && zone2[2]!=0 &&
+ ((zone1[4]+3>zone2[3] && zone1[3]<=zone2[3]) ||
+ (zone2[4]+3>zone1[3] && zone2[3]<=zone1[3]) )) {
+ if (( zone2[0]<zone1[0]-zone1[1] || zone2[0] >zone1[0]+zone1[1] ) &&
+ ( zone1[0]<zone2[0]-zone2[1] || zone1[0] >zone2[0]+zone2[1] ))
+ /* the means of the zones are too far appart, don't merge em */;
+ else {
+ if ( zone1[0]<zone2[0] ) zone2[0] = zone1[0];
+ if ( zone1[1]>zone2[1] ) zone2[1] = zone1[1];
+ }
+ zone1[2] = 0;
+ }
+}
+
+/* I can deal with latin, greek and cyrillic because the they all come from */
+/* the same set of letter shapes and have all evolved together and have */
+/* various common features (ascenders, descenders, lower case, etc.). Other */
+/* scripts don't fit */
+void FindBlues( SplineFont *sf, int layer, real blues[14], real otherblues[10]) {
+ real caph[5], xh[5], ascenth[5], digith[5], descenth[5], base[5];
+ real otherdigits[5];
+ int i, j, k;
+ DBounds b;
+
+ /* Go through once to get some idea of the average value so we can weed */
+ /* out undesirables */
+ caph[0] = caph[1] = caph[2] = xh[0] = xh[1] = xh[2] = 0;
+ ascenth[0] = ascenth[1] = ascenth[2] = digith[0] = digith[1] = digith[2] = 0;
+ descenth[0] = descenth[1] = descenth[2] = base[0] = base[1] = base[2] = 0;
+ otherdigits[0] = otherdigits[1] = otherdigits[2] = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->layers[layer].splines!=NULL ) {
+ int enc = sf->glyphs[i]->unicodeenc;
+ const unichar_t *upt;
+ if ( enc<0x10000 && isalnum(enc) &&
+ ((enc>=32 && enc<128 ) || enc == 0xfe || enc==0xf0 || enc==0xdf ||
+ enc==0x131 ||
+ (enc>=0x391 && enc<=0x3f3 ) ||
+ (enc>=0x400 && enc<=0x4e9 ) )) {
+ /* no accented characters (or ligatures) */
+ if ( unicode_alternates[enc>>8]!=NULL &&
+ (upt =unicode_alternates[enc>>8][enc&0xff])!=NULL &&
+ upt[1]!='\0' )
+ continue;
+ SplineCharFindBounds(sf->glyphs[i],&b);
+ if ( b.miny==0 && b.maxy==0 )
+ continue;
+ if ( enc=='g' || enc=='j' || enc=='p' || enc=='q' || enc=='y' ||
+ enc==0xfe ||
+ enc==0x3c1 /* rho */ ||
+ enc==0x3c6 /* phi */ ||
+ enc==0x3c7 /* chi */ ||
+ enc==0x3c8 /* psi */ ||
+ enc==0x440 /* cyr er */ ||
+ enc==0x443 /* cyr u */ ||
+ enc==0x444 /* cyr ef */) {
+ descenth[0] += b.miny;
+ descenth[1] += b.miny*b.miny;
+ ++descenth[2];
+ } else if ( enc=='x' || enc=='r' || enc=='o' || enc=='e' ||
+ enc=='s' || enc=='c' || enc=='h' || enc=='k' ||
+ enc=='l' || enc=='m' || enc=='n' ||
+ enc==0x3b5 /* epsilon */ ||
+ enc==0x3b9 /* iota */ ||
+ enc==0x3ba /* kappa */ ||
+ enc==0x3bf /* omicron */ ||
+ enc==0x3c3 /* sigma */ ||
+ enc==0x3c5 /* upsilon */ ||
+ enc==0x430 /* cyr a */ ||
+ enc==0x432 /* cyr ve */ ||
+ enc==0x433 /* cyr ge */ ||
+ enc==0x435 /* cyr e */ ||
+ enc==0x436 /* cyr zhe */ ||
+ enc==0x438 /* cyr i */ ||
+ enc==0x43a /* cyr ka */ ||
+ enc==0x43d /* cyr en */ ||
+ enc==0x43e /* cyr o */ ||
+ enc==0x441 /* cyr es */ ||
+ enc==0x445 /* cyr ha */ ||
+ enc==0x447 /* cyr che */ ||
+ enc==0x448 /* cyr sha */ ||
+ enc==0x44f /* cyr ya */ ){
+ base[0] += b.miny;
+ base[1] += b.miny*b.miny;
+ ++base[2];
+ }
+ /* careful of lowercase digits, 6 and 8 should be ascenders */
+ if ( enc=='6' || enc=='8' ) {
+ digith[0] += b.maxy;
+ digith[1] += b.maxy*b.maxy;
+ ++digith[2];
+ } else if ( enc<0x10000 && isdigit(enc) ) {
+ otherdigits[0] += b.maxy;
+ otherdigits[1] += b.maxy*b.maxy;
+ ++otherdigits[2];
+ } else if ( enc<0x10000 && isupper(enc) && enc!=0x462 && enc!=0x490 ) {
+ caph[0] += b.maxy;
+ caph[1] += b.maxy*b.maxy;
+ ++caph[2];
+ } else if ( enc=='b' || enc=='d' || enc=='f' || enc=='h' || enc=='k' ||
+ enc == 'l' || enc==0xf0 || enc==0xfe || enc == 0xdf ||
+ enc == 0x3b2 || enc==0x3b6 || enc==0x3b8 || enc==0x3bb ||
+ enc == 0x3be ||
+ enc == 0x431 /* cyr be */ /* || enc == 0x444 - ef may have varible height */) {
+ ascenth[0] += b.maxy;
+ ascenth[1] += b.maxy*b.maxy;
+ ++ascenth[2];
+ } else if ( enc=='c' || enc=='e' || enc=='o' || enc=='s' || enc=='u' ||
+ enc=='v' || enc=='w' || enc=='x' || enc=='y' || enc=='z' ||
+ enc==0x3b5 /* epsilon */ ||
+ enc==0x3b9 /* iota */ ||
+ enc==0x3ba /* kappa */ ||
+ enc==0x3bc /* mu */ ||
+ enc==0x3bd /* nu */ ||
+ enc==0x3bf /* omicron */ ||
+ enc==0x3c0 /* pi */ ||
+ enc==0x3c1 /* rho */ ||
+ enc==0x3c5 /* upsilon */ ||
+ enc==0x433 /* cyr ge */ ||
+ enc==0x435 /* cyr e */ ||
+ enc==0x436 /* cyr zhe */ ||
+ enc==0x438 /* cyr i */ ||
+ enc==0x43b /* cyr el */ ||
+ enc==0x43d /* cyr en */ ||
+ enc==0x43e /* cyr o */ ||
+ enc==0x43f /* cyr pe */ ||
+ enc==0x440 /* cyr er */ ||
+ enc==0x441 /* cyr es */ ||
+ enc==0x442 /* cyr te */ ||
+ enc==0x443 /* cyr u */ ||
+ enc==0x445 /* cyr ha */ ||
+ enc==0x446 /* cyr tse */ ||
+ enc==0x447 /* cyr che */ ||
+ enc==0x448 /* cyr sha */ ||
+ enc==0x449 /* cyr shcha */ ||
+ enc==0x44a /* cyr hard sign */ ||
+ enc==0x44b /* cyr yery */ ||
+ enc==0x44c /* cyr soft sign */ ||
+ enc==0x44d /* cyr reversed e */ ||
+ enc==0x44f /* cyr ya */ ) {
+ xh[0] += b.maxy;
+ xh[1] += b.maxy*b.maxy;
+ ++xh[2];
+ }
+ }
+ }
+ if ( !ff_progress_next())
+ break;
+ }
+ if ( otherdigits[2]>0 && digith[2]>0 ) {
+ if ( otherdigits[0]/otherdigits[2] >= .95*digith[0]/digith[2] ) {
+ /* all digits are about the same height, not lowercase */
+ digith[0] += otherdigits[0];
+ digith[1] += otherdigits[1];
+ digith[2] += otherdigits[2];
+ }
+ }
+
+ if ( xh[2]>1 ) {
+ xh[1] = sqrt((xh[1]-xh[0]*xh[0]/xh[2])/(xh[2]-1));
+ xh[0] /= xh[2];
+ }
+ if ( ascenth[2]>1 ) {
+ ascenth[1] = sqrt((ascenth[1]-ascenth[0]*ascenth[0]/ascenth[2])/(ascenth[2]-1));
+ ascenth[0] /= ascenth[2];
+ }
+ if ( caph[2]>1 ) {
+ caph[1] = sqrt((caph[1]-caph[0]*caph[0]/caph[2])/(caph[2]-1));
+ caph[0] /= caph[2];
+ }
+ if ( digith[2]>1 ) {
+ digith[1] = sqrt((digith[1]-digith[0]*digith[0]/digith[2])/(digith[2]-1));
+ digith[0] /= digith[2];
+ }
+ if ( base[2]>1 ) {
+ base[1] = sqrt((base[1]-base[0]*base[0]/base[2])/(base[2]-1));
+ base[0] /= base[2];
+ }
+ if ( descenth[2]>1 ) {
+ descenth[1] = sqrt((descenth[1]-descenth[0]*descenth[0]/descenth[2])/(descenth[2]-1));
+ descenth[0] /= descenth[2];
+ }
+
+ /* we'll accept values between +/- 1sd of the mean */
+ /* array[0] == mean, array[1] == sd, array[2] == cnt, array[3]=min, array[4]==max */
+ if ( base[0]+base[1]<0 ) base[1] = -base[0]; /* Make sure 0 is within the base bluezone */
+ caph[3] = caph[4] = 0;
+ xh[3] = xh[4] = 0;
+ ascenth[3] = ascenth[4] = 0;
+ digith[3] = digith[4] = 0;
+ descenth[3] = descenth[4] = 0;
+ base[3] = base[4] = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ int enc = sf->glyphs[i]->unicodeenc;
+ const unichar_t *upt;
+ if ( enc<0x10000 && isalnum(enc) &&
+ ((enc>=32 && enc<128 ) || enc == 0xfe || enc==0xf0 || enc==0xdf ||
+ (enc>=0x391 && enc<=0x3f3 ) ||
+ (enc>=0x400 && enc<=0x4e9 ) )) {
+ /* no accented characters (or ligatures) */
+ if ( unicode_alternates[enc>>8]!=NULL &&
+ (upt =unicode_alternates[enc>>8][enc&0xff])!=NULL &&
+ upt[1]!='\0' )
+ continue;
+ SplineCharFindBounds(sf->glyphs[i],&b);
+ if ( b.miny==0 && b.maxy==0 )
+ continue;
+ if ( enc=='g' || enc=='j' || enc=='p' || enc=='q' || enc=='y' ||
+ enc==0xfe || enc == 0x3c6 || enc==0x3c8 ||
+ enc==0x440 || enc==0x443 || enc==0x444) {
+ AddBlue(b.miny,descenth,false);
+ } else {
+ /* O and o get forced into the baseline blue value even if they*/
+ /* are beyond 1 sd */
+ AddBlue(b.miny,base,enc=='O' || enc=='o');
+ }
+ if ( enc<0x10000 && isdigit(enc)) {
+ AddBlue(b.maxy,digith,false);
+ } else if ( enc<0x10000 && isupper(enc)) {
+ AddBlue(b.maxy,caph,enc=='O');
+ } else if ( enc=='b' || enc=='d' || enc=='f' || enc=='h' || enc=='k' ||
+ enc == 'l' || enc=='t' || enc==0xf0 || enc==0xfe || enc == 0xdf ||
+ enc == 0x3b2 || enc==0x3b6 || enc==0x3b8 || enc==0x3bb ||
+ enc == 0x3be ||
+ enc == 0x431 ) {
+ AddBlue(b.maxy,ascenth,false);
+ } else if ( enc=='c' || enc=='e' || enc=='o' || enc=='s' || enc=='u' ||
+ enc=='v' || enc=='w' || enc=='x' || enc=='y' || enc=='z' ||
+ enc==0x3b5 /* epsilon */ ||
+ enc==0x3b9 /* iota */ ||
+ enc==0x3ba /* kappa */ ||
+ enc==0x3bc /* mu */ ||
+ enc==0x3bd /* nu */ ||
+ enc==0x3bf /* omicron */ ||
+ enc==0x3c0 /* pi */ ||
+ enc==0x3c1 /* rho */ ||
+ enc==0x3c5 /* upsilon */ ||
+ enc==0x433 /* cyr ge */ ||
+ enc==0x435 /* cyr e */ ||
+ enc==0x436 /* cyr zhe */ ||
+ enc==0x438 /* cyr i */ ||
+ enc==0x43b /* cyr el */ ||
+ enc==0x43d /* cyr en */ ||
+ enc==0x43e /* cyr o */ ||
+ enc==0x43f /* cyr pe */ ||
+ enc==0x440 /* cyr er */ ||
+ enc==0x441 /* cyr es */ ||
+ enc==0x442 /* cyr te */ ||
+ enc==0x443 /* cyr u */ ||
+ enc==0x445 /* cyr ha */ ||
+ enc==0x446 /* cyr tse */ ||
+ enc==0x447 /* cyr che */ ||
+ enc==0x448 /* cyr sha */ ||
+ enc==0x449 /* cyr shcha */ ||
+ enc==0x44a /* cyr hard sign */ ||
+ enc==0x44b /* cyr yery */ ||
+ enc==0x44c /* cyr soft sign */ ||
+ enc==0x44d /* cyr reversed e */ ||
+ enc==0x44f /* cyr ya */ ) {
+ AddBlue(b.maxy,xh,enc=='o' || enc=='x');
+ }
+ }
+ }
+
+ /* the descent blue zone merges into the base zone */
+ MergeZones(descenth,base);
+ MergeZones(xh,base);
+ MergeZones(ascenth,caph);
+ MergeZones(digith,caph);
+ MergeZones(xh,caph);
+ MergeZones(ascenth,digith);
+ MergeZones(xh,digith);
+
+ if ( otherblues!=NULL )
+ for ( i=0; i<10; ++i )
+ otherblues[i] = 0;
+ for ( i=0; i<14; ++i )
+ blues[i] = 0;
+
+ if ( otherblues!=NULL && descenth[2]!=0 ) {
+ otherblues[0] = descenth[3];
+ otherblues[1] = descenth[4];
+ }
+ i = 0;
+ if ( base[2]==0 && (xh[2]!=0 || ascenth[2]!=0 || caph[2]!=0 || digith[2]!=0 )) {
+ /* base line blue value must be present if any other value is */
+ /* make one up if we don't have one */
+ blues[0] = -20;
+ blues[1] = 0;
+ i = 2;
+ } else if ( base[2]!=0 ) {
+ blues[0] = base[3];
+ blues[1] = base[4];
+ i = 2;
+ }
+ if ( xh[2]!=0 ) {
+ blues[i++] = xh[3];
+ blues[i++] = xh[4];
+ }
+ if ( caph[2]!=0 ) {
+ blues[i++] = caph[3];
+ blues[i++] = caph[4];
+ }
+ if ( digith[2]!=0 ) {
+ blues[i++] = digith[3];
+ blues[i++] = digith[4];
+ }
+ if ( ascenth[2]!=0 ) {
+ blues[i++] = ascenth[3];
+ blues[i++] = ascenth[4];
+ }
+
+ for ( j=0; j<i; j+=2 ) for ( k=j+2; k<i; k+=2 ) {
+ if ( blues[j]>blues[k] ) {
+ real temp = blues[j];
+ blues[j]=blues[k];
+ blues[k] = temp;
+ temp = blues[j+1];
+ blues[j+1] = blues[k+1];
+ blues[k+1] = temp;
+ }
+ }
+}
+
+static int PVAddBlues(BlueData *bd,unsigned bcnt,char *pt) {
+ char *end;
+ real val1, val2;
+ unsigned i,j;
+
+ if ( pt==NULL )
+return( bcnt );
+
+ while ( isspace(*pt) || *pt=='[' ) ++pt;
+ while ( *pt!=']' && *pt!='\0' ) {
+ val1 = strtod(pt,&end);
+ if ( *end=='\0' || end==pt )
+ break;
+ for ( pt=end; isspace(*pt) ; ++pt );
+ val2 = strtod(pt,&end);
+ if ( end==pt )
+ break;
+ if ( bcnt==0 || val1>bd->blues[bcnt-1][0] )
+ i = bcnt;
+ else {
+ for ( i=0; i<bcnt && val1>bd->blues[i][0]; ++i );
+ for ( j=bcnt; j>i; --j ) {
+ bd->blues[j][0] = bd->blues[j-1][0];
+ bd->blues[j][1] = bd->blues[j-1][1];
+ }
+ }
+ bd->blues[i][0] = val1;
+ bd->blues[i][1] = val2;
+ ++bcnt;
+ if ( bcnt>=sizeof(bd->blues)/sizeof(bd->blues[0]))
+ break;
+ for ( pt=end; isspace(*pt) ; ++pt );
+ }
+return( bcnt );
+}
+
+/* Quick and dirty (and sometimes wrong) approach to figure out the common */
+/* alignment zones in latin (greek, cyrillic) alphabets */
+void QuickBlues(SplineFont *_sf, int layer, BlueData *bd) {
+ real xheight = -1e10, caph = -1e10, ascent = -1e10, descent = 1e10, max, min;
+ real xheighttop = -1e10, caphtop = -1e10;
+ real numh = -1e10, numhtop = -1e10;
+ real base = -1e10, basebelow = 1e10;
+ SplineFont *sf;
+ SplinePoint *sp;
+ SplineSet *spl;
+ int i,j, bcnt;
+ SplineChar *t;
+ char *pt;
+
+ /* Get the alignment zones we care most about */
+
+ /* be careful of cid fonts */
+ if ( _sf->cidmaster!=NULL )
+ _sf = _sf->cidmaster;
+
+ j=0;
+ do {
+ sf = ( _sf->subfontcnt==0 )? _sf : _sf->subfonts[j];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ int enc = sf->glyphs[i]->unicodeenc;
+ if ( enc=='I' || enc=='O' || enc=='x' || enc=='o' || enc=='p' || enc=='l' ||
+/* Jean-Christophe Dubacq points out that x-height should be calculated from */
+/* various characters and not just x and o. Italic "x"s often have strange */
+/* shapes */
+ enc=='A' || enc==0x391 || enc==0x410 ||
+ enc=='V' ||
+ enc=='u' || enc=='v' || enc=='w' || enc=='y' || enc=='z' ||
+ enc=='7' || enc=='8' || /* numbers with ascenders */
+ enc==0x399 || enc==0x39f || enc==0x3ba || enc==0x3bf || enc==0x3c1 || enc==0x3be || enc==0x3c7 ||
+ enc==0x41f || enc==0x41e || enc==0x43e || enc==0x43f || enc==0x440 || enc==0x452 || enc==0x445 ) {
+ t = sf->glyphs[i];
+ while ( t->layers[layer].splines==NULL && t->layers[layer].refs!=NULL )
+ t = t->layers[layer].refs->sc;
+ max = -1e10; min = 1e10;
+ if ( t->layers[layer].splines!=NULL ) {
+ for ( spl=t->layers[layer].splines; spl!=NULL; spl=spl->next ) {
+ for ( sp=spl->first; ; ) {
+ if ( sp->me.y > max ) max = sp->me.y;
+ if ( sp->me.y < min ) min = sp->me.y;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==spl->first )
+ break;
+ }
+ }
+ if ( enc>0x400 ) {
+ /* Only use ascent and descent here if we don't have anything better */
+ if ( enc==0x41f ) { caph = max; base = min; }
+ else if ( enc==0x41e ) { if ( max>caphtop ) caphtop = max; basebelow = min; }
+ else if ( enc==0x410 ) { if ( max>caphtop ) caphtop = max; }
+ else if ( enc==0x43f && xheight<0 ) xheight = max;
+ else if ( enc==0x445 && xheight<0 ) xheight = max;
+ else if ( enc==0x43e ) xheighttop = max;
+ else if ( enc==0x452 && ascent<0 ) ascent = max;
+ else if ( enc==0x440 && descent>0 ) descent = min;
+ } else if ( enc>0x300 ) {
+ if ( enc==0x399 ) { caph = max; base = min; }
+ else if ( enc==0x391 ) { if ( max>caphtop ) caphtop = max; }
+ else if ( enc==0x39f ) { if ( max>caphtop ) caphtop = max; basebelow = min; }
+ else if ( enc==0x3ba && xheight<0 ) xheight = max;
+ else if ( enc==0x3c7 && xheight<0 ) xheight = max;
+ else if ( enc==0x3bf ) xheighttop = max;
+ else if ( enc==0x3be && ascent<0 ) ascent = max;
+ else if ( enc==0x3c1 && descent>0 ) descent = min;
+ } else {
+ if ( enc=='I' ) { caph = max; base = min; }
+ else if ( enc=='O' ) { if ( max>caphtop ) caphtop = max; if ( basebelow<min ) basebelow = min; }
+ else if ( enc=='V' ) { if ( basebelow<min ) basebelow = min; }
+ else if ( enc=='A' ) { if ( max>caphtop ) caphtop = max; }
+ else if ( enc=='7' ) numh = max;
+ else if ( enc=='0' ) numhtop = max;
+ else if ( enc=='x' || enc=='o' || enc=='u' || enc=='v' ||
+ enc =='w' || enc=='y' || enc=='z' ) {
+ if ( xheighttop==-1e10 ) xheighttop = max;
+ if ( xheight==-1e10 ) xheight = max;
+ if ( max > xheighttop ) xheighttop = max;
+ else if ( max<xheight && max>20 ) xheight = max;
+ if ( enc=='y' && descent==1e10 ) descent = min;
+ } else if ( enc=='l' ) ascent = max;
+ else descent = min;
+ }
+ }
+ }
+ }
+ ++j;
+ } while ( j<_sf->subfontcnt );
+
+ if ( basebelow==1e10 ) basebelow=-1e10;
+
+ if ( caphtop<caph ) caphtop = caph; else if ( caph==-1e10 ) caph=caphtop;
+ if ( basebelow>base ) basebelow = base; else if ( base==-1e10 ) base=basebelow;
+ if ( base==-1e10 ) { base=basebelow = 0; }
+ if ( xheighttop<xheight ) xheighttop = xheight; else if ( xheight==-1e10 ) xheight=xheighttop;
+ bd->xheight = xheight; bd->xheighttop = xheighttop;
+ bd->caph = caph; bd->caphtop = caphtop;
+ bd->numh = numh; bd->numhtop = numhtop;
+ bd->ascent = ascent; bd->descent = descent;
+ bd->base = base; bd->basebelow = basebelow;
+
+ bcnt = 0;
+ if ( (pt=PSDictHasEntry(sf->private,"BlueValues"))!=NULL )
+ bcnt = PVAddBlues(bd,bcnt,pt);
+ if ( (pt=PSDictHasEntry(sf->private,"OtherBlues"))!=NULL )
+ bcnt = PVAddBlues(bd,bcnt,pt);
+ if ( bcnt==0 ) {
+ if ( basebelow==-1e10 ) basebelow = base;
+ if ( base==-1e10 ) base = basebelow;
+ if ( xheight==-1e10 ) xheight = xheighttop;
+ if ( xheighttop==-1e10 ) xheighttop = xheight;
+ if ( caph==-1e10 ) caph = caphtop;
+ if ( caphtop==-1e10 ) caphtop = caph;
+ if ( numh==-1e10 ) numh = numhtop;
+ if ( numhtop==-1e10 ) numhtop = numh;
+ if ( numh!=-1e10 && (numhtop>caph-2 && numh<caphtop+2)) {
+ if ( numh<caph ) caph=numh;
+ if ( numhtop>caphtop ) caphtop = numhtop;
+ numh = numhtop = -1e10;
+ }
+ if ( ascent!=-1e10 && (ascent>caph-2 && ascent<caphtop+2)) {
+ if ( ascent<caph ) caph=ascent;
+ if ( ascent>caphtop ) caphtop = ascent;
+ ascent = -1e10;
+ }
+ if ( ascent!=-1e10 && (ascent>numh-2 && ascent<numhtop+2)) {
+ if ( ascent<numh ) numh=ascent;
+ if ( ascent>numhtop ) numhtop = ascent;
+ ascent = -1e10;
+ if ( numhtop>caph-2 && numh<caphtop+2 ) {
+ if ( numh<caph ) caph=numh;
+ if ( numhtop>caphtop ) caphtop = numhtop;
+ numh = numhtop = -1e10;
+ }
+ }
+
+ if ( descent!=1e10 ) {
+ bd->blues[0][0] = bd->blues[0][1] = descent;
+ ++bcnt;
+ }
+ if ( basebelow!=-1e10 ) {
+ bd->blues[bcnt][0] = basebelow;
+ bd->blues[bcnt][1] = base;
+ ++bcnt;
+ }
+ if ( xheight!=-1e10 ) {
+ bd->blues[bcnt][0] = xheight;
+ bd->blues[bcnt][1] = xheighttop;
+ ++bcnt;
+ }
+ if ( numh!=-1e10 ) {
+ bd->blues[bcnt][0] = numh;
+ bd->blues[bcnt][1] = numhtop;
+ ++bcnt;
+ }
+ if ( caph!=-1e10 ) {
+ bd->blues[bcnt][0] = caph;
+ bd->blues[bcnt][1] = caphtop;
+ ++bcnt;
+ }
+ if ( ascent!=-1e10 ) {
+ bd->blues[bcnt][0] = bd->blues[bcnt][1] = ascent;
+ ++bcnt;
+ }
+ }
+ bd->bluecnt = bcnt;
+}
+
+void ElFreeEI(EIList *el) {
+ EI *e, *next;
+
+ for ( e = el->edges; e!=NULL; e = next ) {
+ next = e->next;
+ free(e);
+ }
+}
+
+static int EIAddEdge(Spline *spline, real tmin, real tmax, EIList *el) {
+ EI *new = calloc(1,sizeof(EI));
+ real min, max, temp;
+ Spline1D *s;
+ real dxdtmin, dxdtmax, dydtmin, dydtmax;
+
+ new->spline = spline;
+ new->tmin = tmin;
+ new->tmax = tmax;
+
+ s = &spline->splines[1];
+ if (( dydtmin = (3*s->a*tmin + 2*s->b)*tmin + s->c )<0 ) dydtmin = -dydtmin;
+ if (( dydtmax = (3*s->a*tmax + 2*s->b)*tmax + s->c )<0 ) dydtmax = -dydtmax;
+ s = &spline->splines[0];
+ if (( dxdtmin = (3*s->a*tmin + 2*s->b)*tmin + s->c )<0 ) dxdtmin = -dxdtmin;
+ if (( dxdtmax = (3*s->a*tmax + 2*s->b)*tmax + s->c )<0 ) dxdtmax = -dxdtmax;
+
+ /*s = &spline->splines[0];*/
+ min = ((s->a * tmin + s->b)* tmin + s->c)* tmin + s->d;
+ max = ((s->a * tmax + s->b)* tmax + s->c)* tmax + s->d;
+ if ( tmax==1 ) max = spline->to->me.x; /* beware rounding errors */
+ if ( !el->leavetiny && floor(min)==floor(max) ) { /* If it doesn't cross a pixel boundary then it might as well be vertical */
+ if ( tmin==0 ) max = min;
+ else if ( tmax==1 ) min = max;
+ else max = min;
+ }
+ if ( min==max )
+ new->vert = true;
+ else if ( min<max )
+ new->hup = true;
+ else {
+ temp = min; min = max; max=temp;
+ }
+ if ( !el->leavetiny && min+1>max ) new->almostvert = true;
+ if ( 40*dxdtmin<dydtmin ) new->vertattmin = true;
+ if ( 40*dxdtmax<dydtmax ) new->vertattmax = true;
+ /*if ( new->vertattmin && new->vertattmax && s->a==0 && s->b==0 ) new->almostvert = true;*/
+ new->coordmin[0] = min; new->coordmax[0] = max;
+ if ( el->coordmin[0]>min )
+ el->coordmin[0] = min;
+ if ( el->coordmax[0]<max )
+ el->coordmax[0] = max;
+
+ s = &spline->splines[1];
+ min = ((s->a * tmin + s->b)* tmin + s->c)* tmin + s->d;
+ max = ((s->a * tmax + s->b)* tmax + s->c)* tmax + s->d;
+ if ( tmax==1 ) max = spline->to->me.y;
+ if ( !el->leavetiny && floor(min)==floor(max) ) { /* If it doesn't cross a pixel boundary then it might as well be horizontal */
+ if ( tmin==0 ) max = min;
+ else if ( tmax==1 ) min = max;
+ else max = min;
+ }
+ if ( min==max )
+ new->hor = true;
+ else if ( min<max )
+ new->vup = true;
+ else {
+ temp = min; min = max; max=temp;
+ }
+ if ( !el->leavetiny && min+1>max ) new->almosthor = true;
+ if ( 40*dydtmin<dxdtmin ) new->horattmin = true;
+ if ( 40*dydtmax<dxdtmax ) new->horattmax = true;
+ /*if ( new->horattmin && new->horattmax && s->a==0 && s->b==0 ) new->almosthor = true;*/
+ new->coordmin[1] = min; new->coordmax[1] = max;
+ if ( el->coordmin[1]>min )
+ el->coordmin[1] = min;
+ if ( el->coordmax[1]<max )
+ el->coordmax[1] = max;
+
+ if ( new->hor && new->vert ) {
+ /* This spline is too small for us to notice */
+ free(new);
+return( false );
+ } else {
+ new->next = el->edges;
+ el->edges = new;
+
+ if ( el->splinelast!=NULL )
+ el->splinelast->splinenext = new;
+ el->splinelast = new;
+ if ( el->splinefirst==NULL )
+ el->splinefirst = new;
+
+return( true );
+ }
+}
+
+static void EIAddSpline(Spline *spline, EIList *el) {
+ extended ts[6], temp;
+ int i, j, base, last;
+
+ ts[0] = 0; ts[5] = 1.0;
+ SplineFindExtrema(&spline->splines[0],&ts[1],&ts[2]);
+ SplineFindExtrema(&spline->splines[1],&ts[3],&ts[4]);
+ /* avoid teeny tiny segments, they just confuse us */
+ SplineRemoveExtremaTooClose(&spline->splines[0],&ts[1],&ts[2]);
+ SplineRemoveExtremaTooClose(&spline->splines[1],&ts[3],&ts[4]);
+ for ( i=0; i<4; ++i ) for ( j=i+1; j<5; ++j ) {
+ if ( ts[i]>ts[j] ) {
+ temp = ts[i];
+ ts[i] = ts[j];
+ ts[j] = temp;
+ }
+ }
+ for ( base=0; ts[base]==-1; ++base);
+ for ( i=5; i>base ; --i ) {
+ if ( ts[i]==ts[i-1] ) {
+ for ( j=i-1; j>base; --j )
+ ts[j] = ts[j-1];
+ ts[j] = -1;
+ ++base;
+ }
+ }
+ last = base;
+ for ( i=base; i<5 ; ++i )
+ if ( EIAddEdge(spline,ts[last],ts[i+1],el) )
+ last = i+1;
+}
+
+void ELFindEdges(SplineChar *sc, EIList *el) {
+ Spline *spline, *first;
+ SplineSet *spl;
+
+ el->sc = sc;
+ if ( sc->layers[el->layer].splines==NULL )
+return;
+
+ el->coordmin[0] = el->coordmax[0] = sc->layers[el->layer].splines->first->me.x;
+ el->coordmin[1] = el->coordmax[1] = sc->layers[el->layer].splines->first->me.y;
+
+ for ( spl = sc->layers[el->layer].splines; spl!=NULL; spl = spl->next ) if ( spl->first->prev!=NULL && spl->first->prev->from!=spl->first ) {
+ first = NULL;
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ EIAddSpline(spline,el);
+ if ( first==NULL ) first = spline;
+ }
+ if ( el->splinefirst!=NULL && spl->first->prev!=NULL )
+ el->splinelast->splinenext = el->splinefirst;
+ el->splinelast = NULL; el->splinefirst = NULL;
+ }
+}
+
+static int IsBiggerSlope(EI *test, EI *base, int major) {
+ int other = !major;
+ real tdo, tdm, bdo, bdm, t;
+
+ if (( major && test->vup ) || (!major && test->hup))
+ t = test->tmin;
+ else
+ t = test->tmax;
+ tdm = (3*test->spline->splines[major].a*t + 2*test->spline->splines[major].b)*t + test->spline->splines[major].c;
+ tdo = (3*test->spline->splines[other].a*t + 2*test->spline->splines[other].b)*t + test->spline->splines[other].c;
+
+ if (( major && base->vup ) || (!major && base->hup))
+ t = base->tmin;
+ else
+ t = base->tmax;
+ bdm = (3*base->spline->splines[major].a*t + 2*base->spline->splines[major].b)*t + base->spline->splines[major].c;
+ bdo = (3*base->spline->splines[other].a*t + 2*base->spline->splines[other].b)*t + base->spline->splines[other].c;
+
+ if ( tdm==0 && bdm==0 )
+return( tdo > bdo );
+ if ( tdo==0 )
+return( tdo>0 );
+ else if ( bdo==0 )
+return( bdo>0 );
+
+return( tdo/tdm > bdo/bdm );
+}
+
+void ELOrder(EIList *el, int major ) {
+ int other = !major;
+ int pos;
+ EI *ei, *prev, *test;
+
+ el->low = floor(el->coordmin[major]); el->high = ceil(el->coordmax[major]);
+ el->cnt = el->high-el->low+1;
+ el->ordered = calloc(el->cnt,sizeof(EI *));
+ el->ends = calloc(el->cnt,1);
+
+ for ( ei = el->edges; ei!=NULL ; ei=ei->next ) {
+ pos = ceil(ei->coordmax[major])-el->low;
+ el->ends[pos] = true;
+ pos = floor(ei->coordmin[major])-el->low;
+ ei->ocur = (ei->hup == ei->vup)?ei->coordmin[other]:ei->coordmax[other];
+ ei->tcur = ((major && ei->vup) || (!major && ei->hup)) ?
+ ei->tmin: ei->tmax;
+ if ( major ) {
+ ei->up = ei->vup;
+ ei->hv = (ei->vert || ei->almostvert);
+ ei->hvbottom = ei->vup ? ei->vertattmin : ei->vertattmax;
+ ei->hvtop =!ei->vup ? ei->vertattmin : ei->vertattmax;
+ if ( ei->hor || ei->almosthor)
+ continue;
+ } else {
+ ei->up = ei->hup;
+ ei->hv = (ei->hor || ei->almosthor);
+ ei->hvbottom = ei->hup ? ei->horattmin : ei->horattmax;
+ ei->hvtop =!ei->hup ? ei->horattmin : ei->horattmax;
+ if ( ei->vert || ei->almostvert)
+ continue;
+ }
+ if ( el->ordered[pos]==NULL || ei->ocur<el->ordered[pos]->ocur ) {
+ ei->ordered = el->ordered[pos];
+ el->ordered[pos] = ei;
+ } else {
+ for ( prev=el->ordered[pos], test = prev->ordered; test!=NULL;
+ prev = test, test = test->ordered ) {
+ if ( test->ocur>ei->ocur ||
+ (test->ocur==ei->ocur && IsBiggerSlope(test,ei,major)))
+ break;
+ }
+ ei->ordered = test;
+ prev->ordered = ei;
+ }
+ }
+}
+
+static HintInstance *HIMerge(HintInstance *into, HintInstance *hi) {
+ HintInstance *n, *first = NULL, *last = NULL;
+
+ while ( into!=NULL && hi!=NULL ) {
+ if ( into->begin<hi->begin ) {
+ n = into;
+ into = into->next;
+ } else {
+ n = hi;
+ hi = hi->next;
+ }
+ if ( first==NULL )
+ first = n;
+ else
+ last->next = n;
+ last = n;
+ }
+ if ( into!=NULL ) {
+ if ( first==NULL )
+ first = into;
+ else
+ last->next = into;
+ } else if ( hi!=NULL ) {
+ if ( first==NULL )
+ first = hi;
+ else
+ last->next = hi;
+ }
+return( first );
+}
+
+real EITOfNextMajor(EI *e, EIList *el, real sought_m ) {
+ /* We want to find t so that Mspline(t) = sought_m */
+ /* the curve is monotonic */
+ Spline1D *msp = &e->spline->splines[el->major];
+ real new_t;
+ real found_m;
+ real t_mmax, t_mmin;
+
+ if ( msp->a==0 && msp->b==0 ) {
+ if ( msp->c == 0 ) {
+ IError("Hor/Vert line when not expected");
+return( 0 );
+ }
+ new_t = (sought_m-msp->d)/(msp->c);
+return( new_t );
+ }
+
+ t_mmax = e->up?e->tmax:e->tmin;
+ t_mmin = e->up?e->tmin:e->tmax;
+ /* sought_m += el->low; */
+
+ while ( 1 ) {
+ new_t = (t_mmin+t_mmax)/2;
+ found_m = ( ((msp->a*new_t+msp->b)*new_t+msp->c)*new_t + msp->d );
+ if ( found_m>sought_m-.001 && found_m<sought_m+.001 )
+return( new_t );
+ if ( found_m > sought_m ) {
+ t_mmax = new_t;
+ } else {
+ t_mmin = new_t;
+ }
+ if ( t_mmax==t_mmin ) {
+ IError("EITOfNextMajor failed! on %s", el->sc!=NULL?el->sc->name:"Unknown" );
+return( new_t );
+ }
+ }
+}
+
+EI *EIActiveListReorder(EI *active,int *change) {
+ int any;
+ EI *pr, *apt;
+
+ *change = false;
+ if ( active!=NULL ) {
+ any = true;
+ while ( any ) {
+ any = false;
+ for ( pr=NULL, apt=active; apt->aenext!=NULL; ) {
+ if ( apt->ocur <= apt->aenext->ocur ) {
+ /* still ordered */;
+ pr = apt;
+ apt = apt->aenext;
+ } else if ( pr==NULL ) {
+ active = apt->aenext;
+ apt->aenext = apt->aenext->aenext;
+ active->aenext = apt;
+ *change = true;
+ /* don't need to set any, since this reorder can't disorder the list */
+ pr = active;
+ } else {
+ pr->aenext = apt->aenext;
+ apt->aenext = apt->aenext->aenext;
+ pr->aenext->aenext = apt;
+ any = *change = true;
+ pr = pr->aenext;
+ }
+ }
+ }
+ }
+return( active );
+}
+
+EI *EIActiveEdgesRefigure(EIList *el, EI *active,real i,int major, int *_change) {
+ EI *apt, *pr, *npt;
+ int change = false, subchange;
+ int other = !major;
+
+ /* first remove any entry which doesn't intersect the new scan line */
+ /* (ie. stopped on last line) */
+ for ( pr=NULL, apt=active; apt!=NULL; apt = apt->aenext ) {
+ if ( apt->coordmax[major]<i+el->low ) {
+ if ( pr==NULL )
+ active = apt->aenext;
+ else
+ pr->aenext = apt->aenext;
+ change = true;
+ } else
+ pr = apt;
+ }
+ /* then move the active list to the next line */
+ for ( apt=active; apt!=NULL; apt = apt->aenext ) {
+ Spline1D *osp = &apt->spline->splines[other];
+ apt->tcur = EITOfNextMajor(apt,el,i+el->low);
+ apt->ocur = ( ((osp->a*apt->tcur+osp->b)*apt->tcur+osp->c)*apt->tcur + osp->d );
+ }
+ /* reorder list */
+ active = EIActiveListReorder(active,&subchange);
+ if ( subchange ) change = true;
+
+ /* Insert new nodes */
+ if ( el->ordered[(int) i]!=NULL ) change = true;
+ for ( pr=NULL, apt=active, npt=el->ordered[(int) i]; apt!=NULL && npt!=NULL; ) {
+ if ( npt->ocur<apt->ocur ) {
+ npt->aenext = apt;
+ if ( pr==NULL )
+ active = npt;
+ else
+ pr->aenext = npt;
+ pr = npt;
+ npt = npt->ordered;
+ } else {
+ pr = apt;
+ apt = apt->aenext;
+ }
+ }
+ while ( npt!=NULL ) {
+ npt->aenext = NULL;
+ if ( pr==NULL )
+ active = npt;
+ else
+ pr->aenext = npt;
+ pr = npt;
+ npt = npt->ordered;
+ }
+ *_change = change;
+return( active );
+}
+
+/* Should I consider e and n to be a continuation of the same spline? */
+/* If we are at an intersection (and it's the same intersection on both) */
+/* and they go in vaguely the same direction then we should */
+/* Ah, but also if they are at different intersections and are connected */
+/* by a series of horizontal/vertical lines (whichever are invisible to major)*/
+/* then we still should. */
+int EISameLine(EI *e, EI *n, real i, int major) {
+ EI *t;
+
+ if ( n!=NULL && /*n->up==e->up &&*/
+ (ceil(e->coordmin[major])==i || floor(e->coordmin[major])==i || floor(e->coordmax[major])==i || ceil(e->coordmax[major])==i) &&
+ (ceil(n->coordmin[major])==i || floor(n->coordmin[major])==i || floor(n->coordmax[major])==i || ceil(n->coordmax[major])==i) ) {
+ if (
+ (n==e->splinenext && n->tmin==e->tmax &&
+ n->tcur<n->tmin+.2 && e->tcur>e->tmax-.2 ) ||
+ (n->splinenext==e && n->tmax==e->tmin &&
+ n->tcur>n->tmax-.2 && e->tcur<e->tmin+.2 ) )
+return( true );
+ /* can be separated by a horizontal/vertical line in the other direction */
+ if ( n->tmax==1 && e->tmin==0 && n->tcur>.8 && e->tcur<.2) {
+ t = n;
+ while ( (t = t->splinenext)!=e ) {
+ if ( t==NULL || t==n ||
+ (major && !t->hor) || ( !major && !t->vert ))
+return( false );
+ }
+return( n->up==e->up );
+ } else if ( n->tmin==0 && e->tmax==1 && n->tcur<.2 && e->tcur>.8) {
+ t = e;
+ while ( (t = t->splinenext)!=n ) {
+ if ( t==NULL || t==e ||
+ (major && !t->hor) || ( !major && !t->vert ))
+return( false );
+ }
+return( n->up==e->up );
+ }
+ }
+return( false );
+}
+
+int EISkipExtremum(EI *e, real i, int major) {
+ EI *n = e->aenext, *t;
+
+ if ( n==NULL )
+return( false );
+ if (
+ (ceil(e->coordmin[major])==i || floor(e->coordmin[major])==i || floor(e->coordmax[major])==i || ceil(e->coordmax[major])==i) &&
+ (ceil(n->coordmin[major])==i || floor(n->coordmin[major])==i || floor(n->coordmax[major])==i || ceil(n->coordmax[major])==i) ) {
+ if (
+ (n==e->splinenext && n->tmin==e->tmax &&
+ n->tcur<n->tmin+.2 && e->tcur>e->tmax-.2 ) ||
+ (n->splinenext==e && n->tmax==e->tmin &&
+ n->tcur>n->tmax-.2 && e->tcur<e->tmin+.2 ) )
+return( n->up!=e->up );
+ /* can be separated by a horizontal/vertical line in the other direction */
+ if ( n->tmax==1 && e->tmin==0 && n->tcur>.8 && e->tcur<.2) {
+ t = n;
+ while ( (t = t->splinenext)!=e ) {
+ if ( t==NULL || t==n ||
+ (major && !t->hor) || ( !major && !t->vert ))
+return( false );
+ }
+return( n->up!=e->up );
+ } else if ( n->tmin==0 && e->tmax==1 && n->tcur<.2 && e->tcur>.8) {
+ t = e;
+ while ( (t = t->splinenext)!=n ) {
+ if ( t==NULL || t==e ||
+ (major && !t->hor) || ( !major && !t->vert ))
+return( false );
+ }
+return( n->up!=e->up );
+ }
+ }
+return( false );
+}
+
+static StemInfo *StemRemoveFlexCandidates(StemInfo *stems) {
+ StemInfo *s, *t, *sn;
+ const real BlueShift = 7;
+ /* Suppose we have something that is a flex candidate */
+ /* We might get two hints from it... one from the two end points */
+ /* and one from the internal point */
+
+ if ( stems==NULL )
+return( NULL );
+
+ for ( s=stems; (sn = s->next)!=NULL; s = sn ) {
+ if ( s->start+BlueShift > sn->start && s->width>0 && sn->width>0 &&
+ s->start+s->width-BlueShift < sn->start+sn->width &&
+ s->start+s->width+BlueShift > sn->start+sn->width &&
+ s->where != NULL && sn->where != NULL &&
+ s->where->next!=NULL && sn->where->next==NULL ) {
+ t = sn->next;
+ sn->next = NULL;
+ StemInfoFree(sn);
+ s->next = t;
+ sn = t;
+ if ( t==NULL )
+ break;
+ }
+ }
+return( stems );
+}
+
+real HIlen( StemInfo *stems) {
+ HintInstance *hi;
+ real len = 0;
+
+ for ( hi=stems->where; hi!=NULL; hi = hi->next )
+ len += hi->end-hi->begin;
+return( len );
+}
+
+real HIoverlap( HintInstance *mhi, HintInstance *thi) {
+ HintInstance *hi;
+ real len = 0;
+ real s, e;
+
+ for ( ; mhi!=NULL; mhi = mhi->next ) {
+ for ( hi = thi; hi!=NULL && hi->begin<=mhi->end; hi = hi->next ) {
+ if ( hi->end<mhi->begin ) {
+ thi = hi;
+ continue;
+ }
+ s = hi->begin<mhi->begin?mhi->begin:hi->begin;
+ e = hi->end>mhi->end?mhi->end:hi->end;
+ if ( e<s )
+ continue; /* Shouldn't happen */
+ len += e-s;
+ }
+ }
+return( len );
+}
+
+int StemListAnyConflicts(StemInfo *stems) {
+ StemInfo *s;
+ int any= false;
+ double end;
+
+ for ( s=stems; s!=NULL ; s=s->next )
+ s->hasconflicts = false;
+ while ( stems!=NULL ) {
+ end = stems->width<0 ? stems->start : stems->start+stems->width;
+ for ( s=stems->next; s!=NULL && (s->width>0 ? s->start : s->start+s->width)<=end; s=s->next ) {
+ stems->hasconflicts = true;
+ s->hasconflicts = true;
+ any = true;
+ }
+ stems = stems->next;
+ }
+return( any );
+}
+
+HintInstance *HICopyTrans(HintInstance *hi, real mul, real offset) {
+ HintInstance *first=NULL, *last, *cur, *p;
+
+ while ( hi!=NULL ) {
+ cur = chunkalloc(sizeof(HintInstance));
+ if ( mul>0 ) {
+ cur->begin = hi->begin*mul+offset;
+ cur->end = hi->end*mul+offset;
+ if ( first==NULL )
+ first = cur;
+ else
+ last->next = cur;
+ last = cur;
+ } else {
+ cur->begin = hi->end*mul+offset;
+ cur->end = hi->begin*mul+offset;
+ if ( first==NULL || cur->begin<first->begin ) {
+ cur->next = first;
+ first = cur;
+ } else {
+ for ( p=first, last=p->next; last!=NULL && cur->begin>last->begin; last=last->next );
+ p->next = cur;
+ cur->next = last;
+ }
+ }
+ hi = hi->next;
+ }
+return( first );
+}
+
+static HintInstance *StemAddHIFromActive(struct stemdata *stem,int major) {
+ int i;
+ HintInstance *head = NULL, *cur, *t;
+ double mino, maxo;
+ double dir = ((real *) &stem->unit.x)[major]<0 ? -1 : 1;
+
+ for ( i=0; i<stem->activecnt; ++i ) {
+ mino = dir*stem->active[i].start + ((real *) &stem->left.x)[major];
+ maxo = dir*stem->active[i].end + ((real *) &stem->left.x)[major];
+ cur = chunkalloc(sizeof(HintInstance));
+ if ( dir>0 ) {
+ cur->begin = mino;
+ cur->end = maxo;
+ if ( head==NULL )
+ head = cur;
+ else
+ t->next = cur;
+ t = cur;
+ } else {
+ cur->begin = maxo;
+ cur->end = mino;
+ cur->next = head;
+ head = cur;
+ }
+ }
+return( head );
+}
+
+static HintInstance *DStemAddHIFromActive( struct stemdata *stem ) {
+ int i;
+ HintInstance *head = NULL, *cur, *t;
+
+ for ( i=0; i<stem->activecnt; ++i ) {
+ cur = chunkalloc( sizeof( HintInstance ));
+ cur->begin = stem->active[i].start;
+ cur->end = stem->active[i].end;
+ if ( head == NULL )
+ head = cur;
+ else
+ t->next = cur;
+ t = cur;
+ }
+return( head );
+}
+
+void SCGuessHintInstancesList( SplineChar *sc,int layer,StemInfo *hstem,StemInfo *vstem,DStemInfo *dstem,
+ int hvforce,int dforce ) {
+
+ struct glyphdata *gd;
+ struct stemdata *sd;
+ int i, cnt=0, hneeds_gd=false, vneeds_gd=false, dneeds_gd=false;
+ StemInfo *test;
+ DStemInfo *dtest;
+ double em_size = ( sc->parent != NULL ) ?
+ sc->parent->ascent + sc->parent->descent : 1000;
+
+ if ( hstem == NULL && vstem == NULL && dstem == NULL )
+return;
+ /* If all stems already have active zones assigned (actual for .sfd */
+ /* files), then there is no need to wast time generating glyph data for */
+ /* this glyph */
+ test = hstem;
+ while ( !hneeds_gd && test != NULL ) {
+ if ( test->where == NULL || hvforce ) hneeds_gd = true;
+ test = test->next;
+ }
+ test = vstem;
+ while ( !vneeds_gd && test != NULL ) {
+ if ( test->where == NULL || hvforce ) vneeds_gd = true;
+ test = test->next;
+ }
+ dtest = dstem;
+ while ( !dneeds_gd && dtest != NULL ) {
+ if ( dtest->where == NULL || dforce ) dneeds_gd = true;
+ dtest = dtest->next;
+ }
+ if ( !hneeds_gd && !vneeds_gd && !dneeds_gd )
+return;
+
+ gd = GlyphDataInit( sc,layer,em_size,!dneeds_gd );
+ if ( gd == NULL )
+return;
+
+ cnt = 0;
+ if ( hstem != NULL && hneeds_gd ) {
+ gd = StemInfoToStemData( gd,hstem,false );
+ for ( i=cnt; i<gd->stemcnt; i++ ) {
+ sd = &gd->stems[i];
+ if ( hstem == NULL )
+ break;
+ if ( hstem->where == NULL || hvforce )
+ hstem->where = StemAddHIFromActive( sd,false );
+ hstem = hstem->next;
+ }
+ }
+ cnt = gd->stemcnt;
+ if ( vstem != NULL && vneeds_gd ) {
+ gd = StemInfoToStemData( gd,vstem,true );
+ for ( i=cnt; i<gd->stemcnt; i++ ) {
+ sd = &gd->stems[i];
+ if ( vstem == NULL )
+ break;
+ if ( vstem->where == NULL || hvforce )
+ vstem->where = StemAddHIFromActive( sd,true );
+ vstem = vstem->next;
+ }
+ }
+ cnt = gd->stemcnt;
+ if ( dstem != NULL && dneeds_gd ) {
+ gd = DStemInfoToStemData( gd,dstem );
+ for ( i=cnt; i<gd->stemcnt; i++ ) {
+ sd = &gd->stems[i];
+ if ( dstem == NULL )
+ break;
+ dstem->left = sd->left; dstem->right = sd->right;
+ if ( dstem->where == NULL || dforce )
+ dstem->where = DStemAddHIFromActive( sd );
+ dstem = dstem->next;
+ }
+ }
+ GlyphDataFree( gd );
+return;
+}
+
+/* We have got (either from a file or user specified) a diagonal stem,
+ described by 4 base points (pairs of x and y coordinates). Some additional
+ tests are required before we can add this stem to the given glyph. */
+int MergeDStemInfo( SplineFont *sf,DStemInfo **ds,DStemInfo *test ) {
+ DStemInfo *dn, *cur, *prev, *next, *temp;
+ double dot, loff, roff, soff, dist_error_diag ;
+ double ibegin, iend;
+ int overlap;
+ BasePoint *base, *nbase, *pbase;
+ HintInstance *hi;
+
+ if ( *ds == NULL ) {
+ *ds = test;
+return( true );
+ }
+ dist_error_diag = ( sf->ascent + sf->descent ) * 0.0065;
+
+ cur = prev = NULL;
+ for ( dn=*ds ; dn!=NULL ; dn=dn->next ) {
+ prev = cur; cur = dn;
+
+ /* Compare the given stem with each of the existing diagonal stem
+ * hints. First ensure that it is not an exact duplicate of an already
+ * added stem. Then test if unit vectors are parallel and edges colinear.
+ * In this case we should either preserve the existing stem or replace
+ * it with the new one, but not keep them both */
+ if (test->unit.x == dn->unit.x && test->unit.y == dn->unit.y &&
+ test->left.x == dn->left.x && test->left.y == dn->left.y &&
+ test->right.x == dn->right.x && test->right.y == dn->right.y ) {
+ DStemInfoFree( test );
+return( false );
+ }
+ dot = ( test->unit.x * dn->unit.y ) -
+ ( test->unit.y * dn->unit.x );
+ if ( dot <= -0.5 || dot >= 0.5 )
+ continue;
+
+ loff = ( test->left.x - dn->left.x ) * dn->unit.y -
+ ( test->left.y - dn->left.y ) * dn->unit.x;
+ roff = ( test->right.x - dn->right.x ) * dn->unit.y -
+ ( test->right.y - dn->right.y ) * dn->unit.x;
+ if (loff <= -dist_error_diag || loff >= dist_error_diag ||
+ roff <= -dist_error_diag || roff >= dist_error_diag )
+ continue;
+ soff = ( test->left.x - dn->left.x ) * dn->unit.x +
+ ( test->left.y - dn->left.y ) * dn->unit.y;
+ overlap = false;
+ if ( dn->where != NULL && test->where != NULL && test->where->next == NULL ) {
+ ibegin = test->where->begin + soff;
+ iend = test->where->end + soff;
+ for ( hi = dn->where; hi != NULL; hi = hi->next ) {
+ if (( hi->begin <= ibegin && ibegin <= hi->end ) ||
+ ( hi->begin <= iend && iend <= hi->end ) ||
+ ( ibegin <= hi->begin && hi->end <= iend )) {
+ overlap = true;
+ break;
+ }
+ }
+ } else
+ overlap = true;
+ /* It's probably a colinear dstem, as in older SFD files. Treat */
+ /* it as one more instance for the already added stem */
+ if ( !overlap ) {
+ for ( hi=dn->where; hi->next != NULL; hi = hi->next ) ;
+ hi->next = chunkalloc( sizeof( HintInstance ));
+ hi->next->begin = ibegin; hi->next->end = iend;
+ DStemInfoFree( test );
+return( false );
+ /* The found stem is close but not identical to the stem we */
+ /* are going to add. So just replace the older stem with the */
+ /* new one */
+ } else {
+ test->next = dn->next;
+ if ( prev == NULL )
+ *ds = test;
+ else
+ prev->next = test;
+ DStemInfoFree( dn );
+return( true );
+ }
+ }
+
+ /* Insert the given stem to the list by such a way that diagonal
+ * stems are ordered by the X coordinate of the left edge key point, and
+ * by Y if X is the same. The order is arbitrary, but may be essential for
+ * things like "W". So we should be sure that the autoinstructor will
+ * process diagonals from left to right. */
+ base = ( test->unit.y < 0 ) ? &test->right : &test->left;
+ nbase = ( (*ds)->unit.y < 0 ) ? &(*ds)->right : &(*ds)->left;
+
+ if ( base->x < nbase->x || ( base->x == nbase->x && base->y >= nbase->y )) {
+ temp = *ds; *ds = test;
+ (*ds)->next = temp;
+ } else {
+ for ( dn=*ds ; dn!=NULL && dn!=test ; dn=dn->next ) {
+ next = dn->next;
+ pbase = ( dn->unit.y < 0 ) ? &dn->right : &dn->left;
+ if ( next != NULL )
+ nbase = ( next->unit.y < 0 ) ? &next->right : &next->left;
+
+ if (( pbase->x < base->x ||
+ ( pbase->x == base->x && pbase->y >= base->y )) &&
+ ( next == NULL || base->x < nbase->x ||
+ ( base->x == nbase->x && base->y >= nbase->y ))) {
+
+ test->next = next; dn->next = test;
+ break;
+ }
+
+ }
+ }
+return( true );
+}
+
+static StemInfo *RefHintsMerge(StemInfo *into, StemInfo *rh, real mul, real offset,
+ real omul, real oofset) {
+ StemInfo *prev, *h, *n;
+ real start, width;
+
+ for ( ; rh!=NULL; rh=rh->next ) {
+ start = rh->start*mul + offset;
+ width = rh->width *mul;
+ if ( width<0 ) {
+ start += width; width = -width;
+ }
+ for ( h=into, prev=NULL; h!=NULL && (start>h->start || (start==h->start && width>h->width)); prev=h, h=h->next );
+ if ( h==NULL || start!=h->start || width!=h->width ) {
+ n = chunkalloc(sizeof(StemInfo));
+ n->start = start; n->width = width;
+ n->ghost = rh->ghost;
+ n->next = h;
+ if ( prev==NULL )
+ into = n;
+ else
+ prev->next = n;
+ n->where = HICopyTrans(rh->where,omul,oofset);
+ } else
+ h->where = HIMerge(h->where,HICopyTrans(rh->where,omul,oofset));
+ }
+return( into );
+}
+
+static DStemInfo *RefDHintsMerge( SplineFont *sf,DStemInfo *into,DStemInfo *rh,
+ real xmul,real xoffset,real ymul,real yoffset ) {
+ DStemInfo *new;
+ double dmul;
+
+ for ( ; rh!=NULL; rh=rh->next ) {
+ new = chunkalloc( sizeof( DStemInfo ));
+ *new = *rh;
+ new->left.x = xmul*new->left.x + xoffset;
+ new->right.x = xmul*new->right.x + xoffset;
+ new->left.y = ymul*new->left.y + yoffset;
+ new->right.y = ymul*new->right.y + yoffset;
+ new->next = NULL;
+ if (( xmul < 0 && ymul > 0 ) || ( xmul > 0 && ymul < 0 ))
+ new->unit.y = -new->unit.y;
+ new->unit.x *= fabs( xmul ); new->unit.y *= fabs( ymul );
+ dmul = sqrt( pow( new->unit.x,2 ) + pow( new->unit.y,2 ));
+ new->unit.x /= dmul; new->unit.y /= dmul;
+ if ( xmul < 0 ) dmul = -dmul;
+ new->where = HICopyTrans( rh->where,dmul,0 );
+
+ MergeDStemInfo( sf,&into,new );
+ }
+return( into );
+}
+
+static void __SplineCharAutoHint( SplineChar *sc, int layer, BlueData *bd, int gen_undoes );
+
+static void AutoHintRefs(SplineChar *sc,int layer, BlueData *bd, int picky, int gen_undoes) {
+ RefChar *ref;
+
+ /* Add hints for base characters before accent hints => if there are any */
+ /* conflicts, the base characters win */
+ for ( ref=sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->transform[1]==0 && ref->transform[2]==0 ) {
+ if ( picky ) {
+ if ( !ref->sc->manualhints && ref->sc->changedsincelasthinted &&
+ (ref->sc->layers[layer].refs!=NULL &&
+ ref->sc->layers[layer].splines==NULL))
+ AutoHintRefs(ref->sc,layer,bd,true,gen_undoes);
+ } else if ( !ref->sc->manualhints && ref->sc->changedsincelasthinted )
+ __SplineCharAutoHint(ref->sc,layer,bd,gen_undoes);
+ if ( ref->sc->unicodeenc!=-1 && ref->sc->unicodeenc<0x10000 &&
+ isalnum(ref->sc->unicodeenc) ) {
+ sc->hstem = RefHintsMerge(sc->hstem,ref->sc->hstem,ref->transform[3], ref->transform[5], ref->transform[0], ref->transform[4]);
+ sc->vstem = RefHintsMerge(sc->vstem,ref->sc->vstem,ref->transform[0], ref->transform[4], ref->transform[3], ref->transform[5]);
+ sc->dstem = RefDHintsMerge(sc->parent,sc->dstem,ref->sc->dstem,ref->transform[0], ref->transform[4], ref->transform[3], ref->transform[5]);
+ }
+ }
+ }
+
+ for ( ref=sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->transform[1]==0 && ref->transform[2]==0 &&
+ (ref->sc->unicodeenc==-1 || ref->sc->unicodeenc>=0x10000 ||
+ !isalnum(ref->sc->unicodeenc)) ) {
+ sc->hstem = RefHintsMerge(sc->hstem,ref->sc->hstem,ref->transform[3], ref->transform[5], ref->transform[0], ref->transform[4]);
+ sc->vstem = RefHintsMerge(sc->vstem,ref->sc->vstem,ref->transform[0], ref->transform[4], ref->transform[3], ref->transform[5]);
+ sc->dstem = RefDHintsMerge(sc->parent,sc->dstem,ref->sc->dstem,ref->transform[0], ref->transform[4], ref->transform[3], ref->transform[5]);
+ }
+ }
+
+ sc->vconflicts = StemListAnyConflicts(sc->vstem);
+ sc->hconflicts = StemListAnyConflicts(sc->hstem);
+}
+
+static void _SCClearHintMasks(SplineChar *sc,int layer, int counterstoo) {
+ SplineSet *spl;
+ SplinePoint *sp;
+ RefChar *ref;
+
+ if ( layer<0 || layer>=sc->layer_cnt )
+ return;
+
+ if ( counterstoo ) {
+ free(sc->countermasks);
+ sc->countermasks = NULL; sc->countermask_cnt = 0;
+ }
+
+ for ( spl = sc->layers[layer].splines; spl!=NULL; spl=spl->next ) {
+ for ( sp = spl->first ; ; ) {
+ chunkfree(sp->hintmask,sizeof(HintMask));
+ sp->hintmask = NULL;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==spl->first )
+ break;
+ }
+ }
+
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ for ( spl = ref->layers[0].splines; spl!=NULL; spl=spl->next ) {
+ for ( sp = spl->first ; ; ) {
+ chunkfree(sp->hintmask,sizeof(HintMask));
+ sp->hintmask = NULL;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==spl->first )
+ break;
+ }
+ }
+ }
+}
+
+static void SCFigureSimpleCounterMasks(SplineChar *sc) {
+ SplineChar *scs[MmMax];
+ int hadh3, hadv3, i, vbase;
+ HintMask mask;
+ StemInfo *h;
+
+ if ( sc->countermask_cnt!=0 )
+return;
+
+ scs[0] = sc;
+ hadh3 = CvtPsStem3(NULL,scs,1,true,false);
+ hadv3 = CvtPsStem3(NULL,scs,1,false,false);
+ if ( hadh3 || hadv3 ) {
+ memset(mask,0,sizeof(mask));
+ if ( hadh3 ) mask[0] = 0x80|0x40|0x20;
+ if ( hadv3 ) {
+ for ( h=sc->hstem, vbase=0; h!=NULL; h=h->next, ++vbase );
+ for ( i=0; i<3 ; ++i ) {
+ int j = i+vbase;
+ mask[j>>3] |= (0x80>>(j&7));
+ }
+ }
+ sc->countermask_cnt = 1;
+ sc->countermasks = malloc(sizeof(HintMask));
+ memcpy(sc->countermasks[0],mask,sizeof(HintMask));
+return;
+ }
+}
+
+void SCClearHintMasks(SplineChar *sc,int layer,int counterstoo) {
+ MMSet *mm = sc->parent->mm;
+ int i;
+
+ if ( mm==NULL )
+ _SCClearHintMasks(sc,layer,counterstoo);
+ else {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( sc->orig_pos<mm->instances[i]->glyphcnt )
+ _SCClearHintMasks(mm->instances[i]->glyphs[sc->orig_pos],layer,counterstoo);
+ }
+ if ( sc->orig_pos<mm->normal->glyphcnt )
+ _SCClearHintMasks(mm->normal->glyphs[sc->orig_pos],layer,counterstoo);
+ }
+}
+
+static StemInfo *OnHHint(SplinePoint *sp, StemInfo *s) {
+ StemInfo *possible=NULL;
+ HintInstance *hi;
+
+ if ( sp==NULL )
+return( NULL );
+
+ for ( ; s!=NULL; s=s->next ) {
+ if ( sp->me.y<s->start )
+return( possible );
+ if ( s->start==sp->me.y || s->start+s->width==sp->me.y ) {
+ if ( !s->hasconflicts )
+return( s );
+ for ( hi=s->where; hi!=NULL; hi=hi->next ) {
+ if ( hi->begin<=sp->me.x && hi->end>=sp->me.x )
+return( s );
+ }
+ if ( !s->used )
+ possible = s;
+ }
+ }
+return( possible );
+}
+
+static StemInfo *OnVHint(SplinePoint *sp, StemInfo *s) {
+ StemInfo *possible=NULL;
+ HintInstance *hi;
+
+ if ( sp==NULL )
+return( NULL );
+
+ for ( ; s!=NULL; s=s->next ) {
+ if ( sp->me.x<s->start )
+return( possible );
+ if ( s->start==sp->me.x || s->start+s->width==sp->me.x ) {
+ if ( !s->hasconflicts )
+return( s );
+ for ( hi=s->where; hi!=NULL; hi=hi->next ) {
+ if ( hi->begin<=sp->me.y && hi->end>=sp->me.y )
+return( s );
+ }
+ if ( !s->used )
+ possible = s;
+ }
+ }
+return( possible );
+}
+
+/* Does h have a conflict with any of the stems in the list which have bits */
+/* set in the mask */
+static int ConflictsWithMask(StemInfo *stems, HintMask mask,StemInfo *h) {
+ while ( stems!=NULL && stems->start<=h->start+h->width ) {
+ if ( stems->start+stems->width>=h->start && stems!=h ) {
+ if ( stems->hintnumber!=-1 &&
+ (mask[stems->hintnumber>>3]&(0x80>>(stems->hintnumber&7))) )
+return( true );
+ }
+ stems = stems->next;
+ }
+return( false );
+}
+
+/* All instances of a MM set must have the same hint mask at all points */
+static void FigureHintMask(SplineChar *scs[MmMax], SplinePoint *to[MmMax], int instance_count,
+ HintMask mask) {
+ StemInfo *s;
+ int i;
+ SplinePoint *sp;
+
+ memset(mask,'\0',sizeof(HintMask));
+
+ /* Install all hints that are always active */
+ i=0; {
+ SplineChar *sc = scs[i];
+
+ if ( sc==NULL )
+return;
+
+ for ( s=sc->hstem; s!=NULL; s=s->next )
+ if ( s->hintnumber!=-1 && !s->hasconflicts )
+ mask[s->hintnumber>>3] |= (0x80>>(s->hintnumber&7));
+ for ( s=sc->vstem; s!=NULL; s=s->next )
+ if ( s->hintnumber!=-1 && !s->hasconflicts )
+ mask[s->hintnumber>>3] |= (0x80>>(s->hintnumber&7));
+
+ if ( sc->hconflicts ) {
+ for ( sp=to[i]; sp!=NULL; ) {
+ s = OnHHint(sp,sc->hstem);
+ if ( s!=NULL && s->hintnumber!=-1 ) {
+ if ( ConflictsWithMask(scs[i]->hstem,mask,s))
+ break;
+ mask[s->hintnumber>>3] |= (0x80>>(s->hintnumber&7));
+ }
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( to[i]==sp )
+ break;
+ }
+ }
+ if ( sc->vconflicts ) {
+ for ( sp=to[i]; sp!=NULL; ) {
+ s = OnVHint(sp,sc->vstem);
+ if ( s!=NULL && s->hintnumber!=-1 ) {
+ if ( ConflictsWithMask(scs[i]->vstem,mask,s))
+ break;
+ mask[s->hintnumber>>3] |= (0x80>>(s->hintnumber&7));
+ }
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( to[i]==sp )
+ break;
+ }
+ }
+ }
+ for ( i=0; i<instance_count; ++i ) if ( to[i]!=NULL ) {
+ chunkfree(to[i]->hintmask,sizeof(HintMask));
+ to[i]->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(to[i]->hintmask,mask,sizeof(HintMask));
+ }
+}
+
+static int TestHintMask(SplineChar *scs[MmMax], SplinePoint *to[MmMax], int instance_count,
+ HintMask mask) {
+ StemInfo *h=NULL, *v=NULL;
+ int i;
+
+ for ( i=0; i<instance_count; ++i ) {
+ SplineChar *sc = scs[i];
+
+ if ( sc==NULL || (!sc->hconflicts && !sc->vconflicts ))
+ continue;
+
+ /* Does this point lie on any hints? */
+ if ( scs[i]->hconflicts )
+ h = OnHHint(to[i],sc->hstem);
+ if ( scs[i]->vconflicts )
+ v = OnVHint(to[i],sc->vstem);
+
+ /* Need to set this hint */
+ if ( (h!=NULL && h->hintnumber!=-1 && (mask[h->hintnumber>>3]&(0x80>>(h->hintnumber&7)))==0 ) ||
+ (v!=NULL && v->hintnumber!=-1 && (mask[v->hintnumber>>3]&(0x80>>(v->hintnumber&7)))==0 ))
+ break;
+ }
+ if ( i==instance_count ) /* All hint masks were ok */
+return( false );
+
+ FigureHintMask(scs,to,instance_count,mask);
+return( true );
+}
+
+static void UnnumberHints(SplineChar *sc) {
+ StemInfo *h;
+
+ for ( h=sc->hstem; h!=NULL; h=h->next )
+ h->hintnumber = -1;
+ for ( h=sc->vstem; h!=NULL; h=h->next )
+ h->hintnumber = -1;
+}
+
+static int NumberHints(SplineChar *sc) {
+ StemInfo *h;
+ int hcnt=0;
+
+ for ( h=sc->hstem; h!=NULL; h=h->next )
+ h->hintnumber = hcnt>=HntMax ? -1 : hcnt++;
+ for ( h=sc->vstem; h!=NULL; h=h->next )
+ h->hintnumber = hcnt>=HntMax ? -1 : hcnt++;
+return( hcnt );
+}
+
+static void UntickHints(SplineChar *sc) {
+ StemInfo *h;
+
+ for ( h=sc->hstem; h!=NULL; h=h->next )
+ h->used = false;
+ for ( h=sc->vstem; h!=NULL; h=h->next )
+ h->used = false;
+}
+
+struct coords {
+ real coords[MmMax];
+ struct coords *next;
+};
+
+typedef struct mmh {
+ StemInfo *hints[MmMax], *map[MmMax];
+ struct coords *where;
+ struct mmh *next;
+} MMH;
+
+static void AddCoord(MMH *mmh,SplinePoint *sps[MmMax],int instance_count, int ish) {
+ struct coords *coords;
+ int i;
+
+ coords = chunkalloc(sizeof(struct coords));
+ coords->next = mmh->where;
+ mmh->where = coords;
+ if ( ish )
+ for ( i=0; i<instance_count; ++i )
+ coords->coords[i] = sps[i]->me.x;
+ else
+ for ( i=0; i<instance_count; ++i )
+ coords->coords[i] = sps[i]->me.y;
+}
+
+static MMH *AddHintSet(MMH *hints,StemInfo *h[MmMax], int instance_count,
+ SplinePoint *sps[MmMax], int ish) {
+ int i, cnt, bestc;
+ MMH *test, *best;
+
+ for ( i=0; i<instance_count; ++i )
+ if ( h[i]==NULL )
+return( hints );
+
+ best = NULL; bestc = 0;
+ for ( test=hints; test!=NULL; test=test->next ) {
+ cnt = 0;
+ for ( i=0; i<instance_count; ++i )
+ if ( test->hints[i]==h[i] )
+ ++cnt;
+ if ( cnt==instance_count ) {
+ AddCoord(test,sps,instance_count,ish);
+return( hints );
+ }
+ if ( cnt>bestc ) {
+ bestc = cnt;
+ best = test;
+ }
+ }
+ test = chunkalloc(sizeof(MMH));
+ test->next = hints;
+ AddCoord(test,sps,instance_count,ish);
+ for ( i=0; i<instance_count; ++i )
+ test->hints[i]=h[i];
+ if ( bestc!=0 ) {
+ for ( i=0; i<instance_count; ++i ) {
+ if ( best->hints[i]==h[i] ) {
+ h[i]->hasconflicts = true;
+ test->map[i] = chunkalloc(sizeof(StemInfo));
+ *test->map[i] = *h[i];
+ test->map[i]->where = NULL;
+ test->map[i]->used = true;
+ h[i]->next = test->map[i];
+ } else
+ test->map[i] = h[i];
+ }
+ } else {
+ for ( i=0; i<instance_count; ++i )
+ test->map[i]=h[i];
+ }
+return( test );
+}
+
+static int CompareMMH(MMH *mmh1,MMH *mmh2, int instance_count) {
+ int i;
+
+ if ( mmh1->map[0]==NULL )
+return( 1 );
+ if ( mmh2->map[0]==NULL )
+return( -1 );
+
+ for ( i=0; i<instance_count; ++i ) {
+ if ( mmh1->map[i]->start!=mmh2->map[i]->start ) {
+ if ( mmh1->map[i]->start > mmh2->map[i]->start )
+return( 1 );
+ else
+return( -1 );
+ }
+ }
+ for ( i=0; i<instance_count; ++i ) {
+ if ( mmh1->map[i]->width!=mmh2->map[i]->width ) {
+ if ( mmh1->map[i]->width > mmh2->map[i]->width )
+return( 1 );
+ else
+return( -1 );
+ }
+ }
+return( 0 );
+}
+
+static MMH *SortMMH(MMH *head,int instance_count) {
+ MMH *mmh, *p, *smallest, *psmallest, *test, *ptest;
+
+ for ( mmh = head, p=NULL; mmh!=NULL ; ) {
+ smallest = mmh; psmallest = p;
+ ptest = mmh; test = mmh->next;
+ while ( test!=NULL ) {
+ if ( CompareMMH(test,smallest,instance_count)<0 ) {
+ smallest = test;
+ psmallest = ptest;
+ }
+ ptest = test;
+ test = test->next;
+ }
+ if ( smallest!=mmh ) {
+ if ( p==NULL )
+ head = smallest;
+ else
+ p->next = smallest;
+ if ( mmh->next==smallest ) {
+ mmh->next = smallest->next;
+ smallest->next = mmh;
+ } else {
+ test = mmh->next;
+ mmh->next = smallest->next;
+ smallest->next = test;
+ psmallest->next = mmh;
+ }
+ }
+ p = smallest;
+ mmh = smallest->next;
+ }
+return( head );
+}
+
+static int NumberMMH(MMH *mmh,int hstart,int instance_count) {
+ int i;
+ HintInstance *hi, *n;
+ struct coords *coords;
+
+ while ( mmh!=NULL ) {
+ for ( i=0; i<instance_count; ++i ) {
+ StemInfo *h = mmh->map[i];
+ if ( h==NULL )
+ continue;
+
+ h->hintnumber = hstart;
+
+ for ( hi=h->where; hi!=NULL; hi=n ) {
+ n = hi->next;
+ chunkfree(hi,sizeof(HintInstance));
+ }
+ h->where = NULL;
+ for ( coords=mmh->where; coords!=NULL; coords = coords->next ) {
+ hi = chunkalloc(sizeof(HintInstance));
+ hi->next = h->where;
+ h->where = hi;
+ hi->begin = coords->coords[i]-1;
+ hi->end = coords->coords[i]+1;
+ }
+ }
+ if ( mmh->map[0]!=NULL ) ++hstart;
+ mmh = mmh->next;
+ }
+return( hstart );
+}
+
+static void SortMMH2(SplineChar *scs[MmMax],MMH *mmh,int instance_count,int ish) {
+ int i;
+ StemInfo *h, *n;
+ MMH *m;
+
+ for ( i=0; i<instance_count; ++i ) {
+ for ( h= ish ? scs[i]->hstem : scs[i]->vstem; h!=NULL; h=n ) {
+ n = h->next;
+ if ( h->hintnumber==-1 )
+ StemInfoFree(h);
+ }
+ n = NULL;
+ for ( m = mmh ; m!=NULL; m=m->next ) {
+ h = m->map[i];
+ if ( n!=NULL )
+ n->next = h;
+ else if ( ish )
+ scs[i]->hstem = h;
+ else
+ scs[i]->vstem = h;
+ n = h;
+ }
+ if ( n!=NULL )
+ n->next = NULL;
+ else if ( ish )
+ scs[i]->hstem = NULL;
+ else
+ scs[i]->vstem = NULL;
+ }
+}
+
+static void MMHFreeList(MMH *mmh) {
+ MMH *mn;
+ struct coords *c, *n;
+
+ for ( ; mmh!=NULL; mmh = mn ) {
+ mn = mmh->next;
+ for ( c=mmh->where; c!=NULL; c=n ) {
+ n = c->next;
+ chunkfree(c,sizeof(struct coords));
+ }
+ chunkfree(mmh,sizeof(struct coords));
+ }
+}
+
+static void SplResolveSplitHints(SplineChar *scs[MmMax], SplineSet *spl[MmMax],
+ int instance_count, MMH **hs, MMH **vs) {
+ SplinePoint *to[MmMax];
+ StemInfo *h[MmMax], *v[MmMax];
+ int i, anymore;
+
+ for (;;) {
+ for ( i=0; i<instance_count; ++i ) {
+ if ( spl[i]!=NULL )
+ to[i] = spl[i]->first;
+ else
+ to[i] = NULL;
+ }
+ for (;;) {
+ for ( i=0; i<instance_count; ++i ) {
+ h[i] = OnHHint(to[i],scs[i]->hstem);
+ v[i] = OnVHint(to[i],scs[i]->vstem);
+ }
+ *hs = AddHintSet(*hs,h,instance_count,to,true);
+ *vs = AddHintSet(*vs,v,instance_count,to,false);
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) if ( to[i]!=NULL ) {
+ if ( to[i]->next==NULL ) to[i] = NULL;
+ else {
+ to[i] = to[i]->next->to;
+ if ( to[i]==spl[i]->first ) to[i] = NULL;
+ }
+ if ( to[i]!=NULL ) anymore = true;
+ }
+ if ( !anymore )
+ break;
+ }
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ if ( spl[i]!=NULL )
+ spl[i] = spl[i]->next;
+ if ( spl[i]!=NULL ) anymore = true;
+ }
+ if ( !anymore )
+ break;
+ }
+}
+
+static void ResolveSplitHints(SplineChar *scs[16],int layer,int instance_count) {
+ /* It is possible for a single hint in one mm instance to split into two */
+ /* in a different MM set. For example, we have two stems which happen */
+ /* to line up in one instance but which do not in another instance. */
+ /* It is even possible that there could be no instance with any conflicts */
+ /* but some of the intermediate forms might conflict. */
+ /* We can't deal (nor can postscript) with the case where hints change order*/
+ SplinePointList *spl[MmMax];
+ RefChar *ref[MmMax];
+ int i, hcnt, hmax=0, anymore;
+ MMH *hs=NULL, *vs=NULL;
+
+ for ( i=0; i<instance_count; ++i ) {
+ hcnt = NumberHints(scs[i]);
+ UntickHints(scs[i]);
+ if ( hcnt>hmax ) hmax = hcnt;
+ spl[i] = scs[i]->layers[layer].splines;
+ }
+ if ( hmax==0 )
+return;
+
+ SplResolveSplitHints(scs,spl,instance_count,&hs,&vs);
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ ref[i] = scs[i]->layers[layer].refs;
+ if ( ref[i]!=NULL ) anymore = true;
+ }
+ while ( anymore ) {
+ for ( i=0; i<instance_count; ++i )
+ spl[i] = ( ref[i]!=NULL ) ? ref[i]->layers[0].splines : NULL;
+ SplResolveSplitHints(scs,spl,instance_count,&hs,&vs);
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ if ( ref[i]!=NULL ) {
+ ref[i] = ref[i]->next;
+ if ( ref[i]!=NULL ) anymore = true;
+ }
+ }
+ }
+
+ for ( i=0; i<instance_count; ++i )
+ UnnumberHints(scs[i]);
+ hs = SortMMH(hs,instance_count);
+ vs = SortMMH(vs,instance_count);
+ hcnt = NumberMMH(hs,0,instance_count);
+ hcnt = NumberMMH(vs,hcnt,instance_count);
+ SortMMH2(scs,hs,instance_count,true);
+ SortMMH2(scs,vs,instance_count,false);
+ MMHFreeList(hs);
+ MMHFreeList(vs);
+}
+
+static int SplFigureHintMasks(SplineChar *scs[MmMax], SplineSet *spl[MmMax],
+ int instance_count, HintMask mask, int inited) {
+ SplinePoint *to[MmMax];
+ int i, anymore;
+
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ if ( spl[i]!=NULL ) {
+ SplineSetReverse(spl[i]);
+ to[i] = spl[i]->first;
+ anymore = true;
+ } else
+ to[i] = NULL;
+ }
+
+ /* Assign the initial hint mask */
+ if ( anymore && !inited ) {
+ FigureHintMask(scs,to,instance_count,mask);
+ inited = true;
+ }
+
+ for (;;) {
+ for ( i=0; i<instance_count; ++i ) {
+ if ( spl[i]!=NULL )
+ to[i] = spl[i]->first;
+ else
+ to[i] = NULL;
+ }
+ for (;;) {
+ TestHintMask(scs,to,instance_count,mask);
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) if ( to[i]!=NULL ) {
+ if ( to[i]->next==NULL ) to[i] = NULL;
+ else {
+ to[i] = to[i]->next->to;
+ if ( to[i]==spl[i]->first ) to[i] = NULL;
+ }
+ if ( to[i]!=NULL ) anymore = true;
+ }
+ if ( !anymore )
+ break;
+ }
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ if ( spl[i]!=NULL ) {
+ SplineSetReverse(spl[i]);
+ spl[i] = spl[i]->next;
+ }
+ if ( spl[i]!=NULL ) {
+ anymore = true;
+ SplineSetReverse(spl[i]);
+ }
+ }
+ if ( !anymore )
+ break;
+ }
+return( inited );
+}
+
+void SCFigureHintMasks(SplineChar *sc,int layer) {
+ SplineChar *scs[MmMax];
+ SplinePointList *spl[MmMax];
+ RefChar *ref[MmMax];
+ MMSet *mm = sc->parent->mm;
+ int i, instance_count, conflicts, anymore, inited;
+ HintMask mask;
+
+ if ( mm==NULL ) {
+ scs[0] = sc;
+ instance_count = 1;
+ SCClearHintMasks(sc,layer,false);
+ } else {
+ if ( mm->apple )
+return;
+ instance_count = mm->instance_count;
+ for ( i=0; i<instance_count; ++i )
+ if ( sc->orig_pos < mm->instances[i]->glyphcnt ) {
+ scs[i] = mm->instances[i]->glyphs[sc->orig_pos];
+ SCClearHintMasks(scs[i],layer,false);
+ }
+ ResolveSplitHints(scs,layer,instance_count);
+ }
+ conflicts = false;
+ for ( i=0; i<instance_count; ++i ) {
+ NumberHints(scs[i]);
+ if ( scs[i]->hconflicts || scs[i]->vconflicts )
+ conflicts = true;
+ }
+ if ( !conflicts && instance_count==1 ) { /* All hints always active */
+ SCFigureSimpleCounterMasks(sc);
+return; /* In an MM font we may still need to resolve things like different numbers of hints */
+ }
+
+ for ( i=0; i<instance_count; ++i ) {
+ spl[i] = scs[i]->layers[layer].splines;
+ ref[i] = scs[i]->layers[layer].refs;
+ }
+ inited = SplFigureHintMasks(scs,spl,instance_count,mask,false);
+ for (;;) {
+ for ( i=0; i<instance_count; ++i ) {
+ if ( ref[i]!=NULL )
+ spl[i] = ref[i]->layers[0].splines;
+ }
+ inited = SplFigureHintMasks(scs,spl,instance_count,mask,inited);
+ anymore = false;
+ for ( i=0; i<instance_count; ++i ) {
+ if ( ref[i]!=NULL ) {
+ ref[i] = ref[i]->next;
+ if ( ref[i]!=NULL ) anymore = true;
+ }
+ }
+ if ( !anymore )
+ break;
+ }
+ if ( instance_count==1 )
+ SCFigureSimpleCounterMasks(sc);
+}
+
+static StemInfo *GDFindStems(struct glyphdata *gd, int major) {
+ int i;
+ StemInfo *head = NULL, *cur, *p, *t;
+ StemBundle *bundle = major ? gd->vbundle : gd->hbundle;
+ StemData *stem;
+ int other = !major;
+ double l, r;
+
+ for ( i=0; i<bundle->cnt; ++i ) {
+ stem = bundle->stemlist[i];
+ l = (&stem->left.x)[other];
+ r = (&stem->right.x)[other];
+ cur = chunkalloc( sizeof( StemInfo ));
+ if ( l<r ) {
+ cur->start = l;
+ cur->width = r - l;
+ cur->haspointleft = stem->lpcnt > 0;
+ cur->haspointright = stem->rpcnt > 0;
+ } else {
+ cur->start = r;
+ cur->width = l - r;
+ cur->haspointleft = stem->rpcnt > 0;
+ cur->haspointright = stem->lpcnt > 0;
+ }
+ cur->ghost = stem->ghost;
+ for ( p=NULL, t=head; t!=NULL ; p=t, t=t->next ) {
+ if ( cur->start<=t->start )
+ break;
+ }
+ cur->next = t;
+ if ( p==NULL )
+ head = cur;
+ else
+ p->next = cur;
+ cur->where = StemAddHIFromActive(stem,major);
+ }
+ head = StemRemoveFlexCandidates(head);
+return( head );
+}
+
+static DStemInfo *GDFindDStems(struct glyphdata *gd) {
+ int i;
+ DStemInfo *head = NULL, *cur ;
+ struct stemdata *stem;
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ /* A real diagonal stem should consist of one or more continuous
+ * ranges. Thus the number of active zones should be less then the
+ * number of stem chunks (i. e. pairs of the opposite points). If
+ * each chunk has its own active zone, then we probably have got
+ * not a real stem, but rather two (or more) separate point pairs,
+ * which occasionally happened to have nearly the same vectors and
+ * to be positioned on the same lines */
+ if ( stem->toobig )
+ continue;
+
+ if (( stem->unit.y > -.05 && stem->unit.y < .05 ) ||
+ ( stem->unit.x > -.05 && stem->unit.x < .05 ))
+ continue;
+
+ if ( stem->lpcnt < 2 || stem->rpcnt < 2 )
+ continue;
+ cur = chunkalloc( sizeof(DStemInfo) );
+ cur->left = stem->left;
+ cur->right = stem->right;
+ cur->unit = stem->unit;
+ cur->where = DStemAddHIFromActive( stem );
+ MergeDStemInfo(gd->sf, &head, cur);
+ }
+return( head );
+}
+
+
+static bool inorder( real a, real b, real c )
+{
+ return a < b && b < c;
+}
+
+/**
+ * If fluffy is near enough to exact then clamp to exact.
+ * If fluffy is more than Tolerance away from exact then
+ * just return fluffy (no change).
+ */
+static real clampToIfNear( real exact, real fluffy, real Tolerance )
+{
+ if( inorder( exact - Tolerance, fluffy, exact + Tolerance ))
+ return exact;
+
+ return fluffy;
+}
+
+
+void _SplineCharAutoHint( SplineChar *sc, int layer, BlueData *bd, struct glyphdata *gd2,
+ int gen_undoes ) {
+ struct glyphdata *gd;
+
+ StemInfosFree(sc->vstem); sc->vstem=NULL;
+ StemInfosFree(sc->hstem); sc->hstem=NULL;
+ DStemInfosFree(sc->dstem); sc->dstem=NULL;
+ MinimumDistancesFree(sc->md); sc->md=NULL;
+
+ free(sc->countermasks);
+ sc->countermasks = NULL; sc->countermask_cnt = 0;
+ /* We'll free the hintmasks when we call SCFigureHintMasks */
+
+ sc->changedsincelasthinted = false;
+ sc->manualhints = false;
+
+ if ( (gd=gd2)==NULL )
+ gd = GlyphDataBuild( sc,layer,bd,false );
+ if ( gd!=NULL ) {
+
+ sc->vstem = GDFindStems(gd,1);
+ sc->hstem = GDFindStems(gd,0);
+
+ if ( !gd->only_hv )
+ sc->dstem = GDFindDStems(gd);
+ if ( gd2==NULL ) GlyphDataFree(gd);
+ }
+
+ real AutohintRoundingTolerance = 0.005;
+ StemInfo* s = sc->hstem;
+ for( ; s; s = s->next )
+ {
+ s->width = clampToIfNear( 20.0, s->width, AutohintRoundingTolerance );
+ s->width = clampToIfNear( 21.0, s->width, AutohintRoundingTolerance );
+ }
+
+ AutoHintRefs(sc,layer,bd,false,gen_undoes);
+}
+
+static void __SplineCharAutoHint( SplineChar *sc, int layer, BlueData *bd, int gen_undoes ) {
+ MMSet *mm = sc->parent->mm;
+ int i;
+
+ if ( mm==NULL )
+ _SplineCharAutoHint(sc,layer,bd,NULL,gen_undoes);
+ else {
+ for ( i=0; i<mm->instance_count; ++i )
+ if ( sc->orig_pos < mm->instances[i]->glyphcnt )
+ _SplineCharAutoHint(mm->instances[i]->glyphs[sc->orig_pos],layer,NULL,NULL,gen_undoes);
+ if ( sc->orig_pos < mm->normal->glyphcnt )
+ _SplineCharAutoHint(mm->normal->glyphs[sc->orig_pos],layer,NULL,NULL,gen_undoes);
+ }
+ SCFigureHintMasks(sc,layer);
+}
+
+void SplineCharAutoHint( SplineChar *sc, int layer, BlueData *bd ) {
+ __SplineCharAutoHint(sc,layer,bd,true);
+}
+
+void SFSCAutoHint( SplineChar *sc, int layer, BlueData *bd ) {
+ RefChar *ref;
+
+ if ( sc->ticked )
+return;
+ for ( ref=sc->layers[ly_fore].refs; ref!=NULL; ref=ref->next ) {
+ if ( !ref->sc->ticked )
+ SFSCAutoHint(ref->sc,layer,bd);
+ }
+ sc->ticked = true;
+ SplineCharAutoHint(sc,layer,bd);
+}
+
+void SplineFontAutoHint( SplineFont *_sf,int layer) {
+ int i,k;
+ SplineFont *sf;
+ BlueData *bd = NULL, _bd;
+ SplineChar *sc;
+
+ if ( _sf->mm==NULL ) {
+ QuickBlues(_sf,layer,&_bd);
+ bd = &_bd;
+ }
+
+ /* Tick the ones we don't want to AH, untick the ones that need AH */
+ k=0;
+ do {
+ sf = _sf->subfontcnt==0 ? _sf : _sf->subfonts[k];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL )
+ sc->ticked = ( !sc->changedsincelasthinted || sc->manualhints );
+ ++k;
+ } while ( k<_sf->subfontcnt );
+
+ k=0;
+ do {
+ sf = _sf->subfontcnt==0 ? _sf : _sf->subfonts[k];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ if ( sf->glyphs[i]->changedsincelasthinted &&
+ !sf->glyphs[i]->manualhints )
+ SFSCAutoHint(sf->glyphs[i],layer,bd);
+ if ( !ff_progress_next()) {
+ k = _sf->subfontcnt+1;
+ break;
+ }
+ }
+ ++k;
+ } while ( k<_sf->subfontcnt );
+}
+
+void SplineFontAutoHintRefs( SplineFont *_sf,int layer) {
+ int i,k;
+ SplineFont *sf;
+ BlueData *bd = NULL, _bd;
+ SplineChar *sc;
+
+ if ( _sf->mm==NULL ) {
+ QuickBlues(_sf,layer,&_bd);
+ bd = &_bd;
+ }
+
+ k=0;
+ do {
+ sf = _sf->subfontcnt==0 ? _sf : _sf->subfonts[k];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL ) {
+ if ( sc->changedsincelasthinted &&
+ !sc->manualhints &&
+ (sc->layers[layer].refs!=NULL && sc->layers[layer].splines==NULL)) {
+ StemInfosFree(sc->vstem); sc->vstem=NULL;
+ StemInfosFree(sc->hstem); sc->hstem=NULL;
+ AutoHintRefs(sc,layer,bd,true,true);
+ }
+ }
+ ++k;
+ } while ( k<_sf->subfontcnt );
+}
+
+static void FigureStems( SplineFont *sf, real snaps[12], real cnts[12],
+ int which ) {
+ int i, j, k, cnt, smax=0, smin=2000;
+ real stemwidths[2000];
+ StemInfo *stems, *test;
+ int len;
+ HintInstance *hi;
+
+ memset(stemwidths,'\0',sizeof(stemwidths));
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ stems = which?sf->glyphs[i]->hstem:sf->glyphs[i]->vstem;
+ for ( test=stems; test!=NULL; test = test->next ) if ( !test->ghost ) {
+ if ( (j=test->width)<0 ) j= -j;
+ if ( j<2000 ) {
+ len = 0;
+ for ( hi=test->where; hi!=NULL; hi=hi->next )
+ len += hi->end-hi->begin;
+ if ( len==0 ) len = 100;
+ stemwidths[j] += len;
+ if ( smax<j ) smax=j;
+ if ( smin>j ) smin=j;
+ }
+ }
+ }
+
+ for ( i=smin, cnt=0; i<=smax; ++i ) {
+ if ( stemwidths[i]!=0 )
+ ++cnt;
+ }
+
+ if ( cnt>12 ) {
+ /* Merge width windows */
+ int windsize=3, j;
+ for ( i=smin; i<=smax; ++i ) if ( stemwidths[i]!=0 ) {
+ if ( (j = i-windsize)<0 ) j=0;
+ for ( ; j<smax && j<=i+windsize; ++j )
+ if ( stemwidths[i]<stemwidths[j] )
+ break;
+ if ( j==smax || j>i+windsize ) {
+ if ( (j = i-windsize)<0 ) j=0;
+ for ( ; j<smax && j<=i+windsize; ++j ) if ( j!=i ) {
+ stemwidths[i] += stemwidths[j];
+ stemwidths[j] = 0;
+ }
+ }
+ }
+ /* Merge adjacent widths */
+ for ( i=smin; i<=smax; ++i ) {
+ if ( i<=smax-1 && stemwidths[i]!=0 && stemwidths[i+1]!=0 ) {
+ if ( stemwidths[i]>stemwidths[i+1] ) {
+ stemwidths[i] += stemwidths[i+1];
+ stemwidths[i+1] = 0;
+ } else {
+ if ( i<=smax-2 && stemwidths[i+2] && stemwidths[i+2]<stemwidths[i+1] ) {
+ stemwidths[i+1] += stemwidths[i+2];
+ stemwidths[i+2] = 0;
+ }
+ stemwidths[i+1] += stemwidths[i];
+ stemwidths[i] = 0;
+ ++i;
+ }
+ }
+ }
+ for ( i=smin, cnt=0; i<=smax; ++i ) {
+ if ( stemwidths[i]!=0 )
+ ++cnt;
+ }
+ }
+ if ( cnt<=12 ) {
+ for ( i=smin, cnt=0; i<=smax; ++i ) {
+ if ( stemwidths[i]!=0 ) {
+ snaps[cnt] = i;
+ cnts[cnt++] = stemwidths[i];
+ }
+ }
+ } else { real firstbiggest=0;
+ for ( cnt = 0; cnt<12; ++cnt ) {
+ int biggesti=0;
+ real biggest=0;
+ for ( i=smin; i<=smax; ++i ) {
+ if ( stemwidths[i]>biggest ) { biggest = stemwidths[i]; biggesti=i; }
+ }
+ /* array must be sorted */
+ if ( biggest<firstbiggest/6 )
+ break;
+ for ( j=0; j<cnt; ++j )
+ if ( snaps[j]>biggesti )
+ break;
+ for ( k=cnt-1; k>=j; --k ) {
+ snaps[k+1] = snaps[k];
+ cnts[k+1]=cnts[k];
+ }
+ snaps[j] = biggesti;
+ cnts[j] = biggest;
+ stemwidths[biggesti] = 0;
+ if ( firstbiggest==0 ) firstbiggest = biggest;
+ }
+ }
+ for ( ; cnt<12; ++cnt ) {
+ snaps[cnt] = 0;
+ cnts[cnt] = 0;
+ }
+}
+
+void FindHStems( SplineFont *sf, real snaps[12], real cnt[12]) {
+ FigureStems(sf,snaps,cnt,1);
+}
+
+void FindVStems( SplineFont *sf, real snaps[12], real cnt[12]) {
+ FigureStems(sf,snaps,cnt,0);
+}
+
+static int IsFlexSmooth(SplinePoint *sp) {
+ BasePoint nvec, pvec;
+ double proj_same, proj_normal;
+
+ if ( sp->nonextcp || sp->noprevcp )
+return( false ); /* No continuity of slopes */
+
+ nvec.x = sp->nextcp.x - sp->me.x; nvec.y = sp->nextcp.y - sp->me.y;
+ pvec.x = sp->me.x - sp->prevcp.x; pvec.y = sp->me.y - sp->prevcp.y;
+
+ /* Avoid cases where the slopes are 180 out of phase */
+ if ( (proj_same = nvec.x*pvec.x + nvec.y*pvec.y)<=0 )
+return( false );
+ if ( (proj_normal = nvec.x*pvec.y - nvec.y*pvec.x)<0 )
+ proj_normal = -proj_normal;
+
+ /* Something is smooth if the normal projection is 0. Let's allow for */
+ /* some rounding errors */
+ if ( proj_same >= 16*proj_normal )
+return( true );
+
+return( false );
+}
+
+static int _SplineCharIsFlexible(SplineChar *sc, int layer, int blueshift) {
+ /* Need two splines
+ outer endpoints have same x (or y) values
+ inner point must be less than 20 horizontal (v) units from the outer points
+ inner point must also be less than BlueShift units (defaults to 7=>6)
+ (can increase BlueShift up to 21)
+ the inner point must be a local extremum
+ the inner point's cps must be at the x (or y) value as the extremum
+ (I think)
+ */
+ /* We want long, nearly straight stems. If the end-points should not have
+ continuous slopes, or if they do, they must be horizontal/vertical.
+ This is an heuristic requirement, not part of Adobe's spec.
+ */
+ SplineSet *spl;
+ SplinePoint *sp, *np, *pp;
+ int max=0, val;
+ RefChar *r;
+
+ if ( sc==NULL )
+return(false);
+
+ for ( spl = sc->layers[layer].splines; spl!=NULL; spl=spl->next ) {
+ if ( spl->first->prev==NULL ) {
+ /* Mark everything on the open path as inflexible */
+ sp=spl->first;
+ while ( 1 ) {
+ sp->flexx = sp->flexy = false;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ }
+ continue; /* Ignore open paths */
+ }
+ sp=spl->first;
+ do {
+ if ( sp->next==NULL || sp->prev==NULL )
+ break;
+ np = sp->next->to;
+ pp = sp->prev->from;
+ if ( !pp->flexx && !pp->flexy ) {
+ sp->flexy = sp->flexx = 0;
+ val = 0;
+ if ( RealNear(sp->nextcp.x,sp->me.x) &&
+ RealNear(sp->prevcp.x,sp->me.x) &&
+ RealNear(np->me.x,pp->me.x) &&
+ !RealNear(np->me.x,sp->me.x) &&
+ (!IsFlexSmooth(pp) || RealNear(pp->nextcp.x,pp->me.x)) &&
+ (!IsFlexSmooth(np) || RealNear(np->prevcp.x,np->me.x)) &&
+ np->me.x-sp->me.x < blueshift &&
+ np->me.x-sp->me.x > -blueshift ) {
+ if ( (np->me.x>sp->me.x &&
+ np->prevcp.x<=np->me.x && np->prevcp.x>=sp->me.x &&
+ pp->nextcp.x<=pp->me.x && pp->prevcp.x>=sp->me.x ) ||
+ (np->me.x<sp->me.x &&
+ np->prevcp.x>=np->me.x && np->prevcp.x<=sp->me.x &&
+ pp->nextcp.x>=pp->me.x && pp->prevcp.x<=sp->me.x )) {
+ sp->flexx = true;
+ val = np->me.x-sp->me.x;
+ }
+ }
+ if ( RealNear(sp->nextcp.y,sp->me.y) &&
+ RealNear(sp->prevcp.y,sp->me.y) &&
+ RealNear(np->me.y,pp->me.y) &&
+ !RealNear(np->me.y,sp->me.y) &&
+ (!IsFlexSmooth(pp) || RealNear(pp->nextcp.y,pp->me.y)) &&
+ (!IsFlexSmooth(np) || RealNear(np->prevcp.y,np->me.y)) &&
+ np->me.y-sp->me.y < blueshift &&
+ np->me.y-sp->me.y > -blueshift ) {
+ if ( (np->me.y>sp->me.y &&
+ np->prevcp.y<=np->me.y && np->prevcp.y>=sp->me.y &&
+ pp->nextcp.y<=pp->me.y && pp->nextcp.y>=sp->me.y ) ||
+ (np->me.y<sp->me.y &&
+ np->prevcp.y>=np->me.y && np->prevcp.y<=sp->me.y &&
+ pp->nextcp.y>=pp->me.y && pp->nextcp.y<=sp->me.y )) {
+ sp->flexy = true;
+ val = np->me.y-sp->me.y;
+ }
+ }
+ if ( val<0 ) val = -val;
+ if ( val>max ) max = val;
+ }
+ sp = np;
+ } while ( sp!=spl->first );
+ }
+ sc->layers[layer].anyflexes = max>0;
+ if ( max==0 )
+ for ( r = sc->layers[layer].refs; r!=NULL ; r=r->next )
+ if ( r->sc->layers[layer].anyflexes ) {
+ sc->layers[layer].anyflexes = true;
+ break;
+ }
+return( max );
+}
+
+static void SCUnflex(SplineChar *sc, int layer) {
+ SplineSet *spl;
+ SplinePoint *sp;
+
+ for ( spl = sc->layers[layer].splines; spl!=NULL; spl=spl->next ) {
+ /* Mark everything on the path as inflexible */
+ sp=spl->first;
+ while ( 1 ) {
+ sp->flexx = sp->flexy = false;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==spl->first )
+ break;
+ }
+ }
+ sc->layers[layer].anyflexes = false;
+}
+
+static void FlexDependents(SplineChar *sc,int layer) {
+ struct splinecharlist *scl;
+
+ sc->layers[layer].anyflexes = true;
+ for ( scl = sc->dependents; scl!=NULL; scl=scl->next )
+ FlexDependents(scl->sc,layer);
+}
+
+int SplineFontIsFlexible(SplineFont *sf,int layer, int flags) {
+ int i;
+ int max=0, val;
+ char *pt;
+ int blueshift;
+ /* if the return value is bigger than 6 and we don't have a BlueShift */
+ /* then we must set BlueShift to ret+1 before saving private dictionary */
+ /* If the first point in a spline set is flexible, then we must rotate */
+ /* the splineset */
+
+ if ( flags&(ps_flag_nohints|ps_flag_noflex)) {
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ SCUnflex(sf->glyphs[i],layer);
+return( 0 );
+ }
+
+ pt = PSDictHasEntry(sf->private,"BlueShift");
+ blueshift = 21; /* maximum posible flex, not default */
+ if ( pt!=NULL ) {
+ blueshift = strtol(pt,NULL,10);
+ if ( blueshift>21 ) blueshift = 21;
+ } else if ( PSDictHasEntry(sf->private,"BlueValues")!=NULL )
+ blueshift = 7; /* The BlueValues array may depend on BlueShift having its default value */
+
+ for ( i=0; i<sf->glyphcnt; ++i )
+ if ( sf->glyphs[i]!=NULL ) if ( sf->glyphs[i]!=NULL ) {
+ val = _SplineCharIsFlexible(sf->glyphs[i],layer,blueshift);
+ if ( val>max ) max = val;
+ if ( sf->glyphs[i]->layers[layer].anyflexes )
+ FlexDependents(sf->glyphs[i],layer);
+ }
+return( max );
+}
+
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/char.c b/dviware/dvisvgm/libs/ff-woff/fontforge/char.c
new file mode 100644
index 0000000000..fdaaa17500
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/char.c
@@ -0,0 +1,72 @@
+/* Copyright (C) 2000-2002 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <fontforge-config.h>
+
+#include <utype.h>
+#include "ustring.h"
+
+int strmatch(const char *str1, const char *str2) {
+ int ch1, ch2;
+ for (;;) {
+ ch1 = *str1++; ch2 = *str2++ ;
+ ch1 = tolower(ch1);
+ ch2 = tolower(ch2);
+ if ( ch1!=ch2 || ch1=='\0' )
+return(ch1-ch2);
+ }
+}
+
+int strnmatch(const char *str1, const char *str2, int n) {
+ int ch1, ch2;
+ for (;n-->0;) {
+ ch1 = *str1++; ch2 = *str2++ ;
+ ch1 = tolower(ch1);
+ ch2 = tolower(ch2);
+ if ( ch1!=ch2 || ch1=='\0' )
+return(ch1-ch2);
+ }
+return(0);
+}
+
+char *strstrmatch(const char *longer, const char *substr) {
+ int ch1, ch2;
+ const char *lpt, *str1, *str2;
+
+ for ( lpt=longer; *lpt!='\0'; ++lpt ) {
+ str1 = lpt; str2 = substr;
+ for (;;) {
+ ch1 = *str1++; ch2 = *str2++ ;
+ ch1 = tolower(ch1);
+ ch2 = tolower(ch2);
+ if ( ch2=='\0' )
+return((char *) lpt);
+ if ( ch1!=ch2 )
+ break;
+ }
+ }
+return( NULL );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/cjk.c b/dviware/dvisvgm/libs/ff-woff/fontforge/cjk.c
new file mode 100644
index 0000000000..bd029ecf62
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/cjk.c
@@ -0,0 +1,15591 @@
+#include <chardata.h>
+
+const unichar_t unicode_from_jis208[] = {
+ 0x2003, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b,
+ 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e,
+ 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd,
+ 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c,
+ 0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b,
+ 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e,
+ 0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7,
+ 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234,
+ 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04,
+ 0xffe0, 0xffe1, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7,
+ 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1,
+ 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, 0x3012, 0x2192,
+ 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2208,
+ 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2227,
+ 0x2228, 0xffe2, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252,
+ 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x212b,
+ 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021, 0x00b6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x25ef, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14,
+ 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xff21, 0xff22, 0xff23, 0xff24,
+ 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c,
+ 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34,
+ 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xff41, 0xff42, 0xff43, 0xff44,
+ 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
+ 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54,
+ 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
+ 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
+ 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
+ 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
+ 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066,
+ 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e,
+ 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
+ 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
+ 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086,
+ 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e,
+ 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
+ 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
+ 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
+ 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
+ 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
+ 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
+ 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
+ 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
+ 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
+ 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
+ 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0391, 0x0392,
+ 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a,
+ 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3,
+ 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03b1, 0x03b2,
+ 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba,
+ 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3,
+ 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0410, 0x0411, 0x0412, 0x0413,
+ 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a,
+ 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422,
+ 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a,
+ 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0430, 0x0431, 0x0432, 0x0433,
+ 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a,
+ 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442,
+ 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a,
+ 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514,
+ 0x251c, 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f,
+ 0x2513, 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b,
+ 0x2520, 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525,
+ 0x2538, 0x2542, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b,
+ 0x6328, 0x59f6, 0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1,
+ 0x6e25, 0x65ed, 0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1,
+ 0x6271, 0x5b9b, 0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e,
+ 0x6216, 0x7c9f, 0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848,
+ 0x95c7, 0x978d, 0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049,
+ 0x56f2, 0x5937, 0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170,
+ 0x6613, 0x6905, 0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def,
+ 0x80c3, 0x840e, 0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95,
+ 0x4ea5, 0x57df, 0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2,
+ 0x9038, 0x7a32, 0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd,
+ 0x54e1, 0x56e0, 0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d,
+ 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf,
+ 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893,
+ 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5,
+ 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2,
+ 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3,
+ 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834,
+ 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5,
+ 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712,
+ 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf,
+ 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276,
+ 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a,
+ 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, 0x62bc, 0x65fa,
+ 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956, 0x9d2c, 0x9d0e,
+ 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b, 0x61b6, 0x81c6,
+ 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069, 0x6e29, 0x7a4f,
+ 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d, 0x4fa1, 0x4f73,
+ 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6, 0x5be1, 0x79d1,
+ 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b, 0x73c2, 0x798d,
+ 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304, 0x8377, 0x83ef,
+ 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6, 0x904e, 0x971e,
+ 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b, 0x81e5, 0x82bd,
+ 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb, 0x4f1a, 0x89e3,
+ 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a, 0x6094, 0x6062,
+ 0x61d0, 0x6212, 0x62d0, 0x6539, 0x9b41, 0x6666, 0x68b0, 0x6d77,
+ 0x7070, 0x754c, 0x7686, 0x7d75, 0x82a5, 0x87f9, 0x958b, 0x968e,
+ 0x8c9d, 0x51f1, 0x52be, 0x5916, 0x54b3, 0x5bb3, 0x5d16, 0x6168,
+ 0x6982, 0x6daf, 0x788d, 0x84cb, 0x8857, 0x8a72, 0x93a7, 0x9ab8,
+ 0x6d6c, 0x99a8, 0x86d9, 0x57a3, 0x67ff, 0x86ce, 0x920e, 0x5283,
+ 0x5687, 0x5404, 0x5ed3, 0x62e1, 0x64b9, 0x683c, 0x6838, 0x6bbb,
+ 0x7372, 0x78ba, 0x7a6b, 0x899a, 0x89d2, 0x8d6b, 0x8f03, 0x90ed,
+ 0x95a3, 0x9694, 0x9769, 0x5b66, 0x5cb3, 0x697d, 0x984d, 0x984e,
+ 0x639b, 0x7b20, 0x6a2b, 0x6a7f, 0x68b6, 0x9c0d, 0x6f5f, 0x5272,
+ 0x559d, 0x6070, 0x62ec, 0x6d3b, 0x6e07, 0x6ed1, 0x845b, 0x8910,
+ 0x8f44, 0x4e14, 0x9c39, 0x53f6, 0x691b, 0x6a3a, 0x9784, 0x682a,
+ 0x515c, 0x7ac3, 0x84b2, 0x91dc, 0x938c, 0x565b, 0x9d28, 0x6822,
+ 0x8305, 0x8431, 0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83,
+ 0x51a0, 0x5bd2, 0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a,
+ 0x59e6, 0x5b8c, 0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f,
+ 0x6163, 0x61be, 0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e,
+ 0x6b53, 0x6c57, 0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3,
+ 0x770b, 0x7aff, 0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d,
+ 0x8266, 0x839e, 0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593,
+ 0x9591, 0x95a2, 0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b,
+ 0x5cb8, 0x5dcc, 0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b,
+ 0x96c1, 0x9811, 0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c,
+ 0x5668, 0x57fa, 0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e,
+ 0x5fcc, 0x63ee, 0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4,
+ 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63,
+ 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc,
+ 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993,
+ 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947,
+ 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409,
+ 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd,
+ 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7,
+ 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d,
+ 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08,
+ 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8,
+ 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8,
+ 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, 0x4f9b, 0x4fa0,
+ 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354, 0x5321, 0x537f,
+ 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a, 0x602f, 0x6050,
+ 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2, 0x72ed, 0x77ef,
+ 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1, 0x97ff, 0x9957,
+ 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d, 0x5c40, 0x66f2,
+ 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4, 0x5747, 0x5dfe,
+ 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981, 0x79bd, 0x7b4b,
+ 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39, 0x8fd1, 0x91d1,
+ 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a, 0x72d7, 0x7396,
+ 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2, 0x5177, 0x611a,
+ 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047, 0x9685, 0x4e32,
+ 0x6adb, 0x91e7, 0x5c51, 0x5c48, 0x6398, 0x7a9f, 0x6c93, 0x9774,
+ 0x8f61, 0x7aaa, 0x718a, 0x9688, 0x7c82, 0x6817, 0x7e70, 0x6851,
+ 0x936c, 0x52f2, 0x541b, 0x85ab, 0x8a13, 0x7fa4, 0x8ecd, 0x90e1,
+ 0x5366, 0x8888, 0x7941, 0x4fc2, 0x50be, 0x5211, 0x5144, 0x5553,
+ 0x572d, 0x73ea, 0x578b, 0x5951, 0x5f62, 0x5f84, 0x6075, 0x6176,
+ 0x6167, 0x61a9, 0x63b2, 0x643a, 0x656c, 0x666f, 0x6842, 0x6e13,
+ 0x7566, 0x7a3d, 0x7cfb, 0x7d4c, 0x7d99, 0x7e4b, 0x7f6b, 0x830e,
+ 0x834a, 0x86cd, 0x8a08, 0x8a63, 0x8b66, 0x8efd, 0x981a, 0x9d8f,
+ 0x82b8, 0x8fce, 0x9be8, 0x5287, 0x621f, 0x6483, 0x6fc0, 0x9699,
+ 0x6841, 0x5091, 0x6b20, 0x6c7a, 0x6f54, 0x7a74, 0x7d50, 0x8840,
+ 0x8a23, 0x6708, 0x4ef6, 0x5039, 0x5026, 0x5065, 0x517c, 0x5238,
+ 0x5263, 0x55a7, 0x570f, 0x5805, 0x5acc, 0x5efa, 0x61b2, 0x61f8,
+ 0x62f3, 0x6372, 0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814,
+ 0x786f, 0x7d79, 0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2,
+ 0x9063, 0x9375, 0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f,
+ 0x53b3, 0x5e7b, 0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43,
+ 0x8237, 0x8a00, 0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c,
+ 0x56fa, 0x59d1, 0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545,
+ 0x67af, 0x6e56, 0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0,
+ 0x864e, 0x8a87, 0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94,
+ 0x4e92, 0x4f0d, 0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1,
+ 0x609f, 0x68a7, 0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77,
+ 0x9190, 0x4e5e, 0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016,
+ 0x5149, 0x516c, 0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411,
+ 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f,
+ 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18,
+ 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643,
+ 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69,
+ 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05,
+ 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154,
+ 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc,
+ 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805,
+ 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5,
+ 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a,
+ 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170,
+ 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, 0x6b64, 0x9803,
+ 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068, 0x61c7, 0x660f,
+ 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a, 0x826e, 0x9b42,
+ 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6, 0x5dee, 0x67fb,
+ 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df, 0x5750, 0x5ea7,
+ 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9, 0x585e, 0x59bb,
+ 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73, 0x6e08, 0x707d,
+ 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e, 0x7d30, 0x83dc,
+ 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750, 0x7f6a, 0x8ca1,
+ 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4, 0x54b2, 0x5d0e,
+ 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b, 0x643e, 0x6628,
+ 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f, 0x685c, 0x9bad,
+ 0x7b39, 0x5319, 0x518a, 0x5237, 0x5bdf, 0x62f6, 0x64ae, 0x64e6,
+ 0x672d, 0x6bba, 0x85a9, 0x96d1, 0x7690, 0x9bd6, 0x634c, 0x9306,
+ 0x9bab, 0x76bf, 0x6652, 0x4e09, 0x5098, 0x53c2, 0x5c71, 0x60e8,
+ 0x6492, 0x6563, 0x685f, 0x71e6, 0x73ca, 0x7523, 0x7b97, 0x7e82,
+ 0x8695, 0x8b83, 0x8cdb, 0x9178, 0x9910, 0x65ac, 0x66ab, 0x6b8b,
+ 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f, 0x523a, 0x53f8, 0x53f2, 0x55e3,
+ 0x56db, 0x58eb, 0x59cb, 0x59c9, 0x59ff, 0x5b50, 0x5c4d, 0x5e02,
+ 0x5e2b, 0x5fd7, 0x601d, 0x6307, 0x652f, 0x5b5c, 0x65af, 0x65bd,
+ 0x65e8, 0x679d, 0x6b62, 0x6b7b, 0x6c0f, 0x7345, 0x7949, 0x79c1,
+ 0x7cf8, 0x7d19, 0x7d2b, 0x80a2, 0x8102, 0x81f3, 0x8996, 0x8a5e,
+ 0x8a69, 0x8a66, 0x8a8c, 0x8aee, 0x8cc7, 0x8cdc, 0x96cc, 0x98fc,
+ 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d, 0x5150, 0x5b57, 0x5bfa, 0x6148,
+ 0x6301, 0x6642, 0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4,
+ 0x78c1, 0x793a, 0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50,
+ 0x9e7f, 0x5f0f, 0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb,
+ 0x4e03, 0x53f1, 0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f,
+ 0x6f06, 0x75be, 0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4,
+ 0x829d, 0x5c61, 0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368,
+ 0x8d66, 0x659c, 0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca,
+ 0x906e, 0x86c7, 0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c,
+ 0x7235, 0x914c, 0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9,
+ 0x4e3b, 0x53d6, 0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0,
+ 0x7a2e, 0x816b, 0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a,
+ 0x5bff, 0x6388, 0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468,
+ 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0,
+ 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846,
+ 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6,
+ 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4,
+ 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919,
+ 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa,
+ 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c,
+ 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96,
+ 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6,
+ 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72,
+ 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f,
+ 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, 0x52dd, 0x5320,
+ 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59be,
+ 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a, 0x5e84, 0x5e8a,
+ 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c, 0x6377, 0x6607,
+ 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f, 0x6a35, 0x6cbc,
+ 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167, 0x75c7, 0x7701,
+ 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11, 0x7ca7, 0x7d39,
+ 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3, 0x8a1f, 0x8a3c,
+ 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266, 0x937e, 0x9418,
+ 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57, 0x5197, 0x5270,
+ 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5, 0x64fe, 0x6761,
+ 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8, 0x8b72, 0x91b8,
+ 0x9320, 0x5631, 0x57f4, 0x98fe, 0x62ed, 0x690d, 0x6b96, 0x71ed,
+ 0x7e54, 0x8077, 0x8272, 0x89e6, 0x98df, 0x8755, 0x8fb1, 0x5c3b,
+ 0x4f38, 0x4fe1, 0x4fb5, 0x5507, 0x5a20, 0x5bdd, 0x5be9, 0x5fc3,
+ 0x614e, 0x632f, 0x65b0, 0x664b, 0x68ee, 0x699b, 0x6d78, 0x6df1,
+ 0x7533, 0x75b9, 0x771f, 0x795e, 0x79e6, 0x7d33, 0x81e3, 0x82af,
+ 0x85aa, 0x89aa, 0x8a3a, 0x8eab, 0x8f9b, 0x9032, 0x91dd, 0x9707,
+ 0x4eba, 0x4ec1, 0x5203, 0x5875, 0x58ec, 0x5c0b, 0x751a, 0x5c3d,
+ 0x814e, 0x8a0a, 0x8fc5, 0x9663, 0x976d, 0x7b25, 0x8acf, 0x9808,
+ 0x9162, 0x56f3, 0x53a8, 0x9017, 0x5439, 0x5782, 0x5e25, 0x63a8,
+ 0x6c34, 0x708a, 0x7761, 0x7c8b, 0x7fe0, 0x8870, 0x9042, 0x9154,
+ 0x9310, 0x9318, 0x968f, 0x745e, 0x9ac4, 0x5d07, 0x5d69, 0x6570,
+ 0x67a2, 0x8da8, 0x96db, 0x636e, 0x6749, 0x6919, 0x83c5, 0x9817,
+ 0x96c0, 0x88fe, 0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d,
+ 0x662f, 0x51c4, 0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210,
+ 0x653f, 0x6574, 0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05,
+ 0x7272, 0x751f, 0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f,
+ 0x8aa0, 0x8a93, 0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589,
+ 0x7a0e, 0x8106, 0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614,
+ 0x6790, 0x77f3, 0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64,
+ 0x8de1, 0x8e5f, 0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298,
+ 0x8a2d, 0x7a83, 0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749,
+ 0x4ed9, 0x5148, 0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd,
+ 0x6226, 0x6247, 0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17,
+ 0x67d3, 0x6f5c, 0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda,
+ 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce,
+ 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d,
+ 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce,
+ 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9,
+ 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44,
+ 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc,
+ 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64,
+ 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd,
+ 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89,
+ 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349,
+ 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d,
+ 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, 0x81d3, 0x8535,
+ 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373, 0x606f, 0x6349,
+ 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e, 0x8cca, 0x65cf,
+ 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58, 0x5b6b, 0x5c0a,
+ 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a, 0x6c70, 0x8a51,
+ 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1, 0x8235, 0x6955,
+ 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe, 0x8010, 0x5cb1,
+ 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff, 0x6cf0, 0x6ede,
+ 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000, 0x902e, 0x968a,
+ 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c, 0x918d, 0x984c,
+ 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85, 0x6258, 0x629e,
+ 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438, 0x6fc1, 0x8afe,
+ 0x8338, 0x51e7, 0x86f8, 0x53ea, 0x53e9, 0x4f46, 0x9054, 0x8fb0,
+ 0x596a, 0x8131, 0x5dfd, 0x7aea, 0x8fbf, 0x68da, 0x8c37, 0x72f8,
+ 0x9c48, 0x6a3d, 0x8ab0, 0x4e39, 0x5358, 0x5606, 0x5766, 0x62c5,
+ 0x63a2, 0x65e6, 0x6b4e, 0x6de1, 0x6e5b, 0x70ad, 0x77ed, 0x7aef,
+ 0x7baa, 0x7dbb, 0x803d, 0x80c6, 0x86cb, 0x8a95, 0x935b, 0x56e3,
+ 0x58c7, 0x5f3e, 0x65ad, 0x6696, 0x6a80, 0x6bb5, 0x7537, 0x8ac7,
+ 0x5024, 0x77e5, 0x5730, 0x5f1b, 0x6065, 0x667a, 0x6c60, 0x75f4,
+ 0x7a1a, 0x7f6e, 0x81f4, 0x8718, 0x9045, 0x99b3, 0x7bc9, 0x755c,
+ 0x7af9, 0x7b51, 0x84c4, 0x9010, 0x79e9, 0x7a92, 0x8336, 0x5ae1,
+ 0x7740, 0x4e2d, 0x4ef2, 0x5b99, 0x5fe0, 0x62bd, 0x663c, 0x67f1,
+ 0x6ce8, 0x866b, 0x8877, 0x8a3b, 0x914e, 0x92f3, 0x99d0, 0x6a17,
+ 0x7026, 0x732a, 0x82e7, 0x8457, 0x8caf, 0x4e01, 0x5146, 0x51cb,
+ 0x558b, 0x5bf5, 0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b,
+ 0x5fb4, 0x61f2, 0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a,
+ 0x773a, 0x8074, 0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85,
+ 0x8df3, 0x929a, 0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4,
+ 0x6715, 0x6c88, 0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c,
+ 0x690e, 0x69cc, 0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802,
+ 0x63b4, 0x69fb, 0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4,
+ 0x9354, 0x693f, 0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a,
+ 0x540a, 0x91e3, 0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243,
+ 0x8c9e, 0x5448, 0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7,
+ 0x5f1f, 0x608c, 0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887,
+ 0x798e, 0x7a0b, 0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013,
+ 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575,
+ 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9,
+ 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55,
+ 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9,
+ 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835,
+ 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b,
+ 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa,
+ 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd,
+ 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b,
+ 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7,
+ 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977,
+ 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, 0x8463, 0x8569,
+ 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003, 0x900f, 0x9419,
+ 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5, 0x540c, 0x5802,
+ 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5, 0x80f4, 0x8404,
+ 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97, 0x5fb3, 0x6d9c,
+ 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec, 0x8aad, 0x6803,
+ 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6, 0x82eb, 0x5bc5,
+ 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566, 0x6c8c, 0x8c5a,
+ 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948, 0x90a3, 0x5185,
+ 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a, 0x934b, 0x6962,
+ 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf, 0x96e3, 0x6c5d,
+ 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1, 0x8089, 0x8679,
+ 0x5eff, 0x65e5, 0x4e73, 0x5165, 0x5982, 0x5c3f, 0x97ee, 0x4efb,
+ 0x598a, 0x5fcd, 0x8a8d, 0x6fe1, 0x79b0, 0x7962, 0x5be7, 0x8471,
+ 0x732b, 0x71b1, 0x5e74, 0x5ff5, 0x637b, 0x649a, 0x71c3, 0x7c98,
+ 0x4e43, 0x5efc, 0x4e4b, 0x57dc, 0x56a2, 0x60a9, 0x6fc3, 0x7d0d,
+ 0x80fd, 0x8133, 0x81bf, 0x8fb2, 0x8997, 0x86a4, 0x5df4, 0x628a,
+ 0x64ad, 0x8987, 0x6777, 0x6ce2, 0x6d3e, 0x7436, 0x7834, 0x5a46,
+ 0x7f75, 0x82ad, 0x99ac, 0x4ff3, 0x5ec3, 0x62dd, 0x6392, 0x6557,
+ 0x676f, 0x76c3, 0x724c, 0x80cc, 0x80ba, 0x8f29, 0x914d, 0x500d,
+ 0x57f9, 0x5a92, 0x6885, 0x6973, 0x7164, 0x72fd, 0x8cb7, 0x58f2,
+ 0x8ce0, 0x966a, 0x9019, 0x877f, 0x79e4, 0x77e7, 0x8429, 0x4f2f,
+ 0x5265, 0x535a, 0x62cd, 0x67cf, 0x6cca, 0x767d, 0x7b94, 0x7c95,
+ 0x8236, 0x8584, 0x8feb, 0x66dd, 0x6f20, 0x7206, 0x7e1b, 0x83ab,
+ 0x99c1, 0x9ea6, 0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48,
+ 0x6ae8, 0x5e61, 0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c,
+ 0x767a, 0x9197, 0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5,
+ 0x9ce9, 0x567a, 0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a,
+ 0x53cd, 0x53db, 0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e,
+ 0x7248, 0x72af, 0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9,
+ 0x7bc4, 0x91c6, 0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a,
+ 0x76e4, 0x78d0, 0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983,
+ 0x5e87, 0x5f7c, 0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4,
+ 0x6ccc, 0x75b2, 0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5,
+ 0x88ab, 0x8ab9, 0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38,
+ 0x5099, 0x5c3e, 0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e,
+ 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d,
+ 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867,
+ 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19,
+ 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf,
+ 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed,
+ 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3,
+ 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66,
+ 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7,
+ 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c,
+ 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66,
+ 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a,
+ 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, 0x798f, 0x8179,
+ 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8, 0x4ecf, 0x7269,
+ 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4, 0x626e, 0x711a,
+ 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587, 0x805e, 0x4e19,
+ 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a, 0x67c4, 0x4e26,
+ 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb, 0x58c1, 0x7656,
+ 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f, 0x5909, 0x7247,
+ 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf, 0x52c9, 0x5a29,
+ 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703, 0x6355, 0x6b69,
+ 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893, 0x6155, 0x620a,
+ 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8, 0x5305, 0x5446,
+ 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29, 0x5e96, 0x62b1,
+ 0x6367, 0x653e, 0x65b9, 0x670b, 0x6cd5, 0x6ce1, 0x70f9, 0x7832,
+ 0x7e2b, 0x80de, 0x82b3, 0x840c, 0x84ec, 0x8702, 0x8912, 0x8a2a,
+ 0x8c4a, 0x90a6, 0x92d2, 0x98fd, 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1,
+ 0x508d, 0x5256, 0x574a, 0x59a8, 0x5e3d, 0x5fd8, 0x5fd9, 0x623f,
+ 0x66b4, 0x671b, 0x67d0, 0x68d2, 0x5192, 0x7d21, 0x80aa, 0x81a8,
+ 0x8b00, 0x8c8c, 0x8cbf, 0x927e, 0x9632, 0x5420, 0x982c, 0x5317,
+ 0x50d5, 0x535c, 0x58a8, 0x64b2, 0x6734, 0x7267, 0x7766, 0x7a46,
+ 0x91e6, 0x52c3, 0x6ca1, 0x6b86, 0x5800, 0x5e4c, 0x5954, 0x672c,
+ 0x7ffb, 0x51e1, 0x76c6, 0x6469, 0x78e8, 0x9b54, 0x9ebb, 0x57cb,
+ 0x59b9, 0x6627, 0x679a, 0x6bce, 0x54e9, 0x69d9, 0x5e55, 0x819c,
+ 0x6795, 0x9baa, 0x67fe, 0x9c52, 0x685d, 0x4ea6, 0x4fe3, 0x53c8,
+ 0x62b9, 0x672b, 0x6cab, 0x8fc4, 0x4fad, 0x7e6d, 0x9ebf, 0x4e07,
+ 0x6162, 0x6e80, 0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3,
+ 0x7b95, 0x5cac, 0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108,
+ 0x5999, 0x7c8d, 0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f,
+ 0x77db, 0x9727, 0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d,
+ 0x547d, 0x660e, 0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d,
+ 0x6ec5, 0x514d, 0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478,
+ 0x6a21, 0x8302, 0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2,
+ 0x8017, 0x8499, 0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff,
+ 0x9905, 0x5c24, 0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b,
+ 0x9580, 0x5301, 0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce,
+ 0x5f25, 0x77e2, 0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d,
+ 0x9756, 0x67f3, 0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652,
+ 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5,
+ 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c,
+ 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091,
+ 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89,
+ 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da,
+ 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194,
+ 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21,
+ 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83,
+ 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765,
+ 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71,
+ 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229,
+ 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, 0x75e2, 0x88cf,
+ 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387, 0x7acb, 0x844e,
+ 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409, 0x7559, 0x786b,
+ 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e, 0x65c5, 0x865c,
+ 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee, 0x6599, 0x6881,
+ 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7, 0x826f, 0x8ad2,
+ 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1, 0x502b, 0x5398,
+ 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a, 0x96a3, 0x9c57,
+ 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e, 0x4ee4, 0x4f36,
+ 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2, 0x793c, 0x82d3,
+ 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62, 0x66a6, 0x6b74,
+ 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b, 0x6190, 0x6f23,
+ 0x7149, 0x7c3e, 0x7df4, 0x806f, 0x84ee, 0x9023, 0x932c, 0x5442,
+ 0x9b6f, 0x6ad3, 0x7089, 0x8cc2, 0x8def, 0x9732, 0x52b4, 0x5a41,
+ 0x5eca, 0x5f04, 0x6717, 0x697c, 0x6994, 0x6d6a, 0x6f0f, 0x7262,
+ 0x72fc, 0x7bed, 0x8001, 0x807e, 0x874b, 0x90ce, 0x516d, 0x9e93,
+ 0x7984, 0x808b, 0x9332, 0x8ad6, 0x502d, 0x548c, 0x8a71, 0x6b6a,
+ 0x8cc4, 0x8107, 0x60d1, 0x67a0, 0x9df2, 0x4e99, 0x4e98, 0x9c10,
+ 0x8a6b, 0x85c1, 0x8568, 0x6900, 0x6e7e, 0x7897, 0x8155, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36,
+ 0x4e3c, 0x4e3f, 0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b,
+ 0x4e8a, 0x8212, 0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2,
+ 0x4eb0, 0x4eb3, 0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2,
+ 0x4ed7, 0x4ede, 0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30,
+ 0x4f5b, 0x4f5d, 0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98,
+ 0x4f7b, 0x4f69, 0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118,
+ 0x4fd4, 0x4fdf, 0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0,
+ 0x4fe4, 0x4fe5, 0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005,
+ 0x4f1c, 0x4ff6, 0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011,
+ 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a,
+ 0x5056, 0x506c, 0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2,
+ 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed,
+ 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116,
+ 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b,
+ 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169,
+ 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f,
+ 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9,
+ 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd,
+ 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0,
+ 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a,
+ 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e,
+ 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d,
+ 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, 0x8fa7, 0x52ac,
+ 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7, 0x52de, 0x52e3,
+ 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8, 0x52f9, 0x5306,
+ 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315, 0x531a, 0x5323,
+ 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4e17,
+ 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e, 0x5918, 0x537b,
+ 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5, 0x53ae, 0x53b0,
+ 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc, 0x71ee, 0x53ee,
+ 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440, 0x542c, 0x542d,
+ 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e, 0x548f, 0x5475,
+ 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492, 0x547b, 0x5480,
+ 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2, 0x54b8, 0x54a5,
+ 0x54ac, 0x54c4, 0x54c8, 0x54a8, 0x54ab, 0x54c2, 0x54a4, 0x54be,
+ 0x54bc, 0x54d8, 0x54e5, 0x54e6, 0x550f, 0x5514, 0x54fd, 0x54ee,
+ 0x54ed, 0x54fa, 0x54e2, 0x5539, 0x5540, 0x5563, 0x554c, 0x552e,
+ 0x555c, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555d, 0x5599,
+ 0x5580, 0x54af, 0x558a, 0x559f, 0x557b, 0x557e, 0x5598, 0x559e,
+ 0x55ae, 0x557c, 0x5583, 0x55a9, 0x5587, 0x55a8, 0x55da, 0x55c5,
+ 0x55df, 0x55c4, 0x55dc, 0x55e4, 0x55d4, 0x5614, 0x55f7, 0x5616,
+ 0x55fe, 0x55fd, 0x561b, 0x55f9, 0x564e, 0x5650, 0x71df, 0x5634,
+ 0x5636, 0x5632, 0x5638, 0x566b, 0x5664, 0x562f, 0x566c, 0x566a,
+ 0x5686, 0x5680, 0x568a, 0x56a0, 0x5694, 0x568f, 0x56a5, 0x56ae,
+ 0x56b6, 0x56b4, 0x56c2, 0x56bc, 0x56c1, 0x56c3, 0x56c0, 0x56c8,
+ 0x56ce, 0x56d1, 0x56d3, 0x56d7, 0x56ee, 0x56f9, 0x5700, 0x56ff,
+ 0x5704, 0x5709, 0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716,
+ 0x55c7, 0x571c, 0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740,
+ 0x574f, 0x5769, 0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793,
+ 0x57a0, 0x57b3, 0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4,
+ 0x57d2, 0x57d3, 0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d,
+ 0x5872, 0x5821, 0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d,
+ 0x5879, 0x5885, 0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb,
+ 0x58b8, 0x58ae, 0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8,
+ 0x58e5, 0x58dc, 0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb,
+ 0x58fc, 0x58fd, 0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925,
+ 0x592c, 0x592d, 0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950,
+ 0x594e, 0x595a, 0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969,
+ 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6,
+ 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11,
+ 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36,
+ 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd,
+ 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c,
+ 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43,
+ 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69,
+ 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83,
+ 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4,
+ 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3,
+ 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28,
+ 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, 0x5c50, 0x5c4f,
+ 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79, 0x5c8c, 0x5c91,
+ 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc, 0x5cb7, 0x5cc5,
+ 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa, 0x5ced, 0x5d8c,
+ 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f, 0x5d1b, 0x5d11,
+ 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c, 0x5d52, 0x5d4e,
+ 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84, 0x5d82, 0x5da2,
+ 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7, 0x5dbc, 0x5dc9,
+ 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb, 0x5df2, 0x5df5,
+ 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36, 0x5e37, 0x5e44,
+ 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f, 0x5e62, 0x5e64,
+ 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f, 0x5ea0, 0x5ec1,
+ 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, 0x5ed6, 0x5ee3, 0x5edd, 0x5eda,
+ 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8, 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3,
+ 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe, 0x5f03, 0x5f09, 0x5f5d, 0x5f5c,
+ 0x5f0b, 0x5f11, 0x5f16, 0x5f29, 0x5f2d, 0x5f38, 0x5f41, 0x5f48,
+ 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51, 0x5f56, 0x5f57, 0x5f59, 0x5f61,
+ 0x5f6d, 0x5f73, 0x5f77, 0x5f83, 0x5f82, 0x5f7f, 0x5f8a, 0x5f88,
+ 0x5f91, 0x5f87, 0x5f9e, 0x5f99, 0x5f98, 0x5fa0, 0x5fa8, 0x5fad,
+ 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4, 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3,
+ 0x5fff, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600e, 0x6031,
+ 0x601b, 0x6015, 0x602b, 0x6026, 0x600f, 0x603a, 0x605a, 0x6041,
+ 0x606a, 0x6077, 0x605f, 0x604a, 0x6046, 0x604d, 0x6063, 0x6043,
+ 0x6064, 0x6042, 0x606c, 0x606b, 0x6059, 0x6081, 0x608d, 0x60e7,
+ 0x6083, 0x609a, 0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7,
+ 0x608b, 0x60e1, 0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd,
+ 0x60c6, 0x60b5, 0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7,
+ 0x6100, 0x60f4, 0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d,
+ 0x610e, 0x6147, 0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c,
+ 0x612c, 0x6134, 0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158,
+ 0x6159, 0x615a, 0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f,
+ 0x615d, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194,
+ 0x619a, 0x618a, 0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9,
+ 0x61f7, 0x61c8, 0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd,
+ 0x61e6, 0x61e3, 0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc,
+ 0x61fe, 0x6200, 0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b,
+ 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241,
+ 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282,
+ 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294,
+ 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8,
+ 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c,
+ 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350,
+ 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab,
+ 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369,
+ 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6,
+ 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d,
+ 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a,
+ 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, 0x64da, 0x64d2,
+ 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1, 0x64e7, 0x8209,
+ 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c, 0x64f6, 0x64f4,
+ 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c, 0x6505, 0x6524,
+ 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754b,
+ 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e, 0x655d, 0x6572,
+ 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f, 0x65ab, 0x65b7,
+ 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2, 0x65db, 0x65d9,
+ 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603, 0x65fb, 0x6773,
+ 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644, 0x6649, 0x6641,
+ 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f, 0x6662, 0x6670,
+ 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698, 0x669d, 0x66c1,
+ 0x66b9, 0x66c9, 0x66be, 0x66bc, 0x66c4, 0x66b8, 0x66d6, 0x66da,
+ 0x66e0, 0x663f, 0x66e6, 0x66e9, 0x66f0, 0x66f5, 0x66f7, 0x670f,
+ 0x6716, 0x671e, 0x6726, 0x6727, 0x9738, 0x672e, 0x673f, 0x6736,
+ 0x6741, 0x6738, 0x6737, 0x6746, 0x675e, 0x6760, 0x6759, 0x6763,
+ 0x6764, 0x6789, 0x6770, 0x67a9, 0x677c, 0x676a, 0x678c, 0x678b,
+ 0x67a6, 0x67a1, 0x6785, 0x67b7, 0x67ef, 0x67b4, 0x67ec, 0x67b3,
+ 0x67e9, 0x67b8, 0x67e4, 0x67de, 0x67dd, 0x67e2, 0x67ee, 0x67b9,
+ 0x67ce, 0x67c6, 0x67e7, 0x6a9c, 0x681e, 0x6846, 0x6829, 0x6840,
+ 0x684d, 0x6832, 0x684e, 0x68b3, 0x682b, 0x6859, 0x6863, 0x6877,
+ 0x687f, 0x689f, 0x688f, 0x68ad, 0x6894, 0x689d, 0x689b, 0x6883,
+ 0x6aae, 0x68b9, 0x6874, 0x68b5, 0x68a0, 0x68ba, 0x690f, 0x688d,
+ 0x687e, 0x6901, 0x68ca, 0x6908, 0x68d8, 0x6922, 0x6926, 0x68e1,
+ 0x690c, 0x68cd, 0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904,
+ 0x68d7, 0x68e3, 0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a,
+ 0x691a, 0x6923, 0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978,
+ 0x696b, 0x6954, 0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959,
+ 0x6930, 0x6961, 0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae,
+ 0x69d0, 0x69bf, 0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca,
+ 0x69dd, 0x69bb, 0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c,
+ 0x6995, 0x69b4, 0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a,
+ 0x69f9, 0x69f2, 0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14,
+ 0x69eb, 0x6a0a, 0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c,
+ 0x6a72, 0x6a36, 0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48,
+ 0x6a38, 0x6a22, 0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3,
+ 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac,
+ 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05,
+ 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37,
+ 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59,
+ 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80,
+ 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa,
+ 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6,
+ 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe,
+ 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55,
+ 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e,
+ 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd,
+ 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, 0x6cba, 0x6cdb,
+ 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36, 0x6d2b, 0x6d3d,
+ 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c, 0x6d63, 0x6d93,
+ 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95, 0x6fe4, 0x6d85,
+ 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6, 0x6db8, 0x6dc6,
+ 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5, 0x6dfa, 0x6dd9,
+ 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e, 0x6e2e, 0x6e19,
+ 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b, 0x6e76, 0x6e4d,
+ 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff, 0x6e1d, 0x6e38,
+ 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3, 0x6ebd, 0x6eaf,
+ 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5, 0x6ec2, 0x6e9f,
+ 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe, 0x6f3f, 0x6ef2,
+ 0x6f31, 0x6eef, 0x6f32, 0x6ecc, 0x6f3e, 0x6f13, 0x6ef7, 0x6f86,
+ 0x6f7a, 0x6f78, 0x6f81, 0x6f80, 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d,
+ 0x6f82, 0x6f7c, 0x6f58, 0x6f8e, 0x6f91, 0x6fc2, 0x6f66, 0x6fb3,
+ 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9, 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5,
+ 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1, 0x6fee, 0x6fdb, 0x7009, 0x700b,
+ 0x6ffa, 0x7011, 0x7001, 0x700f, 0x6ffe, 0x701b, 0x701a, 0x6f74,
+ 0x701d, 0x7018, 0x701f, 0x7030, 0x703e, 0x7032, 0x7051, 0x7063,
+ 0x7099, 0x7092, 0x70af, 0x70f1, 0x70ac, 0x70b8, 0x70b3, 0x70ae,
+ 0x70df, 0x70cb, 0x70dd, 0x70d9, 0x7109, 0x70fd, 0x711c, 0x7119,
+ 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714c, 0x7156, 0x716c,
+ 0x718f, 0x71fb, 0x7184, 0x7195, 0x71a8, 0x71ac, 0x71d7, 0x71b9,
+ 0x71be, 0x71d2, 0x71c9, 0x71d4, 0x71ce, 0x71e0, 0x71ec, 0x71e7,
+ 0x71f5, 0x71fc, 0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228,
+ 0x722d, 0x722c, 0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240,
+ 0x7246, 0x724b, 0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287,
+ 0x7292, 0x7296, 0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6,
+ 0x72c4, 0x72ce, 0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7,
+ 0x500f, 0x7317, 0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f,
+ 0x7329, 0x7325, 0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a,
+ 0x7368, 0x7370, 0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3,
+ 0x73ce, 0x73bb, 0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405,
+ 0x746f, 0x7425, 0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f,
+ 0x7459, 0x7441, 0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476,
+ 0x747e, 0x748b, 0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1,
+ 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1,
+ 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d,
+ 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d,
+ 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567,
+ 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a,
+ 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2,
+ 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd,
+ 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc,
+ 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609,
+ 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
+ 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662,
+ 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, 0x7672, 0x7676,
+ 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b, 0x768e, 0x7696,
+ 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8, 0x76b9, 0x76ba,
+ 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1, 0x76e5, 0x76e7,
+ 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724,
+ 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738, 0x7747, 0x775a,
+ 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e, 0x7779, 0x778e,
+ 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6, 0x77b9, 0x77bf,
+ 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7, 0x77da, 0x77dc,
+ 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926, 0x7820, 0x792a,
+ 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a, 0x788c, 0x78a3,
+ 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb, 0x78d4, 0x78be,
+ 0x78bc, 0x78c5, 0x78ca, 0x78ec, 0x78e7, 0x78da, 0x78fd, 0x78f4,
+ 0x7907, 0x7912, 0x7911, 0x7919, 0x792c, 0x792b, 0x7940, 0x7960,
+ 0x7957, 0x795f, 0x795a, 0x7955, 0x7953, 0x797a, 0x797f, 0x798a,
+ 0x799d, 0x79a7, 0x9f4b, 0x79aa, 0x79ae, 0x79b3, 0x79b9, 0x79ba,
+ 0x79c9, 0x79d5, 0x79e7, 0x79ec, 0x79e1, 0x79e3, 0x7a08, 0x7a0d,
+ 0x7a18, 0x7a19, 0x7a20, 0x7a1f, 0x7980, 0x7a31, 0x7a3b, 0x7a3e,
+ 0x7a37, 0x7a43, 0x7a57, 0x7a49, 0x7a61, 0x7a62, 0x7a69, 0x9f9d,
+ 0x7a70, 0x7a79, 0x7a7d, 0x7a88, 0x7a97, 0x7a95, 0x7a98, 0x7a96,
+ 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6, 0x7ac5, 0x7ac4, 0x7abf, 0x9083,
+ 0x7ac7, 0x7aca, 0x7acd, 0x7acf, 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada,
+ 0x7add, 0x7ae1, 0x7ae2, 0x7ae6, 0x7aed, 0x7af0, 0x7b02, 0x7b0f,
+ 0x7b0a, 0x7b06, 0x7b33, 0x7b18, 0x7b19, 0x7b1e, 0x7b35, 0x7b28,
+ 0x7b36, 0x7b50, 0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45,
+ 0x7b75, 0x7b65, 0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e,
+ 0x7b9d, 0x7b98, 0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92,
+ 0x7b8f, 0x7b5d, 0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4,
+ 0x7bc6, 0x7bdd, 0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60,
+ 0x7c00, 0x7c07, 0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6,
+ 0x7c23, 0x7c27, 0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c,
+ 0x7c43, 0x7c54, 0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64,
+ 0x7c56, 0x7c65, 0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad,
+ 0x7ca2, 0x7cab, 0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae,
+ 0x7cb9, 0x7cbd, 0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc,
+ 0x7ce2, 0x9b3b, 0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06,
+ 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32,
+ 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68,
+ 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d,
+ 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab,
+ 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8,
+ 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a,
+ 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22,
+ 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32,
+ 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79,
+ 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae,
+ 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94,
+ 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, 0x7f45, 0x7f4c,
+ 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54, 0x7f58, 0x7f5f,
+ 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82, 0x7f86, 0x7f83,
+ 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d, 0x7f9a, 0x7fa3,
+ 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8, 0x8b71, 0x7fc5,
+ 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6, 0x7fe9, 0x7ff3,
+ 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012, 0x8018, 0x8019,
+ 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a, 0x8046, 0x8052,
+ 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073, 0x8072, 0x8070,
+ 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086, 0x8085, 0x809b,
+ 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db, 0x80e5, 0x80d9,
+ 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef, 0x80f1, 0x811b,
+ 0x8129, 0x8123, 0x812f, 0x814b, 0x968b, 0x8146, 0x813e, 0x8153,
+ 0x8151, 0x80fc, 0x8171, 0x816e, 0x8165, 0x8166, 0x8174, 0x8183,
+ 0x8188, 0x818a, 0x8180, 0x8182, 0x81a0, 0x8195, 0x81a4, 0x81a3,
+ 0x815f, 0x8193, 0x81a9, 0x81b0, 0x81b5, 0x81be, 0x81b8, 0x81bd,
+ 0x81c0, 0x81c2, 0x81ba, 0x81c9, 0x81cd, 0x81d1, 0x81d9, 0x81d8,
+ 0x81c8, 0x81da, 0x81df, 0x81e0, 0x81e7, 0x81fa, 0x81fb, 0x81fe,
+ 0x8201, 0x8202, 0x8205, 0x8207, 0x820a, 0x820d, 0x8210, 0x8216,
+ 0x8229, 0x822b, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825d,
+ 0x825a, 0x825f, 0x8264, 0x8262, 0x8268, 0x826a, 0x826b, 0x822e,
+ 0x8271, 0x8277, 0x8278, 0x827e, 0x828d, 0x8292, 0x82ab, 0x829f,
+ 0x82bb, 0x82ac, 0x82e1, 0x82e3, 0x82df, 0x82d2, 0x82f4, 0x82f3,
+ 0x82fa, 0x8393, 0x8303, 0x82fb, 0x82f9, 0x82de, 0x8306, 0x82dc,
+ 0x8309, 0x82d9, 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340,
+ 0x8339, 0x8350, 0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385,
+ 0x839a, 0x83aa, 0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387,
+ 0x838a, 0x837c, 0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8,
+ 0x83f4, 0x8413, 0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b,
+ 0x83c1, 0x83f7, 0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420,
+ 0x83bd, 0x8438, 0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a,
+ 0x8484, 0x8477, 0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446,
+ 0x842c, 0x846f, 0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf,
+ 0x849f, 0x84d9, 0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6,
+ 0x84d6, 0x84a1, 0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c,
+ 0x851f, 0x8515, 0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548,
+ 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591,
+ 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c,
+ 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0,
+ 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b,
+ 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d,
+ 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9,
+ 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0,
+ 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df,
+ 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb,
+ 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737,
+ 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c,
+ 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, 0x8753, 0x8763,
+ 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af, 0x87cb, 0x87bd,
+ 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3, 0x87c7, 0x87c6,
+ 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d, 0x87fe, 0x87f6,
+ 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821,
+ 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844, 0x8842, 0x8852,
+ 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e, 0x889e, 0x8875,
+ 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88ae, 0x8899,
+ 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1, 0x88c3, 0x88c4,
+ 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902, 0x88fc, 0x88f4,
+ 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913, 0x8943, 0x891e,
+ 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b, 0x8936, 0x8938,
+ 0x894c, 0x891d, 0x8960, 0x895e, 0x8966, 0x8964, 0x896d, 0x896a,
+ 0x896f, 0x8974, 0x8977, 0x897e, 0x8983, 0x8988, 0x898a, 0x8993,
+ 0x8998, 0x89a1, 0x89a9, 0x89a6, 0x89ac, 0x89af, 0x89b2, 0x89ba,
+ 0x89bd, 0x89bf, 0x89c0, 0x89da, 0x89dc, 0x89dd, 0x89e7, 0x89f4,
+ 0x89f8, 0x8a03, 0x8a16, 0x8a10, 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25,
+ 0x8a36, 0x8a41, 0x8a5b, 0x8a52, 0x8a46, 0x8a48, 0x8a7c, 0x8a6d,
+ 0x8a6c, 0x8a62, 0x8a85, 0x8a82, 0x8a84, 0x8aa8, 0x8aa1, 0x8a91,
+ 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3, 0x8ac4, 0x8acd, 0x8ac2, 0x8ada,
+ 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4, 0x8af1, 0x8b14, 0x8ae0, 0x8ae2,
+ 0x8af7, 0x8ade, 0x8adb, 0x8b0c, 0x8b07, 0x8b1a, 0x8ae1, 0x8b16,
+ 0x8b10, 0x8b17, 0x8b20, 0x8b33, 0x97ab, 0x8b26, 0x8b2b, 0x8b3e,
+ 0x8b28, 0x8b41, 0x8b4c, 0x8b4f, 0x8b4e, 0x8b49, 0x8b56, 0x8b5b,
+ 0x8b5a, 0x8b6b, 0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80,
+ 0x8b8c, 0x8b8e, 0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a,
+ 0x8c41, 0x8c3f, 0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62,
+ 0x8c6c, 0x8c78, 0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d,
+ 0x8c8e, 0x8c94, 0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd,
+ 0x8cb2, 0x8cb3, 0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3,
+ 0x8cda, 0x8cfd, 0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07,
+ 0x8d0f, 0x8d0d, 0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16,
+ 0x8d67, 0x8d6d, 0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe,
+ 0x8dba, 0x8dcf, 0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea,
+ 0x8deb, 0x8ddf, 0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d,
+ 0x8e1e, 0x8e10, 0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a,
+ 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60,
+ 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87,
+ 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99,
+ 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5,
+ 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe,
+ 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f,
+ 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42,
+ 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62,
+ 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7,
+ 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005,
+ 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016,
+ 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, 0x904f, 0x9050,
+ 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056, 0x9058, 0x905e,
+ 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082, 0x907d, 0x9081,
+ 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af, 0x90b1, 0x90b5,
+ 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112, 0x9119, 0x9132,
+ 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173,
+ 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab, 0x91af, 0x91aa,
+ 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9, 0x91cb, 0x91d0,
+ 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5, 0x91f6, 0x921e,
+ 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e, 0x9257, 0x9245,
+ 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b, 0x9250, 0x929c,
+ 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9, 0x92b7, 0x92e9,
+ 0x930f, 0x92fa, 0x9344, 0x932e, 0x9319, 0x9322, 0x931a, 0x9323,
+ 0x933a, 0x9335, 0x933b, 0x935c, 0x9360, 0x937c, 0x936e, 0x9356,
+ 0x93b0, 0x93ac, 0x93ad, 0x9394, 0x93b9, 0x93d6, 0x93d7, 0x93e8,
+ 0x93e5, 0x93d8, 0x93c3, 0x93dd, 0x93d0, 0x93c8, 0x93e4, 0x941a,
+ 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942b, 0x9435,
+ 0x9421, 0x943a, 0x9441, 0x9452, 0x9444, 0x945b, 0x9460, 0x9462,
+ 0x945e, 0x946a, 0x9229, 0x9470, 0x9475, 0x9477, 0x947d, 0x945a,
+ 0x947c, 0x947e, 0x9481, 0x947f, 0x9582, 0x9587, 0x958a, 0x9594,
+ 0x9596, 0x9598, 0x9599, 0x95a0, 0x95a8, 0x95a7, 0x95ad, 0x95bc,
+ 0x95bb, 0x95b9, 0x95be, 0x95ca, 0x6ff6, 0x95c3, 0x95cd, 0x95cc,
+ 0x95d5, 0x95d4, 0x95d6, 0x95dc, 0x95e1, 0x95e5, 0x95e2, 0x9621,
+ 0x9628, 0x962e, 0x962f, 0x9642, 0x964c, 0x964f, 0x964b, 0x9677,
+ 0x965c, 0x965e, 0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d,
+ 0x9698, 0x9695, 0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0,
+ 0x96b4, 0x96b6, 0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd,
+ 0x894d, 0x96dc, 0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708,
+ 0x9713, 0x970e, 0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a,
+ 0x9730, 0x9739, 0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742,
+ 0x9749, 0x975c, 0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b,
+ 0x9771, 0x9779, 0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b,
+ 0x978f, 0x9790, 0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4,
+ 0x97c3, 0x97c6, 0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2,
+ 0x7adf, 0x97f6, 0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821,
+ 0x9837, 0x983d, 0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870,
+ 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4,
+ 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914,
+ 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e,
+ 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951,
+ 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae,
+ 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee,
+ 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2,
+ 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e,
+ 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64,
+ 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf,
+ 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6,
+ 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, 0x9afb, 0x9b06,
+ 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25, 0x9b27, 0x9b28,
+ 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44, 0x9b43, 0x9b4f,
+ 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93, 0x9b83, 0x9b91,
+ 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4, 0x9bc0, 0x9bca,
+ 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3, 0x9be2, 0x9be4,
+ 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0, 0x9c15, 0x9c14,
+ 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12, 0x9c0a, 0x9c04,
+ 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30, 0x9c47, 0x9c32,
+ 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76, 0x9c78, 0x9ce7,
+ 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03, 0x9d06, 0x9d2a,
+ 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15, 0x9d12, 0x9d41,
+ 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, 0x9d5d, 0x9d5e, 0x9d64, 0x9d51,
+ 0x9d50, 0x9d59, 0x9d72, 0x9d89, 0x9d87, 0x9dab, 0x9d6f, 0x9d7a,
+ 0x9d9a, 0x9da4, 0x9da9, 0x9db2, 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8,
+ 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2, 0x9dd9, 0x9dd3, 0x9df8, 0x9de6,
+ 0x9ded, 0x9def, 0x9dfd, 0x9e1a, 0x9e1b, 0x9e1e, 0x9e75, 0x9e79,
+ 0x9e7d, 0x9e81, 0x9e88, 0x9e8b, 0x9e8c, 0x9e92, 0x9e95, 0x9e91,
+ 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8, 0x9eaa, 0x9ead, 0x9761, 0x9ecc,
+ 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4, 0x9edc, 0x9ede, 0x9edd, 0x9ee0,
+ 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb,
+ 0x9efc, 0x9efd, 0x9f07, 0x9f08, 0x76b7, 0x9f15, 0x9f21, 0x9f2c,
+ 0x9f3e, 0x9f4a, 0x9f52, 0x9f54, 0x9f63, 0x9f5f, 0x9f60, 0x9f61,
+ 0x9f66, 0x9f67, 0x9f6c, 0x9f6a, 0x9f77, 0x9f72, 0x9f76, 0x9f95,
+ 0x9f9c, 0x9fa0, 0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9fa5, 0x1c2a, 0xbfffdb88, 0x4204f04f,
+ 0x804ef70, 0x0000, 0x2288, 0x804f240, 0x42130a14, 0x40015360, 0xbfffdba8, 0x804bcc9
+};
+
+const unichar_t unicode_from_jis212[] = {
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x02d8, 0x02c7, 0x00b8, 0x02d9,
+ 0x02dd, 0x00af, 0x02db, 0x02da, 0x007e, 0x0384, 0x0385, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00a1,
+ 0x00a6, 0x00bf, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4, 0x2116, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0386, 0x0388,
+ 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, 0x0000, 0x038e, 0x03ab,
+ 0x0000, 0x038f, 0x0000, 0x0000, 0x0000, 0x0000, 0x03ac, 0x03ad,
+ 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2, 0x03cd, 0x03cb,
+ 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0402, 0x0403, 0x0404,
+ 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c,
+ 0x040e, 0x040f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0452, 0x0453, 0x0454,
+ 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c,
+ 0x045e, 0x045f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00c6, 0x0110, 0x0000, 0x0126, 0x0000, 0x0132, 0x0000, 0x0141,
+ 0x013f, 0x0000, 0x014a, 0x00d8, 0x0152, 0x0000, 0x0166, 0x00de,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142,
+ 0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00c1, 0x00c0,
+ 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104, 0x00c5, 0x00c3,
+ 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e, 0x00c9, 0x00c8,
+ 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118, 0x0000, 0x011c,
+ 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc, 0x00cf, 0x00ce,
+ 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134, 0x0136, 0x0139,
+ 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1, 0x00d3, 0x00d2,
+ 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5, 0x0154, 0x0158,
+ 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164, 0x0162, 0x00da,
+ 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170, 0x016a, 0x0172,
+ 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5, 0x0174, 0x00dd,
+ 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x00e1, 0x00e0, 0x00e4, 0x00e2,
+ 0x0103, 0x01ce, 0x0101, 0x0105, 0x00e5, 0x00e3, 0x0107, 0x0109,
+ 0x010d, 0x00e7, 0x010b, 0x010f, 0x00e9, 0x00e8, 0x00eb, 0x00ea,
+ 0x011b, 0x0117, 0x0113, 0x0119, 0x01f5, 0x011d, 0x011f, 0x0000,
+ 0x0121, 0x0125, 0x00ed, 0x00ec, 0x00ef, 0x00ee, 0x01d0, 0x0000,
+ 0x012b, 0x012f, 0x0129, 0x0135, 0x0137, 0x013a, 0x013e, 0x013c,
+ 0x0144, 0x0148, 0x0146, 0x00f1, 0x00f3, 0x00f2, 0x00f6, 0x00f4,
+ 0x01d2, 0x0151, 0x014d, 0x00f5, 0x0155, 0x0159, 0x0157, 0x015b,
+ 0x015d, 0x0161, 0x015f, 0x0165, 0x0163, 0x00fa, 0x00f9, 0x00fc,
+ 0x00fb, 0x016d, 0x01d4, 0x0171, 0x016b, 0x0173, 0x016f, 0x0169,
+ 0x01d8, 0x01dc, 0x01da, 0x01d6, 0x0175, 0x00fd, 0x00ff, 0x0177,
+ 0x017a, 0x017e, 0x017c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f,
+ 0x4e23, 0x4e24, 0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35,
+ 0x4e40, 0x4e41, 0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63,
+ 0x4e68, 0x4e69, 0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96,
+ 0x4e97, 0x4e9d, 0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb,
+ 0x4ee0, 0x4ee1, 0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5,
+ 0x4efd, 0x4efe, 0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b,
+ 0x4f0c, 0x4f12, 0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31,
+ 0x4f60, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40,
+ 0x4f42, 0x4f48, 0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56,
+ 0x4f58, 0x4f5f, 0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77,
+ 0x4f78, 0x4f79, 0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84,
+ 0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93,
+ 0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7,
+ 0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5,
+ 0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2,
+ 0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff,
+ 0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010,
+ 0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022,
+ 0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041,
+ 0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052,
+ 0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066,
+ 0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083,
+ 0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090, 0x5092, 0x5093,
+ 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f, 0x50a0, 0x50a1,
+ 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba, 0x50bd, 0x50c0,
+ 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0, 0x50d3, 0x50d4,
+ 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4, 0x50e6, 0x50e8,
+ 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe, 0x5103, 0x5106,
+ 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e, 0x50f2, 0x5110,
+ 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e, 0x5123, 0x5127,
+ 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133, 0x5134, 0x5135,
+ 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153, 0x5155, 0x5157,
+ 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183, 0x5184, 0x518b,
+ 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad, 0x51b8, 0x51ba,
+ 0x51bc, 0x51be, 0x51bf, 0x51c2, 0x51c8, 0x51cf, 0x51d1, 0x51d2,
+ 0x51d3, 0x51d5, 0x51d8, 0x51de, 0x51e2, 0x51e5, 0x51ee, 0x51f2,
+ 0x51f3, 0x51f4, 0x51f7, 0x5201, 0x5202, 0x5205, 0x5212, 0x5213,
+ 0x5215, 0x5216, 0x5218, 0x5222, 0x5228, 0x5231, 0x5232, 0x5235,
+ 0x523c, 0x5245, 0x5249, 0x5255, 0x5257, 0x5258, 0x525a, 0x525c,
+ 0x525f, 0x5260, 0x5261, 0x5266, 0x526e, 0x5277, 0x5278, 0x5279,
+ 0x5280, 0x5282, 0x5285, 0x528a, 0x528c, 0x5293, 0x5295, 0x5296,
+ 0x5297, 0x5298, 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7,
+ 0x52af, 0x52b0, 0x52b6, 0x52b7, 0x52b8, 0x52ba, 0x52bb, 0x52bd,
+ 0x52c0, 0x52c4, 0x52c6, 0x52c8, 0x52cc, 0x52cf, 0x52d1, 0x52d4,
+ 0x52d6, 0x52db, 0x52dc, 0x52e1, 0x52e5, 0x52e8, 0x52e9, 0x52ea,
+ 0x52ec, 0x52f0, 0x52f1, 0x52f4, 0x52f6, 0x52f7, 0x5300, 0x5303,
+ 0x530a, 0x530b, 0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c,
+ 0x531e, 0x531f, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c,
+ 0x532d, 0x5330, 0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342,
+ 0x534c, 0x534b, 0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c,
+ 0x536d, 0x5372, 0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e,
+ 0x5393, 0x5394, 0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab,
+ 0x53af, 0x53b2, 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd,
+ 0x53c0, 0x53c5, 0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd,
+ 0x53de, 0x53e0, 0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a,
+ 0x5421, 0x5427, 0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435,
+ 0x5443, 0x5444, 0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464,
+ 0x5466, 0x5467, 0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f,
+ 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495,
+ 0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa,
+ 0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf,
+ 0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef,
+ 0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508,
+ 0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532,
+ 0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549,
+ 0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e,
+ 0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586,
+ 0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597,
+ 0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6,
+ 0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2, 0x55d3, 0x55d7,
+ 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6, 0x55ff, 0x5605,
+ 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610, 0x5611, 0x5612,
+ 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637, 0x5639, 0x563b,
+ 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643, 0x5644, 0x5646,
+ 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e, 0x5660, 0x5661,
+ 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f, 0x5671, 0x5672,
+ 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c, 0x5695, 0x5699,
+ 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7, 0x56a8, 0x56a9,
+ 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7, 0x56be, 0x56c5,
+ 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc, 0x56cd, 0x56d9,
+ 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5, 0x56e6, 0x56e7,
+ 0x56e8, 0x56f1, 0x56eb, 0x56ed, 0x56f6, 0x56f7, 0x5701, 0x5702,
+ 0x5707, 0x570a, 0x570c, 0x5711, 0x5715, 0x571a, 0x571b, 0x571d,
+ 0x5720, 0x5722, 0x5723, 0x5724, 0x5725, 0x5729, 0x572a, 0x572c,
+ 0x572e, 0x572f, 0x5733, 0x5734, 0x573d, 0x573e, 0x573f, 0x5745,
+ 0x5746, 0x574c, 0x574d, 0x5752, 0x5762, 0x5765, 0x5767, 0x5768,
+ 0x576b, 0x576d, 0x576e, 0x576f, 0x5770, 0x5771, 0x5773, 0x5774,
+ 0x5775, 0x5777, 0x5779, 0x577a, 0x577b, 0x577c, 0x577e, 0x5781,
+ 0x5783, 0x578c, 0x5794, 0x5797, 0x5799, 0x579a, 0x579c, 0x579d,
+ 0x579e, 0x579f, 0x57a1, 0x5795, 0x57a7, 0x57a8, 0x57a9, 0x57ac,
+ 0x57b8, 0x57bd, 0x57c7, 0x57c8, 0x57cc, 0x57cf, 0x57d5, 0x57dd,
+ 0x57de, 0x57e4, 0x57e6, 0x57e7, 0x57e9, 0x57ed, 0x57f0, 0x57f5,
+ 0x57f6, 0x57f8, 0x57fd, 0x57fe, 0x57ff, 0x5803, 0x5804, 0x5808,
+ 0x5809, 0x57e1, 0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820,
+ 0x5826, 0x5827, 0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c,
+ 0x584d, 0x584f, 0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867,
+ 0x5868, 0x5878, 0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888,
+ 0x5889, 0x588a, 0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896,
+ 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2,
+ 0x58c4, 0x58bc, 0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2,
+ 0x58d4, 0x58d6, 0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3,
+ 0x5905, 0x5906, 0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641,
+ 0x591d, 0x5921, 0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933,
+ 0x5935, 0x5936, 0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959,
+ 0x595b, 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d,
+ 0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b,
+ 0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7,
+ 0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc,
+ 0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd,
+ 0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1,
+ 0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e,
+ 0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a,
+ 0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50,
+ 0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a,
+ 0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c,
+ 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2,
+ 0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf, 0x5ac4, 0x5ac6,
+ 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5, 0x5aea, 0x5aee,
+ 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08, 0x5b17, 0x5b34,
+ 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d, 0x5b38, 0x5b41,
+ 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68, 0x5b6e, 0x5b6f,
+ 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84, 0x5b86, 0x5b8a,
+ 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96, 0x5ba8, 0x5ba9,
+ 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7, 0x5bba, 0x5bbc,
+ 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9,
+ 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd, 0x5c0c, 0x5c17,
+ 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b, 0x5c2c, 0x5c2e,
+ 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a, 0x5c5c, 0x5c62,
+ 0x5c63, 0x5c67, 0x5c68, 0x5c69, 0x5c6d, 0x5c70, 0x5c74, 0x5c75,
+ 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c87, 0x5c88, 0x5c8a, 0x5c8f,
+ 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0, 0x5ca2, 0x5ca3, 0x5ca6, 0x5caa,
+ 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba, 0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd,
+ 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2, 0x5cf4, 0x5d01, 0x5d06, 0x5d0d,
+ 0x5d12, 0x5d2b, 0x5d23, 0x5d24, 0x5d26, 0x5d27, 0x5d31, 0x5d34,
+ 0x5d39, 0x5d3d, 0x5d3f, 0x5d42, 0x5d43, 0x5d46, 0x5d48, 0x5d55,
+ 0x5d51, 0x5d59, 0x5d4a, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, 0x5d64,
+ 0x5d6a, 0x5d6d, 0x5d70, 0x5d79, 0x5d7a, 0x5d7e, 0x5d7f, 0x5d81,
+ 0x5d83, 0x5d88, 0x5d8a, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d99,
+ 0x5d9b, 0x5d9f, 0x5da0, 0x5da7, 0x5dab, 0x5db0, 0x5db4, 0x5db8,
+ 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb, 0x5dd0, 0x5dce, 0x5dd8, 0x5dd9,
+ 0x5de0, 0x5de4, 0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d,
+ 0x5e12, 0x5e14, 0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28,
+ 0x5e32, 0x5e35, 0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56,
+ 0x5e58, 0x5e5b, 0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c,
+ 0x5e6d, 0x5e6e, 0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4,
+ 0x5ea5, 0x5ea8, 0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe,
+ 0x5ebf, 0x5ec6, 0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4,
+ 0x5ed5, 0x5edc, 0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07,
+ 0x5f08, 0x5f0e, 0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23,
+ 0x5f24, 0x5f28, 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36,
+ 0x5f3b, 0x5f3d, 0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d,
+ 0x5f50, 0x5f54, 0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67,
+ 0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e,
+ 0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7,
+ 0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4,
+ 0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3,
+ 0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec,
+ 0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc,
+ 0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a,
+ 0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048,
+ 0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061,
+ 0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a,
+ 0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2,
+ 0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7, 0x60bb, 0x60be,
+ 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb, 0x60ce, 0x60cf,
+ 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de, 0x60e2, 0x60e5,
+ 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102, 0x6107, 0x610a,
+ 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117,
+ 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b, 0x6130, 0x6131,
+ 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145, 0x6146, 0x6149,
+ 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b, 0x617c, 0x617f,
+ 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d, 0x6192, 0x6193,
+ 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0, 0x61a5, 0x61a8,
+ 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0, 0x61c1, 0x61c2,
+ 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de, 0x61df, 0x61e1,
+ 0x61e2, 0x61e7, 0x61e9, 0x61e5, 0x61ec, 0x61ed, 0x61ef, 0x6201,
+ 0x6203, 0x6204, 0x6207, 0x6213, 0x6215, 0x621c, 0x6220, 0x6222,
+ 0x6223, 0x6227, 0x6229, 0x622b, 0x6239, 0x623d, 0x6242, 0x6243,
+ 0x6244, 0x6246, 0x624c, 0x6250, 0x6251, 0x6252, 0x6254, 0x6256,
+ 0x625a, 0x625c, 0x6264, 0x626d, 0x626f, 0x6273, 0x627a, 0x627d,
+ 0x628d, 0x628e, 0x628f, 0x6290, 0x62a6, 0x62a8, 0x62b3, 0x62b6,
+ 0x62b7, 0x62ba, 0x62be, 0x62bf, 0x62c4, 0x62ce, 0x62d5, 0x62d6,
+ 0x62da, 0x62ea, 0x62f2, 0x62f4, 0x62fc, 0x62fd, 0x6303, 0x6304,
+ 0x630a, 0x630b, 0x630d, 0x6310, 0x6313, 0x6316, 0x6318, 0x6329,
+ 0x632a, 0x632d, 0x6335, 0x6336, 0x6339, 0x633c, 0x6341, 0x6342,
+ 0x6343, 0x6344, 0x6346, 0x634a, 0x634b, 0x634e, 0x6352, 0x6353,
+ 0x6354, 0x6358, 0x635b, 0x6365, 0x6366, 0x636c, 0x636d, 0x6371,
+ 0x6374, 0x6375, 0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384,
+ 0x6387, 0x638a, 0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e,
+ 0x63a4, 0x63a6, 0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5,
+ 0x63c8, 0x63ce, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0,
+ 0x63e5, 0x63ea, 0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9,
+ 0x6409, 0x640a, 0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420,
+ 0x6422, 0x6424, 0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435,
+ 0x643d, 0x643f, 0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454,
+ 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463,
+ 0x646d, 0x6473, 0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f,
+ 0x6490, 0x6491, 0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1,
+ 0x64a3, 0x64a6, 0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf,
+ 0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1,
+ 0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0,
+ 0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509,
+ 0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e,
+ 0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c,
+ 0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f,
+ 0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a,
+ 0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae,
+ 0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce,
+ 0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4,
+ 0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609,
+ 0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d, 0x661e, 0x6621,
+ 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c,
+ 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637, 0x6640, 0x6645,
+ 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657, 0x6658, 0x6659,
+ 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a, 0x666b, 0x666c,
+ 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678, 0x6679, 0x667b,
+ 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690, 0x6692, 0x6699,
+ 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4, 0x66ad, 0x66b1,
+ 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2, 0x66c3, 0x66c8,
+ 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df, 0x66e8, 0x66eb,
+ 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e, 0x6713, 0x6719,
+ 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745, 0x6747, 0x6748,
+ 0x674c, 0x6754, 0x6755, 0x675d, 0x6766, 0x676c, 0x676e, 0x6774,
+ 0x6776, 0x677b, 0x6781, 0x6784, 0x678e, 0x678f, 0x6791, 0x6793,
+ 0x6796, 0x6798, 0x6799, 0x679b, 0x67b0, 0x67b1, 0x67b2, 0x67b5,
+ 0x67bb, 0x67bc, 0x67bd, 0x67f9, 0x67c0, 0x67c2, 0x67c3, 0x67c5,
+ 0x67c8, 0x67c9, 0x67d2, 0x67d7, 0x67d9, 0x67dc, 0x67e1, 0x67e6,
+ 0x67f0, 0x67f2, 0x67f6, 0x67f7, 0x6852, 0x6814, 0x6819, 0x681d,
+ 0x681f, 0x6828, 0x6827, 0x682c, 0x682d, 0x682f, 0x6830, 0x6831,
+ 0x6833, 0x683b, 0x683f, 0x6844, 0x6845, 0x684a, 0x684c, 0x6855,
+ 0x6857, 0x6858, 0x685b, 0x686b, 0x686e, 0x686f, 0x6870, 0x6871,
+ 0x6872, 0x6875, 0x6879, 0x687a, 0x687b, 0x687c, 0x6882, 0x6884,
+ 0x6886, 0x6888, 0x6896, 0x6898, 0x689a, 0x689c, 0x68a1, 0x68a3,
+ 0x68a5, 0x68a9, 0x68aa, 0x68ae, 0x68b2, 0x68bb, 0x68c5, 0x68c8,
+ 0x68cc, 0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc,
+ 0x68dd, 0x68e5, 0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0,
+ 0x68f1, 0x68f5, 0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909,
+ 0x690a, 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933,
+ 0x6935, 0x6938, 0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957,
+ 0x695b, 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c,
+ 0x6970, 0x6971, 0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d,
+ 0x6992, 0x6996, 0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab,
+ 0x69ad, 0x69af, 0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8,
+ 0x69d1, 0x69d6, 0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1,
+ 0x69f3, 0x69f5, 0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11,
+ 0x6a15, 0x6a1a, 0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32,
+ 0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49,
+ 0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b,
+ 0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83,
+ 0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e,
+ 0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd,
+ 0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4,
+ 0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0,
+ 0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07,
+ 0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24,
+ 0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f,
+ 0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60,
+ 0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d, 0x6b7e, 0x6b82,
+ 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3, 0x6ba8,
+ 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8, 0x6bb9, 0x6bbd,
+ 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6, 0x6bda, 0x6be1,
+ 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7, 0x6bf9, 0x6bff,
+ 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e, 0x6c10, 0x6c12,
+ 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c, 0x6c2e, 0x6c33,
+ 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a, 0x6c4b, 0x6c4d,
+ 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c, 0x6c6b, 0x6c6d,
+ 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b, 0x6c85, 0x6c86,
+ 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98, 0x6c9c, 0x6c9f,
+ 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd, 0x6ccf, 0x6cd0,
+ 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6, 0x6cda, 0x6cdc, 0x6ce0, 0x6ce7,
+ 0x6ce9, 0x6ceb, 0x6cec, 0x6cee, 0x6cf2, 0x6cf4, 0x6d04, 0x6d07,
+ 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11, 0x6d13, 0x6d1a, 0x6d26, 0x6d27,
+ 0x6d28, 0x6c67, 0x6d2e, 0x6d2f, 0x6d31, 0x6d39, 0x6d3c, 0x6d3f,
+ 0x6d57, 0x6d5e, 0x6d5f, 0x6d61, 0x6d65, 0x6d67, 0x6d6f, 0x6d70,
+ 0x6d7c, 0x6d82, 0x6d87, 0x6d91, 0x6d92, 0x6d94, 0x6d96, 0x6d97,
+ 0x6d98, 0x6daa, 0x6dac, 0x6db4, 0x6db7, 0x6db9, 0x6dbd, 0x6dbf,
+ 0x6dc4, 0x6dc8, 0x6dca, 0x6dce, 0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd,
+ 0x6ddf, 0x6de0, 0x6de2, 0x6de5, 0x6de9, 0x6def, 0x6df0, 0x6df4,
+ 0x6df6, 0x6dfc, 0x6e00, 0x6e04, 0x6e1e, 0x6e22, 0x6e27, 0x6e32,
+ 0x6e36, 0x6e39, 0x6e3b, 0x6e3c, 0x6e44, 0x6e45, 0x6e48, 0x6e49,
+ 0x6e4b, 0x6e4f, 0x6e51, 0x6e52, 0x6e53, 0x6e54, 0x6e57, 0x6e5c,
+ 0x6e5d, 0x6e5e, 0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d,
+ 0x6e8d, 0x6e93, 0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1,
+ 0x6eb3, 0x6ebb, 0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8,
+ 0x6eca, 0x6ecd, 0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9,
+ 0x6efb, 0x6efd, 0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16,
+ 0x6f18, 0x6f1a, 0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30,
+ 0x6f33, 0x6f36, 0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52,
+ 0x6f53, 0x6f57, 0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62,
+ 0x6f68, 0x6f6c, 0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b,
+ 0x6f8c, 0x6f8d, 0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a,
+ 0x6f9f, 0x6fa0, 0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf,
+ 0x6fb0, 0x6fb5, 0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca,
+ 0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc,
+ 0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020,
+ 0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044,
+ 0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e,
+ 0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e,
+ 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098,
+ 0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca,
+ 0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4,
+ 0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c,
+ 0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131,
+ 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150,
+ 0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160, 0x7168, 0x7179,
+ 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a, 0x719b, 0x71a0,
+ 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba, 0x71bf, 0x71c0,
+ 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6, 0x71d9, 0x71da,
+ 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208, 0x7209, 0x7213,
+ 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b, 0x722f, 0x7234,
+ 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245, 0x724e, 0x724f,
+ 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c, 0x725e, 0x7260,
+ 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271, 0x7277, 0x7278,
+ 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d, 0x728e, 0x7293,
+ 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4, 0x72be, 0x72c1,
+ 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8, 0x72df, 0x72e5,
+ 0x72f3, 0x72f4, 0x72fa, 0x72fb, 0x72fe, 0x7302, 0x7304, 0x7305,
+ 0x7307, 0x730b, 0x730d, 0x7312, 0x7313, 0x7318, 0x7319, 0x731e,
+ 0x7322, 0x7324, 0x7327, 0x7328, 0x732c, 0x7331, 0x7332, 0x7335,
+ 0x733a, 0x733b, 0x733d, 0x7343, 0x734d, 0x7350, 0x7352, 0x7356,
+ 0x7358, 0x735d, 0x735e, 0x735f, 0x7360, 0x7366, 0x7367, 0x7369,
+ 0x736b, 0x736c, 0x736e, 0x736f, 0x7371, 0x7377, 0x7379, 0x737c,
+ 0x7380, 0x7381, 0x7383, 0x7385, 0x7386, 0x738e, 0x7390, 0x7393,
+ 0x7395, 0x7397, 0x7398, 0x739c, 0x739e, 0x739f, 0x73a0, 0x73a2,
+ 0x73a5, 0x73a6, 0x73aa, 0x73ab, 0x73ad, 0x73b5, 0x73b7, 0x73b9,
+ 0x73bc, 0x73bd, 0x73bf, 0x73c5, 0x73c6, 0x73c9, 0x73cb, 0x73cc,
+ 0x73cf, 0x73d2, 0x73d3, 0x73d6, 0x73d9, 0x73dd, 0x73e1, 0x73e3,
+ 0x73e6, 0x73e7, 0x73e9, 0x73f4, 0x73f5, 0x73f7, 0x73f9, 0x73fa,
+ 0x73fb, 0x73fd, 0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a,
+ 0x7411, 0x741a, 0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a,
+ 0x742b, 0x742c, 0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439,
+ 0x7440, 0x7443, 0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451,
+ 0x7452, 0x7457, 0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b,
+ 0x746d, 0x746e, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486,
+ 0x7487, 0x7489, 0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499,
+ 0x749a, 0x749c, 0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8,
+ 0x74a9, 0x74aa, 0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5,
+ 0x74b9, 0x74bb, 0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3,
+ 0x74d8, 0x74da, 0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea,
+ 0x74eb, 0x74ef, 0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506,
+ 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529,
+ 0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540,
+ 0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e,
+ 0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c,
+ 0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595,
+ 0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0,
+ 0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc,
+ 0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef,
+ 0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608,
+ 0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619,
+ 0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629,
+ 0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639, 0x763a, 0x763c,
+ 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645, 0x7649, 0x764b,
+ 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d, 0x766e, 0x766f,
+ 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d, 0x7695, 0x769b,
+ 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3, 0x76a4, 0x76a5,
+ 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd, 0x76c1, 0x76c5,
+ 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9, 0x76e0, 0x76e6,
+ 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9, 0x76fc, 0x7700,
+ 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715, 0x7717, 0x7719,
+ 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e, 0x772f, 0x7734,
+ 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742, 0x7745, 0x7746,
+ 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756, 0x7757, 0x775c,
+ 0x775e, 0x775f, 0x7760, 0x7762, 0x7764, 0x7767, 0x776a, 0x776c,
+ 0x7770, 0x7772, 0x7773, 0x7774, 0x777a, 0x777d, 0x7780, 0x7784,
+ 0x778c, 0x778d, 0x7794, 0x7795, 0x7796, 0x779a, 0x779f, 0x77a2,
+ 0x77a7, 0x77aa, 0x77ae, 0x77af, 0x77b1, 0x77b5, 0x77be, 0x77c3,
+ 0x77c9, 0x77d1, 0x77d2, 0x77d5, 0x77d9, 0x77de, 0x77df, 0x77e0,
+ 0x77e4, 0x77e6, 0x77ea, 0x77ec, 0x77f0, 0x77f1, 0x77f4, 0x77f8,
+ 0x77fb, 0x7805, 0x7806, 0x7809, 0x780d, 0x780e, 0x7811, 0x781d,
+ 0x7821, 0x7822, 0x7823, 0x782d, 0x782e, 0x7830, 0x7835, 0x7837,
+ 0x7843, 0x7844, 0x7847, 0x7848, 0x784c, 0x784e, 0x7852, 0x785c,
+ 0x785e, 0x7860, 0x7861, 0x7863, 0x7864, 0x7868, 0x786a, 0x786e,
+ 0x787a, 0x787e, 0x788a, 0x788f, 0x7894, 0x7898, 0x78a1, 0x789d,
+ 0x789e, 0x789f, 0x78a4, 0x78a8, 0x78ac, 0x78ad, 0x78b0, 0x78b1,
+ 0x78b2, 0x78b3, 0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9,
+ 0x78cc, 0x78ce, 0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db,
+ 0x78df, 0x78e0, 0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900,
+ 0x78f6, 0x78f7, 0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910,
+ 0x791a, 0x791c, 0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929,
+ 0x792d, 0x7931, 0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944,
+ 0x7945, 0x7946, 0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958,
+ 0x795b, 0x795c, 0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b,
+ 0x797c, 0x797e, 0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995,
+ 0x7996, 0x7998, 0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab,
+ 0x79af, 0x79b1, 0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7,
+ 0x79c8, 0x79ca, 0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de,
+ 0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8,
+ 0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11,
+ 0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f,
+ 0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45,
+ 0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d,
+ 0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78,
+ 0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90,
+ 0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5,
+ 0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1,
+ 0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb,
+ 0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29,
+ 0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30, 0x7b31, 0x7b34,
+ 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e, 0x7b55, 0x7b60,
+ 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f, 0x7b72, 0x7b73,
+ 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91, 0x7b96, 0x7b9b,
+ 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0, 0x7bb2, 0x7bb5,
+ 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2, 0x7bc5, 0x7bc8,
+ 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda, 0x7bdb, 0x7be8,
+ 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfc,
+ 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06, 0x7c09, 0x7c0b,
+ 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20, 0x7c25, 0x7c26,
+ 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36, 0x7c39, 0x7c3a,
+ 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53, 0x7c59, 0x7c5a,
+ 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, 0x7c61, 0x7c63, 0x7c67, 0x7c69,
+ 0x7c6d, 0x7c6e, 0x7c70, 0x7c72, 0x7c79, 0x7c7c, 0x7c7d, 0x7c86,
+ 0x7c87, 0x7c8f, 0x7c94, 0x7c9e, 0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6,
+ 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc, 0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8,
+ 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3, 0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9,
+ 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9, 0x7ceb, 0x7cf5, 0x7d03, 0x7d07,
+ 0x7d08, 0x7d09, 0x7d0f, 0x7d11, 0x7d12, 0x7d13, 0x7d16, 0x7d1d,
+ 0x7d1e, 0x7d23, 0x7d26, 0x7d2a, 0x7d2d, 0x7d31, 0x7d3c, 0x7d3d,
+ 0x7d3e, 0x7d40, 0x7d41, 0x7d47, 0x7d48, 0x7d4d, 0x7d51, 0x7d53,
+ 0x7d57, 0x7d59, 0x7d5a, 0x7d5c, 0x7d5d, 0x7d65, 0x7d67, 0x7d6a,
+ 0x7d70, 0x7d78, 0x7d7a, 0x7d7b, 0x7d7f, 0x7d81, 0x7d82, 0x7d83,
+ 0x7d85, 0x7d86, 0x7d88, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d91, 0x7d96,
+ 0x7d97, 0x7d9d, 0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6,
+ 0x7db7, 0x7db9, 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc,
+ 0x7dcd, 0x7dce, 0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6,
+ 0x7dea, 0x7deb, 0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa,
+ 0x7e08, 0x7e10, 0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20,
+ 0x7e27, 0x7e28, 0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f,
+ 0x7e44, 0x7e45, 0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f,
+ 0x7e61, 0x7e62, 0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78,
+ 0x7e7e, 0x7e81, 0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95,
+ 0x7e98, 0x7e9a, 0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e,
+ 0x7f3f, 0x7f43, 0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b,
+ 0x7f5c, 0x7f5d, 0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d,
+ 0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f,
+ 0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6,
+ 0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8,
+ 0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec,
+ 0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007,
+ 0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014,
+ 0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c,
+ 0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c,
+ 0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071,
+ 0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7,
+ 0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4,
+ 0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee, 0x80f0, 0x80f2,
+ 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103, 0x810b, 0x8116,
+ 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124, 0x8127, 0x812c,
+ 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147, 0x814a, 0x814c,
+ 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168, 0x8169, 0x816d,
+ 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185, 0x8186, 0x818b,
+ 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2, 0x81ae, 0x81b2,
+ 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca, 0x81ce, 0x81cf,
+ 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1, 0x81e4, 0x81eb,
+ 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f8, 0x81f9,
+ 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213, 0x8214, 0x8219,
+ 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232, 0x8234, 0x823a,
+ 0x8243, 0x8244, 0x8245, 0x8246, 0x824b, 0x824e, 0x824f, 0x8251,
+ 0x8256, 0x825c, 0x8260, 0x8263, 0x8267, 0x826d, 0x8274, 0x827b,
+ 0x827d, 0x827f, 0x8280, 0x8281, 0x8283, 0x8284, 0x8287, 0x8289,
+ 0x828a, 0x828e, 0x8291, 0x8294, 0x8296, 0x8298, 0x829a, 0x829b,
+ 0x82a0, 0x82a1, 0x82a3, 0x82a4, 0x82a7, 0x82a8, 0x82a9, 0x82aa,
+ 0x82ae, 0x82b0, 0x82b2, 0x82b4, 0x82b7, 0x82ba, 0x82bc, 0x82be,
+ 0x82bf, 0x82c6, 0x82d0, 0x82d5, 0x82da, 0x82e0, 0x82e2, 0x82e4,
+ 0x82e8, 0x82ea, 0x82ed, 0x82ef, 0x82f6, 0x82f7, 0x82fd, 0x82fe,
+ 0x8300, 0x8301, 0x8307, 0x8308, 0x830a, 0x830b, 0x8354, 0x831b,
+ 0x831d, 0x831e, 0x831f, 0x8321, 0x8322, 0x832c, 0x832d, 0x832e,
+ 0x8330, 0x8333, 0x8337, 0x833a, 0x833c, 0x833d, 0x8342, 0x8343,
+ 0x8344, 0x8347, 0x834d, 0x834e, 0x8351, 0x8355, 0x8356, 0x8357,
+ 0x8370, 0x8378, 0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386,
+ 0x838d, 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c,
+ 0x839d, 0x83a6, 0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0,
+ 0x83c7, 0x83c9, 0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353,
+ 0x83e8, 0x83ea, 0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406,
+ 0x840a, 0x840f, 0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439,
+ 0x8445, 0x8447, 0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452,
+ 0x8456, 0x8458, 0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465,
+ 0x8467, 0x846a, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c,
+ 0x847d, 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6,
+ 0x84a8, 0x84a9, 0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd,
+ 0x84be, 0x84c0, 0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3,
+ 0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7,
+ 0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c,
+ 0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525,
+ 0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f,
+ 0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559,
+ 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564,
+ 0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581,
+ 0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598,
+ 0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6,
+ 0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7,
+ 0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0,
+ 0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc, 0x85ff, 0x8600,
+ 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611, 0x8612, 0x8618,
+ 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629, 0x8636, 0x8638,
+ 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646, 0x8652, 0x8653,
+ 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660, 0x8661, 0x8662,
+ 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675, 0x8676, 0x8677,
+ 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a, 0x869c, 0x86a1,
+ 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3, 0x86b4, 0x86b5,
+ 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1, 0x86c3, 0x86c5,
+ 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc, 0x86e0, 0x86e3,
+ 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd, 0x8704, 0x8705,
+ 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713, 0x8714, 0x8719,
+ 0x871e, 0x871f, 0x8721, 0x8723, 0x8728, 0x872e, 0x872f, 0x8731,
+ 0x8732, 0x8739, 0x873a, 0x873c, 0x873d, 0x873e, 0x8740, 0x8743,
+ 0x8745, 0x874d, 0x8758, 0x875d, 0x8761, 0x8764, 0x8765, 0x876f,
+ 0x8771, 0x8772, 0x877b, 0x8783, 0x8784, 0x8785, 0x8786, 0x8787,
+ 0x8788, 0x8789, 0x878b, 0x878c, 0x8790, 0x8793, 0x8795, 0x8797,
+ 0x8798, 0x8799, 0x879e, 0x87a0, 0x87a3, 0x87a7, 0x87ac, 0x87ad,
+ 0x87ae, 0x87b1, 0x87b5, 0x87be, 0x87bf, 0x87c1, 0x87c8, 0x87c9,
+ 0x87ca, 0x87ce, 0x87d5, 0x87d6, 0x87d9, 0x87da, 0x87dc, 0x87df,
+ 0x87e2, 0x87e3, 0x87e4, 0x87ea, 0x87eb, 0x87ed, 0x87f1, 0x87f3,
+ 0x87f8, 0x87fa, 0x87ff, 0x8801, 0x8803, 0x8806, 0x8809, 0x880a,
+ 0x880b, 0x8810, 0x8819, 0x8812, 0x8813, 0x8814, 0x8818, 0x881a,
+ 0x881b, 0x881c, 0x881e, 0x881f, 0x8828, 0x882d, 0x882e, 0x8830,
+ 0x8832, 0x8835, 0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848,
+ 0x8849, 0x884a, 0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858,
+ 0x885a, 0x885c, 0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879,
+ 0x887b, 0x8880, 0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0,
+ 0x88a8, 0x88aa, 0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb,
+ 0x88cc, 0x88cd, 0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de,
+ 0x88e7, 0x88ef, 0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906,
+ 0x890d, 0x890e, 0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a,
+ 0x891c, 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932,
+ 0x8935, 0x8939, 0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946,
+ 0x8949, 0x894f, 0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961,
+ 0x8962, 0x8963, 0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a,
+ 0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995,
+ 0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5,
+ 0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8,
+ 0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9,
+ 0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12,
+ 0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b,
+ 0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43,
+ 0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57,
+ 0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76,
+ 0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83,
+ 0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99,
+ 0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3, 0x8ab6, 0x8ab7,
+ 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9, 0x8aca, 0x8ad1,
+ 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf, 0x8aec, 0x8af0,
+ 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05, 0x8b06, 0x8b0b,
+ 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d, 0x8b30, 0x8b37,
+ 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0x8b48, 0x8b52,
+ 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63, 0x8b6d, 0x8b76,
+ 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84, 0x8b85, 0x8b8b,
+ 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e, 0x8b9f, 0x8c38,
+ 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49, 0x8c4b, 0x8c4f,
+ 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b, 0x8c5d, 0x8c59,
+ 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d, 0x8c73, 0x8c75,
+ 0x8c76, 0x8c7b, 0x8c7e, 0x8c86, 0x8c87, 0x8c8b, 0x8c90, 0x8c92,
+ 0x8c93, 0x8c99, 0x8c9b, 0x8c9c, 0x8ca4, 0x8cb9, 0x8cba, 0x8cc5,
+ 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf, 0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd,
+ 0x8ce1, 0x8ce8, 0x8cec, 0x8cef, 0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7,
+ 0x8cf8, 0x8cfe, 0x8cff, 0x8d01, 0x8d03, 0x8d09, 0x8d12, 0x8d17,
+ 0x8d1b, 0x8d65, 0x8d69, 0x8d6c, 0x8d6e, 0x8d7f, 0x8d82, 0x8d84,
+ 0x8d88, 0x8d8d, 0x8d90, 0x8d91, 0x8d95, 0x8d9e, 0x8d9f, 0x8da0,
+ 0x8da6, 0x8dab, 0x8dac, 0x8daf, 0x8db2, 0x8db5, 0x8db7, 0x8db9,
+ 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dca, 0x8dce,
+ 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7, 0x8dd9, 0x8de4, 0x8de5, 0x8de7,
+ 0x8dec, 0x8df0, 0x8dbc, 0x8df1, 0x8df2, 0x8df4, 0x8dfd, 0x8e01,
+ 0x8e04, 0x8e05, 0x8e06, 0x8e0b, 0x8e11, 0x8e14, 0x8e16, 0x8e20,
+ 0x8e21, 0x8e22, 0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36,
+ 0x8e37, 0x8e38, 0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d,
+ 0x8e4e, 0x8e4f, 0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61,
+ 0x8e62, 0x8e69, 0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79,
+ 0x8e7a, 0x8e7b, 0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95,
+ 0x8e9a, 0x8e9b, 0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead,
+ 0x8eae, 0x8eb3, 0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3,
+ 0x8ec4, 0x8ec7, 0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee,
+ 0x8ef0, 0x8ef1, 0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02,
+ 0x8f07, 0x8f08, 0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e,
+ 0x8f20, 0x8f21, 0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d,
+ 0x8f2e, 0x8f34, 0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41,
+ 0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55,
+ 0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4,
+ 0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1,
+ 0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5,
+ 0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6,
+ 0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b,
+ 0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034,
+ 0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062,
+ 0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088,
+ 0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099,
+ 0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3,
+ 0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3, 0x90c4, 0x90c5,
+ 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9, 0x90dc, 0x90dd,
+ 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef, 0x90f0, 0x90f4,
+ 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106, 0x9108, 0x910d,
+ 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a, 0x911c, 0x911e,
+ 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129, 0x912e, 0x912f,
+ 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a, 0x913c, 0x913d,
+ 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157, 0x9159, 0x915a,
+ 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174, 0x9179, 0x917a,
+ 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a, 0x918e, 0x9191,
+ 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1, 0x91a6, 0x91a8,
+ 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b6,
+ 0x91bb, 0x91bc, 0x91bd, 0x91bf, 0x91c2, 0x91c3, 0x91c5, 0x91d3,
+ 0x91d4, 0x91d7, 0x91d9, 0x91da, 0x91de, 0x91e4, 0x91e5, 0x91e9,
+ 0x91ea, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f7,
+ 0x91f9, 0x91fb, 0x91fd, 0x9200, 0x9201, 0x9204, 0x9205, 0x9206,
+ 0x9207, 0x9209, 0x920a, 0x920c, 0x9210, 0x9212, 0x9213, 0x9216,
+ 0x9218, 0x921c, 0x921d, 0x9223, 0x9224, 0x9225, 0x9226, 0x9228,
+ 0x922e, 0x922f, 0x9230, 0x9233, 0x9235, 0x9236, 0x9238, 0x9239,
+ 0x923a, 0x923c, 0x923e, 0x9240, 0x9242, 0x9243, 0x9246, 0x9247,
+ 0x924a, 0x924d, 0x924e, 0x924f, 0x9251, 0x9258, 0x9259, 0x925c,
+ 0x925d, 0x9260, 0x9261, 0x9265, 0x9267, 0x9268, 0x9269, 0x926e,
+ 0x926f, 0x9270, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927b,
+ 0x927c, 0x927d, 0x927f, 0x9288, 0x9289, 0x928a, 0x928d, 0x928e,
+ 0x9292, 0x9297, 0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7,
+ 0x92a8, 0x92ab, 0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb,
+ 0x92bc, 0x92bd, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5,
+ 0x92c6, 0x92c7, 0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0,
+ 0x92d3, 0x92d5, 0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df,
+ 0x92e0, 0x92e1, 0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee,
+ 0x92f0, 0x92f9, 0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d,
+ 0x9311, 0x9314, 0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321,
+ 0x9324, 0x9325, 0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336,
+ 0x9337, 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355,
+ 0x9357, 0x9358, 0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369,
+ 0x936a, 0x936d, 0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376,
+ 0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a,
+ 0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e,
+ 0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5,
+ 0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7,
+ 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc,
+ 0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8,
+ 0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409,
+ 0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e,
+ 0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d,
+ 0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c,
+ 0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f,
+ 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579, 0x957e, 0x9584,
+ 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e, 0x959f, 0x95a1,
+ 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6, 0x95ba, 0x95bd,
+ 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0, 0x95d1, 0x95d2,
+ 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e4,
+ 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625, 0x9626, 0x962c,
+ 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a, 0x963c, 0x963d,
+ 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658, 0x9661, 0x966e,
+ 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681, 0x9682, 0x9683,
+ 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d, 0x969f, 0x96a4,
+ 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3, 0x96ba, 0x96ca,
+ 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de, 0x96df, 0x96e9,
+ 0x96ef, 0x96f1, 0x96fa, 0x9702, 0x9703, 0x9705, 0x9709, 0x971a,
+ 0x971b, 0x971d, 0x9721, 0x9722, 0x9723, 0x9728, 0x9731, 0x9733,
+ 0x9741, 0x9743, 0x974a, 0x974e, 0x974f, 0x9755, 0x9757, 0x9758,
+ 0x975a, 0x975b, 0x9763, 0x9767, 0x976a, 0x976e, 0x9773, 0x9776,
+ 0x9777, 0x9778, 0x977b, 0x977d, 0x977f, 0x9780, 0x9789, 0x9795,
+ 0x9796, 0x9797, 0x9799, 0x979a, 0x979e, 0x979f, 0x97a2, 0x97ac,
+ 0x97ae, 0x97b1, 0x97b2, 0x97b5, 0x97b6, 0x97b8, 0x97b9, 0x97ba,
+ 0x97bc, 0x97be, 0x97bf, 0x97c1, 0x97c4, 0x97c5, 0x97c7, 0x97c9,
+ 0x97ca, 0x97cc, 0x97cd, 0x97ce, 0x97d0, 0x97d1, 0x97d4, 0x97d7,
+ 0x97d8, 0x97d9, 0x97dd, 0x97de, 0x97e0, 0x97db, 0x97e1, 0x97e4,
+ 0x97ef, 0x97f1, 0x97f4, 0x97f7, 0x97f8, 0x97fa, 0x9807, 0x980a,
+ 0x9819, 0x980d, 0x980e, 0x9814, 0x9816, 0x981c, 0x981e, 0x9820,
+ 0x9823, 0x9826, 0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833,
+ 0x9835, 0x9825, 0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852,
+ 0x9853, 0x9856, 0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865,
+ 0x9866, 0x986a, 0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4,
+ 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8,
+ 0x98cc, 0x98e1, 0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3,
+ 0x98f6, 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917,
+ 0x991a, 0x991b, 0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b,
+ 0x9931, 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b,
+ 0x993c, 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e,
+ 0x9954, 0x9958, 0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960,
+ 0x999b, 0x999d, 0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5,
+ 0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4,
+ 0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec,
+ 0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03,
+ 0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20,
+ 0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35,
+ 0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c,
+ 0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae,
+ 0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe,
+ 0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2,
+ 0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5,
+ 0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa,
+ 0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03, 0x9b04, 0x9b05,
+ 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, 0x9b12,
+ 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26, 0x9b2b, 0x9b2d,
+ 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a, 0x9b3d, 0x9b48,
+ 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b, 0x9b5e, 0x9b61,
+ 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d,
+ 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79, 0x9b7f, 0x9b80,
+ 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8d,
+ 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e, 0x9ba6, 0x9ba7,
+ 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7, 0x9bb8, 0x9bbb,
+ 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8, 0x9bce, 0x9bd0,
+ 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7, 0x9bea, 0x9beb,
+ 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfd, 0x9bff,
+ 0x9c00, 0x9c02, 0x9c0b, 0x9c0f, 0x9c11, 0x9c16, 0x9c18, 0x9c19,
+ 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22, 0x9c23, 0x9c26, 0x9c27, 0x9c28,
+ 0x9c29, 0x9c2a, 0x9c31, 0x9c35, 0x9c36, 0x9c37, 0x9c3d, 0x9c41,
+ 0x9c43, 0x9c44, 0x9c45, 0x9c49, 0x9c4a, 0x9c4e, 0x9c4f, 0x9c50,
+ 0x9c53, 0x9c54, 0x9c56, 0x9c58, 0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f,
+ 0x9c63, 0x9c69, 0x9c6a, 0x9c5c, 0x9c6b, 0x9c68, 0x9c6e, 0x9c70,
+ 0x9c72, 0x9c75, 0x9c77, 0x9c7b, 0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9,
+ 0x9d0b, 0x9d02, 0x9d11, 0x9d17, 0x9d18, 0x9d1c, 0x9d1d, 0x9d1e,
+ 0x9d2f, 0x9d30, 0x9d32, 0x9d33, 0x9d34, 0x9d3a, 0x9d3c, 0x9d45,
+ 0x9d3d, 0x9d42, 0x9d43, 0x9d47, 0x9d4a, 0x9d53, 0x9d54, 0x9d5f,
+ 0x9d63, 0x9d62, 0x9d65, 0x9d69, 0x9d6a, 0x9d6b, 0x9d70, 0x9d76,
+ 0x9d77, 0x9d7b, 0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a,
+ 0x9d8d, 0x9d8e, 0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98,
+ 0x9da1, 0x9daa, 0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc,
+ 0x9dbf, 0x9dc3, 0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6,
+ 0x9dd7, 0x9dda, 0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9,
+ 0x9deb, 0x9dee, 0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02,
+ 0x9e07, 0x9e0e, 0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19,
+ 0x9e1c, 0x9e1d, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83,
+ 0x9e84, 0x9e85, 0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b,
+ 0x9e9e, 0x9ea4, 0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3,
+ 0x9eb4, 0x9eb5, 0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4,
+ 0x9ee7, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5,
+ 0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11,
+ 0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f,
+ 0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34,
+ 0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43,
+ 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57,
+ 0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e,
+ 0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f,
+ 0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1,
+ 0x9fa2, 0x9fa3, 0x9fa5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x2003, 0x3001, 0x3002, 0xff0c,
+ 0xff0e, 0x30fb, 0xff1a, 0xff1b, 0xff1f, 0xff01, 0x309b, 0x309c
+};
+
+
+const unichar_t unicode_from_big5[] = {
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2022, 0xff1b, 0xff1a,
+ 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xff64, 0xfe52,
+ 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31,
+ 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35,
+ 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39,
+ 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d,
+ 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41,
+ 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c,
+ 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a,
+ 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce,
+ 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc,
+ 0x32a3, 0x2105, 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a,
+ 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b,
+ 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d,
+ 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63,
+ 0xfe64, 0xfe65, 0xfe66, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220,
+ 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234,
+ 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192,
+ 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff3c, 0x2215, 0xfe68, 0xff04, 0x00a5, 0x3012, 0x00a2, 0x00a3,
+ 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5,
+ 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4,
+ 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7,
+ 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
+ 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a,
+ 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500,
+ 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561,
+ 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10,
+ 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
+ 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166,
+ 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025,
+ 0x3026, 0x3027, 0x3028, 0x3029, 0x3038, 0x5344, 0x303a, 0xff21,
+ 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29,
+ 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31,
+ 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39,
+ 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f,
+ 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394,
+ 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c,
+ 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5,
+ 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4,
+ 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
+ 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5,
+ 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108,
+ 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116,
+ 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e,
+ 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126,
+ 0x3127, 0x3128, 0x3129, 0x02d9, 0x0000, 0x02ca, 0x02c7, 0x02cb,
+ 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407,
+ 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f,
+ 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417,
+ 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f,
+ 0x2421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c,
+ 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b,
+ 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a,
+ 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e,
+ 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f,
+ 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8,
+ 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2,
+ 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b,
+ 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1,
+ 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4,
+ 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6,
+ 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339,
+ 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd,
+ 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24,
+ 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3,
+ 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4,
+ 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79,
+ 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236,
+ 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e,
+ 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4,
+ 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9,
+ 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0xe05b, 0x5306, 0x5317,
+ 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e,
+ 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8,
+ 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1,
+ 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c,
+ 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01,
+ 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251,
+ 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63,
+ 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af,
+ 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529,
+ 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf,
+ 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb,
+ 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6,
+ 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10,
+ 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd,
+ 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216,
+ 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f,
+ 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d,
+ 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd,
+ 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919,
+ 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979,
+ 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89,
+ 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d,
+ 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec,
+ 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735,
+ 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f,
+ 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070,
+ 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a,
+ 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089,
+ 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b,
+ 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863,
+ 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57,
+ 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d,
+ 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48,
+ 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225,
+ 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac,
+ 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426,
+ 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b,
+ 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436,
+ 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea,
+ 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef,
+ 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996,
+ 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a,
+ 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f,
+ 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f,
+ 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77,
+ 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8,
+ 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276,
+ 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292,
+ 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539,
+ 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750,
+ 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81,
+ 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70,
+ 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e,
+ 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076,
+ 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2,
+ 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3,
+ 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093,
+ 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46,
+ 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b,
+ 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2,
+ 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e,
+ 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b,
+ 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f,
+ 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88,
+ 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154,
+ 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd,
+ 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241,
+ 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377,
+ 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492,
+ 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462,
+ 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a,
+ 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947,
+ 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae,
+ 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af,
+ 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a,
+ 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1,
+ 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78,
+ 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27,
+ 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd,
+ 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a,
+ 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215,
+ 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf,
+ 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb,
+ 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd,
+ 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac,
+ 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c,
+ 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c,
+ 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f,
+ 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a,
+ 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3,
+ 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe,
+ 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9,
+ 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1,
+ 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d,
+ 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7,
+ 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d,
+ 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd,
+ 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa,
+ 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2,
+ 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5,
+ 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f,
+ 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0,
+ 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce,
+ 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1,
+ 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae,
+ 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd,
+ 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0,
+ 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192,
+ 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b,
+ 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b,
+ 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8,
+ 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9,
+ 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2,
+ 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950,
+ 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea,
+ 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4,
+ 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9,
+ 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6,
+ 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b,
+ 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e,
+ 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c,
+ 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc,
+ 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545,
+ 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f,
+ 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1,
+ 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef,
+ 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de,
+ 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83,
+ 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32,
+ 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39,
+ 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab,
+ 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4,
+ 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7,
+ 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d,
+ 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2,
+ 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3,
+ 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc,
+ 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949,
+ 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f,
+ 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09,
+ 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3,
+ 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd,
+ 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6,
+ 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301,
+ 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306,
+ 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4,
+ 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4,
+ 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1,
+ 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c,
+ 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8,
+ 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d,
+ 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006,
+ 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014,
+ 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee,
+ 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5,
+ 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254,
+ 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8,
+ 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa,
+ 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2,
+ 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a,
+ 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20,
+ 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0,
+ 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04,
+ 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8,
+ 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab,
+ 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f,
+ 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096,
+ 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355,
+ 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a,
+ 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1,
+ 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645,
+ 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848,
+ 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817,
+ 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843,
+ 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7,
+ 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95,
+ 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a,
+ 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9,
+ 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8,
+ 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de,
+ 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7,
+ 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b,
+ 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728,
+ 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950,
+ 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4,
+ 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88,
+ 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a,
+ 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d,
+ 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006,
+ 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102,
+ 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108,
+ 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210,
+ 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354,
+ 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332,
+ 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3,
+ 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18,
+ 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16,
+ 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77,
+ 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7,
+ 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095,
+ 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd,
+ 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2,
+ 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a,
+ 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065,
+ 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f,
+ 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2,
+ 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340,
+ 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e,
+ 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f,
+ 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541,
+ 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806,
+ 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920,
+ 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5,
+ 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60,
+ 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22,
+ 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2,
+ 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5,
+ 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97,
+ 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3,
+ 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5,
+ 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248,
+ 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367,
+ 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b,
+ 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f,
+ 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551,
+ 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c,
+ 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a,
+ 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881,
+ 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7,
+ 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894,
+ 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2,
+ 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb,
+ 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5,
+ 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea,
+ 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf,
+ 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d,
+ 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405,
+ 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570,
+ 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4,
+ 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a,
+ 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92,
+ 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e,
+ 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e,
+ 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42,
+ 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2,
+ 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129,
+ 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e,
+ 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392,
+ 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4,
+ 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e,
+ 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f,
+ 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b,
+ 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa,
+ 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019,
+ 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015,
+ 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6,
+ 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673,
+ 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea,
+ 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75,
+ 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091,
+ 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274,
+ 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b,
+ 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c,
+ 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f,
+ 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589,
+ 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830,
+ 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71,
+ 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c,
+ 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43,
+ 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9,
+ 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c,
+ 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1,
+ 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3,
+ 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee,
+ 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e,
+ 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670,
+ 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe,
+ 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7,
+ 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2,
+ 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da,
+ 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc,
+ 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21,
+ 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b,
+ 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34,
+ 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f,
+ 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c,
+ 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a,
+ 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f,
+ 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2,
+ 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c,
+ 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c,
+ 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46,
+ 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f,
+ 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72,
+ 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5,
+ 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e,
+ 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c,
+ 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1,
+ 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc,
+ 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407,
+ 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db,
+ 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983,
+ 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56,
+ 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb,
+ 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85,
+ 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb,
+ 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031,
+ 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163,
+ 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d,
+ 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d,
+ 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4,
+ 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808,
+ 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad,
+ 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3,
+ 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f,
+ 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f,
+ 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1,
+ 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5,
+ 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a,
+ 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b,
+ 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9,
+ 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148,
+ 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c,
+ 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137,
+ 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d,
+ 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417,
+ 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688,
+ 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982,
+ 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d,
+ 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd,
+ 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7,
+ 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96,
+ 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159,
+ 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c,
+ 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337,
+ 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e,
+ 0x7441, 0x743f, 0x7459, 0x745b, 0xe2a3, 0x7576, 0x7578, 0x7600,
+ 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3,
+ 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee,
+ 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891,
+ 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c,
+ 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77,
+ 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93,
+ 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a,
+ 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084,
+ 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477,
+ 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b,
+ 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e,
+ 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe,
+ 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4,
+ 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2,
+ 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70,
+ 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62,
+ 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a,
+ 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2,
+ 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea,
+ 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c,
+ 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e,
+ 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237,
+ 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264,
+ 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a,
+ 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca,
+ 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810,
+ 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9,
+ 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6,
+ 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9,
+ 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600,
+ 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e,
+ 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716,
+ 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d,
+ 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6,
+ 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7,
+ 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d,
+ 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54,
+ 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158,
+ 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f,
+ 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1,
+ 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995,
+ 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab,
+ 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3,
+ 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4,
+ 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23,
+ 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2,
+ 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192,
+ 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a,
+ 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609,
+ 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1,
+ 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d,
+ 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95,
+ 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87,
+ 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd,
+ 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2,
+ 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150,
+ 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa,
+ 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4,
+ 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3,
+ 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722,
+ 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902,
+ 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6,
+ 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7,
+ 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99,
+ 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060,
+ 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b,
+ 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278,
+ 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8,
+ 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4,
+ 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785,
+ 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c,
+ 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4,
+ 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb,
+ 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e,
+ 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e,
+ 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e,
+ 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb,
+ 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb,
+ 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2,
+ 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7,
+ 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab,
+ 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469,
+ 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5,
+ 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a,
+ 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae,
+ 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e,
+ 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05,
+ 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f,
+ 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b,
+ 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58,
+ 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8,
+ 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626,
+ 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c,
+ 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5,
+ 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b,
+ 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7,
+ 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb,
+ 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9,
+ 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a,
+ 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513,
+ 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506,
+ 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759,
+ 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912,
+ 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95,
+ 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6,
+ 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0,
+ 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc,
+ 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d,
+ 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d,
+ 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d,
+ 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb,
+ 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2,
+ 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707,
+ 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c,
+ 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df,
+ 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef,
+ 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112,
+ 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291,
+ 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678,
+ 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676,
+ 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78,
+ 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd,
+ 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb,
+ 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf,
+ 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4,
+ 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58,
+ 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f,
+ 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6,
+ 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8,
+ 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368,
+ 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d,
+ 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f,
+ 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e,
+ 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4,
+ 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09,
+ 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3,
+ 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559,
+ 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e,
+ 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932,
+ 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb,
+ 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02,
+ 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93,
+ 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b,
+ 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078,
+ 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8,
+ 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7,
+ 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713,
+ 0x970f, 0x975b, 0xe4c5, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b,
+ 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b,
+ 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb,
+ 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12,
+ 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121,
+ 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a,
+ 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8,
+ 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb,
+ 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6,
+ 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6,
+ 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e,
+ 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8,
+ 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80,
+ 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df,
+ 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235,
+ 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646,
+ 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901,
+ 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7,
+ 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9,
+ 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b,
+ 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35,
+ 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070,
+ 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf,
+ 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b,
+ 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2,
+ 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936,
+ 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b,
+ 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73,
+ 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b,
+ 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f,
+ 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e,
+ 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b,
+ 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca,
+ 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c,
+ 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b,
+ 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2,
+ 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233,
+ 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7,
+ 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2,
+ 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe,
+ 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8,
+ 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae,
+ 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a,
+ 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a,
+ 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076,
+ 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9,
+ 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0,
+ 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50,
+ 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0,
+ 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0,
+ 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0,
+ 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2,
+ 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba,
+ 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03,
+ 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8,
+ 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133,
+ 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2,
+ 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5,
+ 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d,
+ 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f,
+ 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f,
+ 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69,
+ 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9,
+ 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805,
+ 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41,
+ 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59,
+ 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a,
+ 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae,
+ 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6,
+ 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4,
+ 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d,
+ 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a,
+ 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7,
+ 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6,
+ 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727,
+ 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662,
+ 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c,
+ 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9,
+ 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815,
+ 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f,
+ 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4,
+ 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952,
+ 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d,
+ 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137,
+ 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc,
+ 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa,
+ 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3,
+ 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823,
+ 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf,
+ 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b,
+ 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957,
+ 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d,
+ 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19,
+ 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9,
+ 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61,
+ 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972,
+ 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61,
+ 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1,
+ 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31,
+ 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94,
+ 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10,
+ 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94,
+ 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463,
+ 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57,
+ 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f,
+ 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7,
+ 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744,
+ 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa,
+ 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063,
+ 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470,
+ 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a,
+ 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5,
+ 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f,
+ 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47,
+ 0x4e8d, 0x56d7, 0x0000, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e,
+ 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c,
+ 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3,
+ 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9,
+ 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723,
+ 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73,
+ 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a,
+ 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14,
+ 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22,
+ 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210,
+ 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df,
+ 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b,
+ 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a,
+ 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74,
+ 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266,
+ 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e,
+ 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18,
+ 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f,
+ 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d,
+ 0x897e, 0x9099, 0xe7d3, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624,
+ 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64,
+ 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33,
+ 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad,
+ 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437,
+ 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee,
+ 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752,
+ 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2,
+ 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a,
+ 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86,
+ 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c,
+ 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1,
+ 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3,
+ 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283,
+ 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a,
+ 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537,
+ 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b,
+ 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b,
+ 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95,
+ 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a,
+ 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5,
+ 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594,
+ 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092,
+ 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f,
+ 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f,
+ 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87,
+ 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a,
+ 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e,
+ 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be,
+ 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b,
+ 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482,
+ 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466,
+ 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464,
+ 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770,
+ 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce,
+ 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1,
+ 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93,
+ 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf,
+ 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7,
+ 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19,
+ 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d,
+ 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c,
+ 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009,
+ 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa,
+ 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0,
+ 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612,
+ 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611,
+ 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776,
+ 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a,
+ 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779,
+ 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec,
+ 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7,
+ 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0,
+ 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1,
+ 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096,
+ 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9,
+ 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1,
+ 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8,
+ 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1,
+ 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb,
+ 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5,
+ 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b,
+ 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8,
+ 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670,
+ 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd,
+ 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0,
+ 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3,
+ 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb,
+ 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec,
+ 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396,
+ 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6,
+ 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0,
+ 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b,
+ 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4,
+ 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd,
+ 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db,
+ 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8,
+ 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3,
+ 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9,
+ 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2,
+ 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037,
+ 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049,
+ 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058,
+ 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5,
+ 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6,
+ 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541,
+ 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c,
+ 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639,
+ 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb,
+ 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee,
+ 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc,
+ 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9,
+ 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6,
+ 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d,
+ 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04,
+ 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07,
+ 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f,
+ 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241,
+ 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4,
+ 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc,
+ 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb,
+ 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec,
+ 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4,
+ 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa,
+ 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f,
+ 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945,
+ 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f,
+ 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d,
+ 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7,
+ 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9,
+ 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd,
+ 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8,
+ 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1,
+ 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674,
+ 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3,
+ 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1,
+ 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8,
+ 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e,
+ 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5,
+ 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c,
+ 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194,
+ 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a,
+ 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e,
+ 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a,
+ 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b,
+ 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6,
+ 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9,
+ 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15,
+ 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad,
+ 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1,
+ 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa,
+ 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d,
+ 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219,
+ 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336,
+ 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341,
+ 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a,
+ 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6,
+ 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712,
+ 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b,
+ 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f,
+ 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828,
+ 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d,
+ 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64,
+ 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f,
+ 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60,
+ 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68,
+ 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d,
+ 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39,
+ 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5,
+ 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6,
+ 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc,
+ 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd,
+ 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5,
+ 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0,
+ 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710,
+ 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722,
+ 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e,
+ 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b,
+ 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0,
+ 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89,
+ 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09,
+ 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85,
+ 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f,
+ 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d,
+ 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e,
+ 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100,
+ 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351,
+ 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d,
+ 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345,
+ 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653,
+ 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687,
+ 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1,
+ 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843,
+ 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f,
+ 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57,
+ 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6,
+ 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004,
+ 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df,
+ 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc,
+ 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e,
+ 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041,
+ 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b,
+ 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051,
+ 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d,
+ 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a,
+ 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d,
+ 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2,
+ 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8,
+ 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5,
+ 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c,
+ 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58,
+ 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f,
+ 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52,
+ 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c,
+ 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72,
+ 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a,
+ 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1,
+ 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96,
+ 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3,
+ 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db,
+ 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365,
+ 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397,
+ 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375,
+ 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553,
+ 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718,
+ 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab,
+ 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2,
+ 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880,
+ 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4,
+ 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33,
+ 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a,
+ 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2,
+ 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6,
+ 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd,
+ 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb,
+ 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104,
+ 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8,
+ 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f,
+ 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff,
+ 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401,
+ 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b,
+ 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3,
+ 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d,
+ 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a,
+ 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a,
+ 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7,
+ 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30,
+ 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b,
+ 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98,
+ 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45,
+ 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b,
+ 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb,
+ 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119,
+ 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127,
+ 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232,
+ 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4,
+ 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9,
+ 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e,
+ 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387,
+ 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9,
+ 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd,
+ 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a,
+ 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897,
+ 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9,
+ 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c,
+ 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2,
+ 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7,
+ 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021,
+ 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb,
+ 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec,
+ 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c,
+ 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5,
+ 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083,
+ 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087,
+ 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8,
+ 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f,
+ 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6,
+ 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848,
+ 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839,
+ 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f,
+ 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac,
+ 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b,
+ 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d,
+ 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c,
+ 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35,
+ 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31,
+ 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36,
+ 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab,
+ 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc,
+ 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104,
+ 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8,
+ 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5,
+ 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4,
+ 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0,
+ 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568,
+ 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a,
+ 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec,
+ 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6,
+ 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970,
+ 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd,
+ 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd,
+ 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915,
+ 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97,
+ 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc,
+ 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45,
+ 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33,
+ 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b,
+ 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64,
+ 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a,
+ 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125,
+ 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a,
+ 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330,
+ 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323,
+ 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d,
+ 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7,
+ 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695,
+ 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a,
+ 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865,
+ 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868,
+ 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a,
+ 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b,
+ 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2,
+ 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56,
+ 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54,
+ 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050,
+ 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d,
+ 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204,
+ 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423,
+ 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410,
+ 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5,
+ 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9,
+ 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3,
+ 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db,
+ 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea,
+ 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1,
+ 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0,
+ 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9,
+ 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d,
+ 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52,
+ 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80,
+ 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89,
+ 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5,
+ 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6,
+ 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f,
+ 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb,
+ 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f,
+ 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226,
+ 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204,
+ 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216,
+ 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1,
+ 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6,
+ 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae,
+ 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba,
+ 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278,
+ 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca,
+ 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d,
+ 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9,
+ 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849,
+ 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d,
+ 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8,
+ 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90,
+ 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a,
+ 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0,
+ 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6,
+ 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a,
+ 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f,
+ 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5,
+ 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437,
+ 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435,
+ 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7,
+ 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686,
+ 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678,
+ 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f,
+ 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948,
+ 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978,
+ 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941,
+ 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951,
+ 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43,
+ 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0x0000, 0x6bfb, 0x6bfc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0,
+ 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2,
+ 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6,
+ 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92,
+ 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca,
+ 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160,
+ 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142,
+ 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291,
+ 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a,
+ 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440,
+ 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1,
+ 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef,
+ 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610,
+ 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd,
+ 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767,
+ 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f,
+ 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899,
+ 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11,
+ 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64,
+ 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70,
+ 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88,
+ 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b,
+ 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d,
+ 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb,
+ 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b,
+ 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242,
+ 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d,
+ 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d,
+ 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437,
+ 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429,
+ 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439,
+ 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447,
+ 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454,
+ 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6,
+ 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d,
+ 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da,
+ 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f,
+ 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81,
+ 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66,
+ 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c,
+ 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0,
+ 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2,
+ 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00,
+ 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111,
+ 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252,
+ 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e,
+ 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f,
+ 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272,
+ 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e,
+ 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd,
+ 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d,
+ 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5,
+ 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd,
+ 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd,
+ 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627,
+ 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613,
+ 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c,
+ 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a,
+ 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894,
+ 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea,
+ 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec,
+ 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a,
+ 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d,
+ 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7,
+ 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43,
+ 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173,
+ 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a,
+ 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227,
+ 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472,
+ 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e,
+ 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c,
+ 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0,
+ 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999,
+ 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4,
+ 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3,
+ 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2,
+ 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f,
+ 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03,
+ 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19,
+ 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30,
+ 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd,
+ 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e,
+ 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182,
+ 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297,
+ 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473,
+ 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503,
+ 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a,
+ 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780,
+ 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8,
+ 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4,
+ 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f,
+ 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c,
+ 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e,
+ 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf,
+ 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1,
+ 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc,
+ 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9,
+ 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187,
+ 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f,
+ 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4,
+ 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7,
+ 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af,
+ 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4,
+ 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728,
+ 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743,
+ 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d,
+ 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727,
+ 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1,
+ 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9,
+ 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96,
+ 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09,
+ 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06,
+ 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d,
+ 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124,
+ 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4,
+ 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3,
+ 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1,
+ 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9,
+ 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d,
+ 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781,
+ 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900,
+ 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2,
+ 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60,
+ 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103,
+ 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c,
+ 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642,
+ 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a,
+ 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af,
+ 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7,
+ 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05,
+ 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93,
+ 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d,
+ 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2,
+ 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa,
+ 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496,
+ 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c,
+ 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579,
+ 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7,
+ 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15,
+ 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d,
+ 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40,
+ 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04,
+ 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16,
+ 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff,
+ 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96,
+ 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57,
+ 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67,
+ 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77,
+ 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a,
+ 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa,
+ 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e,
+ 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d,
+ 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625,
+ 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b,
+ 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788,
+ 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8,
+ 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2,
+ 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb,
+ 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5,
+ 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7,
+ 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee,
+ 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea,
+ 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253,
+ 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500,
+ 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c,
+ 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2,
+ 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9,
+ 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e,
+ 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9,
+ 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758,
+ 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d,
+ 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a,
+ 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767,
+ 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918,
+ 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4,
+ 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3,
+ 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5,
+ 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f,
+ 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0,
+ 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e,
+ 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c,
+ 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073,
+ 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a,
+ 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182,
+ 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6,
+ 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc,
+ 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd,
+ 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab,
+ 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702,
+ 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d,
+ 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908,
+ 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd,
+ 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb,
+ 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1,
+ 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75,
+ 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff,
+ 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04,
+ 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a,
+ 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c,
+ 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc,
+ 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10,
+ 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1,
+ 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2,
+ 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9,
+ 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8,
+ 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf,
+ 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533,
+ 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb,
+ 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66,
+ 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76,
+ 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a,
+ 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c,
+ 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54,
+ 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03,
+ 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8,
+ 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5,
+ 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5,
+ 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4,
+ 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da,
+ 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365,
+ 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495,
+ 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633,
+ 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d,
+ 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3,
+ 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44,
+ 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde,
+ 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9,
+ 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2,
+ 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c,
+ 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22,
+ 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43,
+ 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c,
+ 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac,
+ 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257,
+ 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547,
+ 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555,
+ 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c,
+ 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792,
+ 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785,
+ 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789,
+ 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922,
+ 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4,
+ 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef,
+ 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0,
+ 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38,
+ 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f,
+ 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34,
+ 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136,
+ 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308,
+ 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323,
+ 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d,
+ 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324,
+ 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd,
+ 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9,
+ 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0,
+ 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929,
+ 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea,
+ 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa,
+ 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e,
+ 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14,
+ 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88,
+ 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12,
+ 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4,
+ 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682,
+ 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25,
+ 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b,
+ 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3,
+ 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de,
+ 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580,
+ 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89,
+ 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a,
+ 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9,
+ 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde,
+ 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2,
+ 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2,
+ 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510,
+ 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647,
+ 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902,
+ 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab,
+ 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe,
+ 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb,
+ 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01,
+ 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8,
+ 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49,
+ 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44,
+ 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c,
+ 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9,
+ 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595,
+ 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e,
+ 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582,
+ 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668,
+ 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5,
+ 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af,
+ 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de,
+ 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937,
+ 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f,
+ 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13,
+ 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94,
+ 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47,
+ 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b,
+ 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af,
+ 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349,
+ 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379,
+ 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361,
+ 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0,
+ 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720,
+ 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a,
+ 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933,
+ 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1,
+ 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb,
+ 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01,
+ 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1,
+ 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41,
+ 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d,
+ 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda,
+ 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131,
+ 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699,
+ 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8,
+ 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6,
+ 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc,
+ 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd,
+ 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad,
+ 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005,
+ 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7,
+ 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2,
+ 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657,
+ 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c,
+ 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac,
+ 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d,
+ 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56,
+ 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53,
+ 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3,
+ 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb,
+ 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8,
+ 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb,
+ 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3,
+ 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4,
+ 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950,
+ 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35,
+ 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26,
+ 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75,
+ 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c,
+ 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47,
+ 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5,
+ 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b,
+ 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395,
+ 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4,
+ 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3,
+ 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722,
+ 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa,
+ 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f,
+ 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07,
+ 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35,
+ 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1,
+ 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c,
+ 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c,
+ 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c,
+ 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29,
+ 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4,
+ 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd,
+ 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e,
+ 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1,
+ 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd,
+ 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016,
+ 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c,
+ 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6,
+ 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516,
+ 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68,
+ 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76,
+ 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74,
+ 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe,
+ 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1,
+ 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2,
+ 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6,
+ 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7,
+ 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a,
+ 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958,
+ 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48,
+ 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a,
+ 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d,
+ 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51,
+ 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad,
+ 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec,
+ 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3,
+ 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da,
+ 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c,
+ 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948,
+ 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d,
+ 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c,
+ 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea,
+ 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4,
+ 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda,
+ 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78,
+ 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70,
+ 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f,
+ 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40,
+ 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef,
+ 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df,
+ 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9,
+ 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034,
+ 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b,
+ 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba,
+ 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd,
+ 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48,
+ 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80,
+ 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269,
+ 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604,
+ 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817,
+ 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a,
+ 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86,
+ 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a,
+ 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b,
+ 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410,
+ 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e,
+ 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df,
+ 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862,
+ 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c,
+ 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36,
+ 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10,
+ 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8,
+ 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f,
+ 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a,
+ 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6,
+ 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6,
+ 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91,
+ 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48,
+ 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc,
+ 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049,
+ 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a,
+ 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a,
+ 0xeb45, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030,
+ 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619,
+ 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a,
+ 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45,
+ 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e,
+ 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b,
+ 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437,
+ 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a,
+ 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956,
+ 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a,
+ 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29,
+ 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca,
+ 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9,
+ 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd,
+ 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18,
+ 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6,
+ 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2,
+ 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d,
+ 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f,
+ 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4,
+ 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634,
+ 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826,
+ 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84,
+ 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a,
+ 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c,
+ 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449,
+ 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b,
+ 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b,
+ 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33,
+ 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb,
+ 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf,
+ 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6,
+ 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2,
+ 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f,
+ 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb,
+ 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382,
+ 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c,
+ 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830,
+ 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64,
+ 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4,
+ 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52,
+ 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c,
+ 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4,
+ 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec,
+ 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3,
+ 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e,
+ 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d,
+ 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6,
+ 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835,
+ 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be,
+ 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743,
+ 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67,
+ 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03,
+ 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04,
+ 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e,
+ 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa,
+ 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648,
+ 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5,
+ 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749,
+ 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10,
+ 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78,
+ 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2,
+ 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74,
+ 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d,
+ 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874,
+ 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15,
+ 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482,
+ 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b,
+ 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d,
+ 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfe4f, 0xffffffff, 0x00ff, 0x0000, 0x0100, 0x0002, 0x6000, 0x804f240
+};
+
+
+const unichar_t unicode_from_big5hkscs[] = {
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xeeb8, 0xeeb9, 0xeeba, 0xeebb, 0xeebc, 0xeebd, 0xeebe, 0xeebf,
+ 0xeec0, 0xeec1, 0xeec2, 0xeec3, 0xeec4, 0xeec5, 0xeec6, 0xeec7,
+ 0xeec8, 0xeec9, 0xeeca, 0xeecb, 0xeecc, 0xeecd, 0xeece, 0xeecf,
+ 0xeed0, 0xeed1, 0xeed2, 0xeed3, 0xeed4, 0xeed5, 0xeed6, 0xeed7,
+ 0xeed8, 0xeed9, 0xeeda, 0xeedb, 0xeedc, 0xeedd, 0xeede, 0xeedf,
+ 0xeee0, 0xeee1, 0xeee2, 0xeee3, 0xeee4, 0xeee5, 0xeee6, 0xeee7,
+ 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xeeed, 0xeeee, 0xeeef,
+ 0xeef0, 0xeef1, 0xeef2, 0xeef3, 0xeef4, 0xeef5, 0xeef6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xeef7, 0xeef8, 0xeef9, 0xeefa, 0xeefb, 0xeefc, 0xeefd,
+ 0xeefe, 0xeeff, 0xef00, 0xef01, 0xef02, 0xef03, 0xef04, 0xef05,
+ 0xef06, 0xef07, 0xef08, 0xef09, 0xef0a, 0xef0b, 0xef0c, 0xef0d,
+ 0xef0e, 0xef0f, 0xef10, 0xef11, 0xef12, 0xef13, 0xef14, 0xef15,
+ 0xef16, 0xef17, 0xef18, 0xef19, 0xef1a, 0xef1b, 0xef1c, 0xef1d,
+ 0xef1e, 0xef1f, 0xef20, 0xef21, 0xef22, 0xef23, 0xef24, 0xef25,
+ 0xef26, 0xef27, 0xef28, 0xef29, 0xef2a, 0xef2b, 0xef2c, 0xef2d,
+ 0xef2e, 0xef2f, 0xef30, 0xef31, 0xef32, 0xef33, 0xef34, 0xef35,
+ 0xef36, 0xef37, 0xef38, 0xef39, 0xef3a, 0xef3b, 0xef3c, 0xef3d,
+ 0xef3e, 0xef3f, 0xef40, 0xef41, 0xef42, 0xef43, 0xef44, 0xef45,
+ 0xef46, 0xef47, 0xef48, 0xef49, 0xef4a, 0xef4b, 0xef4c, 0xef4d,
+ 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, 0xef54, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, 0xef5c,
+ 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, 0xef64,
+ 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, 0xef6c,
+ 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xef72, 0xef73, 0xef74,
+ 0xef75, 0xef76, 0xef77, 0xef78, 0xef79, 0xef7a, 0xef7b, 0xef7c,
+ 0xef7d, 0xef7e, 0xef7f, 0xef80, 0xef81, 0xef82, 0xef83, 0xef84,
+ 0xef85, 0xef86, 0xef87, 0xef88, 0xef89, 0xef8a, 0xef8b, 0xef8c,
+ 0xef8d, 0xef8e, 0xef8f, 0xef90, 0xef91, 0xef92, 0xef93, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, 0xef99, 0xef9a,
+ 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, 0xefa1, 0xefa2,
+ 0xefa3, 0xefa4, 0xefa5, 0xefa6, 0xefa7, 0xefa8, 0xefa9, 0xefaa,
+ 0xefab, 0xefac, 0xefad, 0xefae, 0xefaf, 0xefb0, 0xefb1, 0xefb2,
+ 0xefb3, 0xefb4, 0xefb5, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba,
+ 0xefbb, 0xefbc, 0xefbd, 0xefbe, 0xefbf, 0xefc0, 0xefc1, 0xefc2,
+ 0xefc3, 0xefc4, 0xefc5, 0xefc6, 0xefc7, 0xefc8, 0xefc9, 0xefca,
+ 0xefcb, 0xefcc, 0xefcd, 0xefce, 0xefcf, 0xefd0, 0xefd1, 0xefd2,
+ 0xefd3, 0xefd4, 0xefd5, 0xefd6, 0xefd7, 0xefd8, 0xefd9, 0xefda,
+ 0xefdb, 0xefdc, 0xefdd, 0xefde, 0xefdf, 0xefe0, 0xefe1, 0xefe2,
+ 0xefe3, 0xefe4, 0xefe5, 0xefe6, 0xefe7, 0xefe8, 0xefe9, 0xefea,
+ 0xefeb, 0xefec, 0xefed, 0xefee, 0xefef, 0xeff0, 0xeff1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xeff2, 0xeff3, 0xeff4, 0xeff5, 0xeff6, 0xeff7, 0xeff8, 0xeff9,
+ 0xeffa, 0xeffb, 0xeffc, 0xeffd, 0xeffe, 0xefff, 0xf000, 0xf001,
+ 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007, 0xf008, 0xf009,
+ 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f, 0xf010, 0xf011,
+ 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017, 0xf018, 0xf019,
+ 0xf01a, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f, 0xf020, 0xf021,
+ 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027, 0xf028, 0xf029,
+ 0xf02a, 0xf02b, 0xf02c, 0xf02d, 0xf02e, 0xf02f, 0xf030, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
+ 0xf038, 0xf039, 0xf03a, 0xf03b, 0xf03c, 0xf03d, 0xf03e, 0xf03f,
+ 0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047,
+ 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f,
+ 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057,
+ 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f,
+ 0xf060, 0xf061, 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067,
+ 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f,
+ 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077,
+ 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf07f,
+ 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, 0xf086, 0xf087,
+ 0xf088, 0xf089, 0xf08a, 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, 0xf094, 0xf095, 0xf096,
+ 0xf097, 0xf098, 0xf099, 0xf09a, 0xf09b, 0xf09c, 0xf09d, 0xf09e,
+ 0xf09f, 0xf0a0, 0xf0a1, 0xf0a2, 0xf0a3, 0xf0a4, 0xf0a5, 0xf0a6,
+ 0xf0a7, 0xf0a8, 0xf0a9, 0xf0aa, 0xf0ab, 0xf0ac, 0xf0ad, 0xf0ae,
+ 0xf0af, 0xf0b0, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xf0b6,
+ 0xf0b7, 0xf0b8, 0xf0b9, 0xf0ba, 0xf0bb, 0xf0bc, 0xf0bd, 0xf0be,
+ 0xf0bf, 0xf0c0, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xf0c5, 0xf0c6,
+ 0xf0c7, 0xf0c8, 0xf0c9, 0xf0ca, 0xf0cb, 0xf0cc, 0xf0cd, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf0ce, 0xf0cf, 0xf0d0, 0xf0d1, 0xf0d2, 0xf0d3, 0xf0d4,
+ 0xf0d5, 0xf0d6, 0xf0d7, 0xf0d8, 0xf0d9, 0xf0da, 0xf0db, 0xf0dc,
+ 0xf0dd, 0xf0de, 0xf0df, 0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4,
+ 0xf0e5, 0xf0e6, 0xf0e7, 0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec,
+ 0xf0ed, 0xf0ee, 0xf0ef, 0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4,
+ 0xf0f5, 0xf0f6, 0xf0f7, 0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc,
+ 0xf0fd, 0xf0fe, 0xf0ff, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104,
+ 0xf105, 0xf106, 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf10c,
+ 0xf10d, 0xf10e, 0xf10f, 0xf110, 0xf111, 0xf112, 0xf113, 0xf114,
+ 0xf115, 0xf116, 0xf117, 0xf118, 0xf119, 0xf11a, 0xf11b, 0xf11c,
+ 0xf11d, 0xf11e, 0xf11f, 0xf120, 0xf121, 0xf122, 0xf123, 0xf124,
+ 0xf125, 0xf126, 0xf127, 0xf128, 0xf129, 0xf12a, 0xf12b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf12c, 0xf12d, 0xf12e, 0xf12f, 0xf130, 0xf131, 0xf132, 0xf133,
+ 0xf134, 0xf135, 0xf136, 0xf137, 0xf138, 0xf139, 0xf13a, 0xf13b,
+ 0xf13c, 0xf13d, 0xf13e, 0xf13f, 0xf140, 0xf141, 0xf142, 0xf143,
+ 0xf144, 0xf145, 0xf146, 0xf147, 0xf148, 0xf149, 0xf14a, 0xf14b,
+ 0xf14c, 0xf14d, 0xf14e, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153,
+ 0xf154, 0xf155, 0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b,
+ 0xf15c, 0xf15d, 0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163,
+ 0xf164, 0xf165, 0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f, 0xf170, 0xf171,
+ 0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177, 0xf178, 0xf179,
+ 0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf17f, 0xf180, 0xf181,
+ 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, 0xf187, 0xf188, 0xf189,
+ 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f, 0xf190, 0xf191,
+ 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, 0xf197, 0xf198, 0xf199,
+ 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f, 0xf1a0, 0xf1a1,
+ 0xf1a2, 0xf1a3, 0xf1a4, 0xf1a5, 0xf1a6, 0xf1a7, 0xf1a8, 0xf1a9,
+ 0xf1aa, 0xf1ab, 0xf1ac, 0xf1ad, 0xf1ae, 0xf1af, 0xf1b0, 0xf1b1,
+ 0xf1b2, 0xf1b3, 0xf1b4, 0xf1b5, 0xf1b6, 0xf1b7, 0xf1b8, 0xf1b9,
+ 0xf1ba, 0xf1bb, 0xf1bc, 0xf1bd, 0xf1be, 0xf1bf, 0xf1c0, 0xf1c1,
+ 0xf1c2, 0xf1c3, 0xf1c4, 0xf1c5, 0xf1c6, 0xf1c7, 0xf1c8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf1c9, 0xf1ca, 0xf1cb, 0xf1cc, 0xf1cd, 0xf1ce, 0xf1cf, 0xf1d0,
+ 0xf1d1, 0xf1d2, 0xf1d3, 0xf1d4, 0xf1d5, 0xf1d6, 0xf1d7, 0xf1d8,
+ 0xf1d9, 0xf1da, 0xf1db, 0xf1dc, 0xf1dd, 0xf1de, 0xf1df, 0xf1e0,
+ 0xf1e1, 0xf1e2, 0xf1e3, 0xf1e4, 0xf1e5, 0xf1e6, 0xf1e7, 0xf1e8,
+ 0xf1e9, 0xf1ea, 0xf1eb, 0xf1ec, 0xf1ed, 0xf1ee, 0xf1ef, 0xf1f0,
+ 0xf1f1, 0xf1f2, 0xf1f3, 0xf1f4, 0xf1f5, 0xf1f6, 0xf1f7, 0xf1f8,
+ 0xf1f9, 0xf1fa, 0xf1fb, 0xf1fc, 0xf1fd, 0xf1fe, 0xf1ff, 0xf200,
+ 0xf201, 0xf202, 0xf203, 0xf204, 0xf205, 0xf206, 0xf207, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf208, 0xf209, 0xf20a, 0xf20b, 0xf20c, 0xf20d, 0xf20e,
+ 0xf20f, 0xf210, 0xf211, 0xf212, 0xf213, 0xf214, 0xf215, 0xf216,
+ 0xf217, 0xf218, 0xf219, 0xf21a, 0xf21b, 0xf21c, 0xf21d, 0xf21e,
+ 0xf21f, 0xf220, 0xf221, 0xf222, 0xf223, 0xf224, 0xf225, 0xf226,
+ 0xf227, 0xf228, 0xf229, 0xf22a, 0xf22b, 0xf22c, 0xf22d, 0xf22e,
+ 0xf22f, 0xf230, 0xf231, 0xf232, 0xf233, 0xf234, 0xf235, 0xf236,
+ 0xf237, 0xf238, 0xf239, 0xf23a, 0xf23b, 0xf23c, 0xf23d, 0xf23e,
+ 0xf23f, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, 0xf246,
+ 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e,
+ 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, 0xf256,
+ 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e,
+ 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d,
+ 0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275,
+ 0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d,
+ 0xf27e, 0xf27f, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285,
+ 0xf286, 0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d,
+ 0xf28e, 0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295,
+ 0xf296, 0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d,
+ 0xf29e, 0xf29f, 0xf2a0, 0xf2a1, 0xf2a2, 0xf2a3, 0xf2a4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf2a5, 0xf2a6, 0xf2a7, 0xf2a8, 0xf2a9, 0xf2aa, 0xf2ab,
+ 0xf2ac, 0xf2ad, 0xf2ae, 0xf2af, 0xf2b0, 0xf2b1, 0xf2b2, 0xf2b3,
+ 0xf2b4, 0xf2b5, 0xf2b6, 0xf2b7, 0xf2b8, 0xf2b9, 0xf2ba, 0xf2bb,
+ 0xf2bc, 0xf2bd, 0xf2be, 0xf2bf, 0xf2c0, 0xf2c1, 0xf2c2, 0xf2c3,
+ 0xf2c4, 0xf2c5, 0xf2c6, 0xf2c7, 0xf2c8, 0xf2c9, 0xf2ca, 0xf2cb,
+ 0xf2cc, 0xf2cd, 0xf2ce, 0xf2cf, 0xf2d0, 0xf2d1, 0xf2d2, 0xf2d3,
+ 0xf2d4, 0xf2d5, 0xf2d6, 0xf2d7, 0xf2d8, 0xf2d9, 0xf2da, 0xf2db,
+ 0xf2dc, 0xf2dd, 0xf2de, 0xf2df, 0xf2e0, 0xf2e1, 0xf2e2, 0xf2e3,
+ 0xf2e4, 0xf2e5, 0xf2e6, 0xf2e7, 0xf2e8, 0xf2e9, 0xf2ea, 0xf2eb,
+ 0xf2ec, 0xf2ed, 0xf2ee, 0xf2ef, 0xf2f0, 0xf2f1, 0xf2f2, 0xf2f3,
+ 0xf2f4, 0xf2f5, 0xf2f6, 0xf2f7, 0xf2f8, 0xf2f9, 0xf2fa, 0xf2fb,
+ 0xf2fc, 0xf2fd, 0xf2fe, 0xf2ff, 0xf300, 0xf301, 0xf302, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309, 0xf30a,
+ 0xf30b, 0xf30c, 0xf30d, 0xf30e, 0xf30f, 0xf310, 0xf311, 0xf312,
+ 0xf313, 0xf314, 0xf315, 0xf316, 0xf317, 0xf318, 0x0100, 0x00c1,
+ 0x01cd, 0x00c0, 0x0112, 0x00c9, 0x011a, 0x00c8, 0x014c, 0x00d3,
+ 0x01d1, 0x00d2, 0xf325, 0x1ebe, 0xf327, 0x1ec0, 0x00ca, 0x0101,
+ 0x00e1, 0x01ce, 0x00e0, 0x0251, 0x0113, 0x00e9, 0x011b, 0x00e8,
+ 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2,
+ 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x01dc, 0x00fc, 0xf344, 0x1ebf, 0xf346, 0x1ec1, 0x00ea,
+ 0x0261, 0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f, 0xf350,
+ 0xf351, 0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357, 0xf358,
+ 0xf359, 0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360,
+ 0xf361, 0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367, 0xf368,
+ 0xf369, 0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f, 0xf370,
+ 0xf371, 0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377, 0xf378,
+ 0xf379, 0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf37f, 0xf380,
+ 0xf381, 0xf382, 0xf383, 0xf384, 0xf385, 0xf386, 0xf387, 0xf388,
+ 0xf389, 0xf38a, 0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f, 0xf390,
+ 0xf391, 0xf392, 0xf393, 0xf394, 0xf395, 0xf396, 0xf397, 0xf398,
+ 0xf399, 0xf39a, 0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf3a0, 0xf3a1, 0xf3a2, 0x650a, 0xf3a4, 0xf3a5, 0x4e3d, 0x6edd,
+ 0x9d4e, 0x91df, 0xf3aa, 0xf3ab, 0xf3ac, 0x6491, 0x4f1a, 0x4f28,
+ 0x4fa8, 0x5156, 0x5174, 0x519c, 0x51e4, 0x52a1, 0x52a8, 0x533b,
+ 0x534e, 0x53d1, 0x53d8, 0x56e2, 0x58f0, 0x5904, 0x5907, 0x5932,
+ 0x5934, 0x5b66, 0x5b9e, 0x5b9f, 0x5c9a, 0x5e86, 0x603b, 0x6589,
+ 0x67fe, 0x6804, 0x6865, 0x6d4e, 0x70bc, 0x7535, 0x7ea4, 0x7eac,
+ 0x7eba, 0x7ec7, 0x7ecf, 0x7edf, 0x7f06, 0x7f37, 0x827a, 0x82cf,
+ 0x836f, 0x89c6, 0x8bbe, 0x8be2, 0x8f66, 0x8f67, 0x8f6e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7411, 0x7cfc, 0x7dcd, 0x6946, 0x7ac9, 0x5227, 0xf3e5,
+ 0xf3e6, 0xf3e7, 0xf3e8, 0x918c, 0x78b8, 0x915e, 0x80bc, 0xf3ed,
+ 0x8d0b, 0x80f6, 0xf3f0, 0xf3f1, 0xf3f2, 0x809f, 0x9ec7, 0x4ccd,
+ 0x9dc9, 0x9e0c, 0x4c3e, 0xf3f9, 0xf3fa, 0x9e0a, 0xf3fc, 0x35c1,
+ 0xf3fe, 0x6e9a, 0x823e, 0x7519, 0xf402, 0x4911, 0x9a6c, 0x9a8f,
+ 0x9f99, 0x7987, 0xf408, 0xf409, 0xf40a, 0xf40b, 0x4e24, 0x4e81,
+ 0x4e80, 0x4e87, 0x4ebf, 0x4eeb, 0x4f37, 0x344c, 0x4fbd, 0x3e48,
+ 0x5003, 0x5088, 0x347d, 0x3493, 0x34a5, 0x5186, 0x5905, 0x51db,
+ 0x51fc, 0x5205, 0x4e89, 0x5279, 0x5290, 0x5327, 0x35c7, 0x53a9,
+ 0x3551, 0x53b0, 0x3553, 0x53c2, 0x5423, 0x356d, 0x3572, 0x3681,
+ 0x5493, 0x54a3, 0x54b4, 0x54b9, 0x54d0, 0x54ef, 0x5518, 0x5523,
+ 0x5528, 0x3598, 0x553f, 0x35a5, 0x35bf, 0x55d7, 0x35c5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf43d, 0x5525, 0xf43f, 0xf440, 0xf441, 0xf442, 0x5590, 0xf444,
+ 0x39ec, 0xf446, 0x8e46, 0xf448, 0xf449, 0x4053, 0xf44b, 0x777a,
+ 0xf44d, 0x3a34, 0x47d5, 0xf450, 0xf451, 0xf452, 0x64dd, 0xf454,
+ 0xf455, 0xf456, 0xf457, 0x648d, 0x8e7e, 0xf45a, 0xf45b, 0xf45c,
+ 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xf463, 0x47f4,
+ 0xf465, 0xf466, 0x9ab2, 0x3a67, 0xf469, 0x3fed, 0x3506, 0xf46c,
+ 0xf46d, 0xf46e, 0xf46f, 0x9d6e, 0x9815, 0xf472, 0x43d9, 0xf474,
+ 0x64b4, 0x54e3, 0xf477, 0xf478, 0xf479, 0x39fb, 0xf47b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf47c, 0xf47d, 0xf47e, 0x64ea, 0xf480, 0xf481, 0x8e68,
+ 0xf483, 0xf484, 0xf485, 0xf486, 0x480b, 0xf488, 0x3ffa, 0x5873,
+ 0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0x5579,
+ 0x40bb, 0x43ba, 0xf495, 0x4ab4, 0xf497, 0xf498, 0x81aa, 0x98f5,
+ 0xf49b, 0x6379, 0x39fe, 0xf49e, 0x8dc0, 0x56a1, 0x647c, 0x3e43,
+ 0xf4a3, 0xf4a4, 0xf4a5, 0xf4a6, 0xf4a7, 0xf4a8, 0xf4a9, 0xf4aa,
+ 0x3992, 0x3a06, 0xf4ad, 0x3578, 0xf4af, 0xf4b0, 0x5652, 0xf4b2,
+ 0xf4b3, 0xf4b4, 0x34bc, 0x6c3d, 0xf4b7, 0xf4b8, 0xf4b9, 0xf4ba,
+ 0xf4bb, 0xf4bc, 0xf4bd, 0xf4be, 0xf4bf, 0xf4c0, 0xf4c1, 0x7f93,
+ 0xf4c3, 0xf4c4, 0xf4c5, 0x35fb, 0xf4c7, 0xf4c8, 0xf4c9, 0xf4ca,
+ 0x3f93, 0xf4cc, 0xf4cd, 0xf4ce, 0xf4cf, 0xf4d0, 0xf4d1, 0xf4d2,
+ 0xf4d3, 0xf4d4, 0xf4d5, 0x3ff9, 0xf4d7, 0x6432, 0xf4d9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf4da, 0xf4db, 0xf4dc, 0xf4dd, 0xf4de, 0xf4df, 0xf4e0, 0x3a18,
+ 0xf4e2, 0xf4e3, 0xf4e4, 0xf4e5, 0xf4e6, 0xf4e7, 0xf4e8, 0xf4e9,
+ 0x95aa, 0x54cc, 0x82c4, 0x55b9, 0xf4ee, 0xf4ef, 0x9c26, 0x9ab6,
+ 0xf4f2, 0xf4f3, 0x7140, 0x816d, 0x80ec, 0x5c1c, 0xf4f8, 0x8134,
+ 0x3797, 0x535f, 0xf4fc, 0x91b6, 0xf4fe, 0xf4ff, 0xf500, 0xf501,
+ 0x35dd, 0xf503, 0x3609, 0xf505, 0x56af, 0xf507, 0xf508, 0xf509,
+ 0xf50a, 0xf50b, 0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, 0xf511,
+ 0x5a54, 0xf513, 0xf514, 0xf515, 0xf516, 0x579c, 0xf518, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf519, 0xf51a, 0xf51b, 0xf51c, 0xf51d, 0x3703, 0xf51f,
+ 0xf520, 0xf521, 0xf522, 0xf523, 0xf524, 0xf525, 0xf526, 0x5899,
+ 0x5268, 0x361a, 0xf52a, 0x7bb2, 0x5b68, 0x4800, 0x4b2c, 0x9f27,
+ 0x49e7, 0x9c1f, 0x9b8d, 0xf533, 0xf534, 0x55fb, 0x35f2, 0x5689,
+ 0x4e28, 0x5902, 0xf53a, 0xf53b, 0x9751, 0xf53d, 0x4e5b, 0x4ebb,
+ 0x353e, 0x5c23, 0x5f51, 0x5fc4, 0x38fa, 0x624c, 0x6535, 0x6b7a,
+ 0x6c35, 0x6c3a, 0x706c, 0x722b, 0x4e2c, 0x72ad, 0xf54e, 0x7f52,
+ 0x793b, 0x7cf9, 0x7f53, 0xf553, 0x34c1, 0xf555, 0xf556, 0x8002,
+ 0x8080, 0xf559, 0xf55a, 0x535d, 0x8864, 0x89c1, 0xf55e, 0x8ba0,
+ 0x8d1d, 0x9485, 0x9578, 0x957f, 0x95e8, 0xf565, 0x97e6, 0x9875,
+ 0x98ce, 0x98de, 0x9963, 0xf56b, 0x9c7c, 0x9e1f, 0x9ec4, 0x6b6f,
+ 0xf907, 0x4e37, 0xf572, 0x961d, 0x6237, 0x94a2, 0xf576, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x503b, 0x6dfe, 0xf579, 0xf57a, 0x3dc9, 0x888f, 0xf57d, 0x7077,
+ 0x5cf5, 0x4b20, 0xf581, 0x3559, 0xf583, 0x6122, 0xf585, 0x8fa7,
+ 0x91f6, 0x7191, 0x6719, 0x73ba, 0xf58b, 0xf58c, 0x3c8b, 0xf58e,
+ 0x4b10, 0x78e4, 0x7402, 0x51ae, 0xf593, 0x4009, 0x6a63, 0xf596,
+ 0x4223, 0x860f, 0xf599, 0x7a2a, 0xf59b, 0xf59c, 0x9755, 0x704d,
+ 0x5324, 0xf5a0, 0x93f4, 0x76d9, 0xf5a3, 0xf5a4, 0x77dd, 0x4ea3,
+ 0x4ff0, 0x50bc, 0x4e2f, 0x4f17, 0xf5ab, 0x5434, 0x7d8b, 0x5892,
+ 0x58d0, 0xf5b0, 0x5e92, 0x5e99, 0x5fc2, 0xf5b4, 0x658b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf5b6, 0x6919, 0x6a43, 0xf5b9, 0x6cff, 0xf5bb, 0x7200,
+ 0xf5bd, 0x738c, 0x3edb, 0xf5c0, 0x5b15, 0x74b9, 0x8b83, 0xf5c4,
+ 0xf5c5, 0x7a93, 0x7bec, 0x7cc3, 0x7e6c, 0x82f8, 0x8597, 0xf5cc,
+ 0x8890, 0xf5ce, 0x8eb9, 0xf5d0, 0x8fcf, 0x855f, 0x99e0, 0x9221,
+ 0xf5d5, 0xf5d6, 0xf5d7, 0x4071, 0x42a2, 0x5a1a, 0xf5db, 0xf5dc,
+ 0xf5dd, 0x9868, 0x676b, 0x4276, 0x573d, 0xf5e2, 0x85d6, 0xf5e4,
+ 0x82bf, 0xf5e6, 0x4c81, 0xf5e8, 0x5d7b, 0xf5ea, 0xf5eb, 0xf5ec,
+ 0xf5ed, 0x5b96, 0xf5ef, 0xf5f0, 0x7e5b, 0xf5f2, 0xf5f3, 0xf5f4,
+ 0xf5f5, 0xf5f6, 0xf5f7, 0xf5f8, 0xf5f9, 0xf5fa, 0xf5fb, 0xf5fc,
+ 0xf5fd, 0xf5fe, 0xf5ff, 0xf600, 0xf601, 0xf602, 0xf603, 0xf604,
+ 0xf605, 0xf606, 0xf607, 0xf608, 0xf609, 0xf60a, 0xf60b, 0xf60c,
+ 0xf60d, 0xf60e, 0xf60f, 0xf610, 0xf611, 0xf612, 0xf613, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xf614, 0xf615, 0xf616, 0xf617, 0xf618, 0xf619, 0xf61a, 0xf61b,
+ 0xf61c, 0xf61d, 0xf61e, 0xf61f, 0xf620, 0xf621, 0xf622, 0xf623,
+ 0xf624, 0xf625, 0xf626, 0xf627, 0xf628, 0xf629, 0xf62a, 0xf62b,
+ 0xf62c, 0xf62d, 0xf62e, 0xf62f, 0xf630, 0xf631, 0xf632, 0xf633,
+ 0x5d3e, 0x5d48, 0x5d56, 0x3dfc, 0x380f, 0x5da4, 0x5db9, 0x3820,
+ 0x3838, 0x5e42, 0x5ebd, 0x5f25, 0x5f83, 0x3908, 0x3914, 0x393f,
+ 0x394d, 0x60d7, 0x613d, 0x5ce5, 0x3989, 0x61b7, 0x61b9, 0x61cf,
+ 0x39b8, 0x622c, 0x6290, 0x62e5, 0x6318, 0x39f8, 0x56b1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3a03, 0x63e2, 0x63fb, 0x6407, 0x645a, 0x3a4b, 0x64c0,
+ 0x5d15, 0x5621, 0x9f9f, 0x3a97, 0x6586, 0x3abd, 0x65ff, 0x6653,
+ 0x3af2, 0x6692, 0x3b22, 0x6716, 0x3b42, 0x67a4, 0x6800, 0x3b58,
+ 0x684a, 0x6884, 0x3b72, 0x3b71, 0x3b7b, 0x6909, 0x6943, 0x725c,
+ 0x6964, 0x699f, 0x6985, 0x3bbc, 0x69d6, 0x3bdd, 0x6a65, 0x6a74,
+ 0x6a71, 0x6a82, 0x3bec, 0x6a99, 0x3bf2, 0x6aab, 0x6ab5, 0x6ad4,
+ 0x6af6, 0x6b81, 0x6bc1, 0x6bea, 0x6c75, 0x6caa, 0x3ccb, 0x6d02,
+ 0x6d06, 0x6d26, 0x6d81, 0x3cef, 0x6da4, 0x6db1, 0x6e15, 0x6e18,
+ 0x6e29, 0x6e86, 0xf694, 0x6ebb, 0x6ee2, 0x6eda, 0x9f7f, 0x6ee8,
+ 0x6ee9, 0x6f24, 0x6f34, 0x3d46, 0xf69e, 0x6f81, 0x6fbe, 0x3d6a,
+ 0x3d75, 0x71b7, 0x5c99, 0x3d8a, 0x702c, 0x3d91, 0x7050, 0x7054,
+ 0x706f, 0x707f, 0x7089, 0xf6ad, 0x43c1, 0x35f1, 0xf6b0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe311, 0x57be, 0xe313, 0x713e, 0xe315, 0x364e, 0x69a2, 0xe318,
+ 0x5b74, 0x7a49, 0xe31b, 0xe31c, 0x7a65, 0x7a7d, 0xe31f, 0x7abb,
+ 0x7ab0, 0x7ac2, 0x7ac3, 0x71d1, 0xe325, 0x41ca, 0x7ada, 0x7add,
+ 0x7aea, 0x41ef, 0x54b2, 0xe32c, 0x7b0b, 0x7b55, 0x7b29, 0xe330,
+ 0xe331, 0x7ba2, 0x7b6f, 0x839c, 0xe335, 0xe336, 0x7bd0, 0x8421,
+ 0x7b92, 0x7bb8, 0xe33b, 0x3dad, 0xe33d, 0x8492, 0x7bfa, 0x7c06,
+ 0x7c35, 0xe342, 0x7c44, 0x7c83, 0xe345, 0x7ca6, 0x667d, 0xe348,
+ 0x7cc9, 0x7cc7, 0x7ce6, 0x7c74, 0x7cf3, 0x7cf5, 0x7cce, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7e67, 0x451d, 0xe352, 0x7d5d, 0xe354, 0x748d, 0x7d89,
+ 0x7dab, 0x7135, 0x7db3, 0x7dd2, 0xe35b, 0xe35c, 0x7de4, 0x3d13,
+ 0x7df5, 0xe360, 0x7de5, 0xe362, 0x7e1d, 0xe364, 0xe365, 0x7e6e,
+ 0x7e92, 0x432b, 0x946c, 0x7e27, 0x7f40, 0x7f41, 0x7f47, 0x7936,
+ 0xe36f, 0x99e1, 0x7f97, 0xe372, 0x7fa3, 0xe374, 0xe375, 0x455c,
+ 0xe377, 0x4503, 0xe379, 0x7ffa, 0xe37b, 0x8005, 0x8008, 0x801d,
+ 0x8028, 0x802f, 0xe381, 0xe382, 0x803b, 0x803c, 0x8061, 0xe386,
+ 0x4989, 0xe388, 0xe389, 0xe38a, 0x6725, 0x80a7, 0xe38d, 0x8107,
+ 0x811a, 0x58b0, 0xe391, 0x6c7f, 0xe393, 0xe394, 0x64e7, 0xe396,
+ 0x8218, 0xe398, 0x6a53, 0xe39a, 0xe39b, 0x447a, 0x8229, 0xe39e,
+ 0xe39f, 0xe3a0, 0x4ff9, 0xe3a2, 0x84e2, 0x8362, 0xe3a5, 0xe3a6,
+ 0xe3a7, 0xe3a8, 0xe3a9, 0x82aa, 0x691b, 0xe3ac, 0x41db, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x854b, 0x82d0, 0x831a, 0xe3b1, 0xe3b2, 0x36c1, 0xe3b4, 0xe3b5,
+ 0x827b, 0x82e2, 0x8318, 0xe3b9, 0xe3ba, 0xe3bb, 0xe3bc, 0xe3bd,
+ 0x3dbf, 0x831d, 0x55ec, 0x8385, 0x450b, 0xe3c3, 0x83ac, 0x83c1,
+ 0x83d3, 0x347e, 0xe3c8, 0x6a57, 0x855a, 0x3496, 0xe3cc, 0xe3cd,
+ 0x8458, 0xe3cf, 0x8471, 0x3dd3, 0x44e4, 0x6aa7, 0x844a, 0xe3d5,
+ 0x7958, 0x84a8, 0xe3d8, 0xe3d9, 0xe3da, 0x84de, 0x840f, 0x8391,
+ 0x44a0, 0x8493, 0x84e4, 0xe3e1, 0x4240, 0xe3e3, 0x4543, 0x8534,
+ 0x5af2, 0xe3e7, 0x4527, 0x8573, 0x4516, 0x67bf, 0x8616, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe3ed, 0xe3ee, 0x85c1, 0xe3f0, 0x8602, 0xe3f2, 0xe3f3,
+ 0xe3f4, 0x456a, 0x8628, 0x3648, 0xe3f8, 0x53f7, 0xe3fa, 0x867e,
+ 0x8771, 0xe3fd, 0x87ee, 0xe3ff, 0x87b1, 0x87da, 0x880f, 0x5661,
+ 0x866c, 0x6856, 0x460f, 0x8845, 0x8846, 0xe409, 0xe40a, 0xe40b,
+ 0x885e, 0x889c, 0x465b, 0x88b4, 0x88b5, 0x63c1, 0x88c5, 0x7777,
+ 0xe414, 0x8987, 0x898a, 0x89a6, 0x89a9, 0x89a7, 0x89bc, 0xe41b,
+ 0x89e7, 0xe41d, 0xe41e, 0x8a9c, 0x7793, 0x91fe, 0x8a90, 0xe423,
+ 0x7ae9, 0xe425, 0xe426, 0x4713, 0xe428, 0x717c, 0x8b0c, 0x8b1f,
+ 0xe42c, 0xe42d, 0x8b3f, 0x8b4c, 0x8b4d, 0x8aa9, 0xe432, 0x8b90,
+ 0x8b9b, 0x8aaf, 0xe436, 0x4615, 0x884f, 0x8c9b, 0xe43a, 0xe43b,
+ 0xe43c, 0x3725, 0xe43e, 0x8cd6, 0xe440, 0xe441, 0x8d12, 0x8d03,
+ 0xe444, 0x8cdb, 0x705c, 0x8d11, 0xe448, 0x3ed0, 0x8d77, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8da9, 0xe44c, 0xe44d, 0xe44e, 0x3b7c, 0xe450, 0xe451, 0x7ae7,
+ 0x8ead, 0x8eb6, 0x8ec3, 0x92d4, 0x8f19, 0x8f2d, 0xe459, 0xe45a,
+ 0x8fa5, 0x9303, 0xe45d, 0xe45e, 0x8fb3, 0x492a, 0xe461, 0xe462,
+ 0xe463, 0x5ef8, 0xe465, 0x8ff9, 0xe467, 0xe468, 0xe469, 0xe46a,
+ 0x3980, 0xe46c, 0x9037, 0xe46e, 0xe46f, 0x9061, 0xe471, 0xe472,
+ 0x90a8, 0xe474, 0x90c4, 0xe476, 0x90ae, 0x90fd, 0x9167, 0x3af0,
+ 0x91a9, 0x91c4, 0x7cac, 0xe47e, 0xe47f, 0x920e, 0x6c9f, 0x9241,
+ 0x9262, 0xe484, 0x92b9, 0xe486, 0xe487, 0xe488, 0xe489, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe48a, 0x932c, 0x936b, 0xe48d, 0xe48e, 0x708f, 0x5ac3,
+ 0xe491, 0xe492, 0x4965, 0x9244, 0xe495, 0xe496, 0xe497, 0x9373,
+ 0x945b, 0x8ebc, 0x9585, 0x95a6, 0x9426, 0x95a0, 0x6ff6, 0x42b9,
+ 0xe4a1, 0xe4a2, 0xe4a3, 0xe4a4, 0x49df, 0x6c1c, 0x967b, 0x9696,
+ 0x416c, 0x96a3, 0xe4ab, 0x61da, 0x96b6, 0x78f5, 0xe4af, 0x96bd,
+ 0x53cc, 0x49a1, 0xe4b3, 0xe4b4, 0xe4b5, 0xe4b6, 0xe4b7, 0xe4b8,
+ 0xe4b9, 0xe4ba, 0x9731, 0x8642, 0x9736, 0x4a0f, 0x453d, 0x4585,
+ 0xe4c1, 0x7075, 0x5b41, 0x971b, 0x975c, 0xe4c6, 0x9757, 0x5b4a,
+ 0xe4c9, 0x975f, 0x9425, 0x50d0, 0xe4cd, 0xe4ce, 0x9789, 0x979f,
+ 0x97b1, 0x97be, 0x97c0, 0x97d2, 0x97e0, 0xe4d6, 0x97ee, 0x741c,
+ 0xe4d9, 0x97ff, 0x97f5, 0xe4dc, 0xe4dd, 0x4ad1, 0x9834, 0x9833,
+ 0x984b, 0x9866, 0x3b0e, 0xe4e4, 0x3d51, 0xe4e6, 0xe4e7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe4e8, 0x98ca, 0x98b7, 0x98c8, 0x98c7, 0x4aff, 0xe4ee, 0xe4ef,
+ 0x55b0, 0x98e1, 0x98e6, 0x98ec, 0x9378, 0x9939, 0xe4f6, 0x4b72,
+ 0xe4f8, 0xe4f9, 0x99f5, 0x9a0c, 0x9a3b, 0x9a10, 0x9a58, 0xe4ff,
+ 0x36c4, 0xe501, 0xe502, 0x9ae0, 0x9ae2, 0xe505, 0x9af4, 0x4c0e,
+ 0x9b14, 0x9b2d, 0xe50a, 0x5034, 0x9b34, 0xe50d, 0x38c3, 0xe50f,
+ 0x9b50, 0x9b40, 0xe512, 0x5a45, 0xe514, 0x9b8e, 0xe516, 0x9c02,
+ 0x9bff, 0x9c0c, 0xe51a, 0x9dd4, 0xe51c, 0xe51d, 0xe51e, 0xe51f,
+ 0xe520, 0xe521, 0x9d7e, 0x9d83, 0xe524, 0x9e0e, 0x6888, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9dc4, 0xe528, 0xe529, 0xe52a, 0xe52b, 0xe52c, 0x9d39,
+ 0xe52e, 0xe52f, 0x9e90, 0x9e95, 0x9e9e, 0x9ea2, 0x4d34, 0x9eaa,
+ 0x9eaf, 0xe537, 0x9ec1, 0x3b60, 0x39e5, 0x3d1d, 0x4f32, 0x37be,
+ 0xe53e, 0x9f02, 0x9f08, 0x4b96, 0x9424, 0xe543, 0x9f17, 0x9f16,
+ 0x9f39, 0x569f, 0x568a, 0x9f45, 0x99b8, 0xe54b, 0x97f2, 0x847f,
+ 0x9f62, 0x9f69, 0x7adc, 0x9f8e, 0x7216, 0x4bbe, 0xe554, 0xe555,
+ 0x7177, 0xe557, 0xe558, 0xe559, 0x739e, 0xe55b, 0xe55c, 0x799f,
+ 0xe55e, 0xe55f, 0x9369, 0x93f3, 0xe562, 0x92ec, 0x9381, 0x93cb,
+ 0xe566, 0xe567, 0x7217, 0x3eeb, 0x7772, 0x7a43, 0x70d0, 0xe56d,
+ 0xe56e, 0x717e, 0xe570, 0x70a3, 0xe572, 0xe573, 0x3ec7, 0xe575,
+ 0xe576, 0xe577, 0x3722, 0xe579, 0xe57a, 0x36e1, 0xe57c, 0xe57d,
+ 0xe57e, 0x3723, 0xe580, 0x575b, 0xe582, 0xe583, 0xe584, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe585, 0xe586, 0x8503, 0xe588, 0x8503, 0x8455, 0xe58b, 0xe58c,
+ 0xe58d, 0xe58e, 0xe58f, 0xe590, 0x44f4, 0xe592, 0xe593, 0xe594,
+ 0x67f9, 0x3733, 0x3c15, 0x3de7, 0x586c, 0xe59a, 0x6810, 0x4057,
+ 0xe59d, 0xe59e, 0xe59f, 0xe5a0, 0xe5a1, 0x54cb, 0x569e, 0xe5a4,
+ 0x5692, 0xe5a6, 0xe5a7, 0xe5a8, 0x93c6, 0xe5aa, 0x939c, 0x4ef8,
+ 0x512b, 0x3819, 0xe5af, 0x4ebc, 0xe5b1, 0xe5b2, 0x4f4b, 0x4f8a,
+ 0xe5b5, 0x5a68, 0xe5b7, 0xe5b8, 0x3999, 0xe5ba, 0xe5bb, 0x3435,
+ 0x4f29, 0xe5be, 0xe5bf, 0xe5c0, 0x8ada, 0xe5c2, 0x4e98, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x50cd, 0x510d, 0x4fa2, 0x4f03, 0xe5c8, 0xe5c9, 0x4f42,
+ 0x502e, 0x506c, 0x5081, 0x4fcc, 0x4fe5, 0x5058, 0x50fc, 0x5159,
+ 0x515b, 0x515d, 0x515e, 0x6e76, 0xe5d7, 0xe5d8, 0xe5d9, 0x6d72,
+ 0xe5db, 0xe5dc, 0x51a8, 0x51c3, 0xe5df, 0x44dd, 0xe5e1, 0xe5e2,
+ 0xe5e3, 0x8d7a, 0xe5e5, 0xe5e6, 0x5259, 0x52a4, 0xe5e9, 0x52e1,
+ 0x936e, 0x467a, 0x718c, 0xe5ee, 0xe5ef, 0xe5f0, 0xe5f1, 0x69d1,
+ 0xe5f3, 0x7479, 0x3ede, 0x7499, 0x7414, 0x7456, 0x7398, 0x4b8e,
+ 0xe5fb, 0xe5fc, 0x53d0, 0x3584, 0x720f, 0xe600, 0x55b4, 0xe602,
+ 0x54cd, 0xe604, 0x571d, 0x925d, 0x96f4, 0x9366, 0x57dd, 0x578d,
+ 0x577f, 0x363e, 0x58cb, 0x5a99, 0xe60f, 0xe610, 0xe611, 0xe612,
+ 0x5a2c, 0x59b8, 0x928f, 0x5a7e, 0x5acf, 0x5a12, 0xe619, 0xe61a,
+ 0xe61b, 0xe61c, 0x36f5, 0x6d05, 0x7443, 0x5a21, 0xe621, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5a81, 0xe623, 0xe624, 0x93e0, 0x748c, 0xe627, 0x7105, 0x4972,
+ 0x9408, 0xe62b, 0x93bd, 0x37a0, 0x5c1e, 0x5c9e, 0x5e5e, 0x5e48,
+ 0xe632, 0xe633, 0xe634, 0x5ecd, 0x5b4f, 0xe637, 0xe638, 0x3701,
+ 0xe63a, 0x36dd, 0xe63c, 0x36d3, 0x812a, 0xe63f, 0xe640, 0xe641,
+ 0xe642, 0x5f0c, 0x5f0e, 0xe645, 0xe646, 0x5a6b, 0xe648, 0x5b44,
+ 0x8614, 0xe64b, 0x8860, 0x607e, 0xe64e, 0xe64f, 0x5fdb, 0x3eb8,
+ 0xe652, 0xe653, 0xe654, 0xe655, 0x61c0, 0xe657, 0xe658, 0xe659,
+ 0x6199, 0x6198, 0x6075, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6471, 0xe662, 0xe663, 0x3a29, 0xe665, 0xe666, 0xe667,
+ 0xe668, 0x6337, 0xe66a, 0x64b6, 0x6331, 0x63d1, 0xe66e, 0xe66f,
+ 0x62a4, 0xe671, 0x643b, 0x656b, 0x6972, 0x3bf4, 0xe676, 0xe677,
+ 0xe678, 0xe679, 0x550d, 0xe67b, 0xe67c, 0xe67d, 0x66ce, 0xe67f,
+ 0xe680, 0x3ae0, 0x4190, 0xe683, 0xe684, 0xe685, 0xe686, 0xe687,
+ 0xe688, 0x78ee, 0xe68a, 0xe68b, 0xe68c, 0x3464, 0xe68e, 0xe68f,
+ 0xe690, 0x668e, 0xe692, 0x666b, 0x4b93, 0x6630, 0xe696, 0xe697,
+ 0x6663, 0xe699, 0xe69a, 0x661e, 0xe69c, 0x38d1, 0xe69e, 0xe69f,
+ 0x3b99, 0xe6a1, 0xe6a2, 0x74d0, 0x3b96, 0x678f, 0xe6a6, 0x68b6,
+ 0x681e, 0x3bc4, 0x6abe, 0x3863, 0xe6ac, 0xe6ad, 0x6a33, 0x6a52,
+ 0x6ac9, 0x6b05, 0xe6b2, 0x6511, 0x6898, 0x6a4c, 0x3bd7, 0x6a7a,
+ 0x6b57, 0xe6b9, 0xe6ba, 0x93a0, 0x92f2, 0xe6bd, 0xe6be, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9289, 0xe6c0, 0xe6c1, 0x9467, 0x6da5, 0x6f0b, 0xe6c5, 0x6d67,
+ 0xe6c7, 0x3d8f, 0x6e04, 0xe6ca, 0x5a3d, 0x6e0a, 0x5847, 0x6d24,
+ 0x7842, 0x713b, 0xe6d1, 0xe6d2, 0x70f1, 0x7250, 0x7287, 0x7294,
+ 0xe6d7, 0xe6d8, 0x5179, 0xe6da, 0xe6db, 0x747a, 0xe6dd, 0xe6de,
+ 0xe6df, 0xe6e0, 0xe6e1, 0x3f06, 0x3eb1, 0xe6e4, 0xe6e5, 0xe6e6,
+ 0x60a7, 0x3ef3, 0x74cc, 0x743c, 0x9387, 0x7437, 0x449f, 0xe6ee,
+ 0x4551, 0x7583, 0x3f63, 0xe6f2, 0xe6f3, 0x3f58, 0x7555, 0x7673,
+ 0xe6f7, 0x3b19, 0x7468, 0xe6fa, 0xe6fb, 0xe6fc, 0x3afb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3dcd, 0xe6ff, 0x3eff, 0xe701, 0xe702, 0x91fa, 0x5732,
+ 0x9342, 0xe706, 0xe707, 0x50df, 0xe709, 0xe70a, 0x7778, 0xe70c,
+ 0x770e, 0x770f, 0x777b, 0xe710, 0xe711, 0x3a5e, 0xe713, 0x7438,
+ 0x749b, 0x3ebf, 0xe717, 0xe718, 0x40c8, 0xe71a, 0xe71b, 0x9307,
+ 0xe71d, 0x781e, 0x788d, 0x7888, 0x78d2, 0x73d0, 0x7959, 0xe724,
+ 0xe725, 0x410e, 0x799b, 0x8496, 0x79a5, 0x6a2d, 0xe72b, 0x7a3a,
+ 0x79f4, 0x416e, 0xe72f, 0x4132, 0x9235, 0x79f1, 0xe733, 0xe734,
+ 0xe735, 0xe736, 0xe737, 0x3597, 0x556b, 0x3570, 0x36aa, 0xe73c,
+ 0xe73d, 0x7ae2, 0x5a59, 0xe740, 0xe741, 0xe742, 0x5a0d, 0xe744,
+ 0x78f0, 0x5a2a, 0xe747, 0x7afe, 0x41f9, 0x7c5d, 0x7c6d, 0x4211,
+ 0xe74d, 0xe74e, 0xe74f, 0x7ccd, 0xe751, 0xe752, 0x7c8e, 0x7c7c,
+ 0x7cae, 0x6ab2, 0x7ddc, 0x7e07, 0x7dd3, 0x7f4e, 0xe75b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe75c, 0xe75d, 0x7d97, 0xe75f, 0x426a, 0xe761, 0xe762, 0x67d6,
+ 0xe764, 0xe765, 0x57c4, 0xe767, 0xe768, 0xe769, 0x7fdd, 0x7b27,
+ 0xe76c, 0xe76d, 0xe76e, 0x7b0c, 0xe770, 0x99e6, 0x8645, 0x9a63,
+ 0x6a1c, 0xe775, 0x39e2, 0xe777, 0xe778, 0x9a1f, 0xe77a, 0x8480,
+ 0xe77c, 0xe77d, 0x44ea, 0x8137, 0x4402, 0x80c6, 0x8109, 0x8142,
+ 0xe784, 0x98c3, 0xe786, 0x8262, 0x8265, 0xe789, 0x8453, 0xe78b,
+ 0x8610, 0xe78d, 0x5a86, 0x417f, 0xe790, 0x5b2b, 0xe792, 0x5ae4,
+ 0xe794, 0x86a0, 0xe796, 0xe797, 0x882d, 0xe799, 0x5a02, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x886e, 0x4f45, 0x8887, 0x88bf, 0x88e6, 0x8965, 0x894d,
+ 0xe7a2, 0x8954, 0xe7a4, 0xe7a5, 0xe7a6, 0xe7a7, 0xe7a8, 0xe7a9,
+ 0x3ead, 0x84a3, 0x46f5, 0x46cf, 0x37f2, 0x8a3d, 0x8a1c, 0xe7b1,
+ 0x5f4d, 0x922b, 0xe7b4, 0x65d4, 0x7129, 0x70c4, 0xe7b8, 0x9d6d,
+ 0x8c9f, 0x8ce9, 0xe7bc, 0x599a, 0x77c3, 0x59f0, 0x436e, 0x36d4,
+ 0x8e2a, 0x8ea7, 0xe7c4, 0x8f30, 0x8f4a, 0x42f4, 0x6c58, 0x6fbb,
+ 0xe7ca, 0x489b, 0x6f79, 0x6e8b, 0xe7ce, 0x9be9, 0x36b5, 0xe7d1,
+ 0x90bb, 0x9097, 0x5571, 0x4906, 0x91bb, 0x9404, 0xe7d8, 0x4062,
+ 0xe7da, 0x9427, 0xe7dc, 0xe7dd, 0x84e5, 0x8a2b, 0x9599, 0x95a7,
+ 0x9597, 0x9596, 0xe7e4, 0x7445, 0x3ec2, 0xe7e7, 0xe7e8, 0xe7e9,
+ 0x3ee7, 0xe7eb, 0x968f, 0xe7ed, 0xe7ee, 0xe7ef, 0x3ecc, 0xe7f1,
+ 0xe7f2, 0xe7f3, 0x7412, 0x746b, 0x3efc, 0x9741, 0xe7f8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6847, 0x4a1d, 0xe7fb, 0xe7fc, 0x975d, 0x9368, 0xe7ff, 0xe800,
+ 0xe801, 0xe802, 0x92ba, 0x5b11, 0x8b69, 0x493c, 0x73f9, 0xe808,
+ 0x979b, 0x9771, 0x9938, 0xe80c, 0x5dc1, 0xe80e, 0xe80f, 0x981f,
+ 0xe811, 0x92f6, 0xe813, 0x91e5, 0x44c0, 0xe816, 0xe817, 0xe818,
+ 0x98dc, 0xe81a, 0x3f00, 0x922a, 0x4925, 0x8414, 0x993b, 0x994d,
+ 0xe821, 0x3dfd, 0x999b, 0x4b6f, 0x99aa, 0x9a5c, 0xe827, 0xe828,
+ 0x6a8f, 0x9a21, 0x5afe, 0x9a2f, 0xe82d, 0x4b90, 0xe82f, 0x99bc,
+ 0x4bbd, 0x4b97, 0x937d, 0x5872, 0xe835, 0x5822, 0xe837, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe838, 0x7844, 0xe83a, 0xe83b, 0x68c5, 0x3d7d, 0x9458,
+ 0x3927, 0x6150, 0xe841, 0xe842, 0x6107, 0x9c4f, 0x9c53, 0x9c7b,
+ 0x9c35, 0x9c10, 0x9b7f, 0x9bcf, 0xe84b, 0x9b9f, 0xe84d, 0xe84e,
+ 0x9d21, 0x4cae, 0xe851, 0x9e18, 0x4cb0, 0x9d0c, 0xe855, 0xe856,
+ 0xe857, 0xe858, 0x9da5, 0x84bd, 0xe85b, 0xe85c, 0xe85d, 0x85fc,
+ 0x4533, 0xe860, 0xe861, 0xe862, 0x8420, 0x85ee, 0xe865, 0xe866,
+ 0xe867, 0x79e2, 0xe869, 0xe86a, 0x492d, 0xe86c, 0x3d62, 0x93db,
+ 0x92be, 0x9348, 0xe871, 0x78b9, 0x9277, 0x944d, 0x4fe4, 0x3440,
+ 0x9064, 0xe878, 0x783d, 0x7854, 0x78b6, 0x784b, 0xe87d, 0xe87e,
+ 0xe87f, 0x369a, 0x4f72, 0x6fda, 0x6fd9, 0x701e, 0x701e, 0x5414,
+ 0xe887, 0x57bb, 0x58f3, 0x578a, 0x9d16, 0x57d7, 0x7134, 0x34af,
+ 0xe88f, 0x71eb, 0xe891, 0xe892, 0x5b28, 0xe894, 0xe895, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x610c, 0x5ace, 0x5a0b, 0x42bc, 0xe89a, 0x372c, 0x4b7b, 0xe89d,
+ 0x93bb, 0x93b8, 0xe8a0, 0xe8a1, 0x8472, 0xe8a3, 0xe8a4, 0xe8a5,
+ 0xe8a6, 0xe8a7, 0x5994, 0xe8a9, 0xe8aa, 0x7da8, 0xe8ac, 0xe8ad,
+ 0xe8ae, 0xe8af, 0xe8b0, 0x92e5, 0x73e2, 0x3ee9, 0x74b4, 0xe8b5,
+ 0xe8b6, 0x3ee1, 0xe8b8, 0x6ad8, 0x73f3, 0x73fb, 0x3ed6, 0xe8bd,
+ 0xe8be, 0xe8bf, 0xe8c0, 0xe8c1, 0xe8c2, 0xe8c3, 0x7448, 0xe8c5,
+ 0x70a5, 0xe8c7, 0x9284, 0x73e6, 0x935f, 0xe8cb, 0x9331, 0xe8cd,
+ 0xe8ce, 0x9386, 0xe8d0, 0xe8d1, 0x4935, 0xe8d3, 0x716b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe8d5, 0xe8d6, 0x56a4, 0xe8d8, 0xe8d9, 0xe8da, 0x5502,
+ 0x79c4, 0xe8dd, 0x7dfe, 0xe8df, 0xe8e0, 0xe8e1, 0x452e, 0x9401,
+ 0x370a, 0xe8e5, 0xe8e6, 0x59b0, 0xe8e8, 0xe8e9, 0xe8ea, 0x5aa1,
+ 0x36e2, 0xe8ed, 0x36b0, 0x925f, 0x5a79, 0xe8f1, 0xe8f2, 0x9374,
+ 0x3ccd, 0xe8f5, 0x4a96, 0x398a, 0x50f4, 0x3d69, 0x3d4c, 0xe8fb,
+ 0x7175, 0x42fb, 0xe8fe, 0x6e0f, 0xe900, 0x44eb, 0x6d57, 0xe903,
+ 0x7067, 0x6caf, 0x3cd6, 0xe907, 0xe908, 0x6e02, 0x6f0c, 0x3d6f,
+ 0xe90c, 0x7551, 0x36bc, 0x34c8, 0x4680, 0x3eda, 0x4871, 0x59c4,
+ 0x926e, 0x493e, 0x8f41, 0xe917, 0xe918, 0x5812, 0x57c8, 0x36d6,
+ 0xe91c, 0x70fe, 0xe91e, 0xe91f, 0xe920, 0xe921, 0xe922, 0x68b9,
+ 0x6967, 0xe925, 0xe926, 0xe927, 0xe928, 0xe929, 0xe92a, 0xe92b,
+ 0xe92c, 0x6a1a, 0xe92e, 0xe92f, 0x843e, 0x44df, 0x44ce, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe933, 0xe934, 0xe935, 0xe936, 0x6f17, 0xe938, 0x833d, 0xe93a,
+ 0x83ed, 0xe93c, 0xe93d, 0xe93e, 0x5989, 0x5a82, 0xe941, 0x5a61,
+ 0x5a71, 0xe944, 0xe945, 0x372d, 0x59ef, 0xe948, 0x36c7, 0x718e,
+ 0x9390, 0x669a, 0xe94d, 0x5a6e, 0x5a2b, 0xe950, 0x6a2b, 0xe952,
+ 0xe953, 0xe954, 0xe955, 0x711d, 0xe957, 0xe958, 0x4fb0, 0xe95a,
+ 0x5cc2, 0xe95c, 0xe95d, 0xe95e, 0x6a0c, 0xe960, 0xe961, 0x70a6,
+ 0x7133, 0xe964, 0x3da5, 0x6cdf, 0xe967, 0xe968, 0x7e65, 0x59eb,
+ 0x5d2f, 0x3df3, 0x5f5c, 0xe96e, 0xe96f, 0x7da4, 0x8426, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5485, 0xe973, 0xe974, 0xe975, 0x577e, 0xe977, 0xe978,
+ 0x3fe5, 0xe97a, 0xe97b, 0x7003, 0xe97d, 0x5d70, 0x738f, 0x7cd3,
+ 0xe981, 0xe982, 0x4fc8, 0x7fe7, 0x72cd, 0x7310, 0xe987, 0x7338,
+ 0x7339, 0xe98a, 0x7341, 0x7348, 0x3ea9, 0xe98e, 0x906c, 0x71f5,
+ 0xe991, 0x73e1, 0x81f6, 0x3eca, 0x770c, 0x3ed1, 0x6ca2, 0x56fd,
+ 0x7419, 0x741e, 0x741f, 0x3ee2, 0x3ef0, 0x3ef4, 0x3efa, 0x74d3,
+ 0x3f0e, 0x3f53, 0x7542, 0x756d, 0x7572, 0x758d, 0x3f7c, 0x75c8,
+ 0x75dc, 0x3fc0, 0x764d, 0x3fd7, 0x7674, 0x3fdc, 0x767a, 0xe9b0,
+ 0x7188, 0x5623, 0x8980, 0x5869, 0x401d, 0x7743, 0x4039, 0x6761,
+ 0x4045, 0x35db, 0x7798, 0x406a, 0x406f, 0x5c5e, 0x77be, 0x77cb,
+ 0x58f2, 0x7818, 0x70b9, 0x781c, 0x40a8, 0x7839, 0x7847, 0x7851,
+ 0x7866, 0x8448, 0xe9cb, 0x7933, 0x6803, 0x7932, 0x4103, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4109, 0x7991, 0x7999, 0x8fbb, 0x7a06, 0x8fbc, 0x4167, 0x7a91,
+ 0x41b2, 0x7abc, 0x8279, 0x41c4, 0x7acf, 0x7adb, 0x41cf, 0x4e21,
+ 0x7b62, 0x7b6c, 0x7b7b, 0x7c12, 0x7c1b, 0x4260, 0x427a, 0x7c7b,
+ 0x7c9c, 0x428c, 0x7cb8, 0x4294, 0x7ced, 0x8f93, 0x70c0, 0xe9ef,
+ 0x7dcf, 0x7dd4, 0x7dd0, 0x7dfd, 0x7fae, 0x7fb4, 0x729f, 0x4397,
+ 0x8020, 0x8025, 0x7b39, 0x802e, 0x8031, 0x8054, 0x3dcc, 0x57b4,
+ 0x70a0, 0x80b7, 0x80e9, 0x43ed, 0x810c, 0x732a, 0x810e, 0x8112,
+ 0x7560, 0x8114, 0x4401, 0x3b39, 0x8156, 0x8159, 0x815a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4413, 0x583a, 0x817c, 0x8184, 0x4425, 0x8193, 0x442d,
+ 0x81a5, 0x57ef, 0x81c1, 0x81e4, 0x8254, 0x448f, 0x82a6, 0x8276,
+ 0x82ca, 0x82d8, 0x82ff, 0x44b0, 0x8357, 0x9669, 0x698a, 0x8405,
+ 0x70f5, 0x8464, 0x60e3, 0x8488, 0x4504, 0x84be, 0x84e1, 0x84f8,
+ 0x8510, 0x8538, 0x8552, 0x453b, 0x856f, 0x8570, 0x85e0, 0x4577,
+ 0x8672, 0x8692, 0x86b2, 0x86ef, 0x9645, 0x878b, 0x4606, 0x4617,
+ 0x88ae, 0x88ff, 0x8924, 0x8947, 0x8991, 0xea43, 0x8a29, 0x8a38,
+ 0x8a94, 0x8ab4, 0x8c51, 0x8cd4, 0x8cf2, 0x8d1c, 0x4798, 0x585f,
+ 0x8dc3, 0x47ed, 0x4eee, 0x8e3a, 0x55d8, 0x5754, 0x8e71, 0x55f5,
+ 0x8eb0, 0x4837, 0x8ece, 0x8ee2, 0x8ee4, 0x8eed, 0x8ef2, 0x8fb7,
+ 0x8fc1, 0x8fca, 0x8fcc, 0x9033, 0x99c4, 0x48ad, 0x98e0, 0x9213,
+ 0x491e, 0x9228, 0x9258, 0x926b, 0x92b1, 0x92ae, 0x92bf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x92e3, 0x92eb, 0x92f3, 0x92f4, 0x92fd, 0x9343, 0x9384, 0x93ad,
+ 0x4945, 0x4951, 0x9ebf, 0x9417, 0x5301, 0x941d, 0x942d, 0x943e,
+ 0x496a, 0x9454, 0x9479, 0x952d, 0x95a2, 0x49a7, 0x95f4, 0x9633,
+ 0x49e5, 0x67a0, 0x4a24, 0x9740, 0x4a35, 0x97b2, 0x97c2, 0x5654,
+ 0x4ae4, 0x60e8, 0x98b9, 0x4b19, 0x98f1, 0x5844, 0x990e, 0x9919,
+ 0x51b4, 0x991c, 0x9937, 0x9942, 0x995d, 0x9962, 0x4b70, 0x99c5,
+ 0x4b9d, 0x9a3c, 0x9b0f, 0x7a83, 0x9b69, 0x9b81, 0x9bdd, 0x9bf1,
+ 0x9bf4, 0x4c6d, 0x9c20, 0x376f, 0xeaa9, 0x9d49, 0x9c3a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9efe, 0x5650, 0x9d93, 0x9dbd, 0x9dc0, 0x9dfc, 0x94f6,
+ 0x8fb6, 0x9e7b, 0x9eac, 0x9eb1, 0x9ebd, 0x9ec6, 0x94dc, 0x9ee2,
+ 0x9ef1, 0x9ef8, 0x7ac8, 0x9f44, 0xeabf, 0xeac0, 0xeac1, 0x691a,
+ 0x94c3, 0x59ac, 0xeac5, 0x5840, 0x94c1, 0x37b9, 0xeac9, 0xeaca,
+ 0xeacb, 0xeacc, 0x5757, 0x7173, 0xeacf, 0xead0, 0xead1, 0x546a,
+ 0xead3, 0xead4, 0x549e, 0xead6, 0xead7, 0xead8, 0xead9, 0xeada,
+ 0x60e7, 0xeadc, 0x567a, 0xeade, 0xeadf, 0xeae0, 0xeae1, 0xeae2,
+ 0xeae3, 0x6955, 0x9c2f, 0x87a5, 0xeae7, 0xeae8, 0xeae9, 0xeaea,
+ 0xeaeb, 0xeaec, 0x5c20, 0xeaee, 0x5e0b, 0xeaf0, 0xeaf1, 0xeaf2,
+ 0x671e, 0xeaf4, 0xeaf5, 0xeaf6, 0x3647, 0xeaf8, 0xeaf9, 0xeafa,
+ 0xeafb, 0x5364, 0x84ad, 0xeafe, 0xeaff, 0xeb00, 0x8b81, 0xeb02,
+ 0xeb03, 0xeb04, 0xeb05, 0x4e78, 0x70bb, 0xeb08, 0xeb09, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xeb0a, 0xeb0b, 0xeb0c, 0xeb0d, 0xeb0e, 0xeb0f, 0x62c3, 0xeb11,
+ 0xeb12, 0x7198, 0x6855, 0xeb15, 0x69e9, 0x36c8, 0xeb18, 0xeb19,
+ 0xeb1a, 0xeb1b, 0xeb1c, 0xeb1d, 0x82fd, 0xeb1f, 0xeb20, 0xeb21,
+ 0x89a5, 0xeb23, 0x8fa0, 0xeb25, 0x97b8, 0xeb27, 0x9847, 0x9abd,
+ 0xeb2a, 0xeb2b, 0xeb2c, 0xeb2d, 0xeb2e, 0xeb2f, 0xeb30, 0xeb31,
+ 0xeb32, 0xeb33, 0xeb34, 0xeb35, 0xeb36, 0xeb37, 0xeb38, 0xeb39,
+ 0x5fb1, 0x6648, 0x66bf, 0xeb3d, 0xeb3e, 0xeb3f, 0x7201, 0xeb41,
+ 0x77d7, 0xeb43, 0xeb44, 0x7e87, 0xeb46, 0x58b5, 0x670e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6918, 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f,
+ 0xeb50, 0x48d0, 0x4ab8, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57,
+ 0xeb58, 0xeb59, 0xeb5a, 0xeb5b, 0x51d2, 0xeb5d, 0x599f, 0xeb5f,
+ 0x3bbe, 0xeb61, 0xeb62, 0xeb63, 0x5788, 0xeb65, 0x399b, 0xeb67,
+ 0xeb68, 0xeb69, 0x3762, 0xeb6b, 0x8b5e, 0xeb6d, 0x99d6, 0xeb6f,
+ 0xeb70, 0xeb71, 0x7209, 0xeb73, 0xeb74, 0x5965, 0xeb76, 0xeb77,
+ 0xeb78, 0x8eda, 0xeb7a, 0x528f, 0x573f, 0x7171, 0xeb7e, 0xeb7f,
+ 0xeb80, 0xeb81, 0x55bc, 0xeb83, 0xeb84, 0xeb85, 0x91d4, 0x3473,
+ 0xeb88, 0xeb89, 0xeb8a, 0x4718, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f,
+ 0xeb90, 0x5066, 0x34fb, 0xeb93, 0x60de, 0xeb95, 0x477c, 0xeb97,
+ 0xeb98, 0xeb99, 0xeb9a, 0xeb9b, 0x57a1, 0x7151, 0x6fb6, 0xeb9f,
+ 0xeba0, 0x9056, 0xeba2, 0xeba3, 0x8b62, 0xeba5, 0xeba6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5d5b, 0xeba8, 0x8f36, 0xebaa, 0xebab, 0x8aea, 0xebad, 0xebae,
+ 0xebaf, 0xebb0, 0x4bc0, 0xebb2, 0xebb3, 0xebb4, 0x9465, 0xebb6,
+ 0x6195, 0x5a27, 0xebb9, 0x4fbb, 0x56b9, 0xebbc, 0xebbd, 0x4e6a,
+ 0xebbf, 0x9656, 0x6d8f, 0xebc2, 0x3618, 0x8977, 0xebc5, 0xebc6,
+ 0xebc7, 0xebc8, 0x71df, 0xebca, 0x7b42, 0xebcc, 0xebcd, 0xebce,
+ 0x9104, 0xebd0, 0x7a45, 0x9df0, 0xebd3, 0x9a26, 0xebd5, 0x365f,
+ 0xebd7, 0xebd8, 0x7983, 0xebda, 0xebdb, 0x5d2c, 0xebdd, 0x83cf,
+ 0xebdf, 0x46d0, 0xebe1, 0x753b, 0x8865, 0xebe4, 0x58b6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x371c, 0xebe7, 0xebe8, 0xebe9, 0x3c54, 0xebeb, 0xebec,
+ 0x9281, 0xebee, 0xebef, 0x9330, 0xebf1, 0xebf2, 0x6c39, 0x949f,
+ 0xebf5, 0xebf6, 0x8827, 0x88f5, 0xebf9, 0xebfa, 0xebfb, 0x6eb8,
+ 0xebfd, 0xebfe, 0x39a4, 0x36b9, 0x5c10, 0x79e3, 0x453f, 0x66b6,
+ 0xec05, 0xec06, 0x8943, 0xec08, 0xec09, 0x56d6, 0x40df, 0xec0c,
+ 0x39a1, 0xec0e, 0xec0f, 0xec10, 0x71ad, 0x8366, 0xec13, 0xec14,
+ 0x5a67, 0x4cb7, 0xec17, 0xec18, 0xec19, 0xec1a, 0xec1b, 0xec1c,
+ 0xec1d, 0x7b43, 0x797e, 0xec20, 0x6fb5, 0xec22, 0x6a03, 0xec24,
+ 0x53a2, 0xec26, 0x93bf, 0x6836, 0x975d, 0xec2a, 0xec2b, 0xec2c,
+ 0xec2d, 0xec2e, 0xec2f, 0x5d85, 0xec31, 0xec32, 0x5715, 0x9823,
+ 0xec35, 0x5dab, 0xec37, 0x65be, 0x69d5, 0x53d2, 0xec3b, 0xec3c,
+ 0x3c11, 0x6736, 0xec3f, 0xec40, 0xec41, 0xec42, 0xec43, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xec44, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49, 0x35ca, 0xec4b,
+ 0xec4c, 0x48fa, 0x63e6, 0xec4f, 0x7808, 0x9255, 0xec52, 0x43f2,
+ 0xec54, 0x43df, 0xec56, 0xec57, 0xec58, 0x59f8, 0xec5a, 0x8f0b,
+ 0xec5c, 0xec5d, 0x7b51, 0xec5f, 0xec60, 0x3df7, 0xec62, 0xec63,
+ 0x8fd0, 0x728f, 0x568b, 0xec67, 0xec68, 0xec69, 0xec6a, 0xec6b,
+ 0xec6c, 0xec6d, 0xec6e, 0xec6f, 0xec70, 0xec71, 0xec72, 0xec73,
+ 0x7e9f, 0xec75, 0xec76, 0x4ca4, 0x9547, 0xec79, 0x71a2, 0xec7b,
+ 0x4d91, 0x9012, 0xec7e, 0x4d9c, 0xec80, 0x8fbe, 0x55c1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8fba, 0xec84, 0x8fb9, 0xec86, 0x4509, 0x7e7f, 0x6f56,
+ 0x6ab1, 0x4eea, 0x34e4, 0xec8d, 0xec8e, 0x373a, 0x8e80, 0xec91,
+ 0xec92, 0xec93, 0xec94, 0xec95, 0xec96, 0x3deb, 0xec98, 0xec99,
+ 0xec9a, 0xec9b, 0x4e9a, 0xec9d, 0xec9e, 0x56bf, 0xeca0, 0x8e0e,
+ 0x5b6d, 0xeca3, 0xeca4, 0x63de, 0x62d0, 0xeca7, 0xeca8, 0x6530,
+ 0x562d, 0xecab, 0x541a, 0xecad, 0x3dc6, 0xecaf, 0x4c7d, 0x5622,
+ 0x561e, 0x7f49, 0xecb4, 0x5975, 0xecb6, 0x8770, 0x4e1c, 0xecb9,
+ 0xecba, 0xecbb, 0x8117, 0x9d5e, 0x8d18, 0x763b, 0x9c45, 0x764e,
+ 0x77b9, 0x9345, 0x5432, 0x8148, 0x82f7, 0x5625, 0x8132, 0x8418,
+ 0x80bd, 0x55ea, 0x7962, 0x5643, 0x5416, 0xeccf, 0x35ce, 0x5605,
+ 0x55f1, 0x66f1, 0xecd4, 0x362d, 0x7534, 0x55f0, 0x55ba, 0x5497,
+ 0x5572, 0xecdb, 0xecdc, 0x5ed0, 0xecde, 0xecdf, 0xece0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xece1, 0x9eab, 0x7d5a, 0x55de, 0xece5, 0x629d, 0x976d, 0x5494,
+ 0x8ccd, 0x71f6, 0x9176, 0x63fc, 0x63b9, 0x63fe, 0x5569, 0xecf0,
+ 0x9c72, 0xecf2, 0x519a, 0x34df, 0xecf5, 0x51a7, 0x544d, 0x551e,
+ 0x5513, 0x7666, 0x8e2d, 0xecfc, 0x75b1, 0x80b6, 0x8804, 0x8786,
+ 0x88c7, 0x81b6, 0x841c, 0xed04, 0x44ec, 0x7304, 0xed07, 0x5b90,
+ 0x830b, 0xed0a, 0x567b, 0xed0c, 0xed0d, 0xed0e, 0xed0f, 0xed10,
+ 0xed11, 0x9170, 0xed13, 0x9208, 0xed15, 0xed16, 0xed17, 0xed18,
+ 0x7266, 0xed1a, 0x474e, 0xed1c, 0xed1d, 0xed1e, 0x40fa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9c5d, 0x651f, 0xed22, 0x48f3, 0xed24, 0xed25, 0xed26,
+ 0xed27, 0x6062, 0xed29, 0xed2a, 0xed2b, 0xed2c, 0xed2d, 0x71a3,
+ 0x7e8e, 0x9d50, 0x4e1a, 0x4e04, 0x3577, 0x5b0d, 0x6cb2, 0x5367,
+ 0x36ac, 0x39dc, 0x537d, 0x36a5, 0xed3b, 0x589a, 0xed3d, 0x822d,
+ 0x544b, 0x57aa, 0xed41, 0xed42, 0xed43, 0x3a52, 0xed45, 0x7374,
+ 0xed47, 0x4d09, 0x9bed, 0xed4a, 0xed4b, 0x4c5b, 0xed4d, 0xed4e,
+ 0xed4f, 0x845c, 0xed51, 0xed52, 0xed53, 0xed54, 0x632e, 0x7d25,
+ 0xed57, 0xed58, 0x3a2a, 0x9008, 0x52cc, 0x3e74, 0x367a, 0x45e9,
+ 0xed5f, 0x7640, 0x5af0, 0xed62, 0x787a, 0x47b6, 0x58a7, 0x40bf,
+ 0x567c, 0x9b8b, 0x5d74, 0x7654, 0xed6b, 0x9e85, 0x4ce1, 0x75f9,
+ 0x37fb, 0x6119, 0xed71, 0xed72, 0xed73, 0x565d, 0xed75, 0x57a7,
+ 0xed77, 0xed78, 0x5234, 0xed7a, 0x35ad, 0x6c4a, 0x9d7c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7c56, 0x9b39, 0x57de, 0xed81, 0x5c53, 0x64d3, 0xed84, 0xed85,
+ 0xed86, 0x86ad, 0xed88, 0xed89, 0xed8a, 0xed8b, 0xed8c, 0x51fe,
+ 0xed8e, 0x5d8e, 0x9703, 0xed91, 0x9e81, 0x904c, 0x7b1f, 0x9b02,
+ 0x5cd1, 0x7ba3, 0x6268, 0x6335, 0x9aff, 0x7bcf, 0x9b2a, 0x7c7e,
+ 0x9b2e, 0x7c42, 0x7c86, 0x9c15, 0x7bfc, 0x9b09, 0x9f17, 0x9c1b,
+ 0xeda6, 0x9f5a, 0x5573, 0x5bc3, 0x4ffd, 0x9e98, 0x4ff2, 0x5260,
+ 0x3e06, 0x52d1, 0x5767, 0x5056, 0x59b7, 0x5e12, 0x97c8, 0x9dab,
+ 0x8f5c, 0x5469, 0x97b4, 0x9940, 0x97ba, 0x532c, 0x6130, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x692c, 0x53da, 0x9c0a, 0x9d02, 0x4c3b, 0x9641, 0x6980,
+ 0x50a6, 0x7546, 0xedc6, 0x99da, 0x5273, 0xedc9, 0x9159, 0x9681,
+ 0x915c, 0xedcd, 0x9151, 0xedcf, 0x637f, 0xedd1, 0x6aca, 0x5611,
+ 0x918e, 0x757a, 0x6285, 0xedd7, 0x734f, 0x7c70, 0xedda, 0xeddb,
+ 0xeddc, 0xeddd, 0x76d6, 0x9b9d, 0x4e2a, 0xede1, 0x83be, 0x8842,
+ 0xede4, 0x5c4a, 0x69c0, 0x50ed, 0x577a, 0x521f, 0x5df5, 0x4ece,
+ 0x6c31, 0xeded, 0x4f39, 0x549c, 0x54da, 0x529a, 0x8d82, 0x35fe,
+ 0x5f0c, 0x35f3, 0xedf6, 0x6b52, 0x917c, 0x9fa5, 0x9b97, 0x982e,
+ 0x98b4, 0x9aba, 0x9ea8, 0x9e84, 0x717a, 0x7b14, 0xee02, 0x6bfa,
+ 0x8818, 0x7f78, 0xee06, 0x5620, 0xee08, 0x8e77, 0x9f53, 0xee0b,
+ 0x8dd4, 0x8e4f, 0x9e1c, 0x8e01, 0x6282, 0xee11, 0x8e28, 0x8e75,
+ 0x7ad3, 0xee15, 0x7a3e, 0x78d8, 0x6cea, 0x8a67, 0x7607, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xee1b, 0x9f26, 0x6cce, 0x87d6, 0x75c3, 0xee20, 0x7853, 0xee22,
+ 0x8d0c, 0x72e2, 0x7371, 0x8b2d, 0x7302, 0x74f1, 0x8ceb, 0xee2a,
+ 0x862f, 0x5fba, 0x88a0, 0x44b7, 0xee2f, 0xee30, 0xee31, 0xee32,
+ 0x8a7e, 0xee34, 0xee35, 0x60fd, 0x7667, 0x9ad7, 0x9d44, 0x936e,
+ 0x9b8f, 0x87f5, 0xee3d, 0x880f, 0x8cf7, 0x732c, 0x9721, 0x9bb0,
+ 0x35d6, 0x72b2, 0x4c07, 0x7c51, 0x994a, 0xee48, 0x6159, 0x4c04,
+ 0x9e96, 0x617d, 0xee4d, 0x575f, 0x616f, 0x62a6, 0x6239, 0x62ce,
+ 0x3a5c, 0x61e2, 0x53aa, 0xee56, 0x6364, 0x6802, 0x35d2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5d57, 0xee5b, 0x8fda, 0xee5d, 0xee5e, 0x50d9, 0xee60,
+ 0x7906, 0x5332, 0x9638, 0xee64, 0x4065, 0xee66, 0x77fe, 0xee68,
+ 0x7cc2, 0xee6a, 0x7cda, 0x7a2d, 0x8066, 0x8063, 0x7d4d, 0x7505,
+ 0x74f2, 0x8994, 0x821a, 0x670c, 0x8062, 0xee76, 0x805b, 0x74f0,
+ 0x8103, 0x7724, 0x8989, 0xee7c, 0x7553, 0xee7e, 0x87a9, 0x87ce,
+ 0x81c8, 0x878c, 0x8a49, 0x8cad, 0x8b43, 0x772b, 0x74f8, 0x84da,
+ 0x3635, 0x69b2, 0x8da6, 0xee8c, 0x89a9, 0x7468, 0x6db9, 0x87c1,
+ 0xee91, 0x74e7, 0x3ddb, 0x7176, 0x60a4, 0x619c, 0x3cd1, 0x7162,
+ 0x6077, 0xee9a, 0x7f71, 0xee9c, 0x7250, 0x60e9, 0x4b7e, 0x5220,
+ 0x3c18, 0xeea2, 0xeea3, 0xeea4, 0xeea5, 0xeea6, 0xeea7, 0xeea8,
+ 0xeea9, 0xeeaa, 0x5cc1, 0xeeac, 0xeead, 0xeeae, 0xeeaf, 0xeeb0,
+ 0xeeb1, 0x4562, 0x5b1f, 0xeeb4, 0x9f50, 0x9ea6, 0xeeb7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a,
+ 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52,
+ 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31,
+ 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35,
+ 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39,
+ 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d,
+ 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41,
+ 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c,
+ 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a,
+ 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce,
+ 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc,
+ 0x32a3, 0x2105, 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a,
+ 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b,
+ 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d,
+ 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63,
+ 0xfe64, 0xfe65, 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220,
+ 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234,
+ 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192,
+ 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1,
+ 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5,
+ 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4,
+ 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7,
+ 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
+ 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a,
+ 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500,
+ 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561,
+ 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10,
+ 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
+ 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166,
+ 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025,
+ 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xff21,
+ 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29,
+ 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31,
+ 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39,
+ 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f,
+ 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394,
+ 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c,
+ 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5,
+ 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4,
+ 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
+ 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5,
+ 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108,
+ 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116,
+ 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e,
+ 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126,
+ 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c,
+ 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b,
+ 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a,
+ 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e,
+ 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f,
+ 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8,
+ 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2,
+ 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b,
+ 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1,
+ 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4,
+ 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6,
+ 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339,
+ 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd,
+ 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24,
+ 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3,
+ 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4,
+ 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79,
+ 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236,
+ 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e,
+ 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4,
+ 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9,
+ 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317,
+ 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e,
+ 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8,
+ 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1,
+ 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c,
+ 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01,
+ 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251,
+ 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63,
+ 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af,
+ 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529,
+ 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf,
+ 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb,
+ 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6,
+ 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10,
+ 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd,
+ 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216,
+ 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f,
+ 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d,
+ 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd,
+ 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919,
+ 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979,
+ 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89,
+ 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d,
+ 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec,
+ 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735,
+ 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f,
+ 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070,
+ 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a,
+ 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089,
+ 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b,
+ 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863,
+ 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57,
+ 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d,
+ 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48,
+ 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225,
+ 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac,
+ 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426,
+ 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b,
+ 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436,
+ 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea,
+ 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef,
+ 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996,
+ 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a,
+ 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f,
+ 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f,
+ 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77,
+ 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8,
+ 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276,
+ 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292,
+ 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539,
+ 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750,
+ 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81,
+ 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70,
+ 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e,
+ 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076,
+ 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2,
+ 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3,
+ 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093,
+ 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46,
+ 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b,
+ 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2,
+ 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e,
+ 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b,
+ 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f,
+ 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88,
+ 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154,
+ 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd,
+ 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241,
+ 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377,
+ 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492,
+ 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462,
+ 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a,
+ 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947,
+ 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae,
+ 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af,
+ 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a,
+ 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1,
+ 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78,
+ 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27,
+ 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd,
+ 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a,
+ 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215,
+ 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf,
+ 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb,
+ 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd,
+ 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac,
+ 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c,
+ 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c,
+ 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f,
+ 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a,
+ 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3,
+ 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe,
+ 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9,
+ 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1,
+ 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d,
+ 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7,
+ 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d,
+ 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd,
+ 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa,
+ 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2,
+ 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5,
+ 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f,
+ 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0,
+ 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce,
+ 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1,
+ 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae,
+ 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd,
+ 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0,
+ 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192,
+ 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b,
+ 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b,
+ 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8,
+ 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9,
+ 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2,
+ 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950,
+ 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea,
+ 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4,
+ 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9,
+ 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6,
+ 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b,
+ 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e,
+ 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c,
+ 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc,
+ 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545,
+ 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f,
+ 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1,
+ 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef,
+ 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de,
+ 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83,
+ 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32,
+ 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39,
+ 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab,
+ 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4,
+ 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7,
+ 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d,
+ 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2,
+ 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3,
+ 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc,
+ 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949,
+ 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f,
+ 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09,
+ 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3,
+ 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd,
+ 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6,
+ 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301,
+ 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306,
+ 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4,
+ 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4,
+ 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1,
+ 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c,
+ 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8,
+ 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d,
+ 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006,
+ 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014,
+ 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee,
+ 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5,
+ 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254,
+ 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8,
+ 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa,
+ 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2,
+ 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a,
+ 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20,
+ 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0,
+ 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04,
+ 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8,
+ 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab,
+ 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f,
+ 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096,
+ 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355,
+ 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a,
+ 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1,
+ 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645,
+ 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848,
+ 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817,
+ 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843,
+ 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7,
+ 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95,
+ 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a,
+ 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9,
+ 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8,
+ 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de,
+ 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7,
+ 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b,
+ 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728,
+ 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950,
+ 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4,
+ 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88,
+ 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a,
+ 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d,
+ 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006,
+ 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102,
+ 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108,
+ 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210,
+ 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354,
+ 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332,
+ 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3,
+ 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18,
+ 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16,
+ 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77,
+ 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7,
+ 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095,
+ 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd,
+ 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2,
+ 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a,
+ 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065,
+ 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f,
+ 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2,
+ 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340,
+ 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e,
+ 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f,
+ 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541,
+ 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806,
+ 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920,
+ 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5,
+ 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60,
+ 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22,
+ 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2,
+ 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5,
+ 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97,
+ 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3,
+ 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5,
+ 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248,
+ 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367,
+ 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b,
+ 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f,
+ 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551,
+ 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c,
+ 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a,
+ 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881,
+ 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7,
+ 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894,
+ 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2,
+ 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb,
+ 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5,
+ 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea,
+ 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf,
+ 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d,
+ 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405,
+ 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570,
+ 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4,
+ 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a,
+ 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92,
+ 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e,
+ 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e,
+ 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42,
+ 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2,
+ 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129,
+ 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e,
+ 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392,
+ 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4,
+ 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e,
+ 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f,
+ 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b,
+ 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa,
+ 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019,
+ 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015,
+ 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6,
+ 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673,
+ 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea,
+ 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75,
+ 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091,
+ 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274,
+ 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b,
+ 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c,
+ 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f,
+ 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589,
+ 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830,
+ 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71,
+ 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c,
+ 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43,
+ 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9,
+ 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c,
+ 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1,
+ 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3,
+ 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee,
+ 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e,
+ 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670,
+ 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe,
+ 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7,
+ 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2,
+ 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da,
+ 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc,
+ 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21,
+ 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b,
+ 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34,
+ 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f,
+ 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c,
+ 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a,
+ 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f,
+ 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2,
+ 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c,
+ 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c,
+ 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46,
+ 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f,
+ 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72,
+ 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5,
+ 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e,
+ 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c,
+ 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1,
+ 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc,
+ 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407,
+ 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db,
+ 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983,
+ 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56,
+ 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb,
+ 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85,
+ 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb,
+ 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031,
+ 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163,
+ 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d,
+ 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d,
+ 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4,
+ 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808,
+ 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad,
+ 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3,
+ 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f,
+ 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f,
+ 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1,
+ 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5,
+ 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a,
+ 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b,
+ 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9,
+ 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148,
+ 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c,
+ 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137,
+ 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d,
+ 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417,
+ 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688,
+ 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982,
+ 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d,
+ 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd,
+ 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7,
+ 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96,
+ 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159,
+ 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c,
+ 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337,
+ 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e,
+ 0x7441, 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600,
+ 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3,
+ 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee,
+ 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891,
+ 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c,
+ 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77,
+ 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93,
+ 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a,
+ 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084,
+ 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477,
+ 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b,
+ 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e,
+ 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe,
+ 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4,
+ 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2,
+ 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70,
+ 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62,
+ 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a,
+ 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2,
+ 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea,
+ 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c,
+ 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e,
+ 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237,
+ 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264,
+ 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a,
+ 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca,
+ 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810,
+ 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9,
+ 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6,
+ 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9,
+ 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600,
+ 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e,
+ 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716,
+ 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d,
+ 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6,
+ 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7,
+ 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d,
+ 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54,
+ 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158,
+ 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f,
+ 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1,
+ 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995,
+ 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab,
+ 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3,
+ 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4,
+ 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23,
+ 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2,
+ 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192,
+ 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a,
+ 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609,
+ 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1,
+ 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d,
+ 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95,
+ 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87,
+ 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd,
+ 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2,
+ 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150,
+ 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa,
+ 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4,
+ 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3,
+ 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722,
+ 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902,
+ 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6,
+ 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7,
+ 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99,
+ 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060,
+ 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b,
+ 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278,
+ 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8,
+ 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4,
+ 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785,
+ 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c,
+ 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4,
+ 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb,
+ 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e,
+ 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e,
+ 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e,
+ 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb,
+ 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb,
+ 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2,
+ 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7,
+ 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab,
+ 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469,
+ 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5,
+ 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a,
+ 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae,
+ 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e,
+ 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05,
+ 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f,
+ 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b,
+ 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58,
+ 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8,
+ 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626,
+ 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c,
+ 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5,
+ 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b,
+ 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7,
+ 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb,
+ 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9,
+ 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a,
+ 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513,
+ 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506,
+ 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759,
+ 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912,
+ 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95,
+ 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6,
+ 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0,
+ 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc,
+ 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d,
+ 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d,
+ 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d,
+ 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb,
+ 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2,
+ 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707,
+ 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c,
+ 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df,
+ 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef,
+ 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112,
+ 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291,
+ 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678,
+ 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676,
+ 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78,
+ 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd,
+ 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb,
+ 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf,
+ 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4,
+ 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58,
+ 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f,
+ 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6,
+ 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8,
+ 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368,
+ 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d,
+ 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f,
+ 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e,
+ 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4,
+ 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09,
+ 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3,
+ 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559,
+ 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e,
+ 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932,
+ 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb,
+ 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02,
+ 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93,
+ 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b,
+ 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078,
+ 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8,
+ 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7,
+ 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713,
+ 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b,
+ 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b,
+ 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb,
+ 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12,
+ 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121,
+ 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a,
+ 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8,
+ 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb,
+ 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6,
+ 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6,
+ 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e,
+ 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8,
+ 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80,
+ 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df,
+ 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235,
+ 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646,
+ 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901,
+ 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7,
+ 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9,
+ 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b,
+ 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35,
+ 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070,
+ 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf,
+ 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b,
+ 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2,
+ 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936,
+ 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b,
+ 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73,
+ 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b,
+ 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f,
+ 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e,
+ 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b,
+ 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca,
+ 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c,
+ 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b,
+ 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2,
+ 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233,
+ 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7,
+ 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2,
+ 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe,
+ 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8,
+ 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae,
+ 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a,
+ 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a,
+ 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076,
+ 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9,
+ 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0,
+ 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50,
+ 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0,
+ 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0,
+ 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0,
+ 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2,
+ 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba,
+ 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03,
+ 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8,
+ 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133,
+ 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2,
+ 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5,
+ 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d,
+ 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f,
+ 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f,
+ 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69,
+ 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9,
+ 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805,
+ 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41,
+ 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59,
+ 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a,
+ 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae,
+ 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6,
+ 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4,
+ 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d,
+ 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a,
+ 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7,
+ 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6,
+ 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727,
+ 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662,
+ 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c,
+ 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9,
+ 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815,
+ 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f,
+ 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4,
+ 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952,
+ 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d,
+ 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137,
+ 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc,
+ 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa,
+ 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3,
+ 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823,
+ 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf,
+ 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b,
+ 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957,
+ 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d,
+ 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19,
+ 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9,
+ 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61,
+ 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972,
+ 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61,
+ 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1,
+ 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31,
+ 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94,
+ 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10,
+ 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94,
+ 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463,
+ 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57,
+ 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f,
+ 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7,
+ 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744,
+ 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa,
+ 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063,
+ 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470,
+ 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a,
+ 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5,
+ 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f,
+ 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466,
+ 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478,
+ 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x2170, 0x2171, 0x2172,
+ 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x4e36,
+ 0x4e3f, 0x4e85, 0x4ea0, 0x5182, 0x5196, 0x51ab, 0x52f9, 0x5338,
+ 0x5369, 0x53b6, 0x590a, 0x5b80, 0x5ddb, 0x2f33, 0x5e7f, 0xf6df,
+ 0x5f50, 0x5f61, 0x6534, 0xf6e3, 0x7592, 0xf6e5, 0x8fb5, 0xf6e7,
+ 0x00a8, 0x02c6, 0x30fd, 0x30fe, 0x309d, 0x309e, 0xf6ee, 0xf6ef,
+ 0x3005, 0x3006, 0x3007, 0x30fc, 0xff3b, 0xff3d, 0x273d, 0x3041,
+ 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049,
+ 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051,
+ 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
+ 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
+ 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
+ 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
+ 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
+ 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
+ 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
+ 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab,
+ 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3,
+ 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb,
+ 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3,
+ 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb,
+ 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3,
+ 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db,
+ 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3,
+ 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb,
+ 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3,
+ 0x30f4, 0x30f5, 0x30f6, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414,
+ 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422,
+ 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a,
+ 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432,
+ 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439,
+ 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441,
+ 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449,
+ 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x21e7, 0x21b8,
+ 0x21b9, 0xf7e5, 0xf7e6, 0x4e5a, 0xf7e8, 0x5202, 0xf7ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xf7eb, 0x5188, 0xf7ed, 0xf7ee, 0xf7ef, 0xf7f0, 0xf7f1,
+ 0xf7f2, 0xf7f3, 0xf7f4, 0xf7f5, 0xf7f6, 0xf7f7, 0xf7f8, 0xf7f9,
+ 0xf7fa, 0xf7fb, 0xf7fc, 0xf7fd, 0xf7fe, 0xf7ff, 0xf800, 0xf801,
+ 0xf802, 0xf803, 0xf804, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809,
+ 0xf80a, 0xf80b, 0xf80c, 0xf80d, 0xf80e, 0xf80f, 0xf810, 0xf811,
+ 0xf812, 0xf813, 0xf814, 0xf815, 0xf816, 0xffe2, 0xffe4, 0xff07,
+ 0xff02, 0x3231, 0x2116, 0x2121, 0x309b, 0x309c, 0x2e80, 0x2e84,
+ 0x2e86, 0x2e87, 0x2e88, 0x2e8a, 0x2e8c, 0x2e8d, 0x2e95, 0x2e9c,
+ 0x2e9d, 0x2ea5, 0x2ea7, 0x2eaa, 0x2eac, 0x2eae, 0x2eb6, 0x2ebc,
+ 0x2ebe, 0x2ec6, 0x2eca, 0x2ecc, 0x2ecd, 0x2ecf, 0x2ed6, 0x2ed7,
+ 0x2ede, 0x2ee3, 0xf83c, 0xf83d, 0xf83e, 0x0283, 0x0250, 0x025b,
+ 0x0254, 0x0275, 0x0153, 0x00f8, 0x014b, 0x028a, 0x026a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47,
+ 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e,
+ 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c,
+ 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3,
+ 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9,
+ 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723,
+ 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73,
+ 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a,
+ 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14,
+ 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22,
+ 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210,
+ 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df,
+ 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b,
+ 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a,
+ 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74,
+ 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266,
+ 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e,
+ 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18,
+ 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f,
+ 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d,
+ 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624,
+ 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64,
+ 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33,
+ 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad,
+ 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437,
+ 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee,
+ 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752,
+ 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2,
+ 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a,
+ 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86,
+ 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c,
+ 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1,
+ 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3,
+ 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283,
+ 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a,
+ 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537,
+ 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b,
+ 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b,
+ 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95,
+ 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a,
+ 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5,
+ 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594,
+ 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092,
+ 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f,
+ 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f,
+ 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87,
+ 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a,
+ 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e,
+ 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be,
+ 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b,
+ 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482,
+ 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466,
+ 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464,
+ 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770,
+ 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce,
+ 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1,
+ 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93,
+ 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf,
+ 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7,
+ 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19,
+ 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d,
+ 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c,
+ 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009,
+ 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa,
+ 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0,
+ 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612,
+ 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611,
+ 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776,
+ 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a,
+ 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779,
+ 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec,
+ 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7,
+ 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0,
+ 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1,
+ 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096,
+ 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9,
+ 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1,
+ 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8,
+ 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1,
+ 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb,
+ 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5,
+ 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b,
+ 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8,
+ 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670,
+ 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd,
+ 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0,
+ 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3,
+ 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb,
+ 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec,
+ 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396,
+ 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6,
+ 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0,
+ 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b,
+ 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4,
+ 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd,
+ 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db,
+ 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8,
+ 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3,
+ 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9,
+ 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2,
+ 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037,
+ 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049,
+ 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058,
+ 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5,
+ 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6,
+ 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541,
+ 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c,
+ 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639,
+ 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb,
+ 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee,
+ 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc,
+ 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9,
+ 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6,
+ 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d,
+ 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04,
+ 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07,
+ 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f,
+ 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241,
+ 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4,
+ 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc,
+ 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb,
+ 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec,
+ 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4,
+ 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa,
+ 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f,
+ 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945,
+ 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f,
+ 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d,
+ 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7,
+ 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9,
+ 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd,
+ 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8,
+ 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1,
+ 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674,
+ 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3,
+ 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1,
+ 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8,
+ 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e,
+ 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5,
+ 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c,
+ 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194,
+ 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a,
+ 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e,
+ 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a,
+ 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b,
+ 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6,
+ 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9,
+ 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15,
+ 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad,
+ 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1,
+ 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa,
+ 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d,
+ 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219,
+ 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336,
+ 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341,
+ 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a,
+ 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6,
+ 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712,
+ 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b,
+ 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f,
+ 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828,
+ 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d,
+ 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64,
+ 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f,
+ 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60,
+ 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68,
+ 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d,
+ 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39,
+ 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5,
+ 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6,
+ 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc,
+ 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd,
+ 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5,
+ 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0,
+ 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710,
+ 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722,
+ 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e,
+ 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b,
+ 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0,
+ 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89,
+ 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09,
+ 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85,
+ 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f,
+ 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d,
+ 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e,
+ 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100,
+ 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351,
+ 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d,
+ 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345,
+ 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653,
+ 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687,
+ 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1,
+ 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843,
+ 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f,
+ 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57,
+ 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6,
+ 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004,
+ 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df,
+ 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc,
+ 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e,
+ 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041,
+ 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b,
+ 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051,
+ 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d,
+ 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a,
+ 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d,
+ 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2,
+ 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8,
+ 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5,
+ 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c,
+ 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58,
+ 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f,
+ 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52,
+ 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c,
+ 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72,
+ 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a,
+ 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1,
+ 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96,
+ 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3,
+ 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db,
+ 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365,
+ 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397,
+ 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375,
+ 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553,
+ 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718,
+ 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab,
+ 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2,
+ 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880,
+ 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4,
+ 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33,
+ 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a,
+ 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2,
+ 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6,
+ 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd,
+ 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb,
+ 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104,
+ 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8,
+ 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f,
+ 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff,
+ 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401,
+ 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b,
+ 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3,
+ 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d,
+ 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a,
+ 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a,
+ 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7,
+ 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30,
+ 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b,
+ 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98,
+ 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45,
+ 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b,
+ 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb,
+ 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119,
+ 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127,
+ 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232,
+ 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4,
+ 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9,
+ 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e,
+ 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387,
+ 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9,
+ 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd,
+ 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a,
+ 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897,
+ 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9,
+ 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c,
+ 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2,
+ 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7,
+ 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021,
+ 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb,
+ 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec,
+ 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c,
+ 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5,
+ 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083,
+ 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087,
+ 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8,
+ 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f,
+ 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6,
+ 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848,
+ 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839,
+ 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f,
+ 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac,
+ 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b,
+ 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d,
+ 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c,
+ 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35,
+ 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31,
+ 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36,
+ 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab,
+ 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc,
+ 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104,
+ 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8,
+ 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5,
+ 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4,
+ 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0,
+ 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568,
+ 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a,
+ 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec,
+ 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6,
+ 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970,
+ 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd,
+ 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd,
+ 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915,
+ 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97,
+ 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc,
+ 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45,
+ 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33,
+ 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b,
+ 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64,
+ 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a,
+ 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125,
+ 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a,
+ 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330,
+ 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323,
+ 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d,
+ 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7,
+ 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695,
+ 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a,
+ 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865,
+ 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868,
+ 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a,
+ 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b,
+ 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2,
+ 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56,
+ 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54,
+ 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050,
+ 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d,
+ 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204,
+ 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423,
+ 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410,
+ 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5,
+ 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9,
+ 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3,
+ 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db,
+ 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea,
+ 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1,
+ 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0,
+ 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9,
+ 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d,
+ 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52,
+ 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80,
+ 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89,
+ 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5,
+ 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6,
+ 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f,
+ 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb,
+ 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f,
+ 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226,
+ 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204,
+ 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216,
+ 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1,
+ 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6,
+ 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae,
+ 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba,
+ 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278,
+ 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca,
+ 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d,
+ 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9,
+ 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849,
+ 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d,
+ 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8,
+ 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90,
+ 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a,
+ 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0,
+ 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6,
+ 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a,
+ 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f,
+ 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5,
+ 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437,
+ 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435,
+ 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7,
+ 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686,
+ 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678,
+ 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f,
+ 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948,
+ 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978,
+ 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941,
+ 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951,
+ 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43,
+ 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0,
+ 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2,
+ 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6,
+ 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92,
+ 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca,
+ 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160,
+ 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142,
+ 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291,
+ 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a,
+ 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440,
+ 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1,
+ 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef,
+ 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610,
+ 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd,
+ 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767,
+ 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f,
+ 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899,
+ 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11,
+ 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64,
+ 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70,
+ 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88,
+ 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b,
+ 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d,
+ 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb,
+ 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b,
+ 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242,
+ 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d,
+ 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d,
+ 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437,
+ 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429,
+ 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439,
+ 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447,
+ 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454,
+ 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6,
+ 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d,
+ 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da,
+ 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f,
+ 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81,
+ 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66,
+ 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c,
+ 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0,
+ 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2,
+ 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00,
+ 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111,
+ 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252,
+ 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e,
+ 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f,
+ 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272,
+ 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e,
+ 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd,
+ 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d,
+ 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5,
+ 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd,
+ 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd,
+ 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627,
+ 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613,
+ 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c,
+ 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a,
+ 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894,
+ 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea,
+ 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec,
+ 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a,
+ 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d,
+ 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7,
+ 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43,
+ 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173,
+ 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a,
+ 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227,
+ 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472,
+ 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e,
+ 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c,
+ 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0,
+ 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999,
+ 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4,
+ 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3,
+ 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2,
+ 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f,
+ 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03,
+ 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19,
+ 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30,
+ 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd,
+ 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e,
+ 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182,
+ 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297,
+ 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473,
+ 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503,
+ 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a,
+ 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780,
+ 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8,
+ 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4,
+ 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f,
+ 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c,
+ 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e,
+ 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf,
+ 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1,
+ 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc,
+ 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9,
+ 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187,
+ 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f,
+ 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4,
+ 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7,
+ 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af,
+ 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4,
+ 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728,
+ 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743,
+ 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d,
+ 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727,
+ 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1,
+ 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9,
+ 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96,
+ 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09,
+ 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06,
+ 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d,
+ 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124,
+ 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4,
+ 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3,
+ 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1,
+ 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9,
+ 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d,
+ 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781,
+ 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900,
+ 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2,
+ 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60,
+ 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103,
+ 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c,
+ 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642,
+ 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a,
+ 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af,
+ 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7,
+ 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05,
+ 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93,
+ 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d,
+ 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2,
+ 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa,
+ 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496,
+ 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c,
+ 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579,
+ 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7,
+ 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15,
+ 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d,
+ 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40,
+ 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04,
+ 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16,
+ 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff,
+ 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96,
+ 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57,
+ 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67,
+ 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77,
+ 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a,
+ 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa,
+ 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e,
+ 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d,
+ 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625,
+ 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b,
+ 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788,
+ 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8,
+ 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2,
+ 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb,
+ 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5,
+ 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7,
+ 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee,
+ 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea,
+ 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253,
+ 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500,
+ 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c,
+ 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2,
+ 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9,
+ 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e,
+ 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9,
+ 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758,
+ 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d,
+ 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a,
+ 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767,
+ 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918,
+ 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4,
+ 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3,
+ 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5,
+ 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f,
+ 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0,
+ 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e,
+ 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c,
+ 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073,
+ 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a,
+ 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182,
+ 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6,
+ 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc,
+ 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd,
+ 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab,
+ 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702,
+ 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d,
+ 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908,
+ 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd,
+ 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb,
+ 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1,
+ 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75,
+ 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff,
+ 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04,
+ 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a,
+ 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c,
+ 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc,
+ 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10,
+ 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1,
+ 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2,
+ 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9,
+ 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8,
+ 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf,
+ 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533,
+ 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb,
+ 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66,
+ 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76,
+ 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a,
+ 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c,
+ 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54,
+ 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03,
+ 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8,
+ 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5,
+ 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5,
+ 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4,
+ 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da,
+ 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365,
+ 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495,
+ 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633,
+ 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d,
+ 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3,
+ 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44,
+ 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde,
+ 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9,
+ 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2,
+ 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c,
+ 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22,
+ 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43,
+ 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c,
+ 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac,
+ 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257,
+ 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547,
+ 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555,
+ 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c,
+ 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792,
+ 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785,
+ 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789,
+ 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922,
+ 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4,
+ 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef,
+ 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0,
+ 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38,
+ 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f,
+ 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34,
+ 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136,
+ 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308,
+ 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323,
+ 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d,
+ 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324,
+ 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd,
+ 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9,
+ 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0,
+ 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929,
+ 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea,
+ 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa,
+ 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e,
+ 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14,
+ 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88,
+ 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12,
+ 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4,
+ 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682,
+ 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25,
+ 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b,
+ 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3,
+ 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de,
+ 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580,
+ 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89,
+ 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a,
+ 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9,
+ 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde,
+ 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2,
+ 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2,
+ 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510,
+ 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647,
+ 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902,
+ 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab,
+ 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe,
+ 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb,
+ 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01,
+ 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8,
+ 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49,
+ 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44,
+ 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c,
+ 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9,
+ 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595,
+ 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e,
+ 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582,
+ 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668,
+ 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5,
+ 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af,
+ 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de,
+ 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937,
+ 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f,
+ 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13,
+ 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94,
+ 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47,
+ 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b,
+ 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af,
+ 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349,
+ 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379,
+ 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361,
+ 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0,
+ 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720,
+ 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a,
+ 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933,
+ 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1,
+ 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb,
+ 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01,
+ 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1,
+ 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41,
+ 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d,
+ 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda,
+ 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131,
+ 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699,
+ 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8,
+ 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6,
+ 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc,
+ 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd,
+ 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad,
+ 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005,
+ 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7,
+ 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2,
+ 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657,
+ 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c,
+ 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac,
+ 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d,
+ 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56,
+ 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53,
+ 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3,
+ 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb,
+ 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8,
+ 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb,
+ 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3,
+ 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4,
+ 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950,
+ 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35,
+ 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26,
+ 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75,
+ 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c,
+ 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47,
+ 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5,
+ 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b,
+ 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395,
+ 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4,
+ 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3,
+ 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722,
+ 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa,
+ 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f,
+ 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07,
+ 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35,
+ 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1,
+ 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c,
+ 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c,
+ 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c,
+ 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29,
+ 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4,
+ 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd,
+ 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e,
+ 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1,
+ 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd,
+ 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016,
+ 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c,
+ 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6,
+ 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516,
+ 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68,
+ 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76,
+ 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74,
+ 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe,
+ 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1,
+ 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2,
+ 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6,
+ 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7,
+ 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a,
+ 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958,
+ 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48,
+ 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a,
+ 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d,
+ 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51,
+ 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad,
+ 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec,
+ 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3,
+ 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da,
+ 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c,
+ 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948,
+ 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d,
+ 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c,
+ 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea,
+ 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4,
+ 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda,
+ 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78,
+ 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70,
+ 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f,
+ 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40,
+ 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef,
+ 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df,
+ 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9,
+ 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034,
+ 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b,
+ 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba,
+ 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd,
+ 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48,
+ 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80,
+ 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269,
+ 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604,
+ 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817,
+ 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a,
+ 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86,
+ 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a,
+ 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b,
+ 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410,
+ 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e,
+ 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df,
+ 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862,
+ 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c,
+ 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36,
+ 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10,
+ 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8,
+ 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f,
+ 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a,
+ 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6,
+ 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6,
+ 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91,
+ 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48,
+ 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc,
+ 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049,
+ 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a,
+ 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a,
+ 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030,
+ 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619,
+ 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a,
+ 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45,
+ 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e,
+ 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b,
+ 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437,
+ 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a,
+ 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956,
+ 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a,
+ 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29,
+ 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca,
+ 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9,
+ 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd,
+ 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18,
+ 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6,
+ 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2,
+ 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d,
+ 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f,
+ 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4,
+ 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634,
+ 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826,
+ 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84,
+ 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a,
+ 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c,
+ 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449,
+ 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b,
+ 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b,
+ 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33,
+ 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb,
+ 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf,
+ 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6,
+ 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2,
+ 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f,
+ 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb,
+ 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382,
+ 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c,
+ 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830,
+ 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64,
+ 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4,
+ 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52,
+ 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c,
+ 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4,
+ 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec,
+ 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3,
+ 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e,
+ 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d,
+ 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6,
+ 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835,
+ 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be,
+ 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743,
+ 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67,
+ 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03,
+ 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04,
+ 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e,
+ 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa,
+ 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648,
+ 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5,
+ 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749,
+ 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10,
+ 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78,
+ 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2,
+ 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74,
+ 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d,
+ 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874,
+ 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15,
+ 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482,
+ 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b,
+ 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d,
+ 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, 0x7881, 0x92b9,
+ 0x88cf, 0x58bb, 0x6052, 0x7ca7, 0x5afa, 0x2554, 0x2566, 0x2557,
+ 0x2560, 0x256c, 0x2563, 0x255a, 0x2569, 0x255d, 0x2552, 0x2564,
+ 0x2555, 0x255e, 0x256a, 0x2561, 0x2558, 0x2567, 0x255b, 0x2553,
+ 0x2565, 0x2556, 0x255f, 0x256b, 0x2562, 0x2559, 0x2568, 0x255c,
+ 0x2551, 0x2550, 0x256d, 0x256e, 0x2570, 0x256f, 0xffed, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe000, 0x92db, 0xe002, 0xe003, 0x854c, 0x42b5, 0x73ef, 0x51b5,
+ 0x3649, 0xe009, 0xe00a, 0x9344, 0xe00c, 0x82ee, 0xe00e, 0x783c,
+ 0x6744, 0x62df, 0xe012, 0xe013, 0xe014, 0xe015, 0xe016, 0x4fab,
+ 0xe018, 0x5008, 0xe01a, 0xe01b, 0xe01c, 0xe01d, 0xe01e, 0x5029,
+ 0xe020, 0x5fa4, 0xe022, 0xe023, 0x6edb, 0xe025, 0x507d, 0x5101,
+ 0x347a, 0x510e, 0x986c, 0x3743, 0x8416, 0xe02d, 0xe02e, 0x5160,
+ 0xe030, 0x516a, 0xe032, 0xe033, 0xe034, 0xe035, 0xe036, 0xe037,
+ 0xe038, 0x5b82, 0x877d, 0xe03b, 0xe03c, 0x51b2, 0x51b8, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9d34, 0x51c9, 0x51cf, 0x51d1, 0x3cdc, 0x51d3, 0xe045,
+ 0x51b3, 0x51e2, 0x5342, 0x51ed, 0x83cd, 0x693e, 0xe04c, 0x5f7b,
+ 0x520b, 0x5226, 0x523c, 0x52b5, 0x5257, 0x5294, 0x52b9, 0x52c5,
+ 0x7c15, 0x8542, 0x52e0, 0x860d, 0xe05a, 0x5305, 0xe05c, 0x5549,
+ 0x6ed9, 0xe05f, 0xe060, 0xe061, 0x5333, 0x5344, 0xe064, 0x6ccb,
+ 0xe066, 0x681b, 0x73d5, 0x604a, 0x3eaa, 0x38cc, 0xe06c, 0x71dd,
+ 0x44a2, 0x536d, 0x5374, 0xe071, 0x537e, 0x537f, 0xe074, 0xe075,
+ 0x77e6, 0x5393, 0xe078, 0x53a0, 0x53ab, 0x53ae, 0x73a7, 0xe07d,
+ 0x3f59, 0x739c, 0x53c1, 0x53c5, 0x6c49, 0x4e49, 0x57fe, 0x53d9,
+ 0x3aab, 0xe087, 0x53e0, 0xe089, 0xe08a, 0x53f6, 0xe08c, 0x5413,
+ 0x7079, 0x552b, 0x6657, 0x6d5b, 0x546d, 0xe093, 0xe094, 0x555d,
+ 0x548f, 0x54a4, 0x47a6, 0xe099, 0xe09a, 0x3db4, 0xe09c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe09d, 0xe09e, 0x5547, 0x4ced, 0x542f, 0x7417, 0x5586, 0x55a9,
+ 0x5605, 0xe0a6, 0xe0a7, 0x4552, 0xe0a9, 0x66b3, 0xe0ab, 0x5637,
+ 0x66cd, 0xe0ae, 0x66a4, 0x66ad, 0x564d, 0x564f, 0x78f1, 0x56f1,
+ 0x9787, 0x53fe, 0x5700, 0x56ef, 0x56ed, 0xe0ba, 0x3623, 0xe0bc,
+ 0x5746, 0xe0be, 0x6c6e, 0x708b, 0x5742, 0x36b1, 0xe0c3, 0x57e6,
+ 0xe0c5, 0x5803, 0xe0c7, 0xe0c8, 0x5826, 0xe0ca, 0x585c, 0x58aa,
+ 0x3561, 0x58e0, 0x58dc, 0xe0d0, 0x58fb, 0x5bff, 0x5743, 0xe0d4,
+ 0xe0d5, 0x93d3, 0x35a1, 0x591f, 0x68a6, 0x36c3, 0x6e59, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe0dc, 0x5a24, 0x5553, 0xe0df, 0x8505, 0x59c9, 0xe0e2,
+ 0xe0e3, 0xe0e4, 0xe0e5, 0x59d9, 0xe0e7, 0xe0e8, 0xe0e9, 0x6d71,
+ 0xe0eb, 0xe0ec, 0x59f9, 0xe0ee, 0x5aab, 0x5a63, 0x36e6, 0xe0f2,
+ 0x5a77, 0x3708, 0x5a96, 0x7465, 0x5ad3, 0xe0f8, 0xe0f9, 0x3d85,
+ 0xe0fb, 0x3732, 0xe0fd, 0x5e83, 0x52d0, 0x5b76, 0x6588, 0x5b7c,
+ 0xe103, 0x4004, 0x485d, 0xe106, 0x5bd5, 0x6160, 0xe109, 0xe10a,
+ 0xe10b, 0x5bf3, 0x5b9d, 0x4d10, 0x5c05, 0xe110, 0x5c13, 0x73ce,
+ 0x5c14, 0xe114, 0xe115, 0x5c49, 0x48dd, 0x5c85, 0x5ce9, 0x5cef,
+ 0x5d8b, 0xe11c, 0xe11d, 0x5d10, 0x5d18, 0x5d46, 0xe121, 0x5cba,
+ 0x5dd7, 0x82fc, 0x382d, 0xe126, 0xe127, 0xe128, 0x8287, 0x3836,
+ 0x3bc2, 0x5e2e, 0x6a8a, 0x5e75, 0x5e7a, 0xe130, 0xe131, 0x53a6,
+ 0x4eb7, 0x5ed0, 0x53a8, 0xe136, 0x5e09, 0x5ef4, 0xe139, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x5ef9, 0x5efb, 0x38a0, 0x5efc, 0x683e, 0x941b, 0x5f0d, 0xe141,
+ 0xe142, 0x3ade, 0x48ae, 0xe145, 0x5f3a, 0xe147, 0xe148, 0x5f58,
+ 0xe14a, 0x5f63, 0x97bd, 0xe14d, 0x5f72, 0x9340, 0xe150, 0x5fa7,
+ 0x5db6, 0x3d5f, 0xe154, 0xe155, 0xe156, 0xe157, 0x91d6, 0xe159,
+ 0xe15a, 0x6031, 0x6685, 0xe15d, 0x3963, 0x3dc7, 0x3639, 0x5790,
+ 0xe162, 0x7971, 0x3e40, 0x609e, 0x60a4, 0x60b3, 0xe168, 0xe169,
+ 0xe16a, 0x74a4, 0x50e1, 0x5aa0, 0x6164, 0x8424, 0x6142, 0xe171,
+ 0xe172, 0x6181, 0x51f4, 0xe175, 0x6187, 0x5baa, 0xe178, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe179, 0x61d3, 0xe17b, 0xe17c, 0x61d0, 0x3932, 0xe17f,
+ 0xe180, 0x6023, 0x615c, 0x651e, 0x638b, 0xe185, 0x62c5, 0xe187,
+ 0x62d5, 0xe189, 0x636c, 0xe18b, 0x3a17, 0x6438, 0x63f8, 0xe18f,
+ 0xe190, 0x6490, 0x6f8a, 0xe193, 0x9814, 0xe195, 0xe196, 0x64e1,
+ 0x64e5, 0x947b, 0x3a66, 0x643a, 0x3a57, 0x654d, 0x6f16, 0xe19f,
+ 0xe1a0, 0x6585, 0x656d, 0x655f, 0xe1a4, 0x65b5, 0xe1a6, 0x4b37,
+ 0x65d1, 0x40d8, 0xe1aa, 0x65e0, 0x65e3, 0x5fdf, 0xe1ae, 0x6618,
+ 0xe1b0, 0xe1b1, 0x6644, 0xe1b3, 0xe1b4, 0x664b, 0xe1b6, 0x6667,
+ 0xe1b8, 0x6673, 0x6674, 0xe1bb, 0xe1bc, 0xe1bd, 0xe1be, 0xe1bf,
+ 0x77c5, 0xe1c1, 0x99a4, 0x6702, 0xe1c4, 0xe1c5, 0x3b2b, 0x69fa,
+ 0xe1c8, 0x675e, 0x6767, 0x6762, 0xe1cc, 0xe1cd, 0x67d7, 0x44e9,
+ 0x6822, 0x6e50, 0x923c, 0x6801, 0xe1d4, 0xe1d5, 0x685d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe1d7, 0x69e1, 0x6a0b, 0xe1da, 0x6973, 0x68c3, 0xe1dd, 0x6901,
+ 0x6900, 0x3d32, 0x3a01, 0xe1e2, 0x3b80, 0x67ac, 0x6961, 0xe1e6,
+ 0x42fc, 0x6936, 0x6998, 0x3ba1, 0xe1eb, 0x8363, 0x5090, 0x69f9,
+ 0xe1ef, 0xe1f0, 0x6a45, 0xe1f2, 0x6a9d, 0x3bf3, 0x67b1, 0x6ac8,
+ 0xe1f7, 0x3c0d, 0x6b1d, 0xe1fa, 0x60de, 0x6b35, 0x6b74, 0xe1fe,
+ 0x6eb5, 0xe200, 0xe201, 0xe202, 0x3740, 0x5421, 0xe205, 0x6be1,
+ 0xe207, 0x6bdc, 0x6c37, 0xe20a, 0xe20b, 0xe20c, 0x6c5a, 0x8226,
+ 0x6c79, 0xe210, 0x44c5, 0xe212, 0xe213, 0xe214, 0xe215, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe216, 0x36e5, 0x3ceb, 0xe219, 0x9b83, 0xe21b, 0xe21c,
+ 0x7f8f, 0x6837, 0xe21f, 0xe220, 0xe221, 0x6d96, 0x6d5c, 0x6e7c,
+ 0x6f04, 0xe226, 0xe227, 0xe228, 0x8533, 0xe22a, 0x51c7, 0x6c9c,
+ 0x6e1d, 0x842e, 0xe22f, 0x6e2f, 0xe231, 0x7453, 0xe233, 0x79cc,
+ 0x6e4f, 0x5a91, 0xe237, 0x6ff8, 0x370d, 0x6f9d, 0xe23b, 0x6efa,
+ 0xe23d, 0xe23e, 0x4555, 0x93f0, 0x6f44, 0x6f5c, 0x3d4e, 0x6f74,
+ 0xe245, 0x3d3b, 0x6f9f, 0xe248, 0x6fd3, 0xe24a, 0xe24b, 0xe24c,
+ 0xe24d, 0xe24e, 0xe24f, 0x51df, 0xe251, 0xe252, 0xe253, 0xe254,
+ 0x704b, 0x707e, 0x70a7, 0x7081, 0x70cc, 0x70d5, 0x70d6, 0x70df,
+ 0x4104, 0x3de8, 0x71b4, 0x7196, 0xe261, 0x712b, 0x7145, 0x5a88,
+ 0x714a, 0x716e, 0x5c9c, 0xe268, 0x714f, 0x9362, 0xe26b, 0x712c,
+ 0xe26d, 0xe26e, 0xe26f, 0x71ba, 0xe271, 0x70bd, 0x720e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x9442, 0x7215, 0x5911, 0x9443, 0x7224, 0x9341, 0xe27a, 0x722e,
+ 0x7240, 0xe27d, 0x68bd, 0x7255, 0x7257, 0x3e55, 0xe282, 0x680d,
+ 0x6f3d, 0x7282, 0x732a, 0x732b, 0xe288, 0xe289, 0x48ed, 0xe28b,
+ 0x7328, 0x732e, 0x73cf, 0x73aa, 0xe290, 0xe291, 0x73c9, 0x7449,
+ 0xe294, 0xe295, 0xe296, 0x6623, 0x36c5, 0xe299, 0xe29a, 0xe29b,
+ 0x73f7, 0x7415, 0x6903, 0xe29f, 0x7439, 0xe2a1, 0x3ed7, 0x745c,
+ 0xe2a4, 0x7460, 0xe2a6, 0x7447, 0x73e4, 0x7476, 0x83b9, 0x746c,
+ 0x3730, 0x7474, 0x93f1, 0x6a2c, 0x7482, 0x4953, 0xe2b2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xe2b3, 0xe2b4, 0xe2b5, 0x5b46, 0xe2b7, 0xe2b8, 0x74c8,
+ 0xe2ba, 0x750e, 0x74e9, 0x751e, 0xe2be, 0xe2bf, 0x5bd7, 0xe2c1,
+ 0x9385, 0x754d, 0x754a, 0x7567, 0x756e, 0xe2c7, 0x3f04, 0xe2c9,
+ 0x758e, 0x745d, 0x759e, 0x75b4, 0x7602, 0x762c, 0x7651, 0x764f,
+ 0x766f, 0x7676, 0xe2d4, 0x7690, 0x81ef, 0x37f8, 0xe2d8, 0xe2d9,
+ 0x76a1, 0x76a5, 0x76b7, 0x76cc, 0xe2de, 0x8462, 0xe2e0, 0xe2e1,
+ 0xe2e2, 0x771e, 0x7726, 0x7740, 0x64af, 0xe2e7, 0x7758, 0xe2e9,
+ 0x77af, 0xe2eb, 0xe2ec, 0xe2ed, 0x77f4, 0x7809, 0xe2f0, 0xe2f1,
+ 0x68ca, 0x78af, 0x78c7, 0x78d3, 0x96a5, 0x792e, 0xe2f8, 0x78d7,
+ 0x7934, 0x78b1, 0xe2fc, 0x8fb8, 0x8884, 0xe2ff, 0xe300, 0xe301,
+ 0x7986, 0x8900, 0x6902, 0x7980, 0xe306, 0x799d, 0xe308, 0x793c,
+ 0x79a9, 0x6e2a, 0xe30c, 0x3ea8, 0x79c6, 0xe30f, 0x79d4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x79d4, 0xfefe, 0x00ff, 0x0000, 0x0100, 0x0005, 0x8000, 0x804f240
+};
+
+
+const unichar_t unicode_from_ksc5601[] = {
+ 0x3164, 0x3001, 0x3002, 0x30fb, 0x2025, 0x22ef, 0x00a8, 0x3003,
+ 0x2013, 0x2014, 0x2016, 0xff3c, 0xff5e, 0x2018, 0x2019, 0x201c,
+ 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
+ 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7,
+ 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033,
+ 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220,
+ 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b,
+ 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1,
+ 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191,
+ 0x2193, 0x2194, 0x3013, 0x00ab, 0x00bb, 0x221a, 0x223d, 0x221d,
+ 0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282,
+ 0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2, 0x21d2, 0x21d4,
+ 0x2200, 0x2203, 0x00b4, 0x02dc, 0x02c7, 0x02d8, 0x02dd, 0x02da,
+ 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x2236, 0x222e, 0x2211,
+ 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0, 0x25b7, 0x25b6,
+ 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663, 0x25c9, 0x25c8,
+ 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5, 0x25a8, 0x25a7,
+ 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c, 0x261e, 0x00b6,
+ 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, 0x2198, 0x266d,
+ 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116, 0x33c7, 0x2122,
+ 0x33c2, 0x33d8, 0x2121, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0xff01, 0xff02, 0xff03, 0xff04,
+ 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c,
+ 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14,
+ 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c,
+ 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24,
+ 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c,
+ 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34,
+ 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6,
+ 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44,
+ 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
+ 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54,
+ 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c,
+ 0xff5d, 0xffe3, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136,
+ 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e,
+ 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146,
+ 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e,
+ 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156,
+ 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e,
+ 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x0000, 0x3165, 0x3166,
+ 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e,
+ 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176,
+ 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e,
+ 0x317f, 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186,
+ 0x3187, 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e,
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
+ 0x2178, 0x2179, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2160,
+ 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
+ 0x2169, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
+ 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
+ 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
+ 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
+ 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2500, 0x2502,
+ 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, 0x2534,
+ 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, 0x2523,
+ 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, 0x2537,
+ 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 0x2512, 0x2511,
+ 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d, 0x251e, 0x251f,
+ 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a, 0x252d, 0x252e,
+ 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a, 0x253d, 0x253e,
+ 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548,
+ 0x2549, 0x254a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x3395, 0x3396, 0x3397, 0x2113,
+ 0x3398, 0x33c4, 0x33a3, 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a,
+ 0x339b, 0x339c, 0x339d, 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2,
+ 0x33ca, 0x338d, 0x338e, 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8,
+ 0x33a7, 0x33a8, 0x33b0, 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5,
+ 0x33b6, 0x33b7, 0x33b8, 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383,
+ 0x3384, 0x33ba, 0x33bb, 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390,
+ 0x3391, 0x3392, 0x3393, 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a,
+ 0x338b, 0x338c, 0x33d6, 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db,
+ 0x33a9, 0x33aa, 0x33ab, 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3,
+ 0x33c9, 0x33dc, 0x33c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x00c6, 0x00d0, 0x00aa, 0x0126, 0x0000, 0x0132,
+ 0x0000, 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166,
+ 0x014a, 0x0000, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265,
+ 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d,
+ 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275,
+ 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1,
+ 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9,
+ 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1,
+ 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9,
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
+ 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd,
+ 0x2153, 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e,
+ 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140,
+ 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149,
+ 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207,
+ 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f,
+ 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217,
+ 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f,
+ 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7,
+ 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af,
+ 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475,
+ 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d,
+ 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3,
+ 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084, 0x3041, 0x3042,
+ 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a,
+ 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052,
+ 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a,
+ 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062,
+ 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a,
+ 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072,
+ 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a,
+ 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082,
+ 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a,
+ 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092,
+ 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x30a1, 0x30a2, 0x30a3, 0x30a4,
+ 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac,
+ 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4,
+ 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc,
+ 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4,
+ 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc,
+ 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4,
+ 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc,
+ 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4,
+ 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec,
+ 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4,
+ 0x30f5, 0x30f6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415,
+ 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424,
+ 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c,
+ 0x042d, 0x042e, 0x042f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435,
+ 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c,
+ 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444,
+ 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c,
+ 0x044d, 0x044e, 0x044f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09,
+ 0xac0a, 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16,
+ 0xac17, 0xac19, 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24,
+ 0xac2c, 0xac2d, 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c,
+ 0xac40, 0xac4b, 0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71,
+ 0xac74, 0xac77, 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84,
+ 0xac85, 0xac86, 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94,
+ 0xac9c, 0xac9d, 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa,
+ 0xacac, 0xacaf, 0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd,
+ 0xacc1, 0xacc4, 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1,
+ 0xace4, 0xace7, 0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1,
+ 0xacf3, 0xacf5, 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06,
+ 0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29,
+ 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45,
+ 0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c,
+ 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c,
+ 0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90,
+ 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8,
+ 0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9,
+ 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d,
+ 0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40,
+ 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e,
+ 0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61,
+ 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, 0xae79, 0xae7b,
+ 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc, 0xaebd, 0xaebe,
+ 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0, 0xaed1, 0xaed8,
+ 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4, 0xaef8, 0xaefc,
+ 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d, 0xaf30, 0xaf32,
+ 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42, 0xaf43, 0xaf48,
+ 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65, 0xaf79, 0xaf80,
+ 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c, 0xafb8, 0xafb9,
+ 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb, 0xafcd, 0xafce,
+ 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1, 0xaff4, 0xaff8,
+ 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014, 0xb01c, 0xb01d,
+ 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c, 0xb04e, 0xb053,
+ 0xb054, 0xb055, 0xb057, 0xb059, 0xb05d, 0xb07c, 0xb07d, 0xb080,
+ 0xb084, 0xb08c, 0xb08d, 0xb08f, 0xb091, 0xb098, 0xb099, 0xb09a,
+ 0xb09c, 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab,
+ 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5,
+ 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0,
+ 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0, 0xb0e5, 0xb108, 0xb109, 0xb10b,
+ 0xb10c, 0xb110, 0xb112, 0xb113, 0xb118, 0xb119, 0xb11b, 0xb11c,
+ 0xb11d, 0xb123, 0xb124, 0xb125, 0xb128, 0xb12c, 0xb134, 0xb135,
+ 0xb137, 0xb138, 0xb139, 0xb140, 0xb141, 0xb144, 0xb148, 0xb150,
+ 0xb151, 0xb154, 0xb155, 0xb158, 0xb15c, 0xb160, 0xb178, 0xb179,
+ 0xb17c, 0xb180, 0xb182, 0xb188, 0xb189, 0xb18b, 0xb18d, 0xb192,
+ 0xb193, 0xb194, 0xb198, 0xb19c, 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4,
+ 0xb1dc, 0xb1dd, 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9,
+ 0xb1fb, 0xb1fd, 0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214,
+ 0xb215, 0xb217, 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c,
+ 0xb260, 0xb268, 0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285,
+ 0xb289, 0xb290, 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0,
+ 0xb2a1, 0xb2a3, 0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4,
+ 0xb2c8, 0xb2c9, 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db,
+ 0xb2dd, 0xb2e2, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec,
+ 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8,
+ 0xb2f9, 0xb2fa, 0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308,
+ 0xb310, 0xb311, 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355,
+ 0xb356, 0xb358, 0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365,
+ 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378,
+ 0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394,
+ 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb,
+ 0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db,
+ 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c,
+ 0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454,
+ 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488,
+ 0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0,
+ 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3,
+ 0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514,
+ 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528,
+ 0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538, 0xb540, 0xb541,
+ 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d, 0xb550, 0xb554,
+ 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0, 0xb5a1, 0xb5a4,
+ 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3, 0xb5b4, 0xb5b5,
+ 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc, 0xb5cd, 0xb5cf,
+ 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611, 0xb614, 0xb618,
+ 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668, 0xb69c, 0xb69d,
+ 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4, 0xb6f0, 0xb6f4,
+ 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729, 0xb72c, 0xb72f,
+ 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748, 0xb74c, 0xb754,
+ 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771, 0xb773, 0xb775,
+ 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d, 0xb78f, 0xb790,
+ 0xb791, 0xb792, 0xb796, 0xb797, 0xb798, 0xb799, 0xb79c, 0xb7a0,
+ 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac, 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8,
+ 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed, 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd,
+ 0xb7ff, 0xb800, 0xb801, 0xb807, 0xb808, 0xb809, 0xb80c, 0xb810,
+ 0xb818, 0xb819, 0xb81b, 0xb81d, 0xb824, 0xb825, 0xb828, 0xb82c,
+ 0xb834, 0xb835, 0xb837, 0xb838, 0xb839, 0xb840, 0xb844, 0xb851,
+ 0xb853, 0xb85c, 0xb85d, 0xb860, 0xb864, 0xb86c, 0xb86d, 0xb86f,
+ 0xb871, 0xb878, 0xb87c, 0xb88d, 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8,
+ 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5, 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd,
+ 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9, 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9,
+ 0xb8fb, 0xb8fd, 0xb904, 0xb918, 0xb920, 0xb93c, 0xb93d, 0xb940,
+ 0xb944, 0xb94c, 0xb94f, 0xb951, 0xb958, 0xb959, 0xb95c, 0xb960,
+ 0xb968, 0xb969, 0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c,
+ 0xb984, 0xb985, 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac,
+ 0xb9ad, 0xb9b0, 0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8,
+ 0xb9c9, 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8,
+ 0xb9d9, 0xb9db, 0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5,
+ 0xb9e8, 0xb9ec, 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa,
+ 0xba00, 0xba01, 0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40,
+ 0xba42, 0xba48, 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54,
+ 0xba55, 0xba58, 0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69,
+ 0xba70, 0xba71, 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87,
+ 0xba8c, 0xbaa8, 0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8,
+ 0xbab9, 0xbabb, 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc,
+ 0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20,
+ 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c,
+ 0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f,
+ 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c,
+ 0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4,
+ 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00,
+ 0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11,
+ 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d,
+ 0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30,
+ 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45,
+ 0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88,
+ 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, 0xbc99, 0xbc9a,
+ 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0, 0xbcb1, 0xbcb3,
+ 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4, 0xbccd, 0xbccf,
+ 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4, 0xbcf5, 0xbcf6,
+ 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09, 0xbd10, 0xbd14,
+ 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c, 0xbd50, 0xbd58,
+ 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84, 0xbd87, 0xbd88,
+ 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95, 0xbd99, 0xbd9a,
+ 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5, 0xbdd8, 0xbddc,
+ 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03, 0xbe05, 0xbe0c,
+ 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f, 0xbe44, 0xbe45,
+ 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57, 0xbe59, 0xbe5a,
+ 0xbe5b, 0xbe60, 0xbe61, 0xbe64, 0xbe68, 0xbe6a, 0xbe70, 0xbe71,
+ 0xbe73, 0xbe74, 0xbe75, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe80, 0xbe84,
+ 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90, 0xbe91, 0xbe98, 0xbe99, 0xbea8,
+ 0xbed0, 0xbed1, 0xbed4, 0xbed7, 0xbed8, 0xbee0, 0xbee3, 0xbee4,
+ 0xbee5, 0xbeec, 0xbf01, 0xbf08, 0xbf09, 0xbf18, 0xbf19, 0xbf1b,
+ 0xbf1c, 0xbf1d, 0xbf40, 0xbf41, 0xbf44, 0xbf48, 0xbf50, 0xbf51,
+ 0xbf55, 0xbf94, 0xbfb0, 0xbfc5, 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4,
+ 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c, 0xc051, 0xc058, 0xc05c, 0xc060,
+ 0xc068, 0xc069, 0xc090, 0xc091, 0xc094, 0xc098, 0xc0a0, 0xc0a1,
+ 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad, 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4,
+ 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5,
+ 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0, 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc,
+ 0xc0dd, 0xc0e4, 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7,
+ 0xc0f9, 0xc100, 0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d,
+ 0xc11e, 0xc11f, 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c,
+ 0xc12d, 0xc12f, 0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c,
+ 0xc140, 0xc148, 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155,
+ 0xc158, 0xc15c, 0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170,
+ 0xc174, 0xc178, 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194,
+ 0xc196, 0xc19c, 0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9,
+ 0xc1ac, 0xc1b0, 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7,
+ 0xc1d8, 0xc1e0, 0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc,
+ 0xc1fd, 0xc200, 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218,
+ 0xc219, 0xc21c, 0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d,
+ 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254,
+ 0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c,
+ 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b,
+ 0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5,
+ 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb,
+ 0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb,
+ 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314,
+ 0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345,
+ 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c,
+ 0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc,
+ 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5,
+ 0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430, 0xc434, 0xc43c,
+ 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c, 0xc474, 0xc475,
+ 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc, 0xc4e9, 0xc4f0,
+ 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500, 0xc501, 0xc50c,
+ 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c, 0xc530, 0xc538,
+ 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548, 0xc549, 0xc54a,
+ 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555, 0xc557, 0xc558,
+ 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564, 0xc568, 0xc570,
+ 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d, 0xc580, 0xc584,
+ 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595, 0xc597, 0xc598,
+ 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8, 0xc5b9, 0xc5bb,
+ 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8,
+ 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce, 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8,
+ 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0,
+ 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600,
+ 0xc601, 0xc605, 0xc606, 0xc607, 0xc608, 0xc60c, 0xc610, 0xc618,
+ 0xc619, 0xc61b, 0xc61c, 0xc624, 0xc625, 0xc628, 0xc62c, 0xc62d,
+ 0xc62e, 0xc630, 0xc633, 0xc634, 0xc635, 0xc637, 0xc639, 0xc63b,
+ 0xc640, 0xc641, 0xc644, 0xc648, 0xc650, 0xc651, 0xc653, 0xc654,
+ 0xc655, 0xc65c, 0xc65d, 0xc660, 0xc66c, 0xc66f, 0xc671, 0xc678,
+ 0xc679, 0xc67c, 0xc680, 0xc688, 0xc689, 0xc68b, 0xc68d, 0xc694,
+ 0xc695, 0xc698, 0xc69c, 0xc6a4, 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0,
+ 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3,
+ 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0, 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0,
+ 0xc6e1, 0xc6e8, 0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd,
+ 0xc704, 0xc705, 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719,
+ 0xc720, 0xc721, 0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735,
+ 0xc737, 0xc73c, 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d,
+ 0xc74f, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757,
+ 0xc758, 0xc75c, 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778,
+ 0xc77c, 0xc77d, 0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788,
+ 0xc789, 0xc78a, 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797,
+ 0xc798, 0xc79a, 0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6,
+ 0xc7ac, 0xc7ad, 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0,
+ 0xc7c1, 0xc7c8, 0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd,
+ 0xc7e4, 0xc7e8, 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a,
+ 0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820,
+ 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840,
+ 0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874,
+ 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887,
+ 0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8,
+ 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7,
+ 0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900,
+ 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918,
+ 0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961,
+ 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c,
+ 0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4,
+ 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, 0xc9d5, 0xc9d6,
+ 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2, 0xc9e4, 0xc9e7,
+ 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8, 0xc9f9, 0xc9fc,
+ 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d, 0xca14, 0xca18,
+ 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c, 0xca5d, 0xca5f,
+ 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98, 0xcabc, 0xcabd,
+ 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1, 0xcad3, 0xcad8,
+ 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10, 0xcb14, 0xcb18,
+ 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c, 0xcb50, 0xcb58,
+ 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c, 0xcbb8, 0xcbd4,
+ 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10, 0xcc14, 0xcc1c,
+ 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29, 0xcc2c, 0xcc2e,
+ 0xcc30, 0xcc38, 0xcc39, 0xcc3b, 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44,
+ 0xcc45, 0xcc48, 0xcc4c, 0xcc54, 0xcc55, 0xcc57, 0xcc58, 0xcc59,
+ 0xcc60, 0xcc64, 0xcc66, 0xcc68, 0xcc70, 0xcc75, 0xcc98, 0xcc99,
+ 0xcc9c, 0xcca0, 0xcca8, 0xcca9, 0xccab, 0xccac, 0xccad, 0xccb4,
+ 0xccb5, 0xccb8, 0xccbc, 0xccc4, 0xccc5, 0xccc7, 0xccc9, 0xccd0,
+ 0xccd4, 0xcce4, 0xccec, 0xccf0, 0xcd01, 0xcd08, 0xcd09, 0xcd0c,
+ 0xcd10, 0xcd18, 0xcd19, 0xcd1b, 0xcd1d, 0xcd24, 0xcd28, 0xcd2c,
+ 0xcd39, 0xcd5c, 0xcd60, 0xcd64, 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71,
+ 0xcd78, 0xcd88, 0xcd94, 0xcd95, 0xcd98, 0xcd9c, 0xcda4, 0xcda5,
+ 0xcda7, 0xcda9, 0xcdb0, 0xcdc4, 0xcdcc, 0xcdd0, 0xcde8, 0xcdec,
+ 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb, 0xcdfd, 0xce04, 0xce08, 0xce0c,
+ 0xce14, 0xce19, 0xce20, 0xce21, 0xce24, 0xce28, 0xce30, 0xce31,
+ 0xce33, 0xce35, 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61,
+ 0xce68, 0xce69, 0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c,
+ 0xce84, 0xce85, 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98,
+ 0xcea0, 0xcea1, 0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1,
+ 0xcee4, 0xcee5, 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7,
+ 0xcef8, 0xcef9, 0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11,
+ 0xcf13, 0xcf15, 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f,
+ 0xcf30, 0xcf31, 0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64,
+ 0xcf65, 0xcf67, 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80,
+ 0xcf85, 0xcf8c, 0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1,
+ 0xcfe4, 0xcfe8, 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000,
+ 0xd004, 0xd011, 0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c,
+ 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060,
+ 0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4,
+ 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0,
+ 0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4,
+ 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef,
+ 0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138,
+ 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d,
+ 0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c,
+ 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0,
+ 0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4,
+ 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234,
+ 0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c, 0xd264, 0xd280,
+ 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295, 0xd29c, 0xd2a0,
+ 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc, 0xd2bf, 0xd2c0,
+ 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8, 0xd2dc, 0xd2e4,
+ 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300, 0xd301, 0xd303,
+ 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314, 0xd316, 0xd31c,
+ 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328, 0xd329, 0xd32c,
+ 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d, 0xd344, 0xd345,
+ 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d, 0xd38f, 0xd390,
+ 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8, 0xd3a9, 0xd3ab,
+ 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5, 0xd3c8, 0xd3c9,
+ 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed, 0xd3f0, 0xd3f4,
+ 0xd3fc, 0xd3fd, 0xd3ff, 0xd401, 0xd408, 0xd41d, 0xd440, 0xd444,
+ 0xd45c, 0xd460, 0xd464, 0xd46d, 0xd46f, 0xd478, 0xd479, 0xd47c,
+ 0xd47f, 0xd480, 0xd482, 0xd488, 0xd489, 0xd48b, 0xd48d, 0xd494,
+ 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4, 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec,
+ 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd, 0xd504, 0xd508, 0xd50c, 0xd514,
+ 0xd515, 0xd517, 0xd53c, 0xd53d, 0xd540, 0xd544, 0xd54c, 0xd54d,
+ 0xd54f, 0xd551, 0xd558, 0xd559, 0xd55c, 0xd560, 0xd565, 0xd568,
+ 0xd569, 0xd56b, 0xd56d, 0xd574, 0xd575, 0xd578, 0xd57c, 0xd584,
+ 0xd585, 0xd587, 0xd588, 0xd589, 0xd590, 0xd5a5, 0xd5c8, 0xd5c9,
+ 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8, 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4,
+ 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4, 0xd5f5, 0xd5f7, 0xd5f9, 0xd600,
+ 0xd601, 0xd604, 0xd608, 0xd610, 0xd611, 0xd613, 0xd614, 0xd615,
+ 0xd61c, 0xd620, 0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640,
+ 0xd645, 0xd648, 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655,
+ 0xd658, 0xd65c, 0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683,
+ 0xd685, 0xd68c, 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1,
+ 0xd6a8, 0xd6ac, 0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8,
+ 0xd6cc, 0xd6d1, 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8,
+ 0xd6f0, 0xd6f5, 0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718,
+ 0xd719, 0xd71c, 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734,
+ 0xd735, 0xd738, 0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751,
+ 0xd754, 0xd756, 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763,
+ 0xd765, 0xd769, 0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781,
+ 0xd788, 0xd789, 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4f3d, 0x4f73,
+ 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5, 0x5609, 0x5ac1,
+ 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c, 0x73c2, 0x75c2,
+ 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36, 0x8cc8, 0x8dcf,
+ 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404, 0x606a, 0x6164,
+ 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3, 0x4f83, 0x520a,
+ 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7, 0x63c0, 0x6746,
+ 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5, 0x7a08, 0x7aff,
+ 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593, 0x4e6b, 0x559d,
+ 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910, 0x874e, 0x97a8,
+ 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be, 0x6221, 0x6562,
+ 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3, 0x77b0, 0x7d3a,
+ 0x90af, 0x9451, 0x9452, 0x9f95, 0x5323, 0x5cac, 0x7532, 0x80db,
+ 0x9240, 0x9598, 0x525b, 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7,
+ 0x5f3a, 0x5f4a, 0x6177, 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73,
+ 0x7db1, 0x7f8c, 0x8154, 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc,
+ 0x0000, 0x9c47, 0x4ecb, 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137,
+ 0x613e, 0x6168, 0x6539, 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6,
+ 0x7b87, 0x82a5, 0x84cb, 0x0000, 0x93a7, 0x958b, 0x5580, 0x5ba2,
+ 0x5751, 0x66f4, 0x7cb3, 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45,
+ 0x5de8, 0x62d2, 0x636e, 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b,
+ 0x8ddd, 0x8e1e, 0x0000, 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6,
+ 0x5065, 0x5dfe, 0x5efa, 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47,
+ 0x9375, 0x9a2b, 0x4e5e, 0x5091, 0x6770, 0x6840, 0x5109, 0x528d,
+ 0x5292, 0x6aa2, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2,
+ 0x5048, 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188,
+ 0x89a1, 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d,
+ 0x80a9, 0x0000, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54,
+ 0x7d50, 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257,
+ 0x938c, 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd,
+ 0x537f, 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce,
+ 0x656c, 0x666f, 0x66bb, 0x0000, 0x6897, 0x6d87, 0x7085, 0x70f1,
+ 0x749f, 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6,
+ 0x7d45, 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15,
+ 0x9015, 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553,
+ 0x583a, 0x0000, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0,
+ 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b,
+ 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9,
+ 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7,
+ 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc,
+ 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6,
+ 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0x0000, 0x8f9c,
+ 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2,
+ 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606,
+ 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0x0000,
+ 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050,
+ 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2,
+ 0x978f, 0x0000, 0x5be1, 0x6208, 0x679c, 0x74dc, 0x79d1, 0x83d3,
+ 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846, 0x5ed3, 0x69e8,
+ 0x85ff, 0x90ed, 0x4e32, 0x51a0, 0x5b98, 0x5bec, 0x6163, 0x68fa,
+ 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50, 0x83c5, 0x89c0,
+ 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec, 0x9002, 0x4f8a,
+ 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38, 0x709a, 0x72c2,
+ 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b, 0x7f6b, 0x4e56,
+ 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0, 0x69d0, 0x9b41,
+ 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1, 0x54ac, 0x55ac,
+ 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821, 0x6a4b, 0x72e1,
+ 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e, 0x86df, 0x8f03,
+ 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d,
+ 0x4ec7, 0x4ff1, 0x5177, 0x52fe, 0x5340, 0x53e3, 0x53e5, 0x548e,
+ 0x5614, 0x5775, 0x57a2, 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8,
+ 0x6551, 0x67b8, 0x67e9, 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42,
+ 0x6e9d, 0x7078, 0x72d7, 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76,
+ 0x7d7f, 0x8009, 0x81fc, 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33,
+ 0x8cfc, 0x8ec0, 0x9011, 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45,
+ 0x9ce9, 0x9dd7, 0x9f9c, 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab,
+ 0x9eb4, 0x541b, 0x7a98, 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800,
+ 0x5c48, 0x6398, 0x7a9f, 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e,
+ 0x8eac, 0x5026, 0x5238, 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372,
+ 0x6b0a, 0x6dc3, 0x7737, 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5,
+ 0x673a, 0x6ac3, 0x6f70, 0x8a6d, 0x8ecc, 0x994b, 0x0000, 0x6677,
+ 0x6b78, 0x8cb4, 0x9b3c, 0x0000, 0x53eb, 0x572d, 0x594e, 0x63c6,
+ 0x69fb, 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f,
+ 0x8d73, 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc,
+ 0x921e, 0x0000, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8,
+ 0x6975, 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839,
+ 0x69ff, 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1,
+ 0x9949, 0x5951, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434,
+ 0x7981, 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0x91d1, 0x9326,
+ 0x4f0b, 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98,
+ 0x5162, 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc,
+ 0x5668, 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4,
+ 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3,
+ 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23,
+ 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3,
+ 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a,
+ 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18,
+ 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e,
+ 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854,
+ 0x0000, 0x55ab, 0x513a, 0x5587, 0x5948, 0x5a1c, 0x61e6, 0x61f6,
+ 0x62cf, 0x62ff, 0x7669, 0x7f85, 0x863f, 0x87ba, 0x88f8, 0x908f,
+ 0x90a3, 0x6a02, 0x6d1b, 0x70d9, 0x73de, 0x843d, 0x8afe, 0x916a,
+ 0x99f1, 0x4e82, 0x5375, 0x6696, 0x6b04, 0x7156, 0x721b, 0x862d,
+ 0x96e3, 0x9e1e, 0x634f, 0x637a, 0x5357, 0x5d50, 0x678f, 0x6960,
+ 0x6e73, 0x6feb, 0x7537, 0x85cd, 0x8964, 0x62c9, 0x7d0d, 0x81d8,
+ 0x881f, 0x8872, 0x56ca, 0x5a18, 0x5eca, 0x6717, 0x6d6a, 0x72fc,
+ 0x90de, 0x4e43, 0x4f86, 0x5167, 0x0000, 0x67f0, 0x8010, 0x51b7,
+ 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c, 0x62c8, 0x637b,
+ 0x5be7, 0x5bd7, 0x52aa, 0x52de, 0x5974, 0x5f29, 0x6012, 0x64c4,
+ 0x6ad3, 0x7210, 0x7459, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def,
+ 0x9732, 0x99d1, 0x9b6f, 0x9dfa, 0x788c, 0x797f, 0x7da0, 0x83c9,
+ 0x9304, 0x9e7f, 0x8ad6, 0x58df, 0x5f04, 0x6fc3, 0x7c60, 0x807e,
+ 0x81bf, 0x8fb2, 0x60f1, 0x7262, 0x78ca, 0x8166, 0x8cc2, 0x96f7,
+ 0x5c3f, 0x58d8, 0x5c62, 0x6a13, 0x6dda, 0x6f0f, 0x7d2f, 0x7e37,
+ 0x964b, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0x52d2, 0x808b, 0x51dc,
+ 0x51cc, 0x7a1c, 0x7dbe, 0x80fd, 0x83f1, 0x9675, 0x5c3c, 0x6ce5,
+ 0x533f, 0x6eba, 0x591a, 0x8336, 0x4e39, 0x4eb6, 0x4f46, 0x55ae,
+ 0x5718, 0x58c7, 0x5f56, 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d,
+ 0x77ed, 0x7aef, 0x7c1e, 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b,
+ 0x64bb, 0x6fbe, 0x737a, 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba,
+ 0x64d4, 0x66c7, 0x6de1, 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043,
+ 0x81bd, 0x8541, 0x8983, 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553,
+ 0x7b54, 0x8e0f, 0x905d, 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207,
+ 0x649e, 0x68e0, 0x7576, 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788,
+ 0x576e, 0x5927, 0x5c0d, 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1,
+ 0x73b3, 0x81fa, 0x888b, 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7,
+ 0x60b3, 0x5012, 0x5200, 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e,
+ 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389,
+ 0x6417, 0x6843, 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4,
+ 0x71fe, 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced,
+ 0x8df3, 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676,
+ 0x97dc, 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf,
+ 0x7be4, 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be,
+ 0x6c8c, 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd,
+ 0x51ac, 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df,
+ 0x6d1e, 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285,
+ 0x515c, 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0x0000,
+ 0x8c46, 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f,
+ 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4,
+ 0x8b04, 0x9127, 0x9a30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x7d61, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6b12, 0x703e, 0x0000, 0x0000, 0x0000, 0x524c, 0x8fa3,
+ 0x0000, 0x64e5, 0x652c, 0x6b16, 0x0000, 0x7c43, 0x7e9c, 0x0000,
+ 0x0000, 0x89bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7405, 0x746f, 0x8782, 0x0000, 0x0000, 0x5d0d, 0x5fa0,
+ 0x840a, 0x0000, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9,
+ 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b,
+ 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e,
+ 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62,
+ 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b,
+ 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 0x7149, 0x7489,
+ 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a, 0x51bd, 0x5217,
+ 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582, 0x6bae, 0x6fc2,
+ 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0x0000, 0x5cba, 0x5dba,
+ 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046, 0x901e, 0x9234,
+ 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7, 0x79ae, 0x91b4,
+ 0x96b7, 0x0000, 0x0000, 0x6488, 0x0000, 0x0000, 0x6f5e, 0x7018,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8f05, 0x0000,
+ 0x0000, 0x0000, 0x9e75, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9e93, 0x0000, 0x0000, 0x0000, 0x6727, 0x7027, 0x74cf,
+ 0x0000, 0x0000, 0x5121, 0x7028, 0x0000, 0x0000, 0x0000, 0x8cda,
+ 0x8cf4, 0x0000, 0x4e86, 0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce,
+ 0x7642, 0x77ad, 0x804a, 0x84fc, 0x907c, 0x9b27, 0x9f8d, 0x0000,
+ 0x5a41, 0x0000, 0x0000, 0x0000, 0x0000, 0x763b, 0x0000, 0x0000,
+ 0x851e, 0x8938, 0x93e4, 0x0000, 0x5289, 0x65d2, 0x67f3, 0x69b4,
+ 0x6d41, 0x6e9c, 0x700f, 0x7409, 0x7460, 0x7559, 0x7624, 0x786b,
+ 0x8b2c, 0x985e, 0x516d, 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19,
+ 0x6dea, 0x7db8, 0x8f2a, 0x5f8b, 0x6144, 0x6817, 0x7387, 0x9686,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x695e, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4fda, 0x5229, 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7,
+ 0x674e, 0x68a8, 0x6d6c, 0x7281, 0x72f8, 0x7406, 0x7483, 0x7570,
+ 0x75e2, 0x7c6c, 0x7f79, 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc,
+ 0x91d0, 0x96e2, 0x9bc9, 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa,
+ 0x8eaa, 0x96a3, 0x9c57, 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8,
+ 0x9716, 0x782c, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2,
+ 0x78bc, 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20,
+ 0x819c, 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e,
+ 0x6162, 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e,
+ 0x842c, 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9,
+ 0x672b, 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8,
+ 0x5fd9, 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e,
+ 0x9099, 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885,
+ 0x6bcf, 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108,
+ 0x8c8a, 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2,
+ 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9,
+ 0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5,
+ 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f,
+ 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4,
+ 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478,
+ 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261,
+ 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28,
+ 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9,
+ 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999,
+ 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7,
+ 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab,
+ 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46,
+ 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8,
+ 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, 0x6c76, 0x7d0a,
+ 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff, 0x6c95, 0x7269,
+ 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae, 0x672a, 0x68b6,
+ 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e, 0x8587, 0x8b0e,
+ 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d, 0x61ab, 0x654f,
+ 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9, 0x7de1, 0x9594,
+ 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd, 0x640f, 0x64b2,
+ 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94, 0x7c95, 0x7e1b,
+ 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1, 0x4f34, 0x534a,
+ 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591, 0x69c3, 0x6cee,
+ 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc, 0x78d0, 0x78fb,
+ 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812, 0x98ef, 0x52c3,
+ 0x62d4, 0x64a5, 0x6e24, 0x6f51, 0x767c, 0x8dcb, 0x91b1, 0x9262,
+ 0x9aee, 0x9b43, 0x5023, 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47,
+ 0x5f77, 0x623f, 0x653e, 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c,
+ 0x6ec2, 0x78c5, 0x7d21, 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1,
+ 0x868c, 0x8a2a, 0x8b17, 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3,
+ 0x5317, 0x57f9, 0x5f98, 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119,
+ 0x76c3, 0x80cc, 0x80da, 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29,
+ 0x914d, 0x966a, 0x4f2f, 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d,
+ 0x767e, 0x9b44, 0x5e61, 0x6a0a, 0x7169, 0x71d4, 0x756a, 0x0000,
+ 0x7e41, 0x8543, 0x85e9, 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5,
+ 0x51e1, 0x5e06, 0x68b5, 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4,
+ 0x8303, 0x6cd5, 0x743a, 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97,
+ 0x74a7, 0x7656, 0x78a7, 0x8617, 0x95e2, 0x9739, 0x4fbf, 0x535e,
+ 0x5f01, 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49,
+ 0x9f08, 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a,
+ 0x67c4, 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27,
+ 0x9920, 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65,
+ 0x6d11, 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913,
+ 0x8b5c, 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9,
+ 0x670d, 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39,
+ 0x8f3b, 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01,
+ 0x5cef, 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b,
+ 0x84ec, 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef,
+ 0x5085, 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66,
+ 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0x0000, 0x6276, 0x6577, 0x65a7,
+ 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151,
+ 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb,
+ 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7,
+ 0x0000, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff,
+ 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde,
+ 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0x0000, 0x4f5b, 0x5f17, 0x5f7f,
+ 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15,
+ 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2,
+ 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6,
+ 0x6bd7, 0x6bd8, 0x6cb8, 0x6ccc, 0x7435, 0x75fa, 0x7812, 0x7891,
+ 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, 0x813e, 0x81c2,
+ 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb, 0x9119, 0x975e,
+ 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c, 0x6ab3, 0x6baf,
+ 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7, 0x8cd3, 0x983b,
+ 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b, 0x4e9b, 0x4ed5,
+ 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2, 0x53f8, 0x5506,
+ 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb, 0x5bfa, 0x5c04,
+ 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c, 0x65af, 0x67f6,
+ 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23, 0x7009, 0x7345,
+ 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9, 0x7d17, 0x7d72,
+ 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df, 0x8a50, 0x8a5e,
+ 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc, 0x99df, 0x9e9d,
+ 0x524a, 0x6578, 0x6714, 0x7d22, 0x5098, 0x522a, 0x5c71, 0x6563,
+ 0x6c55, 0x73ca, 0x7523, 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730,
+ 0x4e77, 0x6492, 0x6bba, 0x715e, 0x85a9, 0x4e09, 0x53c3, 0x6749,
+ 0x68ee, 0x6e17, 0x829f, 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212,
+ 0x98af, 0x4e0a, 0x50b7, 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617,
+ 0x5b40, 0x5c19, 0x5ce0, 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3,
+ 0x6851, 0x6a61, 0x6e58, 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965,
+ 0x7bb1, 0x7fd4, 0x88f3, 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c,
+ 0x585e, 0x74bd, 0x8cfd, 0x55c7, 0x0000, 0x7a61, 0x0000, 0x8272,
+ 0x7272, 0x751f, 0x7525, 0x7701, 0x7b19, 0x5885, 0x58fb, 0x5dbc,
+ 0x5e8f, 0x5eb6, 0x5f90, 0x6055, 0x6292, 0x637f, 0x654d, 0x6691,
+ 0x66d9, 0x66f8, 0x6816, 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e,
+ 0x7dd6, 0x7f72, 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d,
+ 0x92e4, 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614,
+ 0x6673, 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6,
+ 0x91cb, 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3,
+ 0x6247, 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487,
+ 0x74bf, 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3,
+ 0x8239, 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425,
+ 0x994d, 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b,
+ 0x820c, 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261,
+ 0x66b9, 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d,
+ 0x6d89, 0x71ee, 0x8449, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa,
+ 0x6210, 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x0000, 0x7b6c,
+ 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72,
+ 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0x0000, 0x8cb0, 0x53ec, 0x562f,
+ 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414,
+ 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2,
+ 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20,
+ 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5,
+ 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f,
+ 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0,
+ 0x905c, 0x98e1, 0x0000, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f,
+ 0x8aa6, 0x9001, 0x980c, 0x5237, 0x0000, 0x7051, 0x788e, 0x9396,
+ 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd,
+ 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 0x620d, 0x624b,
+ 0x6388, 0x641c, 0x6536, 0x0000, 0x6a39, 0x6b8a, 0x6c34, 0x6d19,
+ 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2, 0x7626, 0x7761,
+ 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac, 0x7e61, 0x7f9e,
+ 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896, 0x8ab0, 0x8b90,
+ 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9, 0x968b, 0x96a7,
+ 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3, 0x9b1a, 0x53d4,
+ 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a, 0x719f, 0x7421,
+ 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa, 0x6042, 0x65ec,
+ 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3, 0x73e3, 0x76fe,
+ 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340, 0x84f4, 0x8563,
+ 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853,
+ 0x8ff0, 0x9265, 0x5d07, 0x5d27, 0x5d69, 0x745f, 0x819d, 0x8768,
+ 0x6fd5, 0x62fe, 0x7fd2, 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7,
+ 0x52dd, 0x5347, 0x627f, 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d,
+ 0x5319, 0x5636, 0x59cb, 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02,
+ 0x5f11, 0x6043, 0x65bd, 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c,
+ 0x77e2, 0x793a, 0x7fc5, 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69,
+ 0x8ae1, 0x8c55, 0x8c7a, 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed,
+ 0x690d, 0x6b96, 0x6e5c, 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe,
+ 0x98df, 0x98fe, 0x4f38, 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8,
+ 0x613c, 0x65b0, 0x6668, 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e,
+ 0x81e3, 0x8398, 0x85aa, 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b,
+ 0x8fb0, 0x8fc5, 0x5931, 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b,
+ 0x5fc3, 0x6c81, 0x6c88, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6,
+ 0x4ec0, 0x5341, 0x0000, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152,
+ 0x555e, 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe,
+ 0x8859, 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a,
+ 0x5cb3, 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x0000, 0x6e25,
+ 0x9102, 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309,
+ 0x664f, 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1,
+ 0x8b01, 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697,
+ 0x764c, 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0,
+ 0x592e, 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0,
+ 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698,
+ 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d,
+ 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c,
+ 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0x82e5, 0x91ce, 0x5f31,
+ 0x0000, 0x0000, 0x7d04, 0x0000, 0x846f, 0x84bb, 0x85e5, 0x8e8d,
+ 0x0000, 0x4f6f, 0x0000, 0x0000, 0x58e4, 0x5b43, 0x6059, 0x63da,
+ 0x6518, 0x656d, 0x6698, 0x0000, 0x694a, 0x6a23, 0x6d0b, 0x7001,
+ 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0x0000, 0x7f8a, 0x0000,
+ 0x8944, 0x0000, 0x8b93, 0x91c0, 0x967d, 0x0000, 0x990a, 0x5704,
+ 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a,
+ 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830,
+ 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c,
+ 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88,
+ 0x4f59, 0x0000, 0x0000, 0x0000, 0x5982, 0x0000, 0x0000, 0x6b5f,
+ 0x6c5d, 0x0000, 0x74b5, 0x7916, 0x0000, 0x8207, 0x8245, 0x8339,
+ 0x8f3f, 0x8f5d, 0x0000, 0x9918, 0x0000, 0x0000, 0x0000, 0x4ea6,
+ 0x0000, 0x57df, 0x5f79, 0x6613, 0x0000, 0x0000, 0x75ab, 0x7e79,
+ 0x8b6f, 0x0000, 0x9006, 0x9a5b, 0x56a5, 0x5827, 0x59f8, 0x5a1f,
+ 0x5bb4, 0x0000, 0x5ef6, 0x0000, 0x0000, 0x6350, 0x633b, 0x0000,
+ 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5, 0x6f14, 0x0000,
+ 0x70df, 0x7136, 0x7159, 0x0000, 0x71c3, 0x71d5, 0x0000, 0x784f,
+ 0x786f, 0x0000, 0x7b75, 0x7de3, 0x0000, 0x7e2f, 0x0000, 0x884d,
+ 0x8edf, 0x0000, 0x0000, 0x0000, 0x925b, 0x0000, 0x9cf6, 0x0000,
+ 0x0000, 0x54bd, 0x6085, 0x6d85, 0x0000, 0x71b1, 0x0000, 0x0000,
+ 0x95b1, 0x53ad, 0x0000, 0x0000, 0x0000, 0x67d3, 0x0000, 0x708e,
+ 0x7130, 0x7430, 0x8276, 0x82d2, 0x0000, 0x95bb, 0x9ae5, 0x9e7d,
+ 0x66c4, 0x0000, 0x71c1, 0x0000, 0x0000, 0x0000, 0x584b, 0x0000,
+ 0x0000, 0x5db8, 0x5f71, 0x0000, 0x6620, 0x668e, 0x6979, 0x69ae,
+ 0x6c38, 0x6cf3, 0x6e36, 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150,
+ 0x71df, 0x7370, 0x0000, 0x745b, 0x7469, 0x74d4, 0x76c8, 0x7a4e,
+ 0x7e93, 0x0000, 0x0000, 0x82f1, 0x8a60, 0x8fce, 0x0000, 0x9348,
+ 0x0000, 0x9719, 0x0000, 0x0000, 0x4e42, 0x502a, 0x0000, 0x5208,
+ 0x53e1, 0x66f3, 0x6c6d, 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae,
+ 0x85dd, 0x8602, 0x0000, 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0x0000,
+ 0x92b3, 0x0000, 0x9713, 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2,
+ 0x5348, 0x543e, 0x5433, 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b,
+ 0x5be4, 0x609f, 0x0000, 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7,
+ 0x6c5a, 0x6fb3, 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4,
+ 0x9c32, 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab,
+ 0x7465, 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1,
+ 0x74ee, 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26,
+ 0x74e6, 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49,
+ 0x5b8c, 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c,
+ 0x7897, 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e,
+ 0x9811, 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d,
+ 0x5a03, 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f,
+ 0x0000, 0x0000, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da,
+ 0x5be5, 0x0000, 0x0000, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe,
+ 0x0000, 0x66dc, 0x0000, 0x6a48, 0x0000, 0x71ff, 0x7464, 0x0000,
+ 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0x0000, 0x87ef,
+ 0x8981, 0x8b20, 0x9059, 0x0000, 0x9080, 0x9952, 0x617e, 0x6b32,
+ 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7,
+ 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67,
+ 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9,
+ 0x8e0a, 0x9394, 0x93de, 0x0000, 0x4e8e, 0x4f51, 0x5076, 0x512a,
+ 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182,
+ 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9,
+ 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5,
+ 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631,
+ 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0x6688, 0x6a52,
+ 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, 0x904b, 0x9695,
+ 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a, 0x96c4, 0x5143,
+ 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b, 0x5ac4, 0x5bc3,
+ 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72, 0x6e90, 0x7230,
+ 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060, 0x0000, 0x9662,
+ 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d, 0x5049, 0x50de,
+ 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170, 0x6690, 0x6e2d,
+ 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466, 0x853f, 0x875f,
+ 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f, 0x4e73, 0x4f91,
+ 0x5112, 0x516a, 0x0000, 0x552f, 0x55a9, 0x5b7a, 0x5ba5, 0x5e7c,
+ 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109, 0x63c4, 0x6538,
+ 0x6709, 0x0000, 0x67d4, 0x67da, 0x0000, 0x6961, 0x6962, 0x6cb9,
+ 0x6d27, 0x0000, 0x6e38, 0x0000, 0x6fe1, 0x7336, 0x7337, 0x0000,
+ 0x745c, 0x7531, 0x0000, 0x7652, 0x0000, 0x0000, 0x7dad, 0x81fe,
+ 0x8438, 0x88d5, 0x8a98, 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a,
+ 0x903e, 0x907a, 0x9149, 0x91c9, 0x936e, 0x0000, 0x0000, 0x5809,
+ 0x0000, 0x6bd3, 0x8089, 0x80b2, 0x0000, 0x0000, 0x5141, 0x596b,
+ 0x5c39, 0x0000, 0x0000, 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0x0000,
+ 0x9217, 0x958f, 0x0000, 0x0000, 0x0000, 0x0000, 0x807f, 0x620e,
+ 0x701c, 0x7d68, 0x878d, 0x0000, 0x57a0, 0x6069, 0x6147, 0x6bb7,
+ 0x8abe, 0x9280, 0x96b1, 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670,
+ 0x97f3, 0x98ee, 0x63d6, 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba,
+ 0x9df9, 0x4f9d, 0x501a, 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec,
+ 0x6905, 0x6bc5, 0x7591, 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb,
+ 0x8863, 0x8abc, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0x0000,
+ 0x0000, 0x5937, 0x59e8, 0x0000, 0x5df2, 0x5f1b, 0x5f5b, 0x6021,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x723e, 0x73e5, 0x0000, 0x0000,
+ 0x75cd, 0x0000, 0x79fb, 0x0000, 0x800c, 0x8033, 0x8084, 0x82e1,
+ 0x8351, 0x0000, 0x0000, 0x8cbd, 0x8cb3, 0x9087, 0x0000, 0x0000,
+ 0x98f4, 0x990c, 0x0000, 0x0000, 0x7037, 0x76ca, 0x7fca, 0x7fcc,
+ 0x7ffc, 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0x0000, 0x0000,
+ 0x56e0, 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0x0000, 0x0000,
+ 0x7d6a, 0x8335, 0x0000, 0x8693, 0x8a8d, 0x0000, 0x976d, 0x9777,
+ 0x0000, 0x0000, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2,
+ 0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041,
+ 0x0000, 0x0000, 0x7a14, 0x0000, 0x834f, 0x8cc3, 0x5165, 0x5344,
+ 0x0000, 0x0000, 0x0000, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4,
+ 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063,
+ 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1,
+ 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7,
+ 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8,
+ 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7,
+ 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a,
+ 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef,
+ 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756,
+ 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0x0000, 0x7350, 0x748b,
+ 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523,
+ 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, 0x969c, 0x518d,
+ 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d, 0x6893, 0x6e3d,
+ 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09, 0x9f4b, 0x9f4e,
+ 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e, 0x5132, 0x5480,
+ 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17, 0x6cae, 0x6e1a,
+ 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7, 0x83f9, 0x8457,
+ 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8, 0x96ce, 0x9f5f,
+ 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575, 0x6ef4, 0x72c4,
+ 0x0000, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e, 0x7fdf, 0x837b,
+ 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea, 0x8ff9, 0x9069,
+ 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178, 0x524d, 0x526a,
+ 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb, 0x609b, 0x6230,
+ 0x6813, 0x6bbf, 0x6c08, 0x6fb1, 0x714e, 0x7420, 0x7530, 0x7538,
+ 0x7551, 0x7672, 0x7b4c, 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e,
+ 0x8f3e, 0x8f49, 0x923f, 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a,
+ 0x986b, 0x991e, 0x5207, 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca,
+ 0x7bc0, 0x7d76, 0x5360, 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98,
+ 0x9711, 0x9b8e, 0x9ede, 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95,
+ 0x4ead, 0x505c, 0x5075, 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead,
+ 0x5ef7, 0x5f81, 0x60c5, 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676,
+ 0x6678, 0x67fe, 0x6968, 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8,
+ 0x6e1f, 0x6e5e, 0x701e, 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b,
+ 0x7887, 0x798e, 0x7a0b, 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02,
+ 0x8aea, 0x8c9e, 0x912d, 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320,
+ 0x9706, 0x9756, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c,
+ 0x5824, 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d,
+ 0x7b2c, 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664,
+ 0x969b, 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9,
+ 0x5632, 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa,
+ 0x66f9, 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167,
+ 0x71e5, 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20,
+ 0x7a95, 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4,
+ 0x8a54, 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b,
+ 0x96d5, 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a,
+ 0x5352, 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b,
+ 0x68d5, 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b,
+ 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7,
+ 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4,
+ 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d,
+ 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7,
+ 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db,
+ 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152,
+ 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8,
+ 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c,
+ 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301,
+ 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41,
+ 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7,
+ 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, 0x54ab, 0x5730,
+ 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f, 0x65e8, 0x667a,
+ 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c, 0x77e5, 0x7825,
+ 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3, 0x829d, 0x82b7,
+ 0x8718, 0x8a8c, 0x0000, 0x8d04, 0x8dbe, 0x9072, 0x76f4, 0x7a19,
+ 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875, 0x632f, 0x6422,
+ 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25, 0x6eb1, 0x73cd,
+ 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e, 0x778b, 0x79e6,
+ 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a, 0x8cd1, 0x8eeb,
+ 0x0000, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707, 0x4f84, 0x53f1,
+ 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be, 0x79e9, 0x7a92,
+ 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f, 0x6715, 0x0000,
+ 0x57f7, 0x6f57, 0x7ddd, 0x8f2f, 0x93f6, 0x96c6, 0x5fb5, 0x61f2,
+ 0x6f84, 0x4e14, 0x4f98, 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee,
+ 0x6b21, 0x6b64, 0x78cb, 0x7b9a, 0x0000, 0x8e49, 0x8eca, 0x906e,
+ 0x6349, 0x643e, 0x7740, 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0,
+ 0x6faf, 0x71e6, 0x74a8, 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2,
+ 0x7e98, 0x8b9a, 0x8d0a, 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf,
+ 0x64e6, 0x672d, 0x7d2e, 0x50ed, 0x0000, 0x5879, 0x6158, 0x6159,
+ 0x61fa, 0x65ac, 0x7ad9, 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275,
+ 0x5531, 0x5a3c, 0x5ee0, 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636,
+ 0x66a2, 0x69cd, 0x6ec4, 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139,
+ 0x8259, 0x83d6, 0x84bc, 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69,
+ 0x63a1, 0x7826, 0x7db5, 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a,
+ 0x67f5, 0x7b56, 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c,
+ 0x0000, 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5,
+ 0x6ecc, 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343,
+ 0x5598, 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f,
+ 0x821b, 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621,
+ 0x97c6, 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4,
+ 0x8f1f, 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b,
+ 0x77bb, 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16,
+ 0x6377, 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3,
+ 0x6674, 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0x0000,
+ 0x5243, 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e,
+ 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2,
+ 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e,
+ 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82,
+ 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7,
+ 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a,
+ 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283,
+ 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e,
+ 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf,
+ 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a,
+ 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51,
+ 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625,
+ 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96,
+ 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 0x8d05, 0x53d6,
+ 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0, 0x805a, 0x8106,
+ 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074, 0x4ec4, 0x53a0,
+ 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4, 0x5cd9, 0x5e5f,
+ 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4, 0x75f4, 0x7661,
+ 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4, 0x86a9, 0x8f1c,
+ 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed, 0x89aa, 0x4e03,
+ 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x0000, 0x6d78, 0x741b,
+ 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31, 0x5feb, 0x4ed6,
+ 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253, 0x62d6, 0x6736,
+ 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c, 0x5353, 0x5544,
+ 0x577c, 0x0000, 0x6258, 0x0000, 0x64e2, 0x666b, 0x67dd, 0x6fc1,
+ 0x6fef, 0x7422, 0x7438, 0x8a17, 0x9438, 0x5451, 0x5606, 0x5766,
+ 0x5f48, 0x619a, 0x6b4e, 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a,
+ 0x812b, 0x63a2, 0x7708, 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb,
+ 0x5b95, 0x5e11, 0x6e6f, 0x0000, 0x8569, 0x514c, 0x53f0, 0x592a,
+ 0x6020, 0x614b, 0x6b86, 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4,
+ 0x8dc6, 0x90b0, 0x98b1, 0x0000, 0x64c7, 0x6fa4, 0x6491, 0x6504,
+ 0x514e, 0x5410, 0x571f, 0x8a0e, 0x615f, 0x6876, 0x0000, 0x75db,
+ 0x7b52, 0x7d71, 0x901a, 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000,
+ 0x9839, 0x5078, 0x5957, 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d,
+ 0x7279, 0x95d6, 0x5761, 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa,
+ 0x6777, 0x6ce2, 0x6d3e, 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad,
+ 0x8ddb, 0x9817, 0x5224, 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9,
+ 0x8fa6, 0x9211, 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504,
+ 0x6096, 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987,
+ 0x8c9d, 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x0000, 0x504f,
+ 0x6241, 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19,
+ 0x8cb6, 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16,
+ 0x5e63, 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b,
+ 0x4f48, 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03,
+ 0x6016, 0x629b, 0x62b1, 0x6355, 0x66b4, 0x6ce1, 0x6d66, 0x75b1,
+ 0x7832, 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912,
+ 0x900b, 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x0000, 0x66dd, 0x7011,
+ 0x7206, 0x0000, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19,
+ 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43,
+ 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c,
+ 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c,
+ 0x5fc5, 0x0000, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d,
+ 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630,
+ 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15,
+ 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d,
+ 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591,
+ 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8,
+ 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677,
+ 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c,
+ 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d,
+ 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 0x884c, 0x964d,
+ 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a, 0x5b69, 0x5bb3,
+ 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3, 0x8a72, 0x8ae7,
+ 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016, 0x5e78, 0x674f,
+ 0x8347, 0x0000, 0x4eab, 0x5411, 0x56ae, 0x73e6, 0x9115, 0x97ff,
+ 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b, 0x8a31, 0x61b2,
+ 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57, 0x5955, 0x7200,
+ 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8, 0x665b, 0x6ceb,
+ 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d, 0x7d43, 0x7d62,
+ 0x7e23, 0x8237, 0x8852, 0x898b, 0x8ce2, 0x9249, 0x986f, 0x5b51,
+ 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354, 0x593e, 0x5cfd,
+ 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830,
+ 0x4ea8, 0x5144, 0x5211, 0x578b, 0x5f62, 0x6cc2, 0x6ece, 0x7005,
+ 0x7050, 0x70af, 0x7192, 0x73e9, 0x0000, 0x834a, 0x87a2, 0x8861,
+ 0x9008, 0x90a2, 0x93a3, 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167,
+ 0x66b3, 0x8559, 0x8e4a, 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c,
+ 0x58d5, 0x58fa, 0x597d, 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a,
+ 0x6667, 0x6beb, 0x6d69, 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0,
+ 0x6fe9, 0x705d, 0x72d0, 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c,
+ 0x7cca, 0x7e1e, 0x80e1, 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f,
+ 0x8774, 0x8b77, 0x8c6a, 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216,
+ 0x9177, 0x5a5a, 0x660f, 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd,
+ 0x60da, 0x7b0f, 0x54c4, 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8,
+ 0x7d05, 0x8679, 0x8a0c, 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a,
+ 0x706b, 0x7575, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41,
+ 0x8ca8, 0x9774, 0x0000, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b,
+ 0x4e38, 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61,
+ 0x6665, 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69,
+ 0x9c25, 0x6d3b, 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c,
+ 0x5fa8, 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5,
+ 0x6cc1, 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1,
+ 0x7c27, 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de,
+ 0x5efb, 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c,
+ 0x6dee, 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4,
+ 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee,
+ 0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6,
+ 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e,
+ 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd,
+ 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb,
+ 0x85b0, 0x8a13, 0x0000, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431,
+ 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147,
+ 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667,
+ 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8,
+ 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07,
+ 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5,
+ 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09,
+ 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9,
+ 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffffffff,
+ 0xffffffff, 0xffffffff, 0x0000, 0x0000, 0x79d4, 0x0004, 0x2288, 0x804f240
+};
+
+
+const unichar_t unicode_from_johab[] = {
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136,
+ 0x3137, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
+ 0x3140, 0x3141, 0x0000, 0x3142, 0x3144, 0x3145, 0x3146, 0x3147,
+ 0x3148, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x0000, 0x0000,
+ 0x0000, 0x314f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3150, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3151, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3152, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3153, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3154, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3156, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3157, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3158, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3159, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x315f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3160, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3161, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3162, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xac00, 0xac01, 0xac02, 0xac03, 0xac04, 0xac05, 0xac06,
+ 0xac07, 0xac08, 0xac09, 0xac0a, 0xac0b, 0xac0c, 0xac0d, 0xac0e,
+ 0xac0f, 0xac10, 0x0000, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15,
+ 0xac16, 0xac17, 0xac18, 0xac19, 0xac1a, 0xac1b, 0x0000, 0x0000,
+ 0x0000, 0xac1c, 0xac1d, 0xac1e, 0xac1f, 0xac20, 0xac21, 0xac22,
+ 0xac23, 0xac24, 0xac25, 0xac26, 0xac27, 0xac28, 0xac29, 0xac2a,
+ 0xac2b, 0xac2c, 0x0000, 0xac2d, 0xac2e, 0xac2f, 0xac30, 0xac31,
+ 0xac32, 0xac33, 0xac34, 0xac35, 0xac36, 0xac37, 0x0000, 0x0000,
+ 0x0000, 0xac38, 0xac39, 0xac3a, 0xac3b, 0xac3c, 0xac3d, 0xac3e,
+ 0xac3f, 0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46,
+ 0xac47, 0xac48, 0x0000, 0xac49, 0xac4a, 0xac4b, 0xac4c, 0xac4d,
+ 0xac4e, 0xac4f, 0xac50, 0xac51, 0xac52, 0xac53, 0x0000, 0x0000,
+ 0x0000, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, 0xac59, 0xac5a,
+ 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f, 0xac60, 0xac61, 0xac62,
+ 0xac63, 0xac64, 0x0000, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69,
+ 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f, 0x0000, 0x0000,
+ 0x0000, 0xac70, 0xac71, 0xac72, 0xac73, 0xac74, 0xac75, 0xac76,
+ 0xac77, 0xac78, 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e,
+ 0xac7f, 0xac80, 0x0000, 0xac81, 0xac82, 0xac83, 0xac84, 0xac85,
+ 0xac86, 0xac87, 0xac88, 0xac89, 0xac8a, 0xac8b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac92,
+ 0xac93, 0xac94, 0xac95, 0xac96, 0xac97, 0xac98, 0xac99, 0xac9a,
+ 0xac9b, 0xac9c, 0x0000, 0xac9d, 0xac9e, 0xac9f, 0xaca0, 0xaca1,
+ 0xaca2, 0xaca3, 0xaca4, 0xaca5, 0xaca6, 0xaca7, 0x0000, 0x0000,
+ 0x0000, 0xaca8, 0xaca9, 0xacaa, 0xacab, 0xacac, 0xacad, 0xacae,
+ 0xacaf, 0xacb0, 0xacb1, 0xacb2, 0xacb3, 0xacb4, 0xacb5, 0xacb6,
+ 0xacb7, 0xacb8, 0x0000, 0xacb9, 0xacba, 0xacbb, 0xacbc, 0xacbd,
+ 0xacbe, 0xacbf, 0xacc0, 0xacc1, 0xacc2, 0xacc3, 0x0000, 0x0000,
+ 0x0000, 0xacc4, 0xacc5, 0xacc6, 0xacc7, 0xacc8, 0xacc9, 0xacca,
+ 0xaccb, 0xaccc, 0xaccd, 0xacce, 0xaccf, 0xacd0, 0xacd1, 0xacd2,
+ 0xacd3, 0xacd4, 0x0000, 0xacd5, 0xacd6, 0xacd7, 0xacd8, 0xacd9,
+ 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xacde, 0xacdf, 0x0000, 0x0000,
+ 0x0000, 0xace0, 0xace1, 0xace2, 0xace3, 0xace4, 0xace5, 0xace6,
+ 0xace7, 0xace8, 0xace9, 0xacea, 0xaceb, 0xacec, 0xaced, 0xacee,
+ 0xacef, 0xacf0, 0x0000, 0xacf1, 0xacf2, 0xacf3, 0xacf4, 0xacf5,
+ 0xacf6, 0xacf7, 0xacf8, 0xacf9, 0xacfa, 0xacfb, 0x0000, 0x0000,
+ 0x0000, 0xacfc, 0xacfd, 0xacfe, 0xacff, 0xad00, 0xad01, 0xad02,
+ 0xad03, 0xad04, 0xad05, 0xad06, 0xad07, 0xad08, 0xad09, 0xad0a,
+ 0xad0b, 0xad0c, 0x0000, 0xad0d, 0xad0e, 0xad0f, 0xad10, 0xad11,
+ 0xad12, 0xad13, 0xad14, 0xad15, 0xad16, 0xad17, 0x0000, 0x0000,
+ 0x0000, 0xad18, 0xad19, 0xad1a, 0xad1b, 0xad1c, 0xad1d, 0xad1e,
+ 0xad1f, 0xad20, 0xad21, 0xad22, 0xad23, 0xad24, 0xad25, 0xad26,
+ 0xad27, 0xad28, 0x0000, 0xad29, 0xad2a, 0xad2b, 0xad2c, 0xad2d,
+ 0xad2e, 0xad2f, 0xad30, 0xad31, 0xad32, 0xad33, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xad34, 0xad35, 0xad36, 0xad37, 0xad38, 0xad39, 0xad3a,
+ 0xad3b, 0xad3c, 0xad3d, 0xad3e, 0xad3f, 0xad40, 0xad41, 0xad42,
+ 0xad43, 0xad44, 0x0000, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49,
+ 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f, 0x0000, 0x0000,
+ 0x0000, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, 0xad55, 0xad56,
+ 0xad57, 0xad58, 0xad59, 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e,
+ 0xad5f, 0xad60, 0x0000, 0xad61, 0xad62, 0xad63, 0xad64, 0xad65,
+ 0xad66, 0xad67, 0xad68, 0xad69, 0xad6a, 0xad6b, 0x0000, 0x0000,
+ 0x0000, 0xad6c, 0xad6d, 0xad6e, 0xad6f, 0xad70, 0xad71, 0xad72,
+ 0xad73, 0xad74, 0xad75, 0xad76, 0xad77, 0xad78, 0xad79, 0xad7a,
+ 0xad7b, 0xad7c, 0x0000, 0xad7d, 0xad7e, 0xad7f, 0xad80, 0xad81,
+ 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, 0x0000, 0x0000,
+ 0x0000, 0xad88, 0xad89, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e,
+ 0xad8f, 0xad90, 0xad91, 0xad92, 0xad93, 0xad94, 0xad95, 0xad96,
+ 0xad97, 0xad98, 0x0000, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d,
+ 0xad9e, 0xad9f, 0xada0, 0xada1, 0xada2, 0xada3, 0x0000, 0x0000,
+ 0x0000, 0xada4, 0xada5, 0xada6, 0xada7, 0xada8, 0xada9, 0xadaa,
+ 0xadab, 0xadac, 0xadad, 0xadae, 0xadaf, 0xadb0, 0xadb1, 0xadb2,
+ 0xadb3, 0xadb4, 0x0000, 0xadb5, 0xadb6, 0xadb7, 0xadb8, 0xadb9,
+ 0xadba, 0xadbb, 0xadbc, 0xadbd, 0xadbe, 0xadbf, 0x0000, 0x0000,
+ 0x0000, 0xadc0, 0xadc1, 0xadc2, 0xadc3, 0xadc4, 0xadc5, 0xadc6,
+ 0xadc7, 0xadc8, 0xadc9, 0xadca, 0xadcb, 0xadcc, 0xadcd, 0xadce,
+ 0xadcf, 0xadd0, 0x0000, 0xadd1, 0xadd2, 0xadd3, 0xadd4, 0xadd5,
+ 0xadd6, 0xadd7, 0xadd8, 0xadd9, 0xadda, 0xaddb, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xaddc, 0xaddd, 0xadde, 0xaddf, 0xade0, 0xade1, 0xade2,
+ 0xade3, 0xade4, 0xade5, 0xade6, 0xade7, 0xade8, 0xade9, 0xadea,
+ 0xadeb, 0xadec, 0x0000, 0xaded, 0xadee, 0xadef, 0xadf0, 0xadf1,
+ 0xadf2, 0xadf3, 0xadf4, 0xadf5, 0xadf6, 0xadf7, 0x0000, 0x0000,
+ 0x0000, 0xadf8, 0xadf9, 0xadfa, 0xadfb, 0xadfc, 0xadfd, 0xadfe,
+ 0xadff, 0xae00, 0xae01, 0xae02, 0xae03, 0xae04, 0xae05, 0xae06,
+ 0xae07, 0xae08, 0x0000, 0xae09, 0xae0a, 0xae0b, 0xae0c, 0xae0d,
+ 0xae0e, 0xae0f, 0xae10, 0xae11, 0xae12, 0xae13, 0x0000, 0x0000,
+ 0x0000, 0xae14, 0xae15, 0xae16, 0xae17, 0xae18, 0xae19, 0xae1a,
+ 0xae1b, 0xae1c, 0xae1d, 0xae1e, 0xae1f, 0xae20, 0xae21, 0xae22,
+ 0xae23, 0xae24, 0x0000, 0xae25, 0xae26, 0xae27, 0xae28, 0xae29,
+ 0xae2a, 0xae2b, 0xae2c, 0xae2d, 0xae2e, 0xae2f, 0x0000, 0x0000,
+ 0x0000, 0xae30, 0xae31, 0xae32, 0xae33, 0xae34, 0xae35, 0xae36,
+ 0xae37, 0xae38, 0xae39, 0xae3a, 0xae3b, 0xae3c, 0xae3d, 0xae3e,
+ 0xae3f, 0xae40, 0x0000, 0xae41, 0xae42, 0xae43, 0xae44, 0xae45,
+ 0xae46, 0xae47, 0xae48, 0xae49, 0xae4a, 0xae4b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xae4c, 0xae4d, 0xae4e, 0xae4f, 0xae50, 0xae51, 0xae52,
+ 0xae53, 0xae54, 0xae55, 0xae56, 0xae57, 0xae58, 0xae59, 0xae5a,
+ 0xae5b, 0xae5c, 0x0000, 0xae5d, 0xae5e, 0xae5f, 0xae60, 0xae61,
+ 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67, 0x0000, 0x0000,
+ 0x0000, 0xae68, 0xae69, 0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e,
+ 0xae6f, 0xae70, 0xae71, 0xae72, 0xae73, 0xae74, 0xae75, 0xae76,
+ 0xae77, 0xae78, 0x0000, 0xae79, 0xae7a, 0xae7b, 0xae7c, 0xae7d,
+ 0xae7e, 0xae7f, 0xae80, 0xae81, 0xae82, 0xae83, 0x0000, 0x0000,
+ 0x0000, 0xae84, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, 0xae8a,
+ 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae92,
+ 0xae93, 0xae94, 0x0000, 0xae95, 0xae96, 0xae97, 0xae98, 0xae99,
+ 0xae9a, 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f, 0x0000, 0x0000,
+ 0x0000, 0xaea0, 0xaea1, 0xaea2, 0xaea3, 0xaea4, 0xaea5, 0xaea6,
+ 0xaea7, 0xaea8, 0xaea9, 0xaeaa, 0xaeab, 0xaeac, 0xaead, 0xaeae,
+ 0xaeaf, 0xaeb0, 0x0000, 0xaeb1, 0xaeb2, 0xaeb3, 0xaeb4, 0xaeb5,
+ 0xaeb6, 0xaeb7, 0xaeb8, 0xaeb9, 0xaeba, 0xaebb, 0x0000, 0x0000,
+ 0x0000, 0xaebc, 0xaebd, 0xaebe, 0xaebf, 0xaec0, 0xaec1, 0xaec2,
+ 0xaec3, 0xaec4, 0xaec5, 0xaec6, 0xaec7, 0xaec8, 0xaec9, 0xaeca,
+ 0xaecb, 0xaecc, 0x0000, 0xaecd, 0xaece, 0xaecf, 0xaed0, 0xaed1,
+ 0xaed2, 0xaed3, 0xaed4, 0xaed5, 0xaed6, 0xaed7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xaed8, 0xaed9, 0xaeda, 0xaedb, 0xaedc, 0xaedd, 0xaede,
+ 0xaedf, 0xaee0, 0xaee1, 0xaee2, 0xaee3, 0xaee4, 0xaee5, 0xaee6,
+ 0xaee7, 0xaee8, 0x0000, 0xaee9, 0xaeea, 0xaeeb, 0xaeec, 0xaeed,
+ 0xaeee, 0xaeef, 0xaef0, 0xaef1, 0xaef2, 0xaef3, 0x0000, 0x0000,
+ 0x0000, 0xaef4, 0xaef5, 0xaef6, 0xaef7, 0xaef8, 0xaef9, 0xaefa,
+ 0xaefb, 0xaefc, 0xaefd, 0xaefe, 0xaeff, 0xaf00, 0xaf01, 0xaf02,
+ 0xaf03, 0xaf04, 0x0000, 0xaf05, 0xaf06, 0xaf07, 0xaf08, 0xaf09,
+ 0xaf0a, 0xaf0b, 0xaf0c, 0xaf0d, 0xaf0e, 0xaf0f, 0x0000, 0x0000,
+ 0x0000, 0xaf10, 0xaf11, 0xaf12, 0xaf13, 0xaf14, 0xaf15, 0xaf16,
+ 0xaf17, 0xaf18, 0xaf19, 0xaf1a, 0xaf1b, 0xaf1c, 0xaf1d, 0xaf1e,
+ 0xaf1f, 0xaf20, 0x0000, 0xaf21, 0xaf22, 0xaf23, 0xaf24, 0xaf25,
+ 0xaf26, 0xaf27, 0xaf28, 0xaf29, 0xaf2a, 0xaf2b, 0x0000, 0x0000,
+ 0x0000, 0xaf2c, 0xaf2d, 0xaf2e, 0xaf2f, 0xaf30, 0xaf31, 0xaf32,
+ 0xaf33, 0xaf34, 0xaf35, 0xaf36, 0xaf37, 0xaf38, 0xaf39, 0xaf3a,
+ 0xaf3b, 0xaf3c, 0x0000, 0xaf3d, 0xaf3e, 0xaf3f, 0xaf40, 0xaf41,
+ 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, 0x0000, 0x0000,
+ 0x0000, 0xaf48, 0xaf49, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e,
+ 0xaf4f, 0xaf50, 0xaf51, 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56,
+ 0xaf57, 0xaf58, 0x0000, 0xaf59, 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d,
+ 0xaf5e, 0xaf5f, 0xaf60, 0xaf61, 0xaf62, 0xaf63, 0x0000, 0x0000,
+ 0x0000, 0xaf64, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, 0xaf6a,
+ 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, 0xaf72,
+ 0xaf73, 0xaf74, 0x0000, 0xaf75, 0xaf76, 0xaf77, 0xaf78, 0xaf79,
+ 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf7f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xaf80, 0xaf81, 0xaf82, 0xaf83, 0xaf84, 0xaf85, 0xaf86,
+ 0xaf87, 0xaf88, 0xaf89, 0xaf8a, 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e,
+ 0xaf8f, 0xaf90, 0x0000, 0xaf91, 0xaf92, 0xaf93, 0xaf94, 0xaf95,
+ 0xaf96, 0xaf97, 0xaf98, 0xaf99, 0xaf9a, 0xaf9b, 0x0000, 0x0000,
+ 0x0000, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f, 0xafa0, 0xafa1, 0xafa2,
+ 0xafa3, 0xafa4, 0xafa5, 0xafa6, 0xafa7, 0xafa8, 0xafa9, 0xafaa,
+ 0xafab, 0xafac, 0x0000, 0xafad, 0xafae, 0xafaf, 0xafb0, 0xafb1,
+ 0xafb2, 0xafb3, 0xafb4, 0xafb5, 0xafb6, 0xafb7, 0x0000, 0x0000,
+ 0x0000, 0xafb8, 0xafb9, 0xafba, 0xafbb, 0xafbc, 0xafbd, 0xafbe,
+ 0xafbf, 0xafc0, 0xafc1, 0xafc2, 0xafc3, 0xafc4, 0xafc5, 0xafc6,
+ 0xafc7, 0xafc8, 0x0000, 0xafc9, 0xafca, 0xafcb, 0xafcc, 0xafcd,
+ 0xafce, 0xafcf, 0xafd0, 0xafd1, 0xafd2, 0xafd3, 0x0000, 0x0000,
+ 0x0000, 0xafd4, 0xafd5, 0xafd6, 0xafd7, 0xafd8, 0xafd9, 0xafda,
+ 0xafdb, 0xafdc, 0xafdd, 0xafde, 0xafdf, 0xafe0, 0xafe1, 0xafe2,
+ 0xafe3, 0xafe4, 0x0000, 0xafe5, 0xafe6, 0xafe7, 0xafe8, 0xafe9,
+ 0xafea, 0xafeb, 0xafec, 0xafed, 0xafee, 0xafef, 0x0000, 0x0000,
+ 0x0000, 0xaff0, 0xaff1, 0xaff2, 0xaff3, 0xaff4, 0xaff5, 0xaff6,
+ 0xaff7, 0xaff8, 0xaff9, 0xaffa, 0xaffb, 0xaffc, 0xaffd, 0xaffe,
+ 0xafff, 0xb000, 0x0000, 0xb001, 0xb002, 0xb003, 0xb004, 0xb005,
+ 0xb006, 0xb007, 0xb008, 0xb009, 0xb00a, 0xb00b, 0x0000, 0x0000,
+ 0x0000, 0xb00c, 0xb00d, 0xb00e, 0xb00f, 0xb010, 0xb011, 0xb012,
+ 0xb013, 0xb014, 0xb015, 0xb016, 0xb017, 0xb018, 0xb019, 0xb01a,
+ 0xb01b, 0xb01c, 0x0000, 0xb01d, 0xb01e, 0xb01f, 0xb020, 0xb021,
+ 0xb022, 0xb023, 0xb024, 0xb025, 0xb026, 0xb027, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb028, 0xb029, 0xb02a, 0xb02b, 0xb02c, 0xb02d, 0xb02e,
+ 0xb02f, 0xb030, 0xb031, 0xb032, 0xb033, 0xb034, 0xb035, 0xb036,
+ 0xb037, 0xb038, 0x0000, 0xb039, 0xb03a, 0xb03b, 0xb03c, 0xb03d,
+ 0xb03e, 0xb03f, 0xb040, 0xb041, 0xb042, 0xb043, 0x0000, 0x0000,
+ 0x0000, 0xb044, 0xb045, 0xb046, 0xb047, 0xb048, 0xb049, 0xb04a,
+ 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f, 0xb050, 0xb051, 0xb052,
+ 0xb053, 0xb054, 0x0000, 0xb055, 0xb056, 0xb057, 0xb058, 0xb059,
+ 0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f, 0x0000, 0x0000,
+ 0x0000, 0xb060, 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, 0xb066,
+ 0xb067, 0xb068, 0xb069, 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e,
+ 0xb06f, 0xb070, 0x0000, 0xb071, 0xb072, 0xb073, 0xb074, 0xb075,
+ 0xb076, 0xb077, 0xb078, 0xb079, 0xb07a, 0xb07b, 0x0000, 0x0000,
+ 0x0000, 0xb07c, 0xb07d, 0xb07e, 0xb07f, 0xb080, 0xb081, 0xb082,
+ 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, 0xb088, 0xb089, 0xb08a,
+ 0xb08b, 0xb08c, 0x0000, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xb091,
+ 0xb092, 0xb093, 0xb094, 0xb095, 0xb096, 0xb097, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xb09e,
+ 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a3, 0xb0a4, 0xb0a5, 0xb0a6,
+ 0xb0a7, 0xb0a8, 0x0000, 0xb0a9, 0xb0aa, 0xb0ab, 0xb0ac, 0xb0ad,
+ 0xb0ae, 0xb0af, 0xb0b0, 0xb0b1, 0xb0b2, 0xb0b3, 0x0000, 0x0000,
+ 0x0000, 0xb0b4, 0xb0b5, 0xb0b6, 0xb0b7, 0xb0b8, 0xb0b9, 0xb0ba,
+ 0xb0bb, 0xb0bc, 0xb0bd, 0xb0be, 0xb0bf, 0xb0c0, 0xb0c1, 0xb0c2,
+ 0xb0c3, 0xb0c4, 0x0000, 0xb0c5, 0xb0c6, 0xb0c7, 0xb0c8, 0xb0c9,
+ 0xb0ca, 0xb0cb, 0xb0cc, 0xb0cd, 0xb0ce, 0xb0cf, 0x0000, 0x0000,
+ 0x0000, 0xb0d0, 0xb0d1, 0xb0d2, 0xb0d3, 0xb0d4, 0xb0d5, 0xb0d6,
+ 0xb0d7, 0xb0d8, 0xb0d9, 0xb0da, 0xb0db, 0xb0dc, 0xb0dd, 0xb0de,
+ 0xb0df, 0xb0e0, 0x0000, 0xb0e1, 0xb0e2, 0xb0e3, 0xb0e4, 0xb0e5,
+ 0xb0e6, 0xb0e7, 0xb0e8, 0xb0e9, 0xb0ea, 0xb0eb, 0x0000, 0x0000,
+ 0x0000, 0xb0ec, 0xb0ed, 0xb0ee, 0xb0ef, 0xb0f0, 0xb0f1, 0xb0f2,
+ 0xb0f3, 0xb0f4, 0xb0f5, 0xb0f6, 0xb0f7, 0xb0f8, 0xb0f9, 0xb0fa,
+ 0xb0fb, 0xb0fc, 0x0000, 0xb0fd, 0xb0fe, 0xb0ff, 0xb100, 0xb101,
+ 0xb102, 0xb103, 0xb104, 0xb105, 0xb106, 0xb107, 0x0000, 0x0000,
+ 0x0000, 0xb108, 0xb109, 0xb10a, 0xb10b, 0xb10c, 0xb10d, 0xb10e,
+ 0xb10f, 0xb110, 0xb111, 0xb112, 0xb113, 0xb114, 0xb115, 0xb116,
+ 0xb117, 0xb118, 0x0000, 0xb119, 0xb11a, 0xb11b, 0xb11c, 0xb11d,
+ 0xb11e, 0xb11f, 0xb120, 0xb121, 0xb122, 0xb123, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb124, 0xb125, 0xb126, 0xb127, 0xb128, 0xb129, 0xb12a,
+ 0xb12b, 0xb12c, 0xb12d, 0xb12e, 0xb12f, 0xb130, 0xb131, 0xb132,
+ 0xb133, 0xb134, 0x0000, 0xb135, 0xb136, 0xb137, 0xb138, 0xb139,
+ 0xb13a, 0xb13b, 0xb13c, 0xb13d, 0xb13e, 0xb13f, 0x0000, 0x0000,
+ 0x0000, 0xb140, 0xb141, 0xb142, 0xb143, 0xb144, 0xb145, 0xb146,
+ 0xb147, 0xb148, 0xb149, 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e,
+ 0xb14f, 0xb150, 0x0000, 0xb151, 0xb152, 0xb153, 0xb154, 0xb155,
+ 0xb156, 0xb157, 0xb158, 0xb159, 0xb15a, 0xb15b, 0x0000, 0x0000,
+ 0x0000, 0xb15c, 0xb15d, 0xb15e, 0xb15f, 0xb160, 0xb161, 0xb162,
+ 0xb163, 0xb164, 0xb165, 0xb166, 0xb167, 0xb168, 0xb169, 0xb16a,
+ 0xb16b, 0xb16c, 0x0000, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171,
+ 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177, 0x0000, 0x0000,
+ 0x0000, 0xb178, 0xb179, 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e,
+ 0xb17f, 0xb180, 0xb181, 0xb182, 0xb183, 0xb184, 0xb185, 0xb186,
+ 0xb187, 0xb188, 0x0000, 0xb189, 0xb18a, 0xb18b, 0xb18c, 0xb18d,
+ 0xb18e, 0xb18f, 0xb190, 0xb191, 0xb192, 0xb193, 0x0000, 0x0000,
+ 0x0000, 0xb194, 0xb195, 0xb196, 0xb197, 0xb198, 0xb199, 0xb19a,
+ 0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f, 0xb1a0, 0xb1a1, 0xb1a2,
+ 0xb1a3, 0xb1a4, 0x0000, 0xb1a5, 0xb1a6, 0xb1a7, 0xb1a8, 0xb1a9,
+ 0xb1aa, 0xb1ab, 0xb1ac, 0xb1ad, 0xb1ae, 0xb1af, 0x0000, 0x0000,
+ 0x0000, 0xb1b0, 0xb1b1, 0xb1b2, 0xb1b3, 0xb1b4, 0xb1b5, 0xb1b6,
+ 0xb1b7, 0xb1b8, 0xb1b9, 0xb1ba, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1be,
+ 0xb1bf, 0xb1c0, 0x0000, 0xb1c1, 0xb1c2, 0xb1c3, 0xb1c4, 0xb1c5,
+ 0xb1c6, 0xb1c7, 0xb1c8, 0xb1c9, 0xb1ca, 0xb1cb, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb1cc, 0xb1cd, 0xb1ce, 0xb1cf, 0xb1d0, 0xb1d1, 0xb1d2,
+ 0xb1d3, 0xb1d4, 0xb1d5, 0xb1d6, 0xb1d7, 0xb1d8, 0xb1d9, 0xb1da,
+ 0xb1db, 0xb1dc, 0x0000, 0xb1dd, 0xb1de, 0xb1df, 0xb1e0, 0xb1e1,
+ 0xb1e2, 0xb1e3, 0xb1e4, 0xb1e5, 0xb1e6, 0xb1e7, 0x0000, 0x0000,
+ 0x0000, 0xb1e8, 0xb1e9, 0xb1ea, 0xb1eb, 0xb1ec, 0xb1ed, 0xb1ee,
+ 0xb1ef, 0xb1f0, 0xb1f1, 0xb1f2, 0xb1f3, 0xb1f4, 0xb1f5, 0xb1f6,
+ 0xb1f7, 0xb1f8, 0x0000, 0xb1f9, 0xb1fa, 0xb1fb, 0xb1fc, 0xb1fd,
+ 0xb1fe, 0xb1ff, 0xb200, 0xb201, 0xb202, 0xb203, 0x0000, 0x0000,
+ 0x0000, 0xb204, 0xb205, 0xb206, 0xb207, 0xb208, 0xb209, 0xb20a,
+ 0xb20b, 0xb20c, 0xb20d, 0xb20e, 0xb20f, 0xb210, 0xb211, 0xb212,
+ 0xb213, 0xb214, 0x0000, 0xb215, 0xb216, 0xb217, 0xb218, 0xb219,
+ 0xb21a, 0xb21b, 0xb21c, 0xb21d, 0xb21e, 0xb21f, 0x0000, 0x0000,
+ 0x0000, 0xb220, 0xb221, 0xb222, 0xb223, 0xb224, 0xb225, 0xb226,
+ 0xb227, 0xb228, 0xb229, 0xb22a, 0xb22b, 0xb22c, 0xb22d, 0xb22e,
+ 0xb22f, 0xb230, 0x0000, 0xb231, 0xb232, 0xb233, 0xb234, 0xb235,
+ 0xb236, 0xb237, 0xb238, 0xb239, 0xb23a, 0xb23b, 0x0000, 0x0000,
+ 0x0000, 0xb23c, 0xb23d, 0xb23e, 0xb23f, 0xb240, 0xb241, 0xb242,
+ 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, 0xb248, 0xb249, 0xb24a,
+ 0xb24b, 0xb24c, 0x0000, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251,
+ 0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257, 0x0000, 0x0000,
+ 0x0000, 0xb258, 0xb259, 0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e,
+ 0xb25f, 0xb260, 0xb261, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266,
+ 0xb267, 0xb268, 0x0000, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d,
+ 0xb26e, 0xb26f, 0xb270, 0xb271, 0xb272, 0xb273, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb274, 0xb275, 0xb276, 0xb277, 0xb278, 0xb279, 0xb27a,
+ 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb27f, 0xb280, 0xb281, 0xb282,
+ 0xb283, 0xb284, 0x0000, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289,
+ 0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f, 0x0000, 0x0000,
+ 0x0000, 0xb290, 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296,
+ 0xb297, 0xb298, 0xb299, 0xb29a, 0xb29b, 0xb29c, 0xb29d, 0xb29e,
+ 0xb29f, 0xb2a0, 0x0000, 0xb2a1, 0xb2a2, 0xb2a3, 0xb2a4, 0xb2a5,
+ 0xb2a6, 0xb2a7, 0xb2a8, 0xb2a9, 0xb2aa, 0xb2ab, 0x0000, 0x0000,
+ 0x0000, 0xb2ac, 0xb2ad, 0xb2ae, 0xb2af, 0xb2b0, 0xb2b1, 0xb2b2,
+ 0xb2b3, 0xb2b4, 0xb2b5, 0xb2b6, 0xb2b7, 0xb2b8, 0xb2b9, 0xb2ba,
+ 0xb2bb, 0xb2bc, 0x0000, 0xb2bd, 0xb2be, 0xb2bf, 0xb2c0, 0xb2c1,
+ 0xb2c2, 0xb2c3, 0xb2c4, 0xb2c5, 0xb2c6, 0xb2c7, 0x0000, 0x0000,
+ 0x0000, 0xb2c8, 0xb2c9, 0xb2ca, 0xb2cb, 0xb2cc, 0xb2cd, 0xb2ce,
+ 0xb2cf, 0xb2d0, 0xb2d1, 0xb2d2, 0xb2d3, 0xb2d4, 0xb2d5, 0xb2d6,
+ 0xb2d7, 0xb2d8, 0x0000, 0xb2d9, 0xb2da, 0xb2db, 0xb2dc, 0xb2dd,
+ 0xb2de, 0xb2df, 0xb2e0, 0xb2e1, 0xb2e2, 0xb2e3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e7, 0xb2e8, 0xb2e9, 0xb2ea,
+ 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f0, 0xb2f1, 0xb2f2,
+ 0xb2f3, 0xb2f4, 0x0000, 0xb2f5, 0xb2f6, 0xb2f7, 0xb2f8, 0xb2f9,
+ 0xb2fa, 0xb2fb, 0xb2fc, 0xb2fd, 0xb2fe, 0xb2ff, 0x0000, 0x0000,
+ 0x0000, 0xb300, 0xb301, 0xb302, 0xb303, 0xb304, 0xb305, 0xb306,
+ 0xb307, 0xb308, 0xb309, 0xb30a, 0xb30b, 0xb30c, 0xb30d, 0xb30e,
+ 0xb30f, 0xb310, 0x0000, 0xb311, 0xb312, 0xb313, 0xb314, 0xb315,
+ 0xb316, 0xb317, 0xb318, 0xb319, 0xb31a, 0xb31b, 0x0000, 0x0000,
+ 0x0000, 0xb31c, 0xb31d, 0xb31e, 0xb31f, 0xb320, 0xb321, 0xb322,
+ 0xb323, 0xb324, 0xb325, 0xb326, 0xb327, 0xb328, 0xb329, 0xb32a,
+ 0xb32b, 0xb32c, 0x0000, 0xb32d, 0xb32e, 0xb32f, 0xb330, 0xb331,
+ 0xb332, 0xb333, 0xb334, 0xb335, 0xb336, 0xb337, 0x0000, 0x0000,
+ 0x0000, 0xb338, 0xb339, 0xb33a, 0xb33b, 0xb33c, 0xb33d, 0xb33e,
+ 0xb33f, 0xb340, 0xb341, 0xb342, 0xb343, 0xb344, 0xb345, 0xb346,
+ 0xb347, 0xb348, 0x0000, 0xb349, 0xb34a, 0xb34b, 0xb34c, 0xb34d,
+ 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, 0xb353, 0x0000, 0x0000,
+ 0x0000, 0xb354, 0xb355, 0xb356, 0xb357, 0xb358, 0xb359, 0xb35a,
+ 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f, 0xb360, 0xb361, 0xb362,
+ 0xb363, 0xb364, 0x0000, 0xb365, 0xb366, 0xb367, 0xb368, 0xb369,
+ 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb370, 0xb371, 0xb372, 0xb373, 0xb374, 0xb375, 0xb376,
+ 0xb377, 0xb378, 0xb379, 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e,
+ 0xb37f, 0xb380, 0x0000, 0xb381, 0xb382, 0xb383, 0xb384, 0xb385,
+ 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, 0x0000, 0x0000,
+ 0x0000, 0xb38c, 0xb38d, 0xb38e, 0xb38f, 0xb390, 0xb391, 0xb392,
+ 0xb393, 0xb394, 0xb395, 0xb396, 0xb397, 0xb398, 0xb399, 0xb39a,
+ 0xb39b, 0xb39c, 0x0000, 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb3a1,
+ 0xb3a2, 0xb3a3, 0xb3a4, 0xb3a5, 0xb3a6, 0xb3a7, 0x0000, 0x0000,
+ 0x0000, 0xb3a8, 0xb3a9, 0xb3aa, 0xb3ab, 0xb3ac, 0xb3ad, 0xb3ae,
+ 0xb3af, 0xb3b0, 0xb3b1, 0xb3b2, 0xb3b3, 0xb3b4, 0xb3b5, 0xb3b6,
+ 0xb3b7, 0xb3b8, 0x0000, 0xb3b9, 0xb3ba, 0xb3bb, 0xb3bc, 0xb3bd,
+ 0xb3be, 0xb3bf, 0xb3c0, 0xb3c1, 0xb3c2, 0xb3c3, 0x0000, 0x0000,
+ 0x0000, 0xb3c4, 0xb3c5, 0xb3c6, 0xb3c7, 0xb3c8, 0xb3c9, 0xb3ca,
+ 0xb3cb, 0xb3cc, 0xb3cd, 0xb3ce, 0xb3cf, 0xb3d0, 0xb3d1, 0xb3d2,
+ 0xb3d3, 0xb3d4, 0x0000, 0xb3d5, 0xb3d6, 0xb3d7, 0xb3d8, 0xb3d9,
+ 0xb3da, 0xb3db, 0xb3dc, 0xb3dd, 0xb3de, 0xb3df, 0x0000, 0x0000,
+ 0x0000, 0xb3e0, 0xb3e1, 0xb3e2, 0xb3e3, 0xb3e4, 0xb3e5, 0xb3e6,
+ 0xb3e7, 0xb3e8, 0xb3e9, 0xb3ea, 0xb3eb, 0xb3ec, 0xb3ed, 0xb3ee,
+ 0xb3ef, 0xb3f0, 0x0000, 0xb3f1, 0xb3f2, 0xb3f3, 0xb3f4, 0xb3f5,
+ 0xb3f6, 0xb3f7, 0xb3f8, 0xb3f9, 0xb3fa, 0xb3fb, 0x0000, 0x0000,
+ 0x0000, 0xb3fc, 0xb3fd, 0xb3fe, 0xb3ff, 0xb400, 0xb401, 0xb402,
+ 0xb403, 0xb404, 0xb405, 0xb406, 0xb407, 0xb408, 0xb409, 0xb40a,
+ 0xb40b, 0xb40c, 0x0000, 0xb40d, 0xb40e, 0xb40f, 0xb410, 0xb411,
+ 0xb412, 0xb413, 0xb414, 0xb415, 0xb416, 0xb417, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb418, 0xb419, 0xb41a, 0xb41b, 0xb41c, 0xb41d, 0xb41e,
+ 0xb41f, 0xb420, 0xb421, 0xb422, 0xb423, 0xb424, 0xb425, 0xb426,
+ 0xb427, 0xb428, 0x0000, 0xb429, 0xb42a, 0xb42b, 0xb42c, 0xb42d,
+ 0xb42e, 0xb42f, 0xb430, 0xb431, 0xb432, 0xb433, 0x0000, 0x0000,
+ 0x0000, 0xb434, 0xb435, 0xb436, 0xb437, 0xb438, 0xb439, 0xb43a,
+ 0xb43b, 0xb43c, 0xb43d, 0xb43e, 0xb43f, 0xb440, 0xb441, 0xb442,
+ 0xb443, 0xb444, 0x0000, 0xb445, 0xb446, 0xb447, 0xb448, 0xb449,
+ 0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f, 0x0000, 0x0000,
+ 0x0000, 0xb450, 0xb451, 0xb452, 0xb453, 0xb454, 0xb455, 0xb456,
+ 0xb457, 0xb458, 0xb459, 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e,
+ 0xb45f, 0xb460, 0x0000, 0xb461, 0xb462, 0xb463, 0xb464, 0xb465,
+ 0xb466, 0xb467, 0xb468, 0xb469, 0xb46a, 0xb46b, 0x0000, 0x0000,
+ 0x0000, 0xb46c, 0xb46d, 0xb46e, 0xb46f, 0xb470, 0xb471, 0xb472,
+ 0xb473, 0xb474, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a,
+ 0xb47b, 0xb47c, 0x0000, 0xb47d, 0xb47e, 0xb47f, 0xb480, 0xb481,
+ 0xb482, 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, 0x0000, 0x0000,
+ 0x0000, 0xb488, 0xb489, 0xb48a, 0xb48b, 0xb48c, 0xb48d, 0xb48e,
+ 0xb48f, 0xb490, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, 0xb496,
+ 0xb497, 0xb498, 0x0000, 0xb499, 0xb49a, 0xb49b, 0xb49c, 0xb49d,
+ 0xb49e, 0xb49f, 0xb4a0, 0xb4a1, 0xb4a2, 0xb4a3, 0x0000, 0x0000,
+ 0x0000, 0xb4a4, 0xb4a5, 0xb4a6, 0xb4a7, 0xb4a8, 0xb4a9, 0xb4aa,
+ 0xb4ab, 0xb4ac, 0xb4ad, 0xb4ae, 0xb4af, 0xb4b0, 0xb4b1, 0xb4b2,
+ 0xb4b3, 0xb4b4, 0x0000, 0xb4b5, 0xb4b6, 0xb4b7, 0xb4b8, 0xb4b9,
+ 0xb4ba, 0xb4bb, 0xb4bc, 0xb4bd, 0xb4be, 0xb4bf, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb4c0, 0xb4c1, 0xb4c2, 0xb4c3, 0xb4c4, 0xb4c5, 0xb4c6,
+ 0xb4c7, 0xb4c8, 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, 0xb4cd, 0xb4ce,
+ 0xb4cf, 0xb4d0, 0x0000, 0xb4d1, 0xb4d2, 0xb4d3, 0xb4d4, 0xb4d5,
+ 0xb4d6, 0xb4d7, 0xb4d8, 0xb4d9, 0xb4da, 0xb4db, 0x0000, 0x0000,
+ 0x0000, 0xb4dc, 0xb4dd, 0xb4de, 0xb4df, 0xb4e0, 0xb4e1, 0xb4e2,
+ 0xb4e3, 0xb4e4, 0xb4e5, 0xb4e6, 0xb4e7, 0xb4e8, 0xb4e9, 0xb4ea,
+ 0xb4eb, 0xb4ec, 0x0000, 0xb4ed, 0xb4ee, 0xb4ef, 0xb4f0, 0xb4f1,
+ 0xb4f2, 0xb4f3, 0xb4f4, 0xb4f5, 0xb4f6, 0xb4f7, 0x0000, 0x0000,
+ 0x0000, 0xb4f8, 0xb4f9, 0xb4fa, 0xb4fb, 0xb4fc, 0xb4fd, 0xb4fe,
+ 0xb4ff, 0xb500, 0xb501, 0xb502, 0xb503, 0xb504, 0xb505, 0xb506,
+ 0xb507, 0xb508, 0x0000, 0xb509, 0xb50a, 0xb50b, 0xb50c, 0xb50d,
+ 0xb50e, 0xb50f, 0xb510, 0xb511, 0xb512, 0xb513, 0x0000, 0x0000,
+ 0x0000, 0xb514, 0xb515, 0xb516, 0xb517, 0xb518, 0xb519, 0xb51a,
+ 0xb51b, 0xb51c, 0xb51d, 0xb51e, 0xb51f, 0xb520, 0xb521, 0xb522,
+ 0xb523, 0xb524, 0x0000, 0xb525, 0xb526, 0xb527, 0xb528, 0xb529,
+ 0xb52a, 0xb52b, 0xb52c, 0xb52d, 0xb52e, 0xb52f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3138, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb530, 0xb531, 0xb532, 0xb533, 0xb534, 0xb535, 0xb536,
+ 0xb537, 0xb538, 0xb539, 0xb53a, 0xb53b, 0xb53c, 0xb53d, 0xb53e,
+ 0xb53f, 0xb540, 0x0000, 0xb541, 0xb542, 0xb543, 0xb544, 0xb545,
+ 0xb546, 0xb547, 0xb548, 0xb549, 0xb54a, 0xb54b, 0x0000, 0x0000,
+ 0x0000, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xb550, 0xb551, 0xb552,
+ 0xb553, 0xb554, 0xb555, 0xb556, 0xb557, 0xb558, 0xb559, 0xb55a,
+ 0xb55b, 0xb55c, 0x0000, 0xb55d, 0xb55e, 0xb55f, 0xb560, 0xb561,
+ 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567, 0x0000, 0x0000,
+ 0x0000, 0xb568, 0xb569, 0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e,
+ 0xb56f, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, 0xb576,
+ 0xb577, 0xb578, 0x0000, 0xb579, 0xb57a, 0xb57b, 0xb57c, 0xb57d,
+ 0xb57e, 0xb57f, 0xb580, 0xb581, 0xb582, 0xb583, 0x0000, 0x0000,
+ 0x0000, 0xb584, 0xb585, 0xb586, 0xb587, 0xb588, 0xb589, 0xb58a,
+ 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f, 0xb590, 0xb591, 0xb592,
+ 0xb593, 0xb594, 0x0000, 0xb595, 0xb596, 0xb597, 0xb598, 0xb599,
+ 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f, 0x0000, 0x0000,
+ 0x0000, 0xb5a0, 0xb5a1, 0xb5a2, 0xb5a3, 0xb5a4, 0xb5a5, 0xb5a6,
+ 0xb5a7, 0xb5a8, 0xb5a9, 0xb5aa, 0xb5ab, 0xb5ac, 0xb5ad, 0xb5ae,
+ 0xb5af, 0xb5b0, 0x0000, 0xb5b1, 0xb5b2, 0xb5b3, 0xb5b4, 0xb5b5,
+ 0xb5b6, 0xb5b7, 0xb5b8, 0xb5b9, 0xb5ba, 0xb5bb, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb5bc, 0xb5bd, 0xb5be, 0xb5bf, 0xb5c0, 0xb5c1, 0xb5c2,
+ 0xb5c3, 0xb5c4, 0xb5c5, 0xb5c6, 0xb5c7, 0xb5c8, 0xb5c9, 0xb5ca,
+ 0xb5cb, 0xb5cc, 0x0000, 0xb5cd, 0xb5ce, 0xb5cf, 0xb5d0, 0xb5d1,
+ 0xb5d2, 0xb5d3, 0xb5d4, 0xb5d5, 0xb5d6, 0xb5d7, 0x0000, 0x0000,
+ 0x0000, 0xb5d8, 0xb5d9, 0xb5da, 0xb5db, 0xb5dc, 0xb5dd, 0xb5de,
+ 0xb5df, 0xb5e0, 0xb5e1, 0xb5e2, 0xb5e3, 0xb5e4, 0xb5e5, 0xb5e6,
+ 0xb5e7, 0xb5e8, 0x0000, 0xb5e9, 0xb5ea, 0xb5eb, 0xb5ec, 0xb5ed,
+ 0xb5ee, 0xb5ef, 0xb5f0, 0xb5f1, 0xb5f2, 0xb5f3, 0x0000, 0x0000,
+ 0x0000, 0xb5f4, 0xb5f5, 0xb5f6, 0xb5f7, 0xb5f8, 0xb5f9, 0xb5fa,
+ 0xb5fb, 0xb5fc, 0xb5fd, 0xb5fe, 0xb5ff, 0xb600, 0xb601, 0xb602,
+ 0xb603, 0xb604, 0x0000, 0xb605, 0xb606, 0xb607, 0xb608, 0xb609,
+ 0xb60a, 0xb60b, 0xb60c, 0xb60d, 0xb60e, 0xb60f, 0x0000, 0x0000,
+ 0x0000, 0xb610, 0xb611, 0xb612, 0xb613, 0xb614, 0xb615, 0xb616,
+ 0xb617, 0xb618, 0xb619, 0xb61a, 0xb61b, 0xb61c, 0xb61d, 0xb61e,
+ 0xb61f, 0xb620, 0x0000, 0xb621, 0xb622, 0xb623, 0xb624, 0xb625,
+ 0xb626, 0xb627, 0xb628, 0xb629, 0xb62a, 0xb62b, 0x0000, 0x0000,
+ 0x0000, 0xb62c, 0xb62d, 0xb62e, 0xb62f, 0xb630, 0xb631, 0xb632,
+ 0xb633, 0xb634, 0xb635, 0xb636, 0xb637, 0xb638, 0xb639, 0xb63a,
+ 0xb63b, 0xb63c, 0x0000, 0xb63d, 0xb63e, 0xb63f, 0xb640, 0xb641,
+ 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, 0x0000, 0x0000,
+ 0x0000, 0xb648, 0xb649, 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e,
+ 0xb64f, 0xb650, 0xb651, 0xb652, 0xb653, 0xb654, 0xb655, 0xb656,
+ 0xb657, 0xb658, 0x0000, 0xb659, 0xb65a, 0xb65b, 0xb65c, 0xb65d,
+ 0xb65e, 0xb65f, 0xb660, 0xb661, 0xb662, 0xb663, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb664, 0xb665, 0xb666, 0xb667, 0xb668, 0xb669, 0xb66a,
+ 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f, 0xb670, 0xb671, 0xb672,
+ 0xb673, 0xb674, 0x0000, 0xb675, 0xb676, 0xb677, 0xb678, 0xb679,
+ 0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb67f, 0x0000, 0x0000,
+ 0x0000, 0xb680, 0xb681, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686,
+ 0xb687, 0xb688, 0xb689, 0xb68a, 0xb68b, 0xb68c, 0xb68d, 0xb68e,
+ 0xb68f, 0xb690, 0x0000, 0xb691, 0xb692, 0xb693, 0xb694, 0xb695,
+ 0xb696, 0xb697, 0xb698, 0xb699, 0xb69a, 0xb69b, 0x0000, 0x0000,
+ 0x0000, 0xb69c, 0xb69d, 0xb69e, 0xb69f, 0xb6a0, 0xb6a1, 0xb6a2,
+ 0xb6a3, 0xb6a4, 0xb6a5, 0xb6a6, 0xb6a7, 0xb6a8, 0xb6a9, 0xb6aa,
+ 0xb6ab, 0xb6ac, 0x0000, 0xb6ad, 0xb6ae, 0xb6af, 0xb6b0, 0xb6b1,
+ 0xb6b2, 0xb6b3, 0xb6b4, 0xb6b5, 0xb6b6, 0xb6b7, 0x0000, 0x0000,
+ 0x0000, 0xb6b8, 0xb6b9, 0xb6ba, 0xb6bb, 0xb6bc, 0xb6bd, 0xb6be,
+ 0xb6bf, 0xb6c0, 0xb6c1, 0xb6c2, 0xb6c3, 0xb6c4, 0xb6c5, 0xb6c6,
+ 0xb6c7, 0xb6c8, 0x0000, 0xb6c9, 0xb6ca, 0xb6cb, 0xb6cc, 0xb6cd,
+ 0xb6ce, 0xb6cf, 0xb6d0, 0xb6d1, 0xb6d2, 0xb6d3, 0x0000, 0x0000,
+ 0x0000, 0xb6d4, 0xb6d5, 0xb6d6, 0xb6d7, 0xb6d8, 0xb6d9, 0xb6da,
+ 0xb6db, 0xb6dc, 0xb6dd, 0xb6de, 0xb6df, 0xb6e0, 0xb6e1, 0xb6e2,
+ 0xb6e3, 0xb6e4, 0x0000, 0xb6e5, 0xb6e6, 0xb6e7, 0xb6e8, 0xb6e9,
+ 0xb6ea, 0xb6eb, 0xb6ec, 0xb6ed, 0xb6ee, 0xb6ef, 0x0000, 0x0000,
+ 0x0000, 0xb6f0, 0xb6f1, 0xb6f2, 0xb6f3, 0xb6f4, 0xb6f5, 0xb6f6,
+ 0xb6f7, 0xb6f8, 0xb6f9, 0xb6fa, 0xb6fb, 0xb6fc, 0xb6fd, 0xb6fe,
+ 0xb6ff, 0xb700, 0x0000, 0xb701, 0xb702, 0xb703, 0xb704, 0xb705,
+ 0xb706, 0xb707, 0xb708, 0xb709, 0xb70a, 0xb70b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb70c, 0xb70d, 0xb70e, 0xb70f, 0xb710, 0xb711, 0xb712,
+ 0xb713, 0xb714, 0xb715, 0xb716, 0xb717, 0xb718, 0xb719, 0xb71a,
+ 0xb71b, 0xb71c, 0x0000, 0xb71d, 0xb71e, 0xb71f, 0xb720, 0xb721,
+ 0xb722, 0xb723, 0xb724, 0xb725, 0xb726, 0xb727, 0x0000, 0x0000,
+ 0x0000, 0xb728, 0xb729, 0xb72a, 0xb72b, 0xb72c, 0xb72d, 0xb72e,
+ 0xb72f, 0xb730, 0xb731, 0xb732, 0xb733, 0xb734, 0xb735, 0xb736,
+ 0xb737, 0xb738, 0x0000, 0xb739, 0xb73a, 0xb73b, 0xb73c, 0xb73d,
+ 0xb73e, 0xb73f, 0xb740, 0xb741, 0xb742, 0xb743, 0x0000, 0x0000,
+ 0x0000, 0xb744, 0xb745, 0xb746, 0xb747, 0xb748, 0xb749, 0xb74a,
+ 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, 0xb750, 0xb751, 0xb752,
+ 0xb753, 0xb754, 0x0000, 0xb755, 0xb756, 0xb757, 0xb758, 0xb759,
+ 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f, 0x0000, 0x0000,
+ 0x0000, 0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766,
+ 0xb767, 0xb768, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e,
+ 0xb76f, 0xb770, 0x0000, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775,
+ 0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb77c, 0xb77d, 0xb77e, 0xb77f, 0xb780, 0xb781, 0xb782,
+ 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, 0xb788, 0xb789, 0xb78a,
+ 0xb78b, 0xb78c, 0x0000, 0xb78d, 0xb78e, 0xb78f, 0xb790, 0xb791,
+ 0xb792, 0xb793, 0xb794, 0xb795, 0xb796, 0xb797, 0x0000, 0x0000,
+ 0x0000, 0xb798, 0xb799, 0xb79a, 0xb79b, 0xb79c, 0xb79d, 0xb79e,
+ 0xb79f, 0xb7a0, 0xb7a1, 0xb7a2, 0xb7a3, 0xb7a4, 0xb7a5, 0xb7a6,
+ 0xb7a7, 0xb7a8, 0x0000, 0xb7a9, 0xb7aa, 0xb7ab, 0xb7ac, 0xb7ad,
+ 0xb7ae, 0xb7af, 0xb7b0, 0xb7b1, 0xb7b2, 0xb7b3, 0x0000, 0x0000,
+ 0x0000, 0xb7b4, 0xb7b5, 0xb7b6, 0xb7b7, 0xb7b8, 0xb7b9, 0xb7ba,
+ 0xb7bb, 0xb7bc, 0xb7bd, 0xb7be, 0xb7bf, 0xb7c0, 0xb7c1, 0xb7c2,
+ 0xb7c3, 0xb7c4, 0x0000, 0xb7c5, 0xb7c6, 0xb7c7, 0xb7c8, 0xb7c9,
+ 0xb7ca, 0xb7cb, 0xb7cc, 0xb7cd, 0xb7ce, 0xb7cf, 0x0000, 0x0000,
+ 0x0000, 0xb7d0, 0xb7d1, 0xb7d2, 0xb7d3, 0xb7d4, 0xb7d5, 0xb7d6,
+ 0xb7d7, 0xb7d8, 0xb7d9, 0xb7da, 0xb7db, 0xb7dc, 0xb7dd, 0xb7de,
+ 0xb7df, 0xb7e0, 0x0000, 0xb7e1, 0xb7e2, 0xb7e3, 0xb7e4, 0xb7e5,
+ 0xb7e6, 0xb7e7, 0xb7e8, 0xb7e9, 0xb7ea, 0xb7eb, 0x0000, 0x0000,
+ 0x0000, 0xb7ec, 0xb7ed, 0xb7ee, 0xb7ef, 0xb7f0, 0xb7f1, 0xb7f2,
+ 0xb7f3, 0xb7f4, 0xb7f5, 0xb7f6, 0xb7f7, 0xb7f8, 0xb7f9, 0xb7fa,
+ 0xb7fb, 0xb7fc, 0x0000, 0xb7fd, 0xb7fe, 0xb7ff, 0xb800, 0xb801,
+ 0xb802, 0xb803, 0xb804, 0xb805, 0xb806, 0xb807, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb808, 0xb809, 0xb80a, 0xb80b, 0xb80c, 0xb80d, 0xb80e,
+ 0xb80f, 0xb810, 0xb811, 0xb812, 0xb813, 0xb814, 0xb815, 0xb816,
+ 0xb817, 0xb818, 0x0000, 0xb819, 0xb81a, 0xb81b, 0xb81c, 0xb81d,
+ 0xb81e, 0xb81f, 0xb820, 0xb821, 0xb822, 0xb823, 0x0000, 0x0000,
+ 0x0000, 0xb824, 0xb825, 0xb826, 0xb827, 0xb828, 0xb829, 0xb82a,
+ 0xb82b, 0xb82c, 0xb82d, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb832,
+ 0xb833, 0xb834, 0x0000, 0xb835, 0xb836, 0xb837, 0xb838, 0xb839,
+ 0xb83a, 0xb83b, 0xb83c, 0xb83d, 0xb83e, 0xb83f, 0x0000, 0x0000,
+ 0x0000, 0xb840, 0xb841, 0xb842, 0xb843, 0xb844, 0xb845, 0xb846,
+ 0xb847, 0xb848, 0xb849, 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e,
+ 0xb84f, 0xb850, 0x0000, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855,
+ 0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0x0000, 0x0000,
+ 0x0000, 0xb85c, 0xb85d, 0xb85e, 0xb85f, 0xb860, 0xb861, 0xb862,
+ 0xb863, 0xb864, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a,
+ 0xb86b, 0xb86c, 0x0000, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xb871,
+ 0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877, 0x0000, 0x0000,
+ 0x0000, 0xb878, 0xb879, 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e,
+ 0xb87f, 0xb880, 0xb881, 0xb882, 0xb883, 0xb884, 0xb885, 0xb886,
+ 0xb887, 0xb888, 0x0000, 0xb889, 0xb88a, 0xb88b, 0xb88c, 0xb88d,
+ 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb892, 0xb893, 0x0000, 0x0000,
+ 0x0000, 0xb894, 0xb895, 0xb896, 0xb897, 0xb898, 0xb899, 0xb89a,
+ 0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f, 0xb8a0, 0xb8a1, 0xb8a2,
+ 0xb8a3, 0xb8a4, 0x0000, 0xb8a5, 0xb8a6, 0xb8a7, 0xb8a8, 0xb8a9,
+ 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ad, 0xb8ae, 0xb8af, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb8b0, 0xb8b1, 0xb8b2, 0xb8b3, 0xb8b4, 0xb8b5, 0xb8b6,
+ 0xb8b7, 0xb8b8, 0xb8b9, 0xb8ba, 0xb8bb, 0xb8bc, 0xb8bd, 0xb8be,
+ 0xb8bf, 0xb8c0, 0x0000, 0xb8c1, 0xb8c2, 0xb8c3, 0xb8c4, 0xb8c5,
+ 0xb8c6, 0xb8c7, 0xb8c8, 0xb8c9, 0xb8ca, 0xb8cb, 0x0000, 0x0000,
+ 0x0000, 0xb8cc, 0xb8cd, 0xb8ce, 0xb8cf, 0xb8d0, 0xb8d1, 0xb8d2,
+ 0xb8d3, 0xb8d4, 0xb8d5, 0xb8d6, 0xb8d7, 0xb8d8, 0xb8d9, 0xb8da,
+ 0xb8db, 0xb8dc, 0x0000, 0xb8dd, 0xb8de, 0xb8df, 0xb8e0, 0xb8e1,
+ 0xb8e2, 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e6, 0xb8e7, 0x0000, 0x0000,
+ 0x0000, 0xb8e8, 0xb8e9, 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ed, 0xb8ee,
+ 0xb8ef, 0xb8f0, 0xb8f1, 0xb8f2, 0xb8f3, 0xb8f4, 0xb8f5, 0xb8f6,
+ 0xb8f7, 0xb8f8, 0x0000, 0xb8f9, 0xb8fa, 0xb8fb, 0xb8fc, 0xb8fd,
+ 0xb8fe, 0xb8ff, 0xb900, 0xb901, 0xb902, 0xb903, 0x0000, 0x0000,
+ 0x0000, 0xb904, 0xb905, 0xb906, 0xb907, 0xb908, 0xb909, 0xb90a,
+ 0xb90b, 0xb90c, 0xb90d, 0xb90e, 0xb90f, 0xb910, 0xb911, 0xb912,
+ 0xb913, 0xb914, 0x0000, 0xb915, 0xb916, 0xb917, 0xb918, 0xb919,
+ 0xb91a, 0xb91b, 0xb91c, 0xb91d, 0xb91e, 0xb91f, 0x0000, 0x0000,
+ 0x0000, 0xb920, 0xb921, 0xb922, 0xb923, 0xb924, 0xb925, 0xb926,
+ 0xb927, 0xb928, 0xb929, 0xb92a, 0xb92b, 0xb92c, 0xb92d, 0xb92e,
+ 0xb92f, 0xb930, 0x0000, 0xb931, 0xb932, 0xb933, 0xb934, 0xb935,
+ 0xb936, 0xb937, 0xb938, 0xb939, 0xb93a, 0xb93b, 0x0000, 0x0000,
+ 0x0000, 0xb93c, 0xb93d, 0xb93e, 0xb93f, 0xb940, 0xb941, 0xb942,
+ 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, 0xb94a,
+ 0xb94b, 0xb94c, 0x0000, 0xb94d, 0xb94e, 0xb94f, 0xb950, 0xb951,
+ 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb958, 0xb959, 0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e,
+ 0xb95f, 0xb960, 0xb961, 0xb962, 0xb963, 0xb964, 0xb965, 0xb966,
+ 0xb967, 0xb968, 0x0000, 0xb969, 0xb96a, 0xb96b, 0xb96c, 0xb96d,
+ 0xb96e, 0xb96f, 0xb970, 0xb971, 0xb972, 0xb973, 0x0000, 0x0000,
+ 0x0000, 0xb974, 0xb975, 0xb976, 0xb977, 0xb978, 0xb979, 0xb97a,
+ 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb97f, 0xb980, 0xb981, 0xb982,
+ 0xb983, 0xb984, 0x0000, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989,
+ 0xb98a, 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f, 0x0000, 0x0000,
+ 0x0000, 0xb990, 0xb991, 0xb992, 0xb993, 0xb994, 0xb995, 0xb996,
+ 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, 0xb99d, 0xb99e,
+ 0xb99f, 0xb9a0, 0x0000, 0xb9a1, 0xb9a2, 0xb9a3, 0xb9a4, 0xb9a5,
+ 0xb9a6, 0xb9a7, 0xb9a8, 0xb9a9, 0xb9aa, 0xb9ab, 0x0000, 0x0000,
+ 0x0000, 0xb9ac, 0xb9ad, 0xb9ae, 0xb9af, 0xb9b0, 0xb9b1, 0xb9b2,
+ 0xb9b3, 0xb9b4, 0xb9b5, 0xb9b6, 0xb9b7, 0xb9b8, 0xb9b9, 0xb9ba,
+ 0xb9bb, 0xb9bc, 0x0000, 0xb9bd, 0xb9be, 0xb9bf, 0xb9c0, 0xb9c1,
+ 0xb9c2, 0xb9c3, 0xb9c4, 0xb9c5, 0xb9c6, 0xb9c7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xb9c8, 0xb9c9, 0xb9ca, 0xb9cb, 0xb9cc, 0xb9cd, 0xb9ce,
+ 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d3, 0xb9d4, 0xb9d5, 0xb9d6,
+ 0xb9d7, 0xb9d8, 0x0000, 0xb9d9, 0xb9da, 0xb9db, 0xb9dc, 0xb9dd,
+ 0xb9de, 0xb9df, 0xb9e0, 0xb9e1, 0xb9e2, 0xb9e3, 0x0000, 0x0000,
+ 0x0000, 0xb9e4, 0xb9e5, 0xb9e6, 0xb9e7, 0xb9e8, 0xb9e9, 0xb9ea,
+ 0xb9eb, 0xb9ec, 0xb9ed, 0xb9ee, 0xb9ef, 0xb9f0, 0xb9f1, 0xb9f2,
+ 0xb9f3, 0xb9f4, 0x0000, 0xb9f5, 0xb9f6, 0xb9f7, 0xb9f8, 0xb9f9,
+ 0xb9fa, 0xb9fb, 0xb9fc, 0xb9fd, 0xb9fe, 0xb9ff, 0x0000, 0x0000,
+ 0x0000, 0xba00, 0xba01, 0xba02, 0xba03, 0xba04, 0xba05, 0xba06,
+ 0xba07, 0xba08, 0xba09, 0xba0a, 0xba0b, 0xba0c, 0xba0d, 0xba0e,
+ 0xba0f, 0xba10, 0x0000, 0xba11, 0xba12, 0xba13, 0xba14, 0xba15,
+ 0xba16, 0xba17, 0xba18, 0xba19, 0xba1a, 0xba1b, 0x0000, 0x0000,
+ 0x0000, 0xba1c, 0xba1d, 0xba1e, 0xba1f, 0xba20, 0xba21, 0xba22,
+ 0xba23, 0xba24, 0xba25, 0xba26, 0xba27, 0xba28, 0xba29, 0xba2a,
+ 0xba2b, 0xba2c, 0x0000, 0xba2d, 0xba2e, 0xba2f, 0xba30, 0xba31,
+ 0xba32, 0xba33, 0xba34, 0xba35, 0xba36, 0xba37, 0x0000, 0x0000,
+ 0x0000, 0xba38, 0xba39, 0xba3a, 0xba3b, 0xba3c, 0xba3d, 0xba3e,
+ 0xba3f, 0xba40, 0xba41, 0xba42, 0xba43, 0xba44, 0xba45, 0xba46,
+ 0xba47, 0xba48, 0x0000, 0xba49, 0xba4a, 0xba4b, 0xba4c, 0xba4d,
+ 0xba4e, 0xba4f, 0xba50, 0xba51, 0xba52, 0xba53, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xba54, 0xba55, 0xba56, 0xba57, 0xba58, 0xba59, 0xba5a,
+ 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f, 0xba60, 0xba61, 0xba62,
+ 0xba63, 0xba64, 0x0000, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69,
+ 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0x0000, 0x0000,
+ 0x0000, 0xba70, 0xba71, 0xba72, 0xba73, 0xba74, 0xba75, 0xba76,
+ 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e,
+ 0xba7f, 0xba80, 0x0000, 0xba81, 0xba82, 0xba83, 0xba84, 0xba85,
+ 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xba8b, 0x0000, 0x0000,
+ 0x0000, 0xba8c, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba92,
+ 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, 0xba9a,
+ 0xba9b, 0xba9c, 0x0000, 0xba9d, 0xba9e, 0xba9f, 0xbaa0, 0xbaa1,
+ 0xbaa2, 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa6, 0xbaa7, 0x0000, 0x0000,
+ 0x0000, 0xbaa8, 0xbaa9, 0xbaaa, 0xbaab, 0xbaac, 0xbaad, 0xbaae,
+ 0xbaaf, 0xbab0, 0xbab1, 0xbab2, 0xbab3, 0xbab4, 0xbab5, 0xbab6,
+ 0xbab7, 0xbab8, 0x0000, 0xbab9, 0xbaba, 0xbabb, 0xbabc, 0xbabd,
+ 0xbabe, 0xbabf, 0xbac0, 0xbac1, 0xbac2, 0xbac3, 0x0000, 0x0000,
+ 0x0000, 0xbac4, 0xbac5, 0xbac6, 0xbac7, 0xbac8, 0xbac9, 0xbaca,
+ 0xbacb, 0xbacc, 0xbacd, 0xbace, 0xbacf, 0xbad0, 0xbad1, 0xbad2,
+ 0xbad3, 0xbad4, 0x0000, 0xbad5, 0xbad6, 0xbad7, 0xbad8, 0xbad9,
+ 0xbada, 0xbadb, 0xbadc, 0xbadd, 0xbade, 0xbadf, 0x0000, 0x0000,
+ 0x0000, 0xbae0, 0xbae1, 0xbae2, 0xbae3, 0xbae4, 0xbae5, 0xbae6,
+ 0xbae7, 0xbae8, 0xbae9, 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0xbaee,
+ 0xbaef, 0xbaf0, 0x0000, 0xbaf1, 0xbaf2, 0xbaf3, 0xbaf4, 0xbaf5,
+ 0xbaf6, 0xbaf7, 0xbaf8, 0xbaf9, 0xbafa, 0xbafb, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbafc, 0xbafd, 0xbafe, 0xbaff, 0xbb00, 0xbb01, 0xbb02,
+ 0xbb03, 0xbb04, 0xbb05, 0xbb06, 0xbb07, 0xbb08, 0xbb09, 0xbb0a,
+ 0xbb0b, 0xbb0c, 0x0000, 0xbb0d, 0xbb0e, 0xbb0f, 0xbb10, 0xbb11,
+ 0xbb12, 0xbb13, 0xbb14, 0xbb15, 0xbb16, 0xbb17, 0x0000, 0x0000,
+ 0x0000, 0xbb18, 0xbb19, 0xbb1a, 0xbb1b, 0xbb1c, 0xbb1d, 0xbb1e,
+ 0xbb1f, 0xbb20, 0xbb21, 0xbb22, 0xbb23, 0xbb24, 0xbb25, 0xbb26,
+ 0xbb27, 0xbb28, 0x0000, 0xbb29, 0xbb2a, 0xbb2b, 0xbb2c, 0xbb2d,
+ 0xbb2e, 0xbb2f, 0xbb30, 0xbb31, 0xbb32, 0xbb33, 0x0000, 0x0000,
+ 0x0000, 0xbb34, 0xbb35, 0xbb36, 0xbb37, 0xbb38, 0xbb39, 0xbb3a,
+ 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb3f, 0xbb40, 0xbb41, 0xbb42,
+ 0xbb43, 0xbb44, 0x0000, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49,
+ 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0x0000, 0x0000,
+ 0x0000, 0xbb50, 0xbb51, 0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56,
+ 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e,
+ 0xbb5f, 0xbb60, 0x0000, 0xbb61, 0xbb62, 0xbb63, 0xbb64, 0xbb65,
+ 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, 0x0000, 0x0000,
+ 0x0000, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f, 0xbb70, 0xbb71, 0xbb72,
+ 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77, 0xbb78, 0xbb79, 0xbb7a,
+ 0xbb7b, 0xbb7c, 0x0000, 0xbb7d, 0xbb7e, 0xbb7f, 0xbb80, 0xbb81,
+ 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, 0x0000, 0x0000,
+ 0x0000, 0xbb88, 0xbb89, 0xbb8a, 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e,
+ 0xbb8f, 0xbb90, 0xbb91, 0xbb92, 0xbb93, 0xbb94, 0xbb95, 0xbb96,
+ 0xbb97, 0xbb98, 0x0000, 0xbb99, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d,
+ 0xbb9e, 0xbb9f, 0xbba0, 0xbba1, 0xbba2, 0xbba3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbba4, 0xbba5, 0xbba6, 0xbba7, 0xbba8, 0xbba9, 0xbbaa,
+ 0xbbab, 0xbbac, 0xbbad, 0xbbae, 0xbbaf, 0xbbb0, 0xbbb1, 0xbbb2,
+ 0xbbb3, 0xbbb4, 0x0000, 0xbbb5, 0xbbb6, 0xbbb7, 0xbbb8, 0xbbb9,
+ 0xbbba, 0xbbbb, 0xbbbc, 0xbbbd, 0xbbbe, 0xbbbf, 0x0000, 0x0000,
+ 0x0000, 0xbbc0, 0xbbc1, 0xbbc2, 0xbbc3, 0xbbc4, 0xbbc5, 0xbbc6,
+ 0xbbc7, 0xbbc8, 0xbbc9, 0xbbca, 0xbbcb, 0xbbcc, 0xbbcd, 0xbbce,
+ 0xbbcf, 0xbbd0, 0x0000, 0xbbd1, 0xbbd2, 0xbbd3, 0xbbd4, 0xbbd5,
+ 0xbbd6, 0xbbd7, 0xbbd8, 0xbbd9, 0xbbda, 0xbbdb, 0x0000, 0x0000,
+ 0x0000, 0xbbdc, 0xbbdd, 0xbbde, 0xbbdf, 0xbbe0, 0xbbe1, 0xbbe2,
+ 0xbbe3, 0xbbe4, 0xbbe5, 0xbbe6, 0xbbe7, 0xbbe8, 0xbbe9, 0xbbea,
+ 0xbbeb, 0xbbec, 0x0000, 0xbbed, 0xbbee, 0xbbef, 0xbbf0, 0xbbf1,
+ 0xbbf2, 0xbbf3, 0xbbf4, 0xbbf5, 0xbbf6, 0xbbf7, 0x0000, 0x0000,
+ 0x0000, 0xbbf8, 0xbbf9, 0xbbfa, 0xbbfb, 0xbbfc, 0xbbfd, 0xbbfe,
+ 0xbbff, 0xbc00, 0xbc01, 0xbc02, 0xbc03, 0xbc04, 0xbc05, 0xbc06,
+ 0xbc07, 0xbc08, 0x0000, 0xbc09, 0xbc0a, 0xbc0b, 0xbc0c, 0xbc0d,
+ 0xbc0e, 0xbc0f, 0xbc10, 0xbc11, 0xbc12, 0xbc13, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc19, 0xbc1a,
+ 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f, 0xbc20, 0xbc21, 0xbc22,
+ 0xbc23, 0xbc24, 0x0000, 0xbc25, 0xbc26, 0xbc27, 0xbc28, 0xbc29,
+ 0xbc2a, 0xbc2b, 0xbc2c, 0xbc2d, 0xbc2e, 0xbc2f, 0x0000, 0x0000,
+ 0x0000, 0xbc30, 0xbc31, 0xbc32, 0xbc33, 0xbc34, 0xbc35, 0xbc36,
+ 0xbc37, 0xbc38, 0xbc39, 0xbc3a, 0xbc3b, 0xbc3c, 0xbc3d, 0xbc3e,
+ 0xbc3f, 0xbc40, 0x0000, 0xbc41, 0xbc42, 0xbc43, 0xbc44, 0xbc45,
+ 0xbc46, 0xbc47, 0xbc48, 0xbc49, 0xbc4a, 0xbc4b, 0x0000, 0x0000,
+ 0x0000, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51, 0xbc52,
+ 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a,
+ 0xbc5b, 0xbc5c, 0x0000, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xbc61,
+ 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0x0000, 0x0000,
+ 0x0000, 0xbc68, 0xbc69, 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e,
+ 0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76,
+ 0xbc77, 0xbc78, 0x0000, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d,
+ 0xbc7e, 0xbc7f, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0x0000, 0x0000,
+ 0x0000, 0xbc84, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, 0xbc8a,
+ 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc92,
+ 0xbc93, 0xbc94, 0x0000, 0xbc95, 0xbc96, 0xbc97, 0xbc98, 0xbc99,
+ 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbca0, 0xbca1, 0xbca2, 0xbca3, 0xbca4, 0xbca5, 0xbca6,
+ 0xbca7, 0xbca8, 0xbca9, 0xbcaa, 0xbcab, 0xbcac, 0xbcad, 0xbcae,
+ 0xbcaf, 0xbcb0, 0x0000, 0xbcb1, 0xbcb2, 0xbcb3, 0xbcb4, 0xbcb5,
+ 0xbcb6, 0xbcb7, 0xbcb8, 0xbcb9, 0xbcba, 0xbcbb, 0x0000, 0x0000,
+ 0x0000, 0xbcbc, 0xbcbd, 0xbcbe, 0xbcbf, 0xbcc0, 0xbcc1, 0xbcc2,
+ 0xbcc3, 0xbcc4, 0xbcc5, 0xbcc6, 0xbcc7, 0xbcc8, 0xbcc9, 0xbcca,
+ 0xbccb, 0xbccc, 0x0000, 0xbccd, 0xbcce, 0xbccf, 0xbcd0, 0xbcd1,
+ 0xbcd2, 0xbcd3, 0xbcd4, 0xbcd5, 0xbcd6, 0xbcd7, 0x0000, 0x0000,
+ 0x0000, 0xbcd8, 0xbcd9, 0xbcda, 0xbcdb, 0xbcdc, 0xbcdd, 0xbcde,
+ 0xbcdf, 0xbce0, 0xbce1, 0xbce2, 0xbce3, 0xbce4, 0xbce5, 0xbce6,
+ 0xbce7, 0xbce8, 0x0000, 0xbce9, 0xbcea, 0xbceb, 0xbcec, 0xbced,
+ 0xbcee, 0xbcef, 0xbcf0, 0xbcf1, 0xbcf2, 0xbcf3, 0x0000, 0x0000,
+ 0x0000, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf7, 0xbcf8, 0xbcf9, 0xbcfa,
+ 0xbcfb, 0xbcfc, 0xbcfd, 0xbcfe, 0xbcff, 0xbd00, 0xbd01, 0xbd02,
+ 0xbd03, 0xbd04, 0x0000, 0xbd05, 0xbd06, 0xbd07, 0xbd08, 0xbd09,
+ 0xbd0a, 0xbd0b, 0xbd0c, 0xbd0d, 0xbd0e, 0xbd0f, 0x0000, 0x0000,
+ 0x0000, 0xbd10, 0xbd11, 0xbd12, 0xbd13, 0xbd14, 0xbd15, 0xbd16,
+ 0xbd17, 0xbd18, 0xbd19, 0xbd1a, 0xbd1b, 0xbd1c, 0xbd1d, 0xbd1e,
+ 0xbd1f, 0xbd20, 0x0000, 0xbd21, 0xbd22, 0xbd23, 0xbd24, 0xbd25,
+ 0xbd26, 0xbd27, 0xbd28, 0xbd29, 0xbd2a, 0xbd2b, 0x0000, 0x0000,
+ 0x0000, 0xbd2c, 0xbd2d, 0xbd2e, 0xbd2f, 0xbd30, 0xbd31, 0xbd32,
+ 0xbd33, 0xbd34, 0xbd35, 0xbd36, 0xbd37, 0xbd38, 0xbd39, 0xbd3a,
+ 0xbd3b, 0xbd3c, 0x0000, 0xbd3d, 0xbd3e, 0xbd3f, 0xbd40, 0xbd41,
+ 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbd48, 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e,
+ 0xbd4f, 0xbd50, 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56,
+ 0xbd57, 0xbd58, 0x0000, 0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d,
+ 0xbd5e, 0xbd5f, 0xbd60, 0xbd61, 0xbd62, 0xbd63, 0x0000, 0x0000,
+ 0x0000, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, 0xbd6a,
+ 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, 0xbd72,
+ 0xbd73, 0xbd74, 0x0000, 0xbd75, 0xbd76, 0xbd77, 0xbd78, 0xbd79,
+ 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd7f, 0x0000, 0x0000,
+ 0x0000, 0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86,
+ 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e,
+ 0xbd8f, 0xbd90, 0x0000, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95,
+ 0xbd96, 0xbd97, 0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0x0000, 0x0000,
+ 0x0000, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, 0xbda0, 0xbda1, 0xbda2,
+ 0xbda3, 0xbda4, 0xbda5, 0xbda6, 0xbda7, 0xbda8, 0xbda9, 0xbdaa,
+ 0xbdab, 0xbdac, 0x0000, 0xbdad, 0xbdae, 0xbdaf, 0xbdb0, 0xbdb1,
+ 0xbdb2, 0xbdb3, 0xbdb4, 0xbdb5, 0xbdb6, 0xbdb7, 0x0000, 0x0000,
+ 0x0000, 0xbdb8, 0xbdb9, 0xbdba, 0xbdbb, 0xbdbc, 0xbdbd, 0xbdbe,
+ 0xbdbf, 0xbdc0, 0xbdc1, 0xbdc2, 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc6,
+ 0xbdc7, 0xbdc8, 0x0000, 0xbdc9, 0xbdca, 0xbdcb, 0xbdcc, 0xbdcd,
+ 0xbdce, 0xbdcf, 0xbdd0, 0xbdd1, 0xbdd2, 0xbdd3, 0x0000, 0x0000,
+ 0x0000, 0xbdd4, 0xbdd5, 0xbdd6, 0xbdd7, 0xbdd8, 0xbdd9, 0xbdda,
+ 0xbddb, 0xbddc, 0xbddd, 0xbdde, 0xbddf, 0xbde0, 0xbde1, 0xbde2,
+ 0xbde3, 0xbde4, 0x0000, 0xbde5, 0xbde6, 0xbde7, 0xbde8, 0xbde9,
+ 0xbdea, 0xbdeb, 0xbdec, 0xbded, 0xbdee, 0xbdef, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbdf0, 0xbdf1, 0xbdf2, 0xbdf3, 0xbdf4, 0xbdf5, 0xbdf6,
+ 0xbdf7, 0xbdf8, 0xbdf9, 0xbdfa, 0xbdfb, 0xbdfc, 0xbdfd, 0xbdfe,
+ 0xbdff, 0xbe00, 0x0000, 0xbe01, 0xbe02, 0xbe03, 0xbe04, 0xbe05,
+ 0xbe06, 0xbe07, 0xbe08, 0xbe09, 0xbe0a, 0xbe0b, 0x0000, 0x0000,
+ 0x0000, 0xbe0c, 0xbe0d, 0xbe0e, 0xbe0f, 0xbe10, 0xbe11, 0xbe12,
+ 0xbe13, 0xbe14, 0xbe15, 0xbe16, 0xbe17, 0xbe18, 0xbe19, 0xbe1a,
+ 0xbe1b, 0xbe1c, 0x0000, 0xbe1d, 0xbe1e, 0xbe1f, 0xbe20, 0xbe21,
+ 0xbe22, 0xbe23, 0xbe24, 0xbe25, 0xbe26, 0xbe27, 0x0000, 0x0000,
+ 0x0000, 0xbe28, 0xbe29, 0xbe2a, 0xbe2b, 0xbe2c, 0xbe2d, 0xbe2e,
+ 0xbe2f, 0xbe30, 0xbe31, 0xbe32, 0xbe33, 0xbe34, 0xbe35, 0xbe36,
+ 0xbe37, 0xbe38, 0x0000, 0xbe39, 0xbe3a, 0xbe3b, 0xbe3c, 0xbe3d,
+ 0xbe3e, 0xbe3f, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0x0000, 0x0000,
+ 0x0000, 0xbe44, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49, 0xbe4a,
+ 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52,
+ 0xbe53, 0xbe54, 0x0000, 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59,
+ 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3143, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66,
+ 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e,
+ 0xbe6f, 0xbe70, 0x0000, 0xbe71, 0xbe72, 0xbe73, 0xbe74, 0xbe75,
+ 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0x0000, 0x0000,
+ 0x0000, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe7f, 0xbe80, 0xbe81, 0xbe82,
+ 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a,
+ 0xbe8b, 0xbe8c, 0x0000, 0xbe8d, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91,
+ 0xbe92, 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97, 0x0000, 0x0000,
+ 0x0000, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e,
+ 0xbe9f, 0xbea0, 0xbea1, 0xbea2, 0xbea3, 0xbea4, 0xbea5, 0xbea6,
+ 0xbea7, 0xbea8, 0x0000, 0xbea9, 0xbeaa, 0xbeab, 0xbeac, 0xbead,
+ 0xbeae, 0xbeaf, 0xbeb0, 0xbeb1, 0xbeb2, 0xbeb3, 0x0000, 0x0000,
+ 0x0000, 0xbeb4, 0xbeb5, 0xbeb6, 0xbeb7, 0xbeb8, 0xbeb9, 0xbeba,
+ 0xbebb, 0xbebc, 0xbebd, 0xbebe, 0xbebf, 0xbec0, 0xbec1, 0xbec2,
+ 0xbec3, 0xbec4, 0x0000, 0xbec5, 0xbec6, 0xbec7, 0xbec8, 0xbec9,
+ 0xbeca, 0xbecb, 0xbecc, 0xbecd, 0xbece, 0xbecf, 0x0000, 0x0000,
+ 0x0000, 0xbed0, 0xbed1, 0xbed2, 0xbed3, 0xbed4, 0xbed5, 0xbed6,
+ 0xbed7, 0xbed8, 0xbed9, 0xbeda, 0xbedb, 0xbedc, 0xbedd, 0xbede,
+ 0xbedf, 0xbee0, 0x0000, 0xbee1, 0xbee2, 0xbee3, 0xbee4, 0xbee5,
+ 0xbee6, 0xbee7, 0xbee8, 0xbee9, 0xbeea, 0xbeeb, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbeec, 0xbeed, 0xbeee, 0xbeef, 0xbef0, 0xbef1, 0xbef2,
+ 0xbef3, 0xbef4, 0xbef5, 0xbef6, 0xbef7, 0xbef8, 0xbef9, 0xbefa,
+ 0xbefb, 0xbefc, 0x0000, 0xbefd, 0xbefe, 0xbeff, 0xbf00, 0xbf01,
+ 0xbf02, 0xbf03, 0xbf04, 0xbf05, 0xbf06, 0xbf07, 0x0000, 0x0000,
+ 0x0000, 0xbf08, 0xbf09, 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0d, 0xbf0e,
+ 0xbf0f, 0xbf10, 0xbf11, 0xbf12, 0xbf13, 0xbf14, 0xbf15, 0xbf16,
+ 0xbf17, 0xbf18, 0x0000, 0xbf19, 0xbf1a, 0xbf1b, 0xbf1c, 0xbf1d,
+ 0xbf1e, 0xbf1f, 0xbf20, 0xbf21, 0xbf22, 0xbf23, 0x0000, 0x0000,
+ 0x0000, 0xbf24, 0xbf25, 0xbf26, 0xbf27, 0xbf28, 0xbf29, 0xbf2a,
+ 0xbf2b, 0xbf2c, 0xbf2d, 0xbf2e, 0xbf2f, 0xbf30, 0xbf31, 0xbf32,
+ 0xbf33, 0xbf34, 0x0000, 0xbf35, 0xbf36, 0xbf37, 0xbf38, 0xbf39,
+ 0xbf3a, 0xbf3b, 0xbf3c, 0xbf3d, 0xbf3e, 0xbf3f, 0x0000, 0x0000,
+ 0x0000, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46,
+ 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e,
+ 0xbf4f, 0xbf50, 0x0000, 0xbf51, 0xbf52, 0xbf53, 0xbf54, 0xbf55,
+ 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0x0000, 0x0000,
+ 0x0000, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62,
+ 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a,
+ 0xbf6b, 0xbf6c, 0x0000, 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71,
+ 0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77, 0x0000, 0x0000,
+ 0x0000, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e,
+ 0xbf7f, 0xbf80, 0xbf81, 0xbf82, 0xbf83, 0xbf84, 0xbf85, 0xbf86,
+ 0xbf87, 0xbf88, 0x0000, 0xbf89, 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d,
+ 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, 0xbf93, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a,
+ 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xbfa1, 0xbfa2,
+ 0xbfa3, 0xbfa4, 0x0000, 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9,
+ 0xbfaa, 0xbfab, 0xbfac, 0xbfad, 0xbfae, 0xbfaf, 0x0000, 0x0000,
+ 0x0000, 0xbfb0, 0xbfb1, 0xbfb2, 0xbfb3, 0xbfb4, 0xbfb5, 0xbfb6,
+ 0xbfb7, 0xbfb8, 0xbfb9, 0xbfba, 0xbfbb, 0xbfbc, 0xbfbd, 0xbfbe,
+ 0xbfbf, 0xbfc0, 0x0000, 0xbfc1, 0xbfc2, 0xbfc3, 0xbfc4, 0xbfc5,
+ 0xbfc6, 0xbfc7, 0xbfc8, 0xbfc9, 0xbfca, 0xbfcb, 0x0000, 0x0000,
+ 0x0000, 0xbfcc, 0xbfcd, 0xbfce, 0xbfcf, 0xbfd0, 0xbfd1, 0xbfd2,
+ 0xbfd3, 0xbfd4, 0xbfd5, 0xbfd6, 0xbfd7, 0xbfd8, 0xbfd9, 0xbfda,
+ 0xbfdb, 0xbfdc, 0x0000, 0xbfdd, 0xbfde, 0xbfdf, 0xbfe0, 0xbfe1,
+ 0xbfe2, 0xbfe3, 0xbfe4, 0xbfe5, 0xbfe6, 0xbfe7, 0x0000, 0x0000,
+ 0x0000, 0xbfe8, 0xbfe9, 0xbfea, 0xbfeb, 0xbfec, 0xbfed, 0xbfee,
+ 0xbfef, 0xbff0, 0xbff1, 0xbff2, 0xbff3, 0xbff4, 0xbff5, 0xbff6,
+ 0xbff7, 0xbff8, 0x0000, 0xbff9, 0xbffa, 0xbffb, 0xbffc, 0xbffd,
+ 0xbffe, 0xbfff, 0xc000, 0xc001, 0xc002, 0xc003, 0x0000, 0x0000,
+ 0x0000, 0xc004, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, 0xc00a,
+ 0xc00b, 0xc00c, 0xc00d, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc012,
+ 0xc013, 0xc014, 0x0000, 0xc015, 0xc016, 0xc017, 0xc018, 0xc019,
+ 0xc01a, 0xc01b, 0xc01c, 0xc01d, 0xc01e, 0xc01f, 0x0000, 0x0000,
+ 0x0000, 0xc020, 0xc021, 0xc022, 0xc023, 0xc024, 0xc025, 0xc026,
+ 0xc027, 0xc028, 0xc029, 0xc02a, 0xc02b, 0xc02c, 0xc02d, 0xc02e,
+ 0xc02f, 0xc030, 0x0000, 0xc031, 0xc032, 0xc033, 0xc034, 0xc035,
+ 0xc036, 0xc037, 0xc038, 0xc039, 0xc03a, 0xc03b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc03c, 0xc03d, 0xc03e, 0xc03f, 0xc040, 0xc041, 0xc042,
+ 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, 0xc04a,
+ 0xc04b, 0xc04c, 0x0000, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051,
+ 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0x0000, 0x0000,
+ 0x0000, 0xc058, 0xc059, 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e,
+ 0xc05f, 0xc060, 0xc061, 0xc062, 0xc063, 0xc064, 0xc065, 0xc066,
+ 0xc067, 0xc068, 0x0000, 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d,
+ 0xc06e, 0xc06f, 0xc070, 0xc071, 0xc072, 0xc073, 0x0000, 0x0000,
+ 0x0000, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, 0xc079, 0xc07a,
+ 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc07f, 0xc080, 0xc081, 0xc082,
+ 0xc083, 0xc084, 0x0000, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089,
+ 0xc08a, 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f, 0x0000, 0x0000,
+ 0x0000, 0xc090, 0xc091, 0xc092, 0xc093, 0xc094, 0xc095, 0xc096,
+ 0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e,
+ 0xc09f, 0xc0a0, 0x0000, 0xc0a1, 0xc0a2, 0xc0a3, 0xc0a4, 0xc0a5,
+ 0xc0a6, 0xc0a7, 0xc0a8, 0xc0a9, 0xc0aa, 0xc0ab, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc0ac, 0xc0ad, 0xc0ae, 0xc0af, 0xc0b0, 0xc0b1, 0xc0b2,
+ 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0b7, 0xc0b8, 0xc0b9, 0xc0ba,
+ 0xc0bb, 0xc0bc, 0x0000, 0xc0bd, 0xc0be, 0xc0bf, 0xc0c0, 0xc0c1,
+ 0xc0c2, 0xc0c3, 0xc0c4, 0xc0c5, 0xc0c6, 0xc0c7, 0x0000, 0x0000,
+ 0x0000, 0xc0c8, 0xc0c9, 0xc0ca, 0xc0cb, 0xc0cc, 0xc0cd, 0xc0ce,
+ 0xc0cf, 0xc0d0, 0xc0d1, 0xc0d2, 0xc0d3, 0xc0d4, 0xc0d5, 0xc0d6,
+ 0xc0d7, 0xc0d8, 0x0000, 0xc0d9, 0xc0da, 0xc0db, 0xc0dc, 0xc0dd,
+ 0xc0de, 0xc0df, 0xc0e0, 0xc0e1, 0xc0e2, 0xc0e3, 0x0000, 0x0000,
+ 0x0000, 0xc0e4, 0xc0e5, 0xc0e6, 0xc0e7, 0xc0e8, 0xc0e9, 0xc0ea,
+ 0xc0eb, 0xc0ec, 0xc0ed, 0xc0ee, 0xc0ef, 0xc0f0, 0xc0f1, 0xc0f2,
+ 0xc0f3, 0xc0f4, 0x0000, 0xc0f5, 0xc0f6, 0xc0f7, 0xc0f8, 0xc0f9,
+ 0xc0fa, 0xc0fb, 0xc0fc, 0xc0fd, 0xc0fe, 0xc0ff, 0x0000, 0x0000,
+ 0x0000, 0xc100, 0xc101, 0xc102, 0xc103, 0xc104, 0xc105, 0xc106,
+ 0xc107, 0xc108, 0xc109, 0xc10a, 0xc10b, 0xc10c, 0xc10d, 0xc10e,
+ 0xc10f, 0xc110, 0x0000, 0xc111, 0xc112, 0xc113, 0xc114, 0xc115,
+ 0xc116, 0xc117, 0xc118, 0xc119, 0xc11a, 0xc11b, 0x0000, 0x0000,
+ 0x0000, 0xc11c, 0xc11d, 0xc11e, 0xc11f, 0xc120, 0xc121, 0xc122,
+ 0xc123, 0xc124, 0xc125, 0xc126, 0xc127, 0xc128, 0xc129, 0xc12a,
+ 0xc12b, 0xc12c, 0x0000, 0xc12d, 0xc12e, 0xc12f, 0xc130, 0xc131,
+ 0xc132, 0xc133, 0xc134, 0xc135, 0xc136, 0xc137, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc138, 0xc139, 0xc13a, 0xc13b, 0xc13c, 0xc13d, 0xc13e,
+ 0xc13f, 0xc140, 0xc141, 0xc142, 0xc143, 0xc144, 0xc145, 0xc146,
+ 0xc147, 0xc148, 0x0000, 0xc149, 0xc14a, 0xc14b, 0xc14c, 0xc14d,
+ 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc152, 0xc153, 0x0000, 0x0000,
+ 0x0000, 0xc154, 0xc155, 0xc156, 0xc157, 0xc158, 0xc159, 0xc15a,
+ 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, 0xc162,
+ 0xc163, 0xc164, 0x0000, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169,
+ 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f, 0x0000, 0x0000,
+ 0x0000, 0xc170, 0xc171, 0xc172, 0xc173, 0xc174, 0xc175, 0xc176,
+ 0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e,
+ 0xc17f, 0xc180, 0x0000, 0xc181, 0xc182, 0xc183, 0xc184, 0xc185,
+ 0xc186, 0xc187, 0xc188, 0xc189, 0xc18a, 0xc18b, 0x0000, 0x0000,
+ 0x0000, 0xc18c, 0xc18d, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc192,
+ 0xc193, 0xc194, 0xc195, 0xc196, 0xc197, 0xc198, 0xc199, 0xc19a,
+ 0xc19b, 0xc19c, 0x0000, 0xc19d, 0xc19e, 0xc19f, 0xc1a0, 0xc1a1,
+ 0xc1a2, 0xc1a3, 0xc1a4, 0xc1a5, 0xc1a6, 0xc1a7, 0x0000, 0x0000,
+ 0x0000, 0xc1a8, 0xc1a9, 0xc1aa, 0xc1ab, 0xc1ac, 0xc1ad, 0xc1ae,
+ 0xc1af, 0xc1b0, 0xc1b1, 0xc1b2, 0xc1b3, 0xc1b4, 0xc1b5, 0xc1b6,
+ 0xc1b7, 0xc1b8, 0x0000, 0xc1b9, 0xc1ba, 0xc1bb, 0xc1bc, 0xc1bd,
+ 0xc1be, 0xc1bf, 0xc1c0, 0xc1c1, 0xc1c2, 0xc1c3, 0x0000, 0x0000,
+ 0x0000, 0xc1c4, 0xc1c5, 0xc1c6, 0xc1c7, 0xc1c8, 0xc1c9, 0xc1ca,
+ 0xc1cb, 0xc1cc, 0xc1cd, 0xc1ce, 0xc1cf, 0xc1d0, 0xc1d1, 0xc1d2,
+ 0xc1d3, 0xc1d4, 0x0000, 0xc1d5, 0xc1d6, 0xc1d7, 0xc1d8, 0xc1d9,
+ 0xc1da, 0xc1db, 0xc1dc, 0xc1dd, 0xc1de, 0xc1df, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc1e0, 0xc1e1, 0xc1e2, 0xc1e3, 0xc1e4, 0xc1e5, 0xc1e6,
+ 0xc1e7, 0xc1e8, 0xc1e9, 0xc1ea, 0xc1eb, 0xc1ec, 0xc1ed, 0xc1ee,
+ 0xc1ef, 0xc1f0, 0x0000, 0xc1f1, 0xc1f2, 0xc1f3, 0xc1f4, 0xc1f5,
+ 0xc1f6, 0xc1f7, 0xc1f8, 0xc1f9, 0xc1fa, 0xc1fb, 0x0000, 0x0000,
+ 0x0000, 0xc1fc, 0xc1fd, 0xc1fe, 0xc1ff, 0xc200, 0xc201, 0xc202,
+ 0xc203, 0xc204, 0xc205, 0xc206, 0xc207, 0xc208, 0xc209, 0xc20a,
+ 0xc20b, 0xc20c, 0x0000, 0xc20d, 0xc20e, 0xc20f, 0xc210, 0xc211,
+ 0xc212, 0xc213, 0xc214, 0xc215, 0xc216, 0xc217, 0x0000, 0x0000,
+ 0x0000, 0xc218, 0xc219, 0xc21a, 0xc21b, 0xc21c, 0xc21d, 0xc21e,
+ 0xc21f, 0xc220, 0xc221, 0xc222, 0xc223, 0xc224, 0xc225, 0xc226,
+ 0xc227, 0xc228, 0x0000, 0xc229, 0xc22a, 0xc22b, 0xc22c, 0xc22d,
+ 0xc22e, 0xc22f, 0xc230, 0xc231, 0xc232, 0xc233, 0x0000, 0x0000,
+ 0x0000, 0xc234, 0xc235, 0xc236, 0xc237, 0xc238, 0xc239, 0xc23a,
+ 0xc23b, 0xc23c, 0xc23d, 0xc23e, 0xc23f, 0xc240, 0xc241, 0xc242,
+ 0xc243, 0xc244, 0x0000, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249,
+ 0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f, 0x0000, 0x0000,
+ 0x0000, 0xc250, 0xc251, 0xc252, 0xc253, 0xc254, 0xc255, 0xc256,
+ 0xc257, 0xc258, 0xc259, 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e,
+ 0xc25f, 0xc260, 0x0000, 0xc261, 0xc262, 0xc263, 0xc264, 0xc265,
+ 0xc266, 0xc267, 0xc268, 0xc269, 0xc26a, 0xc26b, 0x0000, 0x0000,
+ 0x0000, 0xc26c, 0xc26d, 0xc26e, 0xc26f, 0xc270, 0xc271, 0xc272,
+ 0xc273, 0xc274, 0xc275, 0xc276, 0xc277, 0xc278, 0xc279, 0xc27a,
+ 0xc27b, 0xc27c, 0x0000, 0xc27d, 0xc27e, 0xc27f, 0xc280, 0xc281,
+ 0xc282, 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, 0xc28e,
+ 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, 0xc294, 0xc295, 0xc296,
+ 0xc297, 0xc298, 0x0000, 0xc299, 0xc29a, 0xc29b, 0xc29c, 0xc29d,
+ 0xc29e, 0xc29f, 0xc2a0, 0xc2a1, 0xc2a2, 0xc2a3, 0x0000, 0x0000,
+ 0x0000, 0xc2a4, 0xc2a5, 0xc2a6, 0xc2a7, 0xc2a8, 0xc2a9, 0xc2aa,
+ 0xc2ab, 0xc2ac, 0xc2ad, 0xc2ae, 0xc2af, 0xc2b0, 0xc2b1, 0xc2b2,
+ 0xc2b3, 0xc2b4, 0x0000, 0xc2b5, 0xc2b6, 0xc2b7, 0xc2b8, 0xc2b9,
+ 0xc2ba, 0xc2bb, 0xc2bc, 0xc2bd, 0xc2be, 0xc2bf, 0x0000, 0x0000,
+ 0x0000, 0xc2c0, 0xc2c1, 0xc2c2, 0xc2c3, 0xc2c4, 0xc2c5, 0xc2c6,
+ 0xc2c7, 0xc2c8, 0xc2c9, 0xc2ca, 0xc2cb, 0xc2cc, 0xc2cd, 0xc2ce,
+ 0xc2cf, 0xc2d0, 0x0000, 0xc2d1, 0xc2d2, 0xc2d3, 0xc2d4, 0xc2d5,
+ 0xc2d6, 0xc2d7, 0xc2d8, 0xc2d9, 0xc2da, 0xc2db, 0x0000, 0x0000,
+ 0x0000, 0xc2dc, 0xc2dd, 0xc2de, 0xc2df, 0xc2e0, 0xc2e1, 0xc2e2,
+ 0xc2e3, 0xc2e4, 0xc2e5, 0xc2e6, 0xc2e7, 0xc2e8, 0xc2e9, 0xc2ea,
+ 0xc2eb, 0xc2ec, 0x0000, 0xc2ed, 0xc2ee, 0xc2ef, 0xc2f0, 0xc2f1,
+ 0xc2f2, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f6, 0xc2f7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc2f8, 0xc2f9, 0xc2fa, 0xc2fb, 0xc2fc, 0xc2fd, 0xc2fe,
+ 0xc2ff, 0xc300, 0xc301, 0xc302, 0xc303, 0xc304, 0xc305, 0xc306,
+ 0xc307, 0xc308, 0x0000, 0xc309, 0xc30a, 0xc30b, 0xc30c, 0xc30d,
+ 0xc30e, 0xc30f, 0xc310, 0xc311, 0xc312, 0xc313, 0x0000, 0x0000,
+ 0x0000, 0xc314, 0xc315, 0xc316, 0xc317, 0xc318, 0xc319, 0xc31a,
+ 0xc31b, 0xc31c, 0xc31d, 0xc31e, 0xc31f, 0xc320, 0xc321, 0xc322,
+ 0xc323, 0xc324, 0x0000, 0xc325, 0xc326, 0xc327, 0xc328, 0xc329,
+ 0xc32a, 0xc32b, 0xc32c, 0xc32d, 0xc32e, 0xc32f, 0x0000, 0x0000,
+ 0x0000, 0xc330, 0xc331, 0xc332, 0xc333, 0xc334, 0xc335, 0xc336,
+ 0xc337, 0xc338, 0xc339, 0xc33a, 0xc33b, 0xc33c, 0xc33d, 0xc33e,
+ 0xc33f, 0xc340, 0x0000, 0xc341, 0xc342, 0xc343, 0xc344, 0xc345,
+ 0xc346, 0xc347, 0xc348, 0xc349, 0xc34a, 0xc34b, 0x0000, 0x0000,
+ 0x0000, 0xc34c, 0xc34d, 0xc34e, 0xc34f, 0xc350, 0xc351, 0xc352,
+ 0xc353, 0xc354, 0xc355, 0xc356, 0xc357, 0xc358, 0xc359, 0xc35a,
+ 0xc35b, 0xc35c, 0x0000, 0xc35d, 0xc35e, 0xc35f, 0xc360, 0xc361,
+ 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367, 0x0000, 0x0000,
+ 0x0000, 0xc368, 0xc369, 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e,
+ 0xc36f, 0xc370, 0xc371, 0xc372, 0xc373, 0xc374, 0xc375, 0xc376,
+ 0xc377, 0xc378, 0x0000, 0xc379, 0xc37a, 0xc37b, 0xc37c, 0xc37d,
+ 0xc37e, 0xc37f, 0xc380, 0xc381, 0xc382, 0xc383, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc384, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, 0xc38a,
+ 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc392,
+ 0xc393, 0xc394, 0x0000, 0xc395, 0xc396, 0xc397, 0xc398, 0xc399,
+ 0xc39a, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0x0000, 0x0000,
+ 0x0000, 0xc3a0, 0xc3a1, 0xc3a2, 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a6,
+ 0xc3a7, 0xc3a8, 0xc3a9, 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ad, 0xc3ae,
+ 0xc3af, 0xc3b0, 0x0000, 0xc3b1, 0xc3b2, 0xc3b3, 0xc3b4, 0xc3b5,
+ 0xc3b6, 0xc3b7, 0xc3b8, 0xc3b9, 0xc3ba, 0xc3bb, 0x0000, 0x0000,
+ 0x0000, 0xc3bc, 0xc3bd, 0xc3be, 0xc3bf, 0xc3c0, 0xc3c1, 0xc3c2,
+ 0xc3c3, 0xc3c4, 0xc3c5, 0xc3c6, 0xc3c7, 0xc3c8, 0xc3c9, 0xc3ca,
+ 0xc3cb, 0xc3cc, 0x0000, 0xc3cd, 0xc3ce, 0xc3cf, 0xc3d0, 0xc3d1,
+ 0xc3d2, 0xc3d3, 0xc3d4, 0xc3d5, 0xc3d6, 0xc3d7, 0x0000, 0x0000,
+ 0x0000, 0xc3d8, 0xc3d9, 0xc3da, 0xc3db, 0xc3dc, 0xc3dd, 0xc3de,
+ 0xc3df, 0xc3e0, 0xc3e1, 0xc3e2, 0xc3e3, 0xc3e4, 0xc3e5, 0xc3e6,
+ 0xc3e7, 0xc3e8, 0x0000, 0xc3e9, 0xc3ea, 0xc3eb, 0xc3ec, 0xc3ed,
+ 0xc3ee, 0xc3ef, 0xc3f0, 0xc3f1, 0xc3f2, 0xc3f3, 0x0000, 0x0000,
+ 0x0000, 0xc3f4, 0xc3f5, 0xc3f6, 0xc3f7, 0xc3f8, 0xc3f9, 0xc3fa,
+ 0xc3fb, 0xc3fc, 0xc3fd, 0xc3fe, 0xc3ff, 0xc400, 0xc401, 0xc402,
+ 0xc403, 0xc404, 0x0000, 0xc405, 0xc406, 0xc407, 0xc408, 0xc409,
+ 0xc40a, 0xc40b, 0xc40c, 0xc40d, 0xc40e, 0xc40f, 0x0000, 0x0000,
+ 0x0000, 0xc410, 0xc411, 0xc412, 0xc413, 0xc414, 0xc415, 0xc416,
+ 0xc417, 0xc418, 0xc419, 0xc41a, 0xc41b, 0xc41c, 0xc41d, 0xc41e,
+ 0xc41f, 0xc420, 0x0000, 0xc421, 0xc422, 0xc423, 0xc424, 0xc425,
+ 0xc426, 0xc427, 0xc428, 0xc429, 0xc42a, 0xc42b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc42c, 0xc42d, 0xc42e, 0xc42f, 0xc430, 0xc431, 0xc432,
+ 0xc433, 0xc434, 0xc435, 0xc436, 0xc437, 0xc438, 0xc439, 0xc43a,
+ 0xc43b, 0xc43c, 0x0000, 0xc43d, 0xc43e, 0xc43f, 0xc440, 0xc441,
+ 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, 0x0000, 0x0000,
+ 0x0000, 0xc448, 0xc449, 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e,
+ 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, 0xc454, 0xc455, 0xc456,
+ 0xc457, 0xc458, 0x0000, 0xc459, 0xc45a, 0xc45b, 0xc45c, 0xc45d,
+ 0xc45e, 0xc45f, 0xc460, 0xc461, 0xc462, 0xc463, 0x0000, 0x0000,
+ 0x0000, 0xc464, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, 0xc46a,
+ 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f, 0xc470, 0xc471, 0xc472,
+ 0xc473, 0xc474, 0x0000, 0xc475, 0xc476, 0xc477, 0xc478, 0xc479,
+ 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc47f, 0x0000, 0x0000,
+ 0x0000, 0xc480, 0xc481, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486,
+ 0xc487, 0xc488, 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc48d, 0xc48e,
+ 0xc48f, 0xc490, 0x0000, 0xc491, 0xc492, 0xc493, 0xc494, 0xc495,
+ 0xc496, 0xc497, 0xc498, 0xc499, 0xc49a, 0xc49b, 0x0000, 0x0000,
+ 0x0000, 0xc49c, 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc4a1, 0xc4a2,
+ 0xc4a3, 0xc4a4, 0xc4a5, 0xc4a6, 0xc4a7, 0xc4a8, 0xc4a9, 0xc4aa,
+ 0xc4ab, 0xc4ac, 0x0000, 0xc4ad, 0xc4ae, 0xc4af, 0xc4b0, 0xc4b1,
+ 0xc4b2, 0xc4b3, 0xc4b4, 0xc4b5, 0xc4b6, 0xc4b7, 0x0000, 0x0000,
+ 0x0000, 0xc4b8, 0xc4b9, 0xc4ba, 0xc4bb, 0xc4bc, 0xc4bd, 0xc4be,
+ 0xc4bf, 0xc4c0, 0xc4c1, 0xc4c2, 0xc4c3, 0xc4c4, 0xc4c5, 0xc4c6,
+ 0xc4c7, 0xc4c8, 0x0000, 0xc4c9, 0xc4ca, 0xc4cb, 0xc4cc, 0xc4cd,
+ 0xc4ce, 0xc4cf, 0xc4d0, 0xc4d1, 0xc4d2, 0xc4d3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc4d4, 0xc4d5, 0xc4d6, 0xc4d7, 0xc4d8, 0xc4d9, 0xc4da,
+ 0xc4db, 0xc4dc, 0xc4dd, 0xc4de, 0xc4df, 0xc4e0, 0xc4e1, 0xc4e2,
+ 0xc4e3, 0xc4e4, 0x0000, 0xc4e5, 0xc4e6, 0xc4e7, 0xc4e8, 0xc4e9,
+ 0xc4ea, 0xc4eb, 0xc4ec, 0xc4ed, 0xc4ee, 0xc4ef, 0x0000, 0x0000,
+ 0x0000, 0xc4f0, 0xc4f1, 0xc4f2, 0xc4f3, 0xc4f4, 0xc4f5, 0xc4f6,
+ 0xc4f7, 0xc4f8, 0xc4f9, 0xc4fa, 0xc4fb, 0xc4fc, 0xc4fd, 0xc4fe,
+ 0xc4ff, 0xc500, 0x0000, 0xc501, 0xc502, 0xc503, 0xc504, 0xc505,
+ 0xc506, 0xc507, 0xc508, 0xc509, 0xc50a, 0xc50b, 0x0000, 0x0000,
+ 0x0000, 0xc50c, 0xc50d, 0xc50e, 0xc50f, 0xc510, 0xc511, 0xc512,
+ 0xc513, 0xc514, 0xc515, 0xc516, 0xc517, 0xc518, 0xc519, 0xc51a,
+ 0xc51b, 0xc51c, 0x0000, 0xc51d, 0xc51e, 0xc51f, 0xc520, 0xc521,
+ 0xc522, 0xc523, 0xc524, 0xc525, 0xc526, 0xc527, 0x0000, 0x0000,
+ 0x0000, 0xc528, 0xc529, 0xc52a, 0xc52b, 0xc52c, 0xc52d, 0xc52e,
+ 0xc52f, 0xc530, 0xc531, 0xc532, 0xc533, 0xc534, 0xc535, 0xc536,
+ 0xc537, 0xc538, 0x0000, 0xc539, 0xc53a, 0xc53b, 0xc53c, 0xc53d,
+ 0xc53e, 0xc53f, 0xc540, 0xc541, 0xc542, 0xc543, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a,
+ 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f, 0xc550, 0xc551, 0xc552,
+ 0xc553, 0xc554, 0x0000, 0xc555, 0xc556, 0xc557, 0xc558, 0xc559,
+ 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f, 0x0000, 0x0000,
+ 0x0000, 0xc560, 0xc561, 0xc562, 0xc563, 0xc564, 0xc565, 0xc566,
+ 0xc567, 0xc568, 0xc569, 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e,
+ 0xc56f, 0xc570, 0x0000, 0xc571, 0xc572, 0xc573, 0xc574, 0xc575,
+ 0xc576, 0xc577, 0xc578, 0xc579, 0xc57a, 0xc57b, 0x0000, 0x0000,
+ 0x0000, 0xc57c, 0xc57d, 0xc57e, 0xc57f, 0xc580, 0xc581, 0xc582,
+ 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, 0xc58a,
+ 0xc58b, 0xc58c, 0x0000, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591,
+ 0xc592, 0xc593, 0xc594, 0xc595, 0xc596, 0xc597, 0x0000, 0x0000,
+ 0x0000, 0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e,
+ 0xc59f, 0xc5a0, 0xc5a1, 0xc5a2, 0xc5a3, 0xc5a4, 0xc5a5, 0xc5a6,
+ 0xc5a7, 0xc5a8, 0x0000, 0xc5a9, 0xc5aa, 0xc5ab, 0xc5ac, 0xc5ad,
+ 0xc5ae, 0xc5af, 0xc5b0, 0xc5b1, 0xc5b2, 0xc5b3, 0x0000, 0x0000,
+ 0x0000, 0xc5b4, 0xc5b5, 0xc5b6, 0xc5b7, 0xc5b8, 0xc5b9, 0xc5ba,
+ 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5bf, 0xc5c0, 0xc5c1, 0xc5c2,
+ 0xc5c3, 0xc5c4, 0x0000, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9,
+ 0xc5ca, 0xc5cb, 0xc5cc, 0xc5cd, 0xc5ce, 0xc5cf, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc5d0, 0xc5d1, 0xc5d2, 0xc5d3, 0xc5d4, 0xc5d5, 0xc5d6,
+ 0xc5d7, 0xc5d8, 0xc5d9, 0xc5da, 0xc5db, 0xc5dc, 0xc5dd, 0xc5de,
+ 0xc5df, 0xc5e0, 0x0000, 0xc5e1, 0xc5e2, 0xc5e3, 0xc5e4, 0xc5e5,
+ 0xc5e6, 0xc5e7, 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0x0000, 0x0000,
+ 0x0000, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5ef, 0xc5f0, 0xc5f1, 0xc5f2,
+ 0xc5f3, 0xc5f4, 0xc5f5, 0xc5f6, 0xc5f7, 0xc5f8, 0xc5f9, 0xc5fa,
+ 0xc5fb, 0xc5fc, 0x0000, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601,
+ 0xc602, 0xc603, 0xc604, 0xc605, 0xc606, 0xc607, 0x0000, 0x0000,
+ 0x0000, 0xc608, 0xc609, 0xc60a, 0xc60b, 0xc60c, 0xc60d, 0xc60e,
+ 0xc60f, 0xc610, 0xc611, 0xc612, 0xc613, 0xc614, 0xc615, 0xc616,
+ 0xc617, 0xc618, 0x0000, 0xc619, 0xc61a, 0xc61b, 0xc61c, 0xc61d,
+ 0xc61e, 0xc61f, 0xc620, 0xc621, 0xc622, 0xc623, 0x0000, 0x0000,
+ 0x0000, 0xc624, 0xc625, 0xc626, 0xc627, 0xc628, 0xc629, 0xc62a,
+ 0xc62b, 0xc62c, 0xc62d, 0xc62e, 0xc62f, 0xc630, 0xc631, 0xc632,
+ 0xc633, 0xc634, 0x0000, 0xc635, 0xc636, 0xc637, 0xc638, 0xc639,
+ 0xc63a, 0xc63b, 0xc63c, 0xc63d, 0xc63e, 0xc63f, 0x0000, 0x0000,
+ 0x0000, 0xc640, 0xc641, 0xc642, 0xc643, 0xc644, 0xc645, 0xc646,
+ 0xc647, 0xc648, 0xc649, 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e,
+ 0xc64f, 0xc650, 0x0000, 0xc651, 0xc652, 0xc653, 0xc654, 0xc655,
+ 0xc656, 0xc657, 0xc658, 0xc659, 0xc65a, 0xc65b, 0x0000, 0x0000,
+ 0x0000, 0xc65c, 0xc65d, 0xc65e, 0xc65f, 0xc660, 0xc661, 0xc662,
+ 0xc663, 0xc664, 0xc665, 0xc666, 0xc667, 0xc668, 0xc669, 0xc66a,
+ 0xc66b, 0xc66c, 0x0000, 0xc66d, 0xc66e, 0xc66f, 0xc670, 0xc671,
+ 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc678, 0xc679, 0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e,
+ 0xc67f, 0xc680, 0xc681, 0xc682, 0xc683, 0xc684, 0xc685, 0xc686,
+ 0xc687, 0xc688, 0x0000, 0xc689, 0xc68a, 0xc68b, 0xc68c, 0xc68d,
+ 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc692, 0xc693, 0x0000, 0x0000,
+ 0x0000, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xc699, 0xc69a,
+ 0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f, 0xc6a0, 0xc6a1, 0xc6a2,
+ 0xc6a3, 0xc6a4, 0x0000, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9,
+ 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0x0000, 0x0000,
+ 0x0000, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xc6b5, 0xc6b6,
+ 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be,
+ 0xc6bf, 0xc6c0, 0x0000, 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5,
+ 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, 0x0000, 0x0000,
+ 0x0000, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2,
+ 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da,
+ 0xc6db, 0xc6dc, 0x0000, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1,
+ 0xc6e2, 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0x0000, 0x0000,
+ 0x0000, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee,
+ 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6,
+ 0xc6f7, 0xc6f8, 0x0000, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd,
+ 0xc6fe, 0xc6ff, 0xc700, 0xc701, 0xc702, 0xc703, 0x0000, 0x0000,
+ 0x0000, 0xc704, 0xc705, 0xc706, 0xc707, 0xc708, 0xc709, 0xc70a,
+ 0xc70b, 0xc70c, 0xc70d, 0xc70e, 0xc70f, 0xc710, 0xc711, 0xc712,
+ 0xc713, 0xc714, 0x0000, 0xc715, 0xc716, 0xc717, 0xc718, 0xc719,
+ 0xc71a, 0xc71b, 0xc71c, 0xc71d, 0xc71e, 0xc71f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc720, 0xc721, 0xc722, 0xc723, 0xc724, 0xc725, 0xc726,
+ 0xc727, 0xc728, 0xc729, 0xc72a, 0xc72b, 0xc72c, 0xc72d, 0xc72e,
+ 0xc72f, 0xc730, 0x0000, 0xc731, 0xc732, 0xc733, 0xc734, 0xc735,
+ 0xc736, 0xc737, 0xc738, 0xc739, 0xc73a, 0xc73b, 0x0000, 0x0000,
+ 0x0000, 0xc73c, 0xc73d, 0xc73e, 0xc73f, 0xc740, 0xc741, 0xc742,
+ 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a,
+ 0xc74b, 0xc74c, 0x0000, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751,
+ 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0x0000, 0x0000,
+ 0x0000, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e,
+ 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766,
+ 0xc767, 0xc768, 0x0000, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d,
+ 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0x0000, 0x0000,
+ 0x0000, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a,
+ 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc77f, 0xc780, 0xc781, 0xc782,
+ 0xc783, 0xc784, 0x0000, 0xc785, 0xc786, 0xc787, 0xc788, 0xc789,
+ 0xc78a, 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc790, 0xc791, 0xc792, 0xc793, 0xc794, 0xc795, 0xc796,
+ 0xc797, 0xc798, 0xc799, 0xc79a, 0xc79b, 0xc79c, 0xc79d, 0xc79e,
+ 0xc79f, 0xc7a0, 0x0000, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5,
+ 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0x0000, 0x0000,
+ 0x0000, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b2,
+ 0xc7b3, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba,
+ 0xc7bb, 0xc7bc, 0x0000, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1,
+ 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0x0000, 0x0000,
+ 0x0000, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7ce,
+ 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6,
+ 0xc7d7, 0xc7d8, 0x0000, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd,
+ 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0x0000, 0x0000,
+ 0x0000, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, 0xc7ea,
+ 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2,
+ 0xc7f3, 0xc7f4, 0x0000, 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9,
+ 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc7ff, 0x0000, 0x0000,
+ 0x0000, 0xc800, 0xc801, 0xc802, 0xc803, 0xc804, 0xc805, 0xc806,
+ 0xc807, 0xc808, 0xc809, 0xc80a, 0xc80b, 0xc80c, 0xc80d, 0xc80e,
+ 0xc80f, 0xc810, 0x0000, 0xc811, 0xc812, 0xc813, 0xc814, 0xc815,
+ 0xc816, 0xc817, 0xc818, 0xc819, 0xc81a, 0xc81b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc81c, 0xc81d, 0xc81e, 0xc81f, 0xc820, 0xc821, 0xc822,
+ 0xc823, 0xc824, 0xc825, 0xc826, 0xc827, 0xc828, 0xc829, 0xc82a,
+ 0xc82b, 0xc82c, 0x0000, 0xc82d, 0xc82e, 0xc82f, 0xc830, 0xc831,
+ 0xc832, 0xc833, 0xc834, 0xc835, 0xc836, 0xc837, 0x0000, 0x0000,
+ 0x0000, 0xc838, 0xc839, 0xc83a, 0xc83b, 0xc83c, 0xc83d, 0xc83e,
+ 0xc83f, 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846,
+ 0xc847, 0xc848, 0x0000, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d,
+ 0xc84e, 0xc84f, 0xc850, 0xc851, 0xc852, 0xc853, 0x0000, 0x0000,
+ 0x0000, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, 0xc85a,
+ 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, 0xc862,
+ 0xc863, 0xc864, 0x0000, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869,
+ 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0x0000, 0x0000,
+ 0x0000, 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc876,
+ 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e,
+ 0xc87f, 0xc880, 0x0000, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885,
+ 0xc886, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0x0000, 0x0000,
+ 0x0000, 0xc88c, 0xc88d, 0xc88e, 0xc88f, 0xc890, 0xc891, 0xc892,
+ 0xc893, 0xc894, 0xc895, 0xc896, 0xc897, 0xc898, 0xc899, 0xc89a,
+ 0xc89b, 0xc89c, 0x0000, 0xc89d, 0xc89e, 0xc89f, 0xc8a0, 0xc8a1,
+ 0xc8a2, 0xc8a3, 0xc8a4, 0xc8a5, 0xc8a6, 0xc8a7, 0x0000, 0x0000,
+ 0x0000, 0xc8a8, 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, 0xc8ad, 0xc8ae,
+ 0xc8af, 0xc8b0, 0xc8b1, 0xc8b2, 0xc8b3, 0xc8b4, 0xc8b5, 0xc8b6,
+ 0xc8b7, 0xc8b8, 0x0000, 0xc8b9, 0xc8ba, 0xc8bb, 0xc8bc, 0xc8bd,
+ 0xc8be, 0xc8bf, 0xc8c0, 0xc8c1, 0xc8c2, 0xc8c3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc8c4, 0xc8c5, 0xc8c6, 0xc8c7, 0xc8c8, 0xc8c9, 0xc8ca,
+ 0xc8cb, 0xc8cc, 0xc8cd, 0xc8ce, 0xc8cf, 0xc8d0, 0xc8d1, 0xc8d2,
+ 0xc8d3, 0xc8d4, 0x0000, 0xc8d5, 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9,
+ 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, 0x0000, 0x0000,
+ 0x0000, 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6,
+ 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee,
+ 0xc8ef, 0xc8f0, 0x0000, 0xc8f1, 0xc8f2, 0xc8f3, 0xc8f4, 0xc8f5,
+ 0xc8f6, 0xc8f7, 0xc8f8, 0xc8f9, 0xc8fa, 0xc8fb, 0x0000, 0x0000,
+ 0x0000, 0xc8fc, 0xc8fd, 0xc8fe, 0xc8ff, 0xc900, 0xc901, 0xc902,
+ 0xc903, 0xc904, 0xc905, 0xc906, 0xc907, 0xc908, 0xc909, 0xc90a,
+ 0xc90b, 0xc90c, 0x0000, 0xc90d, 0xc90e, 0xc90f, 0xc910, 0xc911,
+ 0xc912, 0xc913, 0xc914, 0xc915, 0xc916, 0xc917, 0x0000, 0x0000,
+ 0x0000, 0xc918, 0xc919, 0xc91a, 0xc91b, 0xc91c, 0xc91d, 0xc91e,
+ 0xc91f, 0xc920, 0xc921, 0xc922, 0xc923, 0xc924, 0xc925, 0xc926,
+ 0xc927, 0xc928, 0x0000, 0xc929, 0xc92a, 0xc92b, 0xc92c, 0xc92d,
+ 0xc92e, 0xc92f, 0xc930, 0xc931, 0xc932, 0xc933, 0x0000, 0x0000,
+ 0x0000, 0xc934, 0xc935, 0xc936, 0xc937, 0xc938, 0xc939, 0xc93a,
+ 0xc93b, 0xc93c, 0xc93d, 0xc93e, 0xc93f, 0xc940, 0xc941, 0xc942,
+ 0xc943, 0xc944, 0x0000, 0xc945, 0xc946, 0xc947, 0xc948, 0xc949,
+ 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0x0000, 0x0000,
+ 0x0000, 0xc950, 0xc951, 0xc952, 0xc953, 0xc954, 0xc955, 0xc956,
+ 0xc957, 0xc958, 0xc959, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e,
+ 0xc95f, 0xc960, 0x0000, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965,
+ 0xc966, 0xc967, 0xc968, 0xc969, 0xc96a, 0xc96b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc96c, 0xc96d, 0xc96e, 0xc96f, 0xc970, 0xc971, 0xc972,
+ 0xc973, 0xc974, 0xc975, 0xc976, 0xc977, 0xc978, 0xc979, 0xc97a,
+ 0xc97b, 0xc97c, 0x0000, 0xc97d, 0xc97e, 0xc97f, 0xc980, 0xc981,
+ 0xc982, 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, 0x0000, 0x0000,
+ 0x0000, 0xc988, 0xc989, 0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc98e,
+ 0xc98f, 0xc990, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996,
+ 0xc997, 0xc998, 0x0000, 0xc999, 0xc99a, 0xc99b, 0xc99c, 0xc99d,
+ 0xc99e, 0xc99f, 0xc9a0, 0xc9a1, 0xc9a2, 0xc9a3, 0x0000, 0x0000,
+ 0x0000, 0xc9a4, 0xc9a5, 0xc9a6, 0xc9a7, 0xc9a8, 0xc9a9, 0xc9aa,
+ 0xc9ab, 0xc9ac, 0xc9ad, 0xc9ae, 0xc9af, 0xc9b0, 0xc9b1, 0xc9b2,
+ 0xc9b3, 0xc9b4, 0x0000, 0xc9b5, 0xc9b6, 0xc9b7, 0xc9b8, 0xc9b9,
+ 0xc9ba, 0xc9bb, 0xc9bc, 0xc9bd, 0xc9be, 0xc9bf, 0x0000, 0x0000,
+ 0x0000, 0xc9c0, 0xc9c1, 0xc9c2, 0xc9c3, 0xc9c4, 0xc9c5, 0xc9c6,
+ 0xc9c7, 0xc9c8, 0xc9c9, 0xc9ca, 0xc9cb, 0xc9cc, 0xc9cd, 0xc9ce,
+ 0xc9cf, 0xc9d0, 0x0000, 0xc9d1, 0xc9d2, 0xc9d3, 0xc9d4, 0xc9d5,
+ 0xc9d6, 0xc9d7, 0xc9d8, 0xc9d9, 0xc9da, 0xc9db, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3149, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xc9dc, 0xc9dd, 0xc9de, 0xc9df, 0xc9e0, 0xc9e1, 0xc9e2,
+ 0xc9e3, 0xc9e4, 0xc9e5, 0xc9e6, 0xc9e7, 0xc9e8, 0xc9e9, 0xc9ea,
+ 0xc9eb, 0xc9ec, 0x0000, 0xc9ed, 0xc9ee, 0xc9ef, 0xc9f0, 0xc9f1,
+ 0xc9f2, 0xc9f3, 0xc9f4, 0xc9f5, 0xc9f6, 0xc9f7, 0x0000, 0x0000,
+ 0x0000, 0xc9f8, 0xc9f9, 0xc9fa, 0xc9fb, 0xc9fc, 0xc9fd, 0xc9fe,
+ 0xc9ff, 0xca00, 0xca01, 0xca02, 0xca03, 0xca04, 0xca05, 0xca06,
+ 0xca07, 0xca08, 0x0000, 0xca09, 0xca0a, 0xca0b, 0xca0c, 0xca0d,
+ 0xca0e, 0xca0f, 0xca10, 0xca11, 0xca12, 0xca13, 0x0000, 0x0000,
+ 0x0000, 0xca14, 0xca15, 0xca16, 0xca17, 0xca18, 0xca19, 0xca1a,
+ 0xca1b, 0xca1c, 0xca1d, 0xca1e, 0xca1f, 0xca20, 0xca21, 0xca22,
+ 0xca23, 0xca24, 0x0000, 0xca25, 0xca26, 0xca27, 0xca28, 0xca29,
+ 0xca2a, 0xca2b, 0xca2c, 0xca2d, 0xca2e, 0xca2f, 0x0000, 0x0000,
+ 0x0000, 0xca30, 0xca31, 0xca32, 0xca33, 0xca34, 0xca35, 0xca36,
+ 0xca37, 0xca38, 0xca39, 0xca3a, 0xca3b, 0xca3c, 0xca3d, 0xca3e,
+ 0xca3f, 0xca40, 0x0000, 0xca41, 0xca42, 0xca43, 0xca44, 0xca45,
+ 0xca46, 0xca47, 0xca48, 0xca49, 0xca4a, 0xca4b, 0x0000, 0x0000,
+ 0x0000, 0xca4c, 0xca4d, 0xca4e, 0xca4f, 0xca50, 0xca51, 0xca52,
+ 0xca53, 0xca54, 0xca55, 0xca56, 0xca57, 0xca58, 0xca59, 0xca5a,
+ 0xca5b, 0xca5c, 0x0000, 0xca5d, 0xca5e, 0xca5f, 0xca60, 0xca61,
+ 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xca68, 0xca69, 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e,
+ 0xca6f, 0xca70, 0xca71, 0xca72, 0xca73, 0xca74, 0xca75, 0xca76,
+ 0xca77, 0xca78, 0x0000, 0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d,
+ 0xca7e, 0xca7f, 0xca80, 0xca81, 0xca82, 0xca83, 0x0000, 0x0000,
+ 0x0000, 0xca84, 0xca85, 0xca86, 0xca87, 0xca88, 0xca89, 0xca8a,
+ 0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92,
+ 0xca93, 0xca94, 0x0000, 0xca95, 0xca96, 0xca97, 0xca98, 0xca99,
+ 0xca9a, 0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f, 0x0000, 0x0000,
+ 0x0000, 0xcaa0, 0xcaa1, 0xcaa2, 0xcaa3, 0xcaa4, 0xcaa5, 0xcaa6,
+ 0xcaa7, 0xcaa8, 0xcaa9, 0xcaaa, 0xcaab, 0xcaac, 0xcaad, 0xcaae,
+ 0xcaaf, 0xcab0, 0x0000, 0xcab1, 0xcab2, 0xcab3, 0xcab4, 0xcab5,
+ 0xcab6, 0xcab7, 0xcab8, 0xcab9, 0xcaba, 0xcabb, 0x0000, 0x0000,
+ 0x0000, 0xcabc, 0xcabd, 0xcabe, 0xcabf, 0xcac0, 0xcac1, 0xcac2,
+ 0xcac3, 0xcac4, 0xcac5, 0xcac6, 0xcac7, 0xcac8, 0xcac9, 0xcaca,
+ 0xcacb, 0xcacc, 0x0000, 0xcacd, 0xcace, 0xcacf, 0xcad0, 0xcad1,
+ 0xcad2, 0xcad3, 0xcad4, 0xcad5, 0xcad6, 0xcad7, 0x0000, 0x0000,
+ 0x0000, 0xcad8, 0xcad9, 0xcada, 0xcadb, 0xcadc, 0xcadd, 0xcade,
+ 0xcadf, 0xcae0, 0xcae1, 0xcae2, 0xcae3, 0xcae4, 0xcae5, 0xcae6,
+ 0xcae7, 0xcae8, 0x0000, 0xcae9, 0xcaea, 0xcaeb, 0xcaec, 0xcaed,
+ 0xcaee, 0xcaef, 0xcaf0, 0xcaf1, 0xcaf2, 0xcaf3, 0x0000, 0x0000,
+ 0x0000, 0xcaf4, 0xcaf5, 0xcaf6, 0xcaf7, 0xcaf8, 0xcaf9, 0xcafa,
+ 0xcafb, 0xcafc, 0xcafd, 0xcafe, 0xcaff, 0xcb00, 0xcb01, 0xcb02,
+ 0xcb03, 0xcb04, 0x0000, 0xcb05, 0xcb06, 0xcb07, 0xcb08, 0xcb09,
+ 0xcb0a, 0xcb0b, 0xcb0c, 0xcb0d, 0xcb0e, 0xcb0f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcb10, 0xcb11, 0xcb12, 0xcb13, 0xcb14, 0xcb15, 0xcb16,
+ 0xcb17, 0xcb18, 0xcb19, 0xcb1a, 0xcb1b, 0xcb1c, 0xcb1d, 0xcb1e,
+ 0xcb1f, 0xcb20, 0x0000, 0xcb21, 0xcb22, 0xcb23, 0xcb24, 0xcb25,
+ 0xcb26, 0xcb27, 0xcb28, 0xcb29, 0xcb2a, 0xcb2b, 0x0000, 0x0000,
+ 0x0000, 0xcb2c, 0xcb2d, 0xcb2e, 0xcb2f, 0xcb30, 0xcb31, 0xcb32,
+ 0xcb33, 0xcb34, 0xcb35, 0xcb36, 0xcb37, 0xcb38, 0xcb39, 0xcb3a,
+ 0xcb3b, 0xcb3c, 0x0000, 0xcb3d, 0xcb3e, 0xcb3f, 0xcb40, 0xcb41,
+ 0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0x0000, 0x0000,
+ 0x0000, 0xcb48, 0xcb49, 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e,
+ 0xcb4f, 0xcb50, 0xcb51, 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56,
+ 0xcb57, 0xcb58, 0x0000, 0xcb59, 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d,
+ 0xcb5e, 0xcb5f, 0xcb60, 0xcb61, 0xcb62, 0xcb63, 0x0000, 0x0000,
+ 0x0000, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xcb69, 0xcb6a,
+ 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, 0xcb70, 0xcb71, 0xcb72,
+ 0xcb73, 0xcb74, 0x0000, 0xcb75, 0xcb76, 0xcb77, 0xcb78, 0xcb79,
+ 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb7f, 0x0000, 0x0000,
+ 0x0000, 0xcb80, 0xcb81, 0xcb82, 0xcb83, 0xcb84, 0xcb85, 0xcb86,
+ 0xcb87, 0xcb88, 0xcb89, 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e,
+ 0xcb8f, 0xcb90, 0x0000, 0xcb91, 0xcb92, 0xcb93, 0xcb94, 0xcb95,
+ 0xcb96, 0xcb97, 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0x0000, 0x0000,
+ 0x0000, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, 0xcba0, 0xcba1, 0xcba2,
+ 0xcba3, 0xcba4, 0xcba5, 0xcba6, 0xcba7, 0xcba8, 0xcba9, 0xcbaa,
+ 0xcbab, 0xcbac, 0x0000, 0xcbad, 0xcbae, 0xcbaf, 0xcbb0, 0xcbb1,
+ 0xcbb2, 0xcbb3, 0xcbb4, 0xcbb5, 0xcbb6, 0xcbb7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcbb8, 0xcbb9, 0xcbba, 0xcbbb, 0xcbbc, 0xcbbd, 0xcbbe,
+ 0xcbbf, 0xcbc0, 0xcbc1, 0xcbc2, 0xcbc3, 0xcbc4, 0xcbc5, 0xcbc6,
+ 0xcbc7, 0xcbc8, 0x0000, 0xcbc9, 0xcbca, 0xcbcb, 0xcbcc, 0xcbcd,
+ 0xcbce, 0xcbcf, 0xcbd0, 0xcbd1, 0xcbd2, 0xcbd3, 0x0000, 0x0000,
+ 0x0000, 0xcbd4, 0xcbd5, 0xcbd6, 0xcbd7, 0xcbd8, 0xcbd9, 0xcbda,
+ 0xcbdb, 0xcbdc, 0xcbdd, 0xcbde, 0xcbdf, 0xcbe0, 0xcbe1, 0xcbe2,
+ 0xcbe3, 0xcbe4, 0x0000, 0xcbe5, 0xcbe6, 0xcbe7, 0xcbe8, 0xcbe9,
+ 0xcbea, 0xcbeb, 0xcbec, 0xcbed, 0xcbee, 0xcbef, 0x0000, 0x0000,
+ 0x0000, 0xcbf0, 0xcbf1, 0xcbf2, 0xcbf3, 0xcbf4, 0xcbf5, 0xcbf6,
+ 0xcbf7, 0xcbf8, 0xcbf9, 0xcbfa, 0xcbfb, 0xcbfc, 0xcbfd, 0xcbfe,
+ 0xcbff, 0xcc00, 0x0000, 0xcc01, 0xcc02, 0xcc03, 0xcc04, 0xcc05,
+ 0xcc06, 0xcc07, 0xcc08, 0xcc09, 0xcc0a, 0xcc0b, 0x0000, 0x0000,
+ 0x0000, 0xcc0c, 0xcc0d, 0xcc0e, 0xcc0f, 0xcc10, 0xcc11, 0xcc12,
+ 0xcc13, 0xcc14, 0xcc15, 0xcc16, 0xcc17, 0xcc18, 0xcc19, 0xcc1a,
+ 0xcc1b, 0xcc1c, 0x0000, 0xcc1d, 0xcc1e, 0xcc1f, 0xcc20, 0xcc21,
+ 0xcc22, 0xcc23, 0xcc24, 0xcc25, 0xcc26, 0xcc27, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcc28, 0xcc29, 0xcc2a, 0xcc2b, 0xcc2c, 0xcc2d, 0xcc2e,
+ 0xcc2f, 0xcc30, 0xcc31, 0xcc32, 0xcc33, 0xcc34, 0xcc35, 0xcc36,
+ 0xcc37, 0xcc38, 0x0000, 0xcc39, 0xcc3a, 0xcc3b, 0xcc3c, 0xcc3d,
+ 0xcc3e, 0xcc3f, 0xcc40, 0xcc41, 0xcc42, 0xcc43, 0x0000, 0x0000,
+ 0x0000, 0xcc44, 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xcc4a,
+ 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52,
+ 0xcc53, 0xcc54, 0x0000, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xcc59,
+ 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0x0000, 0x0000,
+ 0x0000, 0xcc60, 0xcc61, 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66,
+ 0xcc67, 0xcc68, 0xcc69, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e,
+ 0xcc6f, 0xcc70, 0x0000, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75,
+ 0xcc76, 0xcc77, 0xcc78, 0xcc79, 0xcc7a, 0xcc7b, 0x0000, 0x0000,
+ 0x0000, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc7f, 0xcc80, 0xcc81, 0xcc82,
+ 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, 0xcc88, 0xcc89, 0xcc8a,
+ 0xcc8b, 0xcc8c, 0x0000, 0xcc8d, 0xcc8e, 0xcc8f, 0xcc90, 0xcc91,
+ 0xcc92, 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97, 0x0000, 0x0000,
+ 0x0000, 0xcc98, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e,
+ 0xcc9f, 0xcca0, 0xcca1, 0xcca2, 0xcca3, 0xcca4, 0xcca5, 0xcca6,
+ 0xcca7, 0xcca8, 0x0000, 0xcca9, 0xccaa, 0xccab, 0xccac, 0xccad,
+ 0xccae, 0xccaf, 0xccb0, 0xccb1, 0xccb2, 0xccb3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xccb4, 0xccb5, 0xccb6, 0xccb7, 0xccb8, 0xccb9, 0xccba,
+ 0xccbb, 0xccbc, 0xccbd, 0xccbe, 0xccbf, 0xccc0, 0xccc1, 0xccc2,
+ 0xccc3, 0xccc4, 0x0000, 0xccc5, 0xccc6, 0xccc7, 0xccc8, 0xccc9,
+ 0xccca, 0xcccb, 0xcccc, 0xcccd, 0xccce, 0xcccf, 0x0000, 0x0000,
+ 0x0000, 0xccd0, 0xccd1, 0xccd2, 0xccd3, 0xccd4, 0xccd5, 0xccd6,
+ 0xccd7, 0xccd8, 0xccd9, 0xccda, 0xccdb, 0xccdc, 0xccdd, 0xccde,
+ 0xccdf, 0xcce0, 0x0000, 0xcce1, 0xcce2, 0xcce3, 0xcce4, 0xcce5,
+ 0xcce6, 0xcce7, 0xcce8, 0xcce9, 0xccea, 0xcceb, 0x0000, 0x0000,
+ 0x0000, 0xccec, 0xcced, 0xccee, 0xccef, 0xccf0, 0xccf1, 0xccf2,
+ 0xccf3, 0xccf4, 0xccf5, 0xccf6, 0xccf7, 0xccf8, 0xccf9, 0xccfa,
+ 0xccfb, 0xccfc, 0x0000, 0xccfd, 0xccfe, 0xccff, 0xcd00, 0xcd01,
+ 0xcd02, 0xcd03, 0xcd04, 0xcd05, 0xcd06, 0xcd07, 0x0000, 0x0000,
+ 0x0000, 0xcd08, 0xcd09, 0xcd0a, 0xcd0b, 0xcd0c, 0xcd0d, 0xcd0e,
+ 0xcd0f, 0xcd10, 0xcd11, 0xcd12, 0xcd13, 0xcd14, 0xcd15, 0xcd16,
+ 0xcd17, 0xcd18, 0x0000, 0xcd19, 0xcd1a, 0xcd1b, 0xcd1c, 0xcd1d,
+ 0xcd1e, 0xcd1f, 0xcd20, 0xcd21, 0xcd22, 0xcd23, 0x0000, 0x0000,
+ 0x0000, 0xcd24, 0xcd25, 0xcd26, 0xcd27, 0xcd28, 0xcd29, 0xcd2a,
+ 0xcd2b, 0xcd2c, 0xcd2d, 0xcd2e, 0xcd2f, 0xcd30, 0xcd31, 0xcd32,
+ 0xcd33, 0xcd34, 0x0000, 0xcd35, 0xcd36, 0xcd37, 0xcd38, 0xcd39,
+ 0xcd3a, 0xcd3b, 0xcd3c, 0xcd3d, 0xcd3e, 0xcd3f, 0x0000, 0x0000,
+ 0x0000, 0xcd40, 0xcd41, 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46,
+ 0xcd47, 0xcd48, 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e,
+ 0xcd4f, 0xcd50, 0x0000, 0xcd51, 0xcd52, 0xcd53, 0xcd54, 0xcd55,
+ 0xcd56, 0xcd57, 0xcd58, 0xcd59, 0xcd5a, 0xcd5b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f, 0xcd60, 0xcd61, 0xcd62,
+ 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67, 0xcd68, 0xcd69, 0xcd6a,
+ 0xcd6b, 0xcd6c, 0x0000, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, 0xcd71,
+ 0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77, 0x0000, 0x0000,
+ 0x0000, 0xcd78, 0xcd79, 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e,
+ 0xcd7f, 0xcd80, 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xcd85, 0xcd86,
+ 0xcd87, 0xcd88, 0x0000, 0xcd89, 0xcd8a, 0xcd8b, 0xcd8c, 0xcd8d,
+ 0xcd8e, 0xcd8f, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0x0000, 0x0000,
+ 0x0000, 0xcd94, 0xcd95, 0xcd96, 0xcd97, 0xcd98, 0xcd99, 0xcd9a,
+ 0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f, 0xcda0, 0xcda1, 0xcda2,
+ 0xcda3, 0xcda4, 0x0000, 0xcda5, 0xcda6, 0xcda7, 0xcda8, 0xcda9,
+ 0xcdaa, 0xcdab, 0xcdac, 0xcdad, 0xcdae, 0xcdaf, 0x0000, 0x0000,
+ 0x0000, 0xcdb0, 0xcdb1, 0xcdb2, 0xcdb3, 0xcdb4, 0xcdb5, 0xcdb6,
+ 0xcdb7, 0xcdb8, 0xcdb9, 0xcdba, 0xcdbb, 0xcdbc, 0xcdbd, 0xcdbe,
+ 0xcdbf, 0xcdc0, 0x0000, 0xcdc1, 0xcdc2, 0xcdc3, 0xcdc4, 0xcdc5,
+ 0xcdc6, 0xcdc7, 0xcdc8, 0xcdc9, 0xcdca, 0xcdcb, 0x0000, 0x0000,
+ 0x0000, 0xcdcc, 0xcdcd, 0xcdce, 0xcdcf, 0xcdd0, 0xcdd1, 0xcdd2,
+ 0xcdd3, 0xcdd4, 0xcdd5, 0xcdd6, 0xcdd7, 0xcdd8, 0xcdd9, 0xcdda,
+ 0xcddb, 0xcddc, 0x0000, 0xcddd, 0xcdde, 0xcddf, 0xcde0, 0xcde1,
+ 0xcde2, 0xcde3, 0xcde4, 0xcde5, 0xcde6, 0xcde7, 0x0000, 0x0000,
+ 0x0000, 0xcde8, 0xcde9, 0xcdea, 0xcdeb, 0xcdec, 0xcded, 0xcdee,
+ 0xcdef, 0xcdf0, 0xcdf1, 0xcdf2, 0xcdf3, 0xcdf4, 0xcdf5, 0xcdf6,
+ 0xcdf7, 0xcdf8, 0x0000, 0xcdf9, 0xcdfa, 0xcdfb, 0xcdfc, 0xcdfd,
+ 0xcdfe, 0xcdff, 0xce00, 0xce01, 0xce02, 0xce03, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xce04, 0xce05, 0xce06, 0xce07, 0xce08, 0xce09, 0xce0a,
+ 0xce0b, 0xce0c, 0xce0d, 0xce0e, 0xce0f, 0xce10, 0xce11, 0xce12,
+ 0xce13, 0xce14, 0x0000, 0xce15, 0xce16, 0xce17, 0xce18, 0xce19,
+ 0xce1a, 0xce1b, 0xce1c, 0xce1d, 0xce1e, 0xce1f, 0x0000, 0x0000,
+ 0x0000, 0xce20, 0xce21, 0xce22, 0xce23, 0xce24, 0xce25, 0xce26,
+ 0xce27, 0xce28, 0xce29, 0xce2a, 0xce2b, 0xce2c, 0xce2d, 0xce2e,
+ 0xce2f, 0xce30, 0x0000, 0xce31, 0xce32, 0xce33, 0xce34, 0xce35,
+ 0xce36, 0xce37, 0xce38, 0xce39, 0xce3a, 0xce3b, 0x0000, 0x0000,
+ 0x0000, 0xce3c, 0xce3d, 0xce3e, 0xce3f, 0xce40, 0xce41, 0xce42,
+ 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, 0xce48, 0xce49, 0xce4a,
+ 0xce4b, 0xce4c, 0x0000, 0xce4d, 0xce4e, 0xce4f, 0xce50, 0xce51,
+ 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57, 0x0000, 0x0000,
+ 0x0000, 0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e,
+ 0xce5f, 0xce60, 0xce61, 0xce62, 0xce63, 0xce64, 0xce65, 0xce66,
+ 0xce67, 0xce68, 0x0000, 0xce69, 0xce6a, 0xce6b, 0xce6c, 0xce6d,
+ 0xce6e, 0xce6f, 0xce70, 0xce71, 0xce72, 0xce73, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xce7a,
+ 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce7f, 0xce80, 0xce81, 0xce82,
+ 0xce83, 0xce84, 0x0000, 0xce85, 0xce86, 0xce87, 0xce88, 0xce89,
+ 0xce8a, 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f, 0x0000, 0x0000,
+ 0x0000, 0xce90, 0xce91, 0xce92, 0xce93, 0xce94, 0xce95, 0xce96,
+ 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xce9c, 0xce9d, 0xce9e,
+ 0xce9f, 0xcea0, 0x0000, 0xcea1, 0xcea2, 0xcea3, 0xcea4, 0xcea5,
+ 0xcea6, 0xcea7, 0xcea8, 0xcea9, 0xceaa, 0xceab, 0x0000, 0x0000,
+ 0x0000, 0xceac, 0xcead, 0xceae, 0xceaf, 0xceb0, 0xceb1, 0xceb2,
+ 0xceb3, 0xceb4, 0xceb5, 0xceb6, 0xceb7, 0xceb8, 0xceb9, 0xceba,
+ 0xcebb, 0xcebc, 0x0000, 0xcebd, 0xcebe, 0xcebf, 0xcec0, 0xcec1,
+ 0xcec2, 0xcec3, 0xcec4, 0xcec5, 0xcec6, 0xcec7, 0x0000, 0x0000,
+ 0x0000, 0xcec8, 0xcec9, 0xceca, 0xcecb, 0xcecc, 0xcecd, 0xcece,
+ 0xcecf, 0xced0, 0xced1, 0xced2, 0xced3, 0xced4, 0xced5, 0xced6,
+ 0xced7, 0xced8, 0x0000, 0xced9, 0xceda, 0xcedb, 0xcedc, 0xcedd,
+ 0xcede, 0xcedf, 0xcee0, 0xcee1, 0xcee2, 0xcee3, 0x0000, 0x0000,
+ 0x0000, 0xcee4, 0xcee5, 0xcee6, 0xcee7, 0xcee8, 0xcee9, 0xceea,
+ 0xceeb, 0xceec, 0xceed, 0xceee, 0xceef, 0xcef0, 0xcef1, 0xcef2,
+ 0xcef3, 0xcef4, 0x0000, 0xcef5, 0xcef6, 0xcef7, 0xcef8, 0xcef9,
+ 0xcefa, 0xcefb, 0xcefc, 0xcefd, 0xcefe, 0xceff, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcf00, 0xcf01, 0xcf02, 0xcf03, 0xcf04, 0xcf05, 0xcf06,
+ 0xcf07, 0xcf08, 0xcf09, 0xcf0a, 0xcf0b, 0xcf0c, 0xcf0d, 0xcf0e,
+ 0xcf0f, 0xcf10, 0x0000, 0xcf11, 0xcf12, 0xcf13, 0xcf14, 0xcf15,
+ 0xcf16, 0xcf17, 0xcf18, 0xcf19, 0xcf1a, 0xcf1b, 0x0000, 0x0000,
+ 0x0000, 0xcf1c, 0xcf1d, 0xcf1e, 0xcf1f, 0xcf20, 0xcf21, 0xcf22,
+ 0xcf23, 0xcf24, 0xcf25, 0xcf26, 0xcf27, 0xcf28, 0xcf29, 0xcf2a,
+ 0xcf2b, 0xcf2c, 0x0000, 0xcf2d, 0xcf2e, 0xcf2f, 0xcf30, 0xcf31,
+ 0xcf32, 0xcf33, 0xcf34, 0xcf35, 0xcf36, 0xcf37, 0x0000, 0x0000,
+ 0x0000, 0xcf38, 0xcf39, 0xcf3a, 0xcf3b, 0xcf3c, 0xcf3d, 0xcf3e,
+ 0xcf3f, 0xcf40, 0xcf41, 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46,
+ 0xcf47, 0xcf48, 0x0000, 0xcf49, 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d,
+ 0xcf4e, 0xcf4f, 0xcf50, 0xcf51, 0xcf52, 0xcf53, 0x0000, 0x0000,
+ 0x0000, 0xcf54, 0xcf55, 0xcf56, 0xcf57, 0xcf58, 0xcf59, 0xcf5a,
+ 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f, 0xcf60, 0xcf61, 0xcf62,
+ 0xcf63, 0xcf64, 0x0000, 0xcf65, 0xcf66, 0xcf67, 0xcf68, 0xcf69,
+ 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f, 0x0000, 0x0000,
+ 0x0000, 0xcf70, 0xcf71, 0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76,
+ 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e,
+ 0xcf7f, 0xcf80, 0x0000, 0xcf81, 0xcf82, 0xcf83, 0xcf84, 0xcf85,
+ 0xcf86, 0xcf87, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, 0x0000, 0x0000,
+ 0x0000, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92,
+ 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97, 0xcf98, 0xcf99, 0xcf9a,
+ 0xcf9b, 0xcf9c, 0x0000, 0xcf9d, 0xcf9e, 0xcf9f, 0xcfa0, 0xcfa1,
+ 0xcfa2, 0xcfa3, 0xcfa4, 0xcfa5, 0xcfa6, 0xcfa7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xcfa8, 0xcfa9, 0xcfaa, 0xcfab, 0xcfac, 0xcfad, 0xcfae,
+ 0xcfaf, 0xcfb0, 0xcfb1, 0xcfb2, 0xcfb3, 0xcfb4, 0xcfb5, 0xcfb6,
+ 0xcfb7, 0xcfb8, 0x0000, 0xcfb9, 0xcfba, 0xcfbb, 0xcfbc, 0xcfbd,
+ 0xcfbe, 0xcfbf, 0xcfc0, 0xcfc1, 0xcfc2, 0xcfc3, 0x0000, 0x0000,
+ 0x0000, 0xcfc4, 0xcfc5, 0xcfc6, 0xcfc7, 0xcfc8, 0xcfc9, 0xcfca,
+ 0xcfcb, 0xcfcc, 0xcfcd, 0xcfce, 0xcfcf, 0xcfd0, 0xcfd1, 0xcfd2,
+ 0xcfd3, 0xcfd4, 0x0000, 0xcfd5, 0xcfd6, 0xcfd7, 0xcfd8, 0xcfd9,
+ 0xcfda, 0xcfdb, 0xcfdc, 0xcfdd, 0xcfde, 0xcfdf, 0x0000, 0x0000,
+ 0x0000, 0xcfe0, 0xcfe1, 0xcfe2, 0xcfe3, 0xcfe4, 0xcfe5, 0xcfe6,
+ 0xcfe7, 0xcfe8, 0xcfe9, 0xcfea, 0xcfeb, 0xcfec, 0xcfed, 0xcfee,
+ 0xcfef, 0xcff0, 0x0000, 0xcff1, 0xcff2, 0xcff3, 0xcff4, 0xcff5,
+ 0xcff6, 0xcff7, 0xcff8, 0xcff9, 0xcffa, 0xcffb, 0x0000, 0x0000,
+ 0x0000, 0xcffc, 0xcffd, 0xcffe, 0xcfff, 0xd000, 0xd001, 0xd002,
+ 0xd003, 0xd004, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, 0xd00a,
+ 0xd00b, 0xd00c, 0x0000, 0xd00d, 0xd00e, 0xd00f, 0xd010, 0xd011,
+ 0xd012, 0xd013, 0xd014, 0xd015, 0xd016, 0xd017, 0x0000, 0x0000,
+ 0x0000, 0xd018, 0xd019, 0xd01a, 0xd01b, 0xd01c, 0xd01d, 0xd01e,
+ 0xd01f, 0xd020, 0xd021, 0xd022, 0xd023, 0xd024, 0xd025, 0xd026,
+ 0xd027, 0xd028, 0x0000, 0xd029, 0xd02a, 0xd02b, 0xd02c, 0xd02d,
+ 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd032, 0xd033, 0x0000, 0x0000,
+ 0x0000, 0xd034, 0xd035, 0xd036, 0xd037, 0xd038, 0xd039, 0xd03a,
+ 0xd03b, 0xd03c, 0xd03d, 0xd03e, 0xd03f, 0xd040, 0xd041, 0xd042,
+ 0xd043, 0xd044, 0x0000, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049,
+ 0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd050, 0xd051, 0xd052, 0xd053, 0xd054, 0xd055, 0xd056,
+ 0xd057, 0xd058, 0xd059, 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e,
+ 0xd05f, 0xd060, 0x0000, 0xd061, 0xd062, 0xd063, 0xd064, 0xd065,
+ 0xd066, 0xd067, 0xd068, 0xd069, 0xd06a, 0xd06b, 0x0000, 0x0000,
+ 0x0000, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, 0xd071, 0xd072,
+ 0xd073, 0xd074, 0xd075, 0xd076, 0xd077, 0xd078, 0xd079, 0xd07a,
+ 0xd07b, 0xd07c, 0x0000, 0xd07d, 0xd07e, 0xd07f, 0xd080, 0xd081,
+ 0xd082, 0xd083, 0xd084, 0xd085, 0xd086, 0xd087, 0x0000, 0x0000,
+ 0x0000, 0xd088, 0xd089, 0xd08a, 0xd08b, 0xd08c, 0xd08d, 0xd08e,
+ 0xd08f, 0xd090, 0xd091, 0xd092, 0xd093, 0xd094, 0xd095, 0xd096,
+ 0xd097, 0xd098, 0x0000, 0xd099, 0xd09a, 0xd09b, 0xd09c, 0xd09d,
+ 0xd09e, 0xd09f, 0xd0a0, 0xd0a1, 0xd0a2, 0xd0a3, 0x0000, 0x0000,
+ 0x0000, 0xd0a4, 0xd0a5, 0xd0a6, 0xd0a7, 0xd0a8, 0xd0a9, 0xd0aa,
+ 0xd0ab, 0xd0ac, 0xd0ad, 0xd0ae, 0xd0af, 0xd0b0, 0xd0b1, 0xd0b2,
+ 0xd0b3, 0xd0b4, 0x0000, 0xd0b5, 0xd0b6, 0xd0b7, 0xd0b8, 0xd0b9,
+ 0xd0ba, 0xd0bb, 0xd0bc, 0xd0bd, 0xd0be, 0xd0bf, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd0c0, 0xd0c1, 0xd0c2, 0xd0c3, 0xd0c4, 0xd0c5, 0xd0c6,
+ 0xd0c7, 0xd0c8, 0xd0c9, 0xd0ca, 0xd0cb, 0xd0cc, 0xd0cd, 0xd0ce,
+ 0xd0cf, 0xd0d0, 0x0000, 0xd0d1, 0xd0d2, 0xd0d3, 0xd0d4, 0xd0d5,
+ 0xd0d6, 0xd0d7, 0xd0d8, 0xd0d9, 0xd0da, 0xd0db, 0x0000, 0x0000,
+ 0x0000, 0xd0dc, 0xd0dd, 0xd0de, 0xd0df, 0xd0e0, 0xd0e1, 0xd0e2,
+ 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e6, 0xd0e7, 0xd0e8, 0xd0e9, 0xd0ea,
+ 0xd0eb, 0xd0ec, 0x0000, 0xd0ed, 0xd0ee, 0xd0ef, 0xd0f0, 0xd0f1,
+ 0xd0f2, 0xd0f3, 0xd0f4, 0xd0f5, 0xd0f6, 0xd0f7, 0x0000, 0x0000,
+ 0x0000, 0xd0f8, 0xd0f9, 0xd0fa, 0xd0fb, 0xd0fc, 0xd0fd, 0xd0fe,
+ 0xd0ff, 0xd100, 0xd101, 0xd102, 0xd103, 0xd104, 0xd105, 0xd106,
+ 0xd107, 0xd108, 0x0000, 0xd109, 0xd10a, 0xd10b, 0xd10c, 0xd10d,
+ 0xd10e, 0xd10f, 0xd110, 0xd111, 0xd112, 0xd113, 0x0000, 0x0000,
+ 0x0000, 0xd114, 0xd115, 0xd116, 0xd117, 0xd118, 0xd119, 0xd11a,
+ 0xd11b, 0xd11c, 0xd11d, 0xd11e, 0xd11f, 0xd120, 0xd121, 0xd122,
+ 0xd123, 0xd124, 0x0000, 0xd125, 0xd126, 0xd127, 0xd128, 0xd129,
+ 0xd12a, 0xd12b, 0xd12c, 0xd12d, 0xd12e, 0xd12f, 0x0000, 0x0000,
+ 0x0000, 0xd130, 0xd131, 0xd132, 0xd133, 0xd134, 0xd135, 0xd136,
+ 0xd137, 0xd138, 0xd139, 0xd13a, 0xd13b, 0xd13c, 0xd13d, 0xd13e,
+ 0xd13f, 0xd140, 0x0000, 0xd141, 0xd142, 0xd143, 0xd144, 0xd145,
+ 0xd146, 0xd147, 0xd148, 0xd149, 0xd14a, 0xd14b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd14c, 0xd14d, 0xd14e, 0xd14f, 0xd150, 0xd151, 0xd152,
+ 0xd153, 0xd154, 0xd155, 0xd156, 0xd157, 0xd158, 0xd159, 0xd15a,
+ 0xd15b, 0xd15c, 0x0000, 0xd15d, 0xd15e, 0xd15f, 0xd160, 0xd161,
+ 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167, 0x0000, 0x0000,
+ 0x0000, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e,
+ 0xd16f, 0xd170, 0xd171, 0xd172, 0xd173, 0xd174, 0xd175, 0xd176,
+ 0xd177, 0xd178, 0x0000, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d,
+ 0xd17e, 0xd17f, 0xd180, 0xd181, 0xd182, 0xd183, 0x0000, 0x0000,
+ 0x0000, 0xd184, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, 0xd18a,
+ 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd192,
+ 0xd193, 0xd194, 0x0000, 0xd195, 0xd196, 0xd197, 0xd198, 0xd199,
+ 0xd19a, 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f, 0x0000, 0x0000,
+ 0x0000, 0xd1a0, 0xd1a1, 0xd1a2, 0xd1a3, 0xd1a4, 0xd1a5, 0xd1a6,
+ 0xd1a7, 0xd1a8, 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ad, 0xd1ae,
+ 0xd1af, 0xd1b0, 0x0000, 0xd1b1, 0xd1b2, 0xd1b3, 0xd1b4, 0xd1b5,
+ 0xd1b6, 0xd1b7, 0xd1b8, 0xd1b9, 0xd1ba, 0xd1bb, 0x0000, 0x0000,
+ 0x0000, 0xd1bc, 0xd1bd, 0xd1be, 0xd1bf, 0xd1c0, 0xd1c1, 0xd1c2,
+ 0xd1c3, 0xd1c4, 0xd1c5, 0xd1c6, 0xd1c7, 0xd1c8, 0xd1c9, 0xd1ca,
+ 0xd1cb, 0xd1cc, 0x0000, 0xd1cd, 0xd1ce, 0xd1cf, 0xd1d0, 0xd1d1,
+ 0xd1d2, 0xd1d3, 0xd1d4, 0xd1d5, 0xd1d6, 0xd1d7, 0x0000, 0x0000,
+ 0x0000, 0xd1d8, 0xd1d9, 0xd1da, 0xd1db, 0xd1dc, 0xd1dd, 0xd1de,
+ 0xd1df, 0xd1e0, 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6,
+ 0xd1e7, 0xd1e8, 0x0000, 0xd1e9, 0xd1ea, 0xd1eb, 0xd1ec, 0xd1ed,
+ 0xd1ee, 0xd1ef, 0xd1f0, 0xd1f1, 0xd1f2, 0xd1f3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd1f4, 0xd1f5, 0xd1f6, 0xd1f7, 0xd1f8, 0xd1f9, 0xd1fa,
+ 0xd1fb, 0xd1fc, 0xd1fd, 0xd1fe, 0xd1ff, 0xd200, 0xd201, 0xd202,
+ 0xd203, 0xd204, 0x0000, 0xd205, 0xd206, 0xd207, 0xd208, 0xd209,
+ 0xd20a, 0xd20b, 0xd20c, 0xd20d, 0xd20e, 0xd20f, 0x0000, 0x0000,
+ 0x0000, 0xd210, 0xd211, 0xd212, 0xd213, 0xd214, 0xd215, 0xd216,
+ 0xd217, 0xd218, 0xd219, 0xd21a, 0xd21b, 0xd21c, 0xd21d, 0xd21e,
+ 0xd21f, 0xd220, 0x0000, 0xd221, 0xd222, 0xd223, 0xd224, 0xd225,
+ 0xd226, 0xd227, 0xd228, 0xd229, 0xd22a, 0xd22b, 0x0000, 0x0000,
+ 0x0000, 0xd22c, 0xd22d, 0xd22e, 0xd22f, 0xd230, 0xd231, 0xd232,
+ 0xd233, 0xd234, 0xd235, 0xd236, 0xd237, 0xd238, 0xd239, 0xd23a,
+ 0xd23b, 0xd23c, 0x0000, 0xd23d, 0xd23e, 0xd23f, 0xd240, 0xd241,
+ 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, 0x0000, 0x0000,
+ 0x0000, 0xd248, 0xd249, 0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e,
+ 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, 0xd256,
+ 0xd257, 0xd258, 0x0000, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d,
+ 0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0x0000, 0x0000,
+ 0x0000, 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xd26a,
+ 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272,
+ 0xd273, 0xd274, 0x0000, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279,
+ 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd27f, 0x0000, 0x0000,
+ 0x0000, 0xd280, 0xd281, 0xd282, 0xd283, 0xd284, 0xd285, 0xd286,
+ 0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e,
+ 0xd28f, 0xd290, 0x0000, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295,
+ 0xd296, 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd29c, 0xd29d, 0xd29e, 0xd29f, 0xd2a0, 0xd2a1, 0xd2a2,
+ 0xd2a3, 0xd2a4, 0xd2a5, 0xd2a6, 0xd2a7, 0xd2a8, 0xd2a9, 0xd2aa,
+ 0xd2ab, 0xd2ac, 0x0000, 0xd2ad, 0xd2ae, 0xd2af, 0xd2b0, 0xd2b1,
+ 0xd2b2, 0xd2b3, 0xd2b4, 0xd2b5, 0xd2b6, 0xd2b7, 0x0000, 0x0000,
+ 0x0000, 0xd2b8, 0xd2b9, 0xd2ba, 0xd2bb, 0xd2bc, 0xd2bd, 0xd2be,
+ 0xd2bf, 0xd2c0, 0xd2c1, 0xd2c2, 0xd2c3, 0xd2c4, 0xd2c5, 0xd2c6,
+ 0xd2c7, 0xd2c8, 0x0000, 0xd2c9, 0xd2ca, 0xd2cb, 0xd2cc, 0xd2cd,
+ 0xd2ce, 0xd2cf, 0xd2d0, 0xd2d1, 0xd2d2, 0xd2d3, 0x0000, 0x0000,
+ 0x0000, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2d7, 0xd2d8, 0xd2d9, 0xd2da,
+ 0xd2db, 0xd2dc, 0xd2dd, 0xd2de, 0xd2df, 0xd2e0, 0xd2e1, 0xd2e2,
+ 0xd2e3, 0xd2e4, 0x0000, 0xd2e5, 0xd2e6, 0xd2e7, 0xd2e8, 0xd2e9,
+ 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ed, 0xd2ee, 0xd2ef, 0x0000, 0x0000,
+ 0x0000, 0xd2f0, 0xd2f1, 0xd2f2, 0xd2f3, 0xd2f4, 0xd2f5, 0xd2f6,
+ 0xd2f7, 0xd2f8, 0xd2f9, 0xd2fa, 0xd2fb, 0xd2fc, 0xd2fd, 0xd2fe,
+ 0xd2ff, 0xd300, 0x0000, 0xd301, 0xd302, 0xd303, 0xd304, 0xd305,
+ 0xd306, 0xd307, 0xd308, 0xd309, 0xd30a, 0xd30b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd30c, 0xd30d, 0xd30e, 0xd30f, 0xd310, 0xd311, 0xd312,
+ 0xd313, 0xd314, 0xd315, 0xd316, 0xd317, 0xd318, 0xd319, 0xd31a,
+ 0xd31b, 0xd31c, 0x0000, 0xd31d, 0xd31e, 0xd31f, 0xd320, 0xd321,
+ 0xd322, 0xd323, 0xd324, 0xd325, 0xd326, 0xd327, 0x0000, 0x0000,
+ 0x0000, 0xd328, 0xd329, 0xd32a, 0xd32b, 0xd32c, 0xd32d, 0xd32e,
+ 0xd32f, 0xd330, 0xd331, 0xd332, 0xd333, 0xd334, 0xd335, 0xd336,
+ 0xd337, 0xd338, 0x0000, 0xd339, 0xd33a, 0xd33b, 0xd33c, 0xd33d,
+ 0xd33e, 0xd33f, 0xd340, 0xd341, 0xd342, 0xd343, 0x0000, 0x0000,
+ 0x0000, 0xd344, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, 0xd34a,
+ 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352,
+ 0xd353, 0xd354, 0x0000, 0xd355, 0xd356, 0xd357, 0xd358, 0xd359,
+ 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f, 0x0000, 0x0000,
+ 0x0000, 0xd360, 0xd361, 0xd362, 0xd363, 0xd364, 0xd365, 0xd366,
+ 0xd367, 0xd368, 0xd369, 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e,
+ 0xd36f, 0xd370, 0x0000, 0xd371, 0xd372, 0xd373, 0xd374, 0xd375,
+ 0xd376, 0xd377, 0xd378, 0xd379, 0xd37a, 0xd37b, 0x0000, 0x0000,
+ 0x0000, 0xd37c, 0xd37d, 0xd37e, 0xd37f, 0xd380, 0xd381, 0xd382,
+ 0xd383, 0xd384, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a,
+ 0xd38b, 0xd38c, 0x0000, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391,
+ 0xd392, 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd398, 0xd399, 0xd39a, 0xd39b, 0xd39c, 0xd39d, 0xd39e,
+ 0xd39f, 0xd3a0, 0xd3a1, 0xd3a2, 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a6,
+ 0xd3a7, 0xd3a8, 0x0000, 0xd3a9, 0xd3aa, 0xd3ab, 0xd3ac, 0xd3ad,
+ 0xd3ae, 0xd3af, 0xd3b0, 0xd3b1, 0xd3b2, 0xd3b3, 0x0000, 0x0000,
+ 0x0000, 0xd3b4, 0xd3b5, 0xd3b6, 0xd3b7, 0xd3b8, 0xd3b9, 0xd3ba,
+ 0xd3bb, 0xd3bc, 0xd3bd, 0xd3be, 0xd3bf, 0xd3c0, 0xd3c1, 0xd3c2,
+ 0xd3c3, 0xd3c4, 0x0000, 0xd3c5, 0xd3c6, 0xd3c7, 0xd3c8, 0xd3c9,
+ 0xd3ca, 0xd3cb, 0xd3cc, 0xd3cd, 0xd3ce, 0xd3cf, 0x0000, 0x0000,
+ 0x0000, 0xd3d0, 0xd3d1, 0xd3d2, 0xd3d3, 0xd3d4, 0xd3d5, 0xd3d6,
+ 0xd3d7, 0xd3d8, 0xd3d9, 0xd3da, 0xd3db, 0xd3dc, 0xd3dd, 0xd3de,
+ 0xd3df, 0xd3e0, 0x0000, 0xd3e1, 0xd3e2, 0xd3e3, 0xd3e4, 0xd3e5,
+ 0xd3e6, 0xd3e7, 0xd3e8, 0xd3e9, 0xd3ea, 0xd3eb, 0x0000, 0x0000,
+ 0x0000, 0xd3ec, 0xd3ed, 0xd3ee, 0xd3ef, 0xd3f0, 0xd3f1, 0xd3f2,
+ 0xd3f3, 0xd3f4, 0xd3f5, 0xd3f6, 0xd3f7, 0xd3f8, 0xd3f9, 0xd3fa,
+ 0xd3fb, 0xd3fc, 0x0000, 0xd3fd, 0xd3fe, 0xd3ff, 0xd400, 0xd401,
+ 0xd402, 0xd403, 0xd404, 0xd405, 0xd406, 0xd407, 0x0000, 0x0000,
+ 0x0000, 0xd408, 0xd409, 0xd40a, 0xd40b, 0xd40c, 0xd40d, 0xd40e,
+ 0xd40f, 0xd410, 0xd411, 0xd412, 0xd413, 0xd414, 0xd415, 0xd416,
+ 0xd417, 0xd418, 0x0000, 0xd419, 0xd41a, 0xd41b, 0xd41c, 0xd41d,
+ 0xd41e, 0xd41f, 0xd420, 0xd421, 0xd422, 0xd423, 0x0000, 0x0000,
+ 0x0000, 0xd424, 0xd425, 0xd426, 0xd427, 0xd428, 0xd429, 0xd42a,
+ 0xd42b, 0xd42c, 0xd42d, 0xd42e, 0xd42f, 0xd430, 0xd431, 0xd432,
+ 0xd433, 0xd434, 0x0000, 0xd435, 0xd436, 0xd437, 0xd438, 0xd439,
+ 0xd43a, 0xd43b, 0xd43c, 0xd43d, 0xd43e, 0xd43f, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd440, 0xd441, 0xd442, 0xd443, 0xd444, 0xd445, 0xd446,
+ 0xd447, 0xd448, 0xd449, 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e,
+ 0xd44f, 0xd450, 0x0000, 0xd451, 0xd452, 0xd453, 0xd454, 0xd455,
+ 0xd456, 0xd457, 0xd458, 0xd459, 0xd45a, 0xd45b, 0x0000, 0x0000,
+ 0x0000, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xd460, 0xd461, 0xd462,
+ 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469, 0xd46a,
+ 0xd46b, 0xd46c, 0x0000, 0xd46d, 0xd46e, 0xd46f, 0xd470, 0xd471,
+ 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, 0x0000, 0x0000,
+ 0x0000, 0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e,
+ 0xd47f, 0xd480, 0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486,
+ 0xd487, 0xd488, 0x0000, 0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d,
+ 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd492, 0xd493, 0x0000, 0x0000,
+ 0x0000, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, 0xd499, 0xd49a,
+ 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, 0xd4a0, 0xd4a1, 0xd4a2,
+ 0xd4a3, 0xd4a4, 0x0000, 0xd4a5, 0xd4a6, 0xd4a7, 0xd4a8, 0xd4a9,
+ 0xd4aa, 0xd4ab, 0xd4ac, 0xd4ad, 0xd4ae, 0xd4af, 0x0000, 0x0000,
+ 0x0000, 0xd4b0, 0xd4b1, 0xd4b2, 0xd4b3, 0xd4b4, 0xd4b5, 0xd4b6,
+ 0xd4b7, 0xd4b8, 0xd4b9, 0xd4ba, 0xd4bb, 0xd4bc, 0xd4bd, 0xd4be,
+ 0xd4bf, 0xd4c0, 0x0000, 0xd4c1, 0xd4c2, 0xd4c3, 0xd4c4, 0xd4c5,
+ 0xd4c6, 0xd4c7, 0xd4c8, 0xd4c9, 0xd4ca, 0xd4cb, 0x0000, 0x0000,
+ 0x0000, 0xd4cc, 0xd4cd, 0xd4ce, 0xd4cf, 0xd4d0, 0xd4d1, 0xd4d2,
+ 0xd4d3, 0xd4d4, 0xd4d5, 0xd4d6, 0xd4d7, 0xd4d8, 0xd4d9, 0xd4da,
+ 0xd4db, 0xd4dc, 0x0000, 0xd4dd, 0xd4de, 0xd4df, 0xd4e0, 0xd4e1,
+ 0xd4e2, 0xd4e3, 0xd4e4, 0xd4e5, 0xd4e6, 0xd4e7, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd4e8, 0xd4e9, 0xd4ea, 0xd4eb, 0xd4ec, 0xd4ed, 0xd4ee,
+ 0xd4ef, 0xd4f0, 0xd4f1, 0xd4f2, 0xd4f3, 0xd4f4, 0xd4f5, 0xd4f6,
+ 0xd4f7, 0xd4f8, 0x0000, 0xd4f9, 0xd4fa, 0xd4fb, 0xd4fc, 0xd4fd,
+ 0xd4fe, 0xd4ff, 0xd500, 0xd501, 0xd502, 0xd503, 0x0000, 0x0000,
+ 0x0000, 0xd504, 0xd505, 0xd506, 0xd507, 0xd508, 0xd509, 0xd50a,
+ 0xd50b, 0xd50c, 0xd50d, 0xd50e, 0xd50f, 0xd510, 0xd511, 0xd512,
+ 0xd513, 0xd514, 0x0000, 0xd515, 0xd516, 0xd517, 0xd518, 0xd519,
+ 0xd51a, 0xd51b, 0xd51c, 0xd51d, 0xd51e, 0xd51f, 0x0000, 0x0000,
+ 0x0000, 0xd520, 0xd521, 0xd522, 0xd523, 0xd524, 0xd525, 0xd526,
+ 0xd527, 0xd528, 0xd529, 0xd52a, 0xd52b, 0xd52c, 0xd52d, 0xd52e,
+ 0xd52f, 0xd530, 0x0000, 0xd531, 0xd532, 0xd533, 0xd534, 0xd535,
+ 0xd536, 0xd537, 0xd538, 0xd539, 0xd53a, 0xd53b, 0x0000, 0x0000,
+ 0x0000, 0xd53c, 0xd53d, 0xd53e, 0xd53f, 0xd540, 0xd541, 0xd542,
+ 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, 0xd54a,
+ 0xd54b, 0xd54c, 0x0000, 0xd54d, 0xd54e, 0xd54f, 0xd550, 0xd551,
+ 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd558, 0xd559, 0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e,
+ 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, 0xd564, 0xd565, 0xd566,
+ 0xd567, 0xd568, 0x0000, 0xd569, 0xd56a, 0xd56b, 0xd56c, 0xd56d,
+ 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, 0x0000, 0x0000,
+ 0x0000, 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a,
+ 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd57f, 0xd580, 0xd581, 0xd582,
+ 0xd583, 0xd584, 0x0000, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589,
+ 0xd58a, 0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f, 0x0000, 0x0000,
+ 0x0000, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, 0xd595, 0xd596,
+ 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, 0xd59d, 0xd59e,
+ 0xd59f, 0xd5a0, 0x0000, 0xd5a1, 0xd5a2, 0xd5a3, 0xd5a4, 0xd5a5,
+ 0xd5a6, 0xd5a7, 0xd5a8, 0xd5a9, 0xd5aa, 0xd5ab, 0x0000, 0x0000,
+ 0x0000, 0xd5ac, 0xd5ad, 0xd5ae, 0xd5af, 0xd5b0, 0xd5b1, 0xd5b2,
+ 0xd5b3, 0xd5b4, 0xd5b5, 0xd5b6, 0xd5b7, 0xd5b8, 0xd5b9, 0xd5ba,
+ 0xd5bb, 0xd5bc, 0x0000, 0xd5bd, 0xd5be, 0xd5bf, 0xd5c0, 0xd5c1,
+ 0xd5c2, 0xd5c3, 0xd5c4, 0xd5c5, 0xd5c6, 0xd5c7, 0x0000, 0x0000,
+ 0x0000, 0xd5c8, 0xd5c9, 0xd5ca, 0xd5cb, 0xd5cc, 0xd5cd, 0xd5ce,
+ 0xd5cf, 0xd5d0, 0xd5d1, 0xd5d2, 0xd5d3, 0xd5d4, 0xd5d5, 0xd5d6,
+ 0xd5d7, 0xd5d8, 0x0000, 0xd5d9, 0xd5da, 0xd5db, 0xd5dc, 0xd5dd,
+ 0xd5de, 0xd5df, 0xd5e0, 0xd5e1, 0xd5e2, 0xd5e3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd5e4, 0xd5e5, 0xd5e6, 0xd5e7, 0xd5e8, 0xd5e9, 0xd5ea,
+ 0xd5eb, 0xd5ec, 0xd5ed, 0xd5ee, 0xd5ef, 0xd5f0, 0xd5f1, 0xd5f2,
+ 0xd5f3, 0xd5f4, 0x0000, 0xd5f5, 0xd5f6, 0xd5f7, 0xd5f8, 0xd5f9,
+ 0xd5fa, 0xd5fb, 0xd5fc, 0xd5fd, 0xd5fe, 0xd5ff, 0x0000, 0x0000,
+ 0x0000, 0xd600, 0xd601, 0xd602, 0xd603, 0xd604, 0xd605, 0xd606,
+ 0xd607, 0xd608, 0xd609, 0xd60a, 0xd60b, 0xd60c, 0xd60d, 0xd60e,
+ 0xd60f, 0xd610, 0x0000, 0xd611, 0xd612, 0xd613, 0xd614, 0xd615,
+ 0xd616, 0xd617, 0xd618, 0xd619, 0xd61a, 0xd61b, 0x0000, 0x0000,
+ 0x0000, 0xd61c, 0xd61d, 0xd61e, 0xd61f, 0xd620, 0xd621, 0xd622,
+ 0xd623, 0xd624, 0xd625, 0xd626, 0xd627, 0xd628, 0xd629, 0xd62a,
+ 0xd62b, 0xd62c, 0x0000, 0xd62d, 0xd62e, 0xd62f, 0xd630, 0xd631,
+ 0xd632, 0xd633, 0xd634, 0xd635, 0xd636, 0xd637, 0x0000, 0x0000,
+ 0x0000, 0xd638, 0xd639, 0xd63a, 0xd63b, 0xd63c, 0xd63d, 0xd63e,
+ 0xd63f, 0xd640, 0xd641, 0xd642, 0xd643, 0xd644, 0xd645, 0xd646,
+ 0xd647, 0xd648, 0x0000, 0xd649, 0xd64a, 0xd64b, 0xd64c, 0xd64d,
+ 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, 0x0000, 0x0000,
+ 0x0000, 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a,
+ 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662,
+ 0xd663, 0xd664, 0x0000, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669,
+ 0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0x0000, 0x0000,
+ 0x0000, 0xd670, 0xd671, 0xd672, 0xd673, 0xd674, 0xd675, 0xd676,
+ 0xd677, 0xd678, 0xd679, 0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e,
+ 0xd67f, 0xd680, 0x0000, 0xd681, 0xd682, 0xd683, 0xd684, 0xd685,
+ 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, 0xd68b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692,
+ 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a,
+ 0xd69b, 0xd69c, 0x0000, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd6a1,
+ 0xd6a2, 0xd6a3, 0xd6a4, 0xd6a5, 0xd6a6, 0xd6a7, 0x0000, 0x0000,
+ 0x0000, 0xd6a8, 0xd6a9, 0xd6aa, 0xd6ab, 0xd6ac, 0xd6ad, 0xd6ae,
+ 0xd6af, 0xd6b0, 0xd6b1, 0xd6b2, 0xd6b3, 0xd6b4, 0xd6b5, 0xd6b6,
+ 0xd6b7, 0xd6b8, 0x0000, 0xd6b9, 0xd6ba, 0xd6bb, 0xd6bc, 0xd6bd,
+ 0xd6be, 0xd6bf, 0xd6c0, 0xd6c1, 0xd6c2, 0xd6c3, 0x0000, 0x0000,
+ 0x0000, 0xd6c4, 0xd6c5, 0xd6c6, 0xd6c7, 0xd6c8, 0xd6c9, 0xd6ca,
+ 0xd6cb, 0xd6cc, 0xd6cd, 0xd6ce, 0xd6cf, 0xd6d0, 0xd6d1, 0xd6d2,
+ 0xd6d3, 0xd6d4, 0x0000, 0xd6d5, 0xd6d6, 0xd6d7, 0xd6d8, 0xd6d9,
+ 0xd6da, 0xd6db, 0xd6dc, 0xd6dd, 0xd6de, 0xd6df, 0x0000, 0x0000,
+ 0x0000, 0xd6e0, 0xd6e1, 0xd6e2, 0xd6e3, 0xd6e4, 0xd6e5, 0xd6e6,
+ 0xd6e7, 0xd6e8, 0xd6e9, 0xd6ea, 0xd6eb, 0xd6ec, 0xd6ed, 0xd6ee,
+ 0xd6ef, 0xd6f0, 0x0000, 0xd6f1, 0xd6f2, 0xd6f3, 0xd6f4, 0xd6f5,
+ 0xd6f6, 0xd6f7, 0xd6f8, 0xd6f9, 0xd6fa, 0xd6fb, 0x0000, 0x0000,
+ 0x0000, 0xd6fc, 0xd6fd, 0xd6fe, 0xd6ff, 0xd700, 0xd701, 0xd702,
+ 0xd703, 0xd704, 0xd705, 0xd706, 0xd707, 0xd708, 0xd709, 0xd70a,
+ 0xd70b, 0xd70c, 0x0000, 0xd70d, 0xd70e, 0xd70f, 0xd710, 0xd711,
+ 0xd712, 0xd713, 0xd714, 0xd715, 0xd716, 0xd717, 0x0000, 0x0000,
+ 0x0000, 0xd718, 0xd719, 0xd71a, 0xd71b, 0xd71c, 0xd71d, 0xd71e,
+ 0xd71f, 0xd720, 0xd721, 0xd722, 0xd723, 0xd724, 0xd725, 0xd726,
+ 0xd727, 0xd728, 0x0000, 0xd729, 0xd72a, 0xd72b, 0xd72c, 0xd72d,
+ 0xd72e, 0xd72f, 0xd730, 0xd731, 0xd732, 0xd733, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xd734, 0xd735, 0xd736, 0xd737, 0xd738, 0xd739, 0xd73a,
+ 0xd73b, 0xd73c, 0xd73d, 0xd73e, 0xd73f, 0xd740, 0xd741, 0xd742,
+ 0xd743, 0xd744, 0x0000, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749,
+ 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0x0000, 0x0000,
+ 0x0000, 0xd750, 0xd751, 0xd752, 0xd753, 0xd754, 0xd755, 0xd756,
+ 0xd757, 0xd758, 0xd759, 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e,
+ 0xd75f, 0xd760, 0x0000, 0xd761, 0xd762, 0xd763, 0xd764, 0xd765,
+ 0xd766, 0xd767, 0xd768, 0xd769, 0xd76a, 0xd76b, 0x0000, 0x0000,
+ 0x0000, 0xd76c, 0xd76d, 0xd76e, 0xd76f, 0xd770, 0xd771, 0xd772,
+ 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, 0xd778, 0xd779, 0xd77a,
+ 0xd77b, 0xd77c, 0x0000, 0xd77d, 0xd77e, 0xd77f, 0xd780, 0xd781,
+ 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0x0000, 0x0000,
+ 0x0000, 0xd788, 0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e,
+ 0xd78f, 0xd790, 0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796,
+ 0xd797, 0xd798, 0x0000, 0xd799, 0xd79a, 0xd79b, 0xd79c, 0xd79d,
+ 0xd79e, 0xd79f, 0xd7a0, 0xd7a1, 0xd7a2, 0xd7a3, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3164, 0x3001, 0x3002, 0x30fb, 0x2025, 0x22ef, 0x00a8,
+ 0x3003, 0x2013, 0x2014, 0x2016, 0xff3c, 0xff5e, 0x2018, 0x2019,
+ 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b,
+ 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7,
+ 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032,
+ 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640,
+ 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7,
+ 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6,
+ 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190,
+ 0x2191, 0x2193, 0x2194, 0x3013, 0x00ab, 0x00bb, 0x221a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 0x2208, 0x220b,
+ 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0x2227, 0x2228,
+ 0xffe2, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0x02dc, 0x02c7,
+ 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf,
+ 0x2236, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1,
+ 0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667,
+ 0x2663, 0x25c9, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4,
+ 0x25a5, 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e,
+ 0x261c, 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199,
+ 0x2196, 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c,
+ 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07,
+ 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f,
+ 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17,
+ 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f,
+ 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27,
+ 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f,
+ 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37,
+ 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f,
+ 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55,
+ 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d,
+ 0xffe3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3165, 0x3166, 0x3167,
+ 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f,
+ 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177,
+ 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f,
+ 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187,
+ 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176,
+ 0x2177, 0x2178, 0x2179, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
+ 0x2168, 0x2169, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
+ 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8,
+ 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6,
+ 0x03c7, 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c,
+ 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513,
+ 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520,
+ 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538,
+ 0x2542, 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e,
+ 0x250d, 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529,
+ 0x252a, 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539,
+ 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545,
+ 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3,
+ 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d,
+ 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e,
+ 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0,
+ 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8,
+ 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb,
+ 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393,
+ 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6,
+ 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab,
+ 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x33c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x00c6, 0x00d0, 0x00aa, 0x0126, 0x0000, 0x0132, 0x0000,
+ 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a,
+ 0x0000, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266,
+ 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e,
+ 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276,
+ 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2,
+ 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da,
+ 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2,
+ 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460,
+ 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468,
+ 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153,
+ 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138,
+ 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b,
+ 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206,
+ 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e,
+ 0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216,
+ 0x3217, 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e,
+ 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6,
+ 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae,
+ 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474,
+ 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482,
+ 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083,
+ 0x2084, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047,
+ 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f,
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,
+ 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f,
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
+ 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f,
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,
+ 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f,
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087,
+ 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7,
+ 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af,
+ 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
+ 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf,
+ 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7,
+ 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
+ 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7,
+ 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df,
+ 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7,
+ 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5,
+ 0x30f6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401,
+ 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d,
+ 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425,
+ 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d,
+ 0x042e, 0x042f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451,
+ 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d,
+ 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445,
+ 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d,
+ 0x044e, 0x044f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475,
+ 0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef,
+ 0x6b4c, 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888,
+ 0x8a36, 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374,
+ 0x5404, 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2,
+ 0x95a3, 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79,
+ 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b,
+ 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb,
+ 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b,
+ 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x611f, 0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b,
+ 0x7518, 0x75b3, 0x76e3, 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452,
+ 0x9f95, 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b,
+ 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177,
+ 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154,
+ 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb,
+ 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539,
+ 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb,
+ 0x8c48, 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0x66f4, 0x7cb3,
+ 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e,
+ 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0x8eca,
+ 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa,
+ 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e,
+ 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048,
+ 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1,
+ 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9,
+ 0x898b, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50,
+ 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c,
+ 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f,
+ 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c,
+ 0x666f, 0x66bb, 0x0000, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f,
+ 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45,
+ 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9015, 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2,
+ 0x5553, 0x583a, 0x5951, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842,
+ 0x68b0, 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb,
+ 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4,
+ 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab,
+ 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd,
+ 0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f,
+ 0x82e6, 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0x0000,
+ 0x8f9c, 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b,
+ 0x66f2, 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11,
+ 0x6606, 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68,
+ 0x6ed1, 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5,
+ 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3,
+ 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b,
+ 0x9846, 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0x0000, 0x51a0, 0x5b98,
+ 0x5bec, 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1,
+ 0x7f50, 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d,
+ 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0,
+ 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366,
+ 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127,
+ 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4,
+ 0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e,
+ 0x6821, 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x81a0, 0x854e, 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903,
+ 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177,
+ 0x52fe, 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2,
+ 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9,
+ 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7,
+ 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc,
+ 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011,
+ 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c,
+ 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98,
+ 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f,
+ 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238,
+ 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737,
+ 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70,
+ 0x8a6d, 0x8ecc, 0x994b, 0x0000, 0x6677, 0x6b78, 0x8cb4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9b3c, 0x0000, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb,
+ 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73,
+ 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e,
+ 0x0000, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975,
+ 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff,
+ 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949,
+ 0x0000, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981,
+ 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0x91d1, 0x9326, 0x4f0b,
+ 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162,
+ 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5668, 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993,
+ 0x5bc4, 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7,
+ 0x65e3, 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a,
+ 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482,
+ 0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948,
+ 0x797a, 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c,
+ 0x8a18, 0x8b4f, 0x0000, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951,
+ 0x9a0e, 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee,
+ 0x6854, 0x0000, 0x55ab, 0x513a, 0x5587, 0x5948, 0x5a1c, 0x61e6,
+ 0x61f6, 0x62cf, 0x62ff, 0x7669, 0x7f85, 0x863f, 0x87ba, 0x88f8,
+ 0x908f, 0x90a3, 0x6a02, 0x6d1b, 0x70d9, 0x73de, 0x843d, 0x8afe,
+ 0x916a, 0x99f1, 0x4e82, 0x5375, 0x6696, 0x6b04, 0x7156, 0x721b,
+ 0x862d, 0x96e3, 0x9e1e, 0x634f, 0x637a, 0x5357, 0x5d50, 0x678f,
+ 0x6960, 0x6e73, 0x6feb, 0x7537, 0x85cd, 0x8964, 0x62c9, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7d0d, 0x81d8, 0x881f, 0x8872, 0x56ca, 0x5a18, 0x5eca,
+ 0x6717, 0x6d6a, 0x72fc, 0x90de, 0x4e43, 0x4f86, 0x5167, 0x0000,
+ 0x67f0, 0x8010, 0x51b7, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5,
+ 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0x52de, 0x5974,
+ 0x5f29, 0x6012, 0x64c4, 0x6ad3, 0x7210, 0x7459, 0x76e7, 0x8001,
+ 0x8606, 0x865c, 0x8def, 0x9732, 0x99d1, 0x9b6f, 0x9dfa, 0x788c,
+ 0x797f, 0x7da0, 0x83c9, 0x9304, 0x9e7f, 0x8ad6, 0x58df, 0x5f04,
+ 0x6fc3, 0x7c60, 0x807e, 0x81bf, 0x8fb2, 0x60f1, 0x7262, 0x78ca,
+ 0x8166, 0x8cc2, 0x96f7, 0x5c3f, 0x58d8, 0x5c62, 0x6a13, 0x6dda,
+ 0x6f0f, 0x7d2f, 0x7e37, 0x964b, 0x5ae9, 0x8a25, 0x677b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7d10, 0x52d2, 0x808b, 0x51dc, 0x51cc, 0x7a1c, 0x7dbe,
+ 0x80fd, 0x83f1, 0x9675, 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a,
+ 0x8336, 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56,
+ 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e,
+ 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a,
+ 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1,
+ 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983,
+ 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d,
+ 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576,
+ 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d,
+ 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b,
+ 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200,
+ 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b,
+ 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe,
+ 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3,
+ 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc,
+ 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4,
+ 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c,
+ 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac,
+ 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e,
+ 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c,
+ 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0x0000, 0x8c46,
+ 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49,
+ 0x85e4, 0x8b04, 0x9127, 0x9a30, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7d61, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x6b12, 0x703e, 0x0000, 0x0000, 0x0000, 0x524c,
+ 0x8fa3, 0x0000, 0x64e5, 0x652c, 0x6b16, 0x0000, 0x7c43, 0x7e9c,
+ 0x0000, 0x0000, 0x89bd, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x7405, 0x746f, 0x8782, 0x0000, 0x0000, 0x5d0d,
+ 0x5fa0, 0x840a, 0x0000, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169,
+ 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2,
+ 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e,
+ 0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad,
+ 0x9a62, 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d,
+ 0x792b, 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023,
+ 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9,
+ 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9,
+ 0x0000, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce,
+ 0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b,
+ 0x6fa7, 0x79ae, 0x91b4, 0x96b7, 0x0000, 0x0000, 0x6488, 0x0000,
+ 0x0000, 0x6f5e, 0x7018, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8f05, 0x0000, 0x0000, 0x0000, 0x9e75, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9e93, 0x0000, 0x0000, 0x0000,
+ 0x6727, 0x7027, 0x74cf, 0x0000, 0x0000, 0x5121, 0x7028, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x8cda, 0x8cf4, 0x0000, 0x4e86,
+ 0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a,
+ 0x84fc, 0x907c, 0x9b27, 0x9f8d, 0x0000, 0x5a41, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x763b, 0x0000, 0x0000, 0x851e, 0x8938, 0x93e4,
+ 0x0000, 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f,
+ 0x7409, 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d,
+ 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a,
+ 0x5f8b, 0x6144, 0x6817, 0x7387, 0x9686, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x695e, 0x0000, 0x0000, 0x0000, 0x0000, 0x4fda, 0x5229,
+ 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c,
+ 0x7281, 0x72f8, 0x7406, 0x7483, 0x7570, 0x75e2, 0x7c6c, 0x7f79,
+ 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9,
+ 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57,
+ 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc,
+ 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c,
+ 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162,
+ 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c,
+ 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b,
+ 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9,
+ 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099,
+ 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf,
+ 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a,
+ 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9,
+ 0x68c9, 0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5,
+ 0x6ec5, 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927,
+ 0x6e9f, 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298,
+ 0x9cf4, 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155,
+ 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f,
+ 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00,
+ 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46,
+ 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893,
+ 0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7,
+ 0x82d7, 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7,
+ 0x64ab, 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d,
+ 0x7e46, 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61,
+ 0x58a8, 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef,
+ 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c,
+ 0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73,
+ 0x7f8e, 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6,
+ 0x610d, 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f,
+ 0x73c9, 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a,
+ 0x62cd, 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e,
+ 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9,
+ 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500,
+ 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x76e4, 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c,
+ 0x87e0, 0x8fd4, 0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24,
+ 0x6f51, 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023,
+ 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e,
+ 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21,
+ 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17,
+ 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0x5317, 0x57f9, 0x5f98,
+ 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da,
+ 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f,
+ 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61,
+ 0x6a0a, 0x7169, 0x71d4, 0x756a, 0x0000, 0x7e41, 0x8543, 0x85e9,
+ 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5,
+ 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a,
+ 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x78a7, 0x8617, 0x95e2, 0x9739, 0x4fbf, 0x535e, 0x5f01,
+ 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08,
+ 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4,
+ 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920,
+ 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11,
+ 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c,
+ 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d,
+ 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b,
+ 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef,
+ 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x84ec, 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8,
+ 0x4fef, 0x5085, 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b,
+ 0x5a66, 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0x0000, 0x6276, 0x6577,
+ 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150,
+ 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6,
+ 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9,
+ 0x9ce7, 0x0000, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e,
+ 0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89,
+ 0x7cde, 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0x0000, 0x4f5b, 0x5f17,
+ 0x5f7f, 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c,
+ 0x4e15, 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87,
+ 0x60b2, 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4,
+ 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0x6ccc, 0x7435, 0x75fa, 0x7812,
+ 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c,
+ 0x8cbb, 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c,
+ 0x658c, 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad,
+ 0x8ca7, 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d,
+ 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff,
+ 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11,
+ 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368,
+ 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7,
+ 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1,
+ 0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x86c7, 0x88df, 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66,
+ 0x8fad, 0x90aa, 0x98fc, 0x99df, 0x9e9d, 0x524a, 0x6578, 0x6714,
+ 0x7d22, 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523,
+ 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba,
+ 0x715e, 0x85a9, 0x4e09, 0x53c3, 0x6749, 0x68ee, 0x6e17, 0x829f,
+ 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7,
+ 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0,
+ 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58,
+ 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3,
+ 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd,
+ 0x55c7, 0x0000, 0x7a61, 0x0000, 0x8272, 0x7272, 0x751f, 0x7525,
+ 0x7701, 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90,
+ 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816,
+ 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4,
+ 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673,
+ 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb,
+ 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247,
+ 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf,
+ 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239,
+ 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d,
+ 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c,
+ 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9,
+ 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6d89, 0x71ee, 0x8449, 0x57ce, 0x59d3, 0x5bac, 0x6027,
+ 0x60fa, 0x6210, 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x0000,
+ 0x7b6c, 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2,
+ 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0x0000, 0x8cb0, 0x53ec,
+ 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383,
+ 0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4,
+ 0x71d2, 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b,
+ 0x7d20, 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061,
+ 0x90b5, 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91,
+ 0x7c9f, 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d,
+ 0x84c0, 0x905c, 0x98e1, 0x0000, 0x5b8b, 0x609a, 0x677e, 0x6dde,
+ 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0x0000, 0x7051, 0x788e,
+ 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782,
+ 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x0000, 0x6a39,
+ 0x6b8a, 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407,
+ 0x74b2, 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f,
+ 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea,
+ 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296,
+ 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996,
+ 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1,
+ 0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87,
+ 0x5faa, 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35,
+ 0x6df3, 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x821c, 0x8340, 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187,
+ 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07,
+ 0x5d27, 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2,
+ 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f,
+ 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb,
+ 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd,
+ 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5,
+ 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a,
+ 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c,
+ 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38,
+ 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668,
+ 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa,
+ 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0x8fb0, 0x8fc5, 0x5931,
+ 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6c88, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0,
+ 0x5341, 0x0000, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e,
+ 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859,
+ 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3,
+ 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x0000, 0x6e25, 0x9102,
+ 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f,
+ 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01,
+ 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c,
+ 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e,
+ 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e,
+ 0x9698, 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b,
+ 0x984d, 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6,
+ 0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0x82e5, 0x91ce,
+ 0x5f31, 0x0000, 0x0000, 0x7d04, 0x0000, 0x846f, 0x84bb, 0x85e5,
+ 0x8e8d, 0x0000, 0x4f6f, 0x0000, 0x0000, 0x58e4, 0x5b43, 0x6059,
+ 0x63da, 0x6518, 0x656d, 0x6698, 0x0000, 0x694a, 0x6a23, 0x6d0b,
+ 0x7001, 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0x0000, 0x7f8a,
+ 0x0000, 0x8944, 0x0000, 0x8b93, 0x91c0, 0x967d, 0x0000, 0x990a,
+ 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad,
+ 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043,
+ 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa,
+ 0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186,
+ 0x4e88, 0x4f59, 0x0000, 0x0000, 0x0000, 0x5982, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x6b5f, 0x6c5d, 0x0000, 0x74b5, 0x7916, 0x0000,
+ 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0x0000, 0x9918, 0x0000,
+ 0x0000, 0x0000, 0x4ea6, 0x0000, 0x57df, 0x5f79, 0x6613, 0x0000,
+ 0x0000, 0x75ab, 0x7e79, 0x8b6f, 0x0000, 0x9006, 0x9a5b, 0x56a5,
+ 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0x0000, 0x5ef6, 0x0000, 0x0000,
+ 0x6350, 0x633b, 0x0000, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93,
+ 0x6df5, 0x6f14, 0x0000, 0x70df, 0x7136, 0x7159, 0x0000, 0x71c3,
+ 0x71d5, 0x0000, 0x784f, 0x786f, 0x0000, 0x7b75, 0x7de3, 0x0000,
+ 0x7e2f, 0x0000, 0x884d, 0x8edf, 0x0000, 0x0000, 0x0000, 0x925b,
+ 0x0000, 0x9cf6, 0x0000, 0x0000, 0x54bd, 0x6085, 0x6d85, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x71b1, 0x0000, 0x0000, 0x95b1, 0x53ad, 0x0000,
+ 0x0000, 0x0000, 0x67d3, 0x0000, 0x708e, 0x7130, 0x7430, 0x8276,
+ 0x82d2, 0x0000, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0x0000, 0x71c1,
+ 0x0000, 0x0000, 0x0000, 0x584b, 0x0000, 0x0000, 0x5db8, 0x5f71,
+ 0x0000, 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36,
+ 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0x0000,
+ 0x745b, 0x7469, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0x0000, 0x0000,
+ 0x82f1, 0x8a60, 0x8fce, 0x0000, 0x9348, 0x0000, 0x9719, 0x0000,
+ 0x0000, 0x4e42, 0x502a, 0x0000, 0x5208, 0x53e1, 0x66f3, 0x6c6d,
+ 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0x0000,
+ 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0x0000, 0x92b3, 0x0000, 0x9713,
+ 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433,
+ 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0x0000,
+ 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32,
+ 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465,
+ 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee,
+ 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6,
+ 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c,
+ 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897,
+ 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811,
+ 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03,
+ 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0x0000,
+ 0x0000, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5be5, 0x0000, 0x0000, 0x5da2, 0x62d7, 0x6416, 0x6493,
+ 0x64fe, 0x0000, 0x66dc, 0x0000, 0x6a48, 0x0000, 0x71ff, 0x7464,
+ 0x0000, 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0x0000,
+ 0x87ef, 0x8981, 0x8b20, 0x9059, 0x0000, 0x9080, 0x9952, 0x617e,
+ 0x6b32, 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197,
+ 0x52c7, 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c,
+ 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338,
+ 0x84c9, 0x8e0a, 0x9394, 0x93de, 0x0000, 0x4e8e, 0x4f51, 0x5076,
+ 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a,
+ 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991,
+ 0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047,
+ 0x90f5, 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed,
+ 0x6631, 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0x6688,
+ 0x6a52, 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90,
+ 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3,
+ 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39,
+ 0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45,
+ 0x9060, 0x0000, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e,
+ 0x4f4d, 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09,
+ 0x6170, 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e,
+ 0x8466, 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb,
+ 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a, 0x0000, 0x552f, 0x55a9,
+ 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x6108, 0x6109, 0x63c4, 0x6538, 0x6709, 0x0000, 0x67d4,
+ 0x67da, 0x0000, 0x6961, 0x6962, 0x6cb9, 0x6d27, 0x0000, 0x6e38,
+ 0x0000, 0x6fe1, 0x7336, 0x7337, 0x0000, 0x745c, 0x7531, 0x0000,
+ 0x7652, 0x0000, 0x0000, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98,
+ 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149,
+ 0x91c9, 0x936e, 0x0000, 0x0000, 0x5809, 0x0000, 0x6bd3, 0x8089,
+ 0x80b2, 0x0000, 0x0000, 0x5141, 0x596b, 0x5c39, 0x0000, 0x0000,
+ 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0x0000, 0x9217, 0x958f, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d,
+ 0x0000, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1,
+ 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6,
+ 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a,
+ 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591,
+ 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0x0000, 0x0000,
+ 0x5937, 0x59e8, 0x0000, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x723e, 0x73e5, 0x0000, 0x0000, 0x75cd,
+ 0x0000, 0x79fb, 0x0000, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351,
+ 0x0000, 0x0000, 0x8cbd, 0x8cb3, 0x9087, 0x0000, 0x0000, 0x98f4,
+ 0x990c, 0x0000, 0x0000, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc,
+ 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0x0000, 0x0000, 0x56e0,
+ 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0x0000, 0x0000, 0x7d6a,
+ 0x8335, 0x0000, 0x8693, 0x8a8d, 0x0000, 0x976d, 0x9777, 0x0000,
+ 0x0000, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9,
+ 0x6041, 0x0000, 0x0000, 0x7a14, 0x0000, 0x834f, 0x8cc3, 0x5165,
+ 0x5344, 0x0000, 0x0000, 0x0000, 0x4ecd, 0x5269, 0x5b55, 0x82bf,
+ 0x4ed4, 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c,
+ 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5,
+ 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee,
+ 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c,
+ 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71,
+ 0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4,
+ 0x7c2a, 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb,
+ 0x58ef, 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2,
+ 0x6756, 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0x0000, 0x7350,
+ 0x748b, 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c,
+ 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750,
+ 0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1,
+ 0x8f09, 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47,
+ 0x4f4e, 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e,
+ 0x6a17, 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35,
+ 0x82e7, 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019,
+ 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458,
+ 0x6575, 0x6ef4, 0x72c4, 0x0000, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d,
+ 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f,
+ 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5168, 0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960,
+ 0x5c08, 0x5c55, 0x5edb, 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08,
+ 0x6fb1, 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c,
+ 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f,
+ 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207,
+ 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360,
+ 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede,
+ 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075,
+ 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5,
+ 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968,
+ 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e,
+ 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b,
+ 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d,
+ 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824,
+ 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c,
+ 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b,
+ 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632,
+ 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9,
+ 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5,
+ 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95,
+ 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54,
+ 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5,
+ 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5352, 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0,
+ 0x616b, 0x68d5, 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31,
+ 0x816b, 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6,
+ 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd,
+ 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda,
+ 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d,
+ 0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f,
+ 0x86db, 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e,
+ 0x9152, 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6,
+ 0x57c8, 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec,
+ 0x710c, 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff,
+ 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b,
+ 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511,
+ 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f,
+ 0x652f, 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a,
+ 0x6f2c, 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102,
+ 0x81f3, 0x829d, 0x82b7, 0x8718, 0x8a8c, 0x0000, 0x8d04, 0x8dbe,
+ 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4,
+ 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84,
+ 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1,
+ 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897,
+ 0x8a3a, 0x8cd1, 0x8eeb, 0x0000, 0x9032, 0x93ad, 0x9663, 0x9673,
+ 0x9707, 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x74c6, 0x75be, 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea,
+ 0x8dcc, 0x8fed, 0x659f, 0x6715, 0x0000, 0x57f7, 0x6f57, 0x7ddd,
+ 0x8f2f, 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98,
+ 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb,
+ 0x7b9a, 0x0000, 0x8e49, 0x0000, 0x906e, 0x6349, 0x643e, 0x7740,
+ 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8,
+ 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a,
+ 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e,
+ 0x50ed, 0x0000, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9,
+ 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0,
+ 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4,
+ 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc,
+ 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5,
+ 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0x0000,
+ 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc,
+ 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598,
+ 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b,
+ 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6,
+ 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f,
+ 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb,
+ 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377,
+ 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674,
+ 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x5243, 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e,
+ 0x905e, 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db,
+ 0x68a2, 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901,
+ 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549,
+ 0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed,
+ 0x77d7, 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2,
+ 0x585a, 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525,
+ 0x9283, 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8,
+ 0x690e, 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429,
+ 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318,
+ 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa,
+ 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010,
+ 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0,
+ 0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a,
+ 0x7fe0, 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2,
+ 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024,
+ 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be,
+ 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e,
+ 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5,
+ 0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795,
+ 0x0000, 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4,
+ 0x7a31, 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0,
+ 0x6253, 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x99dd, 0x502c, 0x5353, 0x5544, 0x577c, 0x0000, 0x6258,
+ 0x0000, 0x64e2, 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438,
+ 0x8a17, 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e,
+ 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708,
+ 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f,
+ 0x0000, 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86,
+ 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1,
+ 0x0000, 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f,
+ 0x8a0e, 0x615f, 0x6876, 0x0000, 0x75db, 0x7b52, 0x7d71, 0x901a,
+ 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957,
+ 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761,
+ 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e,
+ 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224,
+ 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096,
+ 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d,
+ 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x0000, 0x504f, 0x6241,
+ 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6,
+ 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63,
+ 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48,
+ 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016,
+ 0x629b, 0x62b1, 0x6355, 0x66b4, 0x6ce1, 0x6d66, 0x75b1, 0x7832,
+ 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b,
+ 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x0000, 0x66dd, 0x7011, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x7206, 0x0000, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753,
+ 0x6a19, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4,
+ 0x9a43, 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae,
+ 0x5f7c, 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339,
+ 0x5f3c, 0x5fc5, 0x0000, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe,
+ 0x999d, 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8,
+ 0x6630, 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e,
+ 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068,
+ 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0,
+ 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b,
+ 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c,
+ 0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4,
+ 0x965c, 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297,
+ 0x676d, 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x884c, 0x0000, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793,
+ 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9,
+ 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838,
+ 0x5016, 0x5e78, 0x674f, 0x8347, 0x0000, 0x4eab, 0x5411, 0x56ae,
+ 0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f,
+ 0x865b, 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa,
+ 0x9a57, 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26,
+ 0x61f8, 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729,
+ 0x774d, 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0x0000, 0x8ce2,
+ 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x4fe0, 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9,
+ 0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211,
+ 0x578b, 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192,
+ 0x73e9, 0x0000, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3,
+ 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a,
+ 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d,
+ 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69,
+ 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0,
+ 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1,
+ 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a,
+ 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f,
+ 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4,
+ 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c,
+ 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8,
+ 0x9774, 0x0000, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38,
+ 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665,
+ 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25,
+ 0x6d3b, 0x0000, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8,
+ 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1,
+ 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27,
+ 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb,
+ 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee,
+ 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404,
+ 0x54ee, 0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d,
+ 0x6dc6, 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a,
+ 0x540e, 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166,
+ 0x73dd, 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f,
+ 0x71fb, 0x85b0, 0x8a13, 0x0000, 0x85a8, 0x55a7, 0x6684, 0x714a,
+ 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689,
+ 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566,
+ 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36,
+ 0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79,
+ 0x7d07, 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d,
+ 0x7fd5, 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec,
+ 0x5b09, 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199,
+ 0x71b9, 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3164, 0x3001, 0x3002, 0x30fb, 0x2025, 0x22ef, 0x00a8, 0x3003
+};
+
+
+const unichar_t unicode_from_gb2312[] = {
+ 0x3000, 0x3001, 0x3002, 0x00b7, 0x02c9, 0x02c7, 0x00a8, 0x3003,
+ 0x3005, 0x2014, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c,
+ 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
+ 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1,
+ 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a,
+ 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312,
+ 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d,
+ 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234,
+ 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4,
+ 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb,
+ 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2,
+ 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2488, 0x2489,
+ 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, 0x2490, 0x2491,
+ 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499,
+ 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479,
+ 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481,
+ 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2460, 0x2461,
+ 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
+ 0x0000, 0x0000, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225,
+ 0x3226, 0x3227, 0x3228, 0x3229, 0x0000, 0x0000, 0x2160, 0x2161,
+ 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169,
+ 0x216a, 0x216b, 0x0000, 0x0000, 0xff01, 0xff02, 0xff03, 0xffe5,
+ 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c,
+ 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14,
+ 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c,
+ 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24,
+ 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c,
+ 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34,
+ 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xff3c,
+ 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44,
+ 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c,
+ 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54,
+ 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c,
+ 0xff5d, 0xffe3, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
+ 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
+ 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
+ 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
+ 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066,
+ 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e,
+ 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
+ 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
+ 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086,
+ 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e,
+ 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
+ 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
+ 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
+ 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
+ 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
+ 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
+ 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
+ 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
+ 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
+ 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
+ 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0391, 0x0392,
+ 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a,
+ 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3,
+ 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03b1, 0x03b2,
+ 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba,
+ 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3,
+ 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0xe78d, 0xe78e,
+ 0xe78f, 0xe790, 0xe791, 0xe792, 0xe793, 0xfe35, 0xfe36, 0xfe39,
+ 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41, 0xfe42, 0xfe43,
+ 0xfe44, 0xe794, 0xe795, 0xfe3b, 0xfe3c, 0xfe37, 0xfe38, 0xfe31,
+ 0x205d, 0xfe33, 0xfe34, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0410, 0x0411, 0x0412, 0x0413,
+ 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a,
+ 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422,
+ 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a,
+ 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0430, 0x0431, 0x0432, 0x0433,
+ 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a,
+ 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442,
+ 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a,
+ 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9,
+ 0x011b, 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3,
+ 0x01d2, 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8,
+ 0x01da, 0x01dc, 0x00fc, 0x00ea, 0x0251, 0x1e3f, 0x0144, 0x0148,
+ 0x01f9, 0x0261, 0x0000, 0x0000, 0x0000, 0x0000, 0x3105, 0x3106,
+ 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e,
+ 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116,
+ 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e,
+ 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126,
+ 0x3127, 0x3128, 0x3129, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504,
+ 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c,
+ 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514,
+ 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c,
+ 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524,
+ 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c,
+ 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
+ 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c,
+ 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544,
+ 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509,
+ 0x54c0, 0x7691, 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231,
+ 0x9698, 0x978d, 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8,
+ 0x80fa, 0x6848, 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac,
+ 0x7ff1, 0x8884, 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c,
+ 0x6252, 0x53ed, 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4,
+ 0x8dcb, 0x9776, 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238,
+ 0x767d, 0x67cf, 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17,
+ 0x6591, 0x73ed, 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248,
+ 0x626e, 0x62cc, 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6,
+ 0x5e2e, 0x6886, 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c,
+ 0x9551, 0x508d, 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265,
+ 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5,
+ 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351,
+ 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907,
+ 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29,
+ 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4,
+ 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9,
+ 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5,
+ 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16,
+ 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab,
+ 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b,
+ 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175,
+ 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, 0x75c5, 0x5e76,
+ 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2, 0x535a, 0x52c3,
+ 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236, 0x8116, 0x818a,
+ 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa, 0x8865, 0x57e0,
+ 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016, 0x64e6, 0x731c,
+ 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29, 0x91c7, 0x5f69,
+ 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b, 0x60ed, 0x60e8,
+ 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf, 0x64cd, 0x7cd9,
+ 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7, 0x518c, 0x6d4b,
+ 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336, 0x67e5, 0x78b4,
+ 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6, 0x67f4, 0x8c7a,
+ 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20, 0x94f2, 0x4ea7,
+ 0x9610, 0x98a4, 0x660c, 0x7316, 0x573a, 0x5c1d, 0x5e38, 0x957f,
+ 0x507f, 0x80a0, 0x5382, 0x655e, 0x7545, 0x5531, 0x5021, 0x8d85,
+ 0x6284, 0x949e, 0x671d, 0x5632, 0x6f6e, 0x5de2, 0x5435, 0x7092,
+ 0x8f66, 0x626f, 0x64a4, 0x63a3, 0x5f7b, 0x6f88, 0x90f4, 0x81e3,
+ 0x8fb0, 0x5c18, 0x6668, 0x5ff1, 0x6c89, 0x9648, 0x8d81, 0x886c,
+ 0x6491, 0x79f0, 0x57ce, 0x6a59, 0x6210, 0x5448, 0x4e58, 0x7a0b,
+ 0x60e9, 0x6f84, 0x8bda, 0x627f, 0x901e, 0x9a8b, 0x79e4, 0x5403,
+ 0x75f4, 0x6301, 0x5319, 0x6c60, 0x8fdf, 0x5f1b, 0x9a70, 0x803b,
+ 0x9f7f, 0x4f88, 0x5c3a, 0x8d64, 0x7fc5, 0x65a5, 0x70bd, 0x5145,
+ 0x51b2, 0x866b, 0x5d07, 0x5ba0, 0x62bd, 0x916c, 0x7574, 0x8e0c,
+ 0x7a20, 0x6101, 0x7b79, 0x4ec7, 0x7ef8, 0x7785, 0x4e11, 0x81ed,
+ 0x521d, 0x51fa, 0x6a71, 0x53a8, 0x8e87, 0x9504, 0x96cf, 0x6ec1,
+ 0x9664, 0x695a, 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904,
+ 0x63e3, 0x5ddd, 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32,
+ 0x75ae, 0x7a97, 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a,
+ 0x6376, 0x9524, 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3,
+ 0x7eaf, 0x8822, 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc,
+ 0x8f9e, 0x6148, 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21,
+ 0x806a, 0x8471, 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97,
+ 0x918b, 0x7c07, 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14,
+ 0x50ac, 0x8106, 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58,
+ 0x5bf8, 0x78cb, 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d,
+ 0x8fbe, 0x7b54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3,
+ 0x6234, 0x5e26, 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e,
+ 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6,
+ 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb,
+ 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48,
+ 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053,
+ 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49,
+ 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c,
+ 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730,
+ 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382,
+ 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43,
+ 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc,
+ 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc,
+ 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, 0x4e01, 0x76ef,
+ 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a, 0x8ba2, 0x4e22,
+ 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b, 0x4f97, 0x606b,
+ 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661, 0x8c46, 0x9017,
+ 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec, 0x8bfb, 0x5835,
+ 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6, 0x6e21, 0x5992,
+ 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e, 0x5806, 0x5151,
+ 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566, 0x987f, 0x56e4,
+ 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a, 0x593a, 0x579b,
+ 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0, 0x5815, 0x86fe,
+ 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25, 0x6076, 0x5384,
+ 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c, 0x513f, 0x8033,
+ 0x5c14, 0x9975, 0x6d31, 0x4e8c, 0x8d30, 0x53d1, 0x7f5a, 0x7b4f,
+ 0x4f10, 0x4e4f, 0x9600, 0x6cd5, 0x73d0, 0x85e9, 0x5e06, 0x756a,
+ 0x7ffb, 0x6a0a, 0x77fe, 0x9492, 0x7e41, 0x51e1, 0x70e6, 0x53cd,
+ 0x8fd4, 0x8303, 0x8d29, 0x72af, 0x996d, 0x6cdb, 0x574a, 0x82b3,
+ 0x65b9, 0x80aa, 0x623f, 0x9632, 0x59a8, 0x4eff, 0x8bbf, 0x7eba,
+ 0x653e, 0x83f2, 0x975e, 0x5561, 0x98de, 0x80a5, 0x532a, 0x8bfd,
+ 0x5420, 0x80ba, 0x5e9f, 0x6cb8, 0x8d39, 0x82ac, 0x915a, 0x5429,
+ 0x6c1b, 0x5206, 0x7eb7, 0x575f, 0x711a, 0x6c7e, 0x7c89, 0x594b,
+ 0x4efd, 0x5fff, 0x6124, 0x7caa, 0x4e30, 0x5c01, 0x67ab, 0x8702,
+ 0x5cf0, 0x950b, 0x98ce, 0x75af, 0x70fd, 0x9022, 0x51af, 0x7f1d,
+ 0x8bbd, 0x5949, 0x51e4, 0x4f5b, 0x5426, 0x592b, 0x6577, 0x80a4,
+ 0x5b75, 0x6276, 0x62c2, 0x8f90, 0x5e45, 0x6c1f, 0x7b26, 0x4f0f,
+ 0x4fd8, 0x670d, 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b,
+ 0x629a, 0x8f85, 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c,
+ 0x8150, 0x8d74, 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8,
+ 0x961c, 0x7236, 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987,
+ 0x7f1a, 0x5490, 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499,
+ 0x76d6, 0x6e89, 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d,
+ 0x8d76, 0x611f, 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2,
+ 0x7f38, 0x809b, 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b,
+ 0x9ad8, 0x818f, 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a,
+ 0x54e5, 0x6b4c, 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272,
+ 0x9769, 0x845b, 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a,
+ 0x5404, 0x7ed9, 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9,
+ 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a,
+ 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1,
+ 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2,
+ 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30,
+ 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37,
+ 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250,
+ 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173,
+ 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c,
+ 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845,
+ 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842,
+ 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505,
+ 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, 0x9ab8, 0x5b69,
+ 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163, 0x61a8, 0x90af,
+ 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a, 0x7f55, 0x7ff0,
+ 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a, 0x6c57, 0x6c49,
+ 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a, 0x6beb, 0x90dd,
+ 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d, 0x8377, 0x83cf,
+ 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2, 0x8c89, 0x9602,
+ 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a, 0x563f, 0x9ed1,
+ 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8, 0x6a2a, 0x8861,
+ 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f, 0x6d2a, 0x5b8f,
+ 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c, 0x539a, 0x5019,
+ 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6, 0x846b, 0x80e1,
+ 0x8774, 0x72d0, 0x7cca, 0x6e56, 0x5f27, 0x864e, 0x552c, 0x62a4,
+ 0x4e92, 0x6caa, 0x6237, 0x82b1, 0x54d7, 0x534e, 0x733e, 0x6ed1,
+ 0x753b, 0x5212, 0x5316, 0x8bdd, 0x69d0, 0x5f8a, 0x6000, 0x6dee,
+ 0x574f, 0x6b22, 0x73af, 0x6853, 0x8fd8, 0x7f13, 0x6362, 0x60a3,
+ 0x5524, 0x75ea, 0x8c62, 0x7115, 0x6da3, 0x5ba6, 0x5e7b, 0x8352,
+ 0x614c, 0x9ec4, 0x78fa, 0x8757, 0x7c27, 0x7687, 0x51f0, 0x60f6,
+ 0x714c, 0x6643, 0x5e4c, 0x604d, 0x8c0e, 0x7070, 0x6325, 0x8f89,
+ 0x5fbd, 0x6062, 0x86d4, 0x56de, 0x6bc1, 0x6094, 0x6167, 0x5349,
+ 0x60e0, 0x6666, 0x8d3f, 0x79fd, 0x4f1a, 0x70e9, 0x6c47, 0x8bb3,
+ 0x8bf2, 0x7ed8, 0x8364, 0x660f, 0x5a5a, 0x9b42, 0x6d51, 0x6df7,
+ 0x8c41, 0x6d3b, 0x4f19, 0x706b, 0x83b7, 0x6216, 0x60d1, 0x970d,
+ 0x8d27, 0x7978, 0x51fb, 0x573e, 0x57fa, 0x673a, 0x7578, 0x7a3d,
+ 0x79ef, 0x7b95, 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21,
+ 0x59ec, 0x7ee9, 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d,
+ 0x96c6, 0x53ca, 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7,
+ 0x6324, 0x51e0, 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63,
+ 0x4f0e, 0x796d, 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1,
+ 0x8bb0, 0x65e2, 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609,
+ 0x67b7, 0x5939, 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e,
+ 0x7532, 0x94be, 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1,
+ 0x6b7c, 0x76d1, 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c,
+ 0x80a9, 0x8270, 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1,
+ 0x7877, 0x62e3, 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350,
+ 0x69db, 0x9274, 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6,
+ 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa,
+ 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868,
+ 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901,
+ 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc,
+ 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a,
+ 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb,
+ 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a,
+ 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01,
+ 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f,
+ 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1,
+ 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb,
+ 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, 0x5c3d, 0x52b2,
+ 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8, 0x4eac, 0x60ca,
+ 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f, 0x9888, 0x9759,
+ 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756, 0x7adf, 0x7ade,
+ 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0, 0x7396, 0x97ed,
+ 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551, 0x65e7, 0x81fc,
+ 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8, 0x72d9, 0x75bd,
+ 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9, 0x4e3e, 0x6cae,
+ 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd, 0x8e1e, 0x952f,
+ 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350, 0x9e43, 0x5a1f,
+ 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b, 0x6289, 0x6398,
+ 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd, 0x5747, 0x83cc,
+ 0x94a7, 0x519b, 0x541b, 0x5cfb, 0x4fca, 0x7ae3, 0x6d5a, 0x90e1,
+ 0x9a8f, 0x5580, 0x5496, 0x5361, 0x54af, 0x5f00, 0x63e9, 0x6977,
+ 0x51ef, 0x6168, 0x520a, 0x582a, 0x52d8, 0x574e, 0x780d, 0x770b,
+ 0x5eb7, 0x6177, 0x7ce0, 0x625b, 0x6297, 0x4ea2, 0x7095, 0x8003,
+ 0x62f7, 0x70e4, 0x9760, 0x5777, 0x82db, 0x67ef, 0x68f5, 0x78d5,
+ 0x9897, 0x79d1, 0x58f3, 0x54b3, 0x53ef, 0x6e34, 0x514b, 0x523b,
+ 0x5ba2, 0x8bfe, 0x80af, 0x5543, 0x57a6, 0x6073, 0x5751, 0x542d,
+ 0x7a7a, 0x6050, 0x5b54, 0x63a7, 0x62a0, 0x53e3, 0x6263, 0x5bc7,
+ 0x67af, 0x54ed, 0x7a9f, 0x82e6, 0x9177, 0x5e93, 0x88e4, 0x5938,
+ 0x57ae, 0x630e, 0x8de8, 0x80ef, 0x5757, 0x7b77, 0x4fa9, 0x5feb,
+ 0x5bbd, 0x6b3e, 0x5321, 0x7b50, 0x72c2, 0x6846, 0x77ff, 0x7736,
+ 0x65f7, 0x51b5, 0x4e8f, 0x76d4, 0x5cbf, 0x7aa5, 0x8475, 0x594e,
+ 0x9b41, 0x5080, 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346,
+ 0x56f0, 0x62ec, 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587,
+ 0x8721, 0x814a, 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd,
+ 0x5a6a, 0x680f, 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30,
+ 0x63fd, 0x89c8, 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994,
+ 0x72fc, 0x5eca, 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262,
+ 0x8001, 0x4f6c, 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50,
+ 0x96f7, 0x956d, 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2,
+ 0x808b, 0x7c7b, 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8,
+ 0x7281, 0x9ece, 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e,
+ 0x91cc, 0x9ca4, 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d,
+ 0x5389, 0x52b1, 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0,
+ 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9,
+ 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f,
+ 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae,
+ 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e,
+ 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5,
+ 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217,
+ 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716,
+ 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce,
+ 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc,
+ 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409,
+ 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3,
+ 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, 0x9686, 0x5784,
+ 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3, 0x6f0f, 0x964b,
+ 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3, 0x5364, 0x864f,
+ 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42, 0x9e7f, 0x6f5e,
+ 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415, 0x94dd, 0x4fa3,
+ 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f, 0x5f8b, 0x7387,
+ 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6, 0x5375, 0x4e71,
+ 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1, 0x6ca6, 0x7eb6,
+ 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523, 0x7ba9, 0x9aa1,
+ 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988, 0x9ebb, 0x739b,
+ 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417, 0x57cb, 0x4e70,
+ 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992, 0x86ee, 0x6ee1,
+ 0x8513, 0x66fc, 0x6162, 0x6f2b, 0x8c29, 0x8292, 0x832b, 0x76f2,
+ 0x6c13, 0x5fd9, 0x83bd, 0x732b, 0x8305, 0x951a, 0x6bdb, 0x77db,
+ 0x94c6, 0x536f, 0x8302, 0x5192, 0x5e3d, 0x8c8c, 0x8d38, 0x4e48,
+ 0x73ab, 0x679a, 0x6885, 0x9176, 0x9709, 0x7164, 0x6ca1, 0x7709,
+ 0x5a92, 0x9541, 0x6bcf, 0x7f8e, 0x6627, 0x5bd0, 0x59b9, 0x5a9a,
+ 0x95e8, 0x95f7, 0x4eec, 0x840c, 0x8499, 0x6aac, 0x76df, 0x9530,
+ 0x731b, 0x68a6, 0x5b5f, 0x772f, 0x919a, 0x9761, 0x7cdc, 0x8ff7,
+ 0x8c1c, 0x5f25, 0x7c73, 0x79d8, 0x89c5, 0x6ccc, 0x871c, 0x5bc6,
+ 0x5e42, 0x68c9, 0x7720, 0x7ef5, 0x5195, 0x514d, 0x52c9, 0x5a29,
+ 0x7f05, 0x9762, 0x82d7, 0x63cf, 0x7784, 0x85d0, 0x79d2, 0x6e3a,
+ 0x5e99, 0x5999, 0x8511, 0x706d, 0x6c11, 0x62bf, 0x76bf, 0x654f,
+ 0x60af, 0x95fd, 0x660e, 0x879f, 0x9e23, 0x94ed, 0x540d, 0x547d,
+ 0x8c2c, 0x6478, 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469,
+ 0x9b54, 0x62b9, 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20,
+ 0x5bde, 0x964c, 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9,
+ 0x59c6, 0x6bcd, 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728,
+ 0x76ee, 0x7766, 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0,
+ 0x90a3, 0x5a1c, 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948,
+ 0x5357, 0x7537, 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9,
+ 0x6dd6, 0x5462, 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713,
+ 0x502a, 0x6ce5, 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006,
+ 0x6eba, 0x852b, 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5,
+ 0x5a18, 0x917f, 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e,
+ 0x954a, 0x954d, 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81,
+ 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53,
+ 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650,
+ 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25,
+ 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c,
+ 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43,
+ 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224,
+ 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486,
+ 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9,
+ 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6,
+ 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c,
+ 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812,
+ 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, 0x5564, 0x813e,
+ 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41, 0x8b6c, 0x7bc7,
+ 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2, 0x7968, 0x6487,
+ 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058, 0x4e52, 0x576a,
+ 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4, 0x5c4f, 0x5761,
+ 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb, 0x7c95, 0x5256,
+ 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9, 0x84b2, 0x57d4,
+ 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd, 0x7011, 0x671f,
+ 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4, 0x6f06, 0x67d2,
+ 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566, 0x5d0e, 0x8110,
+ 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77, 0x5c82, 0x4e5e,
+ 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14, 0x8fc4, 0x5f03,
+ 0x6c7d, 0x6ce3, 0x8bab, 0x6390, 0x6070, 0x6d3d, 0x7275, 0x6266,
+ 0x948e, 0x94c5, 0x5343, 0x8fc1, 0x7b7e, 0x4edf, 0x8c26, 0x4e7e,
+ 0x9ed4, 0x94b1, 0x94b3, 0x524d, 0x6f5c, 0x9063, 0x6d45, 0x8c34,
+ 0x5811, 0x5d4c, 0x6b20, 0x6b49, 0x67aa, 0x545b, 0x8154, 0x7f8c,
+ 0x5899, 0x8537, 0x5f3a, 0x62a2, 0x6a47, 0x9539, 0x6572, 0x6084,
+ 0x6865, 0x77a7, 0x4e54, 0x4fa8, 0x5de7, 0x9798, 0x64ac, 0x7fd8,
+ 0x5ced, 0x4fcf, 0x7a8d, 0x5207, 0x8304, 0x4e14, 0x602f, 0x7a83,
+ 0x94a6, 0x4fb5, 0x4eb2, 0x79e6, 0x7434, 0x52e4, 0x82b9, 0x64d2,
+ 0x79bd, 0x5bdd, 0x6c81, 0x9752, 0x8f7b, 0x6c22, 0x503e, 0x537f,
+ 0x6e05, 0x64ce, 0x6674, 0x6c30, 0x60c5, 0x9877, 0x8bf7, 0x5e86,
+ 0x743c, 0x7a77, 0x79cb, 0x4e18, 0x90b1, 0x7403, 0x6c42, 0x56da,
+ 0x914b, 0x6cc5, 0x8d8b, 0x533a, 0x86c6, 0x66f2, 0x8eaf, 0x5c48,
+ 0x9a71, 0x6e20, 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708,
+ 0x98a7, 0x6743, 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac,
+ 0x5238, 0x529d, 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7,
+ 0x786e, 0x96c0, 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3,
+ 0x74e4, 0x58e4, 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5,
+ 0x60f9, 0x70ed, 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb,
+ 0x8ba4, 0x5203, 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e,
+ 0x8338, 0x84c9, 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2,
+ 0x5197, 0x63c9, 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a,
+ 0x5982, 0x8fb1, 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e,
+ 0x854a, 0x745e, 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492,
+ 0x6d12, 0x8428, 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1,
+ 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b,
+ 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802,
+ 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b,
+ 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b,
+ 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247,
+ 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a,
+ 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6,
+ 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c,
+ 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe,
+ 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5,
+ 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17,
+ 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, 0x7701, 0x76db,
+ 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee, 0x65bd, 0x6e7f,
+ 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe, 0x65f6, 0x4ec0,
+ 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2, 0x4f7f, 0x5c4e,
+ 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16, 0x67ff, 0x4e8b,
+ 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc, 0x566c, 0x9002,
+ 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02, 0x6043, 0x5ba4,
+ 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88, 0x5bff, 0x6388,
+ 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2, 0x68b3, 0x6b8a,
+ 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f, 0x4e66, 0x8d4e,
+ 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72, 0x8700, 0x9ecd,
+ 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f, 0x620d, 0x7ad6,
+ 0x5885, 0x5eb6, 0x6570, 0x6f31, 0x6055, 0x5237, 0x800d, 0x6454,
+ 0x8870, 0x7529, 0x5e05, 0x6813, 0x62f4, 0x971c, 0x53cc, 0x723d,
+ 0x8c01, 0x6c34, 0x7761, 0x7a0e, 0x542e, 0x77ac, 0x987a, 0x821c,
+ 0x8bf4, 0x7855, 0x6714, 0x70c1, 0x65af, 0x6495, 0x5636, 0x601d,
+ 0x79c1, 0x53f8, 0x4e1d, 0x6b7b, 0x8086, 0x5bfa, 0x55e3, 0x56db,
+ 0x4f3a, 0x4f3c, 0x9972, 0x5df3, 0x677e, 0x8038, 0x6002, 0x9882,
+ 0x9001, 0x5b8b, 0x8bbc, 0x8bf5, 0x641c, 0x8258, 0x64de, 0x55fd,
+ 0x82cf, 0x9165, 0x4fd7, 0x7d20, 0x901f, 0x7c9f, 0x50f3, 0x5851,
+ 0x6eaf, 0x5bbf, 0x8bc9, 0x8083, 0x9178, 0x849c, 0x7b97, 0x867d,
+ 0x968b, 0x968f, 0x7ee5, 0x9ad3, 0x788e, 0x5c81, 0x7a57, 0x9042,
+ 0x96a7, 0x795f, 0x5b59, 0x635f, 0x7b0b, 0x84d1, 0x68ad, 0x5506,
+ 0x7f29, 0x7410, 0x7d22, 0x9501, 0x6240, 0x584c, 0x4ed6, 0x5b83,
+ 0x5979, 0x5854, 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4,
+ 0x62ac, 0x53f0, 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d,
+ 0x644a, 0x8d2a, 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d,
+ 0x8c2d, 0x8c08, 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9,
+ 0x70ad, 0x6c64, 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510,
+ 0x7cd6, 0x5018, 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b,
+ 0x6ed4, 0x7ee6, 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8,
+ 0x5957, 0x7279, 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254,
+ 0x8e22, 0x9511, 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff,
+ 0x568f, 0x60d5, 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b,
+ 0x7530, 0x751c, 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2,
+ 0x773a, 0x8df3, 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3,
+ 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a,
+ 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876,
+ 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f,
+ 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60,
+ 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f,
+ 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258,
+ 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3,
+ 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c,
+ 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38,
+ 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b,
+ 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51,
+ 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, 0x5dcd, 0x5fae,
+ 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f, 0x60df, 0x4e3a,
+ 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f, 0x4f2a, 0x5c3e,
+ 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3, 0x5582, 0x9b4f,
+ 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b, 0x761f, 0x6e29,
+ 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33, 0x7d0a, 0x95ee,
+ 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1, 0x7a9d, 0x6211,
+ 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c, 0x94a8, 0x4e4c,
+ 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7, 0x543e, 0x5434,
+ 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e, 0x4f0d, 0x4fae,
+ 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff, 0x52a1, 0x609f,
+ 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852, 0x77fd, 0x6670,
+ 0x563b, 0x5438, 0x9521, 0x727a, 0x7a00, 0x606f, 0x5e0c, 0x6089,
+ 0x819d, 0x5915, 0x60dc, 0x7184, 0x70ef, 0x6eaa, 0x6c50, 0x7280,
+ 0x6a84, 0x88ad, 0x5e2d, 0x4e60, 0x5ab3, 0x559c, 0x94e3, 0x6d17,
+ 0x7cfb, 0x9699, 0x620f, 0x7ec6, 0x778e, 0x867e, 0x5323, 0x971e,
+ 0x8f96, 0x6687, 0x5ce1, 0x4fa0, 0x72ed, 0x4e0b, 0x53a6, 0x590f,
+ 0x5413, 0x6380, 0x9528, 0x5148, 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8,
+ 0x8d24, 0x8854, 0x8237, 0x95f2, 0x6d8e, 0x5f26, 0x5acc, 0x663e,
+ 0x9669, 0x73b0, 0x732e, 0x53bf, 0x817a, 0x9985, 0x7fa1, 0x5baa,
+ 0x9677, 0x9650, 0x7ebf, 0x76f8, 0x53a2, 0x9576, 0x9999, 0x7bb1,
+ 0x8944, 0x6e58, 0x4e61, 0x7fd4, 0x7965, 0x8be6, 0x60f3, 0x54cd,
+ 0x4eab, 0x9879, 0x5df7, 0x6a61, 0x50cf, 0x5411, 0x8c61, 0x8427,
+ 0x785d, 0x9704, 0x524a, 0x54ee, 0x56a3, 0x9500, 0x6d88, 0x5bb5,
+ 0x6dc6, 0x6653, 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11,
+ 0x6548, 0x6954, 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f,
+ 0x643a, 0x90aa, 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378,
+ 0x87f9, 0x61c8, 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af,
+ 0x950c, 0x6b23, 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845,
+ 0x661f, 0x8165, 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62,
+ 0x90a2, 0x884c, 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144,
+ 0x51f6, 0x80f8, 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee,
+ 0x7f9e, 0x673d, 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f,
+ 0x620c, 0x9700, 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4,
+ 0x9157, 0x53d9, 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f,
+ 0x7eea, 0x7eed, 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384,
+ 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74,
+ 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb,
+ 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5,
+ 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259,
+ 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6,
+ 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814,
+ 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf,
+ 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5,
+ 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a,
+ 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f,
+ 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b,
+ 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, 0x6447, 0x5c27,
+ 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200, 0x836f, 0x8981,
+ 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce, 0x51b6, 0x4e5f,
+ 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b, 0x591c, 0x6db2,
+ 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d, 0x4f0a, 0x8863,
+ 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0, 0x7591, 0x6c82,
+ 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a, 0x5df2, 0x4e59,
+ 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091, 0x5c79, 0x4ebf,
+ 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6, 0x88d4, 0x610f,
+ 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3, 0x8bae, 0x8c0a,
+ 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335, 0x836b, 0x56e0,
+ 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6, 0x6deb, 0x5bc5,
+ 0x996e, 0x5c39, 0x5f15, 0x9690, 0x5370, 0x82f1, 0x6a31, 0x5a74,
+ 0x9e70, 0x5e94, 0x7f28, 0x83b9, 0x8424, 0x8425, 0x8367, 0x8747,
+ 0x8fce, 0x8d62, 0x76c8, 0x5f71, 0x9896, 0x786c, 0x6620, 0x54df,
+ 0x62e5, 0x4f63, 0x81c3, 0x75c8, 0x5eb8, 0x96cd, 0x8e0a, 0x86f9,
+ 0x548f, 0x6cf3, 0x6d8c, 0x6c38, 0x607f, 0x52c7, 0x7528, 0x5e7d,
+ 0x4f18, 0x60a0, 0x5fe7, 0x5c24, 0x7531, 0x90ae, 0x94c0, 0x72b9,
+ 0x6cb9, 0x6e38, 0x9149, 0x6709, 0x53cb, 0x53f3, 0x4f51, 0x91c9,
+ 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2, 0x6de4, 0x4e8e, 0x76c2, 0x6986,
+ 0x865e, 0x611a, 0x8206, 0x4f59, 0x4fde, 0x903e, 0x9c7c, 0x6109,
+ 0x6e1d, 0x6e14, 0x9685, 0x4e88, 0x5a31, 0x96e8, 0x4e0e, 0x5c7f,
+ 0x79b9, 0x5b87, 0x8bed, 0x7fbd, 0x7389, 0x57df, 0x828b, 0x90c1,
+ 0x5401, 0x9047, 0x55bb, 0x5cea, 0x5fa1, 0x6108, 0x6b32, 0x72f1,
+ 0x80b2, 0x8a89, 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d,
+ 0x9e33, 0x6e0a, 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4,
+ 0x8f95, 0x56ed, 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc,
+ 0x82d1, 0x613f, 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3,
+ 0x94a5, 0x5cb3, 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91,
+ 0x90e7, 0x5300, 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655,
+ 0x97f5, 0x5b55, 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e,
+ 0x5bb0, 0x8f7d, 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e,
+ 0x8d43, 0x810f, 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3,
+ 0x65e9, 0x6fa1, 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076,
+ 0x71e5, 0x8d23, 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e,
+ 0x618e, 0x66fe, 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67,
+ 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8,
+ 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb,
+ 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d,
+ 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd,
+ 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756,
+ 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db,
+ 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087,
+ 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517,
+ 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827,
+ 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707,
+ 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0,
+ 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, 0x5e27, 0x75c7,
+ 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431, 0x8718, 0x77e5,
+ 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c, 0x76f4, 0x690d,
+ 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307, 0x6b62, 0x8dbe,
+ 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7, 0x81f3, 0x81f4,
+ 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9, 0x7a1a, 0x8d28,
+ 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d, 0x76c5, 0x5fe0,
+ 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd, 0x4ef2, 0x4f17,
+ 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5, 0x8f74, 0x8098,
+ 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4, 0x73e0, 0x682a,
+ 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010, 0x7af9, 0x70db,
+ 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457, 0x67f1, 0x52a9,
+ 0x86c0, 0x8d2e, 0x94f8, 0x7b51, 0x4f4f, 0x6ce8, 0x795d, 0x9a7b,
+ 0x6293, 0x722a, 0x62fd, 0x4e13, 0x7816, 0x8f6c, 0x64b0, 0x8d5a,
+ 0x7bc6, 0x6869, 0x5e84, 0x88c5, 0x5986, 0x649e, 0x58ee, 0x72b6,
+ 0x690e, 0x9525, 0x8ffd, 0x8d58, 0x5760, 0x7f00, 0x8c06, 0x51c6,
+ 0x6349, 0x62d9, 0x5353, 0x684c, 0x7422, 0x8301, 0x914c, 0x5544,
+ 0x7740, 0x707c, 0x6d4a, 0x5179, 0x54a8, 0x8d44, 0x59ff, 0x6ecb,
+ 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4, 0x7c7d, 0x6ed3, 0x5b50, 0x81ea,
+ 0x6e0d, 0x5b57, 0x9b03, 0x68d5, 0x8e2a, 0x5b97, 0x7efc, 0x603b,
+ 0x7eb5, 0x90b9, 0x8d70, 0x594f, 0x63cd, 0x79df, 0x8db3, 0x5352,
+ 0x65cf, 0x7956, 0x8bc5, 0x963b, 0x7ec4, 0x94bb, 0x7e82, 0x5634,
+ 0x9189, 0x6700, 0x7f6a, 0x5c0a, 0x9075, 0x6628, 0x5de6, 0x4f50,
+ 0x67de, 0x505a, 0x4f5c, 0x5750, 0x5ea7, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345,
+ 0x4e15, 0x4e98, 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba,
+ 0x4e3f, 0x5315, 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df,
+ 0x80e4, 0x9997, 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10,
+ 0x4e5c, 0x4e69, 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4,
+ 0x538d, 0x539d, 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a,
+ 0x53f5, 0x5326, 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202,
+ 0x5208, 0x520e, 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e,
+ 0x5261, 0x525c, 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293,
+ 0x5182, 0x7f54, 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1,
+ 0x4eeb, 0x4ede, 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25,
+ 0x4f27, 0x4f09, 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d,
+ 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89,
+ 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94,
+ 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1,
+ 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e,
+ 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043,
+ 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9,
+ 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107,
+ 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46,
+ 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9,
+ 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156,
+ 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34,
+ 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, 0x51c7, 0x5196,
+ 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa, 0x8bb4, 0x8bb5,
+ 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce, 0x8bd2, 0x8bd3,
+ 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf, 0x8be0, 0x8be4,
+ 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6, 0x8bf9, 0x8bfc,
+ 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c, 0x8c0f, 0x8c11,
+ 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b, 0x8c18, 0x8c1d,
+ 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a, 0x8c2b, 0x8c2e,
+ 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369, 0x537a, 0x961d,
+ 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c, 0x9642, 0x9649,
+ 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674, 0x9688, 0x968d,
+ 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099, 0x90ac, 0x90a1,
+ 0x90b4, 0x90b3, 0x90b6, 0x90ba, 0x90b8, 0x90b0, 0x90cf, 0x90c5,
+ 0x90be, 0x90d0, 0x90c4, 0x90c7, 0x90d3, 0x90e6, 0x90e2, 0x90dc,
+ 0x90d7, 0x90db, 0x90eb, 0x90ef, 0x90fe, 0x9104, 0x9122, 0x911e,
+ 0x9123, 0x9131, 0x912f, 0x9139, 0x9143, 0x9146, 0x520d, 0x5942,
+ 0x52a2, 0x52ac, 0x52ad, 0x52be, 0x54ff, 0x52d0, 0x52d6, 0x52f0,
+ 0x53df, 0x71ee, 0x77cd, 0x5ef4, 0x51f5, 0x51fc, 0x9b2f, 0x53b6,
+ 0x5f01, 0x755a, 0x5def, 0x574c, 0x57a9, 0x57a1, 0x587e, 0x58bc,
+ 0x58c5, 0x58d1, 0x5729, 0x572c, 0x572a, 0x5733, 0x5739, 0x572e,
+ 0x572f, 0x575c, 0x573b, 0x5742, 0x5769, 0x5785, 0x576b, 0x5786,
+ 0x577c, 0x577b, 0x5768, 0x576d, 0x5776, 0x5773, 0x57ad, 0x57a4,
+ 0x578c, 0x57b2, 0x57cf, 0x57a7, 0x57b4, 0x5793, 0x57a0, 0x57d5,
+ 0x57d8, 0x57da, 0x57d9, 0x57d2, 0x57b8, 0x57f4, 0x57ef, 0x57f8,
+ 0x57e4, 0x57dd, 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e,
+ 0x5819, 0x5844, 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a,
+ 0x5880, 0x99a8, 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f,
+ 0x828a, 0x82a8, 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab,
+ 0x82b8, 0x82be, 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7,
+ 0x82ae, 0x82cb, 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa,
+ 0x829f, 0x82c4, 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4,
+ 0x830f, 0x8307, 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb,
+ 0x82d3, 0x8311, 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5,
+ 0x831c, 0x8351, 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334,
+ 0x8331, 0x839b, 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f,
+ 0x8340, 0x8317, 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365,
+ 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0,
+ 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385,
+ 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e,
+ 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807,
+ 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411,
+ 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea,
+ 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a,
+ 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c,
+ 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1,
+ 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba,
+ 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c,
+ 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, 0x8556, 0x853b,
+ 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564, 0x855e, 0x857a,
+ 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8, 0x8587, 0x858f,
+ 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7, 0x85b0, 0x85d3,
+ 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629, 0x8616, 0x863c,
+ 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955, 0x595a, 0x5958,
+ 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c, 0x626a, 0x629f,
+ 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322, 0x62f6, 0x6339,
+ 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a, 0x638e, 0x63b4,
+ 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc, 0x63f2, 0x63f8,
+ 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452, 0x63c6, 0x63be,
+ 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c, 0x6426, 0x6421,
+ 0x645e, 0x6484, 0x646d, 0x6496, 0x647a, 0x64b7, 0x64b8, 0x6499,
+ 0x64ba, 0x64c0, 0x64d0, 0x64d7, 0x64e4, 0x64e2, 0x6509, 0x6525,
+ 0x652e, 0x5f0b, 0x5fd2, 0x7519, 0x5f11, 0x535f, 0x53f1, 0x53fd,
+ 0x53e9, 0x53e8, 0x53fb, 0x5412, 0x5416, 0x5406, 0x544b, 0x5452,
+ 0x5453, 0x5454, 0x5456, 0x5443, 0x5421, 0x5457, 0x5459, 0x5423,
+ 0x5432, 0x5482, 0x5494, 0x5477, 0x5471, 0x5464, 0x549a, 0x549b,
+ 0x5484, 0x5476, 0x5466, 0x549d, 0x54d0, 0x54ad, 0x54c2, 0x54b4,
+ 0x54d2, 0x54a7, 0x54a6, 0x54d3, 0x54d4, 0x5472, 0x54a3, 0x54d5,
+ 0x54bb, 0x54bf, 0x54cc, 0x54d9, 0x54da, 0x54dc, 0x54a9, 0x54aa,
+ 0x54a4, 0x54dd, 0x54cf, 0x54de, 0x551b, 0x54e7, 0x5520, 0x54fd,
+ 0x5514, 0x54f3, 0x5522, 0x5523, 0x550f, 0x5511, 0x5527, 0x552a,
+ 0x5567, 0x558f, 0x55b5, 0x5549, 0x556d, 0x5541, 0x5555, 0x553f,
+ 0x5550, 0x553c, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533,
+ 0x5530, 0x555c, 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588,
+ 0x5581, 0x559f, 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd,
+ 0x55be, 0x5594, 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1,
+ 0x55eb, 0x55ec, 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5,
+ 0x55f2, 0x55f3, 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94,
+ 0x561e, 0x5608, 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600,
+ 0x5627, 0x562d, 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662,
+ 0x5659, 0x565c, 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b,
+ 0x567b, 0x567c, 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd,
+ 0x56e1, 0x56f5, 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709,
+ 0x571c, 0x5e0f, 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c,
+ 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a,
+ 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a,
+ 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3,
+ 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02,
+ 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b,
+ 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d,
+ 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d,
+ 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89,
+ 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc,
+ 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3,
+ 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2,
+ 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, 0x72fb, 0x7317,
+ 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315, 0x7322, 0x7339,
+ 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d, 0x7357, 0x7360,
+ 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7, 0x5924, 0x5902,
+ 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x9974,
+ 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a, 0x998d, 0x9990,
+ 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91, 0x5e8b, 0x5e96,
+ 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3, 0x8d53, 0x5ed2,
+ 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4, 0x5fc9, 0x5fd6,
+ 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4, 0x5ffe, 0x6005,
+ 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035, 0x6026, 0x601b,
+ 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f, 0x6021, 0x6078,
+ 0x6079, 0x607b, 0x607a, 0x6042, 0x606a, 0x607d, 0x6096, 0x609a,
+ 0x60ad, 0x609d, 0x6083, 0x6092, 0x608c, 0x609b, 0x60ec, 0x60bb,
+ 0x60b1, 0x60dd, 0x60d8, 0x60c6, 0x60da, 0x60b4, 0x6120, 0x6126,
+ 0x6115, 0x6123, 0x60f4, 0x6100, 0x610e, 0x612b, 0x614a, 0x6175,
+ 0x61ac, 0x6194, 0x61a7, 0x61b7, 0x61d4, 0x61f5, 0x5fdd, 0x96b3,
+ 0x95e9, 0x95eb, 0x95f1, 0x95f3, 0x95f5, 0x95f6, 0x95fc, 0x95fe,
+ 0x9603, 0x9604, 0x9606, 0x9608, 0x960a, 0x960b, 0x960c, 0x960d,
+ 0x960f, 0x9612, 0x9615, 0x9616, 0x9617, 0x9619, 0x961a, 0x4e2c,
+ 0x723f, 0x6215, 0x6c35, 0x6c54, 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85,
+ 0x6c90, 0x6c94, 0x6c8c, 0x6c68, 0x6c69, 0x6c74, 0x6c76, 0x6c86,
+ 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad, 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7,
+ 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa, 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3,
+ 0x6cef, 0x6cfe, 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07,
+ 0x6d04, 0x6d19, 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a,
+ 0x6d4f, 0x6d52, 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0,
+ 0x6d5e, 0x6d93, 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a,
+ 0x6dc7, 0x6dc5, 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6,
+ 0x6ddd, 0x6dd9, 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e,
+ 0x6e4e, 0x6e6b, 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32,
+ 0x6e25, 0x6e44, 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2,
+ 0x6ea5, 0x6ea7, 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf,
+ 0x6e8f, 0x6ec2, 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15,
+ 0x6ef9, 0x6f2f, 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29,
+ 0x6f89, 0x6f8d, 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1,
+ 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde,
+ 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f,
+ 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f,
+ 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07,
+ 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6,
+ 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d,
+ 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051,
+ 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074,
+ 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56,
+ 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66,
+ 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e,
+ 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, 0x5997, 0x59ca,
+ 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af, 0x59d7, 0x59be,
+ 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8, 0x59f9, 0x5a0c,
+ 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13, 0x5a40, 0x5a67,
+ 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec, 0x5aaa, 0x5a9b,
+ 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2, 0x5ad4, 0x5ab8,
+ 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8, 0x5adc, 0x5b09,
+ 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15, 0x5c1c, 0x5b5a,
+ 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75, 0x9a77, 0x9a78,
+ 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85, 0x9a88, 0x9a8a,
+ 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b, 0x9a9c, 0x9a9d,
+ 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7, 0x7e9f, 0x7ea1,
+ 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0,
+ 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb, 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7,
+ 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8, 0x7eeb, 0x7eee, 0x7eef, 0x7ef1,
+ 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa, 0x7efb, 0x7efe, 0x7f01, 0x7f02,
+ 0x7f03, 0x7f07, 0x7f08, 0x7f0b, 0x7f0c, 0x7f0f, 0x7f11, 0x7f12,
+ 0x7f17, 0x7f19, 0x7f1c, 0x7f1b, 0x7f1f, 0x7f21, 0x7f22, 0x7f23,
+ 0x7f24, 0x7f25, 0x7f26, 0x7f27, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d,
+ 0x7f2f, 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f35, 0x5e7a, 0x757f,
+ 0x5ddb, 0x753e, 0x9095, 0x738e, 0x7391, 0x73ae, 0x73a2, 0x739f,
+ 0x73cf, 0x73c2, 0x73d1, 0x73b7, 0x73b3, 0x73c0, 0x73c9, 0x73c8,
+ 0x73e5, 0x73d9, 0x987c, 0x740a, 0x73e9, 0x73e7, 0x73de, 0x73ba,
+ 0x73f2, 0x740f, 0x742a, 0x745b, 0x7426, 0x7425, 0x7428, 0x7430,
+ 0x742e, 0x742c, 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455,
+ 0x7459, 0x7477, 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481,
+ 0x7487, 0x748b, 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2,
+ 0x74ba, 0x97ea, 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748,
+ 0x6769, 0x67a5, 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775,
+ 0x67a8, 0x679e, 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809,
+ 0x67d8, 0x680a, 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da,
+ 0x67b3, 0x67dd, 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1,
+ 0x67fd, 0x6832, 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844,
+ 0x6864, 0x6883, 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840,
+ 0x683e, 0x684a, 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877,
+ 0x6893, 0x686b, 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9,
+ 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971,
+ 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998,
+ 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966,
+ 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4,
+ 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff,
+ 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e,
+ 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28,
+ 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337,
+ 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d,
+ 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72,
+ 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c,
+ 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, 0x8f8d, 0x8f8e,
+ 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217, 0x621b, 0x621f,
+ 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7, 0x74ef, 0x74f4,
+ 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee, 0x65ef, 0x65f0,
+ 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, 0x7085, 0x66f7,
+ 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006, 0x665f, 0x6654,
+ 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677, 0x6684, 0x668c,
+ 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6, 0x66e9, 0x8d32,
+ 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45, 0x8d46, 0x8d48,
+ 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7, 0x89ca, 0x89cb,
+ 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e, 0x729f, 0x725d,
+ 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b, 0x728d, 0x728f,
+ 0x7292, 0x6308, 0x6332, 0x63b0, 0x643f, 0x64d8, 0x8004, 0x6bea,
+ 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9, 0x6c05, 0x6c07, 0x6c06, 0x6c0d,
+ 0x6c15, 0x6c18, 0x6c19, 0x6c1a, 0x6c21, 0x6c29, 0x6c24, 0x6c2a,
+ 0x6c32, 0x6535, 0x6555, 0x656b, 0x724d, 0x7252, 0x7256, 0x7230,
+ 0x8662, 0x5216, 0x809f, 0x809c, 0x8093, 0x80bc, 0x670a, 0x80bd,
+ 0x80b1, 0x80ab, 0x80ad, 0x80b4, 0x80b7, 0x80e7, 0x80e8, 0x80e9,
+ 0x80ea, 0x80db, 0x80c2, 0x80c4, 0x80d9, 0x80cd, 0x80d7, 0x6710,
+ 0x80dd, 0x80eb, 0x80f1, 0x80f4, 0x80ed, 0x810d, 0x810e, 0x80f2,
+ 0x80fc, 0x6715, 0x8112, 0x8c5a, 0x8136, 0x811e, 0x812c, 0x8118,
+ 0x8132, 0x8148, 0x814c, 0x8153, 0x8174, 0x8159, 0x815a, 0x8171,
+ 0x8160, 0x8169, 0x817c, 0x817d, 0x816d, 0x8167, 0x584d, 0x5ab5,
+ 0x8188, 0x8182, 0x8191, 0x6ed5, 0x81a3, 0x81aa, 0x81cc, 0x6726,
+ 0x81ca, 0x81bb, 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43,
+ 0x6b46, 0x6b59, 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da,
+ 0x6bb3, 0x5f40, 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc,
+ 0x65c6, 0x65c4, 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080,
+ 0x709c, 0x7096, 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1,
+ 0x70e8, 0x70ca, 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173,
+ 0x715c, 0x7168, 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198,
+ 0x71b3, 0x71b5, 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9,
+ 0x721d, 0x7228, 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d,
+ 0x6243, 0x6248, 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b,
+ 0x795c, 0x7953, 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967,
+ 0x797a, 0x7985, 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0,
+ 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab,
+ 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206,
+ 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800,
+ 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d,
+ 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823,
+ 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847,
+ 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1,
+ 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec,
+ 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b,
+ 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707,
+ 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738,
+ 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, 0x7762, 0x7765,
+ 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791, 0x779f, 0x77a0,
+ 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e, 0x754b, 0x7548,
+ 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61, 0x7f5f, 0x8a48,
+ 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e, 0x76cd, 0x76e5,
+ 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a, 0x948c, 0x948d,
+ 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a, 0x949b, 0x949c,
+ 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac, 0x94af, 0x94b0,
+ 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bc,
+ 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc,
+ 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, 0x94d6, 0x94d7,
+ 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0, 0x94e2, 0x94e4,
+ 0x94e5, 0x94e7, 0x94e8, 0x94ea, 0x94e9, 0x94eb, 0x94ee, 0x94ef,
+ 0x94f3, 0x94f4, 0x94f5, 0x94f7, 0x94f9, 0x94fc, 0x94fd, 0x94ff,
+ 0x9503, 0x9502, 0x9506, 0x9507, 0x9509, 0x950a, 0x950d, 0x950e,
+ 0x950f, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9518, 0x951b,
+ 0x951d, 0x951e, 0x951f, 0x9522, 0x952a, 0x952b, 0x9529, 0x952c,
+ 0x9531, 0x9532, 0x9534, 0x9536, 0x9537, 0x9538, 0x953c, 0x953e,
+ 0x953f, 0x9542, 0x9535, 0x9544, 0x9545, 0x9546, 0x9549, 0x954c,
+ 0x954e, 0x954f, 0x9552, 0x9553, 0x9554, 0x9556, 0x9557, 0x9558,
+ 0x9559, 0x955b, 0x955e, 0x955f, 0x955d, 0x9561, 0x9562, 0x9564,
+ 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c,
+ 0x956f, 0x9571, 0x9572, 0x9573, 0x953a, 0x77e7, 0x77ec, 0x96c9,
+ 0x79d5, 0x79ed, 0x79e3, 0x79eb, 0x7a06, 0x5d47, 0x7a03, 0x7a02,
+ 0x7a1e, 0x7a14, 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70,
+ 0x7688, 0x768e, 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c,
+ 0x9e20, 0x9e22, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32,
+ 0x9e31, 0x9e36, 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41,
+ 0x9e42, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c,
+ 0x9e4e, 0x9e51, 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e,
+ 0x9e63, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c,
+ 0x9e71, 0x9e6d, 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d,
+ 0x75ac, 0x75a3, 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0,
+ 0x75c3, 0x75c2, 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4,
+ 0x75eb, 0x75e7, 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600,
+ 0x7605, 0x760c, 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619,
+ 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f,
+ 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c,
+ 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80,
+ 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad,
+ 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2,
+ 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5,
+ 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919,
+ 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966,
+ 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014,
+ 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029,
+ 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052,
+ 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, 0x9889, 0x988c,
+ 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e, 0x989f, 0x98a1,
+ 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c, 0x866e, 0x867f,
+ 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b, 0x86ac, 0x869d,
+ 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6, 0x86c4, 0x86b5,
+ 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9, 0x86cf, 0x86b4,
+ 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0, 0x8713, 0x86de,
+ 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707, 0x86f8, 0x8708,
+ 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e, 0x8725, 0x872e,
+ 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729, 0x8737, 0x873f,
+ 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760, 0x8770, 0x874c,
+ 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764, 0x8759, 0x8765,
+ 0x8793, 0x87af, 0x87a8, 0x87d2, 0x87c6, 0x8788, 0x8785, 0x87ad,
+ 0x8797, 0x8783, 0x87ab, 0x87e5, 0x87ac, 0x87b5, 0x87b3, 0x87cb,
+ 0x87d3, 0x87bd, 0x87d1, 0x87c0, 0x87ca, 0x87db, 0x87ea, 0x87e0,
+ 0x87ee, 0x8816, 0x8813, 0x87fe, 0x880a, 0x881b, 0x8821, 0x8839,
+ 0x883c, 0x7f36, 0x7f42, 0x7f44, 0x7f45, 0x8210, 0x7afa, 0x7afd,
+ 0x7b08, 0x7b03, 0x7b04, 0x7b15, 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47,
+ 0x7b38, 0x7b2a, 0x7b19, 0x7b2e, 0x7b31, 0x7b20, 0x7b25, 0x7b24,
+ 0x7b33, 0x7b3e, 0x7b1e, 0x7b58, 0x7b5a, 0x7b45, 0x7b75, 0x7b4c,
+ 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b, 0x7b62, 0x7b72, 0x7b71, 0x7b90,
+ 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac, 0x7b9d, 0x7ba8, 0x7b85, 0x7baa,
+ 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4, 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd,
+ 0x7bda, 0x7be5, 0x7be6, 0x7bea, 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f,
+ 0x7c16, 0x7c0b, 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40,
+ 0x81fe, 0x8201, 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222,
+ 0x8223, 0x822d, 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233,
+ 0x8234, 0x823e, 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f,
+ 0x8268, 0x887e, 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d,
+ 0x7f9f, 0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91,
+ 0x7c9d, 0x7c9c, 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1,
+ 0x7cc7, 0x7ccc, 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e,
+ 0x66a8, 0x7fbf, 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9,
+ 0x7fee, 0x7ff3, 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b,
+ 0x9eb8, 0x9eb4, 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67,
+ 0x8d6d, 0x8c47, 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164,
+ 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172,
+ 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2,
+ 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba,
+ 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5,
+ 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde,
+ 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3,
+ 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f,
+ 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35,
+ 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a,
+ 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94,
+ 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98,
+ 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, 0x89e5, 0x89eb,
+ 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3, 0x96ef, 0x9706,
+ 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d, 0x9730, 0x973e,
+ 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, 0x9f8a,
+ 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc, 0x96bd, 0x96ce,
+ 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8, 0x933e, 0x936a,
+ 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82, 0x9c85, 0x9c86,
+ 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90, 0x9c91, 0x9c92,
+ 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1,
+ 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9cab,
+ 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5,
+ 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cc4, 0x9cc5,
+ 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf,
+ 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc,
+ 0x9cdd, 0x9cdf, 0x9ce2, 0x977c, 0x9785, 0x9791, 0x9792, 0x9794,
+ 0x97af, 0x97ab, 0x97a3, 0x97b2, 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7,
+ 0x9e58, 0x9ab6, 0x9aba, 0x9abc, 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2,
+ 0x9acb, 0x9acc, 0x9ad1, 0x9b45, 0x9b43, 0x9b47, 0x9b49, 0x9b48,
+ 0x9b4d, 0x9b51, 0x98e8, 0x990d, 0x992e, 0x9955, 0x9954, 0x9adf,
+ 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb, 0x9afb, 0x9aed, 0x9af9, 0x9b08,
+ 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82,
+ 0x9e87, 0x9e88, 0x9e8b, 0x9e92, 0x93d6, 0x9e9d, 0x9e9f, 0x9edb,
+ 0x9edc, 0x9edd, 0x9ee0, 0x9edf, 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5,
+ 0x9eea, 0x9eef, 0x9f22, 0x9f2c, 0x9f2f, 0x9f39, 0x9f37, 0x9f3d,
+ 0x9f3e, 0x9f44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x9f44, 0xffffffff, 0x00ff, 0x0000,
+ 0x0100, 0x0003, 0x2288, 0x804f240, 0x0100, 0x0005, 0x00f8, 0x42130a14
+};
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/configure-fontforge.h b/dviware/dvisvgm/libs/ff-woff/fontforge/configure-fontforge.h
new file mode 100644
index 0000000000..d5511494c5
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/configure-fontforge.h
@@ -0,0 +1,109 @@
+/* Copyright (C) 2002-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _CONFIG_FONTFORGE_H_
+#define _CONFIG_FONTFORGE_H_
+
+
+/* Apple suggests using a sfnt version of 'true' for fonts designed for use */
+/* only on a mac (windows refuses such fonts). I generally prefer to have a */
+/* font work everywhere, so normally ff produces fonts with version 1.0 */
+/* Set this if you want Apple only fonts (produced when Apple mode is set and*/
+/* Opentype mode is unset in the Generate Fonts-Options dialog). */
+/* */
+/* #define FONTFORGE_CONFIG_APPLE_ONLY_TTF */
+/* */
+
+
+/* Nobody else puts apple unicode encodings into the name table. So I probably*/
+/* shouldn't either. But if someone wants them... */
+/* */
+/* #define FONTFORGE_CONFIG_APPLE_UNICODE_NAMES */
+/* */
+
+
+/* I used to use an approximation method when converting cubic to quadratic */
+/* splines which was non-symmetric. In some cases it produced better results */
+/* than the current approach. This flag restores the old algorithm. */
+/* */
+/* #define FONTFORGE_CONFIG_NON_SYMMETRIC_QUADRATIC_CONVERSION */
+/* */
+
+
+/* Harald Harders would like to be able to generate a PFM file without */
+/* creating a font along with it. I don't see the need for this, but he pro- */
+/* vided a patch. Setting this flag will enable his patch */
+/* */
+/* #define FONTFORGE_CONFIG_WRITE_PFM */
+/* */
+
+
+/* Prior to late Sept of 2003 FontForge converted certain mac feature/settings*/
+/* into opentype-like tags. Some features could be converted directly but for*/
+/* a few I made up tags. Now FontForge is capable of using the mac feature */
+/* settings directly. If you set this flag then when FontForge loads in an sfd*/
+/* file with these non-standard opentype tags, it will convert them into the */
+/* appropriate mac feature/setting combinations. */
+/* */
+/* #define FONTFORGE_CONFIG_CVT_OLD_MAC_FEATURES */
+/* */
+
+
+/* In addition to placing snippets of charstrings into subrs, I tried adding */
+/* whole glyphs (when that was possible). To my surprise, it made things */
+/* worse in one of my test cases, and barely registered an improvement in */
+/* another. So I think we're better off without it. But I don't understand */
+/* why things are worse so I'm leaving the code in to play with */
+/* */
+/* #define FONTFORGE_CONFIG_PS_REFS_GET_SUBRS */
+/* */
+
+
+/* Werner wants to be able to see the raw (unscaled) data for the location of */
+/* points (in the points window of the debugger). I'm not sure that is */
+/* generally a good idea (I think it makes the dlg look unsymetric). */
+/* */
+/* #define FONTFORGE_CONFIG_SHOW_RAW_POINTS */
+/* */
+
+
+/* ************************************************************************** */
+/* **************************** Numeric Settings **************************** */
+/* ************************************************************************** */
+
+
+/* The number of files displayed in the "File->Recent" menu */
+#define RECENT_MAX 10
+
+/* The number of tabs allowed in the outline glyph view of former glyphs */
+#define FORMER_MAX 10
+
+/* The maximum number of layers allowed in a normal font (this includes the */
+/* default foreground and background layers) -- this does not limit type3 */
+/* fonts */
+#define BACK_LAYER_MAX 256
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/cvundoes.c b/dviware/dvisvgm/libs/ff-woff/fontforge/cvundoes.c
new file mode 100644
index 0000000000..1f09c640a1
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/cvundoes.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "psfont.h"
+
+#ifndef HAVE_EXECINFO_H
+// no backtrace available
+#else
+ #include <execinfo.h>
+#endif
+
+/* ********************************* Undoes ********************************* */
+
+int getAdobeEnc(const char *name) {
+ int i;
+
+ for ( i=0; i<256; ++i )
+ if ( strcmp(name,AdobeStandardEncoding[i])==0 )
+ break;
+ if ( i==256 ) i = -1;
+return( i );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/dumppfa.c b/dviware/dvisvgm/libs/ff-woff/fontforge/dumppfa.c
new file mode 100644
index 0000000000..4a58d1ea6d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/dumppfa.c
@@ -0,0 +1,131 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+
+#ifdef __CygWin
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
+#endif
+
+char *PSDictHasEntry(struct psdict *dict, const char *key) {
+ int i;
+
+ if ( dict==NULL )
+return( NULL );
+
+ for ( i=0; i<dict->next; ++i )
+ if ( strcmp(dict->keys[i],key)==0 )
+return( dict->values[i] );
+
+return( NULL );
+}
+
+int PSDictSame(struct psdict *dict1, struct psdict *dict2) {
+ int i;
+
+ if ( (dict1==NULL || dict1->cnt==0) && (dict2==NULL || dict2->cnt==0))
+return( true );
+ if ( dict1==NULL || dict2==NULL || dict1->cnt!=dict2->cnt )
+return( false );
+
+ for ( i=0; i<dict1->cnt; ++i ) {
+ char *val = PSDictHasEntry(dict2,dict1->keys[i]);
+ if ( val==NULL || strcmp(val,dict1->values[i])!=0 )
+return( false );
+ }
+return( true );
+}
+
+/* Inside a font, I can't use a <stdin> as a data source. Probably because */
+/* the parser doesn't know what to do with those data when building the char */
+/* proc (as opposed to executing) */
+/* So I can't use run length filters or other compression technique */
+
+static double FindMaxDiffOfBlues(char *pt, double max_diff) {
+ char *end;
+ double p1, p2;
+
+ while ( *pt==' ' || *pt=='[' ) ++pt;
+ for (;;) {
+ p1 = strtod(pt,&end);
+ if ( end==pt )
+ break;
+ pt = end;
+ p2 = strtod(pt,&end);
+ if ( end==pt )
+ break;
+ if ( p2-p1 >max_diff ) max_diff = p2-p1;
+ pt = end;
+ }
+return( max_diff );
+}
+
+double BlueScaleFigureForced(struct psdict *private_,real bluevalues[], real otherblues[]) {
+ double max_diff=0;
+ char *pt;
+ int i;
+
+ pt = PSDictHasEntry(private_,"BlueValues");
+ if ( pt!=NULL ) {
+ max_diff = FindMaxDiffOfBlues(pt,max_diff);
+ } else if ( bluevalues!=NULL ) {
+ for ( i=0; i<14 && (bluevalues[i]!=0 || bluevalues[i+1])!=0; i+=2 ) {
+ if ( bluevalues[i+1] - bluevalues[i]>=max_diff )
+ max_diff = bluevalues[i+1] - bluevalues[i];
+ }
+ }
+ pt = PSDictHasEntry(private_,"FamilyBlues");
+ if ( pt!=NULL )
+ max_diff = FindMaxDiffOfBlues(pt,max_diff);
+
+ pt = PSDictHasEntry(private_,"OtherBlues");
+ if ( pt!=NULL )
+ max_diff = FindMaxDiffOfBlues(pt,max_diff);
+ else if ( otherblues!=NULL ) {
+ for ( i=0; i<10 && (otherblues[i]!=0 || otherblues[i+1]!=0); i+=2 ) {
+ if ( otherblues[i+1] - otherblues[i]>=max_diff )
+ max_diff = otherblues[i+1] - otherblues[i];
+ }
+ }
+ pt = PSDictHasEntry(private_,"FamilyOtherBlues");
+ if ( pt!=NULL )
+ max_diff = FindMaxDiffOfBlues(pt,max_diff);
+ if ( max_diff<=0 )
+return( -1 );
+ if ( 1/max_diff > .039625 )
+return( -1 );
+
+ return rint(240.0*0.99/max_diff)/240.0;
+}
+
+double BlueScaleFigure(struct psdict *private_,real bluevalues[], real otherblues[]) {
+ if ( PSDictHasEntry(private_,"BlueScale")!=NULL )
+return( -1 );
+ return BlueScaleFigureForced(private_, bluevalues, otherblues);
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist.h b/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist.h
new file mode 100644
index 0000000000..99a1cc823b
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist.h
@@ -0,0 +1,144 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _EDGELIST_H
+#define _EDGELIST_H
+#include "splinefont.h"
+
+typedef struct hints {
+ real base, width;
+ real b1, b2, e1, e2;
+ real ab, ae;
+ unsigned int adjustb: 1;
+ unsigned int adjuste: 1;
+ struct hints *next;
+} Hints;
+
+/* Instead of y and x coordinates these are based on major and other */
+/* major maybe either x or y depending on what we're interested in */
+/* at the moment, and other will be the other one. Of course it's */
+/* consistant accross the datastructure at any given time */
+typedef struct edge {
+ real mmin, mmax; /* relative to es->mmin */
+ real t_mmin, t_mmax;
+ real tmin, tmax;
+ real o_mmin, o_mmax;
+ real t_cur, o_cur, m_cur;
+ unsigned int up: 1; /* line is directed up in the spline list */
+ unsigned int max_adjusted: 1; /* by hstem hints */
+ unsigned int min_adjusted: 1;
+ Spline *spline; /* spline which generated this segment */
+ struct edge *esnext, *aenext;
+ struct edge *before, *after;
+ int last_opos, last_mpos;
+ real oldt; /* only used for FindIntersections of RemoveOverlap */
+} Edge;
+
+typedef struct edgelist {
+ Edge **edges;
+ int cnt;
+ real mmin, mmax;
+ real omin, omax;
+ real scale;
+ int bytes_per_line;
+ uint8 *bitmap;
+ Edge *last, *splinesetfirst;
+ SplineChar *sc;
+ int layer;
+ char *interesting;
+ int major, other;
+ unsigned int genmajoredges: 1; /* generate a list of edges parallel to the major axis */
+ Edge *majors; /* ordered so that lowest edge is first */
+ Edge *majorhold; /* to hold major edges as we pass them and they become useless */
+ Hints *hhints, *vhints;
+ int is_overlap;
+ DBounds bbox; /* Not always set. {m,o}{min,max} a provide scaled bbox, this is in glyph units */
+} EdgeList;
+
+extern void FreeEdges(EdgeList *es);
+
+/* Version which is better for everything other than rasterization */
+/* (I think) */
+typedef struct edgeinfo {
+ /* The spline is broken up at all extrema. So... */
+ /* The spline between tmin and tmax is monotonic in both coordinates */
+ /* If the spline becomes vert/horizontal that will be at one of the */
+ /* end points too */
+ Spline *spline;
+ real tmin, tmax;
+ real coordmin[2];
+ real coordmax[2];
+ unsigned int up: 1;
+ unsigned int hv: 1;
+ unsigned int hvbottom: 1;
+ unsigned int hvtop: 1;
+ unsigned int hor: 1;
+ unsigned int vert: 1;
+ unsigned int almosthor: 1;
+ unsigned int almostvert: 1;
+ unsigned int horattmin: 1;
+ unsigned int horattmax: 1;
+ unsigned int vertattmin: 1;
+ unsigned int vertattmax: 1;
+ unsigned hup: 1;
+ unsigned vup: 1;
+ real tcur; /* Value of t for current major coord */
+ real ocur; /* Value of the other coord for current major coord */
+ struct edgeinfo *next;
+ struct edgeinfo *ordered;
+ struct edgeinfo *aenext;
+ struct edgeinfo *splinenext;
+ SplineChar *sc;
+ int major;
+} EI;
+
+typedef struct eilist {
+ EI *edges;
+ real coordmin[2];
+ real coordmax[2];
+ int low, high, cnt;
+ EI **ordered;
+ char *ends; /* flag to say an edge ends on this line */
+ SplineChar *sc;
+ int layer;
+ int major;
+ EI *splinelast, *splinefirst;
+ EI **bottoms, **tops; /* Used only be FindNeeded in RemoveOverlap */
+ unsigned leavetiny: 1;
+ enum overlap_type ot;
+} EIList;
+
+extern void ElFreeEI(EIList *el);
+extern void ELFindEdges(SplineChar *sc, EIList *el);
+extern void ELOrder(EIList *el, int major );
+extern real EITOfNextMajor(EI *e, EIList *el, real sought_m );
+extern int EISameLine(EI *e, EI *n, real i, int major);
+extern int EISkipExtremum(EI *e, real i, int major);
+extern EI *EIActiveEdgesFindStem(EI *apt, real i, int major);
+extern EI *EIActiveListReorder(EI *active,int *change);
+extern EI *EIActiveEdgesRefigure(EIList *el, EI *active,real i,int major,
+ int *_change);
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist2.h b/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist2.h
new file mode 100644
index 0000000000..c352288ef6
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/edgelist2.h
@@ -0,0 +1,87 @@
+/* Copyright (C) 2004-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _EDGELIST2_H
+#define _EDGELIST2_H
+#include "splinefont.h"
+
+struct monotonic;
+
+typedef struct mlist {
+ Spline *s;
+ struct monotonic *m; /* May get slightly munched but will */
+ /* always have right spline. we fix when we need it */
+ extended t;
+ int isend;
+ BasePoint unit;
+ struct mlist *next;
+} MList;
+
+typedef struct intersection {
+ MList *monos;
+ BasePoint inter;
+ struct intersection *next;
+} Intersection;
+
+typedef struct preintersection {
+ BasePoint inter;
+ struct monotonic *m1; bigreal t1;
+ struct monotonic *m2; bigreal t2;
+ unsigned int is_close: 1;
+ struct preintersection *next;
+} PreIntersection;
+
+#define FF_RELATIONAL_GEOM
+
+typedef struct monotonic {
+ Spline *s;
+ extended tstart, tend;
+#ifdef FF_RELATIONAL_GEOM
+ extended otstart, otend;
+#endif
+ struct monotonic *next, *prev; /* along original contour */
+ uint8 xup; /* increasing t => increasing x */
+ uint8 yup;
+ unsigned int isneeded : 1;
+ unsigned int isunneeded : 1;
+ unsigned int mutual_collapse : 1;
+ unsigned int exclude : 1;
+ struct intersection *start;
+ struct intersection *end;
+ DBounds b;
+ extended other, t;
+ struct monotonic *linked; /* singly linked list of all monotonic*/
+ /* segments, no contour indication */
+ double when_set; /* Debugging */
+ struct preintersection *pending;
+} Monotonic;
+
+extern void FreeMonotonics(Monotonic *m);
+extern Monotonic *SSsToMContours(SplineSet *spl, enum overlap_type ot);
+ /* overlap_type controls whether we look at selected splinesets or all splinesets */
+extern int MonotonicFindAt(Monotonic *ms,int which, extended test, Monotonic **space );
+
+#endif /* _EDGELIST2_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.c b/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.c
new file mode 100644
index 0000000000..4fe2523715
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.c
@@ -0,0 +1,791 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fontforgevw.h"
+
+#ifdef _MSC_VER
+#define strcasecmp _stricmp
+#define strncasecmp _strnicmp
+#else
+
+#endif
+
+#include "encoding.h"
+#include "psfont.h"
+
+Encoding *default_encoding = NULL;
+
+static int32 tex_base_encoding[] = {
+ 0x0000, 0x02d9, 0xfb01, 0xfb02, 0x2044, 0x02dd, 0x0141, 0x0142,
+ 0x02db, 0x02da, 0x000a, 0x02d8, 0x2212, 0x000d, 0x017d, 0x017e,
+ 0x02c7, 0x0131, 0xf6be, 0xfb00, 0xfb03, 0xfb04, 0x2260, 0x221e,
+ 0x2264, 0x2265, 0x2202, 0x2211, 0x220f, 0x03c0, 0x0060, 0x0027,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x2018, 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,
+ 0x20ac, 0x222b, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
+ 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x2126, 0x221a, 0x2248,
+ 0x0090, 0x0091, 0x0092, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+ 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x2206, 0x25ca, 0x0178,
+ 0x0000, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x002d, 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,
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+};
+
+static int32 unicode_from_MacSymbol[] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220d,
+ 0x0028, 0x0029, 0x2217, 0x002b, 0x002c, 0x2212, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x2245, 0x0391, 0x0392, 0x03a7, 0x0394, 0x0395, 0x03a6, 0x0393,
+ 0x0397, 0x0399, 0x03d1, 0x039a, 0x039b, 0x039c, 0x039d, 0x039f,
+ 0x03a0, 0x0398, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03c2, 0x03a9,
+ 0x039e, 0x03a8, 0x0396, 0x005b, 0x2234, 0x005d, 0x22a5, 0x005f,
+ 0xf8e5, 0x03b1, 0x03b2, 0x03c7, 0x03b4, 0x03b5, 0x03c6, 0x03b3,
+ 0x03b7, 0x03b9, 0x03d5, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf,
+ 0x03c0, 0x03b8, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03d6, 0x03c9,
+ 0x03be, 0x03c8, 0x03b6, 0x007b, 0x007c, 0x007d, 0x223c, 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,
+ 0x0000, 0x03d2, 0x2032, 0x2264, 0x2044, 0x221e, 0x0192, 0x2663,
+ 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193,
+ 0x00b0, 0x00b1, 0x2033, 0x2265, 0x00d7, 0x221d, 0x2202, 0x2022,
+ 0x00f7, 0x2260, 0x2261, 0x2248, 0x2026, 0xf8e6, 0xf8e7, 0x21b5,
+ 0x2135, 0x2111, 0x211c, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229,
+ 0x222a, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209,
+ 0x2220, 0x2207, 0x00ae, 0x00a9, 0x2122, 0x220f, 0x221a, 0x22c5,
+ 0x00ac, 0x2227, 0x2228, 0x21d4, 0x21d0, 0x21d1, 0x21d2, 0x21d3,
+ 0x22c4, 0x2329, 0xf8e8, 0xf8e9, 0xf8ea, 0x2211, 0xf8eb, 0xf8ec,
+ 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0, 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4,
+ 0xf8ff, 0x232a, 0x222b, 0x2320, 0xf8f5, 0x2321, 0xf8f6, 0xf8f7,
+ 0xf8f8, 0xf8f9, 0xf8fa, 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0x02c7
+};
+
+/* I don't think iconv provides encodings for zapfdingbats nor jis201 */
+/* Perhaps I should list them here for compatability, but I think I'll just */
+/* leave them out. I doubt they get used. */
+static Encoding texbase = { "TeX-Base-Encoding", 256, tex_base_encoding, NULL, NULL, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+ Encoding custom = { "Custom", 0, NULL, NULL, &texbase, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+static Encoding original = { "Original", 0, NULL, NULL, &custom, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+static Encoding unicodebmp = { "UnicodeBmp", 65536, NULL, NULL, &original, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+static Encoding unicodefull = { "UnicodeFull", 17*65536, NULL, NULL, &unicodebmp, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+static Encoding adobestd = { "AdobeStandard", 256, unicode_from_adobestd, (char**)AdobeStandardEncoding, &unicodefull,
+ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+static Encoding symbol = { "Symbol", 256, unicode_from_MacSymbol, NULL, &adobestd, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, 0, NULL, NULL, NULL, NULL, NULL, 0, 0 };
+
+Encoding *enclist = &symbol;
+
+const char *FindUnicharName(void) {
+ /* Iconv and libiconv use different names for UCS2. Just great. Perhaps */
+ /* different versions of each use still different names? */
+ /* Even worse, both accept UCS-2, but under iconv it means native byte */
+ /* ordering and under libiconv it means big-endian */
+ iconv_t test;
+ static const char *goodname = NULL;
+ static const char *names[] = { "UCS-4-INTERNAL", "UCS-4", "UCS4", "ISO-10646-UCS-4", "UTF-32", NULL };
+ static const char *namesle[] = { "UCS-4LE", "UTF-32LE", NULL };
+ static const char *namesbe[] = { "UCS-4BE", "UTF-32BE", NULL };
+ const char **testnames;
+ int i;
+ union {
+ short s;
+ char c[2];
+ } u;
+
+ if ( goodname!=NULL )
+return( goodname );
+
+ u.c[0] = 0x1; u.c[1] = 0x2;
+ if ( u.s==0x201 ) { /* Little endian */
+ testnames = namesle;
+ } else {
+ testnames = namesbe;
+ }
+ for ( i=0; testnames[i]!=NULL; ++i ) {
+ test = iconv_open(testnames[i],"ISO-8859-1");
+ if ( test!=(iconv_t) -1 && test!=NULL ) {
+ iconv_close(test);
+ goodname = testnames[i];
+ break;
+ }
+ }
+
+ if ( goodname==NULL ) {
+ for ( i=0; names[i]!=NULL; ++i ) {
+ test = iconv_open(names[i],"ISO-8859-1");
+ if ( test!=(iconv_t) -1 && test!=NULL ) {
+ iconv_close(test);
+ goodname = names[i];
+ break;
+ }
+ }
+ }
+
+ if ( goodname==NULL ) {
+ IError( "I can't figure out your version of iconv(). I need a name for the UCS-4 encoding and I can't find one. Reconfigure --without-iconv. Bye.");
+ exit( 1 );
+ }
+
+ test = iconv_open(goodname,"Mac");
+ if ( test==(iconv_t) -1 || test==NULL ) {
+ IError( "Your version of iconv does not support the \"Mac Roman\" encoding.\nIf this causes problems, reconfigure --without-iconv." );
+ } else
+ iconv_close(test);
+
+ /* I really should check for ISO-2022-JP, KR, CN, and all the other encodings */
+ /* I might find in a ttf 'name' table. But those tables take too long to build */
+return( goodname );
+}
+
+static int TryEscape( Encoding *enc, const char *escape_sequence ) {
+ char from[20], ucs[20];
+ size_t fromlen, tolen;
+ ICONV_CONST char *fpt;
+ char *upt;
+ int i, j, low;
+ int esc_len = strlen(escape_sequence);
+
+ strcpy(from,escape_sequence);
+
+ enc->has_2byte = false;
+ low = -1;
+ for ( i=0; i<256; ++i ) if ( i!=escape_sequence[0] ) {
+ for ( j=0; j<256; ++j ) {
+ from[esc_len] = i; from[esc_len+1] = j; from[esc_len+2] = 0;
+ fromlen = esc_len+2;
+ fpt = from;
+ upt = ucs;
+ tolen = sizeof(ucs);
+ if ( iconv( enc->tounicode , &fpt, &fromlen, &upt, &tolen )!= (size_t) (-1) &&
+ upt-ucs==sizeof(unichar_t) /* Exactly one character */ ) {
+ if ( low==-1 ) {
+ enc->low_page = low = i;
+ enc->has_2byte = true;
+ }
+ enc->high_page = i;
+ break;
+ }
+ }
+ }
+ if ( enc->low_page==enc->high_page )
+ enc->has_2byte = false;
+ if ( enc->has_2byte ) {
+ strcpy(enc->iso_2022_escape, escape_sequence);
+ enc->iso_2022_escape_len = esc_len;
+ }
+return( enc->has_2byte );
+}
+
+Encoding *_FindOrMakeEncoding(const char *name,int make_it) {
+ Encoding *enc;
+ char buffer[20];
+ const char *iconv_name;
+ Encoding temp;
+ uint8 good[256];
+ int i, j, any, all;
+ char from[8], ucs[20];
+ size_t fromlen, tolen;
+ ICONV_CONST char *fpt;
+ char *upt;
+ /* iconv is not case sensitive */
+
+ if ( strncasecmp(name,"iso8859_",8)==0 || strncasecmp(name,"koi8_",5)==0 ) {
+ /* Fixup for old naming conventions */
+ strncpy(buffer,name,sizeof(buffer));
+ buffer[sizeof(buffer)-1] = '\0';
+ *strchr(buffer,'_') = '-';
+ name = buffer;
+ } else if ( strcasecmp(name,"iso-8859")==0 ) {
+ /* Fixup for old naming conventions */
+ strncpy(buffer,name,3);
+ strncpy(buffer+3,name+4,sizeof(buffer)-3);
+ buffer[sizeof(buffer)-1] = '\0';
+ name = buffer;
+ } else if ( strcasecmp(name,"isolatin1")==0 ) {
+ name = "iso8859-1";
+ } else if ( strcasecmp(name,"isocyrillic")==0 ) {
+ name = "iso8859-5";
+ } else if ( strcasecmp(name,"isoarabic")==0 ) {
+ name = "iso8859-6";
+ } else if ( strcasecmp(name,"isogreek")==0 ) {
+ name = "iso8859-7";
+ } else if ( strcasecmp(name,"isohebrew")==0 ) {
+ name = "iso8859-8";
+ } else if ( strcasecmp(name,"isothai")==0 ) {
+ name = "tis-620"; /* TIS doesn't define non-breaking space in 0xA0 */
+ } else if ( strcasecmp(name,"latin0")==0 || strcasecmp(name,"latin9")==0 ) {
+ name = "iso8859-15"; /* "latin-9" is supported (libiconv bug?) */
+ } else if ( strcasecmp(name,"koi8r")==0 ) {
+ name = "koi8-r";
+ } else if ( strncasecmp(name,"jis201",6)==0 || strncasecmp(name,"jisx0201",8)==0 ) {
+ name = "jis_x0201";
+ } else if ( strcasecmp(name,"AdobeStandardEncoding")==0 || strcasecmp(name,"Adobe")==0 )
+ name = "AdobeStandard";
+ for ( enc=enclist; enc!=NULL; enc=enc->next )
+ if ( strmatch(name,enc->enc_name)==0 ||
+ (enc->iconv_name!=NULL && strmatch(name,enc->iconv_name)==0))
+return( enc );
+ if ( strmatch(name,"unicode")==0 || strmatch(name,"iso10646")==0 || strmatch(name,"iso10646-1")==0 )
+return( &unicodebmp );
+ if ( strmatch(name,"unicode4")==0 || strmatch(name,"ucs4")==0 )
+return( &unicodefull );
+
+ iconv_name = name;
+ /* Mac seems to work ok */
+ if ( strcasecmp(name,"win")==0 || strcasecmp(name,"ansi")==0 )
+ iconv_name = "MS-ANSI"; /* "WINDOWS-1252";*/
+ else if ( strncasecmp(name,"jis208",6)==0 || strncasecmp(name,"jisx0208",8)==0 )
+ iconv_name = "ISO-2022-JP";
+ else if ( strncasecmp(name,"jis212",6)==0 || strncasecmp(name,"jisx0212",8)==0 )
+ iconv_name = "ISO-2022-JP-2";
+ else if ( strncasecmp(name,"ksc5601",7)==0 )
+ iconv_name = "ISO-2022-KR";
+ else if ( strcasecmp(name,"gb2312pk")==0 || strcasecmp(name,"gb2312packed")==0 )
+ iconv_name = "EUC-CN";
+ else if ( strncasecmp(name,"gb2312",6)==0 )
+ iconv_name = "ISO-2022-CN";
+ else if ( strcasecmp(name,"wansung")==0 )
+ iconv_name = "EUC-KR";
+ else if ( strcasecmp(name,"EUC-CN")==0 ) {
+ iconv_name = name;
+ name = "gb2312pk";
+ } else if ( strcasecmp(name,"EUC-KR")==0 ) {
+ iconv_name = name;
+ name = "wansung";
+ }
+
+/* Escape sequences: */
+/* ISO-2022-CN: \e $ ) A ^N */
+/* ISO-2022-KR: \e $ ) C ^N */
+/* ISO-2022-JP: \e $ B */
+/* ISO-2022-JP-2: \e $ ( D */
+/* ISO-2022-JP-3: \e $ ( O */ /* Capital "O", not zero */
+/* ISO-2022-CN-EXT: \e $ ) E ^N */ /* Not sure about this, also uses CN escape */
+
+ memset(&temp,0,sizeof(temp));
+ temp.builtin = true;
+ temp.tounicode = iconv_open(FindUnicharName(),iconv_name);
+ if ( temp.tounicode==(iconv_t) -1 || temp.tounicode==NULL )
+return( NULL ); /* Iconv doesn't recognize this name */
+ temp.fromunicode = iconv_open(iconv_name,FindUnicharName());
+ if ( temp.fromunicode==(iconv_t) -1 || temp.fromunicode==NULL ) {
+ /* This should never happen, but if it does... */
+ iconv_close(temp.tounicode);
+return( NULL );
+ }
+
+ memset(good,0,sizeof(good));
+ any = false; all = true;
+ for ( i=1; i<256; ++i ) {
+ from[0] = i; from[1] = 0;
+ fromlen = 1;
+ fpt = from;
+ upt = ucs;
+ tolen = sizeof(ucs);
+ if ( iconv( temp.tounicode , &fpt, &fromlen, &upt, &tolen )!= (size_t) (-1)) {
+ good[i] = true;
+ any = true;
+ } else
+ all = false;
+ }
+ if ( any )
+ temp.has_1byte = true;
+ if ( all )
+ temp.only_1byte = true;
+
+ if ( !all ) {
+ if ( strstr(iconv_name,"2022")==NULL ) {
+ for ( i=temp.has_1byte; i<256; ++i ) if ( !good[i] ) {
+ for ( j=0; j<256; ++j ) {
+ from[0] = i; from[1] = j; from[2] = 0;
+ fromlen = 2;
+ fpt = from;
+ upt = ucs;
+ tolen = sizeof(ucs);
+ if ( iconv( temp.tounicode , &fpt, &fromlen, &upt, &tolen )!= (size_t) (-1) &&
+ upt-ucs==sizeof(unichar_t) /* Exactly one character */ ) {
+ if ( temp.low_page==-1 )
+ temp.low_page = i;
+ temp.high_page = i;
+ temp.has_2byte = true;
+ break;
+ }
+ }
+ }
+ if ( temp.low_page==temp.high_page ) {
+ temp.has_2byte = false;
+ temp.low_page = temp.high_page = -1;
+ }
+ }
+ if ( !temp.has_2byte && !good[033]/* escape */ ) {
+ if ( strstr(iconv_name,"2022")!=NULL &&
+ strstr(iconv_name,"JP3")!=NULL &&
+ TryEscape( &temp,"\33$(O" )) {
+ ;
+ } else if ( strstr(iconv_name,"2022")!=NULL &&
+ strstr(iconv_name,"JP2")!=NULL &&
+ TryEscape( &temp,"\33$(D" )) {
+ ;
+ } else if ( strstr(iconv_name,"2022")!=NULL &&
+ strstr(iconv_name,"JP")!=NULL &&
+ TryEscape( &temp,"\33$B" )) {
+ ;
+ } else if ( strstr(iconv_name,"2022")!=NULL &&
+ strstr(iconv_name,"KR")!=NULL &&
+ TryEscape( &temp,"\33$)C\16" )) {
+ ;
+ } else if ( strstr(iconv_name,"2022")!=NULL &&
+ strstr(iconv_name,"CN")!=NULL &&
+ TryEscape( &temp,"\33$)A\16" )) {
+ ;
+ }
+ }
+ }
+ if ( !temp.has_1byte && !temp.has_2byte )
+return( NULL );
+ if ( !make_it )
+return( NULL );
+
+ enc = chunkalloc(sizeof(Encoding));
+ *enc = temp;
+ enc->enc_name = copy(name);
+ if ( iconv_name!=name )
+ enc->iconv_name = copy(iconv_name);
+ enc->next = enclist;
+ enc->builtin = true;
+ enclist = enc;
+ if ( enc->has_2byte )
+ enc->char_cnt = (enc->high_page<<8) + 256;
+ else {
+ enc->char_cnt = 256;
+ enc->only_1byte = true;
+ }
+ if ( strstrmatch(iconv_name,"JP")!=NULL ||
+ strstrmatch(iconv_name,"sjis")!=NULL ||
+ strstrmatch(iconv_name,"cp932")!=NULL )
+ enc->is_japanese = true;
+ else if ( strstrmatch(iconv_name,"KR")!=NULL )
+ enc->is_korean = true;
+ else if ( strstrmatch(iconv_name,"CN")!=NULL )
+ enc->is_simplechinese = true;
+ else if ( strstrmatch(iconv_name,"BIG")!=NULL && strstrmatch(iconv_name,"5")!=NULL )
+ enc->is_tradchinese = true;
+
+ if ( strstrmatch(name,"ISO8859")!=NULL &&
+ strtol(name+strlen(name)-2,NULL,10)>=16 )
+ /* Not in our menu, don't hide */;
+ else if ( iconv_name!=name || strmatch(name,"mac")==0 || strstrmatch(name,"ISO8859")!=NULL ||
+ strmatch(name,"koi8-r")==0 || strmatch(name,"sjis")==0 ||
+ strmatch(name,"big5")==0 || strmatch(name,"big5hkscs")==0 )
+ enc->hidden = true;
+
+return( enc );
+}
+
+Encoding *FindOrMakeEncoding(const char *name) {
+return( _FindOrMakeEncoding(name,true));
+}
+
+/* Plugin API */
+
+void EncodingFree(Encoding *item) {
+ int i;
+
+ if ( item==NULL )
+ return;
+
+ free(item->enc_name);
+ if ( item->psnames!=NULL ) {
+ for ( i=0; i<item->char_cnt; ++i )
+ free(item->psnames[i]);
+ free(item->psnames);
+ }
+ free(item->unicode);
+ free(item);
+}
+
+/* ************************************************************************** */
+/* ****************************** CID Encodings ***************************** */
+/* ************************************************************************** */
+
+int CIDFromName(char *name,SplineFont *cidmaster) {
+ /* We've had various conventions for encoding a cid inside a name */
+ /* I'm primarily interested in this when the name is something like */
+ /* Japan1.504.vert */
+ /* which tells me that the current glyph is the rotated version of */
+ /* cid 504 */
+ /* Other convention "cid-504.vert" */
+ int len = strlen( cidmaster->ordering );
+ int cid;
+ char *end;
+
+ if ( strncmp(name,cidmaster->ordering,len)==0 ) {
+ if ( name[len]=='.' ) ++len;
+ } else if ( strncmp(name,"cid-",4)==0 ) {
+ len = 4;
+ } else
+ len = 0;
+ cid = strtol(name+len,&end,10);
+ if ( end==name+len )
+return( -1 );
+ if ( *end!='.' && *end!='\0' )
+return( -1 );
+
+return ( cid );
+}
+
+enum cmaptype { cmt_out=-1, cmt_coderange, cmt_notdefs, cmt_cid, cmt_max };
+struct coderange { uint32 first, last, cid; };
+
+/* ************************** Reencoding routines ************************** */
+
+EncMap *EncMapFromEncoding(SplineFont *sf,Encoding *enc) {
+ int i,j, extras, found, base, unmax;
+ int32 *encoded, *unencoded;
+ EncMap *map;
+ struct altuni *altuni;
+ SplineChar *sc;
+
+ if ( enc==NULL )
+return( NULL );
+
+ base = enc->char_cnt;
+ if ( enc->is_original )
+ base = 0;
+ else if ( enc->char_cnt<=256 )
+ base = 256;
+ else if ( enc->char_cnt<=0x10000 )
+ base = 0x10000;
+ encoded = malloc(base*sizeof(int32));
+ memset(encoded,-1,base*sizeof(int32));
+ unencoded = malloc(sf->glyphcnt*sizeof(int32));
+ unmax = sf->glyphcnt;
+
+ for ( i=extras=0; i<sf->glyphcnt; ++i ) if ( (sc=sf->glyphs[i])!=NULL ) {
+ found = false;
+ if ( enc->psnames!=NULL ) {
+ for ( j=enc->char_cnt-1; j>=0; --j ) {
+ if ( enc->psnames[j]!=NULL &&
+ strcmp(enc->psnames[j],sc->name)==0 ) {
+ found = true;
+ encoded[j] = i;
+ }
+ }
+ }
+ if ( !found ) {
+ if ( sc->unicodeenc!=-1 &&
+ sc->unicodeenc < (int)unicode4_size &&
+ (j = EncFromUni(sc->unicodeenc,enc))!= -1 )
+ encoded[j] = i;
+ else {
+ /* I don't think extras can surpass unmax now, but it doesn't */
+ /* hurt to leave the code (it's from when we encoded duplicates see below) */
+ if ( extras>=unmax ) unencoded = realloc(unencoded,(unmax+=300)*sizeof(int32));
+ unencoded[extras++] = i;
+ }
+ for ( altuni=sc->altuni; altuni!=NULL; altuni=altuni->next ) {
+ if ( altuni->unienc!=-1 &&
+ (uint32)altuni->unienc<unicode4_size &&
+ altuni->vs==-1 &&
+ altuni->fid==0 &&
+ (j = EncFromUni(altuni->unienc,enc))!= -1 )
+ encoded[j] = i;
+ /* I used to have code here to add these unencoded duplicates */
+ /* but I don't really see any reason to do so. The main unicode */
+ /* will occur, and any encoded duplicates so the glyph won't */
+ /* vanish */
+ }
+ }
+ }
+
+ /* Some glyphs have both a pua encoding and an encoding in a non-bmp */
+ /* plane. Big5HK does and the AMS glyphs do */
+ if ( enc->is_unicodefull && (sf->uni_interp == ui_trad_chinese ||
+ sf->uni_interp == ui_ams )) {
+ extern const int cns14pua[], amspua[];
+ const int *pua = sf->uni_interp == ui_ams? amspua : cns14pua;
+ for ( i=0xe000; i<0xf8ff; ++i ) {
+ if ( pua[i-0xe000]!=0 )
+ encoded[pua[i-0xe000]] = encoded[i];
+ }
+ }
+
+ if ( enc->psnames != NULL ) {
+ /* Names are more important than unicode code points for some encodings */
+ /* AdobeStandard for instance which won't work if you have a glyph */
+ /* named "f_i" (must be "fi") even though the code point is correct */
+ /* The code above would match f_i where AS requires fi, so force the */
+ /* names to be correct. */
+ for ( j=0; j<enc->char_cnt; ++j ) {
+ if ( encoded[j]!=-1 && enc->psnames[j]!=NULL &&
+ strcmp(sf->glyphs[encoded[j]]->name,enc->psnames[j])!=0 ) {
+ free(sf->glyphs[encoded[j]]->name);
+ sf->glyphs[encoded[j]]->name = copy(enc->psnames[j]);
+ }
+ }
+ }
+
+ map = chunkalloc(sizeof(EncMap));
+ map->enccount = map->encmax = base + extras;
+ map->map = malloc(map->enccount*sizeof(int32));
+ memcpy(map->map,encoded,base*sizeof(int32));
+ memcpy(map->map+base,unencoded,extras*sizeof(int32));
+ map->backmax = sf->glyphcnt;
+ map->backmap = malloc(sf->glyphcnt*sizeof(int32));
+ memset(map->backmap,-1,sf->glyphcnt*sizeof(int32)); /* Just in case there are some unencoded glyphs (duplicates perhaps) */
+ for ( i = map->enccount-1; i>=0; --i ) if ( map->map[i]!=-1 )
+ map->backmap[map->map[i]] = i;
+ map->enc = enc;
+
+ free(encoded);
+ free(unencoded);
+
+return( map );
+}
+
+static SplineChar *SplineCharMatch(SplineFont *parent,SplineChar *sc) {
+ SplineChar *scnew = SFSplineCharCreate(parent);
+
+ scnew->parent = parent;
+ scnew->orig_pos = sc->orig_pos;
+ scnew->name = copy(sc->name);
+ scnew->unicodeenc = sc->unicodeenc;
+ scnew->width = sc->width;
+ scnew->vwidth = sc->vwidth;
+ scnew->widthset = true;
+return( scnew );
+}
+
+void SFMatchGlyphs(SplineFont *sf,SplineFont *target,int addempties) {
+ /* reorder sf so that its glyphs array is the same as that in target */
+ int i, j, cnt, cnt2;
+ SplineChar **glyphs;
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->ticked = false;
+ if (( cnt = target->glyphcnt )<sf->glyphcnt ) cnt = sf->glyphcnt;
+ glyphs = calloc(cnt,sizeof(SplineChar *));
+ for ( i=0; i<target->glyphcnt; ++i ) if ( target->glyphs[i]!=NULL ) {
+ SplineChar *sc = SFGetChar(sf,target->glyphs[i]->unicodeenc,target->glyphs[i]->name );
+ if ( sc==NULL && addempties )
+ sc = SplineCharMatch(sf,target->glyphs[i]);
+ if ( sc!=NULL ) {
+ glyphs[i] = sc;
+ sc->ticked = true;
+ }
+ }
+ for ( i=cnt2=0; i<sf->glyphcnt; ++i )
+ if ( sf->glyphs[i]!=NULL && !sf->glyphs[i]->ticked )
+ ++cnt2;
+ if ( target->glyphcnt+cnt2>cnt ) {
+ glyphs = realloc(glyphs,(target->glyphcnt+cnt2)*sizeof(SplineChar *));
+ memset(glyphs+cnt,0,(target->glyphcnt+cnt2-cnt)*sizeof(SplineChar *));
+ cnt = target->glyphcnt+cnt2;
+ }
+ j = target->glyphcnt;
+ for ( i=0; i<sf->glyphcnt; ++i )
+ if ( sf->glyphs[i]!=NULL && !sf->glyphs[i]->ticked )
+ glyphs[j++] = sf->glyphs[i];
+ free(sf->glyphs);
+ sf->glyphs = glyphs;
+ sf->glyphcnt = sf->glyphmax = cnt;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->orig_pos = i;
+}
+
+void MMMatchGlyphs(MMSet *mm) {
+ /* reorder all instances so that they have the same orig_pos */
+ int i, j, index, lasthole;
+ SplineFont *sf, *base = NULL;
+ SplineChar *sc, *scnew, *sc2;
+
+ for ( i = 0; i<mm->instance_count; ++i ) if ( mm->instances[i]!=NULL ) {
+ base = mm->instances[i];
+ break;
+ }
+ if ( base==NULL )
+return;
+
+ /* First build up an ordering that uses all glyphs found in any of the */
+ /* sub-fonts, "base" will be the start of it. We will add glyphs to */
+ /* "base" as needed */
+ lasthole = -1;
+ for ( i = 0; i<mm->instance_count; ++i ) if ( (sf=mm->instances[i])!=NULL && sf!=NULL ) {
+ for ( j=0; j<sf->glyphcnt; ++j ) if ( (sc=sf->glyphs[j])!=NULL ) {
+ if ( j<base->glyphcnt && base->glyphs[j]!=NULL &&
+ base->glyphs[j]->unicodeenc==sc->unicodeenc &&
+ strcmp(base->glyphs[j]->name,sc->name)==0 )
+ continue; /* It's good, and in the same place */
+ else if ( (sc2=SFGetChar(base,sc->unicodeenc,sc->name))!=NULL &&
+ sc2->unicodeenc==sc->unicodeenc &&
+ strcmp(sc2->name,sc->name)==0 )
+ continue; /* Well, it's in there somewhere */
+ else {
+ /* We need to add it */
+ if ( j<base->glyphcnt && base->glyphs[j]==NULL )
+ index = j;
+ else {
+ for ( ++lasthole ; lasthole<base->glyphcnt && base->glyphs[lasthole]!=NULL; ++lasthole );
+ index = lasthole;
+ if ( lasthole>=base->glyphmax )
+ base->glyphs = realloc(base->glyphs,(base->glyphmax+=20)*sizeof(SplineChar *));
+ if ( lasthole>=base->glyphcnt )
+ base->glyphcnt = lasthole+1;
+ }
+ base->glyphs[index] = scnew = SplineCharMatch(base,sc);
+ scnew->orig_pos = index;
+ }
+ }
+ }
+
+ /* Now force all other instances to match */
+ for ( i = 0; i<mm->instance_count; ++i ) if ( (sf=mm->instances[i])!=NULL && sf!=base )
+ SFMatchGlyphs(sf,base,true);
+ if ( mm->normal!=NULL )
+ SFMatchGlyphs(mm->normal,base,true);
+}
+
+int32 UniFromEnc(int enc, Encoding *encname) {
+ char from[20];
+ unichar_t to[20];
+ ICONV_CONST char *fpt;
+ char *tpt;
+ size_t fromlen, tolen;
+
+ if ( encname->is_custom || encname->is_original )
+return( -1 );
+ if ( enc>=encname->char_cnt )
+return( -1 );
+ if ( encname->is_unicodebmp || encname->is_unicodefull )
+return( enc );
+ if ( encname->unicode!=NULL )
+return( encname->unicode[enc] );
+ else if ( encname->tounicode ) {
+ /* To my surprise, on RH9, doing a reset on conversion of CP1258->UCS2 */
+ /* causes subsequent calls to return garbage */
+ if ( encname->iso_2022_escape_len ) {
+ tolen = sizeof(to); fromlen = 0;
+ iconv(encname->tounicode,NULL,&fromlen,NULL,&tolen); /* Reset state */
+ }
+ fpt = from; tpt = (char *) to; tolen = sizeof(to);
+ if ( encname->has_1byte && enc<256 ) {
+ *(char *) fpt = enc;
+ fromlen = 1;
+ } else if ( encname->has_2byte ) {
+ if ( encname->iso_2022_escape_len )
+ strncpy(from,encname->iso_2022_escape,encname->iso_2022_escape_len );
+ fromlen = encname->iso_2022_escape_len;
+ from[fromlen++] = enc>>8;
+ from[fromlen++] = enc&0xff;
+ }
+ if ( iconv(encname->tounicode,&fpt,&fromlen,&tpt,&tolen)==(size_t) -1 )
+return( -1 );
+ if ( tpt-(char *) to == 0 ) {
+ /* This strange call appears to be what we need to make CP1258->UCS2 */
+ /* work. It's supposed to reset the state and give us the shift */
+ /* out. As there is no state, and no shift out I have no idea why*/
+ /* this works, but it does. */
+ if ( iconv(encname->tounicode,NULL,&fromlen,&tpt,&tolen)==(size_t) -1 )
+return( -1 );
+ }
+ if ( tpt-(char *) to == sizeof(unichar_t) )
+ {
+ return( to[0] );
+ }
+ } else if ( encname->tounicode_func!=NULL ) {
+return( (encname->tounicode_func)(enc) );
+ }
+return( -1 );
+}
+
+int32 EncFromUni(int32 uni, Encoding *enc) {
+ unichar_t from[20];
+ unsigned char to[20];
+ ICONV_CONST char *fpt;
+ char *tpt;
+ size_t fromlen, tolen;
+ int i;
+
+ if ( enc->is_custom || enc->is_original || enc->is_compact || uni==-1 )
+return( -1 );
+ if ( enc->is_unicodebmp || enc->is_unicodefull )
+return( uni<enc->char_cnt ? uni : -1 );
+
+ if ( enc->unicode!=NULL ) {
+ for ( i=0; i<enc->char_cnt; ++i ) {
+ if ( enc->unicode[i]==uni )
+return( i );
+ }
+return( -1 );
+ } else if ( enc->fromunicode!=NULL ) {
+ /* I don't see how there can be any state to reset in this direction */
+ /* So I don't reset it */
+ from[0] = uni;
+ fromlen = sizeof(unichar_t);
+ fpt = (char *) from; tpt = (char *) to; tolen = sizeof(to);
+ iconv(enc->fromunicode,NULL,NULL,NULL,NULL); /* reset shift in/out, etc. */
+ if ( iconv(enc->fromunicode,&fpt,&fromlen,&tpt,&tolen)==(size_t) -1 )
+return( -1 );
+ if ( tpt-(char *) to == 1 )
+return( to[0] );
+ if ( enc->iso_2022_escape_len!=0 ) {
+ if ( tpt-(char *) to == enc->iso_2022_escape_len+2 &&
+ strncmp((char *) to,enc->iso_2022_escape,enc->iso_2022_escape_len)==0 )
+return( (to[enc->iso_2022_escape_len]<<8) | to[enc->iso_2022_escape_len+1] );
+ } else {
+ if ( tpt-(char *) to == sizeof(unichar_t) )
+return( (to[0]<<8) | to[1] );
+ }
+ } else if ( enc->fromunicode_func!=NULL ) {
+return( (enc->fromunicode_func)(uni) );
+ }
+return( -1 );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.h b/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.h
new file mode 100644
index 0000000000..53e61a252b
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/encoding.h
@@ -0,0 +1,5 @@
+#ifndef _ENCODING_H
+#define _ENCODING_H
+
+extern void EncodingFree(Encoding *item);
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.c b/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.c
new file mode 100644
index 0000000000..3912686b5e
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "fflocale.h"
+
+void switch_to_c_locale(ff_locale_t * tmplocale_p, ff_locale_t * oldlocale_p) {
+#ifdef HAVE_USELOCALE
+ *tmplocale_p = newlocale(LC_NUMERIC_MASK, "C", NULL);
+ if (*tmplocale_p == NULL)
+ fprintf(stderr, "Failed to create temporary locale.\n");
+ else if ((*oldlocale_p = uselocale(*tmplocale_p)) == NULL) {
+ fprintf(stderr, "Failed to change locale.\n");
+ freelocale(*tmplocale_p); *tmplocale_p = NULL;
+ }
+#else
+ *tmplocale_p = setlocale(LC_NUMERIC, "C");
+ if (*tmplocale_p)
+ *oldlocale_p = strdup(*tmplocale_p);
+ else {
+ *oldlocale_p = NULL;
+ fprintf(stderr, "Failed to change locale.\n");
+ }
+#endif
+}
+
+void switch_to_old_locale(ff_locale_t * tmplocale_p, ff_locale_t * oldlocale_p) {
+#ifdef HAVE_USELOCALE
+ if (*oldlocale_p)
+ uselocale(*oldlocale_p);
+ else
+ uselocale(LC_GLOBAL_LOCALE);
+ *oldlocale_p = NULL; // This ends the lifecycle of the temporary old locale storage.
+ if (*tmplocale_p) {
+ freelocale(*tmplocale_p);
+ *tmplocale_p = NULL;
+ }
+#else
+ if (*oldlocale_p) {
+ setlocale(LC_NUMERIC, *oldlocale_p);
+ free(*oldlocale_p);
+ *oldlocale_p = NULL;
+ }
+#endif
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.h b/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.h
new file mode 100644
index 0000000000..51bcd83d14
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fflocale.h
@@ -0,0 +1,23 @@
+#ifndef FFLOCALE_H
+#define FFLOCALE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <locale.h>
+#ifdef HAVE_XLOCALE_H
+#include <xlocale.h>
+#endif
+
+#ifdef HAVE_USELOCALE
+typedef locale_t ff_locale_t;
+#else
+typedef char* ff_locale_t;
+#endif // HAVE_USELOCALE
+
+void switch_to_c_locale(ff_locale_t *tmplocale_p, ff_locale_t *oldlocale_p);
+void switch_to_old_locale(ff_locale_t *tmplocale_p, ff_locale_t *oldlocale_p);
+
+#endif /* FFLOCALE_H */
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge-config.h b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge-config.h
new file mode 100644
index 0000000000..ac81d5a417
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge-config.h
@@ -0,0 +1,22 @@
+#ifndef FF_CONFIG_H
+#define FF_CONFIG_H
+
+#ifndef ICONV_CONST
+#define ICONV_CONST
+#endif
+
+#define _NO_LIBUNINAMESLIST 1
+#define _NO_LIBUNICODENAMES 1
+#define _NO_PYTHON
+#define _NO_FFSCRIPT
+#define _NO_LIBSPIRO
+
+#define FONTFORGE_LIBFF_VERSION_MAJOR 2
+#define FONTFORGE_LIBFF_VERSION_MINOR 0
+#define FONTFORGE_MODTIME_RAW 1469132312L /* Seconds since 1970 (standard unix time) */
+#define FONTFORGE_MODTIME_STR ""
+#define FONTFORGE_VERSIONDATE_RAW 20160721
+
+#define _GNU_SOURCE 1
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge.h b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge.h
new file mode 100644
index 0000000000..2ec8413c28
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforge.h
@@ -0,0 +1,93 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _PFAEDIT_H_
+#define _PFAEDIT_H_
+
+#include <fontforge-config.h>
+#include "configure-fontforge.h"
+#include <basics.h>
+#include "libffstamp.h"
+#include <stdio.h>
+#include <string.h>
+#include <ffintl.h>
+#include "splinefont.h"
+#include "uiinterface.h"
+
+static const unsigned unicode4_size = 17*65536;
+ /* Unicode goes up to 0x10ffff */
+
+extern FILE* tmpfile2 ();
+
+extern int32 unicode_from_adobestd[256];
+
+/* unicode_nameannot - Deprecated, but kept for older programs to access. */
+#if _NO_LIBUNINAMESLIST
+#endif
+
+extern int default_fv_font_size;
+extern int default_fv_antialias;
+extern int default_fv_bbsized;
+extern Encoding *default_encoding, custom;
+extern int adjustwidth;
+extern int adjustlbearing;
+extern int autohint_before_generate;
+extern int seperate_hint_controls;
+extern int no_windowing_ui;
+extern uint32 default_background;
+extern int use_utf8_in_script;
+
+extern int new_em_size;
+extern int new_fonts_are_order2;
+extern int loaded_fonts_same_as_new;
+
+extern char *TTFFoundry;
+
+extern Encoding *enclist;
+
+extern int quiet;
+
+extern MacFeat *default_mac_feature_map;
+
+#include <stdint.h>
+#include <basics.h>
+
+typedef uint32_t Color;
+#define COLOR_DEFAULT ((Color) 0xfffffffe)
+
+typedef struct pressedOn {
+ int x,y; /* screen location of the press */
+ float cx, cy; /* Translated into character space */
+ float t; /* location on the spline where we pressed */
+} PressedOn;
+
+typedef struct findsel {
+ float fudge; /* One pixel fudge factor */
+ float xl,xh, yl, yh; /* One pixel fudge factor */
+ PressedOn *p;
+} FindSel;
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fontforgevw.h b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforgevw.h
new file mode 100644
index 0000000000..5f43c0e3c2
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fontforgevw.h
@@ -0,0 +1,32 @@
+/* Copyright (C) 2007-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _FONTFORGEVW_H_
+#define _FONTFORGEVW_H_
+
+#include "fontforge.h"
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/fvfonts.c b/dviware/dvisvgm/libs/ff-woff/fontforge/fvfonts.c
new file mode 100644
index 0000000000..e2229aaef1
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/fvfonts.c
@@ -0,0 +1,253 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "namehash.h"
+
+static int _SFFindExistingSlot(SplineFont *sf, int unienc, const char *name );
+
+void __GlyphHashFree(struct glyphnamehash *hash) {
+ struct glyphnamebucket *test, *next;
+ int i;
+
+ if ( hash==NULL )
+return;
+ for ( i=0; i<GN_HSIZE; ++i ) {
+ for ( test = hash->table[i]; test!=NULL; test = next ) {
+ next = test->next;
+ chunkfree(test,sizeof(struct glyphnamebucket));
+ }
+ }
+}
+
+static void _GlyphHashFree(SplineFont *sf) {
+
+ if ( sf->glyphnames==NULL )
+return;
+ __GlyphHashFree(sf->glyphnames);
+ free(sf->glyphnames);
+ sf->glyphnames = NULL;
+}
+
+void GlyphHashFree(SplineFont *sf) {
+ _GlyphHashFree(sf);
+ if ( sf->cidmaster )
+ _GlyphHashFree(sf->cidmaster);
+}
+
+static void GlyphHashCreate(SplineFont *sf) {
+ int i, k, hash;
+ SplineFont *_sf;
+ struct glyphnamehash *gnh;
+ struct glyphnamebucket *new;
+
+ if ( sf->glyphnames!=NULL )
+return;
+ sf->glyphnames = gnh = calloc(1,sizeof(*gnh));
+ k = 0;
+ do {
+ _sf = k<sf->subfontcnt ? sf->subfonts[k] : sf;
+ /* I walk backwards because there are some ttf files where multiple */
+ /* glyphs get the same name. In the cases I've seen only one of these */
+ /* has an encoding. That's the one we want. It will be earlier in the */
+ /* font than the others. If we build the list backwards then it will */
+ /* be the top name in the bucket, and will be the one we return */
+ for ( i=_sf->glyphcnt-1; i>=0; --i ) if ( _sf->glyphs[i]!=NULL ) {
+ new = chunkalloc(sizeof(struct glyphnamebucket));
+ new->sc = _sf->glyphs[i];
+ hash = hashname(new->sc->name);
+ new->next = gnh->table[hash];
+ gnh->table[hash] = new;
+ }
+ ++k;
+ } while ( k<sf->subfontcnt );
+}
+
+SplineChar *SFHashName(SplineFont *sf,const char *name) {
+ struct glyphnamebucket *test;
+
+ if ( sf->glyphnames==NULL )
+ GlyphHashCreate(sf);
+
+ for ( test=sf->glyphnames->table[hashname(name)]; test!=NULL; test = test->next )
+ if ( strcmp(test->sc->name,name)==0 )
+return( test->sc );
+
+return( NULL );
+}
+
+static int SCUniMatch(SplineChar *sc,int unienc) {
+ struct altuni *alt;
+
+ if ( sc->unicodeenc==unienc )
+return( true );
+ for ( alt=sc->altuni; alt!=NULL; alt=alt->next )
+ if ( alt->unienc==unienc )
+return( true );
+
+return( false );
+}
+
+/* Find the position in the glyph list where this code point/name is found. */
+/* Returns -1 else on error */
+int SFFindGID(SplineFont *sf, int unienc, const char *name ) {
+ int gid;
+ SplineChar *sc;
+
+ if ( unienc!=-1 ) {
+ for ( gid=0; gid<sf->glyphcnt; ++gid ) if ( sf->glyphs[gid]!=NULL ) {
+ if ( SCUniMatch(sf->glyphs[gid],unienc) )
+return( gid );
+ }
+ }
+ if ( name!=NULL ) {
+ sc = SFHashName(sf,name);
+ if ( sc!=NULL )
+return( sc->orig_pos );
+ }
+
+return ( -1 );
+}
+
+int SFCIDFindCID(SplineFont *sf, int unienc, const char *name ) {
+ // For a given SplineFont *sf, find the index of the SplineChar with code unienc or name *name.
+ int j,ret;
+
+ // If there is a cidmap or if there are multiple subfonts, do complicated things.
+ if ( sf->cidmaster!=NULL || sf->subfontcnt!=0 ) {
+ if ( sf->cidmaster!=NULL )
+ sf=sf->cidmaster;
+ }
+
+ // If things are simple, perform a flat map.
+ if ( sf->subfonts==NULL && sf->cidmaster==NULL )
+ return( SFFindGID(sf,unienc,name));
+
+ // If the cid lookup from before failed, look through subfonts.
+ if ( sf->cidmaster!=NULL )
+ sf=sf->cidmaster;
+ for ( j=0; j<sf->subfontcnt; ++j )
+ if (( ret = SFFindGID(sf,unienc,name))!=-1 )
+ return( ret );
+
+ return( -1 );
+}
+
+int SFHasCID(SplineFont *sf,int cid) {
+ int i;
+ /* What subfont (if any) contains this cid? */
+ if ( sf->cidmaster!=NULL )
+ sf=sf->cidmaster;
+ for ( i=0; i<sf->subfontcnt; ++i )
+ if ( cid<sf->subfonts[i]->glyphcnt &&
+ SCWorthOutputting(sf->subfonts[i]->glyphs[cid]) )
+return( i );
+ for ( i=0; i<sf->subfontcnt; ++i )
+ if ( cid<sf->subfonts[i]->glyphcnt && sf->subfonts[i]->glyphs[cid]!=NULL )
+return( i );
+
+return( -1 );
+}
+
+SplineChar *SFGetChar(SplineFont *sf, int unienc, const char *name ) {
+ // This function presumably finds a glyph matching the code or name supplied. Undefined code is unienc = -1. Undefined name is name = NULL.
+ int ind = -1;
+ int j;
+ char *pt, *start; int ch;
+
+ if ( name==NULL )
+ ind = SFCIDFindCID(sf,unienc,NULL);
+ else {
+ for ( start=(char *) name; *start==' '; ++start );
+ for ( pt=start; *pt!='\0' && *pt!='('; ++pt );
+ ch = *pt;
+ // We truncate any glyph name before parentheses.
+ if ( ch=='\0' )
+ ind = SFCIDFindCID(sf,unienc,start);
+ else {
+ char *tmp;
+ if ( (tmp = copy(name)) ) {
+ tmp[pt-name] = '\0';
+ ind = SFCIDFindCID(sf,unienc,tmp+(start-name));
+ tmp[pt-name] = ch;
+ free(tmp);
+ }
+ }
+ }
+ if ( ind==-1 )
+ return( NULL );
+
+ // If the typeface is simple, return the result from the flat glyph collection.
+ if ( sf->subfonts==NULL && sf->cidmaster==NULL )
+ return( sf->glyphs[ind]);
+
+ if ( sf->cidmaster!=NULL )
+ sf=sf->cidmaster;
+
+ // Find a subfont that contains the glyph in question.
+ j = SFHasCID(sf,ind);
+ if ( j==-1 )
+ return( NULL );
+
+ return( sf->subfonts[j]->glyphs[ind] );
+}
+
+static int _SFFindExistingSlot(SplineFont *sf, int unienc, const char *name ) {
+ int gid = -1;
+ struct altuni *altuni;
+
+ if ( unienc!=-1 ) {
+ for ( gid=sf->glyphcnt-1; gid>=0; --gid ) if ( sf->glyphs[gid]!=NULL ) {
+ if ( sf->glyphs[gid]->unicodeenc==unienc )
+ break;
+ for ( altuni=sf->glyphs[gid]->altuni ; altuni!=NULL &&
+ (altuni->unienc!=unienc || altuni->vs!=-1 || altuni->fid!=0);
+ altuni=altuni->next );
+ if ( altuni!=NULL )
+ break;
+ }
+ }
+ if ( gid==-1 && name!=NULL ) {
+ SplineChar *sc = SFHashName(sf,name);
+ if ( sc==NULL )
+return( -1 );
+ gid = sc->orig_pos;
+ if ( gid<0 || gid>=sf->glyphcnt ) {
+ IError("Invalid glyph location when searching for %s", name );
+return( -1 );
+ }
+ }
+return( gid );
+}
+
+int SFFindExistingSlot(SplineFont *sf, int unienc, const char *name ) {
+ int gid = _SFFindExistingSlot(sf,unienc,name);
+
+ if ( gid==-1 || !SCWorthOutputting(sf->glyphs[gid]) )
+return( -1 );
+
+return( gid );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/gwwiconv.c b/dviware/dvisvgm/libs/ff-woff/fontforge/gwwiconv.c
new file mode 100644
index 0000000000..5524662f94
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/gwwiconv.c
@@ -0,0 +1,797 @@
+/* Copyright (C) 2004-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <gwwiconv.h>
+#include <charset.h>
+#include <chardata.h>
+#include <string.h>
+#include <ustring.h>
+#include <stdio.h>
+
+#ifndef HAVE_ICONV_H
+
+/* I have written an limited iconv which will convert either to or from unichar_t */
+/* (either UCS2 or UCS4) */
+/* it will not convert latin1 to latin2, but latin1->UCS2, UCS2->latin2 */
+/* it uses the encodings built into libgunicode for systems with no iconv */
+/* (ie. macs before 10.3, perhaps others) */
+
+struct gww_iconv_t {
+ enum encoding from;
+ enum encoding to;
+};
+
+enum extended_encoding { e_jisgbpk = e_encodingmax };
+
+static enum endian { end_big, end_little, end_unknown } endian = end_unknown;
+
+static void endian_detector(void) {
+ union { short s; char c[2]; } u;
+
+ u.s = 0x0102;
+ if ( u.c[0]==0x1 )
+ endian = end_big;
+ else
+ endian = end_little;
+}
+
+static enum encoding name_to_enc(const char *encname) {
+ struct { const char *name; enum encoding enc; } map[] = {
+ { "UCS-2-INTERNAL", e_unicode },
+ { "UCS2", e_unicode },
+ { "UCS-2", e_unicode },
+ { "UCS-2LE", e_unicode },
+ { "UCS-2BE", e_unicode },
+ { "UNICODELITTLE", e_unicode },
+ { "UNICODEBIG", e_unicode },
+ { "ISO-10646/UCS2", e_unicode },
+ { "ISO-10646/USC2", e_unicode }, /* Old typo */
+ { "UCS4", e_ucs4 },
+ { "UCS-4", e_ucs4 },
+ { "UCS-4LE", e_ucs4 },
+ { "UCS-4BE", e_ucs4 },
+ { "UCS-4-INTERNAL", e_ucs4 },
+ { "ISO-10646/UCS4", e_ucs4 },
+ { "iso8859-1", e_iso8859_1 },
+ { "iso8859-2", e_iso8859_2 },
+ { "iso8859-3", e_iso8859_3 },
+ { "iso8859-4", e_iso8859_4 },
+ { "iso8859-5", e_iso8859_5 },
+ { "iso8859-6", e_iso8859_6 },
+ { "iso8859-7", e_iso8859_7 },
+ { "iso8859-8", e_iso8859_8 },
+ { "iso8859-9", e_iso8859_9 },
+ { "iso8859-10", e_iso8859_10 },
+ { "iso8859-11", e_iso8859_11 },
+ { "iso8859-13", e_iso8859_13 },
+ { "iso8859-14", e_iso8859_14 },
+ { "iso8859-15", e_iso8859_15 },
+ { "iso-8859-1", e_iso8859_1 },
+ { "iso-8859-2", e_iso8859_2 },
+ { "iso-8859-3", e_iso8859_3 },
+ { "iso-8859-4", e_iso8859_4 },
+ { "iso-8859-5", e_iso8859_5 },
+ { "iso-8859-6", e_iso8859_6 },
+ { "iso-8859-7", e_iso8859_7 },
+ { "iso-8859-8", e_iso8859_8 },
+ { "iso-8859-9", e_iso8859_9 },
+ { "iso-8859-10", e_iso8859_10 },
+ { "iso-8859-11", e_iso8859_11 },
+ { "iso-8859-13", e_iso8859_13 },
+ { "iso-8859-14", e_iso8859_14 },
+ { "iso-8859-15", e_iso8859_15 },
+ { "koi8-r", e_koi8_r },
+ { "jis201", e_jis201 },
+ { "mac", e_mac },
+ { "Macintosh", e_mac },
+ { "MS-ANSI", e_win },
+ { "EUC-KR", e_wansung },
+ { "johab", e_johab },
+ { "ISO-2022-KR", e_jiskorean },
+ { "ISO-2022-CN", e_jisgb },
+ { "EUC-CN", e_jisgbpk },
+ { "big5", e_big5 },
+ { "big5hkscs", e_big5hkscs },
+ { "ISO-2022-JP", e_jis },
+ { "ISO-2022-JP-2", e_jis2 },
+ { "Sjis", e_sjis },
+ { "UTF-8", e_utf8 },
+ { "UTF8", e_utf8 },
+ { NULL }};
+ int i;
+
+ for ( i=0; map[i].name!=NULL; ++i )
+ if ( strmatch(map[i].name,encname)==0 )
+return( map[i].enc );
+
+return( -1 );
+}
+
+gww_iconv_t gww_iconv_open(const char *toenc,const char *fromenc) {
+ struct gww_iconv_t stuff, *ret;
+
+ if ( endian==end_unknown )
+ endian_detector();
+
+ stuff.from = name_to_enc(fromenc);
+ stuff.to = name_to_enc(toenc);
+ if ( stuff.from==(enum encoding) -1 || stuff.to==(enum encoding) -1 ) {
+ /*fprintf( stderr, "Unknown encoding\n" );*/
+return( (iconv_t)(-1) );
+ } else if ( stuff.from!=e_ucs4 && stuff.to!=e_ucs4 ) {
+ fprintf( stderr, "Bad call to gww_iconv_open, neither arg is UCS4\n" );
+return( (iconv_t)(-1) );
+ }
+
+ ret = malloc(sizeof(struct gww_iconv_t));
+ *ret = stuff;
+return( ret );
+}
+
+void gww_iconv_close( gww_iconv_t cd) {
+ free(cd);
+}
+
+size_t gww_iconv( gww_iconv_t _cd,
+ char **inbuf, size_t *inlen,
+ char **outbuf, size_t *outlen) {
+ struct gww_iconv_t *cd = _cd;
+ int char_cnt = 0;
+ unsigned char *plane;
+ int ch;
+
+ if ( inbuf==NULL || outbuf==NULL || inlen==NULL || outlen==NULL ||
+ *inbuf==NULL || *outbuf==NULL )
+return( 0 ); /* Legal, used to reset the state. As we don't do states, irrelevant */
+
+ if ( cd->from<0 || cd->from>e_encodingmax || cd->to<0 || cd->to>e_encodingmax ) {
+ fprintf( stderr, "Garbage encoding passed to gww_iconv()\n" );
+return( (size_t) -1 );
+ }
+
+ if ( cd->from==e_unicode ) {
+ if ( cd->to==e_unicode ) {
+ int min = *inlen < *outlen ? *inlen : *outlen;
+ min &= ~1;
+ memcpy(*inbuf,*outbuf,min);
+ char_cnt = min/sizeof(short);
+ *inbuf += min; *outbuf += min;
+ *inlen -= min; *outlen -= min;
+ if ( *inlen==1 && *outlen>0 )
+return( (size_t) -1 ); /* Incomplete multi-byte sequence */
+ } else if ( cd->to==e_ucs4 ) {
+ int min = *inlen/sizeof(short) < *outlen/sizeof(int32) ? *inlen/sizeof(short) : *outlen/sizeof(int32);
+ int highch, lowch;
+ if ( endian == end_little ) {
+ while ( *inlen>=sizeof(short) && *outlen>=sizeof(int32) ) {
+ highch = ((unsigned char *) *inbuf)[1], lowch = *(unsigned char *) *inbuf;
+ ((uint8 *) outbuf)[3] = 0; ((uint8 *) outbuf)[2] = 0;
+ ((uint8 *) outbuf)[1] = highch; ((uint8 *) outbuf)[0] = lowch;
+ outbuf += sizeof(int32); inbuf += sizeof(short);
+ *outlen -= sizeof(int32); *inlen -= sizeof(short);
+ }
+ } else {
+ while ( *inlen>=sizeof(short) && *outlen>=sizeof(int32) ) {
+ highch = ((unsigned char *) *inbuf)[0], lowch = ((unsigned char *) *inbuf)[1];
+ ((uint8 *) outbuf)[0] = 0; ((uint8 *) outbuf)[1] = 0;
+ ((uint8 *) outbuf)[2] = highch; ((uint8 *) outbuf)[3] = lowch;
+ outbuf += sizeof(int32); inbuf += sizeof(short);
+ *outlen -= sizeof(int32); *inlen -= sizeof(short);
+ }
+ }
+ char_cnt = min;
+ if ( *inlen==1 && *outlen>0 )
+return( (size_t) -1 ); /* Incomplete multi-byte sequence */
+ } else if ( cd->to<e_first2byte ) {
+ struct charmap *table = NULL;
+ table = alphabets_from_unicode[cd->to];
+ while ( *inlen>1 && *outlen>0 ) {
+ int highch, lowch;
+ if ( endian == end_little ) {
+ highch = ((unsigned char *) *inbuf)[1], lowch = *(unsigned char *) *inbuf;
+ } else {
+ highch = *(unsigned char *) *inbuf, lowch = ((unsigned char *) *inbuf)[1];
+ }
+ if ( highch>=table->first && highch<=table->last &&
+ (plane = table->table[highch])!=NULL &&
+ (ch=plane[lowch])!=0 ) {
+ *((*outbuf)++) = ch;
+ -- *outlen;
+ *inlen -= 2;
+ *inbuf += 2;
+ ++char_cnt;
+ } else
+return( (size_t) -1 );
+ }
+ } else if ( cd->to==e_utf8 ) {
+ while ( *inlen>1 && *outlen>0 ) {
+ unichar_t uch;
+ if ( endian == end_little ) {
+ uch = (((unsigned char *) *inbuf)[1]<<8) | (*((unsigned char *) *inbuf));
+ } else {
+ uch = (*((unsigned char *) *inbuf)<<8) | (((unsigned char *) *inbuf)[1]);
+ }
+ if ( uch < 0x80 ) {
+ *((*outbuf)++) = uch;
+ --*outlen;
+ } else if ( uch<0x800 ) {
+ if ( *outlen==1 )
+return( (size_t) -1 );
+ *((*outbuf)++) = 0xc0 | (uch>>6);
+ *((*outbuf)++) = 0x80 | (uch&0x3f);
+ *outlen-=2;
+ } else { /* I'm not dealing with */
+ if ( *outlen<=2 )
+return( (size_t) -1 );
+ *((*outbuf)++) = 0xe0 | (uch>>12);
+ *((*outbuf)++) = 0x80 | ((uch>>6)&0x3f);
+ *((*outbuf)++) = 0x80 | (uch&0x3f);
+ *outlen-=3;
+ }
+ *inbuf += 2;
+ *inlen -= 2;
+ ++char_cnt;
+ }
+ } else {
+ fprintf( stderr, "Unexpected encoding\n" );
+return( (size_t) -1 );
+ }
+ } else if ( cd->from==e_ucs4 ) {
+ if ( cd->to==e_unicode ) {
+ int min = *inlen/sizeof(int32) < *outlen/sizeof(int16) ? *inlen/sizeof(int32) : *outlen/sizeof(int16);
+ int highch, lowch;
+ if ( endian == end_little ) {
+ while ( *inlen>=sizeof(short) && *outlen>=sizeof(int32) ) {
+ highch = ((unsigned char *) *inbuf)[1], lowch = *(unsigned char *) *inbuf;
+ ((uint8 *) outbuf)[1] = highch; ((uint8 *) outbuf)[0] = lowch;
+ outbuf += sizeof(int16); inbuf += sizeof(int32);
+ *outlen -= sizeof(int16); *inlen -= sizeof(int32);
+ }
+ } else {
+ while ( *inlen>=sizeof(short) && *outlen>=sizeof(int32) ) {
+ highch = ((unsigned char *) *inbuf)[2], lowch = ((unsigned char *) *inbuf)[3];
+ ((uint8 *) outbuf)[0] = highch; ((uint8 *) outbuf)[1] = lowch;
+ outbuf += sizeof(int16); inbuf += sizeof(int32);
+ *outlen -= sizeof(int16); *inlen -= sizeof(int32);
+ }
+ }
+ char_cnt = min;
+ if ( *inlen>0 && *outlen>0 )
+return( (size_t) -1 ); /* Incomplete multi-byte sequence */
+ } else if ( cd->to<e_first2byte ) {
+ struct charmap *table = NULL;
+ table = alphabets_from_unicode[cd->to];
+ while ( *inlen>1 && *outlen>0 ) {
+ int highch, lowch;
+ if ( endian == end_little ) {
+ highch = ((unsigned char *) *inbuf)[1], lowch = *(unsigned char *) *inbuf;
+ } else {
+ highch = ((unsigned char *) *inbuf)[2], lowch = ((unsigned char *) *inbuf)[3];
+ }
+ if ( highch>=table->first && highch<=table->last &&
+ (plane = table->table[highch])!=NULL &&
+ (ch=plane[lowch])!=0 ) {
+ *((*outbuf)++) = ch;
+ -- *outlen;
+ *inlen -= 4;
+ *inbuf += 4;
+ ++char_cnt;
+ } else
+return( (size_t) -1 );
+ }
+ } else if ( cd->to==e_utf8 ) {
+ while ( *inlen>1 && *outlen>0 ) {
+ int uch;
+ if ( endian == end_little ) {
+ uch = (((unsigned char *) *inbuf)[3]<<24) |
+ (((unsigned char *) *inbuf)[2]<<16) |
+ (((unsigned char *) *inbuf)[1]<<8) |
+ (*((unsigned char *) *inbuf));
+ } else {
+ uch = (*((unsigned char *) *inbuf)<<24) |
+ (((unsigned char *) *inbuf)[1]<<16) |
+ (((unsigned char *) *inbuf)[2]<<8) |
+ (((unsigned char *) *inbuf)[3]);
+ }
+ if ( uch < 0x80 ) {
+ *((*outbuf)++) = uch;
+ --*outlen;
+ } else if ( uch<0x800 ) {
+ if ( *outlen==1 )
+return( (size_t) -1 );
+ *((*outbuf)++) = 0xc0 | (uch>>6);
+ *((*outbuf)++) = 0x80 | (uch&0x3f);
+ *outlen-=2;
+ } else if ( uch < 0x10000 ) {
+ if ( *outlen<=2 )
+return( (size_t) -1 );
+ *((*outbuf)++) = 0xe0 | (uch>>12);
+ *((*outbuf)++) = 0x80 | ((uch>>6)&0x3f);
+ *((*outbuf)++) = 0x80 | (uch&0x3f);
+ *outlen-=3;
+ } else {
+ uint32 val = uch-0x10000;
+ int u = ((val&0xf0000)>>16)+1, z=(val&0x0f000)>>12, y=(val&0x00fc0)>>6, x=val&0x0003f;
+ if ( *outlen<=3 )
+return( (size_t) -1 );
+ *(*outbuf)++ = 0xf0 | (u>>2);
+ *(*outbuf)++ = 0x80 | ((u&3)<<4) | z;
+ *(*outbuf)++ = 0x80 | y;
+ *(*outbuf)++ = 0x80 | x;
+ *outlen-=4;
+ }
+ *inbuf += 4;
+ *inlen -= 4;
+ ++char_cnt;
+ }
+ } else {
+ fprintf( stderr, "Unexpected encoding\n" );
+return( (size_t) -1 );
+ }
+ } else if ( cd->to==e_unicode ) {
+ const unichar_t *table;
+ if ( cd->from<e_first2byte ) {
+ table = unicode_from_alphabets[cd->from];
+ while ( *inlen>0 && *outlen>1 ) {
+ unichar_t ch = table[ *(unsigned char *) ((*inbuf)++)];
+ --*inlen;
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_jis || cd->from==e_jis2 ||
+ cd->from==e_jiskorean || cd->from==e_jisgb ) {
+ table = cd->from==e_jisgb ? unicode_from_gb2312 :
+ cd->from==e_jiskorean ? unicode_from_ksc5601 :
+ cd->from==e_jis ? unicode_from_jis208 :
+ unicode_from_jis212;
+ while ( *inlen>1 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x21 || *ipt>0x7e || ipt[1]<0x21 || ipt[1]>0x7e )
+return( (size_t) -1 );
+ ch = (*ipt-0x21)*94 + (ipt[1]-0x21);
+ ch = table[ch];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ if ( *inlen==1 && *outlen>0 )
+return( (size_t) -1 ); /* Incomplete multi-byte sequence */
+ } else if ( cd->from==e_wansung || cd->from==e_jisgbpk ) {
+ table = cd->from==e_jisgbpk ? unicode_from_gb2312 :
+ unicode_from_ksc5601 ;
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x7f ) {
+ ch = *ipt;
+ --*inlen;
+ *inbuf = (char *) ipt+1;
+ } else {
+ if ( *ipt<0xa1 || *ipt>0xfe || ipt[1]<0xa1 || ipt[1]>0xfe ||
+ *inlen==1 )
+return( (size_t) -1 );
+ ch = (*ipt-0xa1)*94 + (ipt[1]-0xa1);
+ ch = table[ch];
+ *inlen -= 2;;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_johab || cd->from==e_big5 || cd->from==e_big5hkscs ) {
+ int offset;
+ if ( cd->from==e_big5 ) {
+ offset = 0xa100;
+ table = unicode_from_big5;
+ } else if ( cd->from==e_big5hkscs ) {
+ offset = 0x8100;
+ table = unicode_from_big5hkscs;
+ } else {
+ offset = 0x8400;
+ table = unicode_from_johab;
+ }
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x7f ) {
+ ch = *ipt;
+ --*inlen;
+ *inbuf = (char *) ipt+1;
+ } else {
+ if ( *inlen==1 )
+return( (size_t) -1 );
+ ch = (*ipt<<8) | ipt[1];
+ if ( ch<offset )
+return( (size_t) -1 );
+ ch -= offset;
+ ch = table[ch];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_sjis ) {
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch1 = *ipt;
+ if ( ch1<127 || ( ch1>=161 && ch1<=223 )) {
+ ch = unicode_from_jis201[ch1];
+ *inbuf = (char *) ipt+1;
+ --*inlen;
+ } else if ( *inlen==1 )
+return( (size_t) -1 );
+ else {
+ int ch2 = ipt[1];
+ if ( ch1 >= 129 && ch1<= 159 )
+ ch1 -= 112;
+ else
+ ch1 -= 176;
+ ch1 <<= 1;
+ if ( ch2>=159 )
+ ch2-= 126;
+ else if ( ch2>127 ) {
+ --ch1;
+ ch2 -= 32;
+ } else {
+ --ch1;
+ ch2 -= 31;
+ }
+ if ( ch1-0x21>=94 || ch2-0x21>=94 )
+return( (size_t) -1 );
+ ch = unicode_from_jis208[(ch1-0x21)*94+(ch2-0x21)];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_utf8 ) {
+ while ( *inlen>0 && *outlen>sizeof(unichar_t) ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch = *ipt;
+ if ( ch <= 127 ) {
+ *inbuf = (char *) ipt+1;
+ --*inlen;
+ } else if ( ch<=0xdf ) {
+ if ( *inlen<2 || ipt[1]<0x80 )
+return( (size_t) -1 );
+ ch = ((ch&0x1f)<<6) | (ipt[1] &0x3f);
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ } else if ( ch<=0xef ) {
+ if ( *inlen<3 || ipt[1]<0x80 || ipt[2]<0x80 )
+return( (size_t) -1 );
+ ch = ((ch&0x1f)<<12) | ((ipt[1] &0x3f)<<6) | (ipt[2]&0x3f);
+ *inlen -= 3;
+ *inbuf = (char *) ipt+3;
+ } else {
+ int w;
+ if ( *inlen<4 || *outlen<4 || ipt[1]<0x80 || ipt[2]<0x80 || ipt[3]<0x80 )
+return( (size_t) -1 );
+ w = ( ((ch&0x7)<<2) | ((ipt[1]&0x30)>>4) )-1;
+ ch = 0xd800 | (w<<6) | ((ipt[1]&0xf)<<2) | ((ipt[2]&0x30)>>4);
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= 2;
+ ch = 0xdc00 | ((ipt[2]&0xf)<<6) | (ipt[3]&0x3f);
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else {
+ fprintf( stderr, "Unexpected encoding\n" );
+return( (size_t) -1 );
+ }
+ } else if ( cd->to==e_ucs4 ) {
+ const unichar_t *table;
+ if ( cd->from<e_first2byte ) {
+ table = unicode_from_alphabets[cd->from];
+ while ( *inlen>0 && *outlen>1 ) {
+ unichar_t ch = table[ *(unsigned char *) ((*inbuf)++)];
+ --*inlen;
+ if ( endian==end_little ) {
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_jis || cd->from==e_jis2 ||
+ cd->from==e_jiskorean || cd->from==e_jisgb ) {
+ table = cd->from==e_jisgb ? unicode_from_gb2312 :
+ cd->from==e_jiskorean ? unicode_from_ksc5601 :
+ cd->from==e_jis ? unicode_from_jis208 :
+ unicode_from_jis212;
+ while ( *inlen>1 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x21 || *ipt>0x7e || ipt[1]<0x21 || ipt[1]>0x7e )
+return( (size_t) -1 );
+ ch = (*ipt-0x21)*94 + (ipt[1]-0x21);
+ ch = table[ch];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ if ( endian==end_little ) {
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ if ( *inlen==1 && *outlen>0 )
+return( (size_t) -1 ); /* Incomplete multi-byte sequence */
+ } else if ( cd->from==e_wansung || cd->from==e_jisgbpk ) {
+ table = cd->from==e_jisgbpk ? unicode_from_gb2312 :
+ unicode_from_ksc5601 ;
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x7f ) {
+ ch = *ipt;
+ --*inlen;
+ *inbuf = (char *) ipt+1;
+ } else {
+ if ( *ipt<0xa1 || *ipt>0xfe || ipt[1]<0xa1 || ipt[1]>0xfe ||
+ *inlen==1 )
+return( (size_t) -1 );
+ ch = (*ipt-0xa1)*94 + (ipt[1]-0xa1);
+ ch = table[ch];
+ *inlen -= 2;;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_johab || cd->from==e_big5 || cd->from==e_big5hkscs ) {
+ int offset;
+ if ( cd->from==e_big5 ) {
+ offset = 0xa100;
+ table = unicode_from_big5;
+ } else if ( cd->from==e_big5hkscs ) {
+ offset = 0x8100;
+ table = unicode_from_big5hkscs;
+ } else {
+ offset = 0x8400;
+ table = unicode_from_johab;
+ }
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch;
+ if ( *ipt<0x7f ) {
+ ch = *ipt;
+ --*inlen;
+ *inbuf = (char *) ipt+1;
+ } else {
+ if ( *inlen==1 )
+return( (size_t) -1 );
+ ch = (*ipt<<8) | ipt[1];
+ if ( ch<offset )
+return( (size_t) -1 );
+ ch -= offset;
+ ch = table[ch];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_sjis ) {
+ while ( *inlen>0 && *outlen>1 ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch1 = *ipt;
+ if ( ch1<127 || ( ch1>=161 && ch1<=223 )) {
+ ch = unicode_from_jis201[ch1];
+ *inbuf = (char *) ipt+1;
+ --*inlen;
+ } else if ( *inlen==1 )
+return( (size_t) -1 );
+ else {
+ int ch2 = ipt[1];
+ if ( ch1 >= 129 && ch1<= 159 )
+ ch1 -= 112;
+ else
+ ch1 -= 176;
+ ch1 <<= 1;
+ if ( ch2>=159 )
+ ch2-= 126;
+ else if ( ch2>127 ) {
+ --ch1;
+ ch2 -= 32;
+ } else {
+ --ch1;
+ ch2 -= 31;
+ }
+ if ( ch1-0x21>=94 || ch2-0x21>=94 )
+return( (size_t) -1 );
+ ch = unicode_from_jis208[(ch1-0x21)*94+(ch2-0x21)];
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ } else {
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = 0;
+ *((*outbuf)++) = 0;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else if ( cd->from==e_utf8 ) {
+ while ( *inlen>0 && *outlen>sizeof(unichar_t) ) {
+ unsigned char *ipt = (unsigned char *) *inbuf;
+ int ch = *ipt;
+ if ( ch <= 127 ) {
+ *inbuf = (char *) ipt+1;
+ --*inlen;
+ } else if ( ch<=0xdf ) {
+ if ( *inlen<2 || ipt[1]<0x80 )
+return( (size_t) -1 );
+ ch = ((ch&0x1f)<<6) | (ipt[1] &0x3f);
+ *inlen -= 2;
+ *inbuf = (char *) ipt+2;
+ } else if ( ch<=0xef ) {
+ if ( *inlen<3 || ipt[1]<0x80 || ipt[2]<0x80 )
+return( (size_t) -1 );
+ ch = ((ch&0x1f)<<12) | ((ipt[1] &0x3f)<<6) | (ipt[2]&0x3f);
+ *inlen -= 3;
+ *inbuf = (char *) ipt+3;
+ } else {
+ int w,w2;
+ w = ( ((*ipt&0x7)<<2) | ((ipt[1]&0x30)>>4) )-1;
+ w = (w<<6) | ((ipt[1]&0xf)<<2) | ((ipt[2]&0x30)>>4);
+ w2 = ((ipt[2]&0xf)<<6) | (ipt[3]&0x3f);
+ ch = w*0x400 + w2 + 0x10000;
+ *inbuf = (char *) ipt+4;
+ }
+ if ( endian==end_little ) {
+ *((*outbuf)++) = ch&0xff;
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch>>16;
+ *((*outbuf)++) = ch>>24;
+ } else {
+ *((*outbuf)++) = ch>>24;
+ *((*outbuf)++) = ch>>16;
+ *((*outbuf)++) = ch>>8;
+ *((*outbuf)++) = ch&0xff;
+ }
+ *outlen -= sizeof(unichar_t);
+ ++char_cnt;
+ }
+ } else {
+ fprintf( stderr, "Unexpected encoding\n" );
+return( (size_t) -1 );
+ }
+ } else {
+ fprintf( stderr, "One of the two encodings must be UCS2 in gww_iconv()\n" );
+return( (size_t) -1 );
+ }
+
+ if ( *outlen>=1 ) {
+ **outbuf = '\0';
+ if ( *outlen>1 )
+ (*outbuf)[1] = '\0';
+ if ( cd->to==e_ucs4 && *outlen>3 ) {
+ (*outbuf)[2] = '\0';
+ (*outbuf)[3] = '\0';
+ }
+ }
+return( char_cnt );
+}
+#else
+static const int a_file_must_define_something=1;
+#endif /* HAVE_ICONV_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/libffstamp.h b/dviware/dvisvgm/libs/ff-woff/fontforge/libffstamp.h
new file mode 100644
index 0000000000..bde3a031ba
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/libffstamp.h
@@ -0,0 +1,8 @@
+/* This file was generated using stamper.c to create the next version release. */
+/* If you need to update this to the next release version, see fontforge/GNUmakefile.in */
+
+#include "fontforge-config.h"
+
+#define LibFF_ModTime FONTFORGE_MODTIME_RAW /* Seconds since 1970 (standard unix time) */
+#define LibFF_ModTime_Str FONTFORGE_MODTIME_STR
+#define LibFF_VersionDate FONTFORGE_VERSIONDATE_RAW /* Year, month, day */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/lookups.c b/dviware/dvisvgm/libs/ff-woff/fontforge/lookups.c
new file mode 100644
index 0000000000..466a05e399
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/lookups.c
@@ -0,0 +1,679 @@
+/* -*- coding: utf-8 -*- */
+/* Copyright (C) 2007-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+
+static int uint32_cmp(const void *_ui1, const void *_ui2) {
+ if ( *(uint32 *) _ui1 > *(uint32 *)_ui2 )
+return( 1 );
+ if ( *(uint32 *) _ui1 < *(uint32 *)_ui2 )
+return( -1 );
+
+return( 0 );
+}
+
+static int lang_cmp(const void *_ui1, const void *_ui2) {
+ /* The default language is magic, and should come first in the list even */
+ /* if that is not true alphabetical order */
+ if ( *(uint32 *) _ui1 == DEFAULT_LANG )
+return( -1 );
+ if ( *(uint32 *) _ui2 == DEFAULT_LANG )
+return( 1 );
+
+ if ( *(uint32 *) _ui1 > *(uint32 *)_ui2 )
+return( 1 );
+ if ( *(uint32 *) _ui1 < *(uint32 *)_ui2 )
+return( -1 );
+
+return( 0 );
+}
+
+uint32 *SFScriptsInLookups(SplineFont *sf,int gpos) {
+ /* Presumes that either SFFindUnusedLookups or SFFindClearUnusedLookupBits */
+ /* has been called first */
+ /* Since MS will sometimes ignore a script if it isn't found in both */
+ /* GPOS and GSUB we want to return the same script list no matter */
+ /* what the setting of gpos ... so we totally ignore that argument */
+ /* and always look at both sets of lookups */
+
+/* Sergey Malkin from MicroSoft tells me:
+ Each shaping engine in Uniscribe can decide on its requirements for
+ layout tables - some of them require both GSUB and GPOS, in some cases
+ any table present is enough, or it can work without any table.
+
+ Sometimes, purpose of the check is to determine if font is supporting
+ particular script - if required tables are not there font is just
+ rejected by this shaping engine. Sometimes, shaping engine can not just
+ reject the font because there are fonts using older shaping technologies
+ we still have to support, so it uses some logic when to fallback to
+ legacy layout code.
+
+ In your case this is Hebrew, where both tables are required to use
+ OpenType processing. Arabic requires both tables too, Latin requires
+ GSUB to execute GPOS. But in general, if you have both tables you should
+ be safe with any script to get fully featured OpenType shaping.
+
+In other words, if we have a Hebrew font with just GPOS features they won't work,
+and MS will not use the font at all. We must add a GSUB table. In the unlikely
+event that we had a hebrew font with only GSUB it would not work either.
+
+So if we want our lookups to have a chance of executing under Uniscribe we
+better make sure that both tables have the same script set.
+
+(Sergey says we could optimize a little: A Latin GSUB table will run without
+a GPOS, but he says the GPOS won't work without a GSUB.)
+*/
+ int cnt=0, tot=0, i;
+ uint32 *scripts = NULL;
+ OTLookup *test;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+
+ /* So here always give scripts for both (see comment above) no */
+ /* matter what they asked for */
+ for ( gpos=0; gpos<2; ++gpos ) {
+ for ( test = gpos ? sf->gpos_lookups : sf->gsub_lookups; test!=NULL; test = test->next ) {
+ if ( test->unused )
+ continue;
+ for ( fl=test->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->ismac )
+ continue;
+ for ( sl=fl->scripts ; sl!=NULL; sl=sl->next ) {
+ for ( i=0; i<cnt; ++i ) {
+ if ( sl->script==scripts[i] )
+ break;
+ }
+ if ( i==cnt ) {
+ if ( cnt>=tot )
+ scripts = realloc(scripts,(tot+=10)*sizeof(uint32));
+ scripts[cnt++] = sl->script;
+ }
+ }
+ }
+ }
+ }
+
+ if ( cnt==0 )
+return( NULL );
+
+ /* We want our scripts in alphabetic order */
+ qsort(scripts,cnt,sizeof(uint32),uint32_cmp);
+ /* add a 0 entry to mark the end of the list */
+ if ( cnt>=tot )
+ scripts = realloc(scripts,(tot+1)*sizeof(uint32));
+ scripts[cnt] = 0;
+return( scripts );
+}
+
+uint32 *SFLangsInScript(SplineFont *sf,int gpos,uint32 script) {
+ /* However, the language lists (I think) are distinct */
+ /* But giving a value of -1 for gpos will give us the set of languages in */
+ /* both tables (for this script) */
+ int cnt=0, tot=0, i, g, l;
+ uint32 *langs = NULL;
+ OTLookup *test;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+
+ for ( g=0; g<2; ++g ) {
+ if (( gpos==0 && g==1 ) || ( gpos==1 && g==0 ))
+ continue;
+ for ( test = g ? sf->gpos_lookups : sf->gsub_lookups; test!=NULL; test = test->next ) {
+ if ( test->unused )
+ continue;
+ for ( fl=test->features; fl!=NULL; fl=fl->next ) {
+ for ( sl=fl->scripts ; sl!=NULL; sl=sl->next ) {
+ if ( sl->script==script ) {
+ for ( l=0; l<sl->lang_cnt; ++l ) {
+ uint32 lang;
+ if ( l<MAX_LANG )
+ lang = sl->langs[l];
+ else
+ lang = sl->morelangs[l-MAX_LANG];
+ for ( i=0; i<cnt; ++i ) {
+ if ( lang==langs[i] )
+ break;
+ }
+ if ( i==cnt ) {
+ if ( cnt>=tot )
+ langs = realloc(langs,(tot+=10)*sizeof(uint32));
+ langs[cnt++] = lang;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if ( cnt==0 ) {
+ /* We add dummy script entries. Because Uniscribe will refuse to */
+ /* process some scripts if they don't have an entry in both GPOS */
+ /* an GSUB. So if a script appears in either table, force it to */
+ /* appear in both. That means we can get scripts with no lookups */
+ /* and hence no languages. It seems that Uniscribe doesn't like */
+ /* that either. So give each such script a dummy default language */
+ /* entry. This is what VOLT does */
+ langs = calloc(2,sizeof(uint32));
+ langs[0] = DEFAULT_LANG;
+return( langs );
+ }
+
+ /* We want our languages in alphabetic order */
+ qsort(langs,cnt,sizeof(uint32),lang_cmp);
+ /* add a 0 entry to mark the end of the list */
+ if ( cnt>=tot )
+ langs = realloc(langs,(tot+1)*sizeof(uint32));
+ langs[cnt] = 0;
+return( langs );
+}
+
+uint32 *SFFeaturesInScriptLang(SplineFont *sf,int gpos,uint32 script,uint32 lang) {
+ int cnt=0, tot=0, i, l, isg;
+ uint32 *features = NULL;
+ OTLookup *test;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+ /* gpos==0 => GSUB, gpos==1 => GPOS, gpos==-1 => both, gpos==-2 => Both & morx & kern */
+
+ if ( sf->cidmaster ) sf=sf->cidmaster;
+ for ( isg = 0; isg<2; ++isg ) {
+ if ( gpos>=0 && isg!=gpos )
+ continue;
+ for ( test = isg ? sf->gpos_lookups : sf->gsub_lookups; test!=NULL; test = test->next ) {
+ if ( test->unused )
+ continue;
+ for ( fl=test->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->ismac && gpos!=-2 )
+ continue;
+ if ( script==0xffffffff ) {
+ for ( i=0; i<cnt; ++i ) {
+ if ( fl->featuretag==features[i] )
+ break;
+ }
+ if ( i==cnt ) {
+ if ( cnt>=tot )
+ features = realloc(features,(tot+=10)*sizeof(uint32));
+ features[cnt++] = fl->featuretag;
+ }
+ } else for ( sl=fl->scripts ; sl!=NULL; sl=sl->next ) {
+ if ( sl->script==script ) {
+ int matched = false;
+ if ( fl->ismac && gpos==-2 )
+ matched = true;
+ else for ( l=0; l<sl->lang_cnt; ++l ) {
+ uint32 testlang;
+ if ( l<MAX_LANG )
+ testlang = sl->langs[l];
+ else
+ testlang = sl->morelangs[l-MAX_LANG];
+ if ( testlang==lang ) {
+ matched = true;
+ break;
+ }
+ }
+ if ( matched ) {
+ for ( i=0; i<cnt; ++i ) {
+ if ( fl->featuretag==features[i] )
+ break;
+ }
+ if ( i==cnt ) {
+ if ( cnt>=tot )
+ features = realloc(features,(tot+=10)*sizeof(uint32));
+ features[cnt++] = fl->featuretag;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if ( sf->design_size!=0 && gpos ) {
+ /* The 'size' feature is like no other. It has no lookups and so */
+ /* we will never find it in the normal course of events. If the */
+ /* user has specified a design size, then every script/lang combo */
+ /* gets a 'size' feature which contains no lookups but feature */
+ /* params */
+ if ( cnt>=tot )
+ features = realloc(features,(tot+=2)*sizeof(uint32));
+ features[cnt++] = CHR('s','i','z','e');
+ }
+
+ if ( cnt==0 )
+return( calloc(1,sizeof(uint32)) );
+
+ /* We don't care if our features are in alphabetical order here */
+ /* all that matters is whether the complete list of features is */
+ /* ordering here would be irrelevant */
+ /* qsort(features,cnt,sizeof(uint32),uint32_cmp); */
+
+ /* add a 0 entry to mark the end of the list */
+ if ( cnt>=tot )
+ features = realloc(features,(tot+1)*sizeof(uint32));
+ features[cnt] = 0;
+return( features );
+}
+
+OTLookup **SFLookupsInScriptLangFeature(SplineFont *sf,int gpos,uint32 script,uint32 lang, uint32 feature) {
+ int cnt=0, tot=0, l;
+ OTLookup **lookups = NULL;
+ OTLookup *test;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+
+ for ( test = gpos ? sf->gpos_lookups : sf->gsub_lookups; test!=NULL; test = test->next ) {
+ if ( test->unused )
+ continue;
+ for ( fl=test->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->featuretag==feature ) {
+ for ( sl=fl->scripts ; sl!=NULL; sl=sl->next ) {
+ if ( sl->script==script ) {
+ for ( l=0; l<sl->lang_cnt; ++l ) {
+ uint32 testlang;
+ if ( l<MAX_LANG )
+ testlang = sl->langs[l];
+ else
+ testlang = sl->morelangs[l-MAX_LANG];
+ if ( testlang==lang ) {
+ if ( cnt>=tot )
+ lookups = realloc(lookups,(tot+=10)*sizeof(OTLookup *));
+ lookups[cnt++] = test;
+ goto found;
+ }
+ }
+ }
+ }
+ }
+ }
+ found:;
+ }
+
+ if ( cnt==0 )
+return( NULL );
+
+ /* lookup order is irrelevant here. might as well leave it in invocation order */
+ /* add a 0 entry to mark the end of the list */
+ if ( cnt>=tot )
+ lookups = realloc(lookups,(tot+1)*sizeof(OTLookup *));
+ lookups[cnt] = 0;
+return( lookups );
+}
+
+static int LigaturesFirstComponentGID(SplineFont *sf,char *components) {
+ int gid, ch;
+ char *pt;
+
+ for ( pt = components; *pt!='\0' && *pt!=' '; ++pt );
+ ch = *pt; *pt = '\0';
+ gid = SFFindExistingSlot(sf,-1,components);
+ *pt = ch;
+return( gid );
+}
+
+static int PSTValid(SplineFont *sf,PST *pst) {
+ char *start, *pt, ch;
+ int ret;
+
+ switch ( pst->type ) {
+ case pst_position:
+return( true );
+ case pst_pair:
+return( SCWorthOutputting(SFGetChar(sf,-1,pst->u.pair.paired)) );
+ case pst_substitution: case pst_alternate: case pst_multiple:
+ case pst_ligature:
+ for ( start = pst->u.mult.components; *start ; ) {
+ for ( pt=start; *pt && *pt!=' '; ++pt );
+ ch = *pt; *pt = '\0';
+ ret = SCWorthOutputting(SFGetChar(sf,-1,start));
+ if ( !ret ) {
+ LogError(_("Lookup subtable contains unused glyph %s making the whole subtable invalid"), start);
+ *pt = ch;
+return( false );
+ }
+ *pt = ch;
+ if ( ch==0 )
+ start = pt;
+ else
+ start = pt+1;
+ }
+ default:
+ break;
+ }
+return( true );
+}
+
+SplineChar **SFGlyphsWithPSTinSubtable(SplineFont *sf,struct lookup_subtable *subtable) {
+ uint8 *used = calloc(sf->glyphcnt,sizeof(uint8));
+ SplineChar **glyphs, *sc;
+ int i, k, gid, cnt;
+ KernPair *kp;
+ PST *pst;
+ int ispair = subtable->lookup->lookup_type == gpos_pair;
+ int isliga = subtable->lookup->lookup_type == gsub_ligature;
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( SCWorthOutputting(sc = sf->glyphs[i]) ) {
+ if ( ispair ) {
+ for ( k=0; k<2; ++k ) {
+ for ( kp= k ? sc->kerns : sc->vkerns; kp!=NULL ; kp=kp->next ) {
+ if ( !SCWorthOutputting(kp->sc))
+ continue;
+ if ( kp->subtable == subtable ) {
+ used[i] = true;
+ goto continue_;
+ }
+ }
+ }
+ }
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable == subtable && PSTValid(sf,pst)) {
+ if ( !isliga ) {
+ used[i] = true;
+ goto continue_;
+ } else {
+ gid = LigaturesFirstComponentGID(sf,pst->u.lig.components);
+ pst->u.lig.lig = sc;
+ if ( gid!=-1 )
+ used[gid] = true;
+ /* can't continue here. ffi might be "f+f+i" and "ff+i" */
+ /* and we need to mark both "f" and "ff" as used */
+ }
+ }
+ }
+ continue_: ;
+ }
+
+ for ( i=cnt=0 ; i<sf->glyphcnt; ++i )
+ if ( used[i] )
+ ++cnt;
+
+ if ( cnt==0 ) {
+ free(used);
+return( NULL );
+ }
+ glyphs = malloc((cnt+1)*sizeof(SplineChar *));
+ for ( i=cnt=0 ; i<sf->glyphcnt; ++i ) {
+ if ( used[i] )
+ glyphs[cnt++] = sf->glyphs[i];
+ }
+ glyphs[cnt] = NULL;
+ free(used);
+return( glyphs );
+}
+
+static void TickLookupKids(OTLookup *otl) {
+ struct lookup_subtable *sub;
+ int i,j;
+
+ for ( sub=otl->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->fpst!=NULL ) {
+ for ( i=0; i<sub->fpst->rule_cnt; ++i ) {
+ struct fpst_rule *rule = &sub->fpst->rules[i];
+ for ( j=0; j<rule->lookup_cnt; ++j ) {
+ if ( rule->lookups[j].lookup!=NULL )
+ rule->lookups[j].lookup->in_gpos = true;
+ }
+ }
+ }
+ }
+}
+
+void SFFindUnusedLookups(SplineFont *sf) {
+ OTLookup *test;
+ struct lookup_subtable *sub;
+ int gpos;
+ AnchorClass *ac;
+ AnchorPoint *ap;
+ SplineChar *sc;
+ KernPair *kp;
+ PST *pst;
+ int i,k,gid,isv;
+ SplineFont *_sf = sf;
+ Justify *jscripts;
+ struct jstf_lang *jlangs;
+
+ if ( _sf->cidmaster ) _sf = _sf->cidmaster;
+
+ /* Some things are obvious. If a subtable consists of a kernclass or some */
+ /* such, then obviously it is used. But more distributed info takes more */
+ /* work. So mark anything easy as used, and anything difficult as unused */
+ /* We'll work on the difficult things later */
+ for ( gpos=0; gpos<2; ++gpos ) {
+ for ( test = gpos ? _sf->gpos_lookups : _sf->gsub_lookups; test!=NULL; test = test->next ) {
+ for ( sub = test->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->kc!=NULL || sub->fpst!=NULL || sub->sm!=NULL ) {
+ sub->unused = false;
+ continue;
+ }
+ sub->unused = true;
+ /* We'll turn the following bit back on if there turns out */
+ /* to be an anchor class attached to it -- that is subtly */
+ /* different than being unused -- unused will be set if all */
+ /* acs are unused, this bit will be on if there are unused */
+ /* classes that still refer to us. */
+ sub->anchor_classes = false;
+ }
+ }
+ }
+
+ /* To be useful an anchor class must have both at least one base and one mark */
+ /* (for cursive anchors that means at least one entry and at least one exit) */
+ /* Start by assuming the worst */
+ for ( ac = _sf->anchor; ac!=NULL; ac=ac->next )
+ ac->has_mark = ac->has_base = false;
+
+ /* Ok, for each glyph, look at all lookups (or anchor classes) it affects */
+ /* and mark the appropriate parts of them as used */
+ k = 0;
+ do {
+ sf = _sf->subfontcnt==0 ? _sf : _sf->subfonts[k];
+ for ( gid=0; gid<sf->glyphcnt; ++gid ) if ( SCWorthOutputting(sc = sf->glyphs[gid]) ) {
+ for ( ap=sc->anchor; ap!=NULL; ap=ap->next ) {
+ switch ( ap->type ) {
+ case at_mark: case at_centry:
+ ap->anchor->has_mark = true;
+ break;
+ case at_basechar: case at_baselig: case at_basemark:
+ case at_cexit:
+ ap->anchor->has_base = true;
+ break;
+ default:
+ break;
+ }
+ }
+ for ( isv=0; isv<2; ++isv ) {
+ for ( kp= isv ? sc->kerns : sc->vkerns ; kp!=NULL; kp=kp->next ) {
+ if ( SCWorthOutputting(kp->sc))
+ kp->subtable->unused = false;
+ }
+ }
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==NULL )
+ continue;
+ if ( !PSTValid(sf,pst))
+ continue;
+ pst->subtable->unused = false;
+ }
+ }
+ ++k;
+ } while ( k<_sf->subfontcnt );
+
+ /* Finally for any anchor class that has both a mark and a base then it is */
+ /* used, and its lookup is also used */
+ /* Also, even if unused, as long as the anchor class exists we must keep */
+ /* the subtable around */
+ for ( ac = _sf->anchor; ac!=NULL; ac=ac->next ) {
+ if ( ac->subtable==NULL )
+ continue;
+ ac->subtable->anchor_classes = true;
+ if ( ac->has_mark && ac->has_base )
+ ac->subtable->unused = false;
+ }
+
+ /* Now for each lookup, a lookup is unused if ALL subtables are unused */
+ for ( gpos=0; gpos<2; ++gpos ) {
+ for ( test = gpos ? _sf->gpos_lookups : _sf->gsub_lookups; test!=NULL; test = test->next ) {
+ test->unused = test->empty = true;
+ for ( sub=test->subtables; sub!=NULL; sub=sub->next ) {
+ if ( !sub->unused )
+ test->unused = false;
+ if ( !sub->unused && !sub->anchor_classes ) {
+ test->empty = false;
+ break;
+ }
+ }
+ }
+ }
+
+ /* I store JSTF max lookups in the gpos list because they have the same */
+ /* format. But now I need to tease them out and learn which lookups are */
+ /* used in GPOS and which in JSTF (and conceivably which get duplicated */
+ /* and placed in both) */
+ for ( test = sf->gpos_lookups; test!=NULL; test = test->next ) {
+ test->only_jstf = test->in_jstf = test->in_gpos = false;
+ if ( test->features!=NULL )
+ test->in_gpos = true;
+ }
+ for ( jscripts = sf->justify; jscripts!=NULL; jscripts=jscripts->next ) {
+ for ( jlangs=jscripts->langs; jlangs!=NULL; jlangs=jlangs->next ) {
+ for ( i=0; i<jlangs->cnt; ++i ) {
+ struct jstf_prio *prio = &jlangs->prios[i];
+ if ( prio->enableShrink!=NULL )
+ for ( k=0; prio->enableShrink[k]!=NULL; ++k )
+ prio->enableShrink[k]->in_gpos = true;
+ if ( prio->disableShrink!=NULL )
+ for ( k=0; prio->disableShrink[k]!=NULL; ++k )
+ prio->disableShrink[k]->in_gpos = true;
+ if ( prio->enableExtend!=NULL )
+ for ( k=0; prio->enableExtend[k]!=NULL; ++k )
+ prio->enableExtend[k]->in_gpos = true;
+ if ( prio->disableExtend!=NULL )
+ for ( k=0; prio->disableExtend[k]!=NULL; ++k )
+ prio->disableExtend[k]->in_gpos = true;
+ if ( prio->maxShrink!=NULL )
+ for ( k=0; prio->maxShrink[k]!=NULL; ++k )
+ prio->maxShrink[k]->in_jstf = true;
+ if ( prio->maxExtend!=NULL )
+ for ( k=0; prio->maxExtend[k]!=NULL; ++k )
+ prio->maxExtend[k]->in_jstf = true;
+ }
+ }
+ }
+ for ( test = sf->gpos_lookups; test!=NULL; test = test->next ) {
+ if ( test->in_gpos && (test->lookup_type==gpos_context || test->lookup_type==gpos_contextchain))
+ TickLookupKids(test);
+ }
+ for ( test = sf->gpos_lookups; test!=NULL; test = test->next )
+ test->only_jstf = test->in_jstf && !test->in_gpos;
+}
+
+struct lookup_subtable *SFFindLookupSubtable(SplineFont *sf,char *name) {
+ int isgpos;
+ OTLookup *otl;
+ struct lookup_subtable *sub;
+
+ if ( sf->cidmaster ) sf = sf->cidmaster;
+
+ if ( name==NULL )
+return( NULL );
+
+ for ( isgpos=0; isgpos<2; ++isgpos ) {
+ for ( otl = isgpos ? sf->gpos_lookups : sf->gsub_lookups ; otl!=NULL; otl=otl->next ) {
+ for ( sub = otl->subtables; sub!=NULL; sub=sub->next ) {
+ if ( strcmp(name,sub->subtable_name)==0 )
+return( sub );
+ }
+ }
+ }
+return( NULL );
+}
+
+struct lookup_subtable *SFFindLookupSubtableAndFreeName(SplineFont *sf,char *name) {
+ struct lookup_subtable *sub = SFFindLookupSubtable(sf,name);
+ free(name);
+return( sub );
+}
+
+OTLookup *SFFindLookup(SplineFont *sf,char *name) {
+ int isgpos;
+ OTLookup *otl;
+
+ if ( sf->cidmaster ) sf = sf->cidmaster;
+
+ if ( name==NULL )
+return( NULL );
+
+ for ( isgpos=0; isgpos<2; ++isgpos ) {
+ for ( otl = isgpos ? sf->gpos_lookups : sf->gsub_lookups ; otl!=NULL; otl=otl->next ) {
+ if ( strcmp(name,otl->lookup_name)==0 )
+return( otl );
+ }
+ }
+return( NULL );
+}
+
+struct scriptlanglist *SLCopy(struct scriptlanglist *sl) {
+ struct scriptlanglist *newsl;
+
+ newsl = chunkalloc(sizeof(struct scriptlanglist));
+ *newsl = *sl;
+ newsl->next = NULL;
+
+ if ( sl->lang_cnt>MAX_LANG ) {
+ newsl->morelangs = malloc((newsl->lang_cnt-MAX_LANG)*sizeof(uint32));
+ memcpy(newsl->morelangs,sl->morelangs,(newsl->lang_cnt-MAX_LANG)*sizeof(uint32));
+ }
+return( newsl );
+}
+
+struct scriptlanglist *SListCopy(struct scriptlanglist *sl) {
+ struct scriptlanglist *head=NULL, *last=NULL, *cur;
+
+ for ( ; sl!=NULL; sl=sl->next ) {
+ cur = SLCopy(sl);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+return( head );
+}
+
+FeatureScriptLangList *FeatureListCopy(FeatureScriptLangList *fl) {
+ FeatureScriptLangList *newfl;
+
+ if ( fl==NULL )
+return( NULL );
+
+ newfl = chunkalloc(sizeof(FeatureScriptLangList));
+ *newfl = *fl;
+ newfl->next = NULL;
+
+ newfl->scripts = SListCopy(fl->scripts);
+return( newfl );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/macbinary.c b/dviware/dvisvgm/libs/ff-woff/fontforge/macbinary.c
new file mode 100644
index 0000000000..85df7c5971
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/macbinary.c
@@ -0,0 +1,227 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+
+#if __Mac
+# include <ctype.h>
+# include "carbon.h"
+#else
+#undef __Mac
+#define __Mac 0
+#endif
+
+/* I had always assumed that the mac still believed in 72dpi screens, but I */
+/* see that in geneva under OS/9, the pointsize does not match the pixel */
+/* size of the font. But the dpi is not constant (and the differences */
+/* excede those supplied by rounding errors) varying between 96 and 84dpi */
+
+/* A Mac Resource fork */
+/* http://developer.apple.com/techpubs/mac/MoreToolbox/MoreToolbox-9.html */
+/* begins with a 16 byte header containing: */
+/* resource start offset */
+/* map start offset */
+/* resource length */
+/* map length */
+/* then 256-16 bytes of zeros */
+/* the resource section consists of (many) */
+/* 4 byte length count */
+/* resource data */
+/* the map section contains */
+/* A copy of the 16 byte header */
+/* a 4 byte mac internal value (I hope) */
+/* another 4 bytes of mac internal values (I hope) */
+/* a 2 byte offset from the start of the map section to the list of resource types */
+/* a 2 byte offset from the start of the map section to the list of resource names */
+/* The resource type list consists of */
+/* a 2 byte count of the number of resource types (-1) */
+/* (many copies of) */
+/* a 4 byte resource type ('FOND' for example) */
+/* a 2 byte count of the number of resources of this type (-1) */
+/* a 2 byte offset from the type list start to the resource table */
+/* a resource table looks like */
+/* a 2 byte offset from the resource name table to a pascal */
+/* string containing this resource's name (or 0xffff for none) */
+/* 1 byte of resource flags */
+/* 3 bytes of offset from the resource section to the length & */
+/* data of this instance of the resource type */
+/* 4 bytes of 0 */
+/* The resource name section consists of */
+/* a bunch of pascal strings (ie. preceded by a length byte) */
+
+/* The POST resource isn't noticeably documented, it's pretty much a */
+/* straight copy of the pfb file cut up into 0x800 byte chunks. */
+/* (each section of the pfb file has it's own set of chunks, the last may be smaller than 0x800) */
+/* The NFNT resource http://developer.apple.com/techpubs/mac/Text/Text-250.html */
+/* The FOND resource http://developer.apple.com/techpubs/mac/Text/Text-269.html */
+/* The sfnt resource is basically a copy of the ttf file */
+
+/* A MacBinary file */
+/* http://www.lazerware.com/formats/macbinary.html */
+/* begins with a 128 byte header */
+/* (which specifies lengths for data/resource forks) */
+/* (and contains mac type/creator data) */
+/* (and other stuff) */
+/* (and finally a crc checksum) */
+/* is followed by the data section (padded to a mult of 128 bytes) */
+/* is followed by the resource section (padded to a mult of 128 bytes) */
+
+/* Crc code taken from: */
+/* http:// mirror.ctan.org/tools/macutils/crc */
+/* MacBinary files use the same CRC that binhex does (in the MacBinary header) */
+
+/* ******************************** Creation ******************************** */
+struct resource {
+ uint32 pos;
+ uint8 flags;
+ uint16 id;
+ char *name;
+ uint32 nameloc;
+ uint32 nameptloc;
+};
+
+enum psstyle_flags { psf_bold = 1, psf_italic = 2, psf_outline = 4,
+ psf_shadow = 0x8, psf_condense = 0x10, psf_extend = 0x20 };
+
+uint16 _MacStyleCode( const char *styles, SplineFont *sf, uint16 *psstylecode ) {
+ unsigned short stylecode= 0, psstyle=0;
+
+ if ( strstrmatch( styles, "Bold" ) || strstrmatch(styles,"Demi") ||
+ strstrmatch( styles,"Heav") || strstrmatch(styles,"Blac") ||
+/* A few fonts have German/French styles in their names */
+ strstrmatch( styles,"Fett") || strstrmatch(styles,"Gras") ) {
+ stylecode = sf_bold;
+ psstyle = psf_bold;
+ } else if ( sf!=NULL && sf->weight!=NULL &&
+ (strstrmatch( sf->weight, "Bold" ) || strstrmatch(sf->weight,"Demi") ||
+ strstrmatch( sf->weight,"Heav") || strstrmatch(sf->weight,"Blac") ||
+ strstrmatch( sf->weight,"Fett") || strstrmatch(sf->weight,"Gras")) ) {
+ stylecode = sf_bold;
+ psstyle = psf_bold;
+ }
+ /* URW uses four leter abbreviations of Italic and Oblique */
+ /* Somebody else uses two letter abbrevs */
+ if ( (sf!=NULL && sf->italicangle!=0) ||
+ strstrmatch( styles, "Ital" ) ||
+ strstrmatch( styles, "Obli" ) ||
+ strstrmatch(styles, "Slanted") ||
+ strstrmatch(styles, "Kurs") ||
+ strstr( styles,"It" ) ) {
+ stylecode |= sf_italic;
+ psstyle |= psf_italic;
+ }
+ if ( strstrmatch( styles, "Underline" ) ) {
+ stylecode |= sf_underline;
+ }
+ if ( strstrmatch( styles, "Outl" ) ) {
+ stylecode |= sf_outline;
+ psstyle |= psf_outline;
+ }
+ if ( strstr(styles,"Shadow")!=NULL ) {
+ stylecode |= sf_shadow;
+ psstyle |= psf_shadow;
+ }
+ if ( strstrmatch( styles, "Cond" ) || strstr( styles,"Cn") ||
+ strstrmatch( styles, "Narrow") ) {
+ stylecode |= sf_condense;
+ psstyle |= psf_condense;
+ }
+ if ( strstrmatch( styles, "Exte" ) || strstr( styles,"Ex") ) {
+ stylecode |= sf_extend;
+ psstyle |= psf_extend;
+ }
+ if ( (psstyle&psf_extend) && (psstyle&psf_condense) ) {
+ if ( sf!=NULL )
+ LogError( _("Warning: %s(%s) is both extended and condensed. That's impossible.\n"),
+ sf->fontname, sf->origname );
+ else
+ LogError( _("Warning: Both extended and condensed. That's impossible.\n") );
+ psstyle &= ~psf_extend;
+ stylecode &= ~sf_extend;
+ }
+ if ( psstylecode!=NULL )
+ *psstylecode = psstyle;
+return( stylecode );
+}
+
+uint16 MacStyleCode( SplineFont *sf, uint16 *psstylecode ) {
+ const char *styles;
+
+ if ( sf->cidmaster!=NULL )
+ sf = sf->cidmaster;
+
+ if ( sf->macstyle!=-1 ) {
+ if ( psstylecode!=NULL )
+ *psstylecode = (sf->macstyle&0x3)|((sf->macstyle&0x6c)>>1);
+return( sf->macstyle );
+ }
+
+ styles = SFGetModifiers(sf);
+return( _MacStyleCode(styles,sf,psstylecode));
+}
+
+/* ******************************** Reading ********************************* */
+
+
+struct kerns {
+ unsigned char ch1, ch2;
+ short offset; /* 4.12 */
+};
+
+
+#if __Mac
+static SplineFont *HasResourceFork(char *filename,int flags,enum openflags openflags,
+ SplineFont *into,EncMap *map) {
+ /* If we're on a mac, we can try to see if we've got a real resource fork */
+ /* (if we do, copy it into a temporary data file and then manipulate that)*/
+ SplineFont *ret;
+ FILE *resfork;
+ char *tempfn=filename, *pt, *lparen, *respath;
+
+ if (( pt=strrchr(filename,'/'))==NULL ) pt = filename;
+ if ( (lparen = strchr(pt,'('))!=NULL && strchr(lparen,')')!=NULL ) {
+ tempfn = copy(filename);
+ tempfn[lparen-filename] = '\0';
+ }
+ respath = malloc(strlen(tempfn)+strlen("/..namedfork/rsrc")+1);
+ strcpy(respath,tempfn);
+ strcat(respath,"/..namedfork/rsrc");
+ resfork = fopen(respath,"r");
+ if ( resfork==NULL ) {
+ strcpy(respath,tempfn);
+ strcat(respath,"/rsrc");
+ resfork = fopen(respath,"r");
+ }
+ free(respath);
+ if ( tempfn!=filename )
+ free(tempfn);
+ if ( resfork==NULL )
+return( NULL );
+ ret = IsResourceFork(resfork,0,filename,flags,openflags,into,map);
+ fclose(resfork);
+return( ret );
+}
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/macenc.c b/dviware/dvisvgm/libs/ff-woff/fontforge/macenc.c
new file mode 100644
index 0000000000..f9dc5ff060
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/macenc.c
@@ -0,0 +1,1805 @@
+/* Copyright (C) 2003-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "ttf.h"
+
+/*
+ The original data for these mappings may be found at
+ http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/
+ unfortunately this site does not contain all the macintosh encodings
+ so we leave some blank
+*/
+/* Response (indirectly) from charsets@apple.com when asked about the missing
+ encodings:
+
+ > I don't believe any of those additional scripts are actually
+ > defined as character encodings. He can safely ignore anything
+ > that's not in the Apple folder on the Unicode site.
+ >
+ > I monitor charsets@apple.com and don't recall seeing any e-mail
+ > on this subject. It's possible it got lost in the voluminous
+ > spam the address receives.
+ >
+ > Deborah
+ I find this perplexing (unless the script is defined but unused, how can
+ it fail to have a defined encoding), but will accept it.
+*/
+
+/* Macintosh 1 byte encodings */
+static unichar_t arabic[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00a0, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x06ba, 0x00ab, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x2026, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00bb, 0x00f4, 0x00f6, 0x00f7, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x066a, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x060c, 0x002d, 0x002e, 0x002f,
+ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667,
+ 0x0668, 0x0669, 0x003a, 0x061b, 0x003c, 0x003d, 0x003e, 0x061f,
+ 0x274a, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+ 0x0638, 0x0639, 0x063a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
+ 0x0650, 0x0651, 0x0652, 0x067e, 0x0679, 0x0686, 0x06d5, 0x06a4,
+ 0x06af, 0x0688, 0x0691, 0x007b, 0x007c, 0x007d, 0x0698, 0x06d2
+};
+
+static unichar_t centeuro[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x0100, 0x0101, 0x00c9, 0x0104, 0x00d6, 0x00dc, 0x00e1,
+ 0x0105, 0x010c, 0x00e4, 0x010d, 0x0106, 0x0107, 0x00e9, 0x0179,
+ 0x017a, 0x010e, 0x00ed, 0x010f, 0x0112, 0x0113, 0x0116, 0x00f3,
+ 0x0117, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x011a, 0x011b, 0x00fc,
+ 0x2020, 0x00b0, 0x0118, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x0119, 0x00a8, 0x2260, 0x0123, 0x012e,
+ 0x012f, 0x012a, 0x2264, 0x2265, 0x012b, 0x0136, 0x2202, 0x2211,
+ 0x0142, 0x013b, 0x013c, 0x013d, 0x013e, 0x0139, 0x013a, 0x0145,
+ 0x0146, 0x0143, 0x00ac, 0x221a, 0x0144, 0x0147, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x0148, 0x0150, 0x00d5, 0x0151, 0x014c,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x014d, 0x0154, 0x0155, 0x0158, 0x2039, 0x203a, 0x0159, 0x0156,
+ 0x0157, 0x0160, 0x201a, 0x201e, 0x0161, 0x015a, 0x015b, 0x00c1,
+ 0x0164, 0x0165, 0x00cd, 0x017d, 0x017e, 0x016a, 0x00d3, 0x00d4,
+ 0x016b, 0x016e, 0x00da, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173,
+ 0x00dd, 0x00fd, 0x0137, 0x017b, 0x0141, 0x017c, 0x0122, 0x02c7
+};
+
+static unichar_t croatian[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x0160, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x017d, 0x00d8,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x2206, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x0161, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x017e, 0x00f8,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x0106, 0x00ab,
+ 0x010c, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x0110, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0xf8ff, 0x00a9, 0x2044, 0x20ac, 0x2039, 0x203a, 0x00c6, 0x00bb,
+ 0x2013, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x0107, 0x00c1,
+ 0x010d, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0x0111, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc,
+ 0x00af, 0x03c0, 0x00cb, 0x02da, 0x00b8, 0x00ca, 0x00e6, 0x02c7
+};
+
+static unichar_t cyrillic[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+ 0x2020, 0x00b0, 0x0490, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406,
+ 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x0491, 0x0408,
+ 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a,
+ 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e,
+ 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x20ac
+};
+
+static unichar_t devanagari[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00d7, 0x2212, 0x2013, 0x2014, 0x2018, 0x2019, 0x2026, 0x2022,
+ 0x00a9, 0x00ae, 0x2122, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0965, 0x0970, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0901, 0x0902, 0x0903, 0x0905, 0x0906, 0x0907, 0x0908,
+ 0x0909, 0x090a, 0x090b, 0x090e, 0x090f, 0x0910, 0x090d, 0x0912,
+ 0x0913, 0x0914, 0x0911, 0x0915, 0x0916, 0x0917, 0x0918, 0x0919,
+ 0x091a, 0x091b, 0x091c, 0x091d, 0x091e, 0x091f, 0x0920, 0x0921,
+ 0x0922, 0x0923, 0x0924, 0x0925, 0x0926, 0x0927, 0x0928, 0x0929,
+ 0x092a, 0x092b, 0x092c, 0x092d, 0x092e, 0x092f, 0x095f, 0x0930,
+ 0x0931, 0x0932, 0x0933, 0x0934, 0x0935, 0x0936, 0x0937, 0x0938,
+ 0x0939, 0x200e, 0x093e, 0x093f, 0x0940, 0x0941, 0x0942, 0x0943,
+ 0x0946, 0x0947, 0x0948, 0x0945, 0x094a, 0x094b, 0x094c, 0x0949,
+ 0x094d, 0x093c, 0x0964, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x0966, 0x0967, 0x0968, 0x0969, 0x096a, 0x096b, 0x096c,
+ 0x096d, 0x096e, 0x096f,
+};
+
+static unichar_t farsi[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00a0, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x06ba, 0x00ab, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x2026, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00bb, 0x00f4, 0x00f6, 0x00f7, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x066a, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x060c, 0x002d, 0x002e, 0x002f,
+ 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7,
+ 0x06f8, 0x06f9, 0x003a, 0x061b, 0x003c, 0x003d, 0x003e, 0x061f,
+ 0x274a, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+ 0x0638, 0x0639, 0x063a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
+ 0x0650, 0x0651, 0x0652, 0x067e, 0x0679, 0x0686, 0x06d5, 0x06a4,
+ 0x06af, 0x0688, 0x0691, 0x007b, 0x007c, 0x007d, 0x0698, 0x06d2
+};
+
+static unichar_t greek[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00b9, 0x00b2, 0x00c9, 0x00b3, 0x00d6, 0x00dc, 0x0385,
+ 0x00e0, 0x00e2, 0x00e4, 0x0384, 0x00a8, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00a3, 0x2122, 0x00ee, 0x00ef, 0x2022, 0x00bd,
+ 0x2030, 0x00f4, 0x00f6, 0x00a6, 0x20ac, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x0393, 0x0394, 0x0398, 0x039b, 0x039e, 0x03a0, 0x00df,
+ 0x00ae, 0x00a9, 0x03a3, 0x03aa, 0x00a7, 0x2260, 0x00b0, 0x00b7,
+ 0x0391, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x0392, 0x0395, 0x0396,
+ 0x0397, 0x0399, 0x039a, 0x039c, 0x03a6, 0x03ab, 0x03a8, 0x03a9,
+ 0x03ac, 0x039d, 0x00ac, 0x039f, 0x03a1, 0x2248, 0x03a4, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x03a5, 0x03a7, 0x0386, 0x0388, 0x0153,
+ 0x2013, 0x2015, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0389,
+ 0x038a, 0x038c, 0x038e, 0x03ad, 0x03ae, 0x03af, 0x03cc, 0x038f,
+ 0x03cd, 0x03b1, 0x03b2, 0x03c8, 0x03b4, 0x03b5, 0x03c6, 0x03b3,
+ 0x03b7, 0x03b9, 0x03be, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf,
+ 0x03c0, 0x03ce, 0x03c1, 0x03c3, 0x03c4, 0x03b8, 0x03c9, 0x03c2,
+ 0x03c7, 0x03c5, 0x03b6, 0x03ca, 0x03cb, 0x0390, 0x03b0, 0x00ad
+};
+
+static unichar_t gujarati[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00d7, 0x2212, 0x2013, 0x2014, 0x2018, 0x2019, 0x2026, 0x2022,
+ 0x00a9, 0x00ae, 0x2122, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0965, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x0a81, 0x0a82, 0x0a83, 0x0a85, 0x0a86, 0x0a87, 0x0a88,
+ 0x0a89, 0x0a8a, 0x0a8b, 0x00ab, 0x0a8f, 0x0a90, 0x0a8d, 0x00af,
+ 0x0a93, 0x0a94, 0x0a91, 0x0a95, 0x0a96, 0x0a97, 0x0a98, 0x0a99,
+ 0x0a9a, 0x0a9b, 0x0a9c, 0x0a9d, 0x0a9e, 0x0a9f, 0x0aa0, 0x0aa1,
+ 0x0aa2, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, 0x00c7,
+ 0x0aaa, 0x0aab, 0x0aac, 0x0aad, 0x0aae, 0x0aaf, 0x00ce, 0x0ab0,
+ 0x00d0, 0x0ab2, 0x0ab3, 0x00d3, 0x0ab5, 0x0ab6, 0x0ab7, 0x0ab8,
+ 0x0ab9, 0x200e, 0x0abe, 0x0abf, 0x0ac0, 0x0ac1, 0x0ac2, 0x0ac3,
+ 0x00e0, 0x0ac7, 0x0ac8, 0x0ac5, 0x00e4, 0x0acb, 0x0acc, 0x0ac9,
+ 0x0acd, 0x0abc, 0x0964, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x0ae6, 0x0ae7, 0x0ae8, 0x0ae9, 0x0aea, 0x0aeb, 0x0aec,
+ 0x0aed, 0x0aee, 0x0aef,
+};
+
+static unichar_t gurmukhi[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00d7, 0x2212, 0x2013, 0x2014, 0x2018, 0x2019, 0x2026, 0x2022,
+ 0x00a9, 0x00ae, 0x2122, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0a71, 0x0a5c, 0x0a73, 0x0a72, 0x0a74, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x00a1, 0x0a02, 0x00a3, 0x0a05, 0x0a06, 0x0a07, 0x0a08,
+ 0x0a09, 0x0a0a, 0x00aa, 0x00ab, 0x0a0f, 0x0a10, 0x00ae, 0x00af,
+ 0x0a13, 0x0a14, 0x00b2, 0x0a15, 0x0a16, 0x0a17, 0x0a18, 0x0a19,
+ 0x0a1a, 0x0a1b, 0x0a1c, 0x0a1d, 0x0a1e, 0x0a1f, 0x0a20, 0x0a21,
+ 0x0a22, 0x0a23, 0x0a24, 0x0a25, 0x0a26, 0x0a27, 0x0a28, 0x00c7,
+ 0x0a2a, 0x0a2b, 0x0a2c, 0x0a2d, 0x0a2e, 0x0a2f, 0x00ce, 0x0a30,
+ 0x00d0, 0x0a32, 0x00d2, 0x00d3, 0x0a35, 0xf860, 0x00d6, 0x0a38,
+ 0x0a39, 0x200e, 0x0a3e, 0x0a3f, 0x0a40, 0x0a41, 0x0a42, 0x00df,
+ 0x00e0, 0x0a47, 0x0a48, 0x00e3, 0x00e4, 0x0a4b, 0x0a4c, 0x00e7,
+ 0x0a4d, 0x0a3c, 0x0964, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x0a66, 0x0a67, 0x0a68, 0x0a69, 0x0a6a, 0x0a6b, 0x0a6c,
+ 0x0a6d, 0x0a6e, 0x0a6f,
+};
+
+static unichar_t hebrew[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x05f2, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x20aa, 0x0027,
+ 0x0029, 0x0028, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0xf86a, 0x201e, 0xf89b, 0xf89c, 0xf89d, 0xf89e, 0x05bc, 0xfb4b,
+ 0xfb35, 0x2026, 0x00a0, 0x05b8, 0x05b7, 0x05b5, 0x05b6, 0x05b4,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0xfb2a, 0xfb2b,
+ 0x05bf, 0x05b0, 0x05b2, 0x05b1, 0x05bb, 0x05b9, 0x05b8, 0x05b3,
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x05ea, 0x007d, 0x005d, 0x007b, 0x005b, 0x007c
+};
+
+static unichar_t iceland[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x00ff, 0x0178, 0x2044, 0x20ac, 0x00d0, 0x00f0, 0x00de, 0x00fe,
+ 0x00fd, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1,
+ 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc,
+ 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
+};
+
+static unichar_t romanian[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x0102, 0x0218,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x0103, 0x0219,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0x021a, 0x021b,
+ 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1,
+ 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc,
+ 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
+};
+
+unichar_t MacRomanEnc[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0xfb01, 0xfb02,
+ 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1,
+ 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc,
+ 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
+};
+
+static unichar_t thai[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00ab, 0x00bb, 0x2026, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x201c, 0x201d, 0x0e4d,
+ 0x0090, 0x2022, 0x0e31, 0x0e47, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x2018, 0x2019, 0x009f,
+ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e38, 0x0e39, 0x0e3a, 0x2060, 0x200b, 0x2013, 0x2014, 0x0e3f,
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x2122, 0x0e4f,
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x00ae, 0x00a9,
+};
+
+static unichar_t turkish[256] = {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 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,
+ 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1,
+ 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8,
+ 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3,
+ 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc,
+ 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df,
+ 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8,
+ 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211,
+ 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8,
+ 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab,
+ 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153,
+ 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca,
+ 0x00ff, 0x0178, 0x011e, 0x011f, 0x0130, 0x0131, 0x015e, 0x015f,
+ 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1,
+ 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4,
+ 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0xf8a0, 0x02c6, 0x02dc,
+ 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7
+};
+
+enum script_codes {
+ sm_roman, sm_japanese, sm_tradchinese, sm_korean,
+ sm_arabic, sm_hebrew, sm_greek, sm_cyrillic,
+ sm_rsymbol, sm_devanagari, sm_gurmukhi, sm_gujarati,
+ sm_oriya, sm_bengali, sm_tamil, sm_telugu,
+ sm_kannada, sm_malayalam, sm_sinhalese, sm_burmese,
+ sm_khmer, sm_thai, sm_laotian, sm_georgian,
+ sm_armenian, sm_simpchinese, sm_tibetan, sm_mongolian,
+ sm_geez, sm_slavic, sm_vietnamese, sm_sindhi,
+ sm_max };
+
+static unichar_t *macencodings[] = {
+ MacRomanEnc,
+ NULL/*Essentially SJIS*/,
+ NULL/*Essentially Big 5*/,
+ NULL/*Essentially Wansung*/,
+ arabic,
+ hebrew,
+ greek,
+ cyrillic,
+ NULL, /* rsymbol, whatever that is */
+ devanagari,
+/*10*/ gurmukhi,
+ gujarati,
+ NULL, /* oriya */
+ NULL, /* bengali */
+ NULL, /* Tamil */
+ NULL, /* Telugu */
+ NULL, /* Kannada */
+ NULL, /* Malayalam */
+ NULL, /* Sinhalese */
+ NULL, /* Burmese */
+/*20*/ NULL, /* Khmer */
+ thai,
+ NULL, /* Lao */
+ NULL, /* Georgian */
+ NULL, /* Armenian */
+/*25*/ NULL,/* SimpChinese, GB2312 offset by 0x8080 to 0xa1a1 */
+ NULL, /* Tibetan */
+ NULL, /* Mongolian */
+ NULL, /* Geex/Ethiopic */
+ centeuro, /* Baltic/Slavic */
+/*30*/ NULL, /* Vietnamese */
+ NULL, /* Extended Arabic for Sindhi */
+ NULL /* Uninterpretted */
+};
+
+/* The icelandic encoding also uses 0 (mac roman) encoding even though it's not*/
+/* The turkish encoding also uses 0 (mac roman) encoding even though it's not*/
+/* The croatian encoding also uses 0 (mac roman) encoding even though it's not*/
+/* The romanian encoding also uses 0 (mac roman) encoding even though it's not*/
+
+/* I've no idea what encoding code farsi uses, it isn't documented to be arabic 4, nor is it documented to have its own code */
+
+static uint8 _MacScriptFromLanguage[] = {
+ sm_roman, /* English */
+ sm_roman, /* French */
+ sm_roman, /* German */
+ sm_roman, /* Italian */
+ sm_roman, /* Dutch */
+ sm_roman, /* Swedish */
+ sm_roman, /* Spanish */
+ sm_roman, /* Danish */
+ sm_roman, /* Portuguese */
+ sm_roman, /* Norwegian */
+/*10*/ sm_hebrew, /* Hebrew */
+ sm_japanese, /* Japanese */
+ sm_arabic, /* Arabic */
+ sm_roman, /* Finnish */
+ sm_greek, /* Greek */
+ sm_roman, /* Icelandic */ /* Modified roman */
+ sm_roman, /* Maltese */
+ sm_roman, /* Turkish */ /* Modified roman */
+ sm_roman, /* Croatian */ /* Modified roman */
+ sm_tradchinese, /* Traditional Chinese */
+/*20*/ sm_arabic, /* Urdu (I assume arabic) */
+ sm_devanagari, /* Hindi (I assume) */
+ sm_thai, /* Thai */
+ sm_korean, /* Korean */
+ sm_slavic, /* Lithuanian */
+ sm_slavic, /* Polish */
+ sm_slavic, /* Hungarian */
+ sm_slavic, /* Estonian */
+ sm_slavic, /* Latvian */
+ sm_roman, /* Sami (Lappish) */
+/*30*/ sm_roman, /* Faroese (Icelandic) */ /* Modified roman */
+ sm_arabic, /* Farsi/Persian */ /* Modified Arabic */
+ sm_cyrillic, /* Russian */
+ sm_simpchinese, /* Simplified Chinese */
+ sm_roman, /* Flemish */
+ sm_roman, /* Irish Gaelic */
+ sm_roman, /* albanian (???) */
+ sm_roman, /* Romanian */ /* Modified roman */
+ sm_slavic, /* Czech */
+ sm_slavic, /* Slovak */
+/*40*/ sm_slavic, /* Slovenian */
+ sm_roman, /* Yiddish */
+ sm_cyrillic, /* Serbian */
+ sm_cyrillic, /* Macedonian */
+ sm_cyrillic, /* Bulgarian */
+ sm_cyrillic, /* Ukrainian */
+ sm_cyrillic, /* Byelorussian */
+ sm_cyrillic, /* Uzbek */
+ sm_cyrillic, /* Kazakh */
+ sm_cyrillic, /* Axerbaijani (Cyrillic) */
+/*50*/ sm_arabic, /* Axerbaijani (Arabic) */
+ sm_armenian, /* Armenian */
+ sm_georgian, /* Georgian */
+ sm_cyrillic, /* Moldavian */
+ sm_cyrillic, /* Kirghiz */
+ sm_cyrillic, /* Tajiki */
+ sm_cyrillic, /* Turkmen */
+ sm_mongolian, /* Mongolian (Mongolian) */
+ sm_cyrillic, /* Mongolian (cyrillic) */
+ sm_arabic, /* Pashto */
+/*60*/ sm_arabic, /* Kurdish */
+ sm_devanagari, /* Kashmiri (???) */
+ sm_sindhi, /* Sindhi */
+ sm_tibetan, /* Tibetan */
+ sm_tibetan, /* Nepali (???) */
+ sm_devanagari, /* Sanskrit */
+ sm_devanagari, /* Marathi */
+ sm_bengali, /* Bengali */
+ sm_bengali, /* Assamese (???) */
+ sm_gujarati, /* Gujarati */
+/*70*/ sm_gujarati, /* Punjabi (???) */
+ sm_oriya, /* Oriya */
+ sm_malayalam, /* Malayalam */
+ sm_kannada, /* Kannada */
+ sm_tamil, /* Tamil */
+ sm_telugu, /* Telugu */
+ sm_sinhalese, /* Sinhalese */
+ sm_burmese, /* Burmese */
+ sm_khmer, /* Khmer */
+ sm_laotian, /* Lao */
+/*80*/ sm_vietnamese, /* Vietnamese */
+ sm_arabic, /* Indonesian */
+ sm_roman, /* Tagalog (???) */
+ sm_roman, /* Malay (roman) */
+ sm_arabic, /* Malay (arabic) */
+ sm_roman, /* Amharic (???) */
+ sm_roman, /* Tigrinya (???) */
+ sm_roman, /* Galla (???) */
+ sm_roman, /* Somali (???) */
+ sm_roman, /* Swahili (???) */
+/*90*/ sm_roman, /* Kinyarwanda/Ruanda (???) */
+ sm_roman, /* Rundi (???) */
+ sm_roman, /* Nyanja/Chewa (???) */
+ sm_roman, /* Malagasy */
+/*94*/ sm_roman, /* Esperanto */
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+/*100*/ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+/*110*/ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+/*120*/ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+ 0xff,
+/*128*/ sm_roman, /* Welsh */
+ sm_roman, /* Basque */
+/*130*/ sm_roman, /* Catalan */
+ sm_roman, /* Latin */
+ sm_roman, /* Quechua (???) */
+ sm_roman, /* Guarani (???) */
+ sm_roman, /* Aymara (???) */
+ sm_cyrillic, /* Tatar (???) */
+ sm_cyrillic, /* Uighur (???) */
+ sm_cyrillic, /* Dzongkha (???) */
+ sm_roman, /* Javanese (roman) */
+ sm_roman, /* Sundanese (roman) */
+/*140*/ sm_roman, /* Galician */
+ sm_roman, /* Afrikaans */
+ sm_roman, /* Breton */
+ sm_roman, /* Inuktitut */
+ sm_roman, /* Scottish Gaelic */
+ sm_roman, /* Manx Gaelic */
+ sm_roman, /* Irish Gaelic (with dot) */
+ sm_roman, /* Tongan */
+ sm_greek, /* Greek (polytonic) */
+ sm_roman, /* Greenlandic */ /* Presumably icelandic? */
+/*150*/ sm_roman, /* Azebaijani (roman) */
+ 0xff
+};
+
+static uint16 _WinLangFromMac[] = {
+ 0x409, /* English */
+ 0x40c, /* French */
+ 0x407, /* German */
+ 0x410, /* Italian */
+ 0x413, /* Dutch */
+ 0x41d, /* Swedish */
+ 0x40a, /* Spanish */
+ 0x406, /* Danish */
+ 0x416, /* Portuguese */
+ 0x414, /* Norwegian */
+/*10*/ 0x40d, /* Hebrew */
+ 0x411, /* Japanese */
+ 0x401, /* Arabic */
+ 0x40b, /* Finnish */
+ 0x408, /* Greek */
+ 0x40f, /* Icelandic */
+ 0x43a, /* Maltese */
+ 0x41f, /* Turkish */
+ 0x41a, /* Croatian */
+ 0x404, /* Traditional Chinese */
+/*20*/ 0x420, /* Urdu */
+ 0x439, /* Hindi */
+ 0x41e, /* Thai */
+ 0x412, /* Korean */
+ 0x427, /* Lithuanian */
+ 0x415, /* Polish */
+ 0x40e, /* Hungarian */
+ 0x425, /* Estonian */
+ 0x426, /* Latvian */
+ 0x43b, /* Sami (Lappish) */
+/*30*/ 0x438, /* Faroese (Icelandic) */
+ 0x429, /* Farsi/Persian */
+ 0x419, /* Russian */
+ 0x804, /* Simplified Chinese */
+ 0x813, /* Flemish */
+ 0x43c, /* Irish Gaelic */
+ 0x41c, /* albanian */
+ 0x418, /* Romanian */
+ 0x405, /* Czech */
+ 0x41b, /* Slovak */
+/*40*/ 0x424, /* Slovenian */
+ 0x43d, /* Yiddish */
+ 0xc1a, /* Serbian */
+ 0x42f, /* Macedonian */
+ 0x402, /* Bulgarian */
+ 0x422, /* Ukrainian */
+ 0x423, /* Byelorussian */
+ 0x843, /* Uzbek */
+ 0x43f, /* Kazakh */
+ 0x42c, /* Azerbaijani (Cyrillic) */
+/*50*/ 0x82c, /* Azerbaijani (Arabic) */
+ 0x42b, /* Armenian */
+ 0x437, /* Georgian */
+ 0x818, /* Moldavian */
+ 0x440, /* Kirghiz */
+ 0x428, /* Tajiki */
+ 0x442, /* Turkmen */
+ 0x450, /* Mongolian (Mongolian) */
+ 0x850, /* Mongolian (cyrillic) */
+ 0x463, /* Pashto */
+/*60*/ 0xffff, /* Kurdish */
+ 0x860, /* Kashmiri */
+ 0x459, /* Sindhi */
+ 0xffff, /* Tibetan */
+ 0x461, /* Nepali */
+ 0x43b, /* Sanskrit */
+ 0x44e, /* Marathi */
+ 0x445, /* Bengali */
+ 0x44d, /* Assamese */
+ 0x447, /* Gujarati */
+/*70*/ 0x446, /* Punjabi */
+ 0x448, /* Oriya */
+ 0x44c, /* Malayalam */
+ 0x44b, /* Kannada */
+ 0x449, /* Tamil */
+ 0x44a, /* Telugu */
+ 0x45b, /* Sinhalese */
+ 0x455, /* Burmese */
+ 0x453, /* Khmer */
+ 0x454, /* Lao */
+/*80*/ 0x42a, /* Vietnamese */
+ 0x421, /* Indonesian */
+ 0x464, /* Tagalog */
+ 0x43e, /* Malay (latin) */
+ 0x83e, /* Malay (arabic) */
+ 0x45e, /* Amharic */
+ 0x473, /* Tigrinya */
+ 0x472, /* Galla, oromo, afan */
+ 0x477, /* Somali */
+ 0x441, /* Swahili */
+/*90*/ 0xffff, /* Kinyarwanda/Ruanda */
+ 0xffff, /* Rundi/Kirundi */
+ 0xffff, /* Nyanja/Chewa */
+ 0xffff, /* Malagasy */
+/*94*/ 0xffff, /* Esperanto */
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+/*100*/ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+/*110*/ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+/*120*/ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+ 0xffff,
+/*128*/ 0x452, /* Welsh */
+ 0x42d, /* Basque */
+/*130*/ 0x403, /* Catalan */
+ 0x476, /* Latin */
+ 0xffff, /* Quechua */
+ 0x474, /* Guarani */
+ 0xffff, /* Aymara */
+ 0x444, /* Tatar */
+ 0xffff, /* Uighur */
+ 0xffff, /* Dzongkha/Bhutani */
+ 0xffff, /* Javanese (roman) */
+ 0xffff, /* Sundanese (roman) */
+/*140*/ 0x456, /* Galician */
+ 0x436, /* Afrikaans */
+ 0xffff, /* Breton */
+ 0x45d, /* Inuktitut */
+ 0x43c, /* Scottish Gaelic */
+ 0xc3c, /* Manx Gaelic */
+ 0x83c, /* Irish Gaelic (with dot) */
+ 0xffff, /* Tongan */
+ 0xffff, /* Greek (polytonic) */
+ 0xffff, /* Greenlandic */ /* Presumably icelandic? */
+/*150*/ 0x42c, /* Azebaijani (roman) */
+ 0xffff
+};
+
+char *Utf8ToMacStr(const char *ustr,int macenc,int maclang) {
+ char *ret, *rpt;
+ const unichar_t *table;
+ int i, ch;
+
+ if ( ustr==NULL )
+return( NULL );
+
+ if ( macenc==sm_japanese || macenc==sm_korean || macenc==sm_tradchinese ||
+ macenc == sm_simpchinese ) {
+ Encoding *enc = FindOrMakeEncoding(macenc==sm_japanese ? "Sjis" :
+ macenc==sm_korean ? "EUC-KR" :
+ macenc==sm_tradchinese ? "Big5" :
+ "EUC-CN" );
+ iconv_t fromutf8;
+ ICONV_CONST char *in;
+ char *out;
+ size_t inlen, outlen;
+ if ( enc==NULL )
+return( NULL );
+ fromutf8 = iconv_open(enc->iconv_name!=NULL?enc->iconv_name:enc->enc_name,"UTF-8");
+ if ( fromutf8==(iconv_t) -1 || fromutf8==NULL )
+return( NULL );
+ in = (char *) ustr;
+ inlen = strlen(ustr);
+ outlen = sizeof(unichar_t)*strlen(ustr);
+ out = ret = malloc(outlen+sizeof(unichar_t));
+ iconv(fromutf8,&in,&inlen,&out,&outlen);
+ out[0] = out[1] = '\0';
+ out[2] = out[3] = '\0';
+ iconv_close(fromutf8);
+return( ret );
+ }
+
+ table = macencodings[macenc];
+
+ if ( maclang==15 /* Icelandic */ ||
+ maclang==30 /* Faroese */ ||
+ maclang==149 /* Greenlandic */ )
+ table = iceland;
+ else if ( maclang == 17 /* turkish */ )
+ table = turkish;
+ else if ( maclang == 18 /* croatian */ )
+ table = croatian;
+ else if ( maclang == 37 /* romanian */ )
+ table = romanian;
+ else if ( maclang == 31 /* Farsi/Persian */ )
+ table = farsi;
+
+ if ( table==NULL )
+return( NULL );
+
+ ret = malloc(strlen(ustr)+1);
+ for ( rpt = ret; (ch=utf8_ildb(&ustr)); ) {
+ for ( i=0; i<256; ++i )
+ if ( table[i]==ch ) {
+ *rpt++ = i;
+ break;
+ }
+ }
+ *rpt = '\0';
+return( ret );
+}
+
+uint8 MacEncFromMacLang(int maclang) {
+ if ( maclang<0 || maclang>=sizeof(_MacScriptFromLanguage)/sizeof(_MacScriptFromLanguage[0]))
+return( 0xff );
+
+return( _MacScriptFromLanguage[maclang] );
+}
+
+uint16 WinLangToMac(int winlang) {
+ int i;
+
+ for ( i=0; i<sizeof(_WinLangFromMac)/sizeof(_WinLangFromMac[0]); ++i )
+ if ( _WinLangFromMac[i] == winlang )
+return( i );
+
+ winlang &= 0xff;
+ for ( i=0; i<sizeof(_WinLangFromMac)/sizeof(_WinLangFromMac[0]); ++i )
+ if ( (_WinLangFromMac[i]&0xff) == winlang )
+return( i );
+
+return( 0xffff );
+}
+
+MacFeat *FindMacFeature(SplineFont *sf, int feat, MacFeat **secondary) {
+ MacFeat *from_f, *from_p;
+
+ for ( from_f = sf->features; from_f!=NULL && from_f->feature!=feat; from_f=from_f->next );
+ for ( from_p = default_mac_feature_map; from_p!=NULL && from_p->feature!=feat; from_p=from_p->next );
+ if ( from_f!=NULL ) {
+ if ( secondary!=NULL ) *secondary = from_p;
+return( from_f );
+ }
+ if ( secondary!=NULL ) *secondary = NULL;
+return( from_p );
+}
+
+struct macsetting *FindMacSetting(SplineFont *sf, int feat, int set,
+ struct macsetting **secondary) {
+ MacFeat *from_f, *from_p;
+ struct macsetting *s_f, *s_p;
+
+ if ( sf!=NULL )
+ for ( from_f = sf->features; from_f!=NULL && from_f->feature!=feat; from_f=from_f->next );
+ else
+ from_f = NULL;
+ for ( from_p = default_mac_feature_map; from_p!=NULL && from_p->feature!=feat; from_p=from_p->next );
+ s_f = s_p = NULL;
+ if ( from_f!=NULL )
+ for ( s_f = from_f->settings; s_f!=NULL && s_f->setting!=set; s_f=s_f->next );
+ if ( from_p!=NULL )
+ for ( s_p = from_p->settings; s_p!=NULL && s_p->setting!=set; s_p=s_p->next );
+ if ( s_f!=NULL ) {
+ if ( secondary!=NULL ) *secondary = s_p;
+return( s_f );
+ }
+ if ( secondary!=NULL ) *secondary = NULL;
+return( s_p );
+}
+
+struct macsettingname macfeat_otftag[] = {
+ { 1, 0, CHR('r','l','i','g') }, /* Required ligatures */
+ { 1, 2, CHR('l','i','g','a') }, /* Common ligatures */
+ { 1, 4, CHR('d','l','i','g') }, /* rare ligatures => discretionary */
+ /* { 1, 4, CHR('h','l','i','g') }, /\* rare ligatures => historic *\/ */
+ /* { 1, 4, CHR('a','l','i','g') }, /\* rare ligatures => ?ancient? *\/ */
+ /* 2, 1, partially connected cursive */
+ { 2, 2, CHR('i','s','o','l') }, /* Arabic forms */
+ { 2, 2, CHR('c','a','l','t') }, /* ??? */
+ /* 3, 1, all caps */
+ /* 3, 2, all lower */
+ { 3, 3, CHR('s','m','c','p') }, /* small caps */
+ /* 3, 4, initial caps */
+ /* 3, 5, initial caps, small caps */
+ { 4, 0, CHR('v','r','t','2') }, /* vertical forms => vertical rotation */
+ /* { 4, 0, CHR('v','k','n','a') }, /\* vertical forms => vertical kana *\/ */
+ { 6, 0, CHR('t','n','u','m') }, /* monospace numbers => Tabular numbers */
+ { 10, 1, CHR('s','u','p','s') }, /* superior vertical position => superscript */
+ { 10, 2, CHR('s','u','b','s') }, /* inferior vertical position => subscript */
+ /* { 10, 3, CHR('s','u','p','s') }, /\* ordinal vertical position => superscript *\/ */
+ { 11, 1, CHR('a','f','r','c') }, /* vertical fraction => fraction ligature */
+ { 11, 2, CHR('f','r','a','c') }, /* diagonal fraction => fraction ligature */
+ { 16, 1, CHR('o','r','n','m') }, /* vertical fraction => fraction ligature */
+ { 20, 0, CHR('t','r','a','d') }, /* traditional characters => traditional forms */
+ /* { 20, 0, CHR('t','n','a','m') }, /\* traditional characters => traditional names *\/ */
+ { 20, 1, CHR('s','m','p','l') }, /* simplified characters */
+ { 20, 2, CHR('j','p','7','8') }, /* jis 1978 */
+ { 20, 3, CHR('j','p','8','3') }, /* jis 1983 */
+ { 20, 4, CHR('j','p','9','0') }, /* jis 1990 */
+ { 21, 0, CHR('o','n','u','m') }, /* lower case number => old style numbers */
+ { 22, 0, CHR('p','w','i','d') }, /* proportional text => proportional widths */
+ { 22, 2, CHR('h','w','i','d') }, /* half width text => half widths */
+ { 22, 3, CHR('f','w','i','d') }, /* full width text => full widths */
+ { 25, 0, CHR('f','w','i','d') }, /* full width kana => full widths */
+ { 25, 1, CHR('p','w','i','d') }, /* proportional kana => proportional widths */
+ { 26, 0, CHR('f','w','i','d') }, /* full width ideograph => full widths */
+ { 26, 1, CHR('p','w','i','d') }, /* proportional ideograph => proportional widths */
+ { 103, 0, CHR('h','w','i','d') }, /* half width cjk roman => half widths */
+ { 103, 1, CHR('p','w','i','d') }, /* proportional cjk roman => proportional widths */
+ { 103, 3, CHR('f','w','i','d') }, /* full width cjk roman => full widths */
+ { 0, 0, 0 }
+}, *user_macfeat_otftag;
+
+static struct macname fs_names[] = {
+ { &fs_names[146], 0, 0, "All Typographic Features" },
+ { &fs_names[147], 0, 0, "All Type Features" },
+ { &fs_names[148], 0, 0, "Ligatures" },
+ { &fs_names[149], 0, 0, "Required Ligatures" },
+ { &fs_names[150], 0, 0, "Common Ligatures" },
+ { &fs_names[151], 0, 0, "Rare Ligatures" },
+ { &fs_names[152], 0, 0, "Logo Ligatures" },
+ { &fs_names[153], 0, 0, "Rebus Ligatures" },
+ { &fs_names[154], 0, 0, "Diphthong Ligatures" },
+ { &fs_names[155], 0, 0, "Squared Ligatures" },
+ { &fs_names[156], 0, 0, "Abbreviated Squared Ligatures" },
+ { &fs_names[157], 0, 0, "Cursive connection" },
+ { &fs_names[158], 0, 0, "Unconnected" },
+ { &fs_names[159], 0, 0, "Partially connected" },
+ { &fs_names[160], 0, 0, "Cursive" },
+ { &fs_names[161], 0, 0, "Letter Case" },
+ { &fs_names[162], 0, 0, "Upper & Lower Case" },
+ { &fs_names[163], 0, 0, "All Capitals" },
+ { &fs_names[164], 0, 0, "All Lower Case" },
+ { &fs_names[165], 0, 0, "Small Caps" },
+ { &fs_names[166], 0, 0, "Initial Caps" },
+ { &fs_names[167], 0, 0, "Initial and Small Caps" },
+ { &fs_names[168], 0, 0, "Vertical Substitution" },
+ { &fs_names[169], 0, 0, "Vertical Substitution" },
+ { &fs_names[170], 0, 0, "No Vertical Substitution" },
+ { &fs_names[171], 0, 0, "Linguistic Rearrangement" },
+ { &fs_names[172], 0, 0, "Linguistic Rearrangement" },
+ { &fs_names[173], 0, 0, "No Linguistic Rearrangement" },
+ { &fs_names[174], 0, 0, "Number Spacing" },
+ { &fs_names[175], 0, 0, "Monospaced Numbers" },
+ { &fs_names[176], 0, 0, "Proportional Numbers" },
+ { &fs_names[177], 0, 0, "Smart Swashes" },
+ { &fs_names[178], 0, 0, "Word Initial Swashes" },
+ { &fs_names[179], 0, 0, "Word Final Swashes" },
+ { &fs_names[180], 0, 0, "Line Initial Swashes" },
+ { &fs_names[181], 0, 0, "Line Final Swashes" },
+ { &fs_names[182], 0, 0, "Non-Final Swashes" },
+ { &fs_names[183], 0, 0, "Diacritics" },
+ { &fs_names[184], 0, 0, "Show Diacritics" },
+ { &fs_names[185], 0, 0, "Hide Diacritics" },
+ { &fs_names[186], 0, 0, "Decompose Diacritics" },
+ { &fs_names[187], 0, 0, "Vertical Position" },
+ { &fs_names[188], 0, 0, "Normal Vertical Position" },
+ { &fs_names[189], 0, 0, "Superiors" },
+ { &fs_names[190], 0, 0, "Inferiors" },
+ { &fs_names[191], 0, 0, "Ordinals" },
+ { &fs_names[192], 0, 0, "Fractions" },
+ { &fs_names[193], 0, 0, "No Fractions" },
+ { &fs_names[194], 0, 0, "Vertical Fractions" },
+ { &fs_names[195], 0, 0, "Diagonal Fractions" },
+ { &fs_names[196], 0, 0, "Overlapping Characters" },
+ { &fs_names[197], 0, 0, "Prevent Overlap" },
+ { &fs_names[198], 0, 0, "Allow Overlap" },
+ { &fs_names[199], 0, 0, "Typographic Extras" },
+ { &fs_names[200], 0, 0, "Hyphens to Em-dash" },
+ { &fs_names[201], 0, 0, "Hyphen to En-dash" },
+ { &fs_names[202], 0, 0, "Unslashed Zero" },
+ { &fs_names[203], 0, 0, "Form Interrobang" },
+ { &fs_names[204], 0, 0, "Smart Quotes" },
+ { &fs_names[205], 0, 0, "Periods to Ellipsis" },
+ { &fs_names[206], 0, 0, "Mathematical Extras" },
+ { &fs_names[207], 0, 0, "Hyphen to Minus" },
+ { &fs_names[208], 0, 0, "Asterisk to Multiply" },
+ { &fs_names[209], 0, 0, "Slash to Divide" },
+ { &fs_names[210], 0, 0, "Inequality Ligatures" },
+ { &fs_names[211], 0, 0, "Exponents" },
+ { &fs_names[212], 0, 0, "Ornament Sets" },
+ { &fs_names[213], 0, 0, "No Ornaments" },
+ { &fs_names[214], 0, 0, "Dingbats" },
+ { &fs_names[215], 0, 0, "Pi Characters" },
+ { &fs_names[216], 0, 0, "Fleurons" },
+ { &fs_names[217], 0, 0, "Decorative Borders" },
+ { &fs_names[218], 0, 0, "International Symbols" },
+ { &fs_names[219], 0, 0, "Math Symbols" },
+ { &fs_names[220], 0, 0, "Character Alternates" },
+ { &fs_names[221], 0, 0, "No Alternates" },
+ { &fs_names[222], 0, 0, "Alternate Characters" },
+ { &fs_names[223], 0, 0, "Other Alternates" },
+ { &fs_names[224], 0, 0, "Design Complexity" },
+ { &fs_names[225], 0, 0, "Design Level 1" },
+ { &fs_names[226], 0, 0, "Design Level 2" },
+ { &fs_names[227], 0, 0, "Design Level 3" },
+ { &fs_names[228], 0, 0, "Design Level 4" },
+ { &fs_names[229], 0, 0, "Design Level 5" },
+ { &fs_names[230], 0, 0, "Style Options" },
+ { &fs_names[231], 0, 0, "No Style Options" },
+ { &fs_names[232], 0, 0, "Display Text" },
+ { &fs_names[233], 0, 0, "Engraved Text" },
+ { &fs_names[234], 0, 0, "Illuminated Caps" },
+ { &fs_names[235], 0, 0, "Titling Caps" },
+ { &fs_names[236], 0, 0, "Tall Caps" },
+ { &fs_names[237], 0, 0, "Character Shape" },
+ { &fs_names[238], 0, 0, "Traditional" },
+ { &fs_names[239], 0, 0, "Simplified" },
+ { &fs_names[240], 0, 0, "jis 1978" },
+ { &fs_names[241], 0, 0, "jis 1983" },
+ { &fs_names[242], 0, 0, "jis 1990" },
+ { &fs_names[243], 0, 0, "Traditional Alt 1" },
+ { &fs_names[244], 0, 0, "Traditional Alt 2" },
+ { &fs_names[245], 0, 0, "Traditional Alt 3" },
+ { &fs_names[246], 0, 0, "Traditional Alt 4" },
+ { &fs_names[247], 0, 0, "Traditional Alt 5" },
+ { &fs_names[248], 0, 0, "Expert" },
+ { &fs_names[249], 0, 0, "Number Case" },
+ { &fs_names[250], 0, 0, "Lower Case Numbers" },
+ { &fs_names[251], 0, 0, "Upper Case Numbers" },
+ { &fs_names[252], 0, 0, "Text Spacing" },
+ { &fs_names[253], 0, 0, "Proportional" },
+ { &fs_names[254], 0, 0, "Monospace" },
+ { &fs_names[255], 0, 0, "Transliteration" },
+ { &fs_names[256], 0, 0, "No Transliteration" },
+ { &fs_names[257], 0, 0, "Hanja To Hangul" },
+ { &fs_names[258], 0, 0, "Hiragana to Katakana" },
+ { &fs_names[259], 0, 0, "Katakana to Hiragana" },
+ { &fs_names[260], 0, 0, "Katakana to Roman" },
+ { &fs_names[261], 0, 0, "Roman to Hiragana" },
+ { &fs_names[262], 0, 0, "Roman to Katakana" },
+ { &fs_names[263], 0, 0, "Hanja To Hangul Alt 1" },
+ { &fs_names[264], 0, 0, "Hanja To Hangul Alt 2" },
+ { &fs_names[265], 0, 0, "Hanja To Hangul Alt 3" },
+ { &fs_names[266], 0, 0, "Annotation" },
+ { &fs_names[267], 0, 0, "No Annotation" },
+ { &fs_names[268], 0, 0, "Box Annotation" },
+ { &fs_names[269], 0, 0, "Rounded Box Annotation" },
+ { &fs_names[270], 0, 0, "Circle Annotation" },
+ { &fs_names[271], 0, 0, "Inverted Circle Annotation" },
+ { &fs_names[272], 0, 0, "Parenthesized Annotation" },
+ { &fs_names[273], 0, 0, "Period Annotation" },
+ { &fs_names[274], 0, 0, "Roman Numeral Annotation" },
+ { &fs_names[275], 0, 0, "Diamond Annotation" },
+ { &fs_names[276], 0, 0, "Kana Spacing" },
+ { &fs_names[277], 0, 0, "Full-Width" },
+ { &fs_names[278], 0, 0, "Proportional" },
+ { &fs_names[136], 0, 0, "Ideographic Spacing" },
+ { &fs_names[137], 0, 0, "Full-Width" },
+ { &fs_names[138], 0, 0, "Proportional" },
+ { &fs_names[279], 0, 0, "Ideographic Spacing" },
+ { &fs_names[280], 0, 0, "Full-Width" },
+ { &fs_names[281], 0, 0, "Proportional" },
+ { &fs_names[282], 0, 0, "CJK Roman Spacing" },
+ { &fs_names[283], 0, 0, "Half-Width" },
+ { &fs_names[284], 0, 0, "Proportional" },
+ { &fs_names[285], 0, 0, "Default" },
+ { &fs_names[286], 0, 0, "Full-Width" },
+ { &fs_names[287], 0, 0, "Unicode Decomposition" },
+ { &fs_names[288], 0, 0, "Canonical Decomposition" },
+ { &fs_names[289], 0, 1, "Fonctions typographiques" },
+ { &fs_names[290], 0, 1, "Toutes fonctions typographiques" },
+ { &fs_names[291], 0, 1, "Ligatures" },
+ { &fs_names[397], 0, 1, "Ligatures Requises" },
+ { &fs_names[292], 0, 1, "Ligatures Usuelles" },
+ { &fs_names[293], 0, 1, "Ligatures Rares" },
+ { &fs_names[400], 0, 1, "Ligatures Logos" },
+ { &fs_names[401], 0, 1, "Ligatures R\216bus" },
+ { &fs_names[334], 0, 1, "Ligatures Diphtongues" },
+ { &fs_names[403], 0, 1, "Ligatures Carr\216es" },
+ { &fs_names[404], 0, 1, "Ligatures Carr\216es Abr\217g\216es" },
+ { &fs_names[405], 0, 1, "Connection des Cursives" },
+ { &fs_names[406], 0, 1, "Non connect\216es" },
+ { &fs_names[407], 0, 1, "Partiellement connect\216es" },
+ { &fs_names[408], 0, 1, "Pleinement connect\216es" },
+ { &fs_names[409], 0, 1, "Casse" },
+ { &fs_names[295], 0, 1, "Majuscules & Minuscules" },
+ { &fs_names[296], 0, 1, "Tout Majuscule" },
+ { &fs_names[412], 0, 1, "Tout Minuscule" },
+ { &fs_names[297], 0, 1, "Petites Majuscules" },
+ { &fs_names[414], 0, 1, "Initiales Majuscules" },
+ { &fs_names[415], 0, 1, "Initiales + Petites Majuscules" },
+ { &fs_names[416], 0, 1, "Substitution Verticale" },
+ { &fs_names[417], 0, 1, "Substitution vertical" },
+ { &fs_names[418], 0, 1, "Aucun Substitution vertical" },
+ { &fs_names[419], 0, 1, "R\216arrangement Linguistique" },
+ { &fs_names[420], 0, 1, "Avec R\216arrangement Linguistique" },
+ { &fs_names[421], 0, 1, "Pas de R\216arrangement Linguistique" },
+ { &fs_names[422], 0, 1, "Espacement des chiffres" },
+ { &fs_names[299], 0, 1, "Chiffres de largeur fixe" },
+ { &fs_names[300], 0, 1, "Chiffres Proportionnels" },
+ { &fs_names[301], 0, 1, "Parafes" },
+ { &fs_names[304], 0, 1, "Parafes en d\216but de mot" },
+ { &fs_names[305], 0, 1, "Parafes en fin de mot" },
+ { &fs_names[303], 0, 1, "Parafes en d\216but de ligne" },
+ { &fs_names[302], 0, 1, "Parafes en fin de ligne" },
+ { &fs_names[306], 0, 1, "Autres Parafes" },
+ { &fs_names[431], 0, 1, "Signes Diacritiques" },
+ { &fs_names[339], 0, 1, "Montrer les Signes Diacritiques" },
+ { &fs_names[433], 0, 1, "Cacher les Signes Diacritiques" },
+ { &fs_names[337], 0, 1, "D\216composer les Signes Diacritiques" },
+ { &fs_names[435], 0, 1, "Position Verticale" },
+ { &fs_names[309], 0, 1, "Position Verticale Normale" },
+ { &fs_names[308], 0, 1, "Position Sup\216rieure" },
+ { &fs_names[310], 0, 1, "Position Inf\216rieure" },
+ { &fs_names[311], 0, 1, "Position Sup\216rieure Contextuelle (Num\216rique)" },
+ { &fs_names[440], 0, 1, "Fractions" },
+ { &fs_names[313], 0, 1, "Pas de Fractions" },
+ { &fs_names[442], 0, 1, "Fractions Verticales" },
+ { &fs_names[314], 0, 1, "Fractions en Diagonale" },
+ { &fs_names[444], 0, 1, "Chevauchement des caract\217res" },
+ { &fs_names[316], 0, 1, "\203viter le chevauchement" },
+ { &fs_names[446], 0, 1, "Laisser le Chevauchement" },
+ { &fs_names[317], 0, 1, "Extras Typographiques" },
+ { &fs_names[448], 0, 1, "Tirets vers Tiret Large" },
+ { &fs_names[449], 0, 1, "Tiret vers Tiret Moyen" },
+ { &fs_names[450], 0, 1, "Z\216ro non Barr\216" },
+ { &fs_names[451], 0, 1, "?! vers InterroExclam" },
+ { &fs_names[336], 0, 1, "Apostrophes Intelligentes" },
+ { &fs_names[453], 0, 1, "... vers Ellipse" },
+ { &fs_names[318], 0, 1, "Extras Math\216matiques" },
+ { &fs_names[319], 0, 1, "Tiret vers Moins" },
+ { &fs_names[320], 0, 1, "\203toile vers Multipli\216" },
+ { &fs_names[457], 0, 1, "Barre pench\216e vers Divis\216" },
+ { &fs_names[458], 0, 1, "Ligatures pour In\216galit\216s" },
+ { &fs_names[459], 0, 1, "Passage en Exposant" },
+ { &fs_names[460], 0, 1, "Ensembles Ornementaux" },
+ { &fs_names[322], 0, 1, "Pas d'Ornements" },
+ { &fs_names[462], 0, 1, "Dingbats" },
+ { &fs_names[463], 0, 1, "Symboles Sp\216cifiques \210 un Domaine" },
+ { &fs_names[323], 0, 1, "Fleurons" },
+ { &fs_names[465], 0, 1, "Bordures D\216coratives" },
+ { &fs_names[466], 0, 1, "Symboles Internationaux" },
+ { &fs_names[467], 0, 1, "Symboles Math\216matiques" },
+ { &fs_names[468], 0, 1, "Caract\217res Alternatifs" },
+ { &fs_names[325], 0, 1, "Sans Caract\217res Alternatifs" },
+ { &fs_names[470], 0, 1, "Avec Caract\217res Alternatifs" },
+ { &fs_names[471], 0, 1, "Autres Caract\217res Alternatifs" },
+ { &fs_names[472], 0, 1, "Complexit\216 du Dessin" },
+ { &fs_names[327], 0, 1, "Dessin Niveau 1" },
+ { &fs_names[328], 0, 1, "Dessin Niveau 2" },
+ { &fs_names[329], 0, 1, "Dessin Niveau 3" },
+ { &fs_names[330], 0, 1, "Dessin Niveau 4" },
+ { &fs_names[477], 0, 1, "Dessin Niveau 5" },
+ { &fs_names[478], 0, 1, "Options de Style" },
+ { &fs_names[479], 0, 1, "Texte Ordinaire" },
+ { &fs_names[480], 0, 1, "Texte Majeur" },
+ { &fs_names[481], 0, 1, "Texte en Relief" },
+ { &fs_names[482], 0, 1, "Majuscules Enlumin\216es" },
+ { &fs_names[483], 0, 1, "Majuscules de Titrage" },
+ { &fs_names[484], 0, 1, "Majuscules avec Descendantes" },
+ { &fs_names[485], 0, 1, "Forme des Caract\217res" },
+ { &fs_names[486], 0, 1, "Traditionelle" },
+ { &fs_names[487], 0, 1, "Simplifi\216e" },
+ { &fs_names[488], 0, 1, "jis 1978" },
+ { &fs_names[489], 0, 1, "jis 1983" },
+ { &fs_names[490], 0, 1, "jis 1990" },
+ { &fs_names[491], 0, 1, "Traditionelle Alt 1" },
+ { &fs_names[492], 0, 1, "Traditionelle Alt 2" },
+ { &fs_names[493], 0, 1, "Traditionelle Alt 3" },
+ { &fs_names[494], 0, 1, "Traditionelle Alt 4" },
+ { &fs_names[495], 0, 1, "Traditionelle Alt 5" },
+ { &fs_names[496], 0, 1, "Expert" },
+ { &fs_names[497], 0, 1, "Style des Chiffres" },
+ { &fs_names[332], 0, 1, "Chiffres Anciens (bas de casse)" },
+ { &fs_names[333], 0, 1, "Chiffres Conventionnels (alignants)" },
+ { &fs_names[500], 0, 1, "Espacement du Texte" },
+ { &fs_names[501], 0, 1, "Proportionel" },
+ { &fs_names[502], 0, 1, "Fixe" },
+ { &fs_names[503], 0, 1, "Translitt\216ration" },
+ { &fs_names[504], 0, 1, "Sans Translitt\216ration" },
+ { &fs_names[505], 0, 1, "Hanja vers Hangul" },
+ { &fs_names[506], 0, 1, "Hiragana vers Katakana" },
+ { &fs_names[507], 0, 1, "Katakana vers Hiragana" },
+ { &fs_names[508], 0, 1, "Katakana vers Roman" },
+ { &fs_names[509], 0, 1, "Roman vers Hiragana" },
+ { &fs_names[510], 0, 1, "Roman vers Katakana" },
+ { &fs_names[511], 0, 1, "Hanja vers Hangul Alt 1" },
+ { &fs_names[512], 0, 1, "Hanja vers Hangul Alt 2" },
+ { &fs_names[513], 0, 1, "Hanja vers Hangul Alt 3" },
+ { &fs_names[514], 0, 1, "Annotations" },
+ { &fs_names[515], 0, 1, "Sans Annotations" },
+ { &fs_names[516], 0, 1, "Annotations Encadr\216es" },
+ { &fs_names[517], 0, 1, "Annotations en Cadres arrondis" },
+ { &fs_names[518], 0, 1, "Annotations dans des Cercles" },
+ { &fs_names[519], 0, 1, "Annotations dans des Cercles inverses" },
+ { &fs_names[520], 0, 1, "Annotations Parenth\217s\216es" },
+ { &fs_names[521], 0, 1, "Annotations avec des ." },
+ { &fs_names[522], 0, 1, "Annotations en Chiffres Romains" },
+ { &fs_names[523], 0, 1, "Annotations Diamant" },
+ { &fs_names[524], 0, 1, "Espacement Kana" },
+ { &fs_names[525], 0, 1, "Pleine Taille" },
+ { &fs_names[526], 0, 1, "Proportionnel" },
+ { &fs_names[527], 0, 1, "Espacement des Id\216ogrammes" },
+ { &fs_names[528], 0, 1, "Pleine Taille" },
+ { &fs_names[529], 0, 1, "Proportionnel" },
+ { &fs_names[533], 0, 1, "Espacement des CJK romains" },
+ { &fs_names[534], 0, 1, "Pleine Taille" },
+ { &fs_names[535], 0, 1, "Proportionnel" },
+ { &fs_names[536], 0, 1, "Romains par D\216faut" },
+ { &fs_names[537], 0, 1, "Romains Pleine Taille" },
+ { &fs_names[340], 0, 1, "D\216composition Unicode" },
+ { &fs_names[341], 0, 1, "D\216composition Canonique" },
+ { &fs_names[342], 0, 2, "Alle typografischen M\232glichkeiten" },
+ { &fs_names[343], 0, 2, "Alle Auszeichnungsarten" },
+ { &fs_names[344], 0, 2, "Ligaturen" },
+ { &fs_names[346], 0, 2, "Normale Ligaturen" },
+ { &fs_names[345], 0, 2, "Seltene Ligaturen" },
+ { &fs_names[347], 0, 2, "Schreibweise" },
+ { &fs_names[348], 0, 2, "Gro\247/Klein" },
+ { &fs_names[349], 0, 2, "Gro\247" },
+ { &fs_names[350], 0, 2, "Kapit\212lchen" },
+ { &fs_names[351], 0, 2, "Ziffernabst\212nde" },
+ { &fs_names[352], 0, 2, "Tabellenziffern" },
+ { &fs_names[353], 0, 2, "Proportionalziffern" },
+ { &fs_names[354], 0, 2, "Zierbuchstabe" },
+ { &fs_names[355], 0, 2, "Zierbuchstabe Zeilenende" },
+ { &fs_names[356], 0, 2, "Zierbuchstabe Zeilenanfang" },
+ { &fs_names[357], 0, 2, "Zierbuchstabe Wortanfang" },
+ { &fs_names[358], 0, 2, "Zierbuchstabe Wortende" },
+ { &fs_names[359], 0, 2, "Zierbuchstabe Beliebig" },
+ { &fs_names[360], 0, 2, "Hoch-/Tiefstellen" },
+ { &fs_names[361], 0, 2, "Hochgestellt" },
+ { &fs_names[362], 0, 2, "Normal" },
+ { &fs_names[363], 0, 2, "Tiefgestellt" },
+ { &fs_names[364], 0, 2, "Ordnungszahlen" },
+ { &fs_names[365], 0, 2, "Br\237che" },
+ { &fs_names[367], 0, 2, "Kein Bruche" },
+ { &fs_names[366], 0, 2, "Diagonaler Bruch" },
+ { &fs_names[368], 0, 2, "\206berlappen" },
+ { &fs_names[369], 0, 2, "\206berlappen vermeiden" },
+ { &fs_names[335], 0, 2, "Typographische Extras" },
+ { &fs_names[370], 0, 2, "Mathematische Sonderzeichen" },
+ { &fs_names[371], 0, 2, "Minuszeichen" },
+ { &fs_names[372], 0, 2, "Malzeichen" },
+ { &fs_names[373], 0, 2, "Sonderzeichen" },
+ { &fs_names[374], 0, 2, "Keine Sonderzeichen" },
+ { &fs_names[375], 0, 2, "Pflanzenornamente" },
+ { &fs_names[376], 0, 2, "Alternative Zeichen" },
+ { &fs_names[377], 0, 2, "Keine Alternativ-Figuren" },
+ { &fs_names[378], 0, 2, "Modifikationsgrad" },
+ { &fs_names[379], 0, 2, "Design Stufe 1" },
+ { &fs_names[380], 0, 2, "Design Stufe 2" },
+ { &fs_names[381], 0, 2, "Design Stufe 3" },
+ { &fs_names[382], 0, 2, "Design Stufe 4" },
+ { &fs_names[383], 0, 2, "Zahlendarstellung" },
+ { &fs_names[384], 0, 2, "Medi\276val-Ziffern" },
+ { &fs_names[385], 0, 2, "Normale Ziffern" },
+ { &fs_names[386], 0, 2, "Diphtong Ligaturen" },
+ { &fs_names[387], 0, 2, "Typografische Extras" },
+ { &fs_names[388], 0, 2, "Ersetzen mit geschwungenen Anf\237hrungszeichen" },
+ { &fs_names[389], 0, 2, "Keine Ver\212nderung" },
+ { &fs_names[390], 0, 2, "Diakritische Zeichen" },
+ { &fs_names[391], 0, 2, "Diakritische Zeichen zeigen" },
+ { &fs_names[392], 0, 2, "In Unicode zerlegen" },
+ { &fs_names[393], 0, 2, "anerkannte Komposition" },
+ { &fs_names[394], 0, 3, "Funzioni Tipografiche" },
+ { &fs_names[395], 0, 3, "Tutte le Funzioni" },
+ { &fs_names[396], 0, 3, "Legature" },
+ { &fs_names[399], 0, 3, "Legature Rare" },
+ { &fs_names[398], 0, 3, "Legature pi\235 Comuni" },
+ { NULL, 0, 3, "Maiuscolo o Minuscolo" },
+ { &fs_names[410], 0, 3, "Maiuscolo & minuscolo" },
+ { &fs_names[411], 0, 3, "Tutto in Maiuscolo" },
+ { &fs_names[413], 0, 3, "Maiuscoletto" },
+ { NULL, 0, 3, "Spaziatura numeri" },
+ { &fs_names[423], 0, 3, "Monospaziata" },
+ { &fs_names[424], 0, 3, "Proporzionale" },
+ { &fs_names[425], 0, 3, "Lettere Ornate" },
+ { &fs_names[429], 0, 3, "Fine Riga" },
+ { &fs_names[428], 0, 3, "Inizio Riga" },
+ { &fs_names[426], 0, 3, "All'inizio" },
+ { &fs_names[427], 0, 3, "Alla Fine" },
+ { &fs_names[430], 0, 3, "All'interno" },
+ { NULL, 0, 3, "Posizione Verticale" },
+ { &fs_names[437], 0, 3, "Apice" },
+ { &fs_names[436], 0, 3, "Posizione Normale" },
+ { &fs_names[438], 0, 3, "Pedice" },
+ { &fs_names[439], 0, 3, "Ordinali" },
+ { NULL, 0, 3, "Frazioni" },
+ { &fs_names[443], 0, 3, "Frazioni Diagonali" },
+ { &fs_names[441], 0, 3, "Nessuna Frazione" },
+ { NULL, 0, 3, "Caratteri Sovrapposti" },
+ { &fs_names[445], 0, 3, "Nessuna Sovrapposizione" },
+ { &fs_names[454], 0, 3, "Conversioni Matematiche" },
+ { &fs_names[455], 0, 3, "Trattino per Sottrazione" },
+ { &fs_names[456], 0, 3, "Asterisco per Moltiplicazione" },
+ { NULL, 0, 3, "Impostazione Ornamenti" },
+ { &fs_names[461], 0, 3, "Nessun Ornamento" },
+ { &fs_names[464], 0, 3, "Fleurons" },
+ { NULL, 0, 3, "Caratteri Alternativi" },
+ { &fs_names[469], 0, 3, "Nessuna alternativa" },
+ { NULL, 0, 3, "Design Complexity" },
+ { &fs_names[473], 0, 3, "Livello 1" },
+ { &fs_names[474], 0, 3, "Livello 2" },
+ { &fs_names[475], 0, 3, "Livello 3" },
+ { &fs_names[476], 0, 3, "Livello 4" },
+ { NULL, 0, 3, "Posizione Numeri" },
+ { &fs_names[498], 0, 3, "Sopra la Linea Base" },
+ { &fs_names[499], 0, 3, "Tradizionale" },
+ { &fs_names[402], 0, 3, "Legature dittonghi" },
+ { &fs_names[447], 0, 3, "Extra tipografici" },
+ { &fs_names[452], 0, 3, "Virgolette eleganti" },
+ { &fs_names[434], 0, 3, "Nessuna modifica" },
+ { NULL, 0, 3, "Diacritici" },
+ { &fs_names[432], 0, 3, "Mostra diacritici" },
+ { &fs_names[538], 0, 3, "Scomposizione unicode" },
+ { &fs_names[539], 0, 3, "Composizione canonica" },
+ { NULL, 0, 4, "Alle typografische kenmerken" },
+ { NULL, 0, 4, "Alle typekenmerken" },
+ { NULL, 0, 4, "Ligaturen" },
+ { NULL, 0, 4, "Vereiste ligaturen" },
+ { NULL, 0, 4, "Gemeenschappelijke Ligaturen" },
+ { NULL, 0, 4, "Zeldzame ligaturen" },
+ { NULL, 0, 4, "Logoligaturen" },
+ { NULL, 0, 4, "Rebusligaturen" },
+ { NULL, 0, 4, "Tweeklankligaturen" },
+ { NULL, 0, 4, "Vierkante ligaturen" },
+ { NULL, 0, 4, "Afgekorte vierkante ligatures" },
+ { NULL, 0, 4, "Cursieve verbinding" },
+ { NULL, 0, 4, "Niet verbonden" },
+ { NULL, 0, 4, "Gedeeltelijk verbonden" },
+ { NULL, 0, 4, "Cursief" },
+ { NULL, 0, 4, "Hoofd/kleine letters" },
+ { NULL, 0, 4, "Hoofd- en kleine letters" },
+ { NULL, 0, 4, "Alles in hoofdletters" },
+ { NULL, 0, 4, "Alles in kleine letters" },
+ { NULL, 0, 4, "Kleine hoofdletters" },
+ { NULL, 0, 4, "Eerste hoofdletters" },
+ { NULL, 0, 4, "Eerste en kleine hoofdletters" },
+ { NULL, 0, 4, "Verticale vervanging" },
+ { NULL, 0, 4, "Verticale vervanging" },
+ { NULL, 0, 4, "Geen verticale vervanging" },
+ { NULL, 0, 4, "Taalkundige herschikking" },
+ { NULL, 0, 4, "Taalkundige herschikking" },
+ { NULL, 0, 4, "Geen taalkundige herschikking" },
+ { NULL, 0, 4, "Nummerafstanden" },
+ { NULL, 0, 4, "Vaste nummerafstanden" },
+ { NULL, 0, 4, "Proportionele nummers" },
+ { NULL, 0, 4, "Slimme versieringingen" },
+ { NULL, 0, 4, "Woordbegin-versieringingen" },
+ { NULL, 0, 4, "Woordeinde-versieringingen" },
+ { NULL, 0, 4, "Regelbegin-versieringingen" },
+ { NULL, 0, 4, "Regeleinde-versieringingen" },
+ { NULL, 0, 4, "Niet-einde-versieringingen" },
+ { NULL, 0, 4, "Accenten" },
+ { NULL, 0, 4, "Accenten tonen" },
+ { NULL, 0, 4, "Accenten verbergen" },
+ { NULL, 0, 4, "Accenten ontleden" },
+ { NULL, 0, 4, "Verticale positie" },
+ { NULL, 0, 4, "Normale verticale positie" },
+ { NULL, 0, 4, "Superieuren" },
+ { NULL, 0, 4, "Inferieuren" },
+ { NULL, 0, 4, "Ordinalen" },
+ { NULL, 0, 4, "Breuken" },
+ { NULL, 0, 4, "Geen breuken" },
+ { NULL, 0, 4, "Verticale breuken" },
+ { NULL, 0, 4, "Diagonale breuken" },
+ { NULL, 0, 4, "Overlappende tekens" },
+ { NULL, 0, 4, "Overlap voorkomen" },
+ { NULL, 0, 4, "Overlap toestaan" },
+ { NULL, 0, 4, "Typografische extras" },
+ { NULL, 0, 4, "Koppelteken naar em-streep" },
+ { NULL, 0, 4, "Koppelteken naar en-streepje" },
+ { NULL, 0, 4, "Nul zonder schuine streep" },
+ { NULL, 0, 4, "Vorm interrobang" },
+ { NULL, 0, 4, "Slimme aanhalingstekens" },
+ { NULL, 0, 4, "Punten naar ellipsen" },
+ { NULL, 0, 4, "Wiskundige extras" },
+ { NULL, 0, 4, "Koppelteken naar minteken" },
+ { NULL, 0, 4, "Sterretje naar multiplicatieteken" },
+ { NULL, 0, 4, "Schuine streep naar deelteken" },
+ { NULL, 0, 4, "Ongelijkheidsligaturen" },
+ { NULL, 0, 4, "Exponenten aan" },
+ { NULL, 0, 4, "Ornamentenverzamelingen" },
+ { NULL, 0, 4, "Geen ornamenten" },
+ { NULL, 0, 4, "Dingbats" },
+ { NULL, 0, 4, "Pi-tekens" },
+ { NULL, 0, 4, "Fleurons" },
+ { NULL, 0, 4, "Decoratieve randen" },
+ { NULL, 0, 4, "Internationale symbolen" },
+ { NULL, 0, 4, "Wiskundige Symbolen" },
+ { NULL, 0, 4, "Tekenalternatieven" },
+ { NULL, 0, 4, "Geen alternatieven" },
+ { NULL, 0, 4, "Alternatieve tekens" },
+ { NULL, 0, 4, "Andere alternatieven" },
+ { NULL, 0, 4, "Ontwepcomplexiteit" },
+ { NULL, 0, 4, "Ontwerpniveau 1" },
+ { NULL, 0, 4, "Ontwerpniveau 2" },
+ { NULL, 0, 4, "Ontwerpniveau 3" },
+ { NULL, 0, 4, "Ontwerpniveau 4" },
+ { NULL, 0, 4, "Ontwerpniveau 5" },
+ { NULL, 0, 4, "Stijlopties" },
+ { NULL, 0, 4, "Geen stijl ptions" },
+ { NULL, 0, 4, "Tekst tonen" },
+ { NULL, 0, 4, "Gegraveerde tekst" },
+ { NULL, 0, 4, "Uitgelichte koppen" },
+ { NULL, 0, 4, "Titelkoppen" },
+ { NULL, 0, 4, "Eindkoppen" },
+ { NULL, 0, 4, "Tekenvorm" },
+ { NULL, 0, 4, "Traditioneel" },
+ { NULL, 0, 4, "Vereenvoudigd" },
+ { NULL, 0, 4, "jis 1978" },
+ { NULL, 0, 4, "jis 1983" },
+ { NULL, 0, 4, "jis 1990" },
+ { NULL, 0, 4, "Traditioneel Alt 1" },
+ { NULL, 0, 4, "Traditioneel Alt 2" },
+ { NULL, 0, 4, "Traditioneel Alt 3" },
+ { NULL, 0, 4, "Traditioneel Alt 4" },
+ { NULL, 0, 4, "Traditioneel Alt 5" },
+ { NULL, 0, 4, "Expert" },
+ { NULL, 0, 4, "Nummerhoogte" },
+ { NULL, 0, 4, "Kleine nummers" },
+ { NULL, 0, 4, "Grote nummers" },
+ { NULL, 0, 4, "TekstspatiQring" },
+ { NULL, 0, 4, "Proportioneel" },
+ { NULL, 0, 4, "Gelijk gespatieerd" },
+ { NULL, 0, 4, "Transliteratie" },
+ { NULL, 0, 4, "Geen transliteratie" },
+ { NULL, 0, 4, "Hanja naar Hangul" },
+ { NULL, 0, 4, "Hiragana naar Katakana" },
+ { NULL, 0, 4, "Katakana naar Hiragana" },
+ { NULL, 0, 4, "Katakana naar Romeins" },
+ { NULL, 0, 4, "Romeins naar Hiragana" },
+ { NULL, 0, 4, "Romeins naar Katakana" },
+ { NULL, 0, 4, "Hanja naar Hangul Alt 1" },
+ { NULL, 0, 4, "Hanja naar Hangul Alt 2" },
+ { NULL, 0, 4, "Hanja naar Hangul Alt 3" },
+ { NULL, 0, 4, "Annotatie" },
+ { NULL, 0, 4, "Geen annotatie" },
+ { NULL, 0, 4, "Vierkantannotatie" },
+ { NULL, 0, 4, "Ronde-vierkantannotatie" },
+ { NULL, 0, 4, "Cirkelannotatie" },
+ { NULL, 0, 4, "Omgekeerde cirkelannotatie" },
+ { NULL, 0, 4, "Aanhalingstekenannotatie" },
+ { NULL, 0, 4, "Puntannotatie" },
+ { NULL, 0, 4, "Romeinse-cijferannotatie" },
+ { NULL, 0, 4, "Diamantannotatie" },
+ { NULL, 0, 4, "Kana spatiQring" },
+ { NULL, 0, 4, "Volledige breedte" },
+ { NULL, 0, 4, "Proportioneel" },
+ { &fs_names[530], 0, 4, "Ideographische spatiQring" },
+ { &fs_names[531], 0, 4, "Volledige breedte" },
+ { &fs_names[532], 0, 4, "Proportioneel" },
+ { NULL, 0, 4, "IdeograafspatiQring" },
+ { NULL, 0, 4, "Volledige breedte" },
+ { NULL, 0, 4, "Proportioneel" },
+ { NULL, 0, 4, "CJK Romeinse spatiQring" },
+ { NULL, 0, 4, "Halve breedte" },
+ { NULL, 0, 4, "Proportioneel" },
+ { NULL, 0, 4, "Default" },
+ { NULL, 0, 4, "Volledige breedte" },
+ { NULL, 0, 4, "Unicodeontleding" },
+ { NULL, 0, 4, "Canonieke ontleding" },
+ { NULL, 0, 0, NULL }
+};
+
+static struct macsetting fs_settings[] = {
+ { NULL, 0, 0, &fs_names[1], 0 },
+ { NULL, 14, 0, &fs_names[10], 0 },
+ { &fs_settings[1], 12, 0, &fs_names[9], 0 },
+ { &fs_settings[2], 10, 0, &fs_names[8], 0 },
+ { &fs_settings[3], 8, 0, &fs_names[7], 0 },
+ { &fs_settings[4], 6, 0, &fs_names[6], 0 },
+ { &fs_settings[5], 4, 0, &fs_names[5], 0 },
+ { &fs_settings[6], 2, 0, &fs_names[4], 1 },
+ { &fs_settings[7], 0, 0, &fs_names[3], 1 },
+ { NULL, 2, 0, &fs_names[14], 0 },
+ { &fs_settings[9], 1, 0, &fs_names[13], 0 },
+ { &fs_settings[10], 0, 0, &fs_names[12], 1 },
+ { NULL, 5, 0, &fs_names[21], 0 },
+ { &fs_settings[12], 4, 0, &fs_names[20], 0 },
+ { &fs_settings[13], 3, 0, &fs_names[19], 0 },
+ { &fs_settings[14], 2, 0, &fs_names[18], 0 },
+ { &fs_settings[15], 1, 0, &fs_names[17], 0 },
+ { &fs_settings[16], 0, 0, &fs_names[16], 1 },
+ { NULL, 1, 0, &fs_names[24], 0 },
+ { &fs_settings[18], 0, 0, &fs_names[23], 1 },
+ { NULL, 1, 0, &fs_names[27], 0 },
+ { &fs_settings[20], 0, 0, &fs_names[26], 1 },
+ { NULL, 1, 0, &fs_names[30], 0 },
+ { &fs_settings[22], 0, 0, &fs_names[29], 1 },
+ { NULL, 8, 0, &fs_names[36], 0 },
+ { &fs_settings[24], 6, 0, &fs_names[35], 0 },
+ { &fs_settings[25], 4, 0, &fs_names[34], 0 },
+ { &fs_settings[26], 2, 0, &fs_names[33], 0 },
+ { &fs_settings[27], 0, 0, &fs_names[32], 0 },
+ { NULL, 2, 0, &fs_names[40], 0 },
+ { &fs_settings[29], 1, 0, &fs_names[39], 0 },
+ { &fs_settings[30], 0, 0, &fs_names[38], 1 },
+ { NULL, 3, 0, &fs_names[45], 0 },
+ { &fs_settings[32], 2, 0, &fs_names[44], 0 },
+ { &fs_settings[33], 1, 0, &fs_names[43], 0 },
+ { &fs_settings[34], 0, 0, &fs_names[42], 1 },
+ { NULL, 2, 0, &fs_names[49], 0 },
+ { &fs_settings[36], 1, 0, &fs_names[48], 0 },
+ { &fs_settings[37], 0, 0, &fs_names[47], 1 },
+ { NULL, 1, 0, &fs_names[52], 0 },
+ { &fs_settings[39], 0, 0, &fs_names[51], 1 },
+ { NULL, 10, 0, &fs_names[59], 0 },
+ { &fs_settings[41], 8, 0, &fs_names[58], 0 },
+ { &fs_settings[42], 6, 0, &fs_names[57], 0 },
+ { &fs_settings[43], 4, 0, &fs_names[56], 0 },
+ { &fs_settings[44], 2, 0, &fs_names[55], 0 },
+ { &fs_settings[45], 0, 0, &fs_names[54], 0 },
+ { NULL, 8, 0, &fs_names[65], 0 },
+ { &fs_settings[47], 6, 0, &fs_names[64], 0 },
+ { &fs_settings[48], 4, 0, &fs_names[63], 0 },
+ { &fs_settings[49], 2, 0, &fs_names[62], 0 },
+ { &fs_settings[50], 0, 0, &fs_names[61], 0 },
+ { NULL, 6, 0, &fs_names[73], 0 },
+ { &fs_settings[52], 5, 0, &fs_names[72], 0 },
+ { &fs_settings[53], 4, 0, &fs_names[71], 0 },
+ { &fs_settings[54], 3, 0, &fs_names[70], 0 },
+ { &fs_settings[55], 2, 0, &fs_names[69], 0 },
+ { &fs_settings[56], 1, 0, &fs_names[68], 0 },
+ { &fs_settings[57], 0, 0, &fs_names[67], 1 },
+ { NULL, 2, 0, &fs_names[77], 0 },
+ { &fs_settings[59], 1, 0, &fs_names[76], 0 },
+ { &fs_settings[60], 0, 0, &fs_names[75], 1 },
+ { NULL, 4, 0, &fs_names[83], 0 },
+ { &fs_settings[62], 3, 0, &fs_names[82], 0 },
+ { &fs_settings[63], 2, 0, &fs_names[81], 0 },
+ { &fs_settings[64], 1, 0, &fs_names[80], 0 },
+ { &fs_settings[65], 0, 0, &fs_names[79], 1 },
+ { NULL, 5, 0, &fs_names[90], 0 },
+ { &fs_settings[67], 4, 0, &fs_names[89], 0 },
+ { &fs_settings[68], 3, 0, &fs_names[88], 0 },
+ { &fs_settings[69], 2, 0, &fs_names[87], 0 },
+ { &fs_settings[70], 1, 0, &fs_names[86], 0 },
+ { &fs_settings[71], 0, 0, &fs_names[85], 1 },
+ { NULL, 10, 0, &fs_names[102], 0 },
+ { &fs_settings[73], 9, 0, &fs_names[101], 0 },
+ { &fs_settings[74], 8, 0, &fs_names[100], 0 },
+ { &fs_settings[75], 7, 0, &fs_names[99], 0 },
+ { &fs_settings[76], 6, 0, &fs_names[98], 0 },
+ { &fs_settings[77], 5, 0, &fs_names[97], 0 },
+ { &fs_settings[78], 4, 0, &fs_names[96], 0 },
+ { &fs_settings[79], 3, 0, &fs_names[95], 0 },
+ { &fs_settings[80], 2, 0, &fs_names[94], 0 },
+ { &fs_settings[81], 1, 0, &fs_names[93], 0 },
+ { &fs_settings[82], 0, 0, &fs_names[92], 1 },
+ { NULL, 1, 0, &fs_names[105], 1 },
+ { &fs_settings[84], 0, 0, &fs_names[104], 0 },
+ { NULL, 1, 0, &fs_names[108], 0 },
+ { &fs_settings[86], 0, 0, &fs_names[107], 1 },
+ { NULL, 9, 0, &fs_names[119], 0 },
+ { &fs_settings[88], 8, 0, &fs_names[118], 0 },
+ { &fs_settings[89], 7, 0, &fs_names[117], 0 },
+ { &fs_settings[90], 6, 0, &fs_names[116], 0 },
+ { &fs_settings[91], 5, 0, &fs_names[115], 0 },
+ { &fs_settings[92], 4, 0, &fs_names[114], 0 },
+ { &fs_settings[93], 3, 0, &fs_names[113], 0 },
+ { &fs_settings[94], 2, 0, &fs_names[112], 0 },
+ { &fs_settings[95], 1, 0, &fs_names[111], 0 },
+ { &fs_settings[96], 0, 0, &fs_names[110], 1 },
+ { NULL, 8, 0, &fs_names[129], 0 },
+ { &fs_settings[98], 7, 0, &fs_names[128], 0 },
+ { &fs_settings[99], 6, 0, &fs_names[127], 0 },
+ { &fs_settings[100], 5, 0, &fs_names[126], 0 },
+ { &fs_settings[101], 4, 0, &fs_names[125], 0 },
+ { &fs_settings[102], 3, 0, &fs_names[124], 0 },
+ { &fs_settings[103], 2, 0, &fs_names[123], 0 },
+ { &fs_settings[104], 1, 0, &fs_names[122], 0 },
+ { &fs_settings[105], 0, 0, &fs_names[121], 1 },
+ { NULL, 1, 0, &fs_names[132], 0 },
+ { &fs_settings[107], 0, 0, &fs_names[131], 1 },
+ { NULL, 1, 0, &fs_names[135], 0 },
+ { &fs_settings[109], 0, 0, &fs_names[134], 1 },
+ { NULL, 0, 0, &fs_names[145], 0 },
+ { NULL, 3, 0, &fs_names[143], 0 },
+ { &fs_settings[112], 2, 0, &fs_names[142], 0 },
+ { &fs_settings[113], 1, 0, &fs_names[141], 0 },
+ { &fs_settings[114], 0, 0, &fs_names[140], 1 },
+ { NULL, 0, 0, NULL, 0 }
+};
+
+static MacFeat fs_features[] = {
+ { NULL, 103, 1, 0, 0, &fs_names[139], &fs_settings[115] },
+ { &fs_features[0], 27, 0, 0, 0, &fs_names[144], &fs_settings[111] },
+ { &fs_features[1], 26, 1, 0, 0, &fs_names[133], &fs_settings[110] },
+ { &fs_features[2], 25, 1, 0, 0, &fs_names[130], &fs_settings[108] },
+ { &fs_features[3], 24, 1, 0, 0, &fs_names[120], &fs_settings[106] },
+ { &fs_features[4], 23, 1, 0, 0, &fs_names[109], &fs_settings[97] },
+ { &fs_features[5], 22, 1, 0, 0, &fs_names[106], &fs_settings[87] },
+ { &fs_features[6], 21, 1, 1, 0, &fs_names[103], &fs_settings[85] },
+ { &fs_features[7], 20, 1, 0, 0, &fs_names[91], &fs_settings[83] },
+ { &fs_features[8], 19, 1, 0, 0, &fs_names[84], &fs_settings[72] },
+ { &fs_features[9], 18, 1, 0, 0, &fs_names[78], &fs_settings[66] },
+ { &fs_features[10], 17, 1, 0, 0, &fs_names[74], &fs_settings[61] },
+ { &fs_features[11], 16, 1, 0, 0, &fs_names[66], &fs_settings[58] },
+ { &fs_features[12], 15, 0, 0, 0, &fs_names[60], &fs_settings[51] },
+ { &fs_features[13], 14, 0, 0, 0, &fs_names[53], &fs_settings[46] },
+ { &fs_features[14], 13, 1, 0, 0, &fs_names[50], &fs_settings[40] },
+ { &fs_features[15], 11, 1, 0, 0, &fs_names[46], &fs_settings[38] },
+ { &fs_features[16], 10, 1, 0, 0, &fs_names[41], &fs_settings[35] },
+ { &fs_features[17], 9, 1, 0, 0, &fs_names[37], &fs_settings[31] },
+ { &fs_features[18], 8, 0, 0, 0, &fs_names[31], &fs_settings[28] },
+ { &fs_features[19], 6, 1, 0, 0, &fs_names[28], &fs_settings[23] },
+ { &fs_features[20], 5, 1, 0, 0, &fs_names[25], &fs_settings[21] },
+ { &fs_features[21], 4, 1, 0, 0, &fs_names[22], &fs_settings[19] },
+ { &fs_features[22], 3, 1, 0, 0, &fs_names[15], &fs_settings[17] },
+ { &fs_features[23], 2, 1, 0, 0, &fs_names[11], &fs_settings[11] },
+ { &fs_features[24], 1, 0, 0, 0, &fs_names[2], &fs_settings[8] },
+ { &fs_features[25], 0, 0, 0, 0, &fs_names[0], &fs_settings[0] },
+ { NULL, 0, 0, 0, 0, NULL, NULL }
+};
+
+MacFeat *default_mac_feature_map = &fs_features[26],
+ *builtin_mac_feature_map=&fs_features[26],
+ *user_mac_feature_map;
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/mathconstants.c b/dviware/dvisvgm/libs/ff-woff/fontforge/mathconstants.c
new file mode 100644
index 0000000000..5becd180f0
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/mathconstants.c
@@ -0,0 +1,99 @@
+/* Copyright (C) 2007-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stddef.h>
+#include "fontforgevw.h"
+#ifdef __need_size_t
+/* This is a bug on the mac, someone defines this and leaves it defined */
+/* that means when I load stddef.h it only defines size_t and doesn't */
+/* do offset_of, which is what I need */
+# undef __need_size_t
+#endif
+
+#define MCD(name) { #name, offsetof(struct MATH,name), -1 }
+#define MCDD(name,devtab_name) { #name, offsetof(struct MATH,name), offsetof(struct MATH,devtab_name) }
+
+struct math_constants_descriptor math_constants_descriptor[] = {
+ MCD(ScriptPercentScaleDown),
+ MCD(ScriptScriptPercentScaleDown),
+ MCD(DelimitedSubFormulaMinHeight),
+ MCD(DisplayOperatorMinHeight),
+ MCDD(MathLeading,MathLeading_adjust),
+ MCDD(AxisHeight,AxisHeight_adjust),
+ MCDD(AccentBaseHeight,AccentBaseHeight_adjust),
+ MCDD(FlattenedAccentBaseHeight,FlattenedAccentBaseHeight_adjust),
+ MCDD(SubscriptShiftDown,SubscriptShiftDown_adjust),
+ MCDD(SubscriptTopMax,SubscriptTopMax_adjust),
+ MCDD(SubscriptBaselineDropMin,SubscriptBaselineDropMin_adjust),
+ MCDD(SuperscriptShiftUp,SuperscriptShiftUp_adjust),
+ MCDD(SuperscriptShiftUpCramped,SuperscriptShiftUpCramped_adjust),
+ MCDD(SuperscriptBottomMin,SuperscriptBottomMin_adjust),
+ MCDD(SuperscriptBaselineDropMax,SuperscriptBaselineDropMax_adjust),
+ MCDD(SubSuperscriptGapMin,SubSuperscriptGapMin_adjust),
+ MCDD(SuperscriptBottomMaxWithSubscript,SuperscriptBottomMaxWithSubscript_adjust),
+ MCDD(SpaceAfterScript,SpaceAfterScript_adjust),
+ MCDD(UpperLimitGapMin,UpperLimitGapMin_adjust),
+ MCDD(UpperLimitBaselineRiseMin,UpperLimitBaselineRiseMin_adjust),
+ MCDD(LowerLimitGapMin,LowerLimitGapMin_adjust),
+ MCDD(LowerLimitBaselineDropMin,LowerLimitBaselineDropMin_adjust),
+ MCDD(StackTopShiftUp,StackTopShiftUp_adjust),
+ MCDD(StackTopDisplayStyleShiftUp,StackTopDisplayStyleShiftUp_adjust),
+ MCDD(StackBottomShiftDown,StackBottomShiftDown_adjust),
+ MCDD(StackBottomDisplayStyleShiftDown,StackBottomDisplayStyleShiftDown_adjust),
+ MCDD(StackGapMin,StackGapMin_adjust),
+ MCDD(StackDisplayStyleGapMin,StackDisplayStyleGapMin_adjust),
+ MCDD(StretchStackTopShiftUp,StretchStackTopShiftUp_adjust),
+ MCDD(StretchStackBottomShiftDown,StretchStackBottomShiftDown_adjust),
+ MCDD(StretchStackGapAboveMin,StretchStackGapAboveMin_adjust),
+ MCDD(StretchStackGapBelowMin,StretchStackGapBelowMin_adjust),
+ MCDD(FractionNumeratorShiftUp,FractionNumeratorShiftUp_adjust),
+ MCDD(FractionNumeratorDisplayStyleShiftUp,FractionNumeratorDisplayStyleShiftUp_adjust),
+ MCDD(FractionDenominatorShiftDown,FractionDenominatorShiftDown_adjust),
+ MCDD(FractionDenominatorDisplayStyleShiftDown,FractionDenominatorDisplayStyleShiftDown_adjust),
+ MCDD(FractionNumeratorGapMin,FractionNumeratorGapMin_adjust),
+ MCDD(FractionNumeratorDisplayStyleGapMin,FractionNumeratorDisplayStyleGapMin_adjust),
+ MCDD(FractionRuleThickness,FractionRuleThickness_adjust),
+ MCDD(FractionDenominatorGapMin,FractionDenominatorGapMin_adjust),
+ MCDD(FractionDenominatorDisplayStyleGapMin,FractionDenominatorDisplayStyleGapMin_adjust),
+ MCDD(SkewedFractionHorizontalGap,SkewedFractionHorizontalGap_adjust),
+ MCDD(SkewedFractionVerticalGap,SkewedFractionVerticalGap_adjust),
+ MCDD(OverbarVerticalGap,OverbarVerticalGap_adjust),
+ MCDD(OverbarRuleThickness,OverbarRuleThickness_adjust),
+ MCDD(OverbarExtraAscender,OverbarExtraAscender_adjust),
+ MCDD(UnderbarVerticalGap,UnderbarVerticalGap_adjust),
+ MCDD(UnderbarRuleThickness,UnderbarRuleThickness_adjust),
+ MCDD(UnderbarExtraDescender,UnderbarExtraDescender_adjust),
+ MCDD(RadicalVerticalGap,RadicalVerticalGap_adjust),
+ MCDD(RadicalDisplayStyleVerticalGap,RadicalDisplayStyleVerticalGap_adjust),
+ MCDD(RadicalRuleThickness,RadicalRuleThickness_adjust),
+ MCDD(RadicalExtraAscender,RadicalExtraAscender_adjust),
+ MCDD(RadicalKernBeforeDegree,RadicalKernBeforeDegree_adjust),
+ MCDD(RadicalKernAfterDegree,RadicalKernAfterDegree_adjust),
+ MCD(RadicalDegreeBottomRaisePercent),
+ MCD(MinConnectorOverlap),
+ MATH_CONSTANTS_DESCRIPTOR_EMPTY
+};
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/memory.c b/dviware/dvisvgm/libs/ff-woff/fontforge/memory.c
new file mode 100644
index 0000000000..cbe850140c
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/memory.c
@@ -0,0 +1,51 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <string.h>
+#include "ustring.h"
+
+char *copy(const char *str) {
+ return str ? strdup(str) : NULL;
+}
+
+char *copyn(const char *str,long n) {
+ /**
+ * MIQ: Note that there is at least one site that relies on
+ * copyn copying up to n bytes including embedded nulls.
+ * So using strndup() doesn't provide the same outcomes
+ * to that code.
+ * https://github.com/fontforge/fontforge/issues/1239
+ */
+ char *ret;
+ if ( str==NULL )
+ return( NULL );
+
+ ret = (char *) malloc(n+1);
+ memcpy(ret,str,n);
+ ret[n]='\0';
+ return( ret );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/mm.c b/dviware/dvisvgm/libs/ff-woff/fontforge/mm.c
new file mode 100644
index 0000000000..4de1319bfa
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/mm.c
@@ -0,0 +1,307 @@
+/* Copyright (C) 2003-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "ttf.h"
+
+/******************************************************************************/
+/* MM Validation */
+/******************************************************************************/
+
+static int ContourCount(SplineChar *sc) {
+ SplineSet *spl;
+ int i;
+
+ for ( spl=sc->layers[ly_fore].splines, i=0; spl!=NULL; spl=spl->next, ++i );
+return( i );
+}
+
+static int ContourPtMatch(SplineChar *sc1, SplineChar *sc2) {
+ SplineSet *spl1, *spl2;
+ SplinePoint *sp1, *sp2;
+
+ for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
+ for ( sp1=spl1->first, sp2 = spl2->first; ; ) {
+ if ( sp1->nonextcp!=sp2->nonextcp || sp1->noprevcp!=sp2->noprevcp )
+return( false );
+ if ( sp1->next==NULL || sp2->next==NULL ) {
+ if ( sp1->next==NULL && sp2->next==NULL )
+ break;
+return( false );
+ }
+ sp1 = sp1->next->to; sp2 = sp2->next->to;
+ if ( sp1==spl1->first || sp2==spl2->first ) {
+ if ( sp1==spl1->first && sp2==spl2->first )
+ break;
+return( false );
+ }
+ }
+ }
+return( true );
+}
+
+static int ContourDirMatch(SplineChar *sc1, SplineChar *sc2) {
+ SplineSet *spl1, *spl2;
+
+ for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
+ if ( SplinePointListIsClockwise(spl1)!=SplinePointListIsClockwise(spl2) )
+return( false );
+ }
+return( true );
+}
+
+static int ContourHintMaskMatch(SplineChar *sc1, SplineChar *sc2) {
+ SplineSet *spl1, *spl2;
+ SplinePoint *sp1, *sp2;
+
+ for ( spl1=sc1->layers[ly_fore].splines, spl2=sc2->layers[ly_fore].splines; spl1!=NULL && spl2!=NULL; spl1=spl1->next, spl2=spl2->next ) {
+ for ( sp1=spl1->first, sp2 = spl2->first; ; ) {
+ if ( (sp1->hintmask==NULL)!=(sp2->hintmask==NULL) )
+return( false );
+ if ( sp1->hintmask!=NULL && memcmp(sp1->hintmask,sp2->hintmask,sizeof(HintMask))!=0 )
+return( false );
+ if ( sp1->next==NULL || sp2->next==NULL ) {
+ if ( sp1->next==NULL && sp2->next==NULL )
+ break;
+return( false );
+ }
+ sp1 = sp1->next->to; sp2 = sp2->next->to;
+ if ( sp1==spl1->first || sp2==spl2->first ) {
+ if ( sp1==spl1->first && sp2==spl2->first )
+ break;
+return( false );
+ }
+ }
+ }
+return( true );
+}
+
+static int RefMatch(SplineChar *sc1, SplineChar *sc2) {
+ RefChar *ref1, *ref2;
+ /* I don't require the reference list to be ordered */
+
+ for ( ref1=sc1->layers[ly_fore].refs, ref2=sc2->layers[ly_fore].refs; ref1!=NULL && ref2!=NULL; ref1=ref1->next, ref2=ref2->next )
+ ref2->checked = false;
+ if ( ref1!=NULL || ref2!=NULL )
+return( false );
+
+ for ( ref1=sc1->layers[ly_fore].refs; ref1!=NULL ; ref1=ref1->next ) {
+ for ( ref2=sc2->layers[ly_fore].refs; ref2!=NULL ; ref2=ref2->next ) {
+ if ( ref2->sc->orig_pos==ref1->sc->orig_pos && !ref2->checked )
+ break;
+ }
+ if ( ref2==NULL )
+return( false );
+ ref2->checked = true;
+ }
+
+return( true );
+}
+
+static int RefTransformsMatch(SplineChar *sc1, SplineChar *sc2) {
+ /* Apple only provides a means to change the translation of a reference */
+ /* so if rotation, skewing, scaling, etc. differ then we can't deal with */
+ /* it. */
+ RefChar *r1 = sc1->layers[ly_fore].refs;
+ RefChar *r2 = sc2->layers[ly_fore].refs;
+
+ while ( r1!=NULL && r2!=NULL ) {
+ if ( r1->transform[0]!=r2->transform[0] ||
+ r1->transform[1]!=r2->transform[1] ||
+ r1->transform[2]!=r2->transform[2] ||
+ r1->transform[3]!=r2->transform[3] )
+return( false );
+ r1 = r1->next;
+ r2 = r2->next;
+ }
+return( true );
+}
+
+static int HintsMatch(StemInfo *h1,StemInfo *h2) {
+ while ( h1!=NULL && h2!=NULL ) {
+ h1 = h1->next;
+ h2 = h2->next;
+ }
+return ( h1==NULL && h2==NULL );
+}
+
+static int KernsMatch(SplineChar *sc1, SplineChar *sc2) {
+ /* I don't require the kern list to be ordered */
+ /* Only interested in kerns that go into afm files (ie. no kernclasses) */
+ KernPair *k1, *k2;
+
+ for ( k1=sc1->kerns, k2=sc2->kerns; k1!=NULL && k2!=NULL; k1=k1->next, k2=k2->next )
+ k2->kcid = false;
+ if ( k1!=NULL || k2!=NULL )
+return( false );
+
+ for ( k1=sc1->kerns; k1!=NULL ; k1=k1->next ) {
+ for ( k2=sc2->kerns; k2!=NULL ; k2=k2->next ) {
+ if ( k2->sc->orig_pos==k1->sc->orig_pos && !k2->kcid )
+ break;
+ }
+ if ( k2==NULL )
+return( false );
+ k2->kcid = true;
+ }
+
+return( true );
+}
+
+static int ArrayCount(char *val) {
+ char *end;
+ int cnt;
+
+ if ( val==NULL )
+return( 0 );
+ while ( *val==' ' ) ++val;
+ if ( *val=='[' ) ++val;
+ cnt=0;
+ while ( *val ) {
+ strtod(val,&end);
+ if ( val==end )
+ break;
+ ++cnt;
+ val = end;
+ }
+return( cnt );
+}
+
+int MMValid(MMSet *mm,int complain) {
+ int i, j;
+ SplineFont *sf;
+ static char *arrnames[] = { "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "StemSnapH", "StemSnapV", NULL };
+
+ if ( mm==NULL )
+return( false );
+
+ for ( i=0; i<mm->instance_count; ++i )
+ if ( mm->instances[i]->layers[ly_fore].order2 != mm->apple ) {
+return( false );
+ }
+
+ sf = mm->apple ? mm->normal : mm->instances[0];
+
+ if ( !mm->apple && PSDictHasEntry(sf->private,"ForceBold")!=NULL &&
+ PSDictHasEntry(mm->normal->private,"ForceBoldThreshold")==NULL) {
+return( false );
+ }
+
+ for ( j=mm->apple ? 0 : 1; j<mm->instance_count; ++j ) {
+ if ( sf->glyphcnt!=mm->instances[j]->glyphcnt ) {
+return( false );
+ } else if ( sf->layers[ly_fore].order2!=mm->instances[j]->layers[ly_fore].order2 ) {
+return( false );
+ }
+ if ( !mm->apple ) {
+ if ( PSDictHasEntry(mm->instances[j]->private,"ForceBold")!=NULL &&
+ PSDictHasEntry(mm->normal->private,"ForceBoldThreshold")==NULL) {
+return( false );
+ }
+ for ( i=0; arrnames[i]!=NULL; ++i ) {
+ if ( ArrayCount(PSDictHasEntry(mm->instances[j]->private,arrnames[i]))!=
+ ArrayCount(PSDictHasEntry(sf->private,arrnames[i])) ) {
+return( false );
+ }
+ }
+ }
+ }
+
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ for ( j=mm->apple?0:1; j<mm->instance_count; ++j ) {
+ if ( SCWorthOutputting(sf->glyphs[i])!=SCWorthOutputting(mm->instances[j]->glyphs[i]) ) {
+return( false );
+ }
+ }
+ if ( SCWorthOutputting(sf->glyphs[i]) ) {
+ if ( mm->apple && sf->glyphs[i]->layers[ly_fore].refs!=NULL && sf->glyphs[i]->layers[ly_fore].splines!=NULL ) {
+return( false );
+ }
+ for ( j=mm->apple?0:1; j<mm->instance_count; ++j ) {
+ if ( mm->apple && mm->instances[j]->glyphs[i]->layers[ly_fore].refs!=NULL &&
+ mm->instances[j]->glyphs[i]->layers[ly_fore].splines!=NULL ) {
+return( false );
+ }
+ if ( ContourCount(sf->glyphs[i])!=ContourCount(mm->instances[j]->glyphs[i])) {
+return( false );
+ } else if ( !mm->apple && !ContourPtMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ } else if ( !ContourDirMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ } else if ( !RefMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ } else if ( mm->apple && !RefTransformsMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ } else if ( !mm->apple && !KernsMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ }
+ }
+ if ( mm->apple && !ContourPtNumMatch(mm,i)) {
+return( false );
+ }
+ if ( !mm->apple ) {
+ for ( j=1; j<mm->instance_count; ++j ) {
+ if ( !HintsMatch(sf->glyphs[i]->hstem,mm->instances[j]->glyphs[i]->hstem)) {
+return( false );
+ } else if ( !HintsMatch(sf->glyphs[i]->vstem,mm->instances[j]->glyphs[i]->vstem)) {
+return( false );
+ }
+ }
+ for ( j=1; j<mm->instance_count; ++j ) {
+ if ( !ContourHintMaskMatch(sf->glyphs[i],mm->instances[j]->glyphs[i])) {
+return( false );
+ }
+ }
+ }
+ }
+ }
+ if ( mm->apple ) {
+ struct ttf_table *cvt;
+ for ( cvt = mm->normal->ttf_tables; cvt!=NULL && cvt->tag!=CHR('c','v','t',' '); cvt=cvt->next );
+ if ( cvt==NULL ) {
+ for ( j=0; j<mm->instance_count; ++j ) {
+ if ( mm->instances[j]->ttf_tables!=NULL ) {
+return( false );
+ }
+ }
+ } else {
+ /* Not all instances are required to have cvts, but any that do */
+ /* must be the same size */
+ for ( j=0; j<mm->instance_count; ++j ) {
+ if ( mm->instances[j]->ttf_tables!=NULL &&
+ (mm->instances[j]->ttf_tables->next!=NULL ||
+ mm->instances[j]->ttf_tables->tag!=CHR('c','v','t',' '))) {
+return( false );
+ }
+ if ( mm->instances[j]->ttf_tables!=NULL &&
+ mm->instances[j]->ttf_tables->len!=cvt->len ) {
+return( false );
+ }
+ }
+ }
+ }
+return( true );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/namehash.h b/dviware/dvisvgm/libs/ff-woff/fontforge/namehash.h
new file mode 100644
index 0000000000..925019e295
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/namehash.h
@@ -0,0 +1,61 @@
+/* Copyright (C) 2009-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _NAMEHASH_H
+# define _NAMEHASH_H
+
+#define GN_HSIZE 257
+
+struct glyphnamebucket {
+ SplineChar *sc;
+ struct glyphnamebucket *next;
+ const char *name;
+};
+
+struct glyphnamehash {
+ struct glyphnamebucket *table[GN_HSIZE];
+};
+
+#ifndef __GNUC__
+# define __inline__
+#endif
+
+static __inline__ int hashname(const char *pt) {
+ int val = 0;
+
+ while ( *pt ) {
+ val = (val<<3)|((val>>29)&0x7);
+ val ^= (unsigned char)(*pt-'!');
+ pt++;
+ }
+ val ^= (val>>16);
+ val &= 0xffff;
+ val %= GN_HSIZE;
+return( val );
+}
+
+extern void __GlyphHashFree(struct glyphnamehash *hash);
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/namelist.c b/dviware/dvisvgm/libs/ff-woff/fontforge/namelist.c
new file mode 100644
index 0000000000..3a6e5b252c
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/namelist.c
@@ -0,0 +1,19965 @@
+/* -*- coding: utf-8 -*- */
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fontforgevw.h"
+#include "namehash.h"
+#include "tables.h"
+
+int recognizePUA = false;
+
+#ifndef _MSC_VER
+static
+#endif
+struct psaltnames {
+ const char *name;
+ int unicode;
+ int provenance; /* 1=> Adobe PUA, 2=>AMS PUA, 3=>TeX */
+} psaltnames[];
+
+static NameList agl_sans, agl, agl_nf, adobepua, greeksc, tex, ams;
+NameList *namelist_for_new_fonts = &agl_nf;
+
+/* Adobe's standard names are wrong for: */
+/* 0x2206 is named Delta, 0x394 should be */
+/* 0x2126 is named Omega, 0x3A9 should be */
+/* 0x00b5 is named mu, 0x3BC should be */
+/* The following have been corrected removed from AGL For New Fonts: */
+/* 0x0162 is named Tcommaaccent, 0x21A should be */
+/* 0x0163 is named tcommaaccent, 0x21B should be */
+/* 0xf6be is named dotlessj, 0x237 should be */
+
+static int psnamesinited=false;
+#define HASH_SIZE 257
+struct psbucket { const char *name; int uni; struct psbucket *prev; } *psbuckets[HASH_SIZE];
+
+static void psaddbucket(const char *name, int uni) {
+ int hash = hashname(name);
+ struct psbucket *buck = calloc(1,sizeof(struct psbucket));
+
+ buck->name = name;
+ buck->uni = uni;
+ buck->prev = psbuckets[hash];
+ psbuckets[hash] = buck;
+}
+
+static void NameListHash(NameList *nl) {
+ int i,j,k;
+ for ( i=0; i<17; ++i ) if ( nl->unicode[i]!=NULL ) {
+ for ( j=0; j<256; ++j ) if ( nl->unicode[i][j]!=NULL ) {
+ for ( k=0; k<256; ++k ) if ( nl->unicode[i][j][k]!=NULL )
+ psaddbucket(nl->unicode[i][j][k],(i<<16)|(j<<8)|k );
+ }
+ }
+}
+
+static void psinitnames(void) {
+ int i;
+ NameList *nl;
+
+ agl.next = &agl_nf;
+ agl_nf.next = &agl_sans;
+ agl_sans.next = &adobepua;
+ adobepua.next = &greeksc;
+ greeksc.next = &tex;
+ tex.next = &ams;
+
+ for ( i=0; psaltnames[i].name!=NULL ; ++i )
+ psaddbucket(psaltnames[i].name,psaltnames[i].unicode);
+ for ( nl=&agl; nl!=NULL; nl=nl->next )
+ NameListHash(nl);
+ psnamesinited = true;
+}
+
+
+int UniFromName(const char *name,enum uni_interp interp,Encoding *encname) {
+ int i = -1;
+ char *end;
+ struct psbucket *buck;
+ int _recognizePUA = recognizePUA;
+
+ if ( strncmp(name,"uni",3)==0 ) {
+ i = strtol(name+3,&end,16);
+ if ( *end || end-name!=7 ) /* uniXXXXXXXX means a ligature of uniXXXX and uniXXXX */
+ i = -1;
+ _recognizePUA = true;
+ } else if ( (name[0]=='U' || name[0]=='u') && name[1]=='+' &&
+ (strlen(name)==6 || strlen(name)==7)) {
+ /* Unifont uses this convention */
+ i = strtol(name+2,&end,16);
+ if ( *end )
+ i = -1;
+ _recognizePUA = true;
+ } else if ( name[0]=='u' && strlen(name)>=5 ) {
+ i = strtol(name+1,&end,16);
+ if ( *end )
+ i = -1;
+ else if ( encname!=NULL && !encname->is_unicodefull &&
+ (interp==ui_ams || interp==ui_trad_chinese)) {
+ int j;
+ const int *pua = interp==ui_ams ? amspua : cns14pua;
+ for ( j=0xf8ff-0xe000; j>=0; --j )
+ if ( pua[j]==i ) {
+ i = j+0xe000;
+ break;
+ }
+ }
+ if ( i!=-1 )
+ _recognizePUA = true;
+ } else if ( name[0]!='\0' && name[1]=='\0' )
+ i = ((unsigned char *) name)[0];
+ if ( i==-1 ) {
+ if ( !psnamesinited )
+ psinitnames();
+ for ( buck = psbuckets[hashname(name)]; buck!=NULL; buck=buck->prev )
+ if ( strcmp(buck->name,name)==0 )
+ break;
+ if ( buck!=NULL )
+ i = buck->uni;
+ }
+ if ( !_recognizePUA && i>=0xe000 && i<=0xf8ff )
+ i = -1;
+return( i );
+}
+
+#define RefMax 40
+
+NameList *DefaultNameListForNewFonts(void) {
+return( namelist_for_new_fonts );
+}
+
+NameList *NameListByName(const char *name) {
+ const char *nameTex = "ΤεΧ Names";
+ NameList *nl;
+
+ /* ΤεΧ is hard tp type e.g. from scripting, so accept TeX as alias */
+ if (strcmp(name,"TeX Names")==0)
+ name = (char *)nameTex;
+
+ for ( nl = &agl; nl!=NULL; nl=nl->next ) {
+ if ( strcmp(_(nl->title),name)==0 || strcmp(nl->title,name)==0 )
+ return( nl );
+ }
+ return( NULL );
+}
+
+struct bits {
+ char *start, *end;
+ SplineChar *rpl;
+};
+
+/* ************************************************************************** */
+static const char *agl_sans_p0_b0[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quotesingle",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "grave",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "exclamdown",
+ "cent",
+ "sterling",
+ "currency",
+ "yen",
+ "brokenbar",
+ "section",
+ "dieresis",
+ "copyright",
+ "ordfeminine",
+ "guillemotleft",
+ "logicalnot",
+ NULL,
+ "registered",
+ "macron",
+ "degree",
+ "plusminus",
+ NULL,
+ NULL,
+ "acute",
+ "mu",
+ "paragraph",
+ "periodcentered",
+ "cedilla",
+ NULL,
+ "ordmasculine",
+ "guillemotright",
+ "onequarter",
+ "onehalf",
+ "threequarters",
+ "questiondown",
+ "Agrave",
+ "Aacute",
+ "Acircumflex",
+ "Atilde",
+ "Adieresis",
+ "Aring",
+ "AE",
+ "Ccedilla",
+ "Egrave",
+ "Eacute",
+ "Ecircumflex",
+ "Edieresis",
+ "Igrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Eth",
+ "Ntilde",
+ "Ograve",
+ "Oacute",
+ "Ocircumflex",
+ "Otilde",
+ "Odieresis",
+ "multiply",
+ "Oslash",
+ "Ugrave",
+ "Uacute",
+ "Ucircumflex",
+ "Udieresis",
+ "Yacute",
+ "Thorn",
+ "germandbls",
+ "agrave",
+ "aacute",
+ "acircumflex",
+ "atilde",
+ "adieresis",
+ "aring",
+ "ae",
+ "ccedilla",
+ "egrave",
+ "eacute",
+ "ecircumflex",
+ "edieresis",
+ "igrave",
+ "iacute",
+ "icircumflex",
+ "idieresis",
+ "eth",
+ "ntilde",
+ "ograve",
+ "oacute",
+ "ocircumflex",
+ "otilde",
+ "odieresis",
+ "divide",
+ "oslash",
+ "ugrave",
+ "uacute",
+ "ucircumflex",
+ "udieresis",
+ "yacute",
+ "thorn",
+ "ydieresis"
+};
+
+static const char *agl_sans_p0_b1[] = {
+ "Amacron",
+ "amacron",
+ "Abreve",
+ "abreve",
+ "Aogonek",
+ "aogonek",
+ "Cacute",
+ "cacute",
+ "Ccircumflex",
+ "ccircumflex",
+ "Cdotaccent",
+ "cdotaccent",
+ "Ccaron",
+ "ccaron",
+ "Dcaron",
+ "dcaron",
+ "Dcroat",
+ "dcroat",
+ "Emacron",
+ "emacron",
+ "Ebreve",
+ "ebreve",
+ "Edotaccent",
+ "edotaccent",
+ "Eogonek",
+ "eogonek",
+ "Ecaron",
+ "ecaron",
+ "Gcircumflex",
+ "gcircumflex",
+ "Gbreve",
+ "gbreve",
+ "Gdotaccent",
+ "gdotaccent",
+ "Gcommaaccent",
+ "gcommaaccent",
+ "Hcircumflex",
+ "hcircumflex",
+ "Hbar",
+ "hbar",
+ "Itilde",
+ "itilde",
+ "Imacron",
+ "imacron",
+ "Ibreve",
+ "ibreve",
+ "Iogonek",
+ "iogonek",
+ "Idotaccent",
+ "dotlessi",
+ "IJ",
+ "ij",
+ "Jcircumflex",
+ "jcircumflex",
+ "Kcommaaccent",
+ "kcommaaccent",
+ "kgreenlandic",
+ "Lacute",
+ "lacute",
+ "Lcommaaccent",
+ "lcommaaccent",
+ "Lcaron",
+ "lcaron",
+ "Ldot",
+ "ldot",
+ "Lslash",
+ "lslash",
+ "Nacute",
+ "nacute",
+ "Ncommaaccent",
+ "ncommaaccent",
+ "Ncaron",
+ "ncaron",
+ "napostrophe",
+ "Eng",
+ "eng",
+ "Omacron",
+ "omacron",
+ "Obreve",
+ "obreve",
+ "Ohungarumlaut",
+ "ohungarumlaut",
+ "OE",
+ "oe",
+ "Racute",
+ "racute",
+ "Rcommaaccent",
+ "rcommaaccent",
+ "Rcaron",
+ "rcaron",
+ "Sacute",
+ "sacute",
+ "Scircumflex",
+ "scircumflex",
+ "Scedilla",
+ "scedilla",
+ "Scaron",
+ "scaron",
+ NULL,
+ NULL,
+ "Tcaron",
+ "tcaron",
+ "Tbar",
+ "tbar",
+ "Utilde",
+ "utilde",
+ "Umacron",
+ "umacron",
+ "Ubreve",
+ "ubreve",
+ "Uring",
+ "uring",
+ "Uhungarumlaut",
+ "uhungarumlaut",
+ "Uogonek",
+ "uogonek",
+ "Wcircumflex",
+ "wcircumflex",
+ "Ycircumflex",
+ "ycircumflex",
+ "Ydieresis",
+ "Zacute",
+ "zacute",
+ "Zdotaccent",
+ "zdotaccent",
+ "Zcaron",
+ "zcaron",
+ "longs",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "florin",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Ohorn",
+ "ohorn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Uhorn",
+ "uhorn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Gcaron",
+ "gcaron",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Aringacute",
+ "aringacute",
+ "AEacute",
+ "aeacute",
+ "Oslashacute",
+ "oslashacute"
+};
+
+static const char *agl_sans_p0_b2[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Scommaaccent",
+ "scommaaccent",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "circumflex",
+ "caron",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "breve",
+ "dotaccent",
+ "ring",
+ "ogonek",
+ "tilde",
+ "hungarumlaut",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b3[] = {
+ "gravecomb",
+ "acutecomb",
+ NULL,
+ "tildecomb",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "hookabovecomb",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "dotbelowcomb",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "tonos",
+ "dieresistonos",
+ "Alphatonos",
+ "anoteleia",
+ "Epsilontonos",
+ "Etatonos",
+ "Iotatonos",
+ NULL,
+ "Omicrontonos",
+ NULL,
+ "Upsilontonos",
+ "Omegatonos",
+ "iotadieresistonos",
+ "Alpha",
+ "Beta",
+ "Gamma",
+ NULL,
+ "Epsilon",
+ "Zeta",
+ "Eta",
+ "Theta",
+ "Iota",
+ "Kappa",
+ "Lambda",
+ "Mu",
+ "Nu",
+ "Xi",
+ "Omicron",
+ "Pi",
+ "Rho",
+ NULL,
+ "Sigma",
+ "Tau",
+ "Upsilon",
+ "Phi",
+ "Chi",
+ "Psi",
+ NULL,
+ "Iotadieresis",
+ "Upsilondieresis",
+ "alphatonos",
+ "epsilontonos",
+ "etatonos",
+ "iotatonos",
+ "upsilondieresistonos",
+ "alpha",
+ "beta",
+ "gamma",
+ "delta",
+ "epsilon",
+ "zeta",
+ "eta",
+ "theta",
+ "iota",
+ "kappa",
+ "lambda",
+ NULL,
+ "nu",
+ "xi",
+ "omicron",
+ "pi",
+ "rho",
+ "sigma1",
+ "sigma",
+ "tau",
+ "upsilon",
+ "phi",
+ "chi",
+ "psi",
+ "omega",
+ "iotadieresis",
+ "upsilondieresis",
+ "omicrontonos",
+ "upsilontonos",
+ "omegatonos",
+ NULL,
+ NULL,
+ "theta1",
+ "Upsilon1",
+ NULL,
+ NULL,
+ "phi1",
+ "omega1",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b1e[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Wgrave",
+ "wgrave",
+ "Wacute",
+ "wacute",
+ "Wdieresis",
+ "wdieresis",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Ygrave",
+ "ygrave",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b20[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "figuredash",
+ "endash",
+ "emdash",
+ NULL,
+ NULL,
+ "underscoredbl",
+ "quoteleft",
+ "quoteright",
+ "quotesinglbase",
+ "quotereversed",
+ "quotedblleft",
+ "quotedblright",
+ "quotedblbase",
+ NULL,
+ "dagger",
+ "daggerdbl",
+ "bullet",
+ NULL,
+ "onedotenleader",
+ "twodotenleader",
+ "ellipsis",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "perthousand",
+ NULL,
+ "minute",
+ "second",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "guilsinglleft",
+ "guilsinglright",
+ NULL,
+ "exclamdbl",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "fraction",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "colonmonetary",
+ NULL,
+ "franc",
+ "lira",
+ NULL,
+ NULL,
+ "peseta",
+ NULL,
+ NULL,
+ NULL,
+ "dong",
+ "Euro",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b21[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Ifraktur",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "weierstrass",
+ NULL,
+ NULL,
+ NULL,
+ "Rfraktur",
+ NULL,
+ "prescription",
+ NULL,
+ NULL,
+ NULL,
+ "trademark",
+ NULL,
+ NULL,
+ NULL,
+ "Omega",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "estimated",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "aleph",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "onethird",
+ "twothirds",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "oneeighth",
+ "threeeighths",
+ "fiveeighths",
+ "seveneighths",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "arrowleft",
+ "arrowup",
+ "arrowright",
+ "arrowdown",
+ "arrowboth",
+ "arrowupdn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "arrowupdnbse",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "carriagereturn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "arrowdblleft",
+ "arrowdblup",
+ "arrowdblright",
+ "arrowdbldown",
+ "arrowdblboth",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b22[] = {
+ "universal",
+ NULL,
+ "partialdiff",
+ "existential",
+ NULL,
+ "emptyset",
+ "Delta",
+ "gradient",
+ "element",
+ "notelement",
+ NULL,
+ "suchthat",
+ NULL,
+ NULL,
+ NULL,
+ "product",
+ NULL,
+ "summation",
+ "minus",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "asteriskmath",
+ NULL,
+ NULL,
+ "radical",
+ NULL,
+ NULL,
+ "proportional",
+ "infinity",
+ "orthogonal",
+ "angle",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "logicaland",
+ "logicalor",
+ "intersection",
+ "union",
+ "integral",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "therefore",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "similar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "congruent",
+ NULL,
+ NULL,
+ "approxequal",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "notequal",
+ "equivalence",
+ NULL,
+ NULL,
+ "lessequal",
+ "greaterequal",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "propersubset",
+ "propersuperset",
+ "notsubset",
+ NULL,
+ "reflexsubset",
+ "reflexsuperset",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "circleplus",
+ NULL,
+ "circlemultiply",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "perpendicular",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "dotmath",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b23[] = {
+ NULL,
+ NULL,
+ "house",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "revlogicalnot",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "integraltp",
+ "integralbt",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "angleleft",
+ "angleright",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b25[] = {
+ "SF100000",
+ NULL,
+ "SF110000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF010000",
+ NULL,
+ NULL,
+ NULL,
+ "SF030000",
+ NULL,
+ NULL,
+ NULL,
+ "SF020000",
+ NULL,
+ NULL,
+ NULL,
+ "SF040000",
+ NULL,
+ NULL,
+ NULL,
+ "SF080000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF090000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF060000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF070000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF050000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SF430000",
+ "SF240000",
+ "SF510000",
+ "SF520000",
+ "SF390000",
+ "SF220000",
+ "SF210000",
+ "SF250000",
+ "SF500000",
+ "SF490000",
+ "SF380000",
+ "SF280000",
+ "SF270000",
+ "SF260000",
+ "SF360000",
+ "SF370000",
+ "SF420000",
+ "SF190000",
+ "SF200000",
+ "SF230000",
+ "SF470000",
+ "SF480000",
+ "SF410000",
+ "SF450000",
+ "SF460000",
+ "SF400000",
+ "SF540000",
+ "SF530000",
+ "SF440000",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "upblock",
+ NULL,
+ NULL,
+ NULL,
+ "dnblock",
+ NULL,
+ NULL,
+ NULL,
+ "block",
+ NULL,
+ NULL,
+ NULL,
+ "lfblock",
+ NULL,
+ NULL,
+ NULL,
+ "rtblock",
+ "ltshade",
+ "shade",
+ "dkshade",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "filledbox",
+ "H22073",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "H18543",
+ "H18551",
+ "filledrect",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "triagup",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "triagrt",
+ NULL,
+ "triagdn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "triaglf",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "lozenge",
+ "circle",
+ NULL,
+ NULL,
+ NULL,
+ "H18533",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "invbullet",
+ "invcircle",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "openbullet",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_sans_p0_b26[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "smileface",
+ "invsmileface",
+ "sun",
+ NULL,
+ NULL,
+ NULL,
+ "female",
+ NULL,
+ "male",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "spade",
+ NULL,
+ NULL,
+ "club",
+ NULL,
+ "heart",
+ "diamond",
+ NULL,
+ NULL,
+ NULL,
+ "musicalnote",
+ "musicalnotedbl",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **agl_sans_p0[] = {
+ agl_sans_p0_b0,
+ agl_sans_p0_b1,
+ agl_sans_p0_b2,
+ agl_sans_p0_b3,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ agl_sans_p0_b1e,
+ NULL,
+ agl_sans_p0_b20,
+ agl_sans_p0_b21,
+ agl_sans_p0_b22,
+ agl_sans_p0_b23,
+ NULL,
+ agl_sans_p0_b25,
+ agl_sans_p0_b26,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList agl_sans = {
+ NULL,
+ N_("AGL without afii"),
+ { agl_sans_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+
+/* ************************************************************************** */
+static const char *agl_nf_p0_b1[] = {
+ "Amacron",
+ "amacron",
+ "Abreve",
+ "abreve",
+ "Aogonek",
+ "aogonek",
+ "Cacute",
+ "cacute",
+ "Ccircumflex",
+ "ccircumflex",
+ "Cdotaccent",
+ "cdotaccent",
+ "Ccaron",
+ "ccaron",
+ "Dcaron",
+ "dcaron",
+ "Dcroat",
+ "dcroat",
+ "Emacron",
+ "emacron",
+ "Ebreve",
+ "ebreve",
+ "Edotaccent",
+ "edotaccent",
+ "Eogonek",
+ "eogonek",
+ "Ecaron",
+ "ecaron",
+ "Gcircumflex",
+ "gcircumflex",
+ "Gbreve",
+ "gbreve",
+ "Gdotaccent",
+ "gdotaccent",
+ NULL,
+ NULL,
+ "Hcircumflex",
+ "hcircumflex",
+ "Hbar",
+ "hbar",
+ "Itilde",
+ "itilde",
+ "Imacron",
+ "imacron",
+ "Ibreve",
+ "ibreve",
+ "Iogonek",
+ "iogonek",
+ "Idotaccent",
+ "dotlessi",
+ "IJ",
+ "ij",
+ "Jcircumflex",
+ "jcircumflex",
+ NULL,
+ NULL,
+ "kgreenlandic",
+ "Lacute",
+ "lacute",
+ NULL,
+ NULL,
+ "Lcaron",
+ "lcaron",
+ "Ldot",
+ "ldot",
+ "Lslash",
+ "lslash",
+ "Nacute",
+ "nacute",
+ NULL,
+ NULL,
+ "Ncaron",
+ "ncaron",
+ "napostrophe",
+ "Eng",
+ "eng",
+ "Omacron",
+ "omacron",
+ "Obreve",
+ "obreve",
+ "Ohungarumlaut",
+ "ohungarumlaut",
+ "OE",
+ "oe",
+ "Racute",
+ "racute",
+ NULL,
+ NULL,
+ "Rcaron",
+ "rcaron",
+ "Sacute",
+ "sacute",
+ "Scircumflex",
+ "scircumflex",
+ "Scedilla",
+ "scedilla",
+ "Scaron",
+ "scaron",
+ NULL,
+ NULL,
+ "Tcaron",
+ "tcaron",
+ "Tbar",
+ "tbar",
+ "Utilde",
+ "utilde",
+ "Umacron",
+ "umacron",
+ "Ubreve",
+ "ubreve",
+ "Uring",
+ "uring",
+ "Uhungarumlaut",
+ "uhungarumlaut",
+ "Uogonek",
+ "uogonek",
+ "Wcircumflex",
+ "wcircumflex",
+ "Ycircumflex",
+ "ycircumflex",
+ "Ydieresis",
+ "Zacute",
+ "zacute",
+ "Zdotaccent",
+ "zdotaccent",
+ "Zcaron",
+ "zcaron",
+ "longs",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "florin",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Ohorn",
+ "ohorn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Uhorn",
+ "uhorn",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Gcaron",
+ "gcaron",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Aringacute",
+ "aringacute",
+ "AEacute",
+ "aeacute",
+ "Oslashacute",
+ "oslashacute"
+};
+
+static const char *agl_nf_p0_b2[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "circumflex",
+ "caron",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "breve",
+ "dotaccent",
+ "ring",
+ "ogonek",
+ "tilde",
+ "hungarumlaut",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **agl_nf_p0[] = {
+ agl_sans_p0_b0,
+ agl_nf_p0_b1,
+ agl_nf_p0_b2,
+ agl_sans_p0_b3,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ agl_sans_p0_b1e,
+ NULL,
+ agl_sans_p0_b20,
+ agl_sans_p0_b21,
+ agl_sans_p0_b22,
+ agl_sans_p0_b23,
+ NULL,
+ agl_sans_p0_b25,
+ agl_sans_p0_b26,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList agl_nf = {
+ NULL,
+ N_("AGL For New Fonts"),
+ { agl_nf_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+
+/* ************************************************************************** */
+static const char *agl_p0_b1[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Tcommaaccent",
+ "tcommaaccent",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b2[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57929",
+ "afii64937",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b4[] = {
+ NULL,
+ "afii10023",
+ "afii10051",
+ "afii10052",
+ "afii10053",
+ "afii10054",
+ "afii10055",
+ "afii10056",
+ "afii10057",
+ "afii10058",
+ "afii10059",
+ "afii10060",
+ "afii10061",
+ NULL,
+ "afii10062",
+ "afii10145",
+ "afii10017",
+ "afii10018",
+ "afii10019",
+ "afii10020",
+ "afii10021",
+ "afii10022",
+ "afii10024",
+ "afii10025",
+ "afii10026",
+ "afii10027",
+ "afii10028",
+ "afii10029",
+ "afii10030",
+ "afii10031",
+ "afii10032",
+ "afii10033",
+ "afii10034",
+ "afii10035",
+ "afii10036",
+ "afii10037",
+ "afii10038",
+ "afii10039",
+ "afii10040",
+ "afii10041",
+ "afii10042",
+ "afii10043",
+ "afii10044",
+ "afii10045",
+ "afii10046",
+ "afii10047",
+ "afii10048",
+ "afii10049",
+ "afii10065",
+ "afii10066",
+ "afii10067",
+ "afii10068",
+ "afii10069",
+ "afii10070",
+ "afii10072",
+ "afii10073",
+ "afii10074",
+ "afii10075",
+ "afii10076",
+ "afii10077",
+ "afii10078",
+ "afii10079",
+ "afii10080",
+ "afii10081",
+ "afii10082",
+ "afii10083",
+ "afii10084",
+ "afii10085",
+ "afii10086",
+ "afii10087",
+ "afii10088",
+ "afii10089",
+ "afii10090",
+ "afii10091",
+ "afii10092",
+ "afii10093",
+ "afii10094",
+ "afii10095",
+ "afii10096",
+ "afii10097",
+ NULL,
+ "afii10071",
+ "afii10099",
+ "afii10100",
+ "afii10101",
+ "afii10102",
+ "afii10103",
+ "afii10104",
+ "afii10105",
+ "afii10106",
+ "afii10107",
+ "afii10108",
+ "afii10109",
+ NULL,
+ "afii10110",
+ "afii10193",
+ NULL,
+ NULL,
+ "afii10146",
+ "afii10194",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii10147",
+ "afii10195",
+ "afii10148",
+ "afii10196",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii10050",
+ "afii10098",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii10846",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b5[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57799",
+ "afii57801",
+ "afii57800",
+ "afii57802",
+ "afii57793",
+ "afii57794",
+ "afii57795",
+ "afii57798",
+ "afii57797",
+ "afii57806",
+ NULL,
+ "afii57796",
+ "afii57807",
+ "afii57839",
+ "afii57645",
+ "afii57841",
+ "afii57842",
+ "afii57804",
+ "afii57803",
+ "afii57658",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57664",
+ "afii57665",
+ "afii57666",
+ "afii57667",
+ "afii57668",
+ "afii57669",
+ "afii57670",
+ "afii57671",
+ "afii57672",
+ "afii57673",
+ "afii57674",
+ "afii57675",
+ "afii57676",
+ "afii57677",
+ "afii57678",
+ "afii57679",
+ "afii57680",
+ "afii57681",
+ "afii57682",
+ "afii57683",
+ "afii57684",
+ "afii57685",
+ "afii57686",
+ "afii57687",
+ "afii57688",
+ "afii57689",
+ "afii57690",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57716",
+ "afii57717",
+ "afii57718",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b6[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57388",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57403",
+ NULL,
+ NULL,
+ NULL,
+ "afii57407",
+ NULL,
+ "afii57409",
+ "afii57410",
+ "afii57411",
+ "afii57412",
+ "afii57413",
+ "afii57414",
+ "afii57415",
+ "afii57416",
+ "afii57417",
+ "afii57418",
+ "afii57419",
+ "afii57420",
+ "afii57421",
+ "afii57422",
+ "afii57423",
+ "afii57424",
+ "afii57425",
+ "afii57426",
+ "afii57427",
+ "afii57428",
+ "afii57429",
+ "afii57430",
+ "afii57431",
+ "afii57432",
+ "afii57433",
+ "afii57434",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57440",
+ "afii57441",
+ "afii57442",
+ "afii57443",
+ "afii57444",
+ "afii57445",
+ "afii57446",
+ "afii57470",
+ "afii57448",
+ "afii57449",
+ "afii57450",
+ "afii57451",
+ "afii57452",
+ "afii57453",
+ "afii57454",
+ "afii57455",
+ "afii57456",
+ "afii57457",
+ "afii57458",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57392",
+ "afii57393",
+ "afii57394",
+ "afii57395",
+ "afii57396",
+ "afii57397",
+ "afii57398",
+ "afii57399",
+ "afii57400",
+ "afii57401",
+ "afii57381",
+ NULL,
+ NULL,
+ "afii63167",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57511",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57506",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57507",
+ NULL,
+ "afii57512",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57513",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57508",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57505",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57509",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57514",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57519",
+ NULL,
+ NULL,
+ "afii57534",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b20[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii61664",
+ "afii301",
+ "afii299",
+ "afii300",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii00208",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii61573",
+ "afii61574",
+ "afii61575",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii57636",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *agl_p0_b21[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii61248",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii61289",
+ NULL,
+ NULL,
+ "afii61352",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **agl_p0[] = {
+ NULL,
+ agl_p0_b1,
+ agl_p0_b2,
+ NULL,
+ agl_p0_b4,
+ agl_p0_b5,
+ agl_p0_b6,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ agl_p0_b20,
+ agl_p0_b21,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList agl = {
+ &agl_sans,
+ N_("Adobe Glyph List"),
+ { agl_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+/* ************************************************************************** */
+static const char *adobepua_p0_bf6[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "perthousand.oldstyle",
+ "cent.denominator",
+ "dollar.denominator",
+ "hyphen.denominator",
+ "parenleft.denominator",
+ "parenright.denominator",
+ "cent.numerator",
+ "dollar.numerator",
+ "hyphen.numerator",
+ "parenleft.numerator",
+ "parenright.numerator",
+ "at.cap",
+ "commaaccent.cap",
+ "commaaccent.small",
+ "pi.math",
+ "h.superior",
+ "zero.slash",
+ "zero.fitted",
+ "two.fitted",
+ "three.fitted",
+ "four.fitted",
+ "five.fitted",
+ "six.fitted",
+ "seven.fitted",
+ "eight.fitted",
+ "nine.fitted",
+ "percent.oldstyle",
+ "zero.taboldstyle",
+ "one.taboldstyle",
+ "two.taboldstyle",
+ "three.taboldstyle",
+ "four.taboldstyle",
+ "five.taboldstyle",
+ "six.taboldstyle",
+ "seven.taboldstyle",
+ "eight.taboldstyle",
+ "nine.taboldstyle",
+ "colonmonetary.taboldstyle",
+ "Euro.taboldstyle",
+ "florin.taboldstyle",
+ "numbersign.taboldstyle",
+ "sterling.taboldstyle",
+ "yen.taboldstyle",
+ "dollar.taboldstyle",
+ "cent.taboldstyle",
+ "zero.denominator",
+ "one.denominator",
+ "two.denominator",
+ "three.denominator",
+ "four.denominator",
+ "five.denominator",
+ "six.denominator",
+ "seven.denominator",
+ "eight.denominator",
+ "nine.denominator",
+ "comma.denominator",
+ "period.denominator",
+ "zero.numerator",
+ "one.numerator",
+ "two.numerator",
+ "three.numerator",
+ "four.numerator",
+ "five.numerator",
+ "six.numerator",
+ "seven.numerator",
+ "eight.numerator",
+ "nine.numerator",
+ "comma.numerator",
+ "period.numerator",
+ "Abreve.small",
+ "Amacron.small",
+ "Aogonek.small",
+ "AEacute.small",
+ "Cacute.small",
+ "Ccaron.small",
+ "Ccircumflex.small",
+ "Cdotaccent.small",
+ "Dcaron.small",
+ "Dcroat.small",
+ "Ebreve.small",
+ "Ecaron.small",
+ "Edotaccent.small",
+ "Emacron.small",
+ "Eng.small",
+ "Eogonek.small",
+ "Gbreve.small",
+ "Gcircumflex.small",
+ "Gcommaaccent.small",
+ "Gdotaccent.small",
+ "Hbar.small",
+ "Hcircumflex.small",
+ "Ibreve.small",
+ "IJ.small",
+ "Imacron.small",
+ "Iogonek.small",
+ "Itilde.small",
+ "Jcircumflex.small",
+ "Kcommaaccent.small",
+ "Lacute.small",
+ "Lcaron.small",
+ "Lcommaaccent.small",
+ "Ldot.small",
+ "Nacute.small",
+ "Ncaron.small",
+ "Ncommaaccent.small",
+ "Obreve.small",
+ "Ohungarumlaut.small",
+ "Omacron.small",
+ "Oslashacute.small",
+ "Racute.small",
+ "Rcaron.small",
+ "Rcommaaccent.small",
+ "Sacute.small",
+ "Scedilla.small",
+ "Scircumflex.small",
+ "Scommaaccent.small",
+ "Tbar.small",
+ "Tcaron.small",
+ "Tcommaaccent.small",
+ "Ubreve.small",
+ "Uhungarumlaut.small",
+ "Umacron.small",
+ "Uogonek.small",
+ "Uring.small",
+ "Utilde.small",
+ "Wacute.small",
+ "Wcircumflex.small",
+ "Wdieresis.small",
+ "Wgrave.small",
+ "Ycircumflex.small",
+ "Ygrave.small",
+ "Zacute.small",
+ "Zdotaccent.small",
+ "Idotaccent.small",
+ "parenleft.cap",
+ "parenright.cap",
+ "bracketleft.cap",
+ "bracketright.cap",
+ "braceleft.cap",
+ "braceright.cap",
+ "exclamdown.cap",
+ "questiondown.cap",
+ "guillemotleft.cap",
+ "guillemotright.cap",
+ "guilsinglleft.cap",
+ "guilsinglright.cap",
+ "hyphen.cap",
+ "endash.cap",
+ "emdash.cap",
+ "periodcentered.cap",
+ "j.dotless",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "afii10068.ital",
+ "afii10066.ital",
+ "afii10069.ital",
+ "afii10081.ital",
+ "afii10084.ital",
+ "acute.cap",
+ "caron.cap",
+ "dieresis.cap",
+ "space_uni0308_uni0301.cap",
+ "space_uni0308_uni0300.cap",
+ "grave.cap",
+ "hungarumlaut.cap",
+ "macron.cap",
+ "breve.cyrcap",
+ "circumflex.cyrcap",
+ "space_uni030F.cap",
+ "breve.cyr",
+ "circumflex.cyr",
+ "space_uni030F",
+ "space_uni0308_uni0301",
+ "space_uni0308_uni0300",
+ "copyright.serif",
+ "registered.serif",
+ "trademark.serif",
+ "one.fitted",
+ "R_p",
+ "uni2014.alt",
+ "cent.inferior",
+ "cent.superior",
+ "comma.inferior",
+ "comma.superior",
+ "dollar.inferior",
+ "dollar.superior",
+ "hyphen.inferior",
+ "hyphen.superior",
+ "period.inferior",
+ "period.superior",
+ "a.superior",
+ "b.superior",
+ "d.superior",
+ "e.superior",
+ "i.superior",
+ "l.superior",
+ "m.superior",
+ "o.superior",
+ "r.superior",
+ "s.superior",
+ "t.superior",
+ "breve.sc",
+ "caron.sc",
+ "circumflex.sc",
+ "dotaccent.sc",
+ "hungarumlaut.sc",
+ "lslash.sc",
+ "oe.sc",
+ "ogonek.sc",
+ "ring.sc",
+ "scaron.sc",
+ "tilde.sc",
+ "zcaron.sc"
+};
+
+static const char *adobepua_p0_bf7[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "exclam.sc",
+ NULL,
+ NULL,
+ "dollar.oldstyle",
+ NULL,
+ "ampersand.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "zero.oldstyle",
+ "one.oldstyle",
+ "two.oldstyle",
+ "three.oldstyle",
+ "four.oldstyle",
+ "five.oldstyle",
+ "six.oldstyle",
+ "seven.oldstyle",
+ "eight.oldstyle",
+ "nine.oldstyle",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "question.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "grave.sc",
+ "a.sc",
+ "b.sc",
+ "c.sc",
+ "d.sc",
+ "e.sc",
+ "f.sc",
+ "g.sc",
+ "h.sc",
+ "i.sc",
+ "j.sc",
+ "k.sc",
+ "l.sc",
+ "m.sc",
+ "n.sc",
+ "o.sc",
+ "p.sc",
+ "q.sc",
+ "r.sc",
+ "s.sc",
+ "t.sc",
+ "u.sc",
+ "v.sc",
+ "w.sc",
+ "x.sc",
+ "y.sc",
+ "z.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "exclamdown.sc",
+ "cent.oldstyle",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "dieresis.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "macron.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "acute.sc",
+ NULL,
+ NULL,
+ NULL,
+ "cedilla.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "questiondown.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "agrave.sc",
+ "aacute.sc",
+ "acircumflex.sc",
+ "atilde.sc",
+ "adieresis.sc",
+ "aring.sc",
+ "ae.sc",
+ "ccedilla.sc",
+ "egrave.sc",
+ "eacute.sc",
+ "ecircumflex.sc",
+ "edieresis.sc",
+ "igrave.sc",
+ "iacute.sc",
+ "icircumflex.sc",
+ "idieresis.sc",
+ "eth.sc",
+ "ntilde.sc",
+ "ograve.sc",
+ "oacute.sc",
+ "ocircumflex.sc",
+ "otilde.sc",
+ "odieresis.sc",
+ NULL,
+ "oslash.sc",
+ "ugrave.sc",
+ "uacute.sc",
+ "ucircumflex.sc",
+ "udieresis.sc",
+ "yacute.sc",
+ "thorn.sc",
+ "ydieresis.sc"
+};
+
+static const char *adobepua_p0_bf8[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "registered.sans",
+ "copyright.sans",
+ "trademark.sans",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *adobepua_p0_bfb[] = {
+ "f_f",
+ "f_i",
+ "f_l",
+ "f_f_i",
+ "f_f_l",
+ "longs_t",
+ "s_t",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **adobepua_p0[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ adobepua_p0_bf6,
+ adobepua_p0_bf7,
+ adobepua_p0_bf8,
+ NULL,
+ NULL,
+ adobepua_p0_bfb,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList adobepua = {
+ &agl,
+ N_("AGL with PUA"),
+ { adobepua_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+/* ************************************************************************** */
+static const char *greeksc_p0_bf5[] = {
+ "alpha.sc",
+ "beta.sc",
+ "gamma.sc",
+ "delta.sc",
+ "epsilon.sc",
+ "zeta.sc",
+ "eta.sc",
+ "theta.sc",
+ "iota.sc",
+ "kappa.sc",
+ "lambda.sc",
+ "mu.sc",
+ "nu.sc",
+ "xi.sc",
+ "omicron.sc",
+ "pi.sc",
+ "rho.sc",
+ NULL,
+ "sigma.sc",
+ "tau.sc",
+ "upsilon.sc",
+ "phi.sc",
+ "chi.sc",
+ "psi.sc",
+ "omega.sc",
+ "iotadieresis.sc",
+ "upsilondieresis.sc",
+ "alphaiota.sc",
+ "etaiota.sc",
+ "omegaiota.sc",
+ "prosgegrammeni.sc",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **greeksc_p0[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ greeksc_p0_bf5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList greeksc = {
+ &adobepua,
+ N_("Greek small caps"),
+ { greeksc_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+/* ************************************************************************** */
+static const char *tex_p0_b20[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "closure",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "leftharpoonaccent",
+ "rightharpoonaccent",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_b21[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "shortleftarrow",
+ "shortuparrow",
+ "shortrightarrow",
+ "shortdownarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "leftwavyarrow",
+ "rightwavyarrow",
+ NULL,
+ "twoheaduparrow",
+ NULL,
+ "twoheaddownarrow",
+ NULL,
+ NULL,
+ NULL,
+ "mapsup",
+ NULL,
+ "mapsdown",
+ "updownarrowbar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "leftrightwavyarrow",
+ NULL,
+ "downzigzagarrow",
+ NULL,
+ NULL,
+ "Ldsh",
+ "Rdsh",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "acwopencirclearrow",
+ "cwopencirclearrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "updownarrows",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Nwarrow",
+ "Nearrow",
+ "Searrow",
+ "Swarrow",
+ NULL,
+ NULL,
+ "longleftzigzagarrow",
+ "rightzigzagarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "barleftarrow",
+ "rightarrowbar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "downuparrows",
+ "rightthreearrows",
+ "nvleftarrow",
+ "nvrightarrow",
+ "nvleftrightarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_b22[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ltrpar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "difference",
+ NULL,
+ "ac",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "approxident",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "arceq",
+ NULL,
+ "veeeq",
+ "stareq",
+ NULL,
+ "eqdef",
+ "measeq",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Equiv",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "prurel",
+ "scurel",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "origof",
+ "imageof",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "eqless",
+ "eqgtr",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "disin",
+ NULL,
+ "isins",
+ "isindot",
+ NULL,
+ NULL,
+ "isinvb",
+ "isinE",
+ "nisd",
+ NULL,
+ "nis",
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_b23[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "invnot",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "turnednot",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "solbar",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "rangledownzigzagarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_b27[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "longrightzigzagarrow"
+};
+
+static const char *tex_p0_b29[] = {
+ NULL,
+ NULL,
+ "nvLeftarrow",
+ "nvRightarrow",
+ "nvLeftrightarrow",
+ "twoheadmapsto",
+ NULL,
+ NULL,
+ "downarrowbarred",
+ "uparrowbarred",
+ "Uuparrow",
+ "Ddownarrow",
+ "leftbkarrow",
+ "rightbkarrow",
+ "leftdbkarrow",
+ NULL,
+ NULL,
+ "rightdotarrow",
+ "baruparrow",
+ "downarrowbar",
+ NULL,
+ NULL,
+ "twoheadrightarrowtail",
+ NULL,
+ NULL,
+ "lefttail",
+ "righttail",
+ "leftdbltail",
+ "rightdbltail",
+ "diamondleftarrow",
+ "rightarrowdiamond",
+ "diamondleftarrowbar",
+ "barrightarrowdiamond",
+ "nwsearrow",
+ "neswarrow",
+ "hknwarrow",
+ "hknearrow",
+ "hksearrow",
+ "hkswarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "rdiagovfdiag",
+ "fdiagovrdiag",
+ "seovnearrow",
+ "neovsearrow",
+ "fdiagovnearrow",
+ "rdiagovsearrow",
+ "neovnwarrow",
+ "nwovnearrow",
+ "rightcurvedarrow",
+ NULL,
+ NULL,
+ "leftdowncurvedarrow",
+ "rightdowncurvedarrow",
+ "cwhalfcirclearrow",
+ "acwhalfcirclearrow",
+ NULL,
+ "acwundercurvearrow",
+ "curvearrowrightminus",
+ "curvearrowleftplus",
+ "cwundercurvearrow",
+ NULL,
+ NULL,
+ NULL,
+ "rightarrowshortleftarrow",
+ "leftarrowshortrightarrow",
+ "shortrightarrowleftarrow",
+ "rightarrowplus",
+ "leftarrowplus",
+ "rightarrowx",
+ "leftrightarrowcircle",
+ "twoheaduparrowcircle",
+ "leftrightharpoonupdown",
+ "leftrightharpoondownup",
+ "updownharpoonrightleft",
+ "updownharpoonleftright",
+ "leftrightharpoonupup",
+ "updownharpoonrightright",
+ "leftrightharpoondowndown",
+ "updownharpoonleftleft",
+ "barleftharpoonup",
+ "rightharpoonupbar",
+ "barupharpoonright",
+ "downharpoonrightbar",
+ "barleftharpoondown",
+ "rightharpoondownbar",
+ "barupharpoonleft",
+ "downharpoonleftbar",
+ "leftharpoonupbar",
+ "barrightharpoonup",
+ "upharpoonrightbar",
+ "bardownharpoonright",
+ "leftharpoondownbar",
+ "barrightharpoondown",
+ "upharpoonleftbar",
+ "bardownharpoonleft",
+ "leftharpoonsupdown",
+ "upharpoonsleftright",
+ "rightharpoonsupdown",
+ "downharpoonsleftright",
+ "leftrightharpoonsup",
+ "leftrightharpoonsdown",
+ "rightleftharpoonsup",
+ "rightleftharpoonsdown",
+ "leftharpoonupdash",
+ "dashleftharpoondown",
+ "rightharpoonupdash",
+ "dashrightharpoondown",
+ "updownharpoonsleftright",
+ "downupharpoonsleftright",
+ "rightimply",
+ "equalrightarrow",
+ "similarrightarrow",
+ "leftarrowsimilar",
+ "rightarrowsimilar",
+ "rightarrowapprox",
+ "ltlarr",
+ "leftarrowless",
+ "gtrarr",
+ "subrarr",
+ "leftarrowsubset",
+ "suplarr",
+ "leftfishtail",
+ "rightfishtail",
+ "upfishtail",
+ "downfishtail",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "rtriltri",
+ "ltrivb",
+ "vbrtri",
+ "lfbowtie",
+ "rfbowtie",
+ "fbowtie",
+ "lftimes",
+ "rftimes",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "eqvparsl",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ruledelayed",
+ NULL,
+ "dsol",
+ "rsolbar",
+ "xsol",
+ "xbsol",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_b2a[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "congdot",
+ NULL,
+ NULL,
+ "approxeqq",
+ NULL,
+ NULL,
+ "eqqsim",
+ "Coloneq",
+ "eqeq",
+ NULL,
+ NULL,
+ "equivDD",
+ "ltcir",
+ "gtcir",
+ "ltquest",
+ "gtquest",
+ NULL,
+ NULL,
+ "lesdot",
+ "gesdot",
+ "lesdoto",
+ "gesdoto",
+ "lesdotor",
+ "gesdotol",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "lsime",
+ "gsime",
+ "lsimg",
+ "gsiml",
+ "lgE",
+ "glE",
+ "lesges",
+ "gesles",
+ NULL,
+ NULL,
+ "elsdot",
+ "egsdot",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "simless",
+ "simgtr",
+ "simlE",
+ "simgE",
+ "Lt",
+ "Gt",
+ NULL,
+ "glj",
+ "gla",
+ "ltcc",
+ "gtcc",
+ "lescc",
+ "gescc",
+ "smt",
+ "lat",
+ "smte",
+ "late",
+ "bumpeqq",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "prE",
+ "scE",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Pr",
+ "Sc",
+ "subsetdot",
+ "supsetdot",
+ "subsetplus",
+ "supsetplus",
+ "submult",
+ "supmult",
+ "subedot",
+ "supedot",
+ NULL,
+ NULL,
+ "subsim",
+ "supsim",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "csub",
+ "csup",
+ "csube",
+ "csupe",
+ "subsup",
+ "supsub",
+ "subsub",
+ "supsup",
+ "suphsub",
+ "supdsub",
+ "forkv",
+ "topfork",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Barv",
+ "vBar",
+ "vBarv",
+ "barV",
+ "Vbar",
+ "Not",
+ "bNot",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_be2[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "rightdbkarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "nrightwavyarrow",
+ NULL,
+ "nrightcurvedarrow",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "race",
+ "acE",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_be3[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "lesg",
+ "gesl",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "smtes",
+ "lates",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "bsolhsub",
+ "suphsol",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "congruence",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_be4[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "mostpos",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *tex_p0_be6[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "varrightfishtail",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **tex_p0[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ tex_p0_b20,
+ tex_p0_b21,
+ tex_p0_b22,
+ tex_p0_b23,
+ NULL,
+ NULL,
+ NULL,
+ tex_p0_b27,
+ NULL,
+ tex_p0_b29,
+ tex_p0_b2a,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ tex_p0_be2,
+ tex_p0_be3,
+ tex_p0_be4,
+ NULL,
+ tex_p0_be6,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList tex = {
+ &agl,
+ NU_("ΤεΧ Names"),
+ { tex_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+/* ************************************************************************** */
+static const char *ams_p0_be2[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni219D0338",
+ NULL,
+ "uni29330338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2192.short",
+ "uni2190.short",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni222AFE00",
+ "uni2229FE00",
+ "uni2294FE00",
+ "uni2293FE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni223E0332.reversed",
+ "uni223E0333",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2269FE00",
+ NULL,
+ NULL,
+ "uni2268FE00",
+ "uni22670338",
+ "uni2A7E0338",
+ "uni2A7D0338",
+ "uni22660338",
+ NULL,
+ "uni2224.short",
+ "uni2226.short",
+ "uni228220D2",
+ "uni228620D2",
+ "uni2AC50338",
+ "uni228320D2",
+ "uni2AC60338",
+ "uni228720D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2ACBFE00",
+ "uni228AFE00",
+ "uni228BFE00",
+ "uni2ACCFE00",
+ "uni224B0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni226420D2",
+ "uni226520D2",
+ "uni003C20D2",
+ "uni003E20D2",
+ "uni2A6D0338",
+ "uni224820D2",
+ "uni2A700338",
+ NULL,
+ "uni2AA120D2",
+ "uni2AA220D2",
+ "uni226A0338",
+ "uni226B0338",
+ "uni22D80338",
+ "uni22D90338",
+ "uni22B520D2",
+ "uni22B420D2",
+ NULL,
+ NULL,
+ NULL,
+ "uni006A.dotless",
+ "uni210F.var",
+ NULL,
+ NULL,
+ "uni222020D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_be3[] = {
+ NULL,
+ "uni2223.short",
+ "uni2225.short",
+ NULL,
+ NULL,
+ NULL,
+ "uni2248.bold",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni22DAFE00",
+ "uni22DBFE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AACFE00",
+ "uni2AADFE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni220B20D2",
+ "uni220D0338",
+ NULL,
+ NULL,
+ "uni220820D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A15.up",
+ "uni2A16.up",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni226120E5",
+ "uni003D20E5",
+ "uni2AFD20E5",
+ "uni22500338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni22020338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A10.up",
+ NULL,
+ "uni2A12.up",
+ "uni2A13.up",
+ "uni2A14.up",
+ "uni2A17.up",
+ "uni2A11.up",
+ NULL,
+ "uni22F50338",
+ NULL,
+ "uni22F90338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2026.em",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni220A0338",
+ "uni227320D2",
+ "uni227220D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni223E.reversed",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni0265.superscript",
+ "uni0252.superscript",
+ NULL,
+ NULL,
+ NULL,
+ "uni2A0F.up",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A9B20D2",
+ "uni2A9C20D2",
+ "uni2A9B0338",
+ "uni2A9C0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_be4[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni223E.var",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni223C20D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_be5[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A3CFE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AAF0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni224220D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AB00338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_be6[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni228F0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni22900338",
+ "uni224E0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2205.var",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni0077.subscript",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni1D0B.reversed",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni025102DE",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni025B02DE",
+ "uni025402DE",
+ NULL,
+ "uni03C9.inverted",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni297D.var",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni223C.bold",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_be8[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni227E0338",
+ "uni227F0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2216.var",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni224F0338",
+ "uni22420338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bea[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni00730336",
+ NULL,
+ "uni006C0321",
+ NULL,
+ NULL,
+ "uni03040304",
+ NULL,
+ NULL,
+ "uni229CFE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni03020302",
+ NULL,
+ "uni03030303",
+ "uni033103310331",
+ "uni0331033103310331",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni03070302",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni03040303",
+ "uni03310330",
+ "uni03040308",
+ "uni03300331",
+ NULL,
+ "uni00640321",
+ "uni00680321",
+ "uni006B0321",
+ "uni00780321",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni00730321",
+ "uni007A0321",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2034.notsup",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A0B.up",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni227620D2",
+ "uni227720D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bec[] = {
+ NULL,
+ NULL,
+ "uni2A3DFE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bed[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni220A20D2",
+ "uni220D20D2",
+ "uni22F60338",
+ "uni22FD0338",
+ "uni22F620D2",
+ "uni22FD20D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2295FE00",
+ "uni2297FE00",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni224320D2",
+ "uni224520D2",
+ NULL,
+ "uni2A6C0338",
+ "uni2A6C20D2",
+ "uni2A7020D2",
+ "uni224D20D2",
+ "uni223F.reversed",
+ "uni003D20D2",
+ NULL,
+ "uni226120D2",
+ "uni22630338",
+ "uni226320D2",
+ NULL,
+ NULL,
+ "uni2A7D20D2",
+ "uni2A7E20D2",
+ "uni226620D2",
+ "uni226720D2",
+ "uni2A950338",
+ "uni2A960338",
+ "uni2A9520D2",
+ "uni2A9620D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A990338",
+ "uni2A9A0338",
+ "uni2A9920D2",
+ "uni2A9A20D2",
+ "uni2272FE00",
+ "uni2273FE00",
+ "uni2A9DFE00",
+ "uni2A9EFE00",
+ NULL,
+ NULL,
+ "uni227A20D2",
+ "uni227B20D2",
+ "uni227C20D2",
+ "uni227D20D2",
+ "uni22DE20D2",
+ "uni22DF20D2",
+ "uni22DE0338",
+ "uni22DF0338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AC520D2",
+ "uni2AC620D2",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AF40338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2A0A.lgdisplay",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni220A.narrow",
+ "uni220D.narrow",
+ NULL,
+ "u1D6FB.narrow",
+ "uni002820090029",
+ "uni002822C50029",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bee[] = {
+ "stixEE00",
+ "stixEE01",
+ "stixEE02",
+ "stixEE03",
+ "stixEE04",
+ "stixEE05",
+ "stixEE06",
+ "stixEE07",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "stixEE10",
+ "stixEE11",
+ "stixEE12",
+ "stixEE13",
+ "stixEE14",
+ "stixEE15",
+ "stixEE16",
+ "stixEE17",
+ "stixEE18",
+ "stixEE19",
+ "stixEE1A",
+ "stixEE1B",
+ "stixEE1C",
+ "stixEE1D",
+ "stixEE1E",
+ "stixEE1F",
+ "stixEE20",
+ "stixEE21",
+ "stixEE22",
+ "stixEE23",
+ "stixEE24",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "stixEE30",
+ "stixEE31",
+ "stixEE32",
+ "stixEE33",
+ "stixEE34",
+ "stixEE35",
+ "stixEE36",
+ "stixEE37",
+ "stixEE38",
+ "stixEE39",
+ "stixEE3A",
+ "stixEE3B",
+ "stixEE3C",
+ "stixEE3D",
+ "stixEE3E",
+ NULL,
+ "stixEE40",
+ "stixEE41",
+ "stixEE42",
+ "stixEE43",
+ "stixEE44",
+ "stixEE45",
+ "stixEE46",
+ "stixEE47",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "stixEE50",
+ "stixEE51",
+ "stixEE52",
+ "stixEE53",
+ "stixEE54",
+ "stixEE55",
+ "stixEE56",
+ "stixEE57",
+ "stixEE58",
+ "stixEE59",
+ "stixEE5A",
+ "stixEE5B",
+ "stixEE5C",
+ "stixEE5D",
+ "stixEE5E",
+ "stixEE5F",
+ "stixEE60",
+ "stixEE61",
+ "stixEE62",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "stixEE70",
+ "stixEE71",
+ "stixEE72",
+ "stixEE73",
+ "stixEE74",
+ "stixEE75",
+ "stixEE76",
+ "stixEE77",
+ "stixEE78",
+ "stixEE79",
+ "stixEE7A",
+ "stixEE7B",
+ "stixEE7C",
+ "stixEE7D",
+ "stixEE7E",
+ "stixEE7F",
+ "stixEE80",
+ "stixEE81",
+ "stixEE82",
+ "stixEE83",
+ "stixEE84",
+ "stixEE85",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "stixEE90",
+ "stixEE91",
+ "stixEE92",
+ "stixEE93",
+ "stixEE94",
+ "stixEE95",
+ "stixEE96",
+ "stixEE97",
+ "stixEE98",
+ "stixEE99",
+ "stixEE9A",
+ "stixEE9B",
+ "stixEE9C",
+ "stixEE9D",
+ "stixEE9E",
+ "stixEE9F",
+ "stixEEA0",
+ "stixEEA1",
+ "stixEEA2",
+ "stixEEA3",
+ "stixEEA4",
+ "stixEEA5",
+ "stixEEA6",
+ "stixEEA7",
+ "stixEEA8",
+ "stixEEA9",
+ "stixEEAA",
+ "stixEEAB",
+ "stixEEAC",
+ NULL,
+ NULL,
+ NULL,
+ "stixEEB0",
+ "stixEEB1",
+ "stixEEB2",
+ "stixEEB3",
+ "stixEEB4",
+ "stixEEB5",
+ "stixEEB6",
+ "stixEEB7",
+ "stixEEB8",
+ "stixEEB9",
+ "stixEEBA",
+ "stixEEBB",
+ "stixEEBC",
+ "stixEEBD",
+ "stixEEBE",
+ "stixEEBF",
+ "stixEEC0",
+ "stixEEC1",
+ "stixEEC2",
+ "stixEEC3",
+ "stixEEC4",
+ "stixEEC5",
+ "stixEEC6",
+ "stixEEC7",
+ "stixEEC8",
+ "stixEEC9",
+ "stixEECA",
+ "stixEECB",
+ NULL,
+ "stixEECD",
+ "stixEECE",
+ "stixEECF",
+ "stixEED0",
+ "stixEED1",
+ "stixEED2",
+ "stixEED3",
+ "stixEED4",
+ "stixEED5",
+ "stixEED6",
+ "stixEED7",
+ "stixEED8",
+ "stixEED9",
+ "stixEEDA",
+ "stixEEDB",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bf4[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni29CF0338",
+ "uni29D00338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AA10338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2AA20338",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char *ams_p0_bf5[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "uni2191.short",
+ "uni2193.short",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static const char **ams_p0[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ ams_p0_be2,
+ ams_p0_be3,
+ ams_p0_be4,
+ ams_p0_be5,
+ ams_p0_be6,
+ NULL,
+ ams_p0_be8,
+ NULL,
+ ams_p0_bea,
+ NULL,
+ ams_p0_bec,
+ ams_p0_bed,
+ ams_p0_bee,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ ams_p0_bf4,
+ ams_p0_bf5,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+};
+
+static NameList ams = {
+ &tex,
+ N_("AMS Names"),
+ { ams_p0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL },
+ NULL, NULL, 0, NULL
+};
+/* ************************************************************************** */
+static struct psaltnames psaltnames[] = {
+ { "AEmacron", 0x01e2, 0 },
+ { "AEsmall", 0xf7e6, 0 },
+ { "Aacutesmall", 0xf7e1, 0 },
+ { "Abreveacute", 0x1eae, 0 },
+ { "Abrevecyrillic", 0x04d0, 0 },
+ { "Abrevedotbelow", 0x1eb6, 0 },
+ { "Abrevegrave", 0x1eb0, 0 },
+ { "Abrevehookabove", 0x1eb2, 0 },
+ { "Abrevetilde", 0x1eb4, 0 },
+ { "Acaron", 0x01cd, 0 },
+ { "Acircle", 0x24b6, 0 },
+ { "Acircumflexacute", 0x1ea4, 0 },
+ { "Acircumflexdotbelow", 0x1eac, 0 },
+ { "Acircumflexgrave", 0x1ea6, 0 },
+ { "Acircumflexhookabove", 0x1ea8, 0 },
+ { "Acircumflexsmall", 0xf7e2, 0 },
+ { "Acircumflextilde", 0x1eaa, 0 },
+ { "Acute", 0xf6c9, 0 },
+ { "Acutesmall", 0xf7b4, 0 },
+ { "Acyrillic", 0x0410, 0 },
+ { "Adblgrave", 0x0200, 0 },
+ { "Adieresiscyrillic", 0x04d2, 0 },
+ { "Adieresismacron", 0x01de, 0 },
+ { "Adieresissmall", 0xf7e4, 0 },
+ { "Adotbelow", 0x1ea0, 0 },
+ { "Adotmacron", 0x01e0, 0 },
+ { "Agravesmall", 0xf7e0, 0 },
+ { "Ahookabove", 0x1ea2, 0 },
+ { "Aiecyrillic", 0x04d4, 0 },
+ { "Ainvertedbreve", 0x0202, 0 },
+ { "Amonospace", 0xff21, 0 },
+ { "Aringbelow", 0x1e00, 0 },
+ { "Aringsmall", 0xf7e5, 0 },
+ { "Asmall", 0xf761, 0 },
+ { "Atildesmall", 0xf7e3, 0 },
+ { "Aybarmenian", 0x0531, 0 },
+ { "Bcircle", 0x24b7, 0 },
+ { "Bdotaccent", 0x1e02, 0 },
+ { "Bdotbelow", 0x1e04, 0 },
+ { "Becyrillic", 0x0411, 0 },
+ { "Benarmenian", 0x0532, 0 },
+ { "Bhook", 0x0181, 0 },
+ { "Blinebelow", 0x1e06, 0 },
+ { "Bmonospace", 0xff22, 0 },
+ { "Brevesmall", 0xf6f4, 0 },
+ { "Bsmall", 0xf762, 0 },
+ { "Btopbar", 0x0182, 0 },
+ { "Caarmenian", 0x053e, 0 },
+ { "Caron", 0xf6ca, 0 },
+ { "Caronsmall", 0xf6f5, 0 },
+ { "Ccedillaacute", 0x1e08, 0 },
+ { "Ccedillasmall", 0xf7e7, 0 },
+ { "Ccircle", 0x24b8, 0 },
+ { "Cdot", 0x010a, 0 },
+ { "Cedillasmall", 0xf7b8, 0 },
+ { "Chaarmenian", 0x0549, 0 },
+ { "Cheabkhasiancyrillic", 0x04bc, 0 },
+ { "Checyrillic", 0x0427, 0 },
+ { "Chedescenderabkhasiancyrillic", 0x04be, 0 },
+ { "Chedescendercyrillic", 0x04b6, 0 },
+ { "Chedieresiscyrillic", 0x04f4, 0 },
+ { "Cheharmenian", 0x0543, 0 },
+ { "Chekhakassiancyrillic", 0x04cb, 0 },
+ { "Cheverticalstrokecyrillic", 0x04b8, 0 },
+ { "Chook", 0x0187, 0 },
+ { "Circumflexsmall", 0xf6f6, 0 },
+ { "Cmonospace", 0xff23, 0 },
+ { "Coarmenian", 0x0551, 0 },
+ { "Csmall", 0xf763, 0 },
+ { "DZ", 0x01f1, 0 },
+ { "DZcaron", 0x01c4, 0 },
+ { "Daarmenian", 0x0534, 0 },
+ { "Dafrican", 0x0189, 0 },
+ { "Dcedilla", 0x1e10, 0 },
+ { "Dcircle", 0x24b9, 0 },
+ { "Dcircumflexbelow", 0x1e12, 0 },
+ { "Ddotaccent", 0x1e0a, 0 },
+ { "Ddotbelow", 0x1e0c, 0 },
+ { "Decyrillic", 0x0414, 0 },
+ { "Deicoptic", 0x03ee, 0 },
+ { "Deltagreek", 0x0394, 0 },
+ { "Dhook", 0x018a, 0 },
+ { "Dieresis", 0xf6cb, 0 },
+ { "diaeresis", 0x00a8, 0 },
+ { "Diaeresis", 0xf6cb, 0 },
+ { "DieresisAcute", 0xf6cc, 0 },
+ { "DieresisGrave", 0xf6cd, 0 },
+ { "Dieresissmall", 0xf7a8, 0 },
+ { "Digammagreek", 0x03dc, 0 },
+ { "Djecyrillic", 0x0402, 0 },
+ { "Dlinebelow", 0x1e0e, 0 },
+ { "Dmonospace", 0xff24, 0 },
+ { "Dotaccentsmall", 0xf6f7, 0 },
+ { "Dslash", 0x0110, 0 },
+ { "Dsmall", 0xf764, 0 },
+ { "Dtopbar", 0x018b, 0 },
+ { "Dz", 0x01f2, 0 },
+ { "Dzcaron", 0x01c5, 0 },
+ { "Dzeabkhasiancyrillic", 0x04e0, 0 },
+ { "Dzecyrillic", 0x0405, 0 },
+ { "Dzhecyrillic", 0x040f, 0 },
+ { "Eacutesmall", 0xf7e9, 0 },
+ { "Ecedillabreve", 0x1e1c, 0 },
+ { "Echarmenian", 0x0535, 0 },
+ { "Ecircle", 0x24ba, 0 },
+ { "Ecircumflexacute", 0x1ebe, 0 },
+ { "Ecircumflexbelow", 0x1e18, 0 },
+ { "Ecircumflexdotbelow", 0x1ec6, 0 },
+ { "Ecircumflexgrave", 0x1ec0, 0 },
+ { "Ecircumflexhookabove", 0x1ec2, 0 },
+ { "Ecircumflexsmall", 0xf7ea, 0 },
+ { "Ecircumflextilde", 0x1ec4, 0 },
+ { "Ecyrillic", 0x0404, 0 },
+ { "Edblgrave", 0x0204, 0 },
+ { "Edieresissmall", 0xf7eb, 0 },
+ { "Edot", 0x0116, 0 },
+ { "Edotbelow", 0x1eb8, 0 },
+ { "Efcyrillic", 0x0424, 0 },
+ { "Egravesmall", 0xf7e8, 0 },
+ { "Eharmenian", 0x0537, 0 },
+ { "Ehookabove", 0x1eba, 0 },
+ { "Eightroman", 0x2167, 0 },
+ { "Einvertedbreve", 0x0206, 0 },
+ { "Eiotifiedcyrillic", 0x0464, 0 },
+ { "Elcyrillic", 0x041b, 0 },
+ { "Elevenroman", 0x216a, 0 },
+ { "Emacronacute", 0x1e16, 0 },
+ { "Emacrongrave", 0x1e14, 0 },
+ { "Emcyrillic", 0x041c, 0 },
+ { "Emonospace", 0xff25, 0 },
+ { "Encyrillic", 0x041d, 0 },
+ { "Endescendercyrillic", 0x04a2, 0 },
+ { "Enghecyrillic", 0x04a4, 0 },
+ { "Enhookcyrillic", 0x04c7, 0 },
+ { "Eopen", 0x0190, 0 },
+ { "Ercyrillic", 0x0420, 0 },
+ { "Ereversed", 0x018e, 0 },
+ { "Ereversedcyrillic", 0x042d, 0 },
+ { "Escyrillic", 0x0421, 0 },
+ { "Esdescendercyrillic", 0x04aa, 0 },
+ { "Esh", 0x01a9, 0 },
+ { "Esmall", 0xf765, 0 },
+ { "Etarmenian", 0x0538, 0 },
+ { "Ethsmall", 0xf7f0, 0 },
+ { "Etilde", 0x1ebc, 0 },
+ { "Etildebelow", 0x1e1a, 0 },
+ { "Ezh", 0x01b7, 0 },
+ { "Ezhcaron", 0x01ee, 0 },
+ { "Ezhreversed", 0x01b8, 0 },
+ { "Fcircle", 0x24bb, 0 },
+ { "Fdotaccent", 0x1e1e, 0 },
+ { "Feharmenian", 0x0556, 0 },
+ { "Feicoptic", 0x03e4, 0 },
+ { "Fhook", 0x0191, 0 },
+ { "Fitacyrillic", 0x0472, 0 },
+ { "Fiveroman", 0x2164, 0 },
+ { "Fmonospace", 0xff26, 0 },
+ { "Fourroman", 0x2163, 0 },
+ { "Fsmall", 0xf766, 0 },
+ { "GBsquare", 0x3387, 0 },
+ { "Gacute", 0x01f4, 0 },
+ { "Gammaafrican", 0x0194, 0 },
+ { "Gangiacoptic", 0x03ea, 0 },
+ { "Gcedilla", 0x0122, 0 },
+ { "Gcircle", 0x24bc, 0 },
+ { "Gdot", 0x0120, 0 },
+ { "Gecyrillic", 0x0413, 0 },
+ { "Ghadarmenian", 0x0542, 0 },
+ { "Ghemiddlehookcyrillic", 0x0494, 0 },
+ { "Ghestrokecyrillic", 0x0492, 0 },
+ { "Gheupturncyrillic", 0x0490, 0 },
+ { "Ghook", 0x0193, 0 },
+ { "Gimarmenian", 0x0533, 0 },
+ { "Gjecyrillic", 0x0403, 0 },
+ { "Gmacron", 0x1e20, 0 },
+ { "Gmonospace", 0xff27, 0 },
+ { "Grave", 0xf6ce, 0 },
+ { "Gravesmall", 0xf760, 0 },
+ { "Gsmall", 0xf767, 0 },
+ { "Gsmallhook", 0x029b, 0 },
+ { "Gstroke", 0x01e4, 0 },
+ { "HPsquare", 0x33cb, 0 },
+ { "Haabkhasiancyrillic", 0x04a8, 0 },
+ { "Hadescendercyrillic", 0x04b2, 0 },
+ { "Hardsigncyrillic", 0x042a, 0 },
+ { "Hbrevebelow", 0x1e2a, 0 },
+ { "Hcedilla", 0x1e28, 0 },
+ { "Hcircle", 0x24bd, 0 },
+ { "Hdieresis", 0x1e26, 0 },
+ { "Hdotaccent", 0x1e22, 0 },
+ { "Hdotbelow", 0x1e24, 0 },
+ { "Hmonospace", 0xff28, 0 },
+ { "Hoarmenian", 0x0540, 0 },
+ { "Horicoptic", 0x03e8, 0 },
+ { "Hsmall", 0xf768, 0 },
+ { "Hungarumlaut", 0xf6cf, 0 },
+ { "Hungarumlautsmall", 0xf6f8, 0 },
+ { "Hzsquare", 0x3390, 0 },
+ { "IAcyrillic", 0x042f, 0 },
+ { "IUcyrillic", 0x042e, 0 },
+ { "Iacutesmall", 0xf7ed, 0 },
+ { "Icaron", 0x01cf, 0 },
+ { "Icircle", 0x24be, 0 },
+ { "Icircumflexsmall", 0xf7ee, 0 },
+ { "Icyrillic", 0x0406, 0 },
+ { "Idblgrave", 0x0208, 0 },
+ { "Idieresisacute", 0x1e2e, 0 },
+ { "Idieresiscyrillic", 0x04e4, 0 },
+ { "Idieresissmall", 0xf7ef, 0 },
+ { "Idot", 0x0130, 0 },
+ { "Idotbelow", 0x1eca, 0 },
+ { "Iebrevecyrillic", 0x04d6, 0 },
+ { "Iecyrillic", 0x0415, 0 },
+ { "Igravesmall", 0xf7ec, 0 },
+ { "Ihookabove", 0x1ec8, 0 },
+ { "Iicyrillic", 0x0418, 0 },
+ { "Iinvertedbreve", 0x020a, 0 },
+ { "Iishortcyrillic", 0x0419, 0 },
+ { "Imacroncyrillic", 0x04e2, 0 },
+ { "Imonospace", 0xff29, 0 },
+ { "Iniarmenian", 0x053b, 0 },
+ { "Iocyrillic", 0x0401, 0 },
+ { "Iotaafrican", 0x0196, 0 },
+ { "Ismall", 0xf769, 0 },
+ { "Istroke", 0x0197, 0 },
+ { "Itildebelow", 0x1e2c, 0 },
+ { "Izhitsacyrillic", 0x0474, 0 },
+ { "Izhitsadblgravecyrillic", 0x0476, 0 },
+ { "Jaarmenian", 0x0541, 0 },
+ { "Jcircle", 0x24bf, 0 },
+ { "Jecyrillic", 0x0408, 0 },
+ { "Jheharmenian", 0x054b, 0 },
+ { "Jmonospace", 0xff2a, 0 },
+ { "Jsmall", 0xf76a, 0 },
+ { "KBsquare", 0x3385, 0 },
+ { "KKsquare", 0x33cd, 0 },
+ { "Kabashkircyrillic", 0x04a0, 0 },
+ { "Kacute", 0x1e30, 0 },
+ { "Kacyrillic", 0x041a, 0 },
+ { "Kadescendercyrillic", 0x049a, 0 },
+ { "Kahookcyrillic", 0x04c3, 0 },
+ { "Kastrokecyrillic", 0x049e, 0 },
+ { "Kaverticalstrokecyrillic", 0x049c, 0 },
+ { "Kcaron", 0x01e8, 0 },
+ { "Kcedilla", 0x0136, 0 },
+ { "Kcircle", 0x24c0, 0 },
+ { "Kdotbelow", 0x1e32, 0 },
+ { "Keharmenian", 0x0554, 0 },
+ { "Kenarmenian", 0x053f, 0 },
+ { "Khacyrillic", 0x0425, 0 },
+ { "Kheicoptic", 0x03e6, 0 },
+ { "Khook", 0x0198, 0 },
+ { "Kjecyrillic", 0x040c, 0 },
+ { "Klinebelow", 0x1e34, 0 },
+ { "Kmonospace", 0xff2b, 0 },
+ { "Koppacyrillic", 0x0480, 0 },
+ { "Koppagreek", 0x03de, 0 },
+ { "Ksicyrillic", 0x046e, 0 },
+ { "Ksmall", 0xf76b, 0 },
+ { "LJ", 0x01c7, 0 },
+ { "LL", 0xf6bf, 0 },
+ { "Lcedilla", 0x013b, 0 },
+ { "Lcircle", 0x24c1, 0 },
+ { "Lcircumflexbelow", 0x1e3c, 0 },
+ { "Ldotaccent", 0x013f, 0 },
+ { "Ldotbelow", 0x1e36, 0 },
+ { "Ldotbelowmacron", 0x1e38, 0 },
+ { "Liwnarmenian", 0x053c, 0 },
+ { "Lj", 0x01c8, 0 },
+ { "Ljecyrillic", 0x0409, 0 },
+ { "Llinebelow", 0x1e3a, 0 },
+ { "Lmonospace", 0xff2c, 0 },
+ { "Lslashsmall", 0xf6f9, 0 },
+ { "Lsmall", 0xf76c, 0 },
+ { "MBsquare", 0x3386, 0 },
+ { "Macron", 0xf6d0, 0 },
+ { "Macronsmall", 0xf7af, 0 },
+ { "Macute", 0x1e3e, 0 },
+ { "Mcircle", 0x24c2, 0 },
+ { "Mdotaccent", 0x1e40, 0 },
+ { "Mdotbelow", 0x1e42, 0 },
+ { "Menarmenian", 0x0544, 0 },
+ { "Mmonospace", 0xff2d, 0 },
+ { "Msmall", 0xf76d, 0 },
+ { "Mturned", 0x019c, 0 },
+ { "NJ", 0x01ca, 0 },
+ { "Ncedilla", 0x0145, 0 },
+ { "Ncircle", 0x24c3, 0 },
+ { "Ncircumflexbelow", 0x1e4a, 0 },
+ { "Ndotaccent", 0x1e44, 0 },
+ { "Ndotbelow", 0x1e46, 0 },
+ { "Nhookleft", 0x019d, 0 },
+ { "Nineroman", 0x2168, 0 },
+ { "Nj", 0x01cb, 0 },
+ { "Njecyrillic", 0x040a, 0 },
+ { "Nlinebelow", 0x1e48, 0 },
+ { "Nmonospace", 0xff2e, 0 },
+ { "Nowarmenian", 0x0546, 0 },
+ { "Nsmall", 0xf76e, 0 },
+ { "Ntildesmall", 0xf7f1, 0 },
+ { "OEsmall", 0xf6fa, 0 },
+ { "Oacutesmall", 0xf7f3, 0 },
+ { "Obarredcyrillic", 0x04e8, 0 },
+ { "Obarreddieresiscyrillic", 0x04ea, 0 },
+ { "Ocaron", 0x01d1, 0 },
+ { "Ocenteredtilde", 0x019f, 0 },
+ { "Ocircle", 0x24c4, 0 },
+ { "Ocircumflexacute", 0x1ed0, 0 },
+ { "Ocircumflexdotbelow", 0x1ed8, 0 },
+ { "Ocircumflexgrave", 0x1ed2, 0 },
+ { "Ocircumflexhookabove", 0x1ed4, 0 },
+ { "Ocircumflexsmall", 0xf7f4, 0 },
+ { "Ocircumflextilde", 0x1ed6, 0 },
+ { "Ocyrillic", 0x041e, 0 },
+ { "Odblacute", 0x0150, 0 },
+ { "Odblgrave", 0x020c, 0 },
+ { "Odieresiscyrillic", 0x04e6, 0 },
+ { "Odieresissmall", 0xf7f6, 0 },
+ { "Odotbelow", 0x1ecc, 0 },
+ { "Ogoneksmall", 0xf6fb, 0 },
+ { "Ogravesmall", 0xf7f2, 0 },
+ { "Oharmenian", 0x0555, 0 },
+ { "Ohm", 0x2126, 0 },
+ { "Ohookabove", 0x1ece, 0 },
+ { "Ohornacute", 0x1eda, 0 },
+ { "Ohorndotbelow", 0x1ee2, 0 },
+ { "Ohorngrave", 0x1edc, 0 },
+ { "Ohornhookabove", 0x1ede, 0 },
+ { "Ohorntilde", 0x1ee0, 0 },
+ { "Oi", 0x01a2, 0 },
+ { "Oinvertedbreve", 0x020e, 0 },
+ { "Omacronacute", 0x1e52, 0 },
+ { "Omacrongrave", 0x1e50, 0 },
+ { "Omegacyrillic", 0x0460, 0 },
+ { "Omegagreek", 0x03a9, 0 },
+ { "Omegaroundcyrillic", 0x047a, 0 },
+ { "Omegatitlocyrillic", 0x047c, 0 },
+ { "Omonospace", 0xff2f, 0 },
+ { "Oneroman", 0x2160, 0 },
+ { "Oogonek", 0x01ea, 0 },
+ { "Oogonekmacron", 0x01ec, 0 },
+ { "Oopen", 0x0186, 0 },
+ { "Oslashsmall", 0xf7f8, 0 },
+ { "Osmall", 0xf76f, 0 },
+ { "Ostrokeacute", 0x01fe, 0 },
+ { "Otcyrillic", 0x047e, 0 },
+ { "Otildeacute", 0x1e4c, 0 },
+ { "Otildedieresis", 0x1e4e, 0 },
+ { "Otildesmall", 0xf7f5, 0 },
+ { "Pacute", 0x1e54, 0 },
+ { "Pcircle", 0x24c5, 0 },
+ { "Pdotaccent", 0x1e56, 0 },
+ { "Pecyrillic", 0x041f, 0 },
+ { "Peharmenian", 0x054a, 0 },
+ { "Pemiddlehookcyrillic", 0x04a6, 0 },
+ { "Phook", 0x01a4, 0 },
+ { "Piwrarmenian", 0x0553, 0 },
+ { "Pmonospace", 0xff30, 0 },
+ { "Psicyrillic", 0x0470, 0 },
+ { "Psmall", 0xf770, 0 },
+ { "Qcircle", 0x24c6, 0 },
+ { "Qmonospace", 0xff31, 0 },
+ { "Qsmall", 0xf771, 0 },
+ { "Raarmenian", 0x054c, 0 },
+ { "Rcedilla", 0x0156, 0 },
+ { "Rcircle", 0x24c7, 0 },
+ { "Rdblgrave", 0x0210, 0 },
+ { "Rdotaccent", 0x1e58, 0 },
+ { "Rdotbelow", 0x1e5a, 0 },
+ { "Rdotbelowmacron", 0x1e5c, 0 },
+ { "Reharmenian", 0x0550, 0 },
+ { "Ringsmall", 0xf6fc, 0 },
+ { "Rinvertedbreve", 0x0212, 0 },
+ { "Rlinebelow", 0x1e5e, 0 },
+ { "Rmonospace", 0xff32, 0 },
+ { "Rsmall", 0xf772, 0 },
+ { "Rsmallinverted", 0x0281, 0 },
+ { "Rsmallinvertedsuperior", 0x02b6, 0 },
+ { "Sacutedotaccent", 0x1e64, 0 },
+ { "Sampigreek", 0x03e0, 0 },
+ { "Scarondotaccent", 0x1e66, 0 },
+ { "Scaronsmall", 0xf6fd, 0 },
+ { "Schwa", 0x018f, 0 },
+ { "Schwacyrillic", 0x04d8, 0 },
+ { "Schwadieresiscyrillic", 0x04da, 0 },
+ { "Scircle", 0x24c8, 0 },
+ { "Sdotaccent", 0x1e60, 0 },
+ { "Sdotbelow", 0x1e62, 0 },
+ { "Sdotbelowdotaccent", 0x1e68, 0 },
+ { "Seharmenian", 0x054d, 0 },
+ { "Sevenroman", 0x2166, 0 },
+ { "Shaarmenian", 0x0547, 0 },
+ { "Shacyrillic", 0x0428, 0 },
+ { "Shchacyrillic", 0x0429, 0 },
+ { "Sheicoptic", 0x03e2, 0 },
+ { "Shhacyrillic", 0x04ba, 0 },
+ { "Shimacoptic", 0x03ec, 0 },
+ { "Sixroman", 0x2165, 0 },
+ { "Smonospace", 0xff33, 0 },
+ { "Softsigncyrillic", 0x042c, 0 },
+ { "Ssmall", 0xf773, 0 },
+ { "Stigmagreek", 0x03da, 0 },
+ { "Tcedilla", 0x0162, 0 },
+ { "Tcircle", 0x24c9, 0 },
+ { "Tcircumflexbelow", 0x1e70, 0 },
+ { "Tdotaccent", 0x1e6a, 0 },
+ { "Tdotbelow", 0x1e6c, 0 },
+ { "Tecyrillic", 0x0422, 0 },
+ { "Tedescendercyrillic", 0x04ac, 0 },
+ { "Tenroman", 0x2169, 0 },
+ { "Tetsecyrillic", 0x04b4, 0 },
+ { "Thook", 0x01ac, 0 },
+ { "Thornsmall", 0xf7fe, 0 },
+ { "Threeroman", 0x2162, 0 },
+ { "Tildesmall", 0xf6fe, 0 },
+ { "Tiwnarmenian", 0x054f, 0 },
+ { "Tlinebelow", 0x1e6e, 0 },
+ { "Tmonospace", 0xff34, 0 },
+ { "Toarmenian", 0x0539, 0 },
+ { "Tonefive", 0x01bc, 0 },
+ { "Tonesix", 0x0184, 0 },
+ { "Tonetwo", 0x01a7, 0 },
+ { "Tretroflexhook", 0x01ae, 0 },
+ { "Tsecyrillic", 0x0426, 0 },
+ { "Tshecyrillic", 0x040b, 0 },
+ { "Tsmall", 0xf774, 0 },
+ { "Twelveroman", 0x216b, 0 },
+ { "Tworoman", 0x2161, 0 },
+ { "Uacutesmall", 0xf7fa, 0 },
+ { "Ucaron", 0x01d3, 0 },
+ { "Ucircle", 0x24ca, 0 },
+ { "Ucircumflexbelow", 0x1e76, 0 },
+ { "Ucircumflexsmall", 0xf7fb, 0 },
+ { "Ucyrillic", 0x0423, 0 },
+ { "Udblacute", 0x0170, 0 },
+ { "Udblgrave", 0x0214, 0 },
+ { "Udieresisacute", 0x01d7, 0 },
+ { "Udieresisbelow", 0x1e72, 0 },
+ { "Udieresiscaron", 0x01d9, 0 },
+ { "Udieresiscyrillic", 0x04f0, 0 },
+ { "Udieresisgrave", 0x01db, 0 },
+ { "Udieresismacron", 0x01d5, 0 },
+ { "Udieresissmall", 0xf7fc, 0 },
+ { "Udotbelow", 0x1ee4, 0 },
+ { "Ugravesmall", 0xf7f9, 0 },
+ { "Uhookabove", 0x1ee6, 0 },
+ { "Uhornacute", 0x1ee8, 0 },
+ { "Uhorndotbelow", 0x1ef0, 0 },
+ { "Uhorngrave", 0x1eea, 0 },
+ { "Uhornhookabove", 0x1eec, 0 },
+ { "Uhorntilde", 0x1eee, 0 },
+ { "Uhungarumlautcyrillic", 0x04f2, 0 },
+ { "Uinvertedbreve", 0x0216, 0 },
+ { "Ukcyrillic", 0x0478, 0 },
+ { "Umacroncyrillic", 0x04ee, 0 },
+ { "Umacrondieresis", 0x1e7a, 0 },
+ { "Umonospace", 0xff35, 0 },
+ { "Upsilonacutehooksymbolgreek", 0x03d3, 0 },
+ { "Upsilonafrican", 0x01b1, 0 },
+ { "Upsilondieresishooksymbolgreek", 0x03d4, 0 },
+ { "Upsilonhooksymbol", 0x03d2, 0 },
+ { "Ushortcyrillic", 0x040e, 0 },
+ { "Usmall", 0xf775, 0 },
+ { "Ustraightcyrillic", 0x04ae, 0 },
+ { "Ustraightstrokecyrillic", 0x04b0, 0 },
+ { "Utildeacute", 0x1e78, 0 },
+ { "Utildebelow", 0x1e74, 0 },
+ { "Vcircle", 0x24cb, 0 },
+ { "Vdotbelow", 0x1e7e, 0 },
+ { "Vecyrillic", 0x0412, 0 },
+ { "Vewarmenian", 0x054e, 0 },
+ { "Vhook", 0x01b2, 0 },
+ { "Vmonospace", 0xff36, 0 },
+ { "Voarmenian", 0x0548, 0 },
+ { "Vsmall", 0xf776, 0 },
+ { "Vtilde", 0x1e7c, 0 },
+ { "Wcircle", 0x24cc, 0 },
+ { "Wdotaccent", 0x1e86, 0 },
+ { "Wdotbelow", 0x1e88, 0 },
+ { "Wmonospace", 0xff37, 0 },
+ { "Wsmall", 0xf777, 0 },
+ { "Xcircle", 0x24cd, 0 },
+ { "Xdieresis", 0x1e8c, 0 },
+ { "Xdotaccent", 0x1e8a, 0 },
+ { "Xeharmenian", 0x053d, 0 },
+ { "Xmonospace", 0xff38, 0 },
+ { "Xsmall", 0xf778, 0 },
+ { "Yacutesmall", 0xf7fd, 0 },
+ { "Yatcyrillic", 0x0462, 0 },
+ { "Ycircle", 0x24ce, 0 },
+ { "Ydieresissmall", 0xf7ff, 0 },
+ { "Ydotaccent", 0x1e8e, 0 },
+ { "Ydotbelow", 0x1ef4, 0 },
+ { "Yericyrillic", 0x042b, 0 },
+ { "Yerudieresiscyrillic", 0x04f8, 0 },
+ { "Yhook", 0x01b3, 0 },
+ { "Yhookabove", 0x1ef6, 0 },
+ { "Yiarmenian", 0x0545, 0 },
+ { "Yicyrillic", 0x0407, 0 },
+ { "Yiwnarmenian", 0x0552, 0 },
+ { "Ymonospace", 0xff39, 0 },
+ { "Ysmall", 0xf779, 0 },
+ { "Ytilde", 0x1ef8, 0 },
+ { "Yusbigcyrillic", 0x046a, 0 },
+ { "Yusbigiotifiedcyrillic", 0x046c, 0 },
+ { "Yuslittlecyrillic", 0x0466, 0 },
+ { "Yuslittleiotifiedcyrillic", 0x0468, 0 },
+ { "Zaarmenian", 0x0536, 0 },
+ { "Zcaronsmall", 0xf6ff, 0 },
+ { "Zcircle", 0x24cf, 0 },
+ { "Zcircumflex", 0x1e90, 0 },
+ { "Zdot", 0x017b, 0 },
+ { "Zdotbelow", 0x1e92, 0 },
+ { "Zecyrillic", 0x0417, 0 },
+ { "Zedescendercyrillic", 0x0498, 0 },
+ { "Zedieresiscyrillic", 0x04de, 0 },
+ { "Zhearmenian", 0x053a, 0 },
+ { "Zhebrevecyrillic", 0x04c1, 0 },
+ { "Zhecyrillic", 0x0416, 0 },
+ { "Zhedescendercyrillic", 0x0496, 0 },
+ { "Zhedieresiscyrillic", 0x04dc, 0 },
+ { "Zlinebelow", 0x1e94, 0 },
+ { "Zmonospace", 0xff3a, 0 },
+ { "Zsmall", 0xf77a, 0 },
+ { "Zstroke", 0x01b5, 0 },
+ { "aabengali", 0x0986, 0 },
+ { "aadeva", 0x0906, 0 },
+ { "aagujarati", 0x0a86, 0 },
+ { "aagurmukhi", 0x0a06, 0 },
+ { "aamatragurmukhi", 0x0a3e, 0 },
+ { "aarusquare", 0x3303, 0 },
+ { "aavowelsignbengali", 0x09be, 0 },
+ { "aavowelsigndeva", 0x093e, 0 },
+ { "aavowelsigngujarati", 0x0abe, 0 },
+ { "abbreviationmarkarmenian", 0x055f, 0 },
+ { "abbreviationsigndeva", 0x0970, 0 },
+ { "abengali", 0x0985, 0 },
+ { "abopomofo", 0x311a, 0 },
+ { "abreveacute", 0x1eaf, 0 },
+ { "abrevecyrillic", 0x04d1, 0 },
+ { "abrevedotbelow", 0x1eb7, 0 },
+ { "abrevegrave", 0x1eb1, 0 },
+ { "abrevehookabove", 0x1eb3, 0 },
+ { "abrevetilde", 0x1eb5, 0 },
+ { "acaron", 0x01ce, 0 },
+ { "acircle", 0x24d0, 0 },
+ { "acircumflexacute", 0x1ea5, 0 },
+ { "acircumflexdotbelow", 0x1ead, 0 },
+ { "acircumflexgrave", 0x1ea7, 0 },
+ { "acircumflexhookabove", 0x1ea9, 0 },
+ { "acircumflextilde", 0x1eab, 0 },
+ { "acutebelowcmb", 0x0317, 0 },
+ { "acutecmb", 0x0301, 0 },
+ { "acutedeva", 0x0954, 0 },
+ { "acutelowmod", 0x02cf, 0 },
+ { "acutetonecmb", 0x0341, 0 },
+ { "acyrillic", 0x0430, 0 },
+ { "adblgrave", 0x0201, 0 },
+ { "addakgurmukhi", 0x0a71, 0 },
+ { "adeva", 0x0905, 0 },
+ { "adieresiscyrillic", 0x04d3, 0 },
+ { "adieresismacron", 0x01df, 0 },
+ { "adotbelow", 0x1ea1, 0 },
+ { "adotmacron", 0x01e1, 0 },
+ { "aekorean", 0x3150, 0 },
+ { "aemacron", 0x01e3, 0 },
+ { "afii08941", 0x20a4, 0 },
+ { "afii10063", 0xf6c4, 0 },
+ { "afii10064", 0xf6c5, 0 },
+ { "afii10192", 0xf6c6, 0 },
+ { "afii10831", 0xf6c7, 0 },
+ { "afii10832", 0xf6c8, 0 },
+ { "afii57694", 0xfb2a, 0 },
+ { "afii57695", 0xfb2b, 0 },
+ { "afii57700", 0xfb4b, 0 },
+ { "afii57705", 0xfb1f, 0 },
+ { "afii57723", 0xfb35, 0 },
+ { "agujarati", 0x0a85, 0 },
+ { "agurmukhi", 0x0a05, 0 },
+ { "ahiragana", 0x3042, 0 },
+ { "ahookabove", 0x1ea3, 0 },
+ { "aibengali", 0x0990, 0 },
+ { "aibopomofo", 0x311e, 0 },
+ { "aideva", 0x0910, 0 },
+ { "aiecyrillic", 0x04d5, 0 },
+ { "aigujarati", 0x0a90, 0 },
+ { "aigurmukhi", 0x0a10, 0 },
+ { "aimatragurmukhi", 0x0a48, 0 },
+ { "ainarabic", 0x0639, 0 },
+ { "ainfinalarabic", 0xfeca, 0 },
+ { "aininitialarabic", 0xfecb, 0 },
+ { "ainmedialarabic", 0xfecc, 0 },
+ { "ainvertedbreve", 0x0203, 0 },
+ { "aivowelsignbengali", 0x09c8, 0 },
+ { "aivowelsigndeva", 0x0948, 0 },
+ { "aivowelsigngujarati", 0x0ac8, 0 },
+ { "akatakana", 0x30a2, 0 },
+ { "akatakanahalfwidth", 0xff71, 0 },
+ { "akorean", 0x314f, 0 },
+ { "alef", 0x05d0, 0 },
+ { "alefarabic", 0x0627, 0 },
+ { "alefdageshhebrew", 0xfb30, 0 },
+ { "aleffinalarabic", 0xfe8e, 0 },
+ { "alefhamzaabovearabic", 0x0623, 0 },
+ { "alefhamzaabovefinalarabic", 0xfe84, 0 },
+ { "alefhamzabelowarabic", 0x0625, 0 },
+ { "alefhamzabelowfinalarabic", 0xfe88, 0 },
+ { "alefhebrew", 0x05d0, 0 },
+ { "aleflamedhebrew", 0xfb4f, 0 },
+ { "alefmaddaabovearabic", 0x0622, 0 },
+ { "alefmaddaabovefinalarabic", 0xfe82, 0 },
+ { "alefmaksuraarabic", 0x0649, 0 },
+ { "alefmaksurafinalarabic", 0xfef0, 0 },
+ { "alefmaksurainitialarabic", 0xfef3, 0 },
+ { "alefmaksuramedialarabic", 0xfef4, 0 },
+ { "alefpatahhebrew", 0xfb2e, 0 },
+ { "alefqamatshebrew", 0xfb2f, 0 },
+ { "allequal", 0x224c, 0 },
+ { "amonospace", 0xff41, 0 },
+ { "ampersandmonospace", 0xff06, 0 },
+ { "ampersandsmall", 0xf726, 0 },
+ { "amsquare", 0x33c2, 0 },
+ { "anbopomofo", 0x3122, 0 },
+ { "angbopomofo", 0x3124, 0 },
+ { "angkhankhuthai", 0x0e5a, 0 },
+ { "anglebracketleft", 0x3008, 0 },
+ { "anglebracketleftvertical", 0xfe3f, 0 },
+ { "anglebracketright", 0x3009, 0 },
+ { "anglebracketrightvertical", 0xfe40, 0 },
+ { "angstrom", 0x212b, 0 },
+ { "anudattadeva", 0x0952, 0 },
+ { "anusvarabengali", 0x0982, 0 },
+ { "anusvaradeva", 0x0902, 0 },
+ { "anusvaragujarati", 0x0a82, 0 },
+ { "apaatosquare", 0x3300, 0 },
+ { "aparen", 0x249c, 0 },
+ { "apostrophearmenian", 0x055a, 0 },
+ { "apostrophemod", 0x02bc, 0 },
+ { "apple", 0xf8ff, 0 },
+ { "approaches", 0x2250, 0 },
+ { "approxequalorimage", 0x2252, 0 },
+ { "approximatelyequal", 0x2245, 0 },
+ { "araeaekorean", 0x318e, 0 },
+ { "araeakorean", 0x318d, 0 },
+ { "arc", 0x2312, 0 },
+ { "arighthalfring", 0x1e9a, 0 },
+ { "aringbelow", 0x1e01, 0 },
+ { "arrowdashdown", 0x21e3, 0 },
+ { "arrowdashleft", 0x21e0, 0 },
+ { "arrowdashright", 0x21e2, 0 },
+ { "arrowdashup", 0x21e1, 0 },
+ { "arrowdownleft", 0x2199, 0 },
+ { "arrowdownright", 0x2198, 0 },
+ { "arrowdownwhite", 0x21e9, 0 },
+ { "arrowheaddownmod", 0x02c5, 0 },
+ { "arrowheadleftmod", 0x02c2, 0 },
+ { "arrowheadrightmod", 0x02c3, 0 },
+ { "arrowheadupmod", 0x02c4, 0 },
+ { "arrowhorizex", 0xf8e7, 0 },
+ { "arrowleftdbl", 0x21d0, 0 },
+ { "arrowleftdblstroke", 0x21cd, 0 },
+ { "arrowleftoverright", 0x21c6, 0 },
+ { "arrowleftwhite", 0x21e6, 0 },
+ { "arrowrightdblstroke", 0x21cf, 0 },
+ { "arrowrightheavy", 0x279e, 0 },
+ { "arrowrightoverleft", 0x21c4, 0 },
+ { "arrowrightwhite", 0x21e8, 0 },
+ { "arrowtableft", 0x21e4, 0 },
+ { "arrowtabright", 0x21e5, 0 },
+ { "arrowupdownbase", 0x21a8, 0 },
+ { "arrowupleft", 0x2196, 0 },
+ { "arrowupleftofdown", 0x21c5, 0 },
+ { "arrowupright", 0x2197, 0 },
+ { "arrowupwhite", 0x21e7, 0 },
+ { "arrowvertex", 0xf8e6, 0 },
+ { "asciicircummonospace", 0xff3e, 0 },
+ { "asciitildemonospace", 0xff5e, 0 },
+ { "ascript", 0x0251, 0 },
+ { "ascriptturned", 0x0252, 0 },
+ { "asmallhiragana", 0x3041, 0 },
+ { "asmallkatakana", 0x30a1, 0 },
+ { "asmallkatakanahalfwidth", 0xff67, 0 },
+ { "asteriskaltonearabic", 0x066d, 0 },
+ { "asteriskarabic", 0x066d, 0 },
+ { "asteriskmonospace", 0xff0a, 0 },
+ { "asterisksmall", 0xfe61, 0 },
+ { "asterism", 0x2042, 0 },
+ { "asuperior", 0xf6e9, 0 },
+ { "asymptoticallyequal", 0x2243, 0 },
+ { "atmonospace", 0xff20, 0 },
+ { "atsmall", 0xfe6b, 0 },
+ { "aturned", 0x0250, 0 },
+ { "aubengali", 0x0994, 0 },
+ { "aubopomofo", 0x3120, 0 },
+ { "audeva", 0x0914, 0 },
+ { "augujarati", 0x0a94, 0 },
+ { "augurmukhi", 0x0a14, 0 },
+ { "aulengthmarkbengali", 0x09d7, 0 },
+ { "aumatragurmukhi", 0x0a4c, 0 },
+ { "auvowelsignbengali", 0x09cc, 0 },
+ { "auvowelsigndeva", 0x094c, 0 },
+ { "auvowelsigngujarati", 0x0acc, 0 },
+ { "avagrahadeva", 0x093d, 0 },
+ { "aybarmenian", 0x0561, 0 },
+ { "ayin", 0x05e2, 0 },
+ { "ayinaltonehebrew", 0xfb20, 0 },
+ { "ayinhebrew", 0x05e2, 0 },
+ { "babengali", 0x09ac, 0 },
+ { "backslashmonospace", 0xff3c, 0 },
+ { "badeva", 0x092c, 0 },
+ { "bagujarati", 0x0aac, 0 },
+ { "bagurmukhi", 0x0a2c, 0 },
+ { "bahiragana", 0x3070, 0 },
+ { "bahtthai", 0x0e3f, 0 },
+ { "bakatakana", 0x30d0, 0 },
+ { "barmonospace", 0xff5c, 0 },
+ { "bbopomofo", 0x3105, 0 },
+ { "bcircle", 0x24d1, 0 },
+ { "bdotaccent", 0x1e03, 0 },
+ { "bdotbelow", 0x1e05, 0 },
+ { "beamedsixteenthnotes", 0x266c, 0 },
+ { "because", 0x2235, 0 },
+ { "becyrillic", 0x0431, 0 },
+ { "beharabic", 0x0628, 0 },
+ { "behfinalarabic", 0xfe90, 0 },
+ { "behinitialarabic", 0xfe91, 0 },
+ { "behiragana", 0x3079, 0 },
+ { "behmedialarabic", 0xfe92, 0 },
+ { "behmeeminitialarabic", 0xfc9f, 0 },
+ { "behmeemisolatedarabic", 0xfc08, 0 },
+ { "behnoonfinalarabic", 0xfc6d, 0 },
+ { "bekatakana", 0x30d9, 0 },
+ { "benarmenian", 0x0562, 0 },
+ { "bet", 0x05d1, 0 },
+ { "betasymbolgreek", 0x03d0, 0 },
+ { "betdagesh", 0xfb31, 0 },
+ { "betdageshhebrew", 0xfb31, 0 },
+ { "bethebrew", 0x05d1, 0 },
+ { "betrafehebrew", 0xfb4c, 0 },
+ { "bhabengali", 0x09ad, 0 },
+ { "bhadeva", 0x092d, 0 },
+ { "bhagujarati", 0x0aad, 0 },
+ { "bhagurmukhi", 0x0a2d, 0 },
+ { "bhook", 0x0253, 0 },
+ { "bihiragana", 0x3073, 0 },
+ { "bikatakana", 0x30d3, 0 },
+ { "bilabialclick", 0x0298, 0 },
+ { "bindigurmukhi", 0x0a02, 0 },
+ { "birusquare", 0x3331, 0 },
+ { "blackcircle", 0x25cf, 0 },
+ { "blackdiamond", 0x25c6, 0 },
+ { "blackdownpointingtriangle", 0x25bc, 0 },
+ { "blackleftpointingpointer", 0x25c4, 0 },
+ { "blackleftpointingtriangle", 0x25c0, 0 },
+ { "blacklenticularbracketleft", 0x3010, 0 },
+ { "blacklenticularbracketleftvertical", 0xfe3b, 0 },
+ { "blacklenticularbracketright", 0x3011, 0 },
+ { "blacklenticularbracketrightvertical", 0xfe3c, 0 },
+ { "blacklowerlefttriangle", 0x25e3, 0 },
+ { "blacklowerrighttriangle", 0x25e2, 0 },
+ { "blackrectangle", 0x25ac, 0 },
+ { "blackrightpointingpointer", 0x25ba, 0 },
+ { "blackrightpointingtriangle", 0x25b6, 0 },
+ { "blacksmallsquare", 0x25aa, 0 },
+ { "blacksmilingface", 0x263b, 0 },
+ { "blacksquare", 0x25a0, 0 },
+ { "blackstar", 0x2605, 0 },
+ { "blackupperlefttriangle", 0x25e4, 0 },
+ { "blackupperrighttriangle", 0x25e5, 0 },
+ { "blackuppointingsmalltriangle", 0x25b4, 0 },
+ { "blackuppointingtriangle", 0x25b2, 0 },
+ { "blank", 0x2423, 0 },
+ { "blinebelow", 0x1e07, 0 },
+ { "bmonospace", 0xff42, 0 },
+ { "bobaimaithai", 0x0e1a, 0 },
+ { "bohiragana", 0x307c, 0 },
+ { "bokatakana", 0x30dc, 0 },
+ { "bparen", 0x249d, 0 },
+ { "bqsquare", 0x33c3, 0 },
+ { "braceex", 0xf8f4, 0 },
+ { "braceleftbt", 0xf8f3, 0 },
+ { "braceleftmid", 0xf8f2, 0 },
+ { "braceleftmonospace", 0xff5b, 0 },
+ { "braceleftsmall", 0xfe5b, 0 },
+ { "bracelefttp", 0xf8f1, 0 },
+ { "braceleftvertical", 0xfe37, 0 },
+ { "bracerightbt", 0xf8fe, 0 },
+ { "bracerightmid", 0xf8fd, 0 },
+ { "bracerightmonospace", 0xff5d, 0 },
+ { "bracerightsmall", 0xfe5c, 0 },
+ { "bracerighttp", 0xf8fc, 0 },
+ { "bracerightvertical", 0xfe38, 0 },
+ { "bracketleftbt", 0xf8f0, 0 },
+ { "bracketleftex", 0xf8ef, 0 },
+ { "bracketleftmonospace", 0xff3b, 0 },
+ { "bracketlefttp", 0xf8ee, 0 },
+ { "bracketrightbt", 0xf8fb, 0 },
+ { "bracketrightex", 0xf8fa, 0 },
+ { "bracketrightmonospace", 0xff3d, 0 },
+ { "bracketrighttp", 0xf8f9, 0 },
+ { "brevebelowcmb", 0x032e, 0 },
+ { "brevecmb", 0x0306, 0 },
+ { "breveinvertedbelowcmb", 0x032f, 0 },
+ { "breveinvertedcmb", 0x0311, 0 },
+ { "breveinverteddoublecmb", 0x0361, 0 },
+ { "bridgebelowcmb", 0x032a, 0 },
+ { "bridgeinvertedbelowcmb", 0x033a, 0 },
+ { "bstroke", 0x0180, 0 },
+ { "bsuperior", 0xf6ea, 0 },
+ { "btopbar", 0x0183, 0 },
+ { "buhiragana", 0x3076, 0 },
+ { "bukatakana", 0x30d6, 0 },
+ { "bulletinverse", 0x25d8, 0 },
+ { "bulletoperator", 0x2219, 0 },
+ { "bullseye", 0x25ce, 0 },
+ { "caarmenian", 0x056e, 0 },
+ { "cabengali", 0x099a, 0 },
+ { "cadeva", 0x091a, 0 },
+ { "cagujarati", 0x0a9a, 0 },
+ { "cagurmukhi", 0x0a1a, 0 },
+ { "calsquare", 0x3388, 0 },
+ { "candrabindubengali", 0x0981, 0 },
+ { "candrabinducmb", 0x0310, 0 },
+ { "candrabindudeva", 0x0901, 0 },
+ { "candrabindugujarati", 0x0a81, 0 },
+ { "capslock", 0x21ea, 0 },
+ { "careof", 0x2105, 0 },
+ { "caronbelowcmb", 0x032c, 0 },
+ { "caroncmb", 0x030c, 0 },
+ { "cbopomofo", 0x3118, 0 },
+ { "ccedillaacute", 0x1e09, 0 },
+ { "ccircle", 0x24d2, 0 },
+ { "ccurl", 0x0255, 0 },
+ { "cdot", 0x010b, 0 },
+ { "cdsquare", 0x33c5, 0 },
+ { "cedillacmb", 0x0327, 0 },
+ { "centigrade", 0x2103, 0 },
+ { "centinferior", 0xf6df, 0 },
+ { "centmonospace", 0xffe0, 0 },
+ { "centoldstyle", 0xf7a2, 0 },
+ { "centsuperior", 0xf6e0, 0 },
+ { "chaarmenian", 0x0579, 0 },
+ { "chabengali", 0x099b, 0 },
+ { "chadeva", 0x091b, 0 },
+ { "chagujarati", 0x0a9b, 0 },
+ { "chagurmukhi", 0x0a1b, 0 },
+ { "chbopomofo", 0x3114, 0 },
+ { "cheabkhasiancyrillic", 0x04bd, 0 },
+ { "checkmark", 0x2713, 0 },
+ { "checyrillic", 0x0447, 0 },
+ { "chedescenderabkhasiancyrillic", 0x04bf, 0 },
+ { "chedescendercyrillic", 0x04b7, 0 },
+ { "chedieresiscyrillic", 0x04f5, 0 },
+ { "cheharmenian", 0x0573, 0 },
+ { "chekhakassiancyrillic", 0x04cc, 0 },
+ { "cheverticalstrokecyrillic", 0x04b9, 0 },
+ { "chieuchacirclekorean", 0x3277, 0 },
+ { "chieuchaparenkorean", 0x3217, 0 },
+ { "chieuchcirclekorean", 0x3269, 0 },
+ { "chieuchkorean", 0x314a, 0 },
+ { "chieuchparenkorean", 0x3209, 0 },
+ { "chochangthai", 0x0e0a, 0 },
+ { "chochanthai", 0x0e08, 0 },
+ { "chochingthai", 0x0e09, 0 },
+ { "chochoethai", 0x0e0c, 0 },
+ { "chook", 0x0188, 0 },
+ { "cieucacirclekorean", 0x3276, 0 },
+ { "cieucaparenkorean", 0x3216, 0 },
+ { "cieuccirclekorean", 0x3268, 0 },
+ { "cieuckorean", 0x3148, 0 },
+ { "cieucparenkorean", 0x3208, 0 },
+ { "cieucuparenkorean", 0x321c, 0 },
+ { "circleot", 0x2299, 0 }, /* Typo in Adobe's glyphlist */
+ { "circledot", 0x2299, 0 }, /* But same typo exists in acrobat */
+ { "circlepostalmark", 0x3036, 0 },
+ { "circlewithlefthalfblack", 0x25d0, 0 },
+ { "circlewithrighthalfblack", 0x25d1, 0 },
+ { "circumflexbelowcmb", 0x032d, 0 },
+ { "circumflexcmb", 0x0302, 0 },
+ { "clear", 0x2327, 0 },
+ { "clickalveolar", 0x01c2, 0 },
+ { "clickdental", 0x01c0, 0 },
+ { "clicklateral", 0x01c1, 0 },
+ { "clickretroflex", 0x01c3, 0 },
+ { "clubsuitblack", 0x2663, 0 },
+ { "clubsuitwhite", 0x2667, 0 },
+ { "cmcubedsquare", 0x33a4, 0 },
+ { "cmonospace", 0xff43, 0 },
+ { "cmsquaredsquare", 0x33a0, 0 },
+ { "coarmenian", 0x0581, 0 },
+ { "colonmonospace", 0xff1a, 0 },
+ { "colonsign", 0x20a1, 0 },
+ { "colonsmall", 0xfe55, 0 },
+ { "colontriangularhalfmod", 0x02d1, 0 },
+ { "colontriangularmod", 0x02d0, 0 },
+ { "commaabovecmb", 0x0313, 0 },
+ { "commaaboverightcmb", 0x0315, 0 },
+ { "commaaccent", 0xf6c3, 0 },
+ { "commaarabic", 0x060c, 0 },
+ { "commaarmenian", 0x055d, 0 },
+ { "commainferior", 0xf6e1, 0 },
+ { "commamonospace", 0xff0c, 0 },
+ { "commareversedabovecmb", 0x0314, 0 },
+ { "commareversedmod", 0x02bd, 0 },
+ { "commasmall", 0xfe50, 0 },
+ { "commasuperior", 0xf6e2, 0 },
+ { "commaturnedabovecmb", 0x0312, 0 },
+ { "commaturnedmod", 0x02bb, 0 },
+ { "compass", 0x263c, 0 },
+ { "contourintegral", 0x222e, 0 },
+ { "control", 0x2303, 0 },
+ { "controlACK", 0x0006, 0 },
+ { "controlBEL", 0x0007, 0 },
+ { "controlBS", 0x0008, 0 },
+ { "controlCAN", 0x0018, 0 },
+ { "controlCR", 0x000d, 0 },
+ { "controlDC1", 0x0011, 0 },
+ { "controlDC2", 0x0012, 0 },
+ { "controlDC3", 0x0013, 0 },
+ { "controlDC4", 0x0014, 0 },
+ { "controlDEL", 0x007f, 0 },
+ { "controlDLE", 0x0010, 0 },
+ { "controlEM", 0x0019, 0 },
+ { "controlENQ", 0x0005, 0 },
+ { "controlEOT", 0x0004, 0 },
+ { "controlESC", 0x001b, 0 },
+ { "controlETB", 0x0017, 0 },
+ { "controlETX", 0x0003, 0 },
+ { "controlFF", 0x000c, 0 },
+ { "controlFS", 0x001c, 0 },
+ { "controlGS", 0x001d, 0 },
+ { "controlHT", 0x0009, 0 },
+ { "controlLF", 0x000a, 0 },
+ { "controlNAK", 0x0015, 0 },
+ { "controlRS", 0x001e, 0 },
+ { "controlSI", 0x000f, 0 },
+ { "controlSO", 0x000e, 0 },
+ { "controlSOT", 0x0002, 0 },
+ { "controlSTX", 0x0001, 0 },
+ { "controlSUB", 0x001a, 0 },
+ { "controlSYN", 0x0016, 0 },
+ { "controlUS", 0x001f, 0 },
+ { "controlVT", 0x000b, 0 },
+ { "copyrightsans", 0xf8e9, 0 },
+ { "copyrightserif", 0xf6d9, 0 },
+ { "cornerbracketleft", 0x300c, 0 },
+ { "cornerbracketlefthalfwidth", 0xff62, 0 },
+ { "cornerbracketleftvertical", 0xfe41, 0 },
+ { "cornerbracketright", 0x300d, 0 },
+ { "cornerbracketrighthalfwidth", 0xff63, 0 },
+ { "cornerbracketrightvertical", 0xfe42, 0 },
+ { "corporationsquare", 0x337f, 0 },
+ { "cosquare", 0x33c7, 0 },
+ { "coverkgsquare", 0x33c6, 0 },
+ { "cparen", 0x249e, 0 },
+ { "cruzeiro", 0x20a2, 0 },
+ { "cstretched", 0x0297, 0 },
+ { "curlyand", 0x22cf, 0 },
+ { "curlyor", 0x22ce, 0 },
+ { "cyrBreve", 0xf6d1, 0 },
+ { "cyrFlex", 0xf6d2, 0 },
+ { "cyrbreve", 0xf6d4, 0 },
+ { "cyrflex", 0xf6d5, 0 },
+ { "daarmenian", 0x0564, 0 },
+ { "dabengali", 0x09a6, 0 },
+ { "dadarabic", 0x0636, 0 },
+ { "dadeva", 0x0926, 0 },
+ { "dadfinalarabic", 0xfebe, 0 },
+ { "dadinitialarabic", 0xfebf, 0 },
+ { "dadmedialarabic", 0xfec0, 0 },
+ { "dagesh", 0x05bc, 0 },
+ { "dageshhebrew", 0x05bc, 0 },
+ { "dagujarati", 0x0aa6, 0 },
+ { "dagurmukhi", 0x0a26, 0 },
+ { "dahiragana", 0x3060, 0 },
+ { "dakatakana", 0x30c0, 0 },
+ { "dalarabic", 0x062f, 0 },
+ { "dalet", 0x05d3, 0 },
+ { "daletdagesh", 0xfb33, 0 },
+ { "daletdageshhebrew", 0xfb33, 0 },
+ { "dalethatafpatah", 0x05d3, 0 },
+ { "dalethatafpatahhebrew", 0x05d3, 0 },
+ { "dalethatafsegol", 0x05d3, 0 },
+ { "dalethatafsegolhebrew", 0x05d3, 0 },
+ { "dalethebrew", 0x05d3, 0 },
+ { "dalethiriq", 0x05d3, 0 },
+ { "dalethiriqhebrew", 0x05d3, 0 },
+ { "daletholam", 0x05d3, 0 },
+ { "daletholamhebrew", 0x05d3, 0 },
+ { "daletpatah", 0x05d3, 0 },
+ { "daletpatahhebrew", 0x05d3, 0 },
+ { "daletqamats", 0x05d3, 0 },
+ { "daletqamatshebrew", 0x05d3, 0 },
+ { "daletqubuts", 0x05d3, 0 },
+ { "daletqubutshebrew", 0x05d3, 0 },
+ { "daletsegol", 0x05d3, 0 },
+ { "daletsegolhebrew", 0x05d3, 0 },
+ { "daletsheva", 0x05d3, 0 },
+ { "daletshevahebrew", 0x05d3, 0 },
+ { "dalettsere", 0x05d3, 0 },
+ { "dalettserehebrew", 0x05d3, 0 },
+ { "dalfinalarabic", 0xfeaa, 0 },
+ { "dammaarabic", 0x064f, 0 },
+ { "dammalowarabic", 0x064f, 0 },
+ { "dammatanaltonearabic", 0x064c, 0 },
+ { "dammatanarabic", 0x064c, 0 },
+ { "danda", 0x0964, 0 },
+ { "dargahebrew", 0x05a7, 0 },
+ { "dargalefthebrew", 0x05a7, 0 },
+ { "dasiapneumatacyrilliccmb", 0x0485, 0 },
+ { "dblGrave", 0xf6d3, 0 },
+ { "dblanglebracketleft", 0x300a, 0 },
+ { "dblanglebracketleftvertical", 0xfe3d, 0 },
+ { "dblanglebracketright", 0x300b, 0 },
+ { "dblanglebracketrightvertical", 0xfe3e, 0 },
+ { "dblarchinvertedbelowcmb", 0x032b, 0 },
+ { "dblarrowleft", 0x21d4, 0 },
+ { "dblarrowright", 0x21d2, 0 },
+ { "dbldanda", 0x0965, 0 },
+ { "dblgrave", 0xf6d6, 0 },
+ { "dblgravecmb", 0x030f, 0 },
+ { "dblintegral", 0x222c, 0 },
+ { "dbllowline", 0x2017, 0 },
+ { "dbllowlinecmb", 0x0333, 0 },
+ { "dbloverlinecmb", 0x033f, 0 },
+ { "dblprimemod", 0x02ba, 0 },
+ { "dblverticalbar", 0x2016, 0 },
+ { "dblverticallineabovecmb", 0x030e, 0 },
+ { "dbopomofo", 0x3109, 0 },
+ { "dbsquare", 0x33c8, 0 },
+ { "dcedilla", 0x1e11, 0 },
+ { "dcircle", 0x24d3, 0 },
+ { "dcircumflexbelow", 0x1e13, 0 },
+ { "ddabengali", 0x09a1, 0 },
+ { "ddadeva", 0x0921, 0 },
+ { "ddagujarati", 0x0aa1, 0 },
+ { "ddagurmukhi", 0x0a21, 0 },
+ { "ddalarabic", 0x0688, 0 },
+ { "ddalfinalarabic", 0xfb89, 0 },
+ { "dddhadeva", 0x095c, 0 },
+ { "ddhabengali", 0x09a2, 0 },
+ { "ddhadeva", 0x0922, 0 },
+ { "ddhagujarati", 0x0aa2, 0 },
+ { "ddhagurmukhi", 0x0a22, 0 },
+ { "ddotaccent", 0x1e0b, 0 },
+ { "ddotbelow", 0x1e0d, 0 },
+ { "decimalseparatorarabic", 0x066b, 0 },
+ { "decimalseparatorpersian", 0x066b, 0 },
+ { "decyrillic", 0x0434, 0 },
+ { "dehihebrew", 0x05ad, 0 },
+ { "dehiragana", 0x3067, 0 },
+ { "deicoptic", 0x03ef, 0 },
+ { "dekatakana", 0x30c7, 0 },
+ { "deleteleft", 0x232b, 0 },
+ { "deleteright", 0x2326, 0 },
+ { "deltaturned", 0x018d, 0 },
+ { "denominatorminusonenumeratorbengali", 0x09f8, 0 },
+ { "dezh", 0x02a4, 0 },
+ { "dhabengali", 0x09a7, 0 },
+ { "dhadeva", 0x0927, 0 },
+ { "dhagujarati", 0x0aa7, 0 },
+ { "dhagurmukhi", 0x0a27, 0 },
+ { "dhook", 0x0257, 0 },
+ { "dialytikatonos", 0x0385, 0 },
+ { "dialytikatonoscmb", 0x0344, 0 },
+ { "diamondsuitwhite", 0x2662, 0 },
+ { "dieresisacute", 0xf6d7, 0 },
+ { "dieresisbelowcmb", 0x0324, 0 },
+ { "dieresiscmb", 0x0308, 0 },
+ { "dieresisgrave", 0xf6d8, 0 },
+ { "dihiragana", 0x3062, 0 },
+ { "dikatakana", 0x30c2, 0 },
+ { "dittomark", 0x3003, 0 },
+ { "divides", 0x2223, 0 },
+ { "divisionslash", 0x2215, 0 },
+ { "djecyrillic", 0x0452, 0 },
+ { "dlinebelow", 0x1e0f, 0 },
+ { "dlsquare", 0x3397, 0 },
+ { "dmacron", 0x0111, 0 },
+ { "dmonospace", 0xff44, 0 },
+ { "dochadathai", 0x0e0e, 0 },
+ { "dodekthai", 0x0e14, 0 },
+ { "dohiragana", 0x3069, 0 },
+ { "dokatakana", 0x30c9, 0 },
+ { "dollarinferior", 0xf6e3, 0 },
+ { "dollarmonospace", 0xff04, 0 },
+ { "dollaroldstyle", 0xf724, 0 },
+ { "dollarsmall", 0xfe69, 0 },
+ { "dollarsuperior", 0xf6e4, 0 },
+ { "dorusquare", 0x3326, 0 },
+ { "dotaccentcmb", 0x0307, 0 },
+ { "dotbelowcmb", 0x0323, 0 },
+ { "dotkatakana", 0x30fb, 0 },
+ { "dotlessj", 0x0237, 0 }, /* !!!! AGL Still says this is 0xf6be */
+ { "dotlessjstrokehook", 0x0284, 0 },
+ { "dottedcircle", 0x25cc, 0 },
+ { "doubleyodpatah", 0xfb1f, 0 },
+ { "doubleyodpatahhebrew", 0xfb1f, 0 },
+ { "downtackbelowcmb", 0x031e, 0 },
+ { "downtackmod", 0x02d5, 0 },
+ { "dparen", 0x249f, 0 },
+ { "dsuperior", 0xf6eb, 0 },
+ { "dtail", 0x0256, 0 },
+ { "dtopbar", 0x018c, 0 },
+ { "duhiragana", 0x3065, 0 },
+ { "dukatakana", 0x30c5, 0 },
+ { "dz", 0x01f3, 0 },
+ { "dzaltone", 0x02a3, 0 },
+ { "dzcaron", 0x01c6, 0 },
+ { "dzcurl", 0x02a5, 0 },
+ { "dzeabkhasiancyrillic", 0x04e1, 0 },
+ { "dzecyrillic", 0x0455, 0 },
+ { "dzhecyrillic", 0x045f, 0 },
+ { "earth", 0x2641, 0 },
+ { "ebengali", 0x098f, 0 },
+ { "ebopomofo", 0x311c, 0 },
+ { "ecandradeva", 0x090d, 0 },
+ { "ecandragujarati", 0x0a8d, 0 },
+ { "ecandravowelsigndeva", 0x0945, 0 },
+ { "ecandravowelsigngujarati", 0x0ac5, 0 },
+ { "ecedillabreve", 0x1e1d, 0 },
+ { "echarmenian", 0x0565, 0 },
+ { "echyiwnarmenian", 0x0587, 0 },
+ { "ecircle", 0x24d4, 0 },
+ { "ecircumflexacute", 0x1ebf, 0 },
+ { "ecircumflexbelow", 0x1e19, 0 },
+ { "ecircumflexdotbelow", 0x1ec7, 0 },
+ { "ecircumflexgrave", 0x1ec1, 0 },
+ { "ecircumflexhookabove", 0x1ec3, 0 },
+ { "ecircumflextilde", 0x1ec5, 0 },
+ { "ecyrillic", 0x0454, 0 },
+ { "edblgrave", 0x0205, 0 },
+ { "edeva", 0x090f, 0 },
+ { "edot", 0x0117, 0 },
+ { "edotbelow", 0x1eb9, 0 },
+ { "eegurmukhi", 0x0a0f, 0 },
+ { "eematragurmukhi", 0x0a47, 0 },
+ { "efcyrillic", 0x0444, 0 },
+ { "egujarati", 0x0a8f, 0 },
+ { "eharmenian", 0x0567, 0 },
+ { "ehbopomofo", 0x311d, 0 },
+ { "ehiragana", 0x3048, 0 },
+ { "ehookabove", 0x1ebb, 0 },
+ { "eibopomofo", 0x311f, 0 },
+ { "eightarabic", 0x0668, 0 },
+ { "eightbengali", 0x09ee, 0 },
+ { "eightcircle", 0x2467, 0 },
+ { "eightcircleinversesansserif", 0x2791, 0 },
+ { "eightdeva", 0x096e, 0 },
+ { "eighteencircle", 0x2471, 0 },
+ { "eighteenparen", 0x2485, 0 },
+ { "eighteenperiod", 0x2499, 0 },
+ { "eightgujarati", 0x0aee, 0 },
+ { "eightgurmukhi", 0x0a6e, 0 },
+ { "eighthackarabic", 0x0668, 0 },
+ { "eighthangzhou", 0x3028, 0 },
+ { "eighthnotebeamed", 0x266b, 0 },
+ { "eightideographicparen", 0x3227, 0 },
+ { "eightinferior", 0x2088, 0 },
+ { "eightmonospace", 0xff18, 0 },
+ { "eightoldstyle", 0xf738, 0 },
+ { "eightparen", 0x247b, 0 },
+ { "eightperiod", 0x248f, 0 },
+ { "eightpersian", 0x06f8, 0 },
+ { "eightroman", 0x2177, 0 },
+ { "eightsuperior", 0x2078, 0 },
+ { "eightthai", 0x0e58, 0 },
+ { "einvertedbreve", 0x0207, 0 },
+ { "eiotifiedcyrillic", 0x0465, 0 },
+ { "ekatakana", 0x30a8, 0 },
+ { "ekatakanahalfwidth", 0xff74, 0 },
+ { "ekonkargurmukhi", 0x0a74, 0 },
+ { "ekorean", 0x3154, 0 },
+ { "elcyrillic", 0x043b, 0 },
+ { "elevencircle", 0x246a, 0 },
+ { "elevenparen", 0x247e, 0 },
+ { "elevenperiod", 0x2492, 0 },
+ { "elevenroman", 0x217a, 0 },
+ { "ellipsisvertical", 0x22ee, 0 },
+ { "emacronacute", 0x1e17, 0 },
+ { "emacrongrave", 0x1e15, 0 },
+ { "emcyrillic", 0x043c, 0 },
+ { "emdashvertical", 0xfe31, 0 },
+ { "emonospace", 0xff45, 0 },
+ { "emphasismarkarmenian", 0x055b, 0 },
+ { "enbopomofo", 0x3123, 0 },
+ { "encyrillic", 0x043d, 0 },
+ { "endashvertical", 0xfe32, 0 },
+ { "endescendercyrillic", 0x04a3, 0 },
+ { "engbopomofo", 0x3125, 0 },
+ { "enghecyrillic", 0x04a5, 0 },
+ { "enhookcyrillic", 0x04c8, 0 },
+ { "enspace", 0x2002, 0 },
+ { "eokorean", 0x3153, 0 },
+ { "eopen", 0x025b, 0 },
+ { "eopenclosed", 0x029a, 0 },
+ { "eopenreversed", 0x025c, 0 },
+ { "eopenreversedclosed", 0x025e, 0 },
+ { "eopenreversedhook", 0x025d, 0 },
+ { "eparen", 0x24a0, 0 },
+ { "equalmonospace", 0xff1d, 0 },
+ { "equalsmall", 0xfe66, 0 },
+ { "equalsuperior", 0x207c, 0 },
+ { "erbopomofo", 0x3126, 0 },
+ { "ercyrillic", 0x0440, 0 },
+ { "ereversed", 0x0258, 0 },
+ { "ereversedcyrillic", 0x044d, 0 },
+ { "escyrillic", 0x0441, 0 },
+ { "esdescendercyrillic", 0x04ab, 0 },
+ { "esh", 0x0283, 0 },
+ { "eshcurl", 0x0286, 0 },
+ { "eshortdeva", 0x090e, 0 },
+ { "eshortvowelsigndeva", 0x0946, 0 },
+ { "eshreversedloop", 0x01aa, 0 },
+ { "eshsquatreversed", 0x0285, 0 },
+ { "esmallhiragana", 0x3047, 0 },
+ { "esmallkatakana", 0x30a7, 0 },
+ { "esmallkatakanahalfwidth", 0xff6a, 0 },
+ { "esuperior", 0xf6ec, 0 },
+ { "etarmenian", 0x0568, 0 },
+ { "etilde", 0x1ebd, 0 },
+ { "etildebelow", 0x1e1b, 0 },
+ { "etnahtafoukhhebrew", 0x0591, 0 },
+ { "etnahtafoukhlefthebrew", 0x0591, 0 },
+ { "etnahtahebrew", 0x0591, 0 },
+ { "etnahtalefthebrew", 0x0591, 0 },
+ { "eturned", 0x01dd, 0 },
+ { "eukorean", 0x3161, 0 },
+ { "euro", 0x20ac, 0 },
+ { "evowelsignbengali", 0x09c7, 0 },
+ { "evowelsigndeva", 0x0947, 0 },
+ { "evowelsigngujarati", 0x0ac7, 0 },
+ { "exclamarmenian", 0x055c, 0 },
+ { "exclamdownsmall", 0xf7a1, 0 },
+ { "exclammonospace", 0xff01, 0 },
+ { "exclamsmall", 0xf721, 0 },
+ { "ezh", 0x0292, 0 },
+ { "ezhcaron", 0x01ef, 0 },
+ { "ezhcurl", 0x0293, 0 },
+ { "ezhreversed", 0x01b9, 0 },
+ { "ezhtail", 0x01ba, 0 },
+ { "fadeva", 0x095e, 0 },
+ { "fagurmukhi", 0x0a5e, 0 },
+ { "fahrenheit", 0x2109, 0 },
+ { "fathaarabic", 0x064e, 0 },
+ { "fathalowarabic", 0x064e, 0 },
+ { "fathatanarabic", 0x064b, 0 },
+ { "fbopomofo", 0x3108, 0 },
+ { "fcircle", 0x24d5, 0 },
+ { "fdotaccent", 0x1e1f, 0 },
+ { "feharabic", 0x0641, 0 },
+ { "feharmenian", 0x0586, 0 },
+ { "fehfinalarabic", 0xfed2, 0 },
+ { "fehinitialarabic", 0xfed3, 0 },
+ { "fehmedialarabic", 0xfed4, 0 },
+ { "feicoptic", 0x03e5, 0 },
+ { "ff", 0xfb00, 0 },
+ { "ffi", 0xfb03, 0 },
+ { "ffl", 0xfb04, 0 },
+ { "fi", 0xfb01, 0 },
+ { "fifteencircle", 0x246e, 0 },
+ { "fifteenparen", 0x2482, 0 },
+ { "fifteenperiod", 0x2496, 0 },
+ { "finalkaf", 0x05da, 0 },
+ { "finalkafdagesh", 0xfb3a, 0 },
+ { "finalkafdageshhebrew", 0xfb3a, 0 },
+ { "finalkafhebrew", 0x05da, 0 },
+ { "finalkafqamats", 0x05da, 0 },
+ { "finalkafqamatshebrew", 0x05da, 0 },
+ { "finalkafsheva", 0x05da, 0 },
+ { "finalkafshevahebrew", 0x05da, 0 },
+ { "finalmem", 0x05dd, 0 },
+ { "finalmemhebrew", 0x05dd, 0 },
+ { "finalnun", 0x05df, 0 },
+ { "finalnunhebrew", 0x05df, 0 },
+ { "finalpe", 0x05e3, 0 },
+ { "finalpehebrew", 0x05e3, 0 },
+ { "finaltsadi", 0x05e5, 0 },
+ { "finaltsadihebrew", 0x05e5, 0 },
+ { "firsttonechinese", 0x02c9, 0 },
+ { "fisheye", 0x25c9, 0 },
+ { "fitacyrillic", 0x0473, 0 },
+ { "fivearabic", 0x0665, 0 },
+ { "fivebengali", 0x09eb, 0 },
+ { "fivecircle", 0x2464, 0 },
+ { "fivecircleinversesansserif", 0x278e, 0 },
+ { "fivedeva", 0x096b, 0 },
+ { "fivegujarati", 0x0aeb, 0 },
+ { "fivegurmukhi", 0x0a6b, 0 },
+ { "fivehackarabic", 0x0665, 0 },
+ { "fivehangzhou", 0x3025, 0 },
+ { "fiveideographicparen", 0x3224, 0 },
+ { "fiveinferior", 0x2085, 0 },
+ { "fivemonospace", 0xff15, 0 },
+ { "fiveoldstyle", 0xf735, 0 },
+ { "fiveparen", 0x2478, 0 },
+ { "fiveperiod", 0x248c, 0 },
+ { "fivepersian", 0x06f5, 0 },
+ { "fiveroman", 0x2174, 0 },
+ { "fivesuperior", 0x2075, 0 },
+ { "fivethai", 0x0e55, 0 },
+ { "fl", 0xfb02, 0 },
+ { "fmonospace", 0xff46, 0 },
+ { "fmsquare", 0x3399, 0 },
+ { "fofanthai", 0x0e1f, 0 },
+ { "fofathai", 0x0e1d, 0 },
+ { "fongmanthai", 0x0e4f, 0 },
+ { "forall", 0x2200, 0 },
+ { "fourarabic", 0x0664, 0 },
+ { "fourbengali", 0x09ea, 0 },
+ { "fourcircle", 0x2463, 0 },
+ { "fourcircleinversesansserif", 0x278d, 0 },
+ { "fourdeva", 0x096a, 0 },
+ { "fourgujarati", 0x0aea, 0 },
+ { "fourgurmukhi", 0x0a6a, 0 },
+ { "fourhackarabic", 0x0664, 0 },
+ { "fourhangzhou", 0x3024, 0 },
+ { "fourideographicparen", 0x3223, 0 },
+ { "fourinferior", 0x2084, 0 },
+ { "fourmonospace", 0xff14, 0 },
+ { "fournumeratorbengali", 0x09f7, 0 },
+ { "fouroldstyle", 0xf734, 0 },
+ { "fourparen", 0x2477, 0 },
+ { "fourperiod", 0x248b, 0 },
+ { "fourpersian", 0x06f4, 0 },
+ { "fourroman", 0x2173, 0 },
+ { "foursuperior", 0x2074, 0 },
+ { "fourteencircle", 0x246d, 0 },
+ { "fourteenparen", 0x2481, 0 },
+ { "fourteenperiod", 0x2495, 0 },
+ { "fourthai", 0x0e54, 0 },
+ { "fourthtonechinese", 0x02cb, 0 },
+ { "fparen", 0x24a1, 0 },
+ { "gabengali", 0x0997, 0 },
+ { "gacute", 0x01f5, 0 },
+ { "gadeva", 0x0917, 0 },
+ { "gafarabic", 0x06af, 0 },
+ { "gaffinalarabic", 0xfb93, 0 },
+ { "gafinitialarabic", 0xfb94, 0 },
+ { "gafmedialarabic", 0xfb95, 0 },
+ { "gagujarati", 0x0a97, 0 },
+ { "gagurmukhi", 0x0a17, 0 },
+ { "gahiragana", 0x304c, 0 },
+ { "gakatakana", 0x30ac, 0 },
+ { "gammalatinsmall", 0x0263, 0 },
+ { "gammasuperior", 0x02e0, 0 },
+ { "gangiacoptic", 0x03eb, 0 },
+ { "gbopomofo", 0x310d, 0 },
+ { "gcedilla", 0x0123, 0 },
+ { "gcircle", 0x24d6, 0 },
+ { "gdot", 0x0121, 0 },
+ { "gecyrillic", 0x0433, 0 },
+ { "gehiragana", 0x3052, 0 },
+ { "gekatakana", 0x30b2, 0 },
+ { "geometricallyequal", 0x2251, 0 },
+ { "gereshaccenthebrew", 0x059c, 0 },
+ { "gereshhebrew", 0x05f3, 0 },
+ { "gereshmuqdamhebrew", 0x059d, 0 },
+ { "gershayimaccenthebrew", 0x059e, 0 },
+ { "gershayimhebrew", 0x05f4, 0 },
+ { "getamark", 0x3013, 0 },
+ { "ghabengali", 0x0998, 0 },
+ { "ghadarmenian", 0x0572, 0 },
+ { "ghadeva", 0x0918, 0 },
+ { "ghagujarati", 0x0a98, 0 },
+ { "ghagurmukhi", 0x0a18, 0 },
+ { "ghainarabic", 0x063a, 0 },
+ { "ghainfinalarabic", 0xfece, 0 },
+ { "ghaininitialarabic", 0xfecf, 0 },
+ { "ghainmedialarabic", 0xfed0, 0 },
+ { "ghemiddlehookcyrillic", 0x0495, 0 },
+ { "ghestrokecyrillic", 0x0493, 0 },
+ { "gheupturncyrillic", 0x0491, 0 },
+ { "ghhadeva", 0x095a, 0 },
+ { "ghhagurmukhi", 0x0a5a, 0 },
+ { "ghook", 0x0260, 0 },
+ { "ghzsquare", 0x3393, 0 },
+ { "gihiragana", 0x304e, 0 },
+ { "gikatakana", 0x30ae, 0 },
+ { "gimarmenian", 0x0563, 0 },
+ { "gimel", 0x05d2, 0 },
+ { "gimeldagesh", 0xfb32, 0 },
+ { "gimeldageshhebrew", 0xfb32, 0 },
+ { "gimelhebrew", 0x05d2, 0 },
+ { "gjecyrillic", 0x0453, 0 },
+ { "glottalinvertedstroke", 0x01be, 0 },
+ { "glottalstop", 0x0294, 0 },
+ { "glottalstopinverted", 0x0296, 0 },
+ { "glottalstopmod", 0x02c0, 0 },
+ { "glottalstopreversed", 0x0295, 0 },
+ { "glottalstopreversedmod", 0x02c1, 0 },
+ { "glottalstopreversedsuperior", 0x02e4, 0 },
+ { "glottalstopstroke", 0x02a1, 0 },
+ { "glottalstopstrokereversed", 0x02a2, 0 },
+ { "gmacron", 0x1e21, 0 },
+ { "gmonospace", 0xff47, 0 },
+ { "gohiragana", 0x3054, 0 },
+ { "gokatakana", 0x30b4, 0 },
+ { "gparen", 0x24a2, 0 },
+ { "gpasquare", 0x33ac, 0 },
+ { "gravebelowcmb", 0x0316, 0 },
+ { "gravecmb", 0x0300, 0 },
+ { "gravedeva", 0x0953, 0 },
+ { "gravelowmod", 0x02ce, 0 },
+ { "gravemonospace", 0xff40, 0 },
+ { "gravetonecmb", 0x0340, 0 },
+ { "greaterequalorless", 0x22db, 0 },
+ { "greatermonospace", 0xff1e, 0 },
+ { "greaterorequivalent", 0x2273, 0 },
+ { "greaterorless", 0x2277, 0 },
+ { "greateroverequal", 0x2267, 0 },
+ { "greatersmall", 0xfe65, 0 },
+ { "gscript", 0x0261, 0 },
+ { "gstroke", 0x01e5, 0 },
+ { "guhiragana", 0x3050, 0 },
+ { "gukatakana", 0x30b0, 0 },
+ { "guramusquare", 0x3318, 0 },
+ { "gysquare", 0x33c9, 0 },
+ { "haabkhasiancyrillic", 0x04a9, 0 },
+ { "haaltonearabic", 0x06c1, 0 },
+ { "habengali", 0x09b9, 0 },
+ { "hadescendercyrillic", 0x04b3, 0 },
+ { "hadeva", 0x0939, 0 },
+ { "hagujarati", 0x0ab9, 0 },
+ { "hagurmukhi", 0x0a39, 0 },
+ { "haharabic", 0x062d, 0 },
+ { "hahfinalarabic", 0xfea2, 0 },
+ { "hahinitialarabic", 0xfea3, 0 },
+ { "hahiragana", 0x306f, 0 },
+ { "hahmedialarabic", 0xfea4, 0 },
+ { "haitusquare", 0x332a, 0 },
+ { "hakatakana", 0x30cf, 0 },
+ { "hakatakanahalfwidth", 0xff8a, 0 },
+ { "halantgurmukhi", 0x0a4d, 0 },
+ { "hamzaarabic", 0x0621, 0 },
+ { "hamzadammaarabic", 0x0621, 0 },
+ { "hamzadammatanarabic", 0x0621, 0 },
+ { "hamzafathaarabic", 0x0621, 0 },
+ { "hamzafathatanarabic", 0x0621, 0 },
+ { "hamzalowarabic", 0x0621, 0 },
+ { "hamzalowkasraarabic", 0x0621, 0 },
+ { "hamzalowkasratanarabic", 0x0621, 0 },
+ { "hamzasukunarabic", 0x0621, 0 },
+ { "hangulfiller", 0x3164, 0 },
+ { "hardsigncyrillic", 0x044a, 0 },
+ { "harpoonleftbarbup", 0x21bc, 0 },
+ { "harpoonrightbarbup", 0x21c0, 0 },
+ { "hasquare", 0x33ca, 0 },
+ { "hatafpatah", 0x05b2, 0 },
+ { "hatafpatah16", 0x05b2, 0 },
+ { "hatafpatah23", 0x05b2, 0 },
+ { "hatafpatah2f", 0x05b2, 0 },
+ { "hatafpatahhebrew", 0x05b2, 0 },
+ { "hatafpatahnarrowhebrew", 0x05b2, 0 },
+ { "hatafpatahquarterhebrew", 0x05b2, 0 },
+ { "hatafpatahwidehebrew", 0x05b2, 0 },
+ { "hatafqamats", 0x05b3, 0 },
+ { "hatafqamats1b", 0x05b3, 0 },
+ { "hatafqamats28", 0x05b3, 0 },
+ { "hatafqamats34", 0x05b3, 0 },
+ { "hatafqamatshebrew", 0x05b3, 0 },
+ { "hatafqamatsnarrowhebrew", 0x05b3, 0 },
+ { "hatafqamatsquarterhebrew", 0x05b3, 0 },
+ { "hatafqamatswidehebrew", 0x05b3, 0 },
+ { "hatafsegol", 0x05b1, 0 },
+ { "hatafsegol17", 0x05b1, 0 },
+ { "hatafsegol24", 0x05b1, 0 },
+ { "hatafsegol30", 0x05b1, 0 },
+ { "hatafsegolhebrew", 0x05b1, 0 },
+ { "hatafsegolnarrowhebrew", 0x05b1, 0 },
+ { "hatafsegolquarterhebrew", 0x05b1, 0 },
+ { "hatafsegolwidehebrew", 0x05b1, 0 },
+ { "hbopomofo", 0x310f, 0 },
+ { "hbrevebelow", 0x1e2b, 0 },
+ { "hcedilla", 0x1e29, 0 },
+ { "hcircle", 0x24d7, 0 },
+ { "hdieresis", 0x1e27, 0 },
+ { "hdotaccent", 0x1e23, 0 },
+ { "hdotbelow", 0x1e25, 0 },
+ { "he", 0x05d4, 0 },
+ { "heartsuitblack", 0x2665, 0 },
+ { "heartsuitwhite", 0x2661, 0 },
+ { "hedagesh", 0xfb34, 0 },
+ { "hedageshhebrew", 0xfb34, 0 },
+ { "hehaltonearabic", 0x06c1, 0 },
+ { "heharabic", 0x0647, 0 },
+ { "hehebrew", 0x05d4, 0 },
+ { "hehfinalaltonearabic", 0xfba7, 0 },
+ { "hehfinalalttwoarabic", 0xfeea, 0 },
+ { "hehfinalarabic", 0xfeea, 0 },
+ { "hehhamzaabovefinalarabic", 0xfba5, 0 },
+ { "hehhamzaaboveisolatedarabic", 0xfba4, 0 },
+ { "hehinitialaltonearabic", 0xfba8, 0 },
+ { "hehinitialarabic", 0xfeeb, 0 },
+ { "hehiragana", 0x3078, 0 },
+ { "hehmedialaltonearabic", 0xfba9, 0 },
+ { "hehmedialarabic", 0xfeec, 0 },
+ { "heiseierasquare", 0x337b, 0 },
+ { "hekatakana", 0x30d8, 0 },
+ { "hekatakanahalfwidth", 0xff8d, 0 },
+ { "hekutaarusquare", 0x3336, 0 },
+ { "henghook", 0x0267, 0 },
+ { "herutusquare", 0x3339, 0 },
+ { "het", 0x05d7, 0 },
+ { "hethebrew", 0x05d7, 0 },
+ { "hhook", 0x0266, 0 },
+ { "hhooksuperior", 0x02b1, 0 },
+ { "hieuhacirclekorean", 0x327b, 0 },
+ { "hieuhaparenkorean", 0x321b, 0 },
+ { "hieuhcirclekorean", 0x326d, 0 },
+ { "hieuhkorean", 0x314e, 0 },
+ { "hieuhparenkorean", 0x320d, 0 },
+ { "hihiragana", 0x3072, 0 },
+ { "hikatakana", 0x30d2, 0 },
+ { "hikatakanahalfwidth", 0xff8b, 0 },
+ { "hiriq", 0x05b4, 0 },
+ { "hiriq14", 0x05b4, 0 },
+ { "hiriq21", 0x05b4, 0 },
+ { "hiriq2d", 0x05b4, 0 },
+ { "hiriqhebrew", 0x05b4, 0 },
+ { "hiriqnarrowhebrew", 0x05b4, 0 },
+ { "hiriqquarterhebrew", 0x05b4, 0 },
+ { "hiriqwidehebrew", 0x05b4, 0 },
+ { "hlinebelow", 0x1e96, 0 },
+ { "hmonospace", 0xff48, 0 },
+ { "hoarmenian", 0x0570, 0 },
+ { "hohipthai", 0x0e2b, 0 },
+ { "hohiragana", 0x307b, 0 },
+ { "hokatakana", 0x30db, 0 },
+ { "hokatakanahalfwidth", 0xff8e, 0 },
+ { "holam", 0x05b9, 0 },
+ { "holam19", 0x05b9, 0 },
+ { "holam26", 0x05b9, 0 },
+ { "holam32", 0x05b9, 0 },
+ { "holamhebrew", 0x05b9, 0 },
+ { "holamnarrowhebrew", 0x05b9, 0 },
+ { "holamquarterhebrew", 0x05b9, 0 },
+ { "holamwidehebrew", 0x05b9, 0 },
+ { "honokhukthai", 0x0e2e, 0 },
+ { "hookcmb", 0x0309, 0 },
+ { "hookpalatalizedbelowcmb", 0x0321, 0 },
+ { "hookretroflexbelowcmb", 0x0322, 0 },
+ { "hoonsquare", 0x3342, 0 },
+ { "horicoptic", 0x03e9, 0 },
+ { "horizontalbar", 0x2015, 0 },
+ { "horncmb", 0x031b, 0 },
+ { "hotsprings", 0x2668, 0 },
+ { "hparen", 0x24a3, 0 },
+ { "hsuperior", 0x02b0, 0 },
+ { "hturned", 0x0265, 0 },
+ { "huhiragana", 0x3075, 0 },
+ { "huiitosquare", 0x3333, 0 },
+ { "hukatakana", 0x30d5, 0 },
+ { "hukatakanahalfwidth", 0xff8c, 0 },
+ { "hungarumlautcmb", 0x030b, 0 },
+ { "hv", 0x0195, 0 },
+ { "hypheninferior", 0xf6e5, 0 },
+ { "hyphenmonospace", 0xff0d, 0 },
+ { "hyphensmall", 0xfe63, 0 },
+ { "hyphensuperior", 0xf6e6, 0 },
+ { "hyphentwo", 0x2010, 0 },
+ { "iacyrillic", 0x044f, 0 },
+ { "ibengali", 0x0987, 0 },
+ { "ibopomofo", 0x3127, 0 },
+ { "icaron", 0x01d0, 0 },
+ { "icircle", 0x24d8, 0 },
+ { "icyrillic", 0x0456, 0 },
+ { "idblgrave", 0x0209, 0 },
+ { "ideographearthcircle", 0x328f, 0 },
+ { "ideographfirecircle", 0x328b, 0 },
+ { "ideographicallianceparen", 0x323f, 0 },
+ { "ideographiccallparen", 0x323a, 0 },
+ { "ideographiccentrecircle", 0x32a5, 0 },
+ { "ideographicclose", 0x3006, 0 },
+ { "ideographiccomma", 0x3001, 0 },
+ { "ideographiccommaleft", 0xff64, 0 },
+ { "ideographiccongratulationparen", 0x3237, 0 },
+ { "ideographiccorrectcircle", 0x32a3, 0 },
+ { "ideographicearthparen", 0x322f, 0 },
+ { "ideographicenterpriseparen", 0x323d, 0 },
+ { "ideographicexcellentcircle", 0x329d, 0 },
+ { "ideographicfestivalparen", 0x3240, 0 },
+ { "ideographicfinancialcircle", 0x3296, 0 },
+ { "ideographicfinancialparen", 0x3236, 0 },
+ { "ideographicfireparen", 0x322b, 0 },
+ { "ideographichaveparen", 0x3232, 0 },
+ { "ideographichighcircle", 0x32a4, 0 },
+ { "ideographiciterationmark", 0x3005, 0 },
+ { "ideographiclaborcircle", 0x3298, 0 },
+ { "ideographiclaborparen", 0x3238, 0 },
+ { "ideographicleftcircle", 0x32a7, 0 },
+ { "ideographiclowcircle", 0x32a6, 0 },
+ { "ideographicmedicinecircle", 0x32a9, 0 },
+ { "ideographicmetalparen", 0x322e, 0 },
+ { "ideographicmoonparen", 0x322a, 0 },
+ { "ideographicnameparen", 0x3234, 0 },
+ { "ideographicperiod", 0x3002, 0 },
+ { "ideographicprintcircle", 0x329e, 0 },
+ { "ideographicreachparen", 0x3243, 0 },
+ { "ideographicrepresentparen", 0x3239, 0 },
+ { "ideographicresourceparen", 0x323e, 0 },
+ { "ideographicrightcircle", 0x32a8, 0 },
+ { "ideographicsecretcircle", 0x3299, 0 },
+ { "ideographicselfparen", 0x3242, 0 },
+ { "ideographicsocietyparen", 0x3233, 0 },
+ { "ideographicspace", 0x3000, 0 },
+ { "ideographicspecialparen", 0x3235, 0 },
+ { "ideographicstockparen", 0x3231, 0 },
+ { "ideographicstudyparen", 0x323b, 0 },
+ { "ideographicsunparen", 0x3230, 0 },
+ { "ideographicsuperviseparen", 0x323c, 0 },
+ { "ideographicwaterparen", 0x322c, 0 },
+ { "ideographicwoodparen", 0x322d, 0 },
+ { "ideographiczero", 0x3007, 0 },
+ { "ideographmetalcircle", 0x328e, 0 },
+ { "ideographmooncircle", 0x328a, 0 },
+ { "ideographnamecircle", 0x3294, 0 },
+ { "ideographsuncircle", 0x3290, 0 },
+ { "ideographwatercircle", 0x328c, 0 },
+ { "ideographwoodcircle", 0x328d, 0 },
+ { "ideva", 0x0907, 0 },
+ { "idieresisacute", 0x1e2f, 0 },
+ { "idieresiscyrillic", 0x04e5, 0 },
+ { "idotbelow", 0x1ecb, 0 },
+ { "iebrevecyrillic", 0x04d7, 0 },
+ { "iecyrillic", 0x0435, 0 },
+ { "ieungacirclekorean", 0x3275, 0 },
+ { "ieungaparenkorean", 0x3215, 0 },
+ { "ieungcirclekorean", 0x3267, 0 },
+ { "ieungkorean", 0x3147, 0 },
+ { "ieungparenkorean", 0x3207, 0 },
+ { "igujarati", 0x0a87, 0 },
+ { "igurmukhi", 0x0a07, 0 },
+ { "ihiragana", 0x3044, 0 },
+ { "ihookabove", 0x1ec9, 0 },
+ { "iibengali", 0x0988, 0 },
+ { "iicyrillic", 0x0438, 0 },
+ { "iideva", 0x0908, 0 },
+ { "iigujarati", 0x0a88, 0 },
+ { "iigurmukhi", 0x0a08, 0 },
+ { "iimatragurmukhi", 0x0a40, 0 },
+ { "iinvertedbreve", 0x020b, 0 },
+ { "iishortcyrillic", 0x0439, 0 },
+ { "iivowelsignbengali", 0x09c0, 0 },
+ { "iivowelsigndeva", 0x0940, 0 },
+ { "iivowelsigngujarati", 0x0ac0, 0 },
+ { "ikatakana", 0x30a4, 0 },
+ { "ikatakanahalfwidth", 0xff72, 0 },
+ { "ikorean", 0x3163, 0 },
+ { "ilde", 0x02dc, 0 },
+ { "iluyhebrew", 0x05ac, 0 },
+ { "imacroncyrillic", 0x04e3, 0 },
+ { "imageorapproximatelyequal", 0x2253, 0 },
+ { "imatragurmukhi", 0x0a3f, 0 },
+ { "imonospace", 0xff49, 0 },
+ { "increment", 0x2206, 0 },
+ { "iniarmenian", 0x056b, 0 },
+ { "integralbottom", 0x2321, 0 },
+ { "integralex", 0xf8f5, 0 },
+ { "integraltop", 0x2320, 0 },
+ { "intisquare", 0x3305, 0 },
+ { "iocyrillic", 0x0451, 0 },
+ { "iotalatin", 0x0269, 0 },
+ { "iparen", 0x24a4, 0 },
+ { "irigurmukhi", 0x0a72, 0 },
+ { "ismallhiragana", 0x3043, 0 },
+ { "ismallkatakana", 0x30a3, 0 },
+ { "ismallkatakanahalfwidth", 0xff68, 0 },
+ { "issharbengali", 0x09fa, 0 },
+ { "istroke", 0x0268, 0 },
+ { "isuperior", 0xf6ed, 0 },
+ { "iterationhiragana", 0x309d, 0 },
+ { "iterationkatakana", 0x30fd, 0 },
+ { "itildebelow", 0x1e2d, 0 },
+ { "iubopomofo", 0x3129, 0 },
+ { "iucyrillic", 0x044e, 0 },
+ { "ivowelsignbengali", 0x09bf, 0 },
+ { "ivowelsigndeva", 0x093f, 0 },
+ { "ivowelsigngujarati", 0x0abf, 0 },
+ { "izhitsacyrillic", 0x0475, 0 },
+ { "izhitsadblgravecyrillic", 0x0477, 0 },
+ { "jaarmenian", 0x0571, 0 },
+ { "jabengali", 0x099c, 0 },
+ { "jadeva", 0x091c, 0 },
+ { "jagujarati", 0x0a9c, 0 },
+ { "jagurmukhi", 0x0a1c, 0 },
+ { "jbopomofo", 0x3110, 0 },
+ { "jcaron", 0x01f0, 0 },
+ { "jcircle", 0x24d9, 0 },
+ { "jcrossedtail", 0x029d, 0 },
+ { "jdotlessstroke", 0x025f, 0 },
+ { "jecyrillic", 0x0458, 0 },
+ { "jeemarabic", 0x062c, 0 },
+ { "jeemfinalarabic", 0xfe9e, 0 },
+ { "jeeminitialarabic", 0xfe9f, 0 },
+ { "jeemmedialarabic", 0xfea0, 0 },
+ { "jeharabic", 0x0698, 0 },
+ { "jehfinalarabic", 0xfb8b, 0 },
+ { "jhabengali", 0x099d, 0 },
+ { "jhadeva", 0x091d, 0 },
+ { "jhagujarati", 0x0a9d, 0 },
+ { "jhagurmukhi", 0x0a1d, 0 },
+ { "jheharmenian", 0x057b, 0 },
+ { "jis", 0x3004, 0 },
+ { "jmonospace", 0xff4a, 0 },
+ { "jparen", 0x24a5, 0 },
+ { "jsuperior", 0x02b2, 0 },
+ { "kabashkircyrillic", 0x04a1, 0 },
+ { "kabengali", 0x0995, 0 },
+ { "kacute", 0x1e31, 0 },
+ { "kacyrillic", 0x043a, 0 },
+ { "kadescendercyrillic", 0x049b, 0 },
+ { "kadeva", 0x0915, 0 },
+ { "kaf", 0x05db, 0 },
+ { "kafarabic", 0x0643, 0 },
+ { "kafdagesh", 0xfb3b, 0 },
+ { "kafdageshhebrew", 0xfb3b, 0 },
+ { "kaffinalarabic", 0xfeda, 0 },
+ { "kafhebrew", 0x05db, 0 },
+ { "kafinitialarabic", 0xfedb, 0 },
+ { "kafmedialarabic", 0xfedc, 0 },
+ { "kafrafehebrew", 0xfb4d, 0 },
+ { "kagujarati", 0x0a95, 0 },
+ { "kagurmukhi", 0x0a15, 0 },
+ { "kahiragana", 0x304b, 0 },
+ { "kahookcyrillic", 0x04c4, 0 },
+ { "kakatakana", 0x30ab, 0 },
+ { "kakatakanahalfwidth", 0xff76, 0 },
+ { "kappasymbolgreek", 0x03f0, 0 },
+ { "kapyeounmieumkorean", 0x3171, 0 },
+ { "kapyeounphieuphkorean", 0x3184, 0 },
+ { "kapyeounpieupkorean", 0x3178, 0 },
+ { "kapyeounssangpieupkorean", 0x3179, 0 },
+ { "karoriisquare", 0x330d, 0 },
+ { "kashidaautoarabic", 0x0640, 0 },
+ { "kashidaautonosidebearingarabic", 0x0640, 0 },
+ { "kasmallkatakana", 0x30f5, 0 },
+ { "kasquare", 0x3384, 0 },
+ { "kasraarabic", 0x0650, 0 },
+ { "kasratanarabic", 0x064d, 0 },
+ { "kastrokecyrillic", 0x049f, 0 },
+ { "katahiraprolongmarkhalfwidth", 0xff70, 0 },
+ { "kaverticalstrokecyrillic", 0x049d, 0 },
+ { "kbopomofo", 0x310e, 0 },
+ { "kcalsquare", 0x3389, 0 },
+ { "kcaron", 0x01e9, 0 },
+ { "kcedilla", 0x0137, 0 },
+ { "kcircle", 0x24da, 0 },
+ { "kdotbelow", 0x1e33, 0 },
+ { "keharmenian", 0x0584, 0 },
+ { "kehiragana", 0x3051, 0 },
+ { "kekatakana", 0x30b1, 0 },
+ { "kekatakanahalfwidth", 0xff79, 0 },
+ { "kenarmenian", 0x056f, 0 },
+ { "kesmallkatakana", 0x30f6, 0 },
+ { "khabengali", 0x0996, 0 },
+ { "khacyrillic", 0x0445, 0 },
+ { "khadeva", 0x0916, 0 },
+ { "khagujarati", 0x0a96, 0 },
+ { "khagurmukhi", 0x0a16, 0 },
+ { "khaharabic", 0x062e, 0 },
+ { "khahfinalarabic", 0xfea6, 0 },
+ { "khahinitialarabic", 0xfea7, 0 },
+ { "khahmedialarabic", 0xfea8, 0 },
+ { "kheicoptic", 0x03e7, 0 },
+ { "khhadeva", 0x0959, 0 },
+ { "khhagurmukhi", 0x0a59, 0 },
+ { "khieukhacirclekorean", 0x3278, 0 },
+ { "khieukhaparenkorean", 0x3218, 0 },
+ { "khieukhcirclekorean", 0x326a, 0 },
+ { "khieukhkorean", 0x314b, 0 },
+ { "khieukhparenkorean", 0x320a, 0 },
+ { "khokhaithai", 0x0e02, 0 },
+ { "khokhonthai", 0x0e05, 0 },
+ { "khokhuatthai", 0x0e03, 0 },
+ { "khokhwaithai", 0x0e04, 0 },
+ { "khomutthai", 0x0e5b, 0 },
+ { "khook", 0x0199, 0 },
+ { "khorakhangthai", 0x0e06, 0 },
+ { "khzsquare", 0x3391, 0 },
+ { "kihiragana", 0x304d, 0 },
+ { "kikatakana", 0x30ad, 0 },
+ { "kikatakanahalfwidth", 0xff77, 0 },
+ { "kiroguramusquare", 0x3315, 0 },
+ { "kiromeetorusquare", 0x3316, 0 },
+ { "kirosquare", 0x3314, 0 },
+ { "kiyeokacirclekorean", 0x326e, 0 },
+ { "kiyeokaparenkorean", 0x320e, 0 },
+ { "kiyeokcirclekorean", 0x3260, 0 },
+ { "kiyeokkorean", 0x3131, 0 },
+ { "kiyeokparenkorean", 0x3200, 0 },
+ { "kiyeoksioskorean", 0x3133, 0 },
+ { "kjecyrillic", 0x045c, 0 },
+ { "klinebelow", 0x1e35, 0 },
+ { "klsquare", 0x3398, 0 },
+ { "kmcubedsquare", 0x33a6, 0 },
+ { "kmonospace", 0xff4b, 0 },
+ { "kmsquaredsquare", 0x33a2, 0 },
+ { "kohiragana", 0x3053, 0 },
+ { "kohmsquare", 0x33c0, 0 },
+ { "kokaithai", 0x0e01, 0 },
+ { "kokatakana", 0x30b3, 0 },
+ { "kokatakanahalfwidth", 0xff7a, 0 },
+ { "kooposquare", 0x331e, 0 },
+ { "koppacyrillic", 0x0481, 0 },
+ { "koreanstandardsymbol", 0x327f, 0 },
+ { "koroniscmb", 0x0343, 0 },
+ { "kparen", 0x24a6, 0 },
+ { "kpasquare", 0x33aa, 0 },
+ { "ksicyrillic", 0x046f, 0 },
+ { "ktsquare", 0x33cf, 0 },
+ { "kturned", 0x029e, 0 },
+ { "kuhiragana", 0x304f, 0 },
+ { "kukatakana", 0x30af, 0 },
+ { "kukatakanahalfwidth", 0xff78, 0 },
+ { "kvsquare", 0x33b8, 0 },
+ { "kwsquare", 0x33be, 0 },
+ { "labengali", 0x09b2, 0 },
+ { "ladeva", 0x0932, 0 },
+ { "lagujarati", 0x0ab2, 0 },
+ { "lagurmukhi", 0x0a32, 0 },
+ { "lakkhangyaothai", 0x0e45, 0 },
+ { "lamaleffinalarabic", 0xfefc, 0 },
+ { "lamalefhamzaabovefinalarabic", 0xfef8, 0 },
+ { "lamalefhamzaaboveisolatedarabic", 0xfef7, 0 },
+ { "lamalefhamzabelowfinalarabic", 0xfefa, 0 },
+ { "lamalefhamzabelowisolatedarabic", 0xfef9, 0 },
+ { "lamalefisolatedarabic", 0xfefb, 0 },
+ { "lamalefmaddaabovefinalarabic", 0xfef6, 0 },
+ { "lamalefmaddaaboveisolatedarabic", 0xfef5, 0 },
+ { "lamarabic", 0x0644, 0 },
+ { "lambdastroke", 0x019b, 0 },
+ { "lamed", 0x05dc, 0 },
+ { "lameddagesh", 0xfb3c, 0 },
+ { "lameddageshhebrew", 0xfb3c, 0 },
+ { "lamedhebrew", 0x05dc, 0 },
+ { "lamedholam", 0x05dc, 0 },
+ { "lamedholamdagesh", 0x05dc, 0 },
+ { "lamedholamdageshhebrew", 0x05dc, 0 },
+ { "lamedholamhebrew", 0x05dc, 0 },
+ { "lamfinalarabic", 0xfede, 0 },
+ { "lamhahinitialarabic", 0xfcca, 0 },
+ { "laminitialarabic", 0xfedf, 0 },
+ { "lamjeeminitialarabic", 0xfcc9, 0 },
+ { "lamkhahinitialarabic", 0xfccb, 0 },
+ { "lamlamhehisolatedarabic", 0xfdf2, 0 },
+ { "lammedialarabic", 0xfee0, 0 },
+ { "lammeemhahinitialarabic", 0xfd88, 0 },
+ { "lammeeminitialarabic", 0xfccc, 0 },
+ { "lammeemjeeminitialarabic", 0xfedf, 0 },
+ { "lammeemkhahinitialarabic", 0xfedf, 0 },
+ { "largecircle", 0x25ef, 0 },
+ { "lbar", 0x019a, 0 },
+ { "lbelt", 0x026c, 0 },
+ { "lbopomofo", 0x310c, 0 },
+ { "lcedilla", 0x013c, 0 },
+ { "lcircle", 0x24db, 0 },
+ { "lcircumflexbelow", 0x1e3d, 0 },
+ { "ldotaccent", 0x0140, 0 },
+ { "ldotbelow", 0x1e37, 0 },
+ { "ldotbelowmacron", 0x1e39, 0 },
+ { "leftangleabovecmb", 0x031a, 0 },
+ { "lefttackbelowcmb", 0x0318, 0 },
+ { "lessequalorgreater", 0x22da, 0 },
+ { "lessmonospace", 0xff1c, 0 },
+ { "lessorequivalent", 0x2272, 0 },
+ { "lessorgreater", 0x2276, 0 },
+ { "lessoverequal", 0x2266, 0 },
+ { "lesssmall", 0xfe64, 0 },
+ { "lezh", 0x026e, 0 },
+ { "lhookretroflex", 0x026d, 0 },
+ { "liwnarmenian", 0x056c, 0 },
+ { "lj", 0x01c9, 0 },
+ { "ljecyrillic", 0x0459, 0 },
+ { "ll", 0xf6c0, 0 },
+ { "lladeva", 0x0933, 0 },
+ { "llagujarati", 0x0ab3, 0 },
+ { "llinebelow", 0x1e3b, 0 },
+ { "llladeva", 0x0934, 0 },
+ { "llvocalicbengali", 0x09e1, 0 },
+ { "llvocalicdeva", 0x0961, 0 },
+ { "llvocalicvowelsignbengali", 0x09e3, 0 },
+ { "llvocalicvowelsigndeva", 0x0963, 0 },
+ { "lmiddletilde", 0x026b, 0 },
+ { "lmonospace", 0xff4c, 0 },
+ { "lmsquare", 0x33d0, 0 },
+ { "lochulathai", 0x0e2c, 0 },
+ { "logicalnotreversed", 0x2310, 0 },
+ { "lolingthai", 0x0e25, 0 },
+ { "lowlinecenterline", 0xfe4e, 0 },
+ { "lowlinecmb", 0x0332, 0 },
+ { "lowlinedashed", 0xfe4d, 0 },
+ { "lparen", 0x24a7, 0 },
+ { "lsquare", 0x2113, 0 },
+ { "lsuperior", 0xf6ee, 0 },
+ { "luthai", 0x0e26, 0 },
+ { "lvocalicbengali", 0x098c, 0 },
+ { "lvocalicdeva", 0x090c, 0 },
+ { "lvocalicvowelsignbengali", 0x09e2, 0 },
+ { "lvocalicvowelsigndeva", 0x0962, 0 },
+ { "lxsquare", 0x33d3, 0 },
+ { "mabengali", 0x09ae, 0 },
+ { "macronbelowcmb", 0x0331, 0 },
+ { "macroncmb", 0x0304, 0 },
+ { "macronlowmod", 0x02cd, 0 },
+ { "macronmonospace", 0xffe3, 0 },
+ { "macute", 0x1e3f, 0 },
+ { "madeva", 0x092e, 0 },
+ { "magujarati", 0x0aae, 0 },
+ { "magurmukhi", 0x0a2e, 0 },
+ { "mahapakhhebrew", 0x05a4, 0 },
+ { "mahapakhlefthebrew", 0x05a4, 0 },
+ { "mahiragana", 0x307e, 0 },
+ { "maichattawalowleftthai", 0xf895, 0 },
+ { "maichattawalowrightthai", 0xf894, 0 },
+ { "maichattawathai", 0x0e4b, 0 },
+ { "maichattawaupperleftthai", 0xf893, 0 },
+ { "maieklowleftthai", 0xf88c, 0 },
+ { "maieklowrightthai", 0xf88b, 0 },
+ { "maiekthai", 0x0e48, 0 },
+ { "maiekupperleftthai", 0xf88a, 0 },
+ { "maihanakatleftthai", 0xf884, 0 },
+ { "maihanakatthai", 0x0e31, 0 },
+ { "maitaikhuleftthai", 0xf889, 0 },
+ { "maitaikhuthai", 0x0e47, 0 },
+ { "maitholowleftthai", 0xf88f, 0 },
+ { "maitholowrightthai", 0xf88e, 0 },
+ { "maithothai", 0x0e49, 0 },
+ { "maithoupperleftthai", 0xf88d, 0 },
+ { "maitrilowleftthai", 0xf892, 0 },
+ { "maitrilowrightthai", 0xf891, 0 },
+ { "maitrithai", 0x0e4a, 0 },
+ { "maitriupperleftthai", 0xf890, 0 },
+ { "maiyamokthai", 0x0e46, 0 },
+ { "makatakana", 0x30de, 0 },
+ { "makatakanahalfwidth", 0xff8f, 0 },
+ { "mansyonsquare", 0x3347, 0 },
+ { "maqafhebrew", 0x05be, 0 },
+ { "mars", 0x2642, 0 },
+ { "masoracirclehebrew", 0x05af, 0 },
+ { "masquare", 0x3383, 0 },
+ { "mbopomofo", 0x3107, 0 },
+ { "mbsquare", 0x33d4, 0 },
+ { "mcircle", 0x24dc, 0 },
+ { "mcubedsquare", 0x33a5, 0 },
+ { "mdotaccent", 0x1e41, 0 },
+ { "mdotbelow", 0x1e43, 0 },
+ { "meemarabic", 0x0645, 0 },
+ { "meemfinalarabic", 0xfee2, 0 },
+ { "meeminitialarabic", 0xfee3, 0 },
+ { "meemmedialarabic", 0xfee4, 0 },
+ { "meemmeeminitialarabic", 0xfcd1, 0 },
+ { "meemmeemisolatedarabic", 0xfc48, 0 },
+ { "meetorusquare", 0x334d, 0 },
+ { "mehiragana", 0x3081, 0 },
+ { "meizierasquare", 0x337e, 0 },
+ { "mekatakana", 0x30e1, 0 },
+ { "mekatakanahalfwidth", 0xff92, 0 },
+ { "mem", 0x05de, 0 },
+ { "memdagesh", 0xfb3e, 0 },
+ { "memdageshhebrew", 0xfb3e, 0 },
+ { "memhebrew", 0x05de, 0 },
+ { "menarmenian", 0x0574, 0 },
+ { "merkhahebrew", 0x05a5, 0 },
+ { "merkhakefulahebrew", 0x05a6, 0 },
+ { "merkhakefulalefthebrew", 0x05a6, 0 },
+ { "merkhalefthebrew", 0x05a5, 0 },
+ { "mhook", 0x0271, 0 },
+ { "mhzsquare", 0x3392, 0 },
+ { "middledotkatakanahalfwidth", 0xff65, 0 },
+ { "middot", 0x00b7, 0 },
+ { "mieumacirclekorean", 0x3272, 0 },
+ { "mieumaparenkorean", 0x3212, 0 },
+ { "mieumcirclekorean", 0x3264, 0 },
+ { "mieumkorean", 0x3141, 0 },
+ { "mieumpansioskorean", 0x3170, 0 },
+ { "mieumparenkorean", 0x3204, 0 },
+ { "mieumpieupkorean", 0x316e, 0 },
+ { "mieumsioskorean", 0x316f, 0 },
+ { "mihiragana", 0x307f, 0 },
+ { "mikatakana", 0x30df, 0 },
+ { "mikatakanahalfwidth", 0xff90, 0 },
+ { "minusbelowcmb", 0x0320, 0 },
+ { "minuscircle", 0x2296, 0 },
+ { "minusmod", 0x02d7, 0 },
+ { "minusplus", 0x2213, 0 },
+ { "miribaarusquare", 0x334a, 0 },
+ { "mirisquare", 0x3349, 0 },
+ { "mlonglegturned", 0x0270, 0 },
+ { "mlsquare", 0x3396, 0 },
+ { "mmcubedsquare", 0x33a3, 0 },
+ { "mmonospace", 0xff4d, 0 },
+ { "mmsquaredsquare", 0x339f, 0 },
+ { "mohiragana", 0x3082, 0 },
+ { "mohmsquare", 0x33c1, 0 },
+ { "mokatakana", 0x30e2, 0 },
+ { "mokatakanahalfwidth", 0xff93, 0 },
+ { "molsquare", 0x33d6, 0 },
+ { "momathai", 0x0e21, 0 },
+ { "moverssquare", 0x33a7, 0 },
+ { "moverssquaredsquare", 0x33a8, 0 },
+ { "mparen", 0x24a8, 0 },
+ { "mpasquare", 0x33ab, 0 },
+ { "mssquare", 0x33b3, 0 },
+ { "msuperior", 0xf6ef, 0 },
+ { "mturned", 0x026f, 0 },
+ { "mu1", 0x00b5, 0 },
+ { "muasquare", 0x3382, 0 },
+ { "muchgreater", 0x226b, 0 },
+ { "muchless", 0x226a, 0 },
+ { "mufsquare", 0x338c, 0 },
+ { "mugreek", 0x03bc, 0 },
+ { "mugsquare", 0x338d, 0 },
+ { "muhiragana", 0x3080, 0 },
+ { "mukatakana", 0x30e0, 0 },
+ { "mukatakanahalfwidth", 0xff91, 0 },
+ { "mulsquare", 0x3395, 0 },
+ { "mumsquare", 0x339b, 0 },
+ { "munahhebrew", 0x05a3, 0 },
+ { "munahlefthebrew", 0x05a3, 0 },
+ { "musicflatsign", 0x266d, 0 },
+ { "musicsharpsign", 0x266f, 0 },
+ { "mussquare", 0x33b2, 0 },
+ { "muvsquare", 0x33b6, 0 },
+ { "muwsquare", 0x33bc, 0 },
+ { "mvmegasquare", 0x33b9, 0 },
+ { "mvsquare", 0x33b7, 0 },
+ { "mwmegasquare", 0x33bf, 0 },
+ { "mwsquare", 0x33bd, 0 },
+ { "nabengali", 0x09a8, 0 },
+ { "nabla", 0x2207, 0 },
+ { "nadeva", 0x0928, 0 },
+ { "nagujarati", 0x0aa8, 0 },
+ { "nagurmukhi", 0x0a28, 0 },
+ { "nahiragana", 0x306a, 0 },
+ { "nakatakana", 0x30ca, 0 },
+ { "nakatakanahalfwidth", 0xff85, 0 },
+ { "nasquare", 0x3381, 0 },
+ { "nbopomofo", 0x310b, 0 },
+ { "nbspace", 0x00a0, 0 },
+ { "ncedilla", 0x0146, 0 },
+ { "ncircle", 0x24dd, 0 },
+ { "ncircumflexbelow", 0x1e4b, 0 },
+ { "ndotaccent", 0x1e45, 0 },
+ { "ndotbelow", 0x1e47, 0 },
+ { "nehiragana", 0x306d, 0 },
+ { "nekatakana", 0x30cd, 0 },
+ { "nekatakanahalfwidth", 0xff88, 0 },
+ { "newsheqelsign", 0x20aa, 0 },
+ { "nfsquare", 0x338b, 0 },
+ { "ngabengali", 0x0999, 0 },
+ { "ngadeva", 0x0919, 0 },
+ { "ngagujarati", 0x0a99, 0 },
+ { "ngagurmukhi", 0x0a19, 0 },
+ { "ngonguthai", 0x0e07, 0 },
+ { "nhiragana", 0x3093, 0 },
+ { "nhookleft", 0x0272, 0 },
+ { "nhookretroflex", 0x0273, 0 },
+ { "nieunacirclekorean", 0x326f, 0 },
+ { "nieunaparenkorean", 0x320f, 0 },
+ { "nieuncieuckorean", 0x3135, 0 },
+ { "nieuncirclekorean", 0x3261, 0 },
+ { "nieunhieuhkorean", 0x3136, 0 },
+ { "nieunkorean", 0x3134, 0 },
+ { "nieunpansioskorean", 0x3168, 0 },
+ { "nieunparenkorean", 0x3201, 0 },
+ { "nieunsioskorean", 0x3167, 0 },
+ { "nieuntikeutkorean", 0x3166, 0 },
+ { "nihiragana", 0x306b, 0 },
+ { "nikatakana", 0x30cb, 0 },
+ { "nikatakanahalfwidth", 0xff86, 0 },
+ { "nikhahitleftthai", 0xf899, 0 },
+ { "nikhahitthai", 0x0e4d, 0 },
+ { "ninearabic", 0x0669, 0 },
+ { "ninebengali", 0x09ef, 0 },
+ { "ninecircle", 0x2468, 0 },
+ { "ninecircleinversesansserif", 0x2792, 0 },
+ { "ninedeva", 0x096f, 0 },
+ { "ninegujarati", 0x0aef, 0 },
+ { "ninegurmukhi", 0x0a6f, 0 },
+ { "ninehackarabic", 0x0669, 0 },
+ { "ninehangzhou", 0x3029, 0 },
+ { "nineideographicparen", 0x3228, 0 },
+ { "nineinferior", 0x2089, 0 },
+ { "ninemonospace", 0xff19, 0 },
+ { "nineoldstyle", 0xf739, 0 },
+ { "nineparen", 0x247c, 0 },
+ { "nineperiod", 0x2490, 0 },
+ { "ninepersian", 0x06f9, 0 },
+ { "nineroman", 0x2178, 0 },
+ { "ninesuperior", 0x2079, 0 },
+ { "nineteencircle", 0x2472, 0 },
+ { "nineteenparen", 0x2486, 0 },
+ { "nineteenperiod", 0x249a, 0 },
+ { "ninethai", 0x0e59, 0 },
+ { "nj", 0x01cc, 0 },
+ { "njecyrillic", 0x045a, 0 },
+ { "nkatakana", 0x30f3, 0 },
+ { "nkatakanahalfwidth", 0xff9d, 0 },
+ { "nlegrightlong", 0x019e, 0 },
+ { "nlinebelow", 0x1e49, 0 },
+ { "nmonospace", 0xff4e, 0 },
+ { "nmsquare", 0x339a, 0 },
+ { "nnabengali", 0x09a3, 0 },
+ { "nnadeva", 0x0923, 0 },
+ { "nnagujarati", 0x0aa3, 0 },
+ { "nnagurmukhi", 0x0a23, 0 },
+ { "nnnadeva", 0x0929, 0 },
+ { "nohiragana", 0x306e, 0 },
+ { "nokatakana", 0x30ce, 0 },
+ { "nokatakanahalfwidth", 0xff89, 0 },
+ { "nonbreakingspace", 0x00a0, 0 },
+ { "nonenthai", 0x0e13, 0 },
+ { "nonuthai", 0x0e19, 0 },
+ { "noonarabic", 0x0646, 0 },
+ { "noonfinalarabic", 0xfee6, 0 },
+ { "noonghunnaarabic", 0x06ba, 0 },
+ { "noonghunnafinalarabic", 0xfb9f, 0 },
+ { "noonhehinitialarabic", 0xfee7, 0 },
+ { "nooninitialarabic", 0xfee7, 0 },
+ { "noonjeeminitialarabic", 0xfcd2, 0 },
+ { "noonjeemisolatedarabic", 0xfc4b, 0 },
+ { "noonmedialarabic", 0xfee8, 0 },
+ { "noonmeeminitialarabic", 0xfcd5, 0 },
+ { "noonmeemisolatedarabic", 0xfc4e, 0 },
+ { "noonnoonfinalarabic", 0xfc8d, 0 },
+ { "notcontains", 0x220c, 0 },
+ { "notelementof", 0x2209, 0 },
+ { "notgreater", 0x226f, 0 },
+ { "notgreaternorequal", 0x2271, 0 },
+ { "notgreaternorless", 0x2279, 0 },
+ { "notidentical", 0x2262, 0 },
+ { "notless", 0x226e, 0 },
+ { "notlessnorequal", 0x2270, 0 },
+ { "notparallel", 0x2226, 0 },
+ { "notprecedes", 0x2280, 0 },
+ { "notsucceeds", 0x2281, 0 },
+ { "notsuperset", 0x2285, 0 },
+ { "nowarmenian", 0x0576, 0 },
+ { "nparen", 0x24a9, 0 },
+ { "nssquare", 0x33b1, 0 },
+ { "nsuperior", 0x207f, 0 },
+ { "nuhiragana", 0x306c, 0 },
+ { "nukatakana", 0x30cc, 0 },
+ { "nukatakanahalfwidth", 0xff87, 0 },
+ { "nuktabengali", 0x09bc, 0 },
+ { "nuktadeva", 0x093c, 0 },
+ { "nuktagujarati", 0x0abc, 0 },
+ { "nuktagurmukhi", 0x0a3c, 0 },
+ { "numbersignmonospace", 0xff03, 0 },
+ { "numbersignsmall", 0xfe5f, 0 },
+ { "numeralsigngreek", 0x0374, 0 },
+ { "numeralsignlowergreek", 0x0375, 0 },
+ { "numero", 0x2116, 0 },
+ { "nun", 0x05e0, 0 },
+ { "nundagesh", 0xfb40, 0 },
+ { "nundageshhebrew", 0xfb40, 0 },
+ { "nunhebrew", 0x05e0, 0 },
+ { "nvsquare", 0x33b5, 0 },
+ { "nwsquare", 0x33bb, 0 },
+ { "nyabengali", 0x099e, 0 },
+ { "nyadeva", 0x091e, 0 },
+ { "nyagujarati", 0x0a9e, 0 },
+ { "nyagurmukhi", 0x0a1e, 0 },
+ { "oangthai", 0x0e2d, 0 },
+ { "obarred", 0x0275, 0 },
+ { "obarredcyrillic", 0x04e9, 0 },
+ { "obarreddieresiscyrillic", 0x04eb, 0 },
+ { "obengali", 0x0993, 0 },
+ { "obopomofo", 0x311b, 0 },
+ { "ocandradeva", 0x0911, 0 },
+ { "ocandragujarati", 0x0a91, 0 },
+ { "ocandravowelsigndeva", 0x0949, 0 },
+ { "ocandravowelsigngujarati", 0x0ac9, 0 },
+ { "ocaron", 0x01d2, 0 },
+ { "ocircle", 0x24de, 0 },
+ { "ocircumflexacute", 0x1ed1, 0 },
+ { "ocircumflexdotbelow", 0x1ed9, 0 },
+ { "ocircumflexgrave", 0x1ed3, 0 },
+ { "ocircumflexhookabove", 0x1ed5, 0 },
+ { "ocircumflextilde", 0x1ed7, 0 },
+ { "ocyrillic", 0x043e, 0 },
+ { "odblacute", 0x0151, 0 },
+ { "odblgrave", 0x020d, 0 },
+ { "odeva", 0x0913, 0 },
+ { "odieresiscyrillic", 0x04e7, 0 },
+ { "odotbelow", 0x1ecd, 0 },
+ { "oekorean", 0x315a, 0 },
+ { "ogonekcmb", 0x0328, 0 },
+ { "ogujarati", 0x0a93, 0 },
+ { "oharmenian", 0x0585, 0 },
+ { "ohiragana", 0x304a, 0 },
+ { "ohookabove", 0x1ecf, 0 },
+ { "ohornacute", 0x1edb, 0 },
+ { "ohorndotbelow", 0x1ee3, 0 },
+ { "ohorngrave", 0x1edd, 0 },
+ { "ohornhookabove", 0x1edf, 0 },
+ { "ohorntilde", 0x1ee1, 0 },
+ { "oi", 0x01a3, 0 },
+ { "oinvertedbreve", 0x020f, 0 },
+ { "okatakana", 0x30aa, 0 },
+ { "okatakanahalfwidth", 0xff75, 0 },
+ { "okorean", 0x3157, 0 },
+ { "olehebrew", 0x05ab, 0 },
+ { "omacronacute", 0x1e53, 0 },
+ { "omacrongrave", 0x1e51, 0 },
+ { "omdeva", 0x0950, 0 },
+ { "omegacyrillic", 0x0461, 0 },
+ { "omegalatinclosed", 0x0277, 0 },
+ { "omegaroundcyrillic", 0x047b, 0 },
+ { "omegatitlocyrillic", 0x047d, 0 },
+ { "omgujarati", 0x0ad0, 0 },
+ { "omonospace", 0xff4f, 0 },
+ { "onearabic", 0x0661, 0 },
+ { "onebengali", 0x09e7, 0 },
+ { "onecircle", 0x2460, 0 },
+ { "onecircleinversesansserif", 0x278a, 0 },
+ { "onedeva", 0x0967, 0 },
+ { "onefitted", 0xf6dc, 0 },
+ { "onegujarati", 0x0ae7, 0 },
+ { "onegurmukhi", 0x0a67, 0 },
+ { "onehackarabic", 0x0661, 0 },
+ { "onehangzhou", 0x3021, 0 },
+ { "oneideographicparen", 0x3220, 0 },
+ { "oneinferior", 0x2081, 0 },
+ { "onemonospace", 0xff11, 0 },
+ { "onenumeratorbengali", 0x09f4, 0 },
+ { "oneoldstyle", 0xf731, 0 },
+ { "oneparen", 0x2474, 0 },
+ { "oneperiod", 0x2488, 0 },
+ { "onepersian", 0x06f1, 0 },
+ { "oneroman", 0x2170, 0 },
+ { "onesuperior", 0x00b9, 0 },
+ { "onethai", 0x0e51, 0 },
+ { "oogonek", 0x01eb, 0 },
+ { "oogonekmacron", 0x01ed, 0 },
+ { "oogurmukhi", 0x0a13, 0 },
+ { "oomatragurmukhi", 0x0a4b, 0 },
+ { "oopen", 0x0254, 0 },
+ { "oparen", 0x24aa, 0 },
+ { "option", 0x2325, 0 },
+ { "oshortdeva", 0x0912, 0 },
+ { "oshortvowelsigndeva", 0x094a, 0 },
+ { "osmallhiragana", 0x3049, 0 },
+ { "osmallkatakana", 0x30a9, 0 },
+ { "osmallkatakanahalfwidth", 0xff6b, 0 },
+ { "ostrokeacute", 0x01ff, 0 },
+ { "osuperior", 0xf6f0, 0 },
+ { "otcyrillic", 0x047f, 0 },
+ { "otildeacute", 0x1e4d, 0 },
+ { "otildedieresis", 0x1e4f, 0 },
+ { "oubopomofo", 0x3121, 0 },
+ { "overline", 0x203e, 0 },
+ { "overlinecenterline", 0xfe4a, 0 },
+ { "overlinecmb", 0x0305, 0 },
+ { "overlinedashed", 0xfe49, 0 },
+ { "overlinedblwavy", 0xfe4c, 0 },
+ { "overlinewavy", 0xfe4b, 0 },
+ { "overscore", 0x00af, 0 },
+ { "ovowelsignbengali", 0x09cb, 0 },
+ { "ovowelsigndeva", 0x094b, 0 },
+ { "ovowelsigngujarati", 0x0acb, 0 },
+ { "paampssquare", 0x3380, 0 },
+ { "paasentosquare", 0x332b, 0 },
+ { "pabengali", 0x09aa, 0 },
+ { "pacute", 0x1e55, 0 },
+ { "padeva", 0x092a, 0 },
+ { "pagedown", 0x21df, 0 },
+ { "pageup", 0x21de, 0 },
+ { "pagujarati", 0x0aaa, 0 },
+ { "pagurmukhi", 0x0a2a, 0 },
+ { "pahiragana", 0x3071, 0 },
+ { "paiyannoithai", 0x0e2f, 0 },
+ { "pakatakana", 0x30d1, 0 },
+ { "palatalizationcyrilliccmb", 0x0484, 0 },
+ { "palochkacyrillic", 0x04c0, 0 },
+ { "pansioskorean", 0x317f, 0 },
+ { "parallel", 0x2225, 0 },
+ { "parenleftaltonearabic", 0xfd3e, 0 },
+ { "parenleftbt", 0xf8ed, 0 },
+ { "parenleftex", 0xf8ec, 0 },
+ { "parenleftinferior", 0x208d, 0 },
+ { "parenleftmonospace", 0xff08, 0 },
+ { "parenleftsmall", 0xfe59, 0 },
+ { "parenleftsuperior", 0x207d, 0 },
+ { "parenlefttp", 0xf8eb, 0 },
+ { "parenleftvertical", 0xfe35, 0 },
+ { "parenrightaltonearabic", 0xfd3f, 0 },
+ { "parenrightbt", 0xf8f8, 0 },
+ { "parenrightex", 0xf8f7, 0 },
+ { "parenrightinferior", 0x208e, 0 },
+ { "parenrightmonospace", 0xff09, 0 },
+ { "parenrightsmall", 0xfe5a, 0 },
+ { "parenrightsuperior", 0x207e, 0 },
+ { "parenrighttp", 0xf8f6, 0 },
+ { "parenrightvertical", 0xfe36, 0 },
+ { "paseqhebrew", 0x05c0, 0 },
+ { "pashtahebrew", 0x0599, 0 },
+ { "pasquare", 0x33a9, 0 },
+ { "patah", 0x05b7, 0 },
+ { "patah11", 0x05b7, 0 },
+ { "patah1d", 0x05b7, 0 },
+ { "patah2a", 0x05b7, 0 },
+ { "patahhebrew", 0x05b7, 0 },
+ { "patahnarrowhebrew", 0x05b7, 0 },
+ { "patahquarterhebrew", 0x05b7, 0 },
+ { "patahwidehebrew", 0x05b7, 0 },
+ { "pazerhebrew", 0x05a1, 0 },
+ { "pbopomofo", 0x3106, 0 },
+ { "pcircle", 0x24df, 0 },
+ { "pdotaccent", 0x1e57, 0 },
+ { "pe", 0x05e4, 0 },
+ { "pecyrillic", 0x043f, 0 },
+ { "pedagesh", 0xfb44, 0 },
+ { "pedageshhebrew", 0xfb44, 0 },
+ { "peezisquare", 0x333b, 0 },
+ { "pefinaldageshhebrew", 0xfb43, 0 },
+ { "peharabic", 0x067e, 0 },
+ { "peharmenian", 0x057a, 0 },
+ { "pehebrew", 0x05e4, 0 },
+ { "pehfinalarabic", 0xfb57, 0 },
+ { "pehinitialarabic", 0xfb58, 0 },
+ { "pehiragana", 0x307a, 0 },
+ { "pehmedialarabic", 0xfb59, 0 },
+ { "pekatakana", 0x30da, 0 },
+ { "pemiddlehookcyrillic", 0x04a7, 0 },
+ { "perafehebrew", 0xfb4e, 0 },
+ { "percentarabic", 0x066a, 0 },
+ { "percentmonospace", 0xff05, 0 },
+ { "percentsmall", 0xfe6a, 0 },
+ { "periodarmenian", 0x0589, 0 },
+ { "periodhalfwidth", 0xff61, 0 },
+ { "periodinferior", 0xf6e7, 0 },
+ { "periodmonospace", 0xff0e, 0 },
+ { "periodsmall", 0xfe52, 0 },
+ { "periodsuperior", 0xf6e8, 0 },
+ { "perispomenigreekcmb", 0x0342, 0 },
+ { "pfsquare", 0x338a, 0 },
+ { "phabengali", 0x09ab, 0 },
+ { "phadeva", 0x092b, 0 },
+ { "phagujarati", 0x0aab, 0 },
+ { "phagurmukhi", 0x0a2b, 0 },
+ { "phieuphacirclekorean", 0x327a, 0 },
+ { "phieuphaparenkorean", 0x321a, 0 },
+ { "phieuphcirclekorean", 0x326c, 0 },
+ { "phieuphkorean", 0x314d, 0 },
+ { "phieuphparenkorean", 0x320c, 0 },
+ { "philatin", 0x0278, 0 },
+ { "phinthuthai", 0x0e3a, 0 },
+ { "phisymbolgreek", 0x03d5, 0 },
+ { "phook", 0x01a5, 0 },
+ { "phophanthai", 0x0e1e, 0 },
+ { "phophungthai", 0x0e1c, 0 },
+ { "phosamphaothai", 0x0e20, 0 },
+ { "pieupacirclekorean", 0x3273, 0 },
+ { "pieupaparenkorean", 0x3213, 0 },
+ { "pieupcieuckorean", 0x3176, 0 },
+ { "pieupcirclekorean", 0x3265, 0 },
+ { "pieupkiyeokkorean", 0x3172, 0 },
+ { "pieupkorean", 0x3142, 0 },
+ { "pieupparenkorean", 0x3205, 0 },
+ { "pieupsioskiyeokkorean", 0x3174, 0 },
+ { "pieupsioskorean", 0x3144, 0 },
+ { "pieupsiostikeutkorean", 0x3175, 0 },
+ { "pieupthieuthkorean", 0x3177, 0 },
+ { "pieuptikeutkorean", 0x3173, 0 },
+ { "pihiragana", 0x3074, 0 },
+ { "pikatakana", 0x30d4, 0 },
+ { "pisymbolgreek", 0x03d6, 0 },
+ { "piwrarmenian", 0x0583, 0 },
+ { "plusbelowcmb", 0x031f, 0 },
+ { "pluscircle", 0x2295, 0 },
+ { "plusmod", 0x02d6, 0 },
+ { "plusmonospace", 0xff0b, 0 },
+ { "plussmall", 0xfe62, 0 },
+ { "plussuperior", 0x207a, 0 },
+ { "pmonospace", 0xff50, 0 },
+ { "pmsquare", 0x33d8, 0 },
+ { "pohiragana", 0x307d, 0 },
+ { "pointingindexdownwhite", 0x261f, 0 },
+ { "pointingindexleftwhite", 0x261c, 0 },
+ { "pointingindexrightwhite", 0x261e, 0 },
+ { "pointingindexupwhite", 0x261d, 0 },
+ { "pokatakana", 0x30dd, 0 },
+ { "poplathai", 0x0e1b, 0 },
+ { "postalmark", 0x3012, 0 },
+ { "postalmarkface", 0x3020, 0 },
+ { "pparen", 0x24ab, 0 },
+ { "precedes", 0x227a, 0 },
+ { "primemod", 0x02b9, 0 },
+ { "primereversed", 0x2035, 0 },
+ { "projective", 0x2305, 0 },
+ { "prolongedkana", 0x30fc, 0 },
+ { "propellor", 0x2318, 0 },
+ { "proportion", 0x2237, 0 },
+ { "psicyrillic", 0x0471, 0 },
+ { "psilipneumatacyrilliccmb", 0x0486, 0 },
+ { "pssquare", 0x33b0, 0 },
+ { "puhiragana", 0x3077, 0 },
+ { "pukatakana", 0x30d7, 0 },
+ { "pvsquare", 0x33b4, 0 },
+ { "pwsquare", 0x33ba, 0 },
+ { "qadeva", 0x0958, 0 },
+ { "qadmahebrew", 0x05a8, 0 },
+ { "qafarabic", 0x0642, 0 },
+ { "qaffinalarabic", 0xfed6, 0 },
+ { "qafinitialarabic", 0xfed7, 0 },
+ { "qafmedialarabic", 0xfed8, 0 },
+ { "qamats", 0x05b8, 0 },
+ { "qamats10", 0x05b8, 0 },
+ { "qamats1a", 0x05b8, 0 },
+ { "qamats1c", 0x05b8, 0 },
+ { "qamats27", 0x05b8, 0 },
+ { "qamats29", 0x05b8, 0 },
+ { "qamats33", 0x05b8, 0 },
+ { "qamatsde", 0x05b8, 0 },
+ { "qamatshebrew", 0x05b8, 0 },
+ { "qamatsnarrowhebrew", 0x05b8, 0 },
+ { "qamatsqatanhebrew", 0x05b8, 0 },
+ { "qamatsqatannarrowhebrew", 0x05b8, 0 },
+ { "qamatsqatanquarterhebrew", 0x05b8, 0 },
+ { "qamatsqatanwidehebrew", 0x05b8, 0 },
+ { "qamatsquarterhebrew", 0x05b8, 0 },
+ { "qamatswidehebrew", 0x05b8, 0 },
+ { "qarneyparahebrew", 0x059f, 0 },
+ { "qbopomofo", 0x3111, 0 },
+ { "qcircle", 0x24e0, 0 },
+ { "qhook", 0x02a0, 0 },
+ { "qmonospace", 0xff51, 0 },
+ { "qof", 0x05e7, 0 },
+ { "qofdagesh", 0xfb47, 0 },
+ { "qofdageshhebrew", 0xfb47, 0 },
+ { "qofhatafpatah", 0x05e7, 0 },
+ { "qofhatafpatahhebrew", 0x05e7, 0 },
+ { "qofhatafsegol", 0x05e7, 0 },
+ { "qofhatafsegolhebrew", 0x05e7, 0 },
+ { "qofhebrew", 0x05e7, 0 },
+ { "qofhiriq", 0x05e7, 0 },
+ { "qofhiriqhebrew", 0x05e7, 0 },
+ { "qofholam", 0x05e7, 0 },
+ { "qofholamhebrew", 0x05e7, 0 },
+ { "qofpatah", 0x05e7, 0 },
+ { "qofpatahhebrew", 0x05e7, 0 },
+ { "qofqamats", 0x05e7, 0 },
+ { "qofqamatshebrew", 0x05e7, 0 },
+ { "qofqubuts", 0x05e7, 0 },
+ { "qofqubutshebrew", 0x05e7, 0 },
+ { "qofsegol", 0x05e7, 0 },
+ { "qofsegolhebrew", 0x05e7, 0 },
+ { "qofsheva", 0x05e7, 0 },
+ { "qofshevahebrew", 0x05e7, 0 },
+ { "qoftsere", 0x05e7, 0 },
+ { "qoftserehebrew", 0x05e7, 0 },
+ { "qparen", 0x24ac, 0 },
+ { "quarternote", 0x2669, 0 },
+ { "qubuts", 0x05bb, 0 },
+ { "qubuts18", 0x05bb, 0 },
+ { "qubuts25", 0x05bb, 0 },
+ { "qubuts31", 0x05bb, 0 },
+ { "qubutshebrew", 0x05bb, 0 },
+ { "qubutsnarrowhebrew", 0x05bb, 0 },
+ { "qubutsquarterhebrew", 0x05bb, 0 },
+ { "qubutswidehebrew", 0x05bb, 0 },
+ { "questionarabic", 0x061f, 0 },
+ { "questionarmenian", 0x055e, 0 },
+ { "questiondownsmall", 0xf7bf, 0 },
+ { "questiongreek", 0x037e, 0 },
+ { "questionmonospace", 0xff1f, 0 },
+ { "questionsmall", 0xf73f, 0 },
+ { "quotedblmonospace", 0xff02, 0 },
+ { "quotedblprime", 0x301e, 0 },
+ { "quotedblprimereversed", 0x301d, 0 },
+ { "quoteleftreversed", 0x201b, 0 },
+ { "quoterightn", 0x0149, 0 },
+ { "quotesinglemonospace", 0xff07, 0 },
+ { "raarmenian", 0x057c, 0 },
+ { "rabengali", 0x09b0, 0 },
+ { "radeva", 0x0930, 0 },
+ { "radicalex", 0xf8e5, 0 },
+ { "radoverssquare", 0x33ae, 0 },
+ { "radoverssquaredsquare", 0x33af, 0 },
+ { "radsquare", 0x33ad, 0 },
+ { "rafe", 0x05bf, 0 },
+ { "rafehebrew", 0x05bf, 0 },
+ { "ragujarati", 0x0ab0, 0 },
+ { "ragurmukhi", 0x0a30, 0 },
+ { "rahiragana", 0x3089, 0 },
+ { "rakatakana", 0x30e9, 0 },
+ { "rakatakanahalfwidth", 0xff97, 0 },
+ { "ralowerdiagonalbengali", 0x09f1, 0 },
+ { "ramiddlediagonalbengali", 0x09f0, 0 },
+ { "ramshorn", 0x0264, 0 },
+ { "ratio", 0x2236, 0 },
+ { "rbopomofo", 0x3116, 0 },
+ { "rcedilla", 0x0157, 0 },
+ { "rcircle", 0x24e1, 0 },
+ { "rdblgrave", 0x0211, 0 },
+ { "rdotaccent", 0x1e59, 0 },
+ { "rdotbelow", 0x1e5b, 0 },
+ { "rdotbelowmacron", 0x1e5d, 0 },
+ { "referencemark", 0x203b, 0 },
+ { "registersans", 0xf8e8, 0 },
+ { "registerserif", 0xf6da, 0 },
+ { "reharabic", 0x0631, 0 },
+ { "reharmenian", 0x0580, 0 },
+ { "rehfinalarabic", 0xfeae, 0 },
+ { "rehiragana", 0x308c, 0 },
+ { "rehyehaleflamarabic", 0x0631, 0 },
+ { "rekatakana", 0x30ec, 0 },
+ { "rekatakanahalfwidth", 0xff9a, 0 },
+ { "resh", 0x05e8, 0 },
+ { "reshdageshhebrew", 0xfb48, 0 },
+ { "reshhatafpatah", 0x05e8, 0 },
+ { "reshhatafpatahhebrew", 0x05e8, 0 },
+ { "reshhatafsegol", 0x05e8, 0 },
+ { "reshhatafsegolhebrew", 0x05e8, 0 },
+ { "reshhebrew", 0x05e8, 0 },
+ { "reshhiriq", 0x05e8, 0 },
+ { "reshhiriqhebrew", 0x05e8, 0 },
+ { "reshholam", 0x05e8, 0 },
+ { "reshholamhebrew", 0x05e8, 0 },
+ { "reshpatah", 0x05e8, 0 },
+ { "reshpatahhebrew", 0x05e8, 0 },
+ { "reshqamats", 0x05e8, 0 },
+ { "reshqamatshebrew", 0x05e8, 0 },
+ { "reshqubuts", 0x05e8, 0 },
+ { "reshqubutshebrew", 0x05e8, 0 },
+ { "reshsegol", 0x05e8, 0 },
+ { "reshsegolhebrew", 0x05e8, 0 },
+ { "reshsheva", 0x05e8, 0 },
+ { "reshshevahebrew", 0x05e8, 0 },
+ { "reshtsere", 0x05e8, 0 },
+ { "reshtserehebrew", 0x05e8, 0 },
+ { "reversedtilde", 0x223d, 0 },
+ { "reviahebrew", 0x0597, 0 },
+ { "reviamugrashhebrew", 0x0597, 0 },
+ { "rfishhook", 0x027e, 0 },
+ { "rfishhookreversed", 0x027f, 0 },
+ { "rhabengali", 0x09dd, 0 },
+ { "rhadeva", 0x095d, 0 },
+ { "rhook", 0x027d, 0 },
+ { "rhookturned", 0x027b, 0 },
+ { "rhookturnedsuperior", 0x02b5, 0 },
+ { "rhosymbolgreek", 0x03f1, 0 },
+ { "rhotichookmod", 0x02de, 0 },
+ { "rieulacirclekorean", 0x3271, 0 },
+ { "rieulaparenkorean", 0x3211, 0 },
+ { "rieulcirclekorean", 0x3263, 0 },
+ { "rieulhieuhkorean", 0x3140, 0 },
+ { "rieulkiyeokkorean", 0x313a, 0 },
+ { "rieulkiyeoksioskorean", 0x3169, 0 },
+ { "rieulkorean", 0x3139, 0 },
+ { "rieulmieumkorean", 0x313b, 0 },
+ { "rieulpansioskorean", 0x316c, 0 },
+ { "rieulparenkorean", 0x3203, 0 },
+ { "rieulphieuphkorean", 0x313f, 0 },
+ { "rieulpieupkorean", 0x313c, 0 },
+ { "rieulpieupsioskorean", 0x316b, 0 },
+ { "rieulsioskorean", 0x313d, 0 },
+ { "rieulthieuthkorean", 0x313e, 0 },
+ { "rieultikeutkorean", 0x316a, 0 },
+ { "rieulyeorinhieuhkorean", 0x316d, 0 },
+ { "rightangle", 0x221f, 0 },
+ { "righttackbelowcmb", 0x0319, 0 },
+ { "righttriangle", 0x22bf, 0 },
+ { "rihiragana", 0x308a, 0 },
+ { "rikatakana", 0x30ea, 0 },
+ { "rikatakanahalfwidth", 0xff98, 0 },
+ { "ringbelowcmb", 0x0325, 0 },
+ { "ringcmb", 0x030a, 0 },
+ { "ringhalfleft", 0x02bf, 0 },
+ { "ringhalfleftarmenian", 0x0559, 0 },
+ { "ringhalfleftbelowcmb", 0x031c, 0 },
+ { "ringhalfleftcentered", 0x02d3, 0 },
+ { "ringhalfright", 0x02be, 0 },
+ { "ringhalfrightbelowcmb", 0x0339, 0 },
+ { "ringhalfrightcentered", 0x02d2, 0 },
+ { "rinvertedbreve", 0x0213, 0 },
+ { "rittorusquare", 0x3351, 0 },
+ { "rlinebelow", 0x1e5f, 0 },
+ { "rlongleg", 0x027c, 0 },
+ { "rlonglegturned", 0x027a, 0 },
+ { "rmonospace", 0xff52, 0 },
+ { "rohiragana", 0x308d, 0 },
+ { "rokatakana", 0x30ed, 0 },
+ { "rokatakanahalfwidth", 0xff9b, 0 },
+ { "roruathai", 0x0e23, 0 },
+ { "rparen", 0x24ad, 0 },
+ { "rrabengali", 0x09dc, 0 },
+ { "rradeva", 0x0931, 0 },
+ { "rragurmukhi", 0x0a5c, 0 },
+ { "rreharabic", 0x0691, 0 },
+ { "rrehfinalarabic", 0xfb8d, 0 },
+ { "rrvocalicbengali", 0x09e0, 0 },
+ { "rrvocalicdeva", 0x0960, 0 },
+ { "rrvocalicgujarati", 0x0ae0, 0 },
+ { "rrvocalicvowelsignbengali", 0x09c4, 0 },
+ { "rrvocalicvowelsigndeva", 0x0944, 0 },
+ { "rrvocalicvowelsigngujarati", 0x0ac4, 0 },
+ { "rsuperior", 0xf6f1, 0 },
+ { "rturned", 0x0279, 0 },
+ { "rturnedsuperior", 0x02b4, 0 },
+ { "ruhiragana", 0x308b, 0 },
+ { "rukatakana", 0x30eb, 0 },
+ { "rukatakanahalfwidth", 0xff99, 0 },
+ { "rupeemarkbengali", 0x09f2, 0 },
+ { "rupeesignbengali", 0x09f3, 0 },
+ { "rupiah", 0xf6dd, 0 },
+ { "ruthai", 0x0e24, 0 },
+ { "rvocalicbengali", 0x098b, 0 },
+ { "rvocalicdeva", 0x090b, 0 },
+ { "rvocalicgujarati", 0x0a8b, 0 },
+ { "rvocalicvowelsignbengali", 0x09c3, 0 },
+ { "rvocalicvowelsigndeva", 0x0943, 0 },
+ { "rvocalicvowelsigngujarati", 0x0ac3, 0 },
+ { "sabengali", 0x09b8, 0 },
+ { "sacutedotaccent", 0x1e65, 0 },
+ { "sadarabic", 0x0635, 0 },
+ { "sadeva", 0x0938, 0 },
+ { "sadfinalarabic", 0xfeba, 0 },
+ { "sadinitialarabic", 0xfebb, 0 },
+ { "sadmedialarabic", 0xfebc, 0 },
+ { "sagujarati", 0x0ab8, 0 },
+ { "sagurmukhi", 0x0a38, 0 },
+ { "sahiragana", 0x3055, 0 },
+ { "sakatakana", 0x30b5, 0 },
+ { "sakatakanahalfwidth", 0xff7b, 0 },
+ { "sallallahoualayhewasallamarabic", 0xfdfa, 0 },
+ { "samekh", 0x05e1, 0 },
+ { "samekhdagesh", 0xfb41, 0 },
+ { "samekhdageshhebrew", 0xfb41, 0 },
+ { "samekhhebrew", 0x05e1, 0 },
+ { "saraaathai", 0x0e32, 0 },
+ { "saraaethai", 0x0e41, 0 },
+ { "saraaimaimalaithai", 0x0e44, 0 },
+ { "saraaimaimuanthai", 0x0e43, 0 },
+ { "saraamthai", 0x0e33, 0 },
+ { "saraathai", 0x0e30, 0 },
+ { "saraethai", 0x0e40, 0 },
+ { "saraiileftthai", 0xf886, 0 },
+ { "saraiithai", 0x0e35, 0 },
+ { "saraileftthai", 0xf885, 0 },
+ { "saraithai", 0x0e34, 0 },
+ { "saraothai", 0x0e42, 0 },
+ { "saraueeleftthai", 0xf888, 0 },
+ { "saraueethai", 0x0e37, 0 },
+ { "saraueleftthai", 0xf887, 0 },
+ { "sarauethai", 0x0e36, 0 },
+ { "sarauthai", 0x0e38, 0 },
+ { "sarauuthai", 0x0e39, 0 },
+ { "sbopomofo", 0x3119, 0 },
+ { "scarondotaccent", 0x1e67, 0 },
+ { "schwa", 0x0259, 0 },
+ { "schwacyrillic", 0x04d9, 0 },
+ { "schwadieresiscyrillic", 0x04db, 0 },
+ { "schwahook", 0x025a, 0 },
+ { "scircle", 0x24e2, 0 },
+ { "sdotaccent", 0x1e61, 0 },
+ { "sdotbelow", 0x1e63, 0 },
+ { "sdotbelowdotaccent", 0x1e69, 0 },
+ { "seagullbelowcmb", 0x033c, 0 },
+ { "secondtonechinese", 0x02ca, 0 },
+ { "seenarabic", 0x0633, 0 },
+ { "seenfinalarabic", 0xfeb2, 0 },
+ { "seeninitialarabic", 0xfeb3, 0 },
+ { "seenmedialarabic", 0xfeb4, 0 },
+ { "segol", 0x05b6, 0 },
+ { "segol13", 0x05b6, 0 },
+ { "segol1f", 0x05b6, 0 },
+ { "segol2c", 0x05b6, 0 },
+ { "segolhebrew", 0x05b6, 0 },
+ { "segolnarrowhebrew", 0x05b6, 0 },
+ { "segolquarterhebrew", 0x05b6, 0 },
+ { "segoltahebrew", 0x0592, 0 },
+ { "segolwidehebrew", 0x05b6, 0 },
+ { "seharmenian", 0x057d, 0 },
+ { "sehiragana", 0x305b, 0 },
+ { "sekatakana", 0x30bb, 0 },
+ { "sekatakanahalfwidth", 0xff7e, 0 },
+ { "semicolonarabic", 0x061b, 0 },
+ { "semicolonmonospace", 0xff1b, 0 },
+ { "semicolonsmall", 0xfe54, 0 },
+ { "semivoicedmarkkana", 0x309c, 0 },
+ { "semivoicedmarkkanahalfwidth", 0xff9f, 0 },
+ { "sentisquare", 0x3322, 0 },
+ { "sentosquare", 0x3323, 0 },
+ { "sevenarabic", 0x0667, 0 },
+ { "sevenbengali", 0x09ed, 0 },
+ { "sevencircle", 0x2466, 0 },
+ { "sevencircleinversesansserif", 0x2790, 0 },
+ { "sevendeva", 0x096d, 0 },
+ { "sevengujarati", 0x0aed, 0 },
+ { "sevengurmukhi", 0x0a6d, 0 },
+ { "sevenhackarabic", 0x0667, 0 },
+ { "sevenhangzhou", 0x3027, 0 },
+ { "sevenideographicparen", 0x3226, 0 },
+ { "seveninferior", 0x2087, 0 },
+ { "sevenmonospace", 0xff17, 0 },
+ { "sevenoldstyle", 0xf737, 0 },
+ { "sevenparen", 0x247a, 0 },
+ { "sevenperiod", 0x248e, 0 },
+ { "sevenpersian", 0x06f7, 0 },
+ { "sevenroman", 0x2176, 0 },
+ { "sevensuperior", 0x2077, 0 },
+ { "seventeencircle", 0x2470, 0 },
+ { "seventeenparen", 0x2484, 0 },
+ { "seventeenperiod", 0x2498, 0 },
+ { "seventhai", 0x0e57, 0 },
+ { "sfthyphen", 0x00ad, 0 },
+ { "shaarmenian", 0x0577, 0 },
+ { "shabengali", 0x09b6, 0 },
+ { "shacyrillic", 0x0448, 0 },
+ { "shaddaarabic", 0x0651, 0 },
+ { "shaddadammaarabic", 0xfc61, 0 },
+ { "shaddadammatanarabic", 0xfc5e, 0 },
+ { "shaddafathaarabic", 0xfc60, 0 },
+ { "shaddafathatanarabic", 0x0651, 0 },
+ { "shaddakasraarabic", 0xfc62, 0 },
+ { "shaddakasratanarabic", 0xfc5f, 0 },
+ { "shadedark", 0x2593, 0 },
+ { "shadelight", 0x2591, 0 },
+ { "shademedium", 0x2592, 0 },
+ { "shadeva", 0x0936, 0 },
+ { "shagujarati", 0x0ab6, 0 },
+ { "shagurmukhi", 0x0a36, 0 },
+ { "shalshelethebrew", 0x0593, 0 },
+ { "shbopomofo", 0x3115, 0 },
+ { "shchacyrillic", 0x0449, 0 },
+ { "sheenarabic", 0x0634, 0 },
+ { "sheenfinalarabic", 0xfeb6, 0 },
+ { "sheeninitialarabic", 0xfeb7, 0 },
+ { "sheenmedialarabic", 0xfeb8, 0 },
+ { "sheicoptic", 0x03e3, 0 },
+ { "sheqel", 0x20aa, 0 },
+ { "sheqelhebrew", 0x20aa, 0 },
+ { "sheva", 0x05b0, 0 },
+ { "sheva115", 0x05b0, 0 },
+ { "sheva15", 0x05b0, 0 },
+ { "sheva22", 0x05b0, 0 },
+ { "sheva2e", 0x05b0, 0 },
+ { "shevahebrew", 0x05b0, 0 },
+ { "shevanarrowhebrew", 0x05b0, 0 },
+ { "shevaquarterhebrew", 0x05b0, 0 },
+ { "shevawidehebrew", 0x05b0, 0 },
+ { "shhacyrillic", 0x04bb, 0 },
+ { "shimacoptic", 0x03ed, 0 },
+ { "shin", 0x05e9, 0 },
+ { "shindagesh", 0xfb49, 0 },
+ { "shindageshhebrew", 0xfb49, 0 },
+ { "shindageshshindot", 0xfb2c, 0 },
+ { "shindageshshindothebrew", 0xfb2c, 0 },
+ { "shindageshsindot", 0xfb2d, 0 },
+ { "shindageshsindothebrew", 0xfb2d, 0 },
+ { "shindothebrew", 0x05c1, 0 },
+ { "shinhebrew", 0x05e9, 0 },
+ { "shinshindot", 0xfb2a, 0 },
+ { "shinshindothebrew", 0xfb2a, 0 },
+ { "shinsindot", 0xfb2b, 0 },
+ { "shinsindothebrew", 0xfb2b, 0 },
+ { "shook", 0x0282, 0 },
+ { "sigmafinal", 0x03c2, 0 },
+ { "sigmalunatesymbolgreek", 0x03f2, 0 },
+ { "sihiragana", 0x3057, 0 },
+ { "sikatakana", 0x30b7, 0 },
+ { "sikatakanahalfwidth", 0xff7c, 0 },
+ { "siluqhebrew", 0x05bd, 0 },
+ { "siluqlefthebrew", 0x05bd, 0 },
+ { "sindothebrew", 0x05c2, 0 },
+ { "siosacirclekorean", 0x3274, 0 },
+ { "siosaparenkorean", 0x3214, 0 },
+ { "sioscieuckorean", 0x317e, 0 },
+ { "sioscirclekorean", 0x3266, 0 },
+ { "sioskiyeokkorean", 0x317a, 0 },
+ { "sioskorean", 0x3145, 0 },
+ { "siosnieunkorean", 0x317b, 0 },
+ { "siosparenkorean", 0x3206, 0 },
+ { "siospieupkorean", 0x317d, 0 },
+ { "siostikeutkorean", 0x317c, 0 },
+ { "sixarabic", 0x0666, 0 },
+ { "sixbengali", 0x09ec, 0 },
+ { "sixcircle", 0x2465, 0 },
+ { "sixcircleinversesansserif", 0x278f, 0 },
+ { "sixdeva", 0x096c, 0 },
+ { "sixgujarati", 0x0aec, 0 },
+ { "sixgurmukhi", 0x0a6c, 0 },
+ { "sixhackarabic", 0x0666, 0 },
+ { "sixhangzhou", 0x3026, 0 },
+ { "sixideographicparen", 0x3225, 0 },
+ { "sixinferior", 0x2086, 0 },
+ { "sixmonospace", 0xff16, 0 },
+ { "sixoldstyle", 0xf736, 0 },
+ { "sixparen", 0x2479, 0 },
+ { "sixperiod", 0x248d, 0 },
+ { "sixpersian", 0x06f6, 0 },
+ { "sixroman", 0x2175, 0 },
+ { "sixsuperior", 0x2076, 0 },
+ { "sixteencircle", 0x246f, 0 },
+ { "sixteencurrencydenominatorbengali", 0x09f9, 0 },
+ { "sixteenparen", 0x2483, 0 },
+ { "sixteenperiod", 0x2497, 0 },
+ { "sixthai", 0x0e56, 0 },
+ { "slashmonospace", 0xff0f, 0 },
+ { "slong", 0x017f, 0 },
+ { "slongdotaccent", 0x1e9b, 0 },
+ { "smonospace", 0xff53, 0 },
+ { "sofpasuqhebrew", 0x05c3, 0 },
+ { "softhyphen", 0x00ad, 0 },
+ { "softsigncyrillic", 0x044c, 0 },
+ { "sohiragana", 0x305d, 0 },
+ { "sokatakana", 0x30bd, 0 },
+ { "sokatakanahalfwidth", 0xff7f, 0 },
+ { "soliduslongoverlaycmb", 0x0338, 0 },
+ { "solidusshortoverlaycmb", 0x0337, 0 },
+ { "sorusithai", 0x0e29, 0 },
+ { "sosalathai", 0x0e28, 0 },
+ { "sosothai", 0x0e0b, 0 },
+ { "sosuathai", 0x0e2a, 0 },
+ { "spacehackarabic", 0x0020, 0 },
+ { "spadesuitblack", 0x2660, 0 },
+ { "spadesuitwhite", 0x2664, 0 },
+ { "sparen", 0x24ae, 0 },
+ { "squarebelowcmb", 0x033b, 0 },
+ { "squarecc", 0x33c4, 0 },
+ { "squarecm", 0x339d, 0 },
+ { "squarediagonalcrosshatchfill", 0x25a9, 0 },
+ { "squarehorizontalfill", 0x25a4, 0 },
+ { "squarekg", 0x338f, 0 },
+ { "squarekm", 0x339e, 0 },
+ { "squarekmcapital", 0x33ce, 0 },
+ { "squareln", 0x33d1, 0 },
+ { "squarelog", 0x33d2, 0 },
+ { "squaremg", 0x338e, 0 },
+ { "squaremil", 0x33d5, 0 },
+ { "squaremm", 0x339c, 0 },
+ { "squaremsquared", 0x33a1, 0 },
+ { "squareorthogonalcrosshatchfill", 0x25a6, 0 },
+ { "squareupperlefttolowerrightfill", 0x25a7, 0 },
+ { "squareupperrighttolowerleftfill", 0x25a8, 0 },
+ { "squareverticalfill", 0x25a5, 0 },
+ { "squarewhitewithsmallblack", 0x25a3, 0 },
+ { "srsquare", 0x33db, 0 },
+ { "ssabengali", 0x09b7, 0 },
+ { "ssadeva", 0x0937, 0 },
+ { "ssagujarati", 0x0ab7, 0 },
+ { "ssangcieuckorean", 0x3149, 0 },
+ { "ssanghieuhkorean", 0x3185, 0 },
+ { "ssangieungkorean", 0x3180, 0 },
+ { "ssangkiyeokkorean", 0x3132, 0 },
+ { "ssangnieunkorean", 0x3165, 0 },
+ { "ssangpieupkorean", 0x3143, 0 },
+ { "ssangsioskorean", 0x3146, 0 },
+ { "ssangtikeutkorean", 0x3138, 0 },
+ { "ssuperior", 0xf6f2, 0 },
+ { "sterlingmonospace", 0xffe1, 0 },
+ { "strokelongoverlaycmb", 0x0336, 0 },
+ { "strokeshortoverlaycmb", 0x0335, 0 },
+ { "subset", 0x2282, 0 },
+ { "subsetnotequal", 0x228a, 0 },
+ { "subsetorequal", 0x2286, 0 },
+ { "succeeds", 0x227b, 0 },
+ { "suhiragana", 0x3059, 0 },
+ { "sukatakana", 0x30b9, 0 },
+ { "sukatakanahalfwidth", 0xff7d, 0 },
+ { "sukunarabic", 0x0652, 0 },
+ { "superset", 0x2283, 0 },
+ { "supersetnotequal", 0x228b, 0 },
+ { "supersetorequal", 0x2287, 0 },
+ { "svsquare", 0x33dc, 0 },
+ { "syouwaerasquare", 0x337c, 0 },
+ { "tabengali", 0x09a4, 0 },
+ { "tackdown", 0x22a4, 0 },
+ { "tackleft", 0x22a3, 0 },
+ { "tadeva", 0x0924, 0 },
+ { "tagujarati", 0x0aa4, 0 },
+ { "tagurmukhi", 0x0a24, 0 },
+ { "taharabic", 0x0637, 0 },
+ { "tahfinalarabic", 0xfec2, 0 },
+ { "tahinitialarabic", 0xfec3, 0 },
+ { "tahiragana", 0x305f, 0 },
+ { "tahmedialarabic", 0xfec4, 0 },
+ { "taisyouerasquare", 0x337d, 0 },
+ { "takatakana", 0x30bf, 0 },
+ { "takatakanahalfwidth", 0xff80, 0 },
+ { "tatweelarabic", 0x0640, 0 },
+ { "tav", 0x05ea, 0 },
+ { "tavdages", 0xfb4a, 0 },
+ { "tavdagesh", 0xfb4a, 0 },
+ { "tavdageshhebrew", 0xfb4a, 0 },
+ { "tavhebrew", 0x05ea, 0 },
+ { "tbopomofo", 0x310a, 0 },
+ { "tccurl", 0x02a8, 0 },
+ { "tcedilla", 0x0163, 0 },
+ { "tcheharabic", 0x0686, 0 },
+ { "tchehfinalarabic", 0xfb7b, 0 },
+ { "tchehinitialarabic", 0xfb7c, 0 },
+ { "tchehmedialarabic", 0xfb7d, 0 },
+ { "tchehmeeminitialarabic", 0xfb7c, 0 },
+ { "tcircle", 0x24e3, 0 },
+ { "tcircumflexbelow", 0x1e71, 0 },
+ { "tdieresis", 0x1e97, 0 },
+ { "tdotaccent", 0x1e6b, 0 },
+ { "tdotbelow", 0x1e6d, 0 },
+ { "tecyrillic", 0x0442, 0 },
+ { "tedescendercyrillic", 0x04ad, 0 },
+ { "teharabic", 0x062a, 0 },
+ { "tehfinalarabic", 0xfe96, 0 },
+ { "tehhahinitialarabic", 0xfca2, 0 },
+ { "tehhahisolatedarabic", 0xfc0c, 0 },
+ { "tehinitialarabic", 0xfe97, 0 },
+ { "tehiragana", 0x3066, 0 },
+ { "tehjeeminitialarabic", 0xfca1, 0 },
+ { "tehjeemisolatedarabic", 0xfc0b, 0 },
+ { "tehmarbutaarabic", 0x0629, 0 },
+ { "tehmarbutafinalarabic", 0xfe94, 0 },
+ { "tehmedialarabic", 0xfe98, 0 },
+ { "tehmeeminitialarabic", 0xfca4, 0 },
+ { "tehmeemisolatedarabic", 0xfc0e, 0 },
+ { "tehnoonfinalarabic", 0xfc73, 0 },
+ { "tekatakana", 0x30c6, 0 },
+ { "tekatakanahalfwidth", 0xff83, 0 },
+ { "telephone", 0x2121, 0 },
+ { "telephoneblack", 0x260e, 0 },
+ { "telishagedolahebrew", 0x05a0, 0 },
+ { "telishaqetanahebrew", 0x05a9, 0 },
+ { "tencircle", 0x2469, 0 },
+ { "tenideographicparen", 0x3229, 0 },
+ { "tenparen", 0x247d, 0 },
+ { "tenperiod", 0x2491, 0 },
+ { "tenroman", 0x2179, 0 },
+ { "tesh", 0x02a7, 0 },
+ { "tet", 0x05d8, 0 },
+ { "tetdagesh", 0xfb38, 0 },
+ { "tetdageshhebrew", 0xfb38, 0 },
+ { "tethebrew", 0x05d8, 0 },
+ { "tetsecyrillic", 0x04b5, 0 },
+ { "tevirhebrew", 0x059b, 0 },
+ { "tevirlefthebrew", 0x059b, 0 },
+ { "thabengali", 0x09a5, 0 },
+ { "thadeva", 0x0925, 0 },
+ { "thagujarati", 0x0aa5, 0 },
+ { "thagurmukhi", 0x0a25, 0 },
+ { "thalarabic", 0x0630, 0 },
+ { "thalfinalarabic", 0xfeac, 0 },
+ { "thanthakhatlowleftthai", 0xf898, 0 },
+ { "thanthakhatlowrightthai", 0xf897, 0 },
+ { "thanthakhatthai", 0x0e4c, 0 },
+ { "thanthakhatupperleftthai", 0xf896, 0 },
+ { "theharabic", 0x062b, 0 },
+ { "thehfinalarabic", 0xfe9a, 0 },
+ { "thehinitialarabic", 0xfe9b, 0 },
+ { "thehmedialarabic", 0xfe9c, 0 },
+ { "thereexists", 0x2203, 0 },
+ { "thetasymbolgreek", 0x03d1, 0 },
+ { "thieuthacirclekorean", 0x3279, 0 },
+ { "thieuthaparenkorean", 0x3219, 0 },
+ { "thieuthcirclekorean", 0x326b, 0 },
+ { "thieuthkorean", 0x314c, 0 },
+ { "thieuthparenkorean", 0x320b, 0 },
+ { "thirteencircle", 0x246c, 0 },
+ { "thirteenparen", 0x2480, 0 },
+ { "thirteenperiod", 0x2494, 0 },
+ { "thonangmonthothai", 0x0e11, 0 },
+ { "thook", 0x01ad, 0 },
+ { "thophuthaothai", 0x0e12, 0 },
+ { "thothahanthai", 0x0e17, 0 },
+ { "thothanthai", 0x0e10, 0 },
+ { "thothongthai", 0x0e18, 0 },
+ { "thothungthai", 0x0e16, 0 },
+ { "thousandcyrillic", 0x0482, 0 },
+ { "thousandsseparatorarabic", 0x066c, 0 },
+ { "thousandsseparatorpersian", 0x066c, 0 },
+ { "threearabic", 0x0663, 0 },
+ { "threebengali", 0x09e9, 0 },
+ { "threecircle", 0x2462, 0 },
+ { "threecircleinversesansserif", 0x278c, 0 },
+ { "threedeva", 0x0969, 0 },
+ { "threegujarati", 0x0ae9, 0 },
+ { "threegurmukhi", 0x0a69, 0 },
+ { "threehackarabic", 0x0663, 0 },
+ { "threehangzhou", 0x3023, 0 },
+ { "threeideographicparen", 0x3222, 0 },
+ { "threeinferior", 0x2083, 0 },
+ { "threemonospace", 0xff13, 0 },
+ { "threenumeratorbengali", 0x09f6, 0 },
+ { "threeoldstyle", 0xf733, 0 },
+ { "threeparen", 0x2476, 0 },
+ { "threeperiod", 0x248a, 0 },
+ { "threepersian", 0x06f3, 0 },
+ { "threequartersemdash", 0xf6de, 0 },
+ { "threeroman", 0x2172, 0 },
+ { "threesuperior", 0x00b3, 0 },
+ { "threethai", 0x0e53, 0 },
+ { "thzsquare", 0x3394, 0 },
+ { "tihiragana", 0x3061, 0 },
+ { "tikatakana", 0x30c1, 0 },
+ { "tikatakanahalfwidth", 0xff81, 0 },
+ { "tikeutacirclekorean", 0x3270, 0 },
+ { "tikeutaparenkorean", 0x3210, 0 },
+ { "tikeutcirclekorean", 0x3262, 0 },
+ { "tikeutkorean", 0x3137, 0 },
+ { "tikeutparenkorean", 0x3202, 0 },
+ { "tildebelowcmb", 0x0330, 0 },
+ { "tildecmb", 0x0303, 0 },
+ { "tildedoublecmb", 0x0360, 0 },
+ { "tildeoperator", 0x223c, 0 },
+ { "tildeoverlaycmb", 0x0334, 0 },
+ { "tildeverticalcmb", 0x033e, 0 },
+ { "timescircle", 0x2297, 0 },
+ { "tipehahebrew", 0x0596, 0 },
+ { "tipehalefthebrew", 0x0596, 0 },
+ { "tippigurmukhi", 0x0a70, 0 },
+ { "titlocyrilliccmb", 0x0483, 0 },
+ { "tiwnarmenian", 0x057f, 0 },
+ { "tlinebelow", 0x1e6f, 0 },
+ { "tmonospace", 0xff54, 0 },
+ { "toarmenian", 0x0569, 0 },
+ { "tohiragana", 0x3068, 0 },
+ { "tokatakana", 0x30c8, 0 },
+ { "tokatakanahalfwidth", 0xff84, 0 },
+ { "tonebarextrahighmod", 0x02e5, 0 },
+ { "tonebarextralowmod", 0x02e9, 0 },
+ { "tonebarhighmod", 0x02e6, 0 },
+ { "tonebarlowmod", 0x02e8, 0 },
+ { "tonebarmidmod", 0x02e7, 0 },
+ { "tonefive", 0x01bd, 0 },
+ { "tonesix", 0x0185, 0 },
+ { "tonetwo", 0x01a8, 0 },
+ { "tonsquare", 0x3327, 0 },
+ { "topatakthai", 0x0e0f, 0 },
+ { "tortoiseshellbracketleft", 0x3014, 0 },
+ { "tortoiseshellbracketleftsmall", 0xfe5d, 0 },
+ { "tortoiseshellbracketleftvertical", 0xfe39, 0 },
+ { "tortoiseshellbracketright", 0x3015, 0 },
+ { "tortoiseshellbracketrightsmall", 0xfe5e, 0 },
+ { "tortoiseshellbracketrightvertical", 0xfe3a, 0 },
+ { "totaothai", 0x0e15, 0 },
+ { "tpalatalhook", 0x01ab, 0 },
+ { "tparen", 0x24af, 0 },
+ { "trademarksans", 0xf8ea, 0 },
+ { "trademarkserif", 0xf6db, 0 },
+ { "tretroflexhook", 0x0288, 0 },
+ { "ts", 0x02a6, 0 },
+ { "tsadi", 0x05e6, 0 },
+ { "tsadidagesh", 0xfb46, 0 },
+ { "tsadidageshhebrew", 0xfb46, 0 },
+ { "tsadihebrew", 0x05e6, 0 },
+ { "tsecyrillic", 0x0446, 0 },
+ { "tsere", 0x05b5, 0 },
+ { "tsere12", 0x05b5, 0 },
+ { "tsere1e", 0x05b5, 0 },
+ { "tsere2b", 0x05b5, 0 },
+ { "tserehebrew", 0x05b5, 0 },
+ { "tserenarrowhebrew", 0x05b5, 0 },
+ { "tserequarterhebrew", 0x05b5, 0 },
+ { "tserewidehebrew", 0x05b5, 0 },
+ { "tshecyrillic", 0x045b, 0 },
+ { "tsuperior", 0xf6f3, 0 },
+ { "ttabengali", 0x099f, 0 },
+ { "ttadeva", 0x091f, 0 },
+ { "ttagujarati", 0x0a9f, 0 },
+ { "ttagurmukhi", 0x0a1f, 0 },
+ { "tteharabic", 0x0679, 0 },
+ { "ttehfinalarabic", 0xfb67, 0 },
+ { "ttehinitialarabic", 0xfb68, 0 },
+ { "ttehmedialarabic", 0xfb69, 0 },
+ { "tthabengali", 0x09a0, 0 },
+ { "tthadeva", 0x0920, 0 },
+ { "tthagujarati", 0x0aa0, 0 },
+ { "tthagurmukhi", 0x0a20, 0 },
+ { "tturned", 0x0287, 0 },
+ { "tuhiragana", 0x3064, 0 },
+ { "tukatakana", 0x30c4, 0 },
+ { "tukatakanahalfwidth", 0xff82, 0 },
+ { "tusmallhiragana", 0x3063, 0 },
+ { "tusmallkatakana", 0x30c3, 0 },
+ { "tusmallkatakanahalfwidth", 0xff6f, 0 },
+ { "twelvecircle", 0x246b, 0 },
+ { "twelveparen", 0x247f, 0 },
+ { "twelveperiod", 0x2493, 0 },
+ { "twelveroman", 0x217b, 0 },
+ { "twentycircle", 0x2473, 0 },
+ { "twentyhangzhou", 0x5344, 0 },
+ { "twentyparen", 0x2487, 0 },
+ { "twentyperiod", 0x249b, 0 },
+ { "twoarabic", 0x0662, 0 },
+ { "twobengali", 0x09e8, 0 },
+ { "twocircle", 0x2461, 0 },
+ { "twocircleinversesansserif", 0x278b, 0 },
+ { "twodeva", 0x0968, 0 },
+ { "twodotleader", 0x2025, 0 },
+ { "twodotleadervertical", 0xfe30, 0 },
+ { "twogujarati", 0x0ae8, 0 },
+ { "twogurmukhi", 0x0a68, 0 },
+ { "twohackarabic", 0x0662, 0 },
+ { "twohangzhou", 0x3022, 0 },
+ { "twoideographicparen", 0x3221, 0 },
+ { "twoinferior", 0x2082, 0 },
+ { "twomonospace", 0xff12, 0 },
+ { "twonumeratorbengali", 0x09f5, 0 },
+ { "twooldstyle", 0xf732, 0 },
+ { "twoparen", 0x2475, 0 },
+ { "twoperiod", 0x2489, 0 },
+ { "twopersian", 0x06f2, 0 },
+ { "tworoman", 0x2171, 0 },
+ { "twostroke", 0x01bb, 0 },
+ { "twosuperior", 0x00b2, 0 },
+ { "twothai", 0x0e52, 0 },
+ { "ubar", 0x0289, 0 },
+ { "ubengali", 0x0989, 0 },
+ { "ubopomofo", 0x3128, 0 },
+ { "ucaron", 0x01d4, 0 },
+ { "ucircle", 0x24e4, 0 },
+ { "ucircumflexbelow", 0x1e77, 0 },
+ { "ucyrillic", 0x0443, 0 },
+ { "udattadeva", 0x0951, 0 },
+ { "udblacute", 0x0171, 0 },
+ { "udblgrave", 0x0215, 0 },
+ { "udeva", 0x0909, 0 },
+ { "udieresisacute", 0x01d8, 0 },
+ { "udieresisbelow", 0x1e73, 0 },
+ { "udieresiscaron", 0x01da, 0 },
+ { "udieresiscyrillic", 0x04f1, 0 },
+ { "udieresisgrave", 0x01dc, 0 },
+ { "udieresismacron", 0x01d6, 0 },
+ { "udotbelow", 0x1ee5, 0 },
+ { "ugujarati", 0x0a89, 0 },
+ { "ugurmukhi", 0x0a09, 0 },
+ { "uhiragana", 0x3046, 0 },
+ { "uhookabove", 0x1ee7, 0 },
+ { "uhornacute", 0x1ee9, 0 },
+ { "uhorndotbelow", 0x1ef1, 0 },
+ { "uhorngrave", 0x1eeb, 0 },
+ { "uhornhookabove", 0x1eed, 0 },
+ { "uhorntilde", 0x1eef, 0 },
+ { "uhungarumlautcyrillic", 0x04f3, 0 },
+ { "uinvertedbreve", 0x0217, 0 },
+ { "ukatakana", 0x30a6, 0 },
+ { "ukatakanahalfwidth", 0xff73, 0 },
+ { "ukcyrillic", 0x0479, 0 },
+ { "ukorean", 0x315c, 0 },
+ { "umacroncyrillic", 0x04ef, 0 },
+ { "umacrondieresis", 0x1e7b, 0 },
+ { "umatragurmukhi", 0x0a41, 0 },
+ { "umonospace", 0xff55, 0 },
+ { "underscoremonospace", 0xff3f, 0 },
+ { "underscorevertical", 0xfe33, 0 },
+ { "underscorewavy", 0xfe4f, 0 },
+ { "uparen", 0x24b0, 0 },
+ { "upperdothebrew", 0x05c4, 0 },
+ { "upsilonlatin", 0x028a, 0 },
+ { "uptackbelowcmb", 0x031d, 0 },
+ { "uptackmod", 0x02d4, 0 },
+ { "uragurmukhi", 0x0a73, 0 },
+ { "ushortcyrillic", 0x045e, 0 },
+ { "usmallhiragana", 0x3045, 0 },
+ { "usmallkatakana", 0x30a5, 0 },
+ { "usmallkatakanahalfwidth", 0xff69, 0 },
+ { "ustraightcyrillic", 0x04af, 0 },
+ { "ustraightstrokecyrillic", 0x04b1, 0 },
+ { "utildeacute", 0x1e79, 0 },
+ { "utildebelow", 0x1e75, 0 },
+ { "uubengali", 0x098a, 0 },
+ { "uudeva", 0x090a, 0 },
+ { "uugujarati", 0x0a8a, 0 },
+ { "uugurmukhi", 0x0a0a, 0 },
+ { "uumatragurmukhi", 0x0a42, 0 },
+ { "uuvowelsignbengali", 0x09c2, 0 },
+ { "uuvowelsigndeva", 0x0942, 0 },
+ { "uuvowelsigngujarati", 0x0ac2, 0 },
+ { "uvowelsignbengali", 0x09c1, 0 },
+ { "uvowelsigndeva", 0x0941, 0 },
+ { "uvowelsigngujarati", 0x0ac1, 0 },
+ { "vadeva", 0x0935, 0 },
+ { "vagujarati", 0x0ab5, 0 },
+ { "vagurmukhi", 0x0a35, 0 },
+ { "vakatakana", 0x30f7, 0 },
+ { "vav", 0x05d5, 0 },
+ { "vavdagesh", 0xfb35, 0 },
+ { "vavdagesh65", 0xfb35, 0 },
+ { "vavdageshhebrew", 0xfb35, 0 },
+ { "vavhebrew", 0x05d5, 0 },
+ { "vavholam", 0xfb4b, 0 },
+ { "vavholamhebrew", 0xfb4b, 0 },
+ { "vavvavhebrew", 0x05f0, 0 },
+ { "vavyodhebrew", 0x05f1, 0 },
+ { "vcircle", 0x24e5, 0 },
+ { "vdotbelow", 0x1e7f, 0 },
+ { "vecyrillic", 0x0432, 0 },
+ { "veharabic", 0x06a4, 0 },
+ { "vehfinalarabic", 0xfb6b, 0 },
+ { "vehinitialarabic", 0xfb6c, 0 },
+ { "vehmedialarabic", 0xfb6d, 0 },
+ { "vekatakana", 0x30f9, 0 },
+ { "venus", 0x2640, 0 },
+ { "verticalbar", 0x007c, 0 },
+ { "verticallineabovecmb", 0x030d, 0 },
+ { "verticallinebelowcmb", 0x0329, 0 },
+ { "verticallinelowmod", 0x02cc, 0 },
+ { "verticallinemod", 0x02c8, 0 },
+ { "vewarmenian", 0x057e, 0 },
+ { "vhook", 0x028b, 0 },
+ { "vikatakana", 0x30f8, 0 },
+ { "viramabengali", 0x09cd, 0 },
+ { "viramadeva", 0x094d, 0 },
+ { "viramagujarati", 0x0acd, 0 },
+ { "visargabengali", 0x0983, 0 },
+ { "visargadeva", 0x0903, 0 },
+ { "visargagujarati", 0x0a83, 0 },
+ { "vmonospace", 0xff56, 0 },
+ { "voarmenian", 0x0578, 0 },
+ { "voicediterationhiragana", 0x309e, 0 },
+ { "voicediterationkatakana", 0x30fe, 0 },
+ { "voicedmarkkana", 0x309b, 0 },
+ { "voicedmarkkanahalfwidth", 0xff9e, 0 },
+ { "vokatakana", 0x30fa, 0 },
+ { "vparen", 0x24b1, 0 },
+ { "vtilde", 0x1e7d, 0 },
+ { "vturned", 0x028c, 0 },
+ { "vuhiragana", 0x3094, 0 },
+ { "vukatakana", 0x30f4, 0 },
+ { "waekorean", 0x3159, 0 },
+ { "wahiragana", 0x308f, 0 },
+ { "wakatakana", 0x30ef, 0 },
+ { "wakatakanahalfwidth", 0xff9c, 0 },
+ { "wakorean", 0x3158, 0 },
+ { "wasmallhiragana", 0x308e, 0 },
+ { "wasmallkatakana", 0x30ee, 0 },
+ { "wattosquare", 0x3357, 0 },
+ { "wavedash", 0x301c, 0 },
+ { "wavyunderscorevertical", 0xfe34, 0 },
+ { "wawarabic", 0x0648, 0 },
+ { "wawfinalarabic", 0xfeee, 0 },
+ { "wawhamzaabovearabic", 0x0624, 0 },
+ { "wawhamzaabovefinalarabic", 0xfe86, 0 },
+ { "wbsquare", 0x33dd, 0 },
+ { "wcircle", 0x24e6, 0 },
+ { "wdotaccent", 0x1e87, 0 },
+ { "wdotbelow", 0x1e89, 0 },
+ { "wehiragana", 0x3091, 0 },
+ { "wekatakana", 0x30f1, 0 },
+ { "wekorean", 0x315e, 0 },
+ { "weokorean", 0x315d, 0 },
+ { "whitebullet", 0x25e6, 0 },
+ { "whitecircle", 0x25cb, 0 },
+ { "whitecircleinverse", 0x25d9, 0 },
+ { "whitecornerbracketleft", 0x300e, 0 },
+ { "whitecornerbracketleftvertical", 0xfe43, 0 },
+ { "whitecornerbracketright", 0x300f, 0 },
+ { "whitecornerbracketrightvertical", 0xfe44, 0 },
+ { "whitediamond", 0x25c7, 0 },
+ { "whitediamondcontainingblacksmalldiamond", 0x25c8, 0 },
+ { "whitedownpointingsmalltriangle", 0x25bf, 0 },
+ { "whitedownpointingtriangle", 0x25bd, 0 },
+ { "whiteleftpointingsmalltriangle", 0x25c3, 0 },
+ { "whiteleftpointingtriangle", 0x25c1, 0 },
+ { "whitelenticularbracketleft", 0x3016, 0 },
+ { "whitelenticularbracketright", 0x3017, 0 },
+ { "whiterightpointingsmalltriangle", 0x25b9, 0 },
+ { "whiterightpointingtriangle", 0x25b7, 0 },
+ { "whitesmallsquare", 0x25ab, 0 },
+ { "whitesmilingface", 0x263a, 0 },
+ { "whitesquare", 0x25a1, 0 },
+ { "whitestar", 0x2606, 0 },
+ { "whitetelephone", 0x260f, 0 },
+ { "whitetortoiseshellbracketleft", 0x3018, 0 },
+ { "whitetortoiseshellbracketright", 0x3019, 0 },
+ { "whiteuppointingsmalltriangle", 0x25b5, 0 },
+ { "whiteuppointingtriangle", 0x25b3, 0 },
+ { "wihiragana", 0x3090, 0 },
+ { "wikatakana", 0x30f0, 0 },
+ { "wikorean", 0x315f, 0 },
+ { "wmonospace", 0xff57, 0 },
+ { "wohiragana", 0x3092, 0 },
+ { "wokatakana", 0x30f2, 0 },
+ { "wokatakanahalfwidth", 0xff66, 0 },
+ { "won", 0x20a9, 0 },
+ { "wonmonospace", 0xffe6, 0 },
+ { "wowaenthai", 0x0e27, 0 },
+ { "wparen", 0x24b2, 0 },
+ { "wring", 0x1e98, 0 },
+ { "wsuperior", 0x02b7, 0 },
+ { "wturned", 0x028d, 0 },
+ { "wynn", 0x01bf, 0 },
+ { "xabovecmb", 0x033d, 0 },
+ { "xbopomofo", 0x3112, 0 },
+ { "xcircle", 0x24e7, 0 },
+ { "xdieresis", 0x1e8d, 0 },
+ { "xdotaccent", 0x1e8b, 0 },
+ { "xeharmenian", 0x056d, 0 },
+ { "xmonospace", 0xff58, 0 },
+ { "xparen", 0x24b3, 0 },
+ { "xsuperior", 0x02e3, 0 },
+ { "yaadosquare", 0x334e, 0 },
+ { "yabengali", 0x09af, 0 },
+ { "yadeva", 0x092f, 0 },
+ { "yaekorean", 0x3152, 0 },
+ { "yagujarati", 0x0aaf, 0 },
+ { "yagurmukhi", 0x0a2f, 0 },
+ { "yahiragana", 0x3084, 0 },
+ { "yakatakana", 0x30e4, 0 },
+ { "yakatakanahalfwidth", 0xff94, 0 },
+ { "yakorean", 0x3151, 0 },
+ { "yamakkanthai", 0x0e4e, 0 },
+ { "yasmallhiragana", 0x3083, 0 },
+ { "yasmallkatakana", 0x30e3, 0 },
+ { "yasmallkatakanahalfwidth", 0xff6c, 0 },
+ { "yatcyrillic", 0x0463, 0 },
+ { "ycircle", 0x24e8, 0 },
+ { "ydotaccent", 0x1e8f, 0 },
+ { "ydotbelow", 0x1ef5, 0 },
+ { "yeharabic", 0x064a, 0 },
+ { "yehbarreearabic", 0x06d2, 0 },
+ { "yehbarreefinalarabic", 0xfbaf, 0 },
+ { "yehfinalarabic", 0xfef2, 0 },
+ { "yehhamzaabovearabic", 0x0626, 0 },
+ { "yehhamzaabovefinalarabic", 0xfe8a, 0 },
+ { "yehhamzaaboveinitialarabic", 0xfe8b, 0 },
+ { "yehhamzaabovemedialarabic", 0xfe8c, 0 },
+ { "yehinitialarabic", 0xfef3, 0 },
+ { "yehmedialarabic", 0xfef4, 0 },
+ { "yehmeeminitialarabic", 0xfcdd, 0 },
+ { "yehmeemisolatedarabic", 0xfc58, 0 },
+ { "yehnoonfinalarabic", 0xfc94, 0 },
+ { "yehthreedotsbelowarabic", 0x06d1, 0 },
+ { "yekorean", 0x3156, 0 },
+ { "yenmonospace", 0xffe5, 0 },
+ { "yeokorean", 0x3155, 0 },
+ { "yeorinhieuhkorean", 0x3186, 0 },
+ { "yerahbenyomohebrew", 0x05aa, 0 },
+ { "yerahbenyomolefthebrew", 0x05aa, 0 },
+ { "yericyrillic", 0x044b, 0 },
+ { "yerudieresiscyrillic", 0x04f9, 0 },
+ { "yesieungkorean", 0x3181, 0 },
+ { "yesieungpansioskorean", 0x3183, 0 },
+ { "yesieungsioskorean", 0x3182, 0 },
+ { "yetivhebrew", 0x059a, 0 },
+ { "yhook", 0x01b4, 0 },
+ { "yhookabove", 0x1ef7, 0 },
+ { "yiarmenian", 0x0575, 0 },
+ { "yicyrillic", 0x0457, 0 },
+ { "yikorean", 0x3162, 0 },
+ { "yinyang", 0x262f, 0 },
+ { "yiwnarmenian", 0x0582, 0 },
+ { "ymonospace", 0xff59, 0 },
+ { "yod", 0x05d9, 0 },
+ { "yoddagesh", 0xfb39, 0 },
+ { "yoddageshhebrew", 0xfb39, 0 },
+ { "yodhebrew", 0x05d9, 0 },
+ { "yodyodhebrew", 0x05f2, 0 },
+ { "yodyodpatahhebrew", 0xfb1f, 0 },
+ { "yohiragana", 0x3088, 0 },
+ { "yoikorean", 0x3189, 0 },
+ { "yokatakana", 0x30e8, 0 },
+ { "yokatakanahalfwidth", 0xff96, 0 },
+ { "yokorean", 0x315b, 0 },
+ { "yosmallhiragana", 0x3087, 0 },
+ { "yosmallkatakana", 0x30e7, 0 },
+ { "yosmallkatakanahalfwidth", 0xff6e, 0 },
+ { "yotgreek", 0x03f3, 0 },
+ { "yoyaekorean", 0x3188, 0 },
+ { "yoyakorean", 0x3187, 0 },
+ { "yoyakthai", 0x0e22, 0 },
+ { "yoyingthai", 0x0e0d, 0 },
+ { "yparen", 0x24b4, 0 },
+ { "ypogegrammeni", 0x037a, 0 },
+ { "ypogegrammenigreekcmb", 0x0345, 0 },
+ { "yr", 0x01a6, 0 },
+ { "yring", 0x1e99, 0 },
+ { "ysuperior", 0x02b8, 0 },
+ { "ytilde", 0x1ef9, 0 },
+ { "yturned", 0x028e, 0 },
+ { "yuhiragana", 0x3086, 0 },
+ { "yuikorean", 0x318c, 0 },
+ { "yukatakana", 0x30e6, 0 },
+ { "yukatakanahalfwidth", 0xff95, 0 },
+ { "yukorean", 0x3160, 0 },
+ { "yusbigcyrillic", 0x046b, 0 },
+ { "yusbigiotifiedcyrillic", 0x046d, 0 },
+ { "yuslittlecyrillic", 0x0467, 0 },
+ { "yuslittleiotifiedcyrillic", 0x0469, 0 },
+ { "yusmallhiragana", 0x3085, 0 },
+ { "yusmallkatakana", 0x30e5, 0 },
+ { "yusmallkatakanahalfwidth", 0xff6d, 0 },
+ { "yuyekorean", 0x318b, 0 },
+ { "yuyeokorean", 0x318a, 0 },
+ { "yyabengali", 0x09df, 0 },
+ { "yyadeva", 0x095f, 0 },
+ { "zaarmenian", 0x0566, 0 },
+ { "zadeva", 0x095b, 0 },
+ { "zagurmukhi", 0x0a5b, 0 },
+ { "zaharabic", 0x0638, 0 },
+ { "zahfinalarabic", 0xfec6, 0 },
+ { "zahinitialarabic", 0xfec7, 0 },
+ { "zahiragana", 0x3056, 0 },
+ { "zahmedialarabic", 0xfec8, 0 },
+ { "zainarabic", 0x0632, 0 },
+ { "zainfinalarabic", 0xfeb0, 0 },
+ { "zakatakana", 0x30b6, 0 },
+ { "zaqefgadolhebrew", 0x0595, 0 },
+ { "zaqefqatanhebrew", 0x0594, 0 },
+ { "zarqahebrew", 0x0598, 0 },
+ { "zayin", 0x05d6, 0 },
+ { "zayindagesh", 0xfb36, 0 },
+ { "zayindageshhebrew", 0xfb36, 0 },
+ { "zayinhebrew", 0x05d6, 0 },
+ { "zbopomofo", 0x3117, 0 },
+ { "zcircle", 0x24e9, 0 },
+ { "zcircumflex", 0x1e91, 0 },
+ { "zcurl", 0x0291, 0 },
+ { "zdot", 0x017c, 0 },
+ { "zdotbelow", 0x1e93, 0 },
+ { "zecyrillic", 0x0437, 0 },
+ { "zedescendercyrillic", 0x0499, 0 },
+ { "zedieresiscyrillic", 0x04df, 0 },
+ { "zehiragana", 0x305c, 0 },
+ { "zekatakana", 0x30bc, 0 },
+ { "zeroarabic", 0x0660, 0 },
+ { "zerobengali", 0x09e6, 0 },
+ { "zerodeva", 0x0966, 0 },
+ { "zerogujarati", 0x0ae6, 0 },
+ { "zerogurmukhi", 0x0a66, 0 },
+ { "zerohackarabic", 0x0660, 0 },
+ { "zeroinferior", 0x2080, 0 },
+ { "zeromonospace", 0xff10, 0 },
+ { "zerooldstyle", 0xf730, 0 },
+ { "zeropersian", 0x06f0, 0 },
+ { "zerosuperior", 0x2070, 0 },
+ { "zerothai", 0x0e50, 0 },
+ { "zerowidthjoiner", 0xfeff, 0 },
+ { "zerowidthnonjoiner", 0x200c, 0 },
+ { "zerowidthspace", 0x200b, 0 },
+ { "zhbopomofo", 0x3113, 0 },
+ { "zhearmenian", 0x056a, 0 },
+ { "zhebrevecyrillic", 0x04c2, 0 },
+ { "zhecyrillic", 0x0436, 0 },
+ { "zhedescendercyrillic", 0x0497, 0 },
+ { "zhedieresiscyrillic", 0x04dd, 0 },
+ { "zihiragana", 0x3058, 0 },
+ { "zikatakana", 0x30b8, 0 },
+ { "zinorhebrew", 0x05ae, 0 },
+ { "zlinebelow", 0x1e95, 0 },
+ { "zmonospace", 0xff5a, 0 },
+ { "zohiragana", 0x305e, 0 },
+ { "zokatakana", 0x30be, 0 },
+ { "zparen", 0x24b5, 0 },
+ { "zretroflexhook", 0x0290, 0 },
+ { "zstroke", 0x01b6, 0 },
+ { "zuhiragana", 0x305a, 0 },
+ { "zukatakana", 0x30ba, 0 },
+ { "dotaccent.cap", 0xefed, 0 },
+ { "breve.cap", 0xefee, 0 },
+ { "ogonek.cap", 0xeff1, 0 },
+ { "cedilla.cap", 0xeff2, 0 },
+ { "ring.cap", 0xeff3, 0 },
+ { "tilde.cap", 0xeff5, 0 },
+ { "circumflex.cap", 0xeff7, 0 },
+ { "a1", 0x2701, 0 },
+ { "a2", 0x2702, 0 },
+ { "a202", 0x2703, 0 },
+ { "a3", 0x2704, 0 },
+ { "a4", 0x260e, 0 },
+ { "a5", 0x2706, 0 },
+ { "a119", 0x2707, 0 },
+ { "a118", 0x2708, 0 },
+ { "a117", 0x2709, 0 },
+ { "a11", 0x261b, 0 },
+ { "a12", 0x261e, 0 },
+ { "a13", 0x270c, 0 },
+ { "a14", 0x270d, 0 },
+ { "a15", 0x270e, 0 },
+ { "a16", 0x270f, 0 },
+ { "a105", 0x2710, 0 },
+ { "a17", 0x2711, 0 },
+ { "a18", 0x2712, 0 },
+ { "a19", 0x2713, 0 },
+ { "a20", 0x2714, 0 },
+ { "a21", 0x2715, 0 },
+ { "a22", 0x2716, 0 },
+ { "a23", 0x2717, 0 },
+ { "a24", 0x2718, 0 },
+ { "a25", 0x2719, 0 },
+ { "a26", 0x271a, 0 },
+ { "a27", 0x271b, 0 },
+ { "a28", 0x271c, 0 },
+ { "a6", 0x271d, 0 },
+ { "a7", 0x271e, 0 },
+ { "a8", 0x271f, 0 },
+ { "a9", 0x2720, 0 },
+ { "a10", 0x2721, 0 },
+ { "a29", 0x2722, 0 },
+ { "a30", 0x2723, 0 },
+ { "a31", 0x2724, 0 },
+ { "a32", 0x2725, 0 },
+ { "a33", 0x2726, 0 },
+ { "a34", 0x2727, 0 },
+ { "a35", 0x2605, 0 },
+ { "a36", 0x2729, 0 },
+ { "a37", 0x272a, 0 },
+ { "a38", 0x272b, 0 },
+ { "a39", 0x272c, 0 },
+ { "a40", 0x272d, 0 },
+ { "a41", 0x272e, 0 },
+ { "a42", 0x272f, 0 },
+ { "a43", 0x2730, 0 },
+ { "a44", 0x2731, 0 },
+ { "a45", 0x2732, 0 },
+ { "a46", 0x2733, 0 },
+ { "a47", 0x2734, 0 },
+ { "a48", 0x2735, 0 },
+ { "a49", 0x2736, 0 },
+ { "a50", 0x2737, 0 },
+ { "a51", 0x2738, 0 },
+ { "a52", 0x2739, 0 },
+ { "a53", 0x273a, 0 },
+ { "a54", 0x273b, 0 },
+ { "a55", 0x273c, 0 },
+ { "a56", 0x273d, 0 },
+ { "a57", 0x273e, 0 },
+ { "a58", 0x273f, 0 },
+ { "a59", 0x2740, 0 },
+ { "a60", 0x2741, 0 },
+ { "a61", 0x2742, 0 },
+ { "a62", 0x2743, 0 },
+ { "a63", 0x2744, 0 },
+ { "a64", 0x2745, 0 },
+ { "a65", 0x2746, 0 },
+ { "a66", 0x2747, 0 },
+ { "a67", 0x2748, 0 },
+ { "a68", 0x2749, 0 },
+ { "a69", 0x274a, 0 },
+ { "a70", 0x274b, 0 },
+ { "a71", 0x25cf, 0 },
+ { "a72", 0x274d, 0 },
+ { "a73", 0x25a0, 0 },
+ { "a74", 0x274f, 0 },
+ { "a203", 0x2750, 0 },
+ { "a75", 0x2751, 0 },
+ { "a204", 0x2752, 0 },
+ { "a76", 0x25b2, 0 },
+ { "a77", 0x25bc, 0 },
+ { "a78", 0x25c6, 0 },
+ { "a79", 0x2756, 0 },
+ { "a81", 0x25d7, 0 },
+ { "a82", 0x2758, 0 },
+ { "a83", 0x2759, 0 },
+ { "a84", 0x275a, 0 },
+ { "a97", 0x275b, 0 },
+ { "a98", 0x275c, 0 },
+ { "a99", 0x275d, 0 },
+ { "a100", 0x275e, 0 },
+ { "a89", 0x2768, 0 },
+ { "a90", 0x2769, 0 },
+ { "a93", 0x276a, 0 },
+ { "a94", 0x276b, 0 },
+ { "a91", 0x276c, 0 },
+ { "a92", 0x276d, 0 },
+ { "a205", 0x276e, 0 },
+ { "a85", 0x276f, 0 },
+ { "a206", 0x2770, 0 },
+ { "a86", 0x2771, 0 },
+ { "a87", 0x2772, 0 },
+ { "a88", 0x2773, 0 },
+ { "a95", 0x2774, 0 },
+ { "a96", 0x2775, 0 },
+ { "a101", 0x2761, 0 },
+ { "a102", 0x2762, 0 },
+ { "a103", 0x2763, 0 },
+ { "a104", 0x2764, 0 },
+ { "a106", 0x2765, 0 },
+ { "a107", 0x2766, 0 },
+ { "a108", 0x2767, 0 },
+ { "a112", 0x2663, 0 },
+ { "a111", 0x2666, 0 },
+ { "a110", 0x2665, 0 },
+ { "a109", 0x2660, 0 },
+ { "a120", 0x2460, 0 },
+ { "a121", 0x2461, 0 },
+ { "a122", 0x2462, 0 },
+ { "a123", 0x2463, 0 },
+ { "a124", 0x2464, 0 },
+ { "a125", 0x2465, 0 },
+ { "a126", 0x2466, 0 },
+ { "a127", 0x2467, 0 },
+ { "a128", 0x2468, 0 },
+ { "a129", 0x2469, 0 },
+ { "a130", 0x2776, 0 },
+ { "a131", 0x2777, 0 },
+ { "a132", 0x2778, 0 },
+ { "a133", 0x2779, 0 },
+ { "a134", 0x277a, 0 },
+ { "a135", 0x277b, 0 },
+ { "a136", 0x277c, 0 },
+ { "a137", 0x277d, 0 },
+ { "a138", 0x277e, 0 },
+ { "a139", 0x277f, 0 },
+ { "a140", 0x2780, 0 },
+ { "a141", 0x2781, 0 },
+ { "a142", 0x2782, 0 },
+ { "a143", 0x2783, 0 },
+ { "a144", 0x2784, 0 },
+ { "a145", 0x2785, 0 },
+ { "a146", 0x2786, 0 },
+ { "a147", 0x2787, 0 },
+ { "a148", 0x2788, 0 },
+ { "a149", 0x2789, 0 },
+ { "a150", 0x278a, 0 },
+ { "a151", 0x278b, 0 },
+ { "a152", 0x278c, 0 },
+ { "a153", 0x278d, 0 },
+ { "a154", 0x278e, 0 },
+ { "a155", 0x278f, 0 },
+ { "a156", 0x2790, 0 },
+ { "a157", 0x2791, 0 },
+ { "a158", 0x2792, 0 },
+ { "a159", 0x2793, 0 },
+ { "a160", 0x2794, 0 },
+ { "a161", 0x2192, 0 },
+ { "a163", 0x2194, 0 },
+ { "a164", 0x2195, 0 },
+ { "a196", 0x2798, 0 },
+ { "a165", 0x2799, 0 },
+ { "a192", 0x279a, 0 },
+ { "a166", 0x279b, 0 },
+ { "a167", 0x279c, 0 },
+ { "a168", 0x279d, 0 },
+ { "a169", 0x279e, 0 },
+ { "a170", 0x279f, 0 },
+ { "a171", 0x27a0, 0 },
+ { "a172", 0x27a1, 0 },
+ { "a173", 0x27a2, 0 },
+ { "a162", 0x27a3, 0 },
+ { "a174", 0x27a4, 0 },
+ { "a175", 0x27a5, 0 },
+ { "a176", 0x27a6, 0 },
+ { "a177", 0x27a7, 0 },
+ { "a178", 0x27a8, 0 },
+ { "a179", 0x27a9, 0 },
+ { "a193", 0x27aa, 0 },
+ { "a180", 0x27ab, 0 },
+ { "a199", 0x27ac, 0 },
+ { "a181", 0x27ad, 0 },
+ { "a200", 0x27ae, 0 },
+ { "a182", 0x27af, 0 },
+ { "a201", 0x27b1, 0 },
+ { "a183", 0x27b2, 0 },
+ { "a184", 0x27b3, 0 },
+ { "a197", 0x27b4, 0 },
+ { "a185", 0x27b5, 0 },
+ { "a194", 0x27b6, 0 },
+ { "a198", 0x27b7, 0 },
+ { "a186", 0x27b8, 0 },
+ { "a195", 0x27b9, 0 },
+ { "a187", 0x27ba, 0 },
+ { "a188", 0x27bb, 0 },
+ { "a189", 0x27bc, 0 },
+ { "a190", 0x27bd, 0 },
+ { "a191", 0x27be, 0 },
+ { "register.sans", 0xf8e8, 0 },
+ { "register.serif", 0xf6da, 0 },
+ { "one.superior", 0x00b9, 0 },
+ { "two.superior", 0x00b2, 0 },
+ { "three.superior", 0x00b3, 0 },
+ { "parenleft.superior", 0x207d, 0 },
+ { "parenright.superior", 0x207e, 0 },
+ { "n.superior", 0x207f, 0 },
+ { "parenleft.inferior", 0x208d, 0 },
+ { "parenright.inferior", 0x208e, 0 },
+ { "zero.superior", 0x2070, 0 },
+ { "four.superior", 0x2074, 0 },
+ { "five.superior", 0x2075, 0 },
+ { "six.superior", 0x2076, 0 },
+ { "seven.superior", 0x2077, 0 },
+ { "eight.superior", 0x2078, 0 },
+ { "nine.superior", 0x2079, 0 },
+ { "zero.inferior", 0x2080, 0 },
+ { "one.inferior", 0x2081, 0 },
+ { "two.inferior", 0x2082, 0 },
+ { "three.inferior", 0x2083, 0 },
+ { "four.inferior", 0x2084, 0 },
+ { "five.inferior", 0x2085, 0 },
+ { "six.inferior", 0x2086, 0 },
+ { "seven.inferior", 0x2087, 0 },
+ { "eight.inferior", 0x2088, 0 },
+ { "nine.inferior", 0x2089, 0 },
+ { "mu.greek", 0x03bc, 0 },
+ { "Delta.greek", 0x0394, 0 },
+ { "Omega.greek", 0x03a9, 0 },
+ { "sigma.end", 0x03c2, 0 },
+ { "beta.alt", 0x03d0, 0 },
+ { "kappa.alt", 0x03f0, 0 },
+ { "theta.alt", 0x03d1, 0 },
+ { "Upsilon.alt", 0x03d2, 0 },
+ { "phi.alt", 0x03d5, 0 },
+ { "pi.alt", 0x03d6, 0 },
+ { "A.cyr", 0x0410, 0 },
+ { "Ghe.up", 0x0490, 0 },
+ { "I.cyr", 0x0418, 0 },
+ { "I.short", 0x0419, 0 },
+ { "O.cyr", 0x041e, 0 },
+ { "U.cyr", 0x0423, 0 },
+ { "E.cyr", 0x042d, 0 },
+ { "Ie.ukran", 0x0404, 0 },
+ { "I.ukran", 0x0406, 0 },
+ { "U.short", 0x040e, 0 },
+ { "a.cyr", 0x0430, 0 },
+ { "ghe.up", 0x0491, 0 },
+ { "i.cyr", 0x0438, 0 },
+ { "i.short", 0x0439, 0 },
+ { "o.cyr", 0x043e, 0 },
+ { "u.cyr", 0x0443, 0 },
+ { "e.cyr", 0x044d, 0 },
+ { "ie.ukran", 0x0454, 0 },
+ { "i.ukran", 0x0456, 0 },
+ { "u.short", 0x045e, 0 },
+ { "ghe.ital", 0xf6c4, 0 },
+ { "afii10068.ital", 0xf6c4, 0 },
+ { "afii10066.ital", 0xf6c5, 0 },
+ { "be.alt", 0xf6c5, 0 },
+ { "afii10069.ital", 0xf6c6, 0 },
+ { "de.ital", 0xf6c6, 0 },
+ { "afii10081.ital", 0xf6c7, 0 },
+ { "pe.ital", 0xf6c7, 0 },
+ { "afii10084.ital", 0xf6c8, 0 },
+ { "te.ital", 0xf6c8, 0 },
+ { "Omega.math", 0x2126, 0 },
+ { "Delta.math", 0x2206, 0 },
+ { "afii57689_afii57804", 0xfb2a, 0 },
+ { "afii57689_afii57803", 0xfb2b, 0 },
+ { "afii57669_afii57806", 0xfb4b, 0 },
+ { "afii57718_afii57798", 0xfb1f, 0 },
+ { "afii57669_afii57807", 0xfb35, 0 },
+ { ".null", 0x0000, 0 },
+ { "dialytika_perispomeni", 0x1fc1, 0 },
+ { "psili_varia", 0x1fcd, 0 },
+ { "psili_oxia", 0x1fce, 0 },
+ { "psili_perispomeni", 0x1fcf, 0 },
+ { "dasia_varia", 0x1fdd, 0 },
+ { "dasia_oxia", 0x1fde, 0 },
+ { "dasia_perispomeni", 0x1fdf, 0 },
+ { "dialytika_varia", 0x1fed, 0 },
+ { "dialytika_oxia", 0x1fee, 0 },
+ { "Alphaacute", 0x1fbb, 0 },
+ { "Alphaasper", 0x1f09, 0 },
+ { "Alphaasperacute", 0x1f0d, 0 },
+ { "Alphaaspergrave", 0x1f0b, 0 },
+ { "Alphaaspertilde", 0x1f0f, 0 },
+ { "Alphabreve", 0x1fb8, 0 },
+ { "Alphagrave", 0x1fba, 0 },
+ { "Alphaiotasub", 0x1fbc, 0 },
+ { "Alphaiotasubasper", 0x1f89, 0 },
+ { "Alphaiotasubasperacute", 0x1f8d, 0 },
+ { "Alphaiotasubaspergrave", 0x1f8b, 0 },
+ { "Alphaiotasubaspertilde", 0x1f8f, 0 },
+ { "Alphaiotasublenis", 0x1f88, 0 },
+ { "Alphaiotasublenisacute", 0x1f8c, 0 },
+ { "Alphaiotasublenisgrave", 0x1f8a, 0 },
+ { "Alphaiotasublenistilde", 0x1f8e, 0 },
+ { "Alphalenis", 0x1f08, 0 },
+ { "Alphalenisacute", 0x1f0c, 0 },
+ { "Alphalenisgrave", 0x1f0a, 0 },
+ { "Alphalenistilde", 0x1f0e, 0 },
+ { "Alphamacron", 0x1fb9, 0 },
+ { "Epsilonacute", 0x1fc9, 0 },
+ { "Epsilonasper", 0x1f19, 0 },
+ { "Epsilonasperacute", 0x1f1d, 0 },
+ { "Epsilonaspergrave", 0x1f1b, 0 },
+ { "Epsilongrave", 0x1fc8, 0 },
+ { "Epsilonlenis", 0x1f18, 0 },
+ { "Epsilonlenisacute", 0x1f1c, 0 },
+ { "Epsilonlenisgrave", 0x1f1a, 0 },
+ { "Etaacute", 0x1fcb, 0 },
+ { "Etaasper", 0x1f29, 0 },
+ { "Etaasperacute", 0x1f2d, 0 },
+ { "Etaaspergrave", 0x1f2b, 0 },
+ { "Etaaspertilde", 0x1f2f, 0 },
+ { "Etagrave", 0x1fca, 0 },
+ { "Etaiotasub", 0x1fcc, 0 },
+ { "Etaiotasubasper", 0x1f99, 0 },
+ { "Etaiotasubasperacute", 0x1f9d, 0 },
+ { "Etaiotasubaspergrave", 0x1f9b, 0 },
+ { "Etaiotasubaspertilde", 0x1f9f, 0 },
+ { "Etaiotasublenis", 0x1f98, 0 },
+ { "Etaiotasublenisacute", 0x1f9c, 0 },
+ { "Etaiotasublenisgrave", 0x1f9a, 0 },
+ { "Etaiotasublenistilde", 0x1f9e, 0 },
+ { "Etalenis", 0x1f28, 0 },
+ { "Etalenisacute", 0x1f2c, 0 },
+ { "Etalenisgrave", 0x1f2a, 0 },
+ { "Etalenistilde", 0x1f2e, 0 },
+ { "Iotaacute", 0x1fdb, 0 },
+ { "Iotaasper", 0x1f39, 0 },
+ { "Iotaasperacute", 0x1f3d, 0 },
+ { "Iotaaspergrave", 0x1f3b, 0 },
+ { "Iotaaspertilde", 0x1f3f, 0 },
+ { "Iotabreve", 0x1fd8, 0 },
+ { "Iotagrave", 0x1fda, 0 },
+ { "Iotalenis", 0x1f38, 0 },
+ { "Iotalenisacute", 0x1f3c, 0 },
+ { "Iotalenisgrave", 0x1f3a, 0 },
+ { "Iotalenistilde", 0x1f3e, 0 },
+ { "Iotamacron", 0x1fd9, 0 },
+ { "Omegaacute", 0x1ffb, 0 },
+ { "Omegaasper", 0x1f69, 0 },
+ { "Omegaasperacute", 0x1f6d, 0 },
+ { "Omegaaspergrave", 0x1f6b, 0 },
+ { "Omegaaspertilde", 0x1f6f, 0 },
+ { "Omegagrave", 0x1ffa, 0 },
+ { "Omegaiotasub", 0x1ffc, 0 },
+ { "Omegaiotasubasper", 0x1fa9, 0 },
+ { "Omegaiotasubasperacute", 0x1fad, 0 },
+ { "Omegaiotasubaspergrave", 0x1fab, 0 },
+ { "Omegaiotasubaspertilde", 0x1faf, 0 },
+ { "Omegaiotasublenis", 0x1fa8, 0 },
+ { "Omegaiotasublenisacute", 0x1fac, 0 },
+ { "Omegaiotasublenisgrave", 0x1faa, 0 },
+ { "Omegaiotasublenistilde", 0x1fae, 0 },
+ { "Omegalenis", 0x1f68, 0 },
+ { "Omegalenisacute", 0x1f6c, 0 },
+ { "Omegalenisgrave", 0x1f6a, 0 },
+ { "Omegalenistilde", 0x1f6e, 0 },
+ { "Omicronacute", 0x1ff9, 0 },
+ { "Omicronasper", 0x1f49, 0 },
+ { "Omicronasperacute", 0x1f4d, 0 },
+ { "Omicronaspergrave", 0x1f4b, 0 },
+ { "Omicrongrave", 0x1ff8, 0 },
+ { "Omicronlenis", 0x1f48, 0 },
+ { "Omicronlenisacute", 0x1f4c, 0 },
+ { "Omicronlenisgrave", 0x1f4a, 0 },
+ { "Rhoasper", 0x1fec, 0 },
+ { "Upsilonacute", 0x1feb, 0 },
+ { "Upsilonasper", 0x1f59, 0 },
+ { "Upsilonasperacute", 0x1f5d, 0 },
+ { "Upsilonaspergrave", 0x1f5b, 0 },
+ { "Upsilonaspertilde", 0x1f5f, 0 },
+ { "Upsilonbreve", 0x1fe8, 0 },
+ { "Upsilongrave", 0x1fea, 0 },
+ { "Upsilonmacron", 0x1fe9, 0 },
+ { "numeralsign", 0x0374, 0 },
+ { "lownumeralsign", 0x0375, 0 },
+ { "lowcomma", 0x037a, 0 },
+ { "stigma", 0x03da, 0 },
+ { "koppa", 0x03de, 0 },
+ { "sampi", 0x03e0, 0 },
+ { "lenis", 0x1fbd, 0 },
+ { "iotasubscript", 0x1fbe, 0 },
+ { "dieresistilde", 0x1fc1, 0 },
+ { "lenisgrave", 0x1fcd, 0 },
+ { "lenisacute", 0x1fce, 0 },
+ { "lenistilde", 0x1fcf, 0 },
+ { "aspergrave", 0x1fdd, 0 },
+ { "asperacute", 0x1fde, 0 },
+ { "aspertilde", 0x1fdf, 0 },
+ { "dialytikagrave", 0x1fed, 0 },
+ { "dialytikaacute", 0x1fee, 0 },
+ { "asper", 0x1ffe, 0 },
+ { "alphalenis", 0x1f00, 0 },
+ { "alphaasper", 0x1f01, 0 },
+ { "alphalenisgrave", 0x1f02, 0 },
+ { "alphaaspergrave", 0x1f03, 0 },
+ { "alphalenisacute", 0x1f04, 0 },
+ { "alphaasperacute", 0x1f05, 0 },
+ { "alphalenistilde", 0x1f06, 0 },
+ { "alphaaspertilde", 0x1f07, 0 },
+ { "epsilonlenis", 0x1f10, 0 },
+ { "epsilonasper", 0x1f11, 0 },
+ { "epsilonlenisgrave", 0x1f12, 0 },
+ { "epsilonaspergrave", 0x1f13, 0 },
+ { "epsilonlenisacute", 0x1f14, 0 },
+ { "epsilonasperacute", 0x1f15, 0 },
+ { "etalenis", 0x1f20, 0 },
+ { "etaasper", 0x1f21, 0 },
+ { "etalenisgrave", 0x1f22, 0 },
+ { "etaaspergrave", 0x1f23, 0 },
+ { "etalenisacute", 0x1f24, 0 },
+ { "etaasperacute", 0x1f25, 0 },
+ { "etalenistilde", 0x1f26, 0 },
+ { "etaaspertilde", 0x1f27, 0 },
+ { "iotalenis", 0x1f30, 0 },
+ { "iotaasper", 0x1f31, 0 },
+ { "iotalenisgrave", 0x1f32, 0 },
+ { "iotaaspergrave", 0x1f33, 0 },
+ { "iotalenisacute", 0x1f34, 0 },
+ { "iotaasperacute", 0x1f35, 0 },
+ { "iotalenistilde", 0x1f36, 0 },
+ { "iotaaspertilde", 0x1f37, 0 },
+ { "omicronlenis", 0x1f40, 0 },
+ { "omicronasper", 0x1f41, 0 },
+ { "omicronlenisgrave", 0x1f42, 0 },
+ { "omicronaspergrave", 0x1f43, 0 },
+ { "omicronlenisacute", 0x1f44, 0 },
+ { "omicronasperacute", 0x1f45, 0 },
+ { "upsilonlenis", 0x1f50, 0 },
+ { "upsilonasper", 0x1f51, 0 },
+ { "upsilonlenisgrave", 0x1f52, 0 },
+ { "upsilonaspergrave", 0x1f53, 0 },
+ { "upsilonlenisacute", 0x1f54, 0 },
+ { "upsilonasperacute", 0x1f55, 0 },
+ { "upsilonlenistilde", 0x1f56, 0 },
+ { "upsilonaspertilde", 0x1f57, 0 },
+ { "omegalenis", 0x1f60, 0 },
+ { "omegaasper", 0x1f61, 0 },
+ { "omegalenisgrave", 0x1f62, 0 },
+ { "omegaaspergrave", 0x1f63, 0 },
+ { "omegalenisacute", 0x1f64, 0 },
+ { "omegaasperacute", 0x1f65, 0 },
+ { "omegalenistilde", 0x1f66, 0 },
+ { "omegaaspertilde", 0x1f67, 0 },
+ { "alphagrave", 0x1f70, 0 },
+ { "alphaacute", 0x1f71, 0 },
+ { "epsilongrave", 0x1f72, 0 },
+ { "epsilonacute", 0x1f73, 0 },
+ { "etagrave", 0x1f74, 0 },
+ { "etaacute", 0x1f75, 0 },
+ { "iotagrave", 0x1f76, 0 },
+ { "iotaacute", 0x1f77, 0 },
+ { "omicrongrave", 0x1f78, 0 },
+ { "omicronacute", 0x1f79, 0 },
+ { "upsilongrave", 0x1f7a, 0 },
+ { "upsilonacute", 0x1f7b, 0 },
+ { "omegagrave", 0x1f7c, 0 },
+ { "omegaacute", 0x1f7d, 0 },
+ { "alphaiotasublenis", 0x1f80, 0 },
+ { "alphaiotasubasper", 0x1f81, 0 },
+ { "alphaiotasublenisgrave", 0x1f82, 0 },
+ { "alphaiotasubaspergrave", 0x1f83, 0 },
+ { "alphaiotasublenisacute", 0x1f84, 0 },
+ { "alphaiotasubasperacute", 0x1f85, 0 },
+ { "alphaiotasublenistilde", 0x1f86, 0 },
+ { "alphaiotasubaspertilde", 0x1f87, 0 },
+ { "etaiotasublenis", 0x1f90, 0 },
+ { "etaiotasubasper", 0x1f91, 0 },
+ { "etaiotasublenisgrave", 0x1f92, 0 },
+ { "etaiotasubaspergrave", 0x1f93, 0 },
+ { "etaiotasublenisacute", 0x1f94, 0 },
+ { "etaiotasubasperacute", 0x1f95, 0 },
+ { "etaiotasublenistilde", 0x1f96, 0 },
+ { "etaiotasubaspertilde", 0x1f97, 0 },
+ { "omegaiotasublenis", 0x1fa0, 0 },
+ { "omegaiotasubasper", 0x1fa1, 0 },
+ { "omegaiotasublenisgrave", 0x1fa2, 0 },
+ { "omegaiotasubaspergrave", 0x1fa3, 0 },
+ { "omegaiotasublenisacute", 0x1fa4, 0 },
+ { "omegaiotasubasperacute", 0x1fa5, 0 },
+ { "omegaiotasublenistilde", 0x1fa6, 0 },
+ { "omegaiotasubaspertilde", 0x1fa7, 0 },
+ { "alphabreve", 0x1fb0, 0 },
+ { "alphamacron", 0x1fb1, 0 },
+ { "alphaiotasubgrave", 0x1fb2, 0 },
+ { "alphaiotasub", 0x1fb3, 0 },
+ { "alphatilde", 0x1fb6, 0 },
+ { "alphaiotasubtilde", 0x1fb7, 0 },
+ { "etaiotasubgrave", 0x1fc2, 0 },
+ { "etaiotasub", 0x1fc3, 0 },
+ { "etaiotasubacute", 0x1fc4, 0 },
+ { "etatilde", 0x1fc6, 0 },
+ { "etaiotasubtilde", 0x1fc7, 0 },
+ { "iotabreve", 0x1fd0, 0 },
+ { "iotamacron", 0x1fd1, 0 },
+ { "iotadieresisgrave", 0x1fd2, 0 },
+ { "iotadieresisacute", 0x1fd3, 0 },
+ { "iotatilde", 0x1fd6, 0 },
+ { "iotadieresistilde", 0x1fd7, 0 },
+ { "upsilonbreve", 0x1fe0, 0 },
+ { "upsilonmacron", 0x1fe1, 0 },
+ { "upsilondieresisgrave", 0x1fe2, 0 },
+ { "upsilondieresisacute", 0x1fe3, 0 },
+ { "rholenis", 0x1fe4, 0 },
+ { "rhoasper", 0x1fe5, 0 },
+ { "upsilontilde", 0x1fe6, 0 },
+ { "omegaiotasubgrave", 0x1ff2, 0 },
+ { "omegaiotasub", 0x1ff3, 0 },
+ { "omegaiotasubacute", 0x1ff4, 0 },
+ { "omegatilde", 0x1ff6, 0 },
+ { "omegaiotasubtilde", 0x1ff7, 0 },
+ { "alphaiotasubacute", 0x1fb4, 0 },
+ { "upsilondieresistilde", 0x1fe7, 0 },
+ { "digamma", 0xefd5, 0 },
+ { "Be", 0x0411, 0 },
+ { "Ve", 0x0412, 0 },
+ { "Ghe", 0x0413, 0 },
+ { "De", 0x0414, 0 },
+ { "Ie", 0x0415, 0 },
+ { "Zhe", 0x0416, 0 },
+ { "Ze", 0x0417, 0 },
+ { "Ka", 0x041a, 0 },
+ { "El", 0x041b, 0 },
+ { "Em", 0x041c, 0 },
+ { "En", 0x041d, 0 },
+ { "Pe", 0x041f, 0 },
+ { "Er", 0x0420, 0 },
+ { "Es", 0x0421, 0 },
+ { "Te", 0x0422, 0 },
+ { "Ef", 0x0424, 0 },
+ { "Ha", 0x0425, 0 },
+ { "Tse", 0x0426, 0 },
+ { "Che", 0x0427, 0 },
+ { "Sha", 0x0428, 0 },
+ { "Shcha", 0x0429, 0 },
+ { "Hard", 0x042a, 0 },
+ { "Yeru", 0x042b, 0 },
+ { "Soft", 0x042c, 0 },
+ { "Yu", 0x042e, 0 },
+ { "Ya", 0x042f, 0 },
+ { "Io", 0x0401, 0 },
+ { "Dje", 0x0402, 0 },
+ { "Gje", 0x0403, 0 },
+ { "Dze", 0x0405, 0 },
+ { "Yi", 0x0407, 0 },
+ { "Je", 0x0408, 0 },
+ { "Lje", 0x0409, 0 },
+ { "Nje", 0x040a, 0 },
+ { "Tshe", 0x040b, 0 },
+ { "Kje", 0x040c, 0 },
+ { "Dzhe", 0x040f, 0 },
+ { "Yat", 0x0462, 0 },
+ { "Fita", 0x0472, 0 },
+ { "Izhitsa", 0x0474, 0 },
+ { "be", 0x0431, 0 },
+ { "ve", 0x0432, 0 },
+ { "ghe", 0x0433, 0 },
+ { "de", 0x0434, 0 },
+ { "ie", 0x0435, 0 },
+ { "zhe", 0x0436, 0 },
+ { "ze", 0x0437, 0 },
+ { "ka", 0x043a, 0 },
+ { "el", 0x043b, 0 },
+ { "em", 0x043c, 0 },
+ { "en", 0x043d, 0 },
+ { "er", 0x0440, 0 },
+ { "es", 0x0441, 0 },
+ { "te", 0x0442, 0 },
+ { "ef", 0x0444, 0 },
+ { "ha", 0x0445, 0 },
+ { "tse", 0x0446, 0 },
+ { "che", 0x0447, 0 },
+ { "sha", 0x0448, 0 },
+ { "shcha", 0x0449, 0 },
+ { "hard", 0x044a, 0 },
+ { "yeru", 0x044b, 0 },
+ { "soft", 0x044c, 0 },
+ { "yu", 0x044e, 0 },
+ { "ya", 0x044f, 0 },
+ { "io", 0x0451, 0 },
+ { "dje", 0x0452, 0 },
+ { "gje", 0x0453, 0 },
+ { "dze", 0x0455, 0 },
+ { "yi", 0x0457, 0 },
+ { "je", 0x0458, 0 },
+ { "lje", 0x0459, 0 },
+ { "nje", 0x045a, 0 },
+ { "tshe", 0x045b, 0 },
+ { "kje", 0x045c, 0 },
+ { "dzhe", 0x045f, 0 },
+ { "yat", 0x0463, 0 },
+ { "fita", 0x0473, 0 },
+ { "izhitsa", 0x0475, 0 },
+ { "litre", 0x2113, 0 },
+ { "Dotaccent", 0xefed, 0 },
+ { "Breve", 0xefee, 0 },
+ { "Ogonek", 0xeff1, 0 },
+ { "Cedilla", 0xeff2, 0 },
+ { "Ring", 0xeff3, 0 },
+ { "Tilde", 0xeff5, 0 },
+ { "Circumflex", 0xeff7, 0 },
+ { "dbar", 0x0111, 0 },
+ { "st", 0xfb06, 0 },
+ { "TeXtext32", 0x0337, 0 },
+ { "DD070", 0x2014, 0 },
+ { "monospacedash", 0x2014, 0 },
+ { "Dash1cent", 0x2015, 0 },
+ { "apostrophereverse", 0x201b, 0 },
+ { "Pts", 0x20a7, 0 },
+ { "SM760000", 0x2195, 0 },
+ { "SM770000", 0x21a8, 0 },
+ { "SP320000", 0x2219, 0 },
+ { "SD630000", 0x22c5, 0 },
+ { "SM790000", 0x2302, 0 },
+ { "caretinverted", 0x2304, 0 },
+ { "SM680000", 0x2310, 0 },
+ { "SA420000", 0x2319, 0 },
+ { "BorderULCorner1", 0x231c, 0 },
+ { "DD010", 0x231c, 0 },
+ { "DD101", 0x231c, 0 },
+ { "BorderURCorner1", 0x231d, 0 },
+ { "DD012", 0x231d, 0 },
+ { "DD104", 0x231d, 0 },
+ { "BorderLLCorner1", 0x231e, 0 },
+ { "DD014", 0x231e, 0 },
+ { "DD109", 0x231e, 0 },
+ { "BorderLRCorner1", 0x231f, 0 },
+ { "DD015", 0x231f, 0 },
+ { "DD112", 0x231f, 0 },
+ { "SS260000", 0x2320, 0 },
+ { "SS270000", 0x2321, 0 },
+ { "hook", 0x2440, 0 },
+ { "chair", 0x2441, 0 },
+ { "fork", 0x2442, 0 },
+ { "SF600000", 0x2580, 0 },
+ { "BorderLower1", 0x2581, 0 },
+ { "DD011", 0x2581, 0 },
+ { "DD021", 0x2581, 0 },
+ { "DD110", 0x2581, 0 },
+ { "Flower1l", 0x2581, 0 },
+ { "SF570000", 0x2584, 0 },
+ { "SF610000", 0x2588, 0 },
+ { "Tile", 0x2588, 0 },
+ { "HalfTile", 0x258c, 0 },
+ { "SF580000", 0x258c, 0 },
+ { "BorderLeftVertical1", 0x258f, 0 },
+ { "DD013", 0x258f, 0 },
+ { "DD034", 0x258f, 0 },
+ { "DD105", 0x258f, 0 },
+ { "Flower1d", 0x258f, 0 },
+ { "SF590000", 0x2590, 0 },
+ { "SF140000", 0x2591, 0 },
+ { "SF150000", 0x2592, 0 },
+ { "SF160000", 0x2593, 0 },
+ { "BorderUpper1", 0x2594, 0 },
+ { "DD024", 0x2594, 0 },
+ { "DD102", 0x2594, 0 },
+ { "BorderRightVertical1", 0x2595, 0 },
+ { "DD031", 0x2595, 0 },
+ { "DD106", 0x2595, 0 },
+ { "Flower2dr", 0x2595, 0 },
+ { "SM600000", 0x25b2, 0 },
+ { "SM590000", 0x25b6, 0 },
+ { "SV040000", 0x25bc, 0 },
+ { "SM630000", 0x25c0, 0 },
+ { "SM750000", 0x25cb, 0 },
+ { "SM570001", 0x25d8, 0 },
+ { "SM750002", 0x25d9, 0 },
+ { "ShootingStar", 0x2604, 0 },
+ { "DD130", 0x2605, 0 },
+ { "StarDingbat1", 0x2605, 0 },
+ { "TheSun", 0x2609, 0 },
+ { "FleuronLeft", 0x2619, 0 },
+ { "cross", 0x2629, 0 },
+ { "SS000000", 0x263a, 0 },
+ { "SS010000", 0x263b, 0 },
+ { "SM690000", 0x263c, 0 },
+ { "TheMoon", 0x263d, 0 },
+ { "Moon", 0x263e, 0 },
+ { "Mercury", 0x263f, 0 },
+ { "Venus", 0x2640, 0 },
+ { "Earth", 0x2641, 0 },
+ { "Mars", 0x2642, 0 },
+ { "Jupiter", 0x2643, 0 },
+ { "Saturn", 0x2644, 0 },
+ { "Uranus", 0x2645, 0 },
+ { "Neptune", 0x2646, 0 },
+ { "Pluto", 0x2647, 0 },
+ { "Aries", 0x2648, 0 },
+ { "Taurus", 0x2649, 0 },
+ { "Gemini", 0x264a, 0 },
+ { "Cancer", 0x264b, 0 },
+ { "Leo", 0x264c, 0 },
+ { "Virgo", 0x264d, 0 },
+ { "Libra", 0x264e, 0 },
+ { "Scorpio", 0x264f, 0 },
+ { "Sagittarius", 0x2650, 0 },
+ { "Capricorn", 0x2651, 0 },
+ { "Aquarius", 0x2652, 0 },
+ { "Pisces", 0x2653, 0 },
+ { "diamondopen", 0x2662, 0 },
+ { "FleuronCenter", 0x2766, 0 },
+ { "FleuronRight", 0x2767, 0 },
+ { "st1", 0xfb06, 0 },
+ { "zeroslash", 0xf638, 0 },
+ { "pi1", 0x03d6, 0 },
+ { "hyphen-minus", 0x002d, 0 },
+ { "hyphenminus", 0x002d, 0 },
+ { "nonmarkingreturn", 0x000d, 0 },
+ { "micro", 0x00b5, 0 },
+ { "Dmacron", 0x0110, 0 },
+ { "kra", 0x0138, 0 },
+ { "bbar", 0x0180, 0 },
+ { "Dbar", 0x0189, 0 },
+ { "deltaturn", 0x018d, 0 },
+ { "Eturn", 0x018e, 0 },
+ { "Epsilonlatin", 0x0190, 0 },
+ { "Gammalatin", 0x0194, 0 },
+ { "Iotalatin", 0x0196, 0 },
+ { "Ibar", 0x0197, 0 },
+ { "lambdabar", 0x019b, 0 },
+ { "mcapturn", 0x019c, 0 },
+ { "Nhook", 0x019d, 0 },
+ { "nleg", 0x019e, 0 },
+ { "Obar", 0x019f, 0 },
+ { "OI", 0x01a2, 0 },
+ { "YR", 0x01a6, 0 },
+ { "eshlooprev", 0x01aa, 0 },
+ { "Trthook", 0x01ae, 0 },
+ { "Upsilonlatin", 0x01b1, 0 },
+ { "Vcursive", 0x01b2, 0 },
+ { "Zbar", 0x01b5, 0 },
+ { "zbar", 0x01b6, 0 },
+ { "Yogh", 0x01b7, 0 },
+ { "Yoghrev", 0x01b8, 0 },
+ { "yoghrev", 0x01b9, 0 },
+ { "yoghtail", 0x01ba, 0 },
+ { "twobar", 0x01bb, 0 },
+ { "glottalstopbarinv", 0x01be, 0 },
+ { "pipe", 0x01c0, 0 },
+ { "pipedbl", 0x01c1, 0 },
+ { "pipedblbar", 0x01c2, 0 },
+ { "exclamlatin", 0x01c3, 0 },
+ { "DZhacek", 0x01c4, 0 },
+ { "Dzhacek", 0x01c5, 0 },
+ { "dzhacek", 0x01c6, 0 },
+ { "Ahacek", 0x01cd, 0 },
+ { "ahacek", 0x01ce, 0 },
+ { "Ihacek", 0x01cf, 0 },
+ { "ihacek", 0x01d0, 0 },
+ { "Ohacek", 0x01d1, 0 },
+ { "ohacek", 0x01d2, 0 },
+ { "Uhacek", 0x01d3, 0 },
+ { "uhacek", 0x01d4, 0 },
+ { "Udieresishacek", 0x01d9, 0 },
+ { "udieresishacek", 0x01da, 0 },
+ { "eturn", 0x01dd, 0 },
+ { "Gbar", 0x01e4, 0 },
+ { "gbar", 0x01e5, 0 },
+ { "Ghacek", 0x01e6, 0 },
+ { "ghacek", 0x01e7, 0 },
+ { "Khacek", 0x01e8, 0 },
+ { "khacek", 0x01e9, 0 },
+ { "Yoghhacek", 0x01ee, 0 },
+ { "yoghhacek", 0x01ef, 0 },
+ { "jhacek", 0x01f0, 0 },
+ { "aturn", 0x0250, 0 },
+ { "ascriptturn", 0x0252, 0 },
+ { "cturn", 0x0254, 0 },
+ { "drthook", 0x0256, 0 },
+ { "erev", 0x0258, 0 },
+ { "epsilonlatin", 0x025b, 0 },
+ { "epsilonlatinrev", 0x025c, 0 },
+ { "epsilonlatinrevhook", 0x025d, 0 },
+ { "epsilonlatinrevclosed", 0x025e, 0 },
+ { "jdotlessbar", 0x025f, 0 },
+ { "gcursive", 0x0261, 0 },
+ { "Gsmallcap", 0x0262, 0 },
+ { "gammalatin", 0x0263, 0 },
+ { "babygamma", 0x0264, 0 },
+ { "hturn", 0x0265, 0 },
+ { "ibar", 0x0268, 0 },
+ { "Ismallcap", 0x026a, 0 },
+ { "lmidtilde", 0x026b, 0 },
+ { "lrthook", 0x026d, 0 },
+ { "lyogh", 0x026e, 0 },
+ { "mturn", 0x026f, 0 },
+ { "mturndescend", 0x0270, 0 },
+ { "nlftlfthook", 0x0272, 0 },
+ { "nrthook", 0x0273, 0 },
+ { "Nsmallcap", 0x0274, 0 },
+ { "obar", 0x0275, 0 },
+ { "OEsmallcap", 0x0276, 0 },
+ { "omegaclosed", 0x0277, 0 },
+ { "rturn", 0x0279, 0 },
+ { "rturnascend", 0x027a, 0 },
+ { "rturnrthook", 0x027b, 0 },
+ { "rdescend", 0x027c, 0 },
+ { "rrthook", 0x027d, 0 },
+ { "rfishhookrev", 0x027f, 0 },
+ { "Rsmallcap", 0x0280, 0 },
+ { "Rsmallcapinv", 0x0281, 0 },
+ { "srthook", 0x0282, 0 },
+ { "jhookdblbar", 0x0284, 0 },
+ { "eshshortrev", 0x0285, 0 },
+ { "tturn", 0x0287, 0 },
+ { "trthook", 0x0288, 0 },
+ { "vscript", 0x028b, 0 },
+ { "vturn", 0x028c, 0 },
+ { "wturn", 0x028d, 0 },
+ { "yturn", 0x028e, 0 },
+ { "Ysmallcap", 0x028f, 0 },
+ { "zrthook", 0x0290, 0 },
+ { "yogh", 0x0292, 0 },
+ { "yoghcurl", 0x0293, 0 },
+ { "glottalstoprevinv", 0x0295, 0 },
+ { "glottalstopinv", 0x0296, 0 },
+ { "cstretch", 0x0297, 0 },
+ { "kiss", 0x0298, 0 },
+ { "Bsmallcap", 0x0299, 0 },
+ { "epsilonclosed", 0x029a, 0 },
+ { "Gsmallcaphook", 0x029b, 0 },
+ { "Hsmallcap", 0x029c, 0 },
+ { "jcrosstail", 0x029d, 0 },
+ { "kturn", 0x029e, 0 },
+ { "Lsmallcap", 0x029f, 0 },
+ { "glottalstopbar", 0x02a1, 0 },
+ { "glottalstopbarrev", 0x02a2, 0 },
+ { "dyogh", 0x02a4, 0 },
+ { "hsuper", 0x02b0, 0 },
+ { "hhooksuper", 0x02b1, 0 },
+ { "jsuper", 0x02b2, 0 },
+ { "rsuper", 0x02b3, 0 },
+ { "rturnsuper", 0x02b4, 0 },
+ { "rturnrthooksuper", 0x02b5, 0 },
+ { "Rturnsuper", 0x02b6, 0 },
+ { "wsuper", 0x02b7, 0 },
+ { "ysuper", 0x02b8, 0 },
+ { "primedblmod", 0x02ba, 0 },
+ { "quoteleftmod", 0x02bb, 0 },
+ { "apostrophe", 0x02bc, 0 },
+ { "apostropherev", 0x02bd, 0 },
+ { "ringrighthalfsuper", 0x02be, 0 },
+ { "ringlefthalfsuper", 0x02bf, 0 },
+ { "glottal", 0x02c0, 0 },
+ { "glottalrev", 0x02c1, 0 },
+ { "fronted", 0x02c2, 0 },
+ { "backed", 0x02c3, 0 },
+ { "raised", 0x02c4, 0 },
+ { "lowered", 0x02c5, 0 },
+ { "linevert", 0x02c8, 0 },
+ { "macronmodifier", 0x02c9, 0 },
+ { "acutemodifier", 0x02ca, 0 },
+ { "gravemodifier", 0x02cb, 0 },
+ { "linevertsub", 0x02cc, 0 },
+ { "macronsub", 0x02cd, 0 },
+ { "gravesub", 0x02ce, 0 },
+ { "acutesub", 0x02cf, 0 },
+ { "length", 0x02d0, 0 },
+ { "halflength", 0x02d1, 0 },
+ { "ringrighthalfcenter", 0x02d2, 0 },
+ { "ringlefthalfsup", 0x02d3, 0 },
+ { "tackupmid", 0x02d4, 0 },
+ { "tackdownmid", 0x02d5, 0 },
+ { "rhotichook", 0x02de, 0 },
+ { "gammasuper", 0x02e0, 0 },
+ { "lsuper", 0x02e1, 0 },
+ { "ssuper", 0x02e2, 0 },
+ { "xsuper", 0x02e3, 0 },
+ { "glottalrevsuper", 0x02e4, 0 },
+ { "toneextrahigh", 0x02e5, 0 },
+ { "tonehigh", 0x02e6, 0 },
+ { "tonemid", 0x02e7, 0 },
+ { "tonelow", 0x02e8, 0 },
+ { "toneextralow", 0x02e9, 0 },
+ { "gravenosp", 0x0300, 0 },
+ { "acutenosp", 0x0301, 0 },
+ { "circumflexnosp", 0x0302, 0 },
+ { "tildenosp", 0x0303, 0 },
+ { "macronnosp", 0x0304, 0 },
+ { "overscorenosp", 0x0305, 0 },
+ { "brevenosp", 0x0306, 0 },
+ { "dotnosp", 0x0307, 0 },
+ { "dieresisnosp", 0x0308, 0 },
+ { "hooksupnosp", 0x0309, 0 },
+ { "ringnosp", 0x030a, 0 },
+ { "acutedblnosp", 0x030b, 0 },
+ { "haceknosp", 0x030c, 0 },
+ { "linevertnosp", 0x030d, 0 },
+ { "linevertdblnosp", 0x030e, 0 },
+ { "gravedblnosp", 0x030f, 0 },
+ { "candrabindunosp", 0x0310, 0 },
+ { "breveinvnosp", 0x0311, 0 },
+ { "commaturnsupnosp", 0x0312, 0 },
+ { "apostrophesupnosp", 0x0313, 0 },
+ { "commasuprevnosp", 0x0314, 0 },
+ { "commasuprightnosp", 0x0315, 0 },
+ { "gravesubnosp", 0x0316, 0 },
+ { "acutesubnosp", 0x0317, 0 },
+ { "tackleftsubnosp", 0x0318, 0 },
+ { "tackrightsubnosp", 0x0319, 0 },
+ { "anglesupnosp", 0x031a, 0 },
+ { "hornnosp", 0x031b, 0 },
+ { "ringlefthalfsubnosp", 0x031c, 0 },
+ { "tackupsubnosp", 0x031d, 0 },
+ { "tackdownsubnosp", 0x031e, 0 },
+ { "plussubnosp", 0x031f, 0 },
+ { "minussubnosp", 0x0320, 0 },
+ { "hooksubpalatnosp", 0x0321, 0 },
+ { "hooksubretronosp", 0x0322, 0 },
+ { "dotsubnosp", 0x0323, 0 },
+ { "dotdblsubnosp", 0x0324, 0 },
+ { "ringsubnosp", 0x0325, 0 },
+ { "commasubnosp", 0x0326, 0 },
+ { "cedillanosp", 0x0327, 0 },
+ { "ogoneknosp", 0x0328, 0 },
+ { "linevertsubnosp", 0x0329, 0 },
+ { "bridgesubnosp", 0x032a, 0 },
+ { "archdblsubnosp", 0x032b, 0 },
+ { "haceksubnosp", 0x032c, 0 },
+ { "circumflexsubnosp", 0x032d, 0 },
+ { "brevesubnosp", 0x032e, 0 },
+ { "breveinvsubnosp", 0x032f, 0 },
+ { "tildesubnosp", 0x0330, 0 },
+ { "macronsubnosp", 0x0331, 0 },
+ { "underscorenosp", 0x0332, 0 },
+ { "underscoredblnosp", 0x0333, 0 },
+ { "tildemidnosp", 0x0334, 0 },
+ { "barmidshortnosp", 0x0335, 0 },
+ { "barmidlongnosp", 0x0336, 0 },
+ { "slashshortnosp", 0x0337, 0 },
+ { "slashlongnosp", 0x0338, 0 },
+ { "ringrighthalfsubnosp", 0x0339, 0 },
+ { "bridgeinvsubnosp", 0x033a, 0 },
+ { "squaresubnosp", 0x033b, 0 },
+ { "seagullsubnosp", 0x033c, 0 },
+ { "xsupnosp", 0x033d, 0 },
+ { "tildevertsupnosp", 0x033e, 0 },
+ { "overscoredblnosp", 0x033f, 0 },
+ { "graveleftnosp", 0x0340, 0 },
+ { "acuterightnosp", 0x0341, 0 },
+ { "wavyoverscorenosp", 0x0342, 0 },
+ { "zigzagoverscorenosp", 0x0343, 0 },
+ { "diaeresistonosnosp", 0x0344, 0 },
+ { "iotasubnosp", 0x0345, 0 },
+ { "iotasub", 0x037a, 0 },
+ { "diaeresistonos", 0x0385, 0 },
+ { "iotadiaeresistonos", 0x0390, 0 },
+ { "Iotadiaeresis", 0x03aa, 0 },
+ { "Upsilondiaeresis", 0x03ab, 0 },
+ { "upsilondiaeresistonos", 0x03b0, 0 },
+ { "iotadiaeresis", 0x03ca, 0 },
+ { "upsilondiaeresis", 0x03cb, 0 },
+ { "betacurled", 0x03d0, 0 },
+ { "thetascript", 0x03d1, 0 },
+ { "Upsilonhook", 0x03d2, 0 },
+ { "Upsilonhooktonos", 0x03d3, 0 },
+ { "Upsilonhookdiaeresis", 0x03d4, 0 },
+ { "phiscript", 0x03d5, 0 },
+ { "omegapi", 0x03d6, 0 },
+ { "Stigma", 0x03da, 0 },
+ { "stigma", 0x03db, 0 },
+ { "Digamma", 0x03dc, 0 },
+ { "digamma", 0x03dd, 0 },
+ { "Koppa", 0x03de, 0 },
+ { "koppa", 0x03df, 0 },
+ { "Sampi", 0x03e0, 0 },
+ { "sampi", 0x03e1, 0 },
+ { "Shei", 0x03e2, 0 },
+ { "shei", 0x03e3, 0 },
+ { "Fei", 0x03e4, 0 },
+ { "fei", 0x03e5, 0 },
+ { "Khei", 0x03e6, 0 },
+ { "khei", 0x03e7, 0 },
+ { "Hori", 0x03e8, 0 },
+ { "hori", 0x03e9, 0 },
+ { "Gangia", 0x03ea, 0 },
+ { "gangia", 0x03eb, 0 },
+ { "Shima", 0x03ec, 0 },
+ { "shima", 0x03ed, 0 },
+ { "Dei", 0x03ee, 0 },
+ { "dei", 0x03ef, 0 },
+ { "kappascript", 0x03f0, 0 },
+ { "sigmalunate", 0x03f2, 0 },
+ { "Io", 0x0401, 0 },
+ { "Dje", 0x0402, 0 },
+ { "Gje", 0x0403, 0 },
+ { "Ecyril", 0x0404, 0 },
+ { "Dze", 0x0405, 0 },
+ { "Icyril", 0x0406, 0 },
+ { "Yi", 0x0407, 0 },
+ { "Je", 0x0408, 0 },
+ { "Lje", 0x0409, 0 },
+ { "Nje", 0x040a, 0 },
+ { "Tshe", 0x040b, 0 },
+ { "Kje", 0x040c, 0 },
+ { "Ucyrilbreve", 0x040e, 0 },
+ { "Dzhe", 0x040f, 0 },
+ { "Acyril", 0x0410, 0 },
+ { "Be", 0x0411, 0 },
+ { "Ve", 0x0412, 0 },
+ { "Ge", 0x0413, 0 },
+ { "De", 0x0414, 0 },
+ { "Ie", 0x0415, 0 },
+ { "Zhe", 0x0416, 0 },
+ { "Ze", 0x0417, 0 },
+ { "Ii", 0x0418, 0 },
+ { "Iibreve", 0x0419, 0 },
+ { "Ka", 0x041a, 0 },
+ { "El", 0x041b, 0 },
+ { "Em", 0x041c, 0 },
+ { "En", 0x041d, 0 },
+ { "Ocyril", 0x041e, 0 },
+ { "Pecyril", 0x041f, 0 },
+ { "Er", 0x0420, 0 },
+ { "Es", 0x0421, 0 },
+ { "Te", 0x0422, 0 },
+ { "Ucyril", 0x0423, 0 },
+ { "Ef", 0x0424, 0 },
+ { "Kha", 0x0425, 0 },
+ { "Tse", 0x0426, 0 },
+ { "Che", 0x0427, 0 },
+ { "Sha", 0x0428, 0 },
+ { "Shcha", 0x0429, 0 },
+ { "Hard", 0x042a, 0 },
+ { "Yeri", 0x042b, 0 },
+ { "Soft", 0x042c, 0 },
+ { "Ecyrilrev", 0x042d, 0 },
+ { "Iu", 0x042e, 0 },
+ { "Ia", 0x042f, 0 },
+ { "acyril", 0x0430, 0 },
+ { "be", 0x0431, 0 },
+ { "ve", 0x0432, 0 },
+ { "ge", 0x0433, 0 },
+ { "de", 0x0434, 0 },
+ { "ie", 0x0435, 0 },
+ { "zhe", 0x0436, 0 },
+ { "ze", 0x0437, 0 },
+ { "ii", 0x0438, 0 },
+ { "iibreve", 0x0439, 0 },
+ { "ka", 0x043a, 0 },
+ { "el", 0x043b, 0 },
+ { "em", 0x043c, 0 },
+ { "en", 0x043d, 0 },
+ { "ocyril", 0x043e, 0 },
+ { "pecyril", 0x043f, 0 },
+ { "er", 0x0440, 0 },
+ { "es", 0x0441, 0 },
+ { "te", 0x0442, 0 },
+ { "ucyril", 0x0443, 0 },
+ { "ef", 0x0444, 0 },
+ { "kha", 0x0445, 0 },
+ { "tse", 0x0446, 0 },
+ { "che", 0x0447, 0 },
+ { "sha", 0x0448, 0 },
+ { "shcha", 0x0449, 0 },
+ { "hard", 0x044a, 0 },
+ { "yeri", 0x044b, 0 },
+ { "soft", 0x044c, 0 },
+ { "ecyrilrev", 0x044d, 0 },
+ { "iu", 0x044e, 0 },
+ { "ia", 0x044f, 0 },
+ { "io", 0x0451, 0 },
+ { "dje", 0x0452, 0 },
+ { "gje", 0x0453, 0 },
+ { "ecyril", 0x0454, 0 },
+ { "dze", 0x0455, 0 },
+ { "icyril", 0x0456, 0 },
+ { "yi", 0x0457, 0 },
+ { "je", 0x0458, 0 },
+ { "lje", 0x0459, 0 },
+ { "nje", 0x045a, 0 },
+ { "tshe", 0x045b, 0 },
+ { "kje", 0x045c, 0 },
+ { "ucyrilbreve", 0x045e, 0 },
+ { "dzhe", 0x045f, 0 },
+ { "Yat", 0x0462, 0 },
+ { "yat", 0x0463, 0 },
+ { "Yusbig", 0x046a, 0 },
+ { "yusbig", 0x046b, 0 },
+ { "Psicyril", 0x0470, 0 },
+ { "psicyril", 0x0471, 0 },
+ { "Fita", 0x0472, 0 },
+ { "fita", 0x0473, 0 },
+ { "Izhitsa", 0x0474, 0 },
+ { "izhitsa", 0x0475, 0 },
+ { "Izhitsagravedbl", 0x0476, 0 },
+ { "izhitsagravedbl", 0x0477, 0 },
+ { "Digraphuk", 0x0478, 0 },
+ { "digraphuk", 0x0479, 0 },
+ { "Omegaround", 0x047a, 0 },
+ { "omegaround", 0x047b, 0 },
+ { "Omegatitlo", 0x047c, 0 },
+ { "omegatitlo", 0x047d, 0 },
+ { "OT", 0x047e, 0 },
+ { "ot", 0x047f, 0 },
+ { "Geupturn", 0x0490, 0 },
+ { "geupturn", 0x0491, 0 },
+ { "Gebar", 0x0492, 0 },
+ { "gebar", 0x0493, 0 },
+ { "Gehook", 0x0494, 0 },
+ { "gehook", 0x0495, 0 },
+ { "Zhertdes", 0x0496, 0 },
+ { "zhertdes", 0x0497, 0 },
+ { "Zecedilla", 0x0498, 0 },
+ { "zecedilla", 0x0499, 0 },
+ { "Kartdes", 0x049a, 0 },
+ { "kartdes", 0x049b, 0 },
+ { "Kavertbar", 0x049c, 0 },
+ { "kavertbar", 0x049d, 0 },
+ { "Kabar", 0x049e, 0 },
+ { "kabar", 0x049f, 0 },
+ { "GeKarev", 0x04a0, 0 },
+ { "gekarev", 0x04a1, 0 },
+ { "Enrtdes", 0x04a2, 0 },
+ { "enrtdes", 0x04a3, 0 },
+ { "EnGe", 0x04a4, 0 },
+ { "enge", 0x04a5, 0 },
+ { "Pehook", 0x04a6, 0 },
+ { "pehook", 0x04a7, 0 },
+ { "Ohook", 0x04a8, 0 },
+ { "ohook", 0x04a9, 0 },
+ { "Escedilla", 0x04aa, 0 },
+ { "escedilla", 0x04ab, 0 },
+ { "Tertdes", 0x04ac, 0 },
+ { "tertdes", 0x04ad, 0 },
+ { "Ustrt", 0x04ae, 0 },
+ { "ustrt", 0x04af, 0 },
+ { "Ustrtbar", 0x04b0, 0 },
+ { "ustrtbar", 0x04b1, 0 },
+ { "Khartdes", 0x04b2, 0 },
+ { "khartdes", 0x04b3, 0 },
+ { "TeTse", 0x04b4, 0 },
+ { "tetse", 0x04b5, 0 },
+ { "Chertdes", 0x04b6, 0 },
+ { "chertdes", 0x04b7, 0 },
+ { "Chevertbar", 0x04b8, 0 },
+ { "chevertbar", 0x04b9, 0 },
+ { "Hcyril", 0x04ba, 0 },
+ { "hcyril", 0x04bb, 0 },
+ { "Iehook", 0x04bc, 0 },
+ { "iehook", 0x04bd, 0 },
+ { "Iehookogonek", 0x04be, 0 },
+ { "iehookogonek", 0x04bf, 0 },
+ { "Icyril1", 0x04c0, 0 },
+ { "Zhebreve", 0x04c1, 0 },
+ { "zhebreve", 0x04c2, 0 },
+ { "Kahook", 0x04c3, 0 },
+ { "kahook", 0x04c4, 0 },
+ { "Enhook", 0x04c7, 0 },
+ { "enhook", 0x04c8, 0 },
+ { "Cheleftdes", 0x04cb, 0 },
+ { "cheleftdes", 0x04cc, 0 },
+ { "qibuts", 0x05bb, 0 },
+ { "meteg", 0x05bd, 0 },
+ { "maqaf", 0x05be, 0 },
+ { "paseq", 0x05c0, 0 },
+ { "shindot", 0x05c1, 0 },
+ { "sindot", 0x05c2, 0 },
+ { "sofpasuq", 0x05c3, 0 },
+ { "kaffinal", 0x05da, 0 },
+ { "memfinal", 0x05dd, 0 },
+ { "nunfinal", 0x05df, 0 },
+ { "pefinal", 0x05e3, 0 },
+ { "tsadifinal", 0x05e5, 0 },
+ { "vavdbl", 0x05f0, 0 },
+ { "vavyod", 0x05f1, 0 },
+ { "yoddbl", 0x05f2, 0 },
+ { "geresh", 0x05f3, 0 },
+ { "gershayim", 0x05f4, 0 },
+ { "varika", 0x05f5, 0 },
+ { "enquad", 0x2000, 0 },
+ { "emquad", 0x2001, 0 },
+ { "emspace", 0x2003, 0 },
+ { "threeperemspace", 0x2004, 0 },
+ { "fourperemspace", 0x2005, 0 },
+ { "sixperemspace", 0x2006, 0 },
+ { "figurespace", 0x2007, 0 },
+ { "punctuationspace", 0x2008, 0 },
+ { "thinspace", 0x2009, 0 },
+ { "hairspace", 0x200a, 0 },
+ { "zerospace", 0x200b, 0 },
+ { "zeronojoin", 0x200c, 0 },
+ { "zerojoin", 0x200d, 0 },
+ { "hyphennobreak", 0x2011, 0 },
+ { "quotedash", 0x2015, 0 },
+ { "dashdbl", 0x2016, 0 },
+ { "quotesinglrev", 0x201b, 0 },
+ { "quotedblrev", 0x201f, 0 },
+ { "trianglebullet", 0x2023, 0 },
+ { "onedotlead", 0x2024, 0 },
+ { "twodotlead", 0x2025, 0 },
+ { "hyphendot", 0x2027, 0 },
+ { "lineseparator", 0x2028, 0 },
+ { "paragraphseparator", 0x2029, 0 },
+ { "lre", 0x202a, 0 },
+ { "rle", 0x202b, 0 },
+ { "pdf", 0x202c, 0 },
+ { "lro", 0x202d, 0 },
+ { "rlo", 0x202e, 0 },
+ { "pertenthousand", 0x2031, 0 },
+ { "prime", 0x2032, 0 },
+ { "primedbl", 0x2033, 0 },
+ { "primetriple", 0x2034, 0 },
+ { "primerev", 0x2035, 0 },
+ { "primedblrev", 0x2036, 0 },
+ { "primetriplerev", 0x2037, 0 },
+ { "caret", 0x2038, 0 },
+ { "refmark", 0x203b, 0 },
+ { "interrobang", 0x203d, 0 },
+ { "tie", 0x2040, 0 },
+ { "caretinsert", 0x2041, 0 },
+ { "hyphenbullet", 0x2043, 0 },
+ { "minussuperior", 0x207b, 0 },
+ { "plusinferior", 0x208a, 0 },
+ { "equalinferior", 0x208c, 0 },
+ { "eurocurrency", 0x20a0, 0 },
+ { "coloncurrency", 0x20a1, 0 },
+ { "mill", 0x20a5, 0 },
+ { "naira", 0x20a6, 0 },
+ { "pesetas", 0x20a7, 0 },
+ { "rupee", 0x20a8, 0 },
+ { "newsheqel", 0x20aa, 0 },
+ { "accountof", 0x2100, 0 },
+ { "addresssubject", 0x2101, 0 },
+ { "Cbb", 0x2102, 0 },
+ { "degreecentigrade", 0x2103, 0 },
+ { "CL", 0x2104, 0 },
+ { "cadauna", 0x2106, 0 },
+ { "Euler", 0x2107, 0 },
+ { "scruple", 0x2108, 0 },
+ { "degreefarenheit", 0x2109, 0 },
+ { "Hscript", 0x210b, 0 },
+ { "Hblackletter", 0x210c, 0 },
+ { "Hbb", 0x210d, 0 },
+ { "planck", 0x210e, 0 },
+ { "planckover2pi", 0x210f, 0 },
+ { "Iscript", 0x2110, 0 },
+ { "Lscript", 0x2112, 0 },
+ { "lscript", 0x2113, 0 },
+ { "lbbar", 0x2114, 0 },
+ { "Nbb", 0x2115, 0 },
+ { "recordright", 0x2117, 0 },
+ { "Pbb", 0x2119, 0 },
+ { "Qbb", 0x211a, 0 },
+ { "Rscript", 0x211b, 0 },
+ { "Rfractur", 0x211c, 0 },
+ { "Rbb", 0x211d, 0 },
+ { "Rx", 0x211e, 0 },
+ { "response", 0x211f, 0 },
+ { "servicemark", 0x2120, 0 },
+ { "tel", 0x2121, 0 },
+ { "versicle", 0x2123, 0 },
+ { "Zbb", 0x2124, 0 },
+ { "ounce", 0x2125, 0 },
+ { "ohm", 0x2126, 0 },
+ { "mho", 0x2127, 0 },
+ { "Zblackletter", 0x2128, 0 },
+ { "iotaturn", 0x2129, 0 },
+ { "degreekelvin", 0x212a, 0 },
+ { "Bscript", 0x212c, 0 },
+ { "Cblackletter", 0x212d, 0 },
+ { "escript", 0x212f, 0 },
+ { "Escript", 0x2130, 0 },
+ { "Fscript", 0x2131, 0 },
+ { "Fturn", 0x2132, 0 },
+ { "Mscript", 0x2133, 0 },
+ { "u0scrip", 0x2134, 0 },
+ { "alephmath", 0x2135, 0 },
+ { "gimelmath", 0x2137, 0 },
+ { "dalethmath", 0x2138, 0 },
+ { "twothird", 0x2154, 0 },
+ { "onefifth", 0x2155, 0 },
+ { "twofifths", 0x2156, 0 },
+ { "threefifths", 0x2157, 0 },
+ { "fourfifths", 0x2158, 0 },
+ { "onesixth", 0x2159, 0 },
+ { "fivesixths", 0x215a, 0 },
+ { "onenumerator", 0x215f, 0 },
+ { "arrowlongboth", 0x2194, 0 },
+ { "arrowlongbothv", 0x2195, 0 },
+ { "arrownorthwest", 0x2196, 0 },
+ { "arrownortheast", 0x2197, 0 },
+ { "arrowsoutheast", 0x2198, 0 },
+ { "arrowsouthwest", 0x2199, 0 },
+ { "arrowleftnot", 0x219a, 0 },
+ { "arrowrightnot", 0x219b, 0 },
+ { "arrowwaveleft", 0x219c, 0 },
+ { "arrowwaveright", 0x219d, 0 },
+ { "dblarrowheadleft", 0x219e, 0 },
+ { "dblarrowheadup", 0x219f, 0 },
+ { "dblarrowheadright", 0x21a0, 0 },
+ { "dblarrowheaddown", 0x21a1, 0 },
+ { "arrowtailleft", 0x21a2, 0 },
+ { "arrowtailright", 0x21a3, 0 },
+ { "arrowbarleft", 0x21a4, 0 },
+ { "arrowbarup", 0x21a5, 0 },
+ { "arrowbarright", 0x21a6, 0 },
+ { "arrowbardown", 0x21a7, 0 },
+ { "arrowbothvbase", 0x21a8, 0 },
+ { "arrowhookleft", 0x21a9, 0 },
+ { "arrowhookright", 0x21aa, 0 },
+ { "arrowloopleft", 0x21ab, 0 },
+ { "arrowloopright", 0x21ac, 0 },
+ { "arrowwaveboth", 0x21ad, 0 },
+ { "arrowlongbothnot", 0x21ae, 0 },
+ { "arrowzigzag", 0x21af, 0 },
+ { "arrowrightdown", 0x21b4, 0 },
+ { "carriagerreturn", 0x21b5, 0 },
+ { "arrowsemanticlockw", 0x21b6, 0 },
+ { "arrowsemclockw", 0x21b7, 0 },
+ { "home", 0x21b8, 0 },
+ { "tableftright", 0x21b9, 0 },
+ { "arrowanticlockw", 0x21ba, 0 },
+ { "arrowclockw", 0x21bb, 0 },
+ { "arrowlefttophalf", 0x21bc, 0 },
+ { "arrowleftbothalf", 0x21bd, 0 },
+ { "harpoonupright", 0x21be, 0 },
+ { "harpoonupleft", 0x21bf, 0 },
+ { "arrowrighttophalf", 0x21c0, 0 },
+ { "arrowrightbothalf", 0x21c1, 0 },
+ { "harpoondownright", 0x21c2, 0 },
+ { "harpoondownleft", 0x21c3, 0 },
+ { "arrowparrrightleft", 0x21c4, 0 },
+ { "dblarrowupdown", 0x21c5, 0 },
+ { "arrowparrleftright", 0x21c6, 0 },
+ { "dblarrowup", 0x21c8, 0 },
+ { "dblarrowdown", 0x21ca, 0 },
+ { "harpoonleftright", 0x21cb, 0 },
+ { "harpoonrightleft", 0x21cc, 0 },
+ { "arrowdblleftnot", 0x21cd, 0 },
+ { "arrowdbllongbothnot", 0x21ce, 0 },
+ { "arrowdblrightnot", 0x21cf, 0 },
+ { "arrowdbllongboth", 0x21d4, 0 },
+ { "arrowdbllongbothv", 0x21d5, 0 },
+ { "arrowdblnw", 0x21d6, 0 },
+ { "arrowdblne", 0x21d7, 0 },
+ { "arrowdblse", 0x21d8, 0 },
+ { "arrowdblsw", 0x21d9, 0 },
+ { "arrowtripleleft", 0x21da, 0 },
+ { "arrowtripleright", 0x21db, 0 },
+ { "arrowsquiggleleft", 0x21dc, 0 },
+ { "arrowsquiggleright", 0x21dd, 0 },
+ { "arrowopenleft", 0x21e6, 0 },
+ { "arrowopenup", 0x21e7, 0 },
+ { "arrowopenright", 0x21e8, 0 },
+ { "arrowopendown", 0x21e9, 0 },
+ { "complement", 0x2201, 0 },
+ { "notexistential", 0x2204, 0 },
+ { "elementsmall", 0x220a, 0 },
+ { "owner", 0x220b, 0 },
+ { "notowner", 0x220c, 0 },
+ { "ownersmall", 0x220d, 0 },
+ { "eop", 0x220e, 0 },
+ { "coproduct", 0x2210, 0 },
+ { "dotplus", 0x2214, 0 },
+ { "slashmath", 0x2215, 0 },
+ { "backslashmath", 0x2216, 0 },
+ { "ringoperator", 0x2218, 0 },
+ { "bulletmath", 0x2219, 0 },
+ { "cuberoot", 0x221b, 0 },
+ { "fourthroot", 0x221c, 0 },
+ { "measuredangle", 0x2221, 0 },
+ { "sphericalangle", 0x2222, 0 },
+ { "notbar", 0x2224, 0 },
+ { "parallelto", 0x2225, 0 },
+ { "notbardbl", 0x2226, 0 },
+ { "integraldbl", 0x222c, 0 },
+ { "integraltrpl", 0x222d, 0 },
+ { "contintegral", 0x222e, 0 },
+ { "surfintegral", 0x222f, 0 },
+ { "volintegral", 0x2230, 0 },
+ { "clwintegral", 0x2231, 0 },
+ { "clwcontintegral", 0x2232, 0 },
+ { "cclwcontintegral", 0x2233, 0 },
+ { "dotminus", 0x2238, 0 },
+ { "excess", 0x2239, 0 },
+ { "geomproportion", 0x223a, 0 },
+ { "homothetic", 0x223b, 0 },
+ { "revsimilar", 0x223d, 0 },
+ { "lazysinv", 0x223e, 0 },
+ { "sine", 0x223f, 0 },
+ { "wreathproduct", 0x2240, 0 },
+ { "notsimilar", 0x2241, 0 },
+ { "minustilde", 0x2242, 0 },
+ { "asymptequal", 0x2243, 0 },
+ { "notasymptequal", 0x2244, 0 },
+ { "approxorequal", 0x2245, 0 },
+ { "approxnotequal", 0x2246, 0 },
+ { "notapproxequal", 0x2247, 0 },
+ { "almostequal", 0x2248, 0 },
+ { "notalmostequal", 0x2249, 0 },
+ { "almostorequal", 0x224a, 0 },
+ { "tildetrpl", 0x224b, 0 },
+ { "equivasymptotic", 0x224d, 0 },
+ { "geomequivalent", 0x224e, 0 },
+ { "difference", 0x224f, 0 },
+ { "approachlimit", 0x2250, 0 },
+ { "geomequal", 0x2251, 0 },
+ { "imageorapproxequal", 0x2253, 0 },
+ { "colonequal", 0x2254, 0 },
+ { "equalcolon", 0x2255, 0 },
+ { "ringinequal", 0x2256, 0 },
+ { "ringequal", 0x2257, 0 },
+ { "corresponds", 0x2258, 0 },
+ { "estimates", 0x2259, 0 },
+ { "equiangular", 0x225a, 0 },
+ { "starequal", 0x225b, 0 },
+ { "deltaequal", 0x225c, 0 },
+ { "definequal", 0x225d, 0 },
+ { "measurequal", 0x225e, 0 },
+ { "questionequal", 0x225f, 0 },
+ { "notequivalence", 0x2262, 0 },
+ { "strictequivalence", 0x2263, 0 },
+ { "lessdblequal", 0x2266, 0 },
+ { "greaterdblequal", 0x2267, 0 },
+ { "lessnotdblequal", 0x2268, 0 },
+ { "greaternotdblequal", 0x2269, 0 },
+ { "lessmuch", 0x226a, 0 },
+ { "greatermuch", 0x226b, 0 },
+ { "between", 0x226c, 0 },
+ { "notequivasymptotic", 0x226d, 0 },
+ { "notlessequal", 0x2270, 0 },
+ { "notgreaterequal", 0x2271, 0 },
+ { "lessequivlnt", 0x2272, 0 },
+ { "greaterequivlnt", 0x2273, 0 },
+ { "notlessequivlnt", 0x2274, 0 },
+ { "notgreaterequivlnt", 0x2275, 0 },
+ { "notlessgreater", 0x2278, 0 },
+ { "notgreaterless", 0x2279, 0 },
+ { "follows", 0x227b, 0 },
+ { "precedesequal", 0x227c, 0 },
+ { "followsequal", 0x227d, 0 },
+ { "precedequivlnt", 0x227e, 0 },
+ { "followsequivlnt", 0x227f, 0 },
+ { "notpreceeds", 0x2280, 0 },
+ { "notfollows", 0x2281, 0 },
+ { "notpropersubset", 0x2284, 0 },
+ { "notpropersuperset", 0x2285, 0 },
+ { "notreflexsubset", 0x2288, 0 },
+ { "notreflexsuperset", 0x2289, 0 },
+ { "multiset", 0x228c, 0 },
+ { "multiplymultiset", 0x228d, 0 },
+ { "unionmulti", 0x228e, 0 },
+ { "squareimage", 0x228f, 0 },
+ { "squareoriginal", 0x2290, 0 },
+ { "subsetsqequal", 0x2291, 0 },
+ { "supersetsqequal", 0x2292, 0 },
+ { "intersectionsq", 0x2293, 0 },
+ { "unionsq", 0x2294, 0 },
+ { "circleminus", 0x2296, 0 },
+ { "circledivide", 0x2298, 0 },
+ { "circledot", 0x2299, 0 },
+ { "circlering", 0x229a, 0 },
+ { "circleasterisk", 0x229b, 0 },
+ { "circleequal", 0x229c, 0 },
+ { "circlevertbar", 0x229d, 0 },
+ { "squareplus", 0x229e, 0 },
+ { "squareminus", 0x229f, 0 },
+ { "squaremultiply", 0x22a0, 0 },
+ { "squaredot", 0x22a1, 0 },
+ { "turnstileleft", 0x22a2, 0 },
+ { "turnstileright", 0x22a3, 0 },
+ { "latticetop", 0x22a4, 0 },
+ { "assertion", 0x22a6, 0 },
+ { "truestate", 0x22a7, 0 },
+ { "satisfy", 0x22a8, 0 },
+ { "force", 0x22a9, 0 },
+ { "tacktrpl", 0x22aa, 0 },
+ { "forceextr", 0x22ab, 0 },
+ { "notturnstileleft", 0x22ac, 0 },
+ { "notsatisfy", 0x22ad, 0 },
+ { "notforce", 0x22ae, 0 },
+ { "notforceextr", 0x22af, 0 },
+ { "lowerrank", 0x22b0, 0 },
+ { "higherrank", 0x22b1, 0 },
+ { "triangleright", 0x22b2, 0 },
+ { "triangleleft", 0x22b3, 0 },
+ { "triangleftequal", 0x22b4, 0 },
+ { "triangrightequal", 0x22b5, 0 },
+ { "original", 0x22b6, 0 },
+ { "image", 0x22b7, 0 },
+ { "multimap", 0x22b8, 0 },
+ { "hermitconjmatrix", 0x22b9, 0 },
+ { "intercal", 0x22ba, 0 },
+ { "xor", 0x22bb, 0 },
+ { "nand", 0x22bc, 0 },
+ { "nor", 0x22bd, 0 },
+ { "rightanglearc", 0x22be, 0 },
+ { "narylogicaland", 0x22c0, 0 },
+ { "narylogicalor", 0x22c1, 0 },
+ { "naryintersection", 0x22c2, 0 },
+ { "naryunion", 0x22c3, 0 },
+ { "diamondmath", 0x22c4, 0 },
+ { "divideonmultiply", 0x22c7, 0 },
+ { "bowtie", 0x22c8, 0 },
+ { "multicloseleft", 0x22c9, 0 },
+ { "multicloseright", 0x22ca, 0 },
+ { "multiopenleft", 0x22cb, 0 },
+ { "multiopenright", 0x22cc, 0 },
+ { "revasymptequal", 0x22cd, 0 },
+ { "curlor", 0x22ce, 0 },
+ { "curland", 0x22cf, 0 },
+ { "subsetdbl", 0x22d0, 0 },
+ { "supersetdbl", 0x22d1, 0 },
+ { "uniondbl", 0x22d2, 0 },
+ { "intersectiondbl", 0x22d3, 0 },
+ { "fork", 0x22d4, 0 },
+ { "equalparallel", 0x22d5, 0 },
+ { "lessdot", 0x22d6, 0 },
+ { "greaterdot", 0x22d7, 0 },
+ { "verymuchless", 0x22d8, 0 },
+ { "verymuchgreater", 0x22d9, 0 },
+ { "lessequalgreater", 0x22da, 0 },
+ { "greaterequalless", 0x22db, 0 },
+ { "equalless", 0x22dc, 0 },
+ { "equalgreater", 0x22dd, 0 },
+ { "equalprecedes", 0x22de, 0 },
+ { "equalfollows", 0x22df, 0 },
+ { "preceedsnotequal", 0x22e0, 0 },
+ { "followsnotequal", 0x22e1, 0 },
+ { "notsubsetsqequal", 0x22e2, 0 },
+ { "notsupersetsqequal", 0x22e3, 0 },
+ { "sqimageornotequal", 0x22e4, 0 },
+ { "sqoriginornotequal", 0x22e5, 0 },
+ { "lessnotequivlnt", 0x22e6, 0 },
+ { "greaternotequivlnt", 0x22e7, 0 },
+ { "preceedsnotsimilar", 0x22e8, 0 },
+ { "followsnotequivlnt", 0x22e9, 0 },
+ { "nottriangleleft", 0x22ea, 0 },
+ { "nottriangleright", 0x22eb, 0 },
+ { "nottriangleleftequal", 0x22ec, 0 },
+ { "nottrianglerightequal", 0x22ed, 0 },
+ { "vertellipsis", 0x22ee, 0 },
+ { "midhorizellipsis", 0x22ef, 0 },
+ { "upslopeellipsis", 0x22f0, 0 },
+ { "downslopeellipsis", 0x22f1, 0 },
+ { "perspcorrespond", 0x2306, 0 },
+ { "ceilingleft", 0x2308, 0 },
+ { "ceilingright", 0x2309, 0 },
+ { "floorleft", 0x230a, 0 },
+ { "floorright", 0x230b, 0 },
+ { "slurabove", 0x2322, 0 },
+ { "slurbelow", 0x2323, 0 },
+ { "null", 0x2400, 0 },
+ { "startofhead", 0x2401, 0 },
+ { "starttext", 0x2402, 0 },
+ { "endtext", 0x2403, 0 },
+ { "endtrans", 0x2404, 0 },
+ { "enquiry", 0x2405, 0 },
+ { "acknowledge", 0x2406, 0 },
+ { "bell", 0x2407, 0 },
+ { "backspace", 0x2408, 0 },
+ { "horiztab", 0x2409, 0 },
+ { "linefeed", 0x240a, 0 },
+ { "verttab", 0x240b, 0 },
+ { "formfeed", 0x240c, 0 },
+ { "shiftout", 0x240e, 0 },
+ { "shiftin", 0x240f, 0 },
+ { "datalinkescape", 0x2410, 0 },
+ { "devcon1", 0x2411, 0 },
+ { "devcon2", 0x2412, 0 },
+ { "devcon3", 0x2413, 0 },
+ { "devcon4", 0x2414, 0 },
+ { "negacknowledge", 0x2415, 0 },
+ { "synch", 0x2416, 0 },
+ { "endtransblock", 0x2417, 0 },
+ { "cancel", 0x2418, 0 },
+ { "endmedium", 0x2419, 0 },
+ { "substitute", 0x241a, 0 },
+ { "escape", 0x241b, 0 },
+ { "fileseparator", 0x241c, 0 },
+ { "groupseparator", 0x241d, 0 },
+ { "recordseparator", 0x241e, 0 },
+ { "unitseparator", 0x241f, 0 },
+ { "spaceliteral", 0x2420, 0 },
+ { "delete", 0x2421, 0 },
+ { "blankb", 0x2422, 0 },
+ { "spaceopenbox", 0x2423, 0 },
+ { "newline", 0x2424, 0 },
+ { "lthorizform", 0x2500, 0 },
+ { "hvhorizform", 0x2501, 0 },
+ { "ltvertform", 0x2502, 0 },
+ { "hvvertform", 0x2503, 0 },
+ { "ltdashtriphorizform", 0x2504, 0 },
+ { "hvdashtriphorizform", 0x2505, 0 },
+ { "ltdashtripvertform", 0x2506, 0 },
+ { "hvdashtripvertform", 0x2507, 0 },
+ { "ltdashquadhorizform", 0x2508, 0 },
+ { "hvdashquadhorizform", 0x2509, 0 },
+ { "ltdashquadvertform", 0x250a, 0 },
+ { "hvdashquadvertform", 0x250b, 0 },
+ { "ltdnrtform", 0x250c, 0 },
+ { "dnltrthvform", 0x250d, 0 },
+ { "dnhvrtltform", 0x250e, 0 },
+ { "hvdnrtform", 0x250f, 0 },
+ { "ltdnleftform", 0x2510, 0 },
+ { "dnltlefthvform", 0x2511, 0 },
+ { "dnhvleftltform", 0x2512, 0 },
+ { "hvdnleftform", 0x2513, 0 },
+ { "ltuprtform", 0x2514, 0 },
+ { "upltrthvform", 0x2515, 0 },
+ { "uphvrtltform", 0x2516, 0 },
+ { "hvuprtform", 0x2517, 0 },
+ { "ltupleftform", 0x2518, 0 },
+ { "upltlefthvform", 0x2519, 0 },
+ { "uphvleftltform", 0x251a, 0 },
+ { "hvupleftform", 0x251b, 0 },
+ { "ltvertrightform", 0x251c, 0 },
+ { "vertltrthvform", 0x251d, 0 },
+ { "uphvrtdnltform", 0x251e, 0 },
+ { "dnhvrtupltform", 0x251f, 0 },
+ { "verthvrtltform", 0x2520, 0 },
+ { "dnltrtuphvform", 0x2521, 0 },
+ { "upltrtdnhvform", 0x2522, 0 },
+ { "hvvertrtform", 0x2523, 0 },
+ { "ltvertleftform", 0x2524, 0 },
+ { "vtltlefthvform", 0x2525, 0 },
+ { "uphvleftdnltform", 0x2526, 0 },
+ { "dnhvleftupltform", 0x2527, 0 },
+ { "verthvleftltform", 0x2528, 0 },
+ { "dnltleftuphvform", 0x2529, 0 },
+ { "upltleftdnhvform", 0x252a, 0 },
+ { "hvvertleftform", 0x252b, 0 },
+ { "ltdnhorizform", 0x252c, 0 },
+ { "lefthvrtdnltform", 0x252d, 0 },
+ { "rthvleftdnltform", 0x252e, 0 },
+ { "dnlthorizhvform", 0x252f, 0 },
+ { "dnhvhorizltform", 0x2530, 0 },
+ { "rtltrtdnhvform", 0x2531, 0 },
+ { "leftltrtdnhvform", 0x2532, 0 },
+ { "hvdnhorizform", 0x2533, 0 },
+ { "ltuphorizform", 0x2534, 0 },
+ { "lefthvrtupltform", 0x2535, 0 },
+ { "rthvleftupltform", 0x2536, 0 },
+ { "uplthorizhvform", 0x2537, 0 },
+ { "uphvhorizltform", 0x2538, 0 },
+ { "rtltleftuphvform", 0x2539, 0 },
+ { "leftltrtuphvform", 0x253a, 0 },
+ { "hvuphorizform", 0x253b, 0 },
+ { "ltverthorizform", 0x253c, 0 },
+ { "lefthvrtvertltform", 0x253d, 0 },
+ { "rthvleftvertltform", 0x253e, 0 },
+ { "vertlthorizhvform", 0x253f, 0 },
+ { "uphvdnhorizltform", 0x2540, 0 },
+ { "dnhvuphorizltform", 0x2541, 0 },
+ { "verthvhorizltform", 0x2542, 0 },
+ { "leftuphvrtdnltform", 0x2543, 0 },
+ { "rtuphvleftdnltform", 0x2544, 0 },
+ { "leftdnhvrtupltform", 0x2545, 0 },
+ { "rtdnhvleftupltform", 0x2546, 0 },
+ { "dnltuphorizhvform", 0x2547, 0 },
+ { "upltdnhorizhvform", 0x2548, 0 },
+ { "rtltleftverthvform", 0x2549, 0 },
+ { "leftltrtverthvform", 0x254a, 0 },
+ { "hvverthorizform", 0x254b, 0 },
+ { "ltdashdblhorizform", 0x254c, 0 },
+ { "hvdashdblhorizform", 0x254d, 0 },
+ { "ltdashdblvertform", 0x254e, 0 },
+ { "hvdashdblvertform", 0x254f, 0 },
+ { "horizdblbar", 0x2550, 0 },
+ { "vertdblbar", 0x2551, 0 },
+ { "dnrtdblform", 0x2552, 0 },
+ { "dndblrtform", 0x2553, 0 },
+ { "dbldnrtform", 0x2554, 0 },
+ { "dnleftdblform", 0x2555, 0 },
+ { "dndblleftform", 0x2556, 0 },
+ { "dbldnleftform", 0x2557, 0 },
+ { "uprtdblform", 0x2558, 0 },
+ { "updblrtform", 0x2559, 0 },
+ { "dbluprtform", 0x255a, 0 },
+ { "upleftdblform", 0x255b, 0 },
+ { "updblleftform", 0x255c, 0 },
+ { "dblupleftform", 0x255d, 0 },
+ { "vertrtdblform", 0x255e, 0 },
+ { "vertdblrtform", 0x255f, 0 },
+ { "dblvertrtform", 0x2560, 0 },
+ { "vertleftdblform", 0x2561, 0 },
+ { "vertdblleftform", 0x2562, 0 },
+ { "dblvertleftform", 0x2563, 0 },
+ { "dnhorizdblform", 0x2564, 0 },
+ { "dndblhorizform", 0x2565, 0 },
+ { "dbldnhorizform", 0x2566, 0 },
+ { "uphorizdblform", 0x2567, 0 },
+ { "updblhorizform", 0x2568, 0 },
+ { "dbluphorizform", 0x2569, 0 },
+ { "verthorizdblform", 0x256a, 0 },
+ { "vertdblhorizform", 0x256b, 0 },
+ { "dblverthorizform", 0x256c, 0 },
+ { "ltarcdnrtform", 0x256d, 0 },
+ { "ltarcdnleftform", 0x256e, 0 },
+ { "ltarcupleftform", 0x256f, 0 },
+ { "ltarcuprtform", 0x2570, 0 },
+ { "forwarddiagonal", 0x2571, 0 },
+ { "backwarddiagonal", 0x2572, 0 },
+ { "ltdiagonalcross", 0x2573, 0 },
+ { "dneighthblock", 0x2581, 0 },
+ { "dnquarterblock", 0x2582, 0 },
+ { "dnthreeeighthblock", 0x2583, 0 },
+ { "dnfiveeighthblock", 0x2585, 0 },
+ { "dnthreequarterblock", 0x2586, 0 },
+ { "dnseveneighthblock", 0x2587, 0 },
+ { "lfseveneighthblock", 0x2589, 0 },
+ { "lfthreequarterblock", 0x258a, 0 },
+ { "lffiveeighthblock", 0x258b, 0 },
+ { "lfthreeeighthblock", 0x258d, 0 },
+ { "lfquarterblock", 0x258e, 0 },
+ { "lfeighthblock", 0x258f, 0 },
+ { "upeighthblock", 0x2594, 0 },
+ { "rteighthblock", 0x2595, 0 },
+ { "box", 0x25a1, 0 },
+ { "boxrounded", 0x25a2, 0 },
+ { "boxnested", 0x25a3, 0 },
+ { "boxhorizhatch", 0x25a4, 0 },
+ { "boxverthatch", 0x25a5, 0 },
+ { "boxcrosshatch", 0x25a6, 0 },
+ { "boxleftdiaghatch", 0x25a7, 0 },
+ { "boxrtdiaghatch", 0x25a8, 0 },
+ { "boxcrossdiaghatch", 0x25a9, 0 },
+ { "smallboxfilled", 0x25aa, 0 },
+ { "smallbox", 0x25ab, 0 },
+ { "rectangle", 0x25ad, 0 },
+ { "filledvertrect", 0x25ae, 0 },
+ { "vertrectangle", 0x25af, 0 },
+ { "filledparallelogram", 0x25b0, 0 },
+ { "parallelogram", 0x25b1, 0 },
+ { "triangle", 0x25b3, 0 },
+ { "smalltrianglesld", 0x25b4, 0 },
+ { "smalltriangle", 0x25b5, 0 },
+ { "trianglerightsld1", 0x25b6, 0 },
+ { "triangleright1", 0x25b7, 0 },
+ { "smalltrianglerightsld", 0x25b8, 0 },
+ { "smalltriangleright", 0x25b9, 0 },
+ { "triagrtopen", 0x25bb, 0 },
+ { "triangleinv", 0x25bd, 0 },
+ { "smalltriangleinvsld", 0x25be, 0 },
+ { "smalltriangleinv", 0x25bf, 0 },
+ { "triangleleftsld1", 0x25c0, 0 },
+ { "triangleleft1", 0x25c1, 0 },
+ { "smalltriangleleftsld", 0x25c2, 0 },
+ { "smalltriangleleft", 0x25c3, 0 },
+ { "triaglfopen", 0x25c5, 0 },
+ { "diamondrhombsolid", 0x25c6, 0 },
+ { "diamondrhomb", 0x25c7, 0 },
+ { "diamondrhombnested", 0x25c8, 0 },
+ { "circledash", 0x25cc, 0 },
+ { "circleverthatch", 0x25cd, 0 },
+ { "circlesolid", 0x25cf, 0 },
+ { "circleleftsld", 0x25d0, 0 },
+ { "circlerightsld", 0x25d1, 0 },
+ { "circlebottomsld", 0x25d2, 0 },
+ { "circletopsld", 0x25d3, 0 },
+ { "circlenesld", 0x25d4, 0 },
+ { "circlenwopen", 0x25d5, 0 },
+ { "semicircleleftsld", 0x25d6, 0 },
+ { "semicirclelertsld", 0x25d7, 0 },
+ { "invsemicircleup", 0x25da, 0 },
+ { "invsemicircledn", 0x25db, 0 },
+ { "nwquadarc", 0x25dc, 0 },
+ { "nequadarc", 0x25dd, 0 },
+ { "sequadarc", 0x25de, 0 },
+ { "swquadarc", 0x25df, 0 },
+ { "toparc", 0x25e0, 0 },
+ { "bottomarc", 0x25e1, 0 },
+ { "trianglesesld", 0x25e2, 0 },
+ { "triangleswsld", 0x25e3, 0 },
+ { "tranglenwsld", 0x25e4, 0 },
+ { "trianglenesld", 0x25e5, 0 },
+ { "squareleftsld", 0x25e7, 0 },
+ { "squarerightsld", 0x25e8, 0 },
+ { "squarenwsld", 0x25e9, 0 },
+ { "squaresesld", 0x25ea, 0 },
+ { "squarevertbisect", 0x25eb, 0 },
+ { "triangledot", 0x25ec, 0 },
+ { "triangleleftsld", 0x25ed, 0 },
+ { "trianglerightsld", 0x25ee, 0 },
+ { "heartopen", 0x2661, 0 },
+ { "diamondopen", 0x2662, 0 },
+ { "spadeopen", 0x2664, 0 },
+ { "Omegaiotasubleniscircumflex", 0x1fae, 0 },
+ { "Omegaleniscircumflex", 0x1f6e, 0 },
+ { "Upsilonaspercircumflex", 0x1f5f, 0 },
+ { "dieresiscircumflex", 0x1fc1, 0 },
+ { "leniscircumflex", 0x1fcf, 0 },
+ { "aspercircumflex", 0x1fdf, 0 },
+ { "alphaleniscircumflex", 0x1f06, 0 },
+ { "alphaaspercircumflex", 0x1f07, 0 },
+ { "etaleniscircumflex", 0x1f26, 0 },
+ { "etaaspercircumflex", 0x1f27, 0 },
+ { "iotaleniscircumflex", 0x1f36, 0 },
+ { "iotaaspercircumflex", 0x1f37, 0 },
+ { "upsilonleniscircumflex", 0x1f56, 0 },
+ { "upsilonaspercircumflex", 0x1f57, 0 },
+ { "omegaleniscircumflex", 0x1f66, 0 },
+ { "omegaaspercircumflex", 0x1f67, 0 },
+ { "alphaiotasubleniscircumflex", 0x1f86, 0 },
+ { "alphaiotasubaspercircumflex", 0x1f87, 0 },
+ { "etaiotasubleniscircumflex", 0x1f96, 0 },
+ { "etaiotasubaspercircumflex", 0x1f97, 0 },
+ { "omegaiotasubleniscircumflex", 0x1fa6, 0 },
+ { "omegaiotasubaspercircumflex", 0x1fa7, 0 },
+ { "alphacircumflex", 0x1fb6, 0 },
+ { "alphaiotasubcircumflex", 0x1fb7, 0 },
+ { "etacircumflex", 0x1fc6, 0 },
+ { "etaiotasubcircumflex", 0x1fc7, 0 },
+ { "iotacircumflex", 0x1fd6, 0 },
+ { "iotadieresiscircumflex", 0x1fd7, 0 },
+ { "upsiloncircumflex", 0x1fe6, 0 },
+ { "omegacircumflex", 0x1ff6, 0 },
+ { "omegaiotasubcircumflex", 0x1ff7, 0 },
+ { "upsilondieresiscircumflex", 0x1fe7, 0 },
+ { "dialytika", 0x0308, 0 },
+ { "koronis", 0x1fbd, 0 },
+ { "prosgegrammeni", 0x1fbe, 0 },
+ { "psili", 0x1fbf, 0 },
+ { "perispomeni", 0x1fc0, 0 },
+ { "varia", 0x1fef, 0 },
+ { "oxia", 0x1ffd, 0 },
+ { "dasia", 0x1ffe, 0 },
+ { "Alphasmall", 0xf500, 0 },
+ { "Betasmall", 0xf501, 0 },
+ { "Gammasmall", 0xf502, 0 },
+ { "Deltasmall", 0xf503, 0 },
+ { "Epsilonsmall", 0xf504, 0 },
+ { "Zetasmall", 0xf505, 0 },
+ { "Etasmall", 0xf506, 0 },
+ { "Thetasmall", 0xf507, 0 },
+ { "Iotasmall", 0xf508, 0 },
+ { "Kappasmall", 0xf509, 0 },
+ { "Lambdasmall", 0xf50a, 0 },
+ { "Musmall", 0xf50b, 0 },
+ { "Nusmall", 0xf50c, 0 },
+ { "Xismall", 0xf50d, 0 },
+ { "Omicronsmall", 0xf50e, 0 },
+ { "Pismall", 0xf50f, 0 },
+ { "Rhosmall", 0xf510, 0 },
+ { "Sigmasmall", 0xf512, 0 },
+ { "Tausmall", 0xf513, 0 },
+ { "Upsilonsmall", 0xf514, 0 },
+ { "Phismall", 0xf515, 0 },
+ { "Chismall", 0xf516, 0 },
+ { "Psismall", 0xf517, 0 },
+ { "Omegasmall", 0xf518, 0 },
+ { "Iotadieresissmall", 0xf519, 0 },
+ { "Upsilondieresissmall", 0xf51a, 0 },
+ { "uni2A0B.lgdisplay", 0xea57, 0 },
+ { "uni2A0B.uplgdisplay", 0xea57, 0 },
+ { "uni2A15.lgdisplay", 0xe376, 0 },
+ { "uni2A15.uplgdisplay", 0xe376, 0 },
+ { "uni2A16.lgdisplay", 0xe377, 0 },
+ { "uni2A16.uplgdisplay", 0xe377, 0 },
+ { "uni2A10.lgdisplay", 0xe395, 0 },
+ { "uni2A10.uplgdisplay", 0xe395, 0 },
+ { "uni2A12.lgdisplay", 0xe397, 0 },
+ { "uni2A12.uplgdisplay", 0xe397, 0 },
+ { "uni2A13.lgdisplay", 0xe398, 0 },
+ { "uni2A13.uplgdisplay", 0xe398, 0 },
+ { "uni2A14.lgdisplay", 0xe399, 0 },
+ { "uni2A14.uplgdisplay", 0xe399, 0 },
+ { "uni2A17.lgdisplay", 0xe39a, 0 },
+ { "uni2A17.uplgdisplay", 0xe39a, 0 },
+ { "uni2A11.uplgdisplay", 0xe39b, 0 },
+ { "uni2A11.lgdisplay", 0xe39b, 0 },
+ { "uni2A0F.lgdisplay", 0xe3d3, 0 },
+ { "uni2A0F.uplgdisplay", 0xe3d3, 0 },
+/* From Richard Kinch's TeX list of glyph aliases */
+ { "fscript", 0x192, 0 },
+ { "fraction1", 0x2215, 0 },
+ { "negationslash", 0x2215, 0 },
+ { "circleR", 0xae, 0 },
+ { "circlecopyrt", 0xa9, 0 },
+ { "smile", 0x263a, 0 },
+ { "Ifractur", 0x2111, 0 },
+ { "Rfractur", 0x211C, 0 },
+ { "Omegainv", 0x2127, 0 },
+ { "mho", 0x2127, 0 },
+ { "alephmath", 0x2135, 0 },
+ { "beth", 0x2136, 0 },
+ { "bethmath", 0x2136, 0 },
+ { "gimelmath", 0x2137, 0 },
+ { "daleth", 0x2138, 0 },
+ { "daletmath", 0x2138, 0 },
+ { "arrowbothv", 0x2195, 0 },
+ { "prime1", 0x2032, 0 },
+ { "primerev1", 0x2035, 0 },
+ { "primereverse", 0x2035, 0 },
+ { "followsequal1", 0x227d, 0 },
+ { "similarequal", 0x2243, 0 },
+ { "square", 0x25a1, 0 },
+ { "squaresolid", 0x25a0, 0 },
+ { "squaresmallsolid", 0x25aa, 0 },
+ { "diamondsolid", 0x25c6, 0 },
+ { "clockwise", 0x21bb, 0 },
+ { "anticlockwise", 0x21ba, 0 },
+ { "forces", 0x22a9, 0 },
+ { "forcesbar", 0x22aa, 0 },
+ { "satisfies", 0x22a8, 0 },
+ { "dblarrowdwn", 0x21ca, 0 },
+ { "shiftleft", 0x2196, 0 },
+ { "shiftright", 0x2197, 0 },
+ { "squiggleright", 0x21dd, 0 },
+ { "squiggleleft", 0x21dc, 0 },
+ { "squiggleleftright", 0x21ad, 0 },
+ { "curlyleft", 0x21ab, 0 },
+ { "curlyright", 0x21ac, 0 },
+ { "followsorequal", 0x227d, 0 },
+ { "equalsdots", 0x2251, 0 },
+ { "defines", 0x225c, 0 },
+ { "ng", 0x014b, 0 },
+ { "Ng", 0x014a, 0 },
+ { "visiblespace", 0x2420, 0 },
+ { "dslash", 0x0111, 0 },
+ { "tie1", 0x2040, 0 },
+ { "arrowdblbothv", 0x21d5, 0 },
+ { "precedesequal1", 0x227c, 0 },
+ { "greaterorsimilar", 0x2273, 0 },
+ { "precedesorequal", 0x227e, 0 },
+ { "lessorsimilar", 0x2272, 0 },
+ { "equalorgreater", 0x22dd, 0 },
+ { "lessorequalslant", 0x2264, 0 },
+ { "equaldotrightleft", 0x2253, 0 },
+ { "equaldotleftright", 0x2252, 0 },
+ { "followsorcurly", 0x227d, 0 },
+ { "greaterorequalslant", 0x2265, 0 },
+ { "trianglerightequal", 0x22b5, 0 },
+ { "triangleleftequal", 0x22b4, 0 },
+ { "triangledownsld", 0x25bc, 0 },
+ { "arrowaxisright", 0x2192, 0 },
+ { "arrowaxisleft", 0x2190, 0 },
+ { "trianglesolid", 0x25b2, 0 },
+ { "greaterlessequal", 0x22db, 0 },
+ { "orunderscore", 0x22bb, 0 },
+ { "frown", 0x2322, 0 },
+ { "uprise", 0x22cf, 0 },
+ { "downfall", 0x22ce, 0 },
+ { "subsetdblequal", 0x2286, 0 },
+ { "supersetdblequal", 0x2287, 0 },
+ { "Finv", 0x2132, 0 },
+ { "notarrowboth", 0x21ae, 0 },
+ { "archleftdown", 0x21b6, 0 },
+ { "archrightdown", 0x21b7, 0 },
+ { "notdblarrowleft", 0x21cd, 0 },
+ { "notdblarrowboth", 0x21ce, 0 },
+ { "notdblarrowright", 0x21cf, 0 },
+ { "epsiloninv", 0x220a, 0 },
+ { "equalorsimilar", 0x2242, 0 },
+ { "notprecedes", 0x2280, 0 },
+ { "notsubseteql", 0x2288, 0 },
+ { "notsuperseteql", 0x2289, 0 },
+ { "subsetnoteql", 0x228a, 0 },
+ { "supersetnoteql", 0x228b, 0 },
+ { "notturnstile", 0x22ac, 0 },
+ { "notforcesextra", 0x22af, 0 },
+ { "dividemultiply", 0x22c7, 0 },
+ { "notprecedesoreql", 0x22e0, 0 },
+ { "notfollowsoreql", 0x22e1, 0 },
+ { "lessornotsimilar", 0x22e6, 0 },
+ { "greaterornotsimilar", 0x22e7, 0 },
+ { "precedeornoteqvlnt", 0x22e8, 0 },
+ { "followornoteqvlnt", 0x22e9, 0 },
+ { "nottriangeqlleft", 0x22ec, 0 },
+ { "nottriangeqlright", 0x22ed, 0 },
+ { "angbracketleft", 0x3008, 0 },
+ { "angbracketright", 0x3009, 0 },
+ { "check", 0x2713, 0 },
+ { "circleS", 0x24c8, 0 },
+ { "rightanglenw", 0x250c, 0 },
+ { "rightanglene", 0x2510, 0 },
+ { "rightanglesw", 0x2514, 0 },
+ { "rightanglese", 0x2518, 0 },
+ { "Yen", 0x00a5, 0 },
+ { "permill", 0x2030, 0 },
+ { "recipe", 0x211e, 0 },
+ { "pertenmill", 0x2031, 0 },
+ { "lnot", 0x00ac, 0 },
+ { "circleP", 0x2117, 0 },
+ { "surd", 0x221a, 0 },
+ { "asciigrave", 0x60, 0 },
+ { "asciigrave", 0x60, 0 },
+ { "asciiacute", 0xb4, 0 },
+ { "asciidieresis", 0xa8, 0 },
+ { "pilcrow", 0xb6, 0 },
+/* Useful names to use to find glyphs */
+ { "circumflexcomb", 0x302, 0 },
+ { "macroncomb", 0x304, 0 },
+ { "brevecomb", 0x306, 0 },
+ { "diaeresiscomb", 0x308, 0 },
+ { "caroncomb", 0x30c, 0 },
+ { "vrachycomb", 0x306, 0 },
+ { "psilicomb", 0x313, 0 },
+ { "dasiacomb", 0x314, 0 },
+ { "psilivaria", 0x1fcd, 0 },
+ { "psilioxia", 0x1fce, 0 },
+ { "psiliperispomeni", 0x1fcf, 0 },
+ { "dasiavaria", 0x1fdd, 0 },
+ { "dasiaoxia", 0x1fde, 0 },
+ { "dasiaperispomeni", 0x1fdf, 0 },
+ { "dialytikavaria", 0x1fed, 0 },
+ { "dialytikaoxia", 0x1fee, 0 },
+ { "dialytikaperispomeni", 0x1fc1, 0 },
+/* Adobe spells diaeresis the American way, as dieresis */
+ { "diaeresis", 0xa8, 0 },
+ { "Adiaeresis", 0xC4, 0 },
+ { "Ediaeresis", 0xCB, 0 },
+ { "Idiaeresis", 0xCF, 0 },
+ { "Odiaeresis", 0xD6, 0 },
+ { "Udiaeresis", 0xDC, 0 },
+ { "adiaeresis", 0xE4, 0 },
+ { "ediaeresis", 0xEB, 0 },
+ { "idiaeresis", 0xEF, 0 },
+ { "odiaeresis", 0xF6, 0 },
+ { "udiaeresis", 0xFC, 0 },
+ { "Ydiaeresis", 0x178, 0 },
+ { "diaeresistonos", 0x385, 0 },
+ { "iotadiaeresistonos", 0x390, 0 },
+ { "Iotadiaeresis", 0x3AA, 0 },
+ { "Upsilondiaeresis", 0x3AB, 0 },
+ { "upsilondiaeresistonos", 0x3B0, 0 },
+ { "iotadiaeresis", 0x3CA, 0 },
+ { "upsilondiaeresis", 0x3CB, 0 },
+ { "Wdiaeresis", 0x1e84, 0 },
+ { "wdiaeresis", 0x1e85, 0 },
+ { "ETH", 0xd0, 0 },
+ { "THORN", 0xde, 0 },
+ { "ssharp", 0xdf, 0 },
+ { "Ooblique", 0xd8, 0 },
+ { "notsign", 0xac, 0 },
+/* Sun has used "masculine" for ordmasculine */
+ { NULL, 0, 0 }
+};
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/nouiutil.c b/dviware/dvisvgm/libs/ff-woff/fontforge/nouiutil.c
new file mode 100644
index 0000000000..109b13eeb7
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/nouiutil.c
@@ -0,0 +1,161 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "uiinterface.h"
+#include "splinefont.h"
+
+static void NOUI_IError(const char *format,...) {
+ va_list ap;
+ char buffer[400], *str;
+ va_start(ap,format);
+ fprintf(stderr, "Internal Error: " );
+ vsnprintf(buffer,sizeof(buffer),format,ap);
+ str = buffer;
+ fprintf(stderr,"%s",str);
+ if ( str[strlen(str)-1]!='\n' )
+ putc('\n',stderr);
+ va_end(ap);
+}
+
+static void NOUI__LogError(const char *format,va_list ap) {
+ char buffer[400], *str;
+ vsnprintf(buffer,sizeof(buffer),format,ap);
+ str = buffer;
+ fprintf(stderr,"%s",str);
+ if ( str[strlen(str)-1]!='\n' )
+ putc('\n',stderr);
+}
+
+static void NOUI_LogError(const char *format,...) {
+ va_list ap;
+
+ va_start(ap,format);
+ NOUI__LogError(format,ap);
+ va_end(ap);
+}
+
+static void NOUI_post_notice(const char *title,const char *statement,...) {
+ va_list ap;
+ va_start(ap,statement);
+ NOUI__LogError(statement,ap);
+ va_end(ap);
+}
+
+static void NOUI_post_error(const char *title,const char *statement,...) {
+ va_list ap;
+ va_start(ap,statement);
+ NOUI__LogError(statement,ap);
+ va_end(ap);
+}
+
+static int NOUI_ask(const char *title, const char **answers,
+ int def, int cancel,const char *question,...) {
+return( def );
+}
+
+static int NOUI_choose(const char *title, const char **choices,int cnt, int def,
+ const char *question,...) {
+return( def );
+}
+
+static int NOUI_choose_multiple(char *title, const char **choices,char *sel,
+ int cnt, char *buts[2], const char *question,...) {
+return( -1 );
+}
+
+static char *NOUI_ask_string(const char *title, const char *def,
+ const char *question,...) {
+return( (char *) def );
+}
+
+static char *NOUI_open_file(const char *title, const char *defaultfile,
+ const char *initial_filter) {
+return( NULL );
+}
+
+static char *NOUI_saveas_file(const char *title, const char *defaultfile,
+ const char *initial_filter) {
+return( copy(defaultfile) );
+}
+
+static void NOUI_progress_start(int delay, const char *title, const char *line1,
+ const char *line2, int tot, int stages) {
+}
+
+static void NOUI_void_void_noop(void) {
+}
+
+static void NOUI_void_int_noop(int useless) {
+}
+
+static int NOUI_int_int_noop(int useless) {
+return( true );
+}
+
+static void NOUI_void_str_noop(const char * useless) {
+}
+
+static int NOUI_alwaystrue(void) {
+return( true );
+}
+
+static int NOUI_DefaultStrokeFlags(void) {
+return( sf_correctdir );
+}
+
+static struct ui_interface noui_interface = {
+ NOUI_IError,
+ NOUI_post_error,
+ NOUI_LogError,
+ NOUI_post_notice,
+ NOUI_ask,
+ NOUI_choose,
+ NOUI_choose_multiple,
+ NOUI_ask_string,
+ NOUI_ask_string, /* password */
+ NOUI_open_file,
+ NOUI_saveas_file,
+
+ NOUI_progress_start,
+ NOUI_void_void_noop,
+ NOUI_void_void_noop,
+ NOUI_void_int_noop,
+ NOUI_alwaystrue,
+ NOUI_alwaystrue,
+ NOUI_int_int_noop,
+ NOUI_void_str_noop,
+ NOUI_void_str_noop,
+ NOUI_void_void_noop,
+ NOUI_void_void_noop,
+ NOUI_void_int_noop,
+ NOUI_void_int_noop,
+ NOUI_alwaystrue,
+
+ NOUI_void_void_noop,
+
+ NOUI_DefaultStrokeFlags
+};
+struct ui_interface *ui_interface = &noui_interface;
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/nowakowskittfinstr.c b/dviware/dvisvgm/libs/ff-woff/fontforge/nowakowskittfinstr.c
new file mode 100644
index 0000000000..e56cc7a009
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/nowakowskittfinstr.c
@@ -0,0 +1,5258 @@
+/* Copyright (C) 2000-2012 by
+ George Williams, Michal Nowakowski & Alexey Kryukov */
+
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#define _USE_MATH_DEFINES
+#include <ctype.h>
+#include <math.h>
+
+#include "ttf.h"
+#include "splinefont.h"
+#include "stemdb.h"
+
+extern int autohint_before_generate;
+
+int instruct_diagonal_stems = 1,
+ instruct_serif_stems = 1,
+ instruct_ball_terminals = 1,
+ interpolate_strong = 1,
+ interpolate_more_strong = 1, /* not applicable if interpolate_strong==0 */
+ control_counters = 0;
+
+/* non-optimized instructions will be using a stack of depth 6, allowing
+ * for easy testing whether the code leaves trash on the stack or not.
+ */
+#define OPTIMIZE_TTF_INSTRS 1
+#if OPTIMIZE_TTF_INSTRS
+#define STACK_DEPTH 256
+#else
+#define STACK_DEPTH 6
+#endif
+
+/* define some often used instructions */
+#define SVTCA_y (0x00)
+#define SVTCA_x (0x01)
+#define SRP0 (0x10)
+#define SRP1 (0x11)
+#define SRP2 (0x12)
+#define SZP0 (0x13)
+#define SLOOP (0x17)
+#define RTG (0x18)
+#define SMD (0x1a)
+#define DUP (0x20)
+#define DEPTH (0x24)
+#define CALL (0x2b)
+#define MDAP (0x2e)
+#define MDAP_rnd (0x2f)
+#define IUP_y (0x30)
+#define IUP_x (0x31)
+#define SHP_rp2 (0x32)
+#define SHP_rp1 (0x33)
+#define SHPIX (0x38)
+#define IP (0x39)
+#define ALIGNRP (0x3c)
+#define MIAP_rnd (0x3f)
+#define ADD (0x60)
+#define MUL (0x63)
+#define NEG (0x65)
+#define SROUND (0x76)
+#define FLIPPT (0x80)
+#define MDRP_grey (0xc0)
+#define MDRP_min_black (0xc9)
+#define MDRP_min_white (0xca)
+#define MDRP_min_rnd_black (0xcd)
+#define MDRP_rp0_rnd_white (0xd6)
+#define MDRP_rp0_min_rnd_grey (0xdc)
+#define MDRP_rp0_min_rnd_black (0xdd)
+#define MIRP_min_black (0xe9)
+#define MIRP_min_rnd_black (0xed)
+#define MIRP_rp0_min_black (0xf9)
+#define MIRP_rp0_min_rnd_black (0xfd)
+
+
+/******************************************************************************
+ *
+ * Low-level routines to add data for PUSHes to bytecode instruction stream.
+ * pushheader() adds PUSH preamble, then repeating addpoint() adds items.
+ *
+ * Numbers larger than 65535 are not supported (according to TrueType spec,
+ * there can't be more points in a glyph, simple or compound). Negative
+ * numbers aren't supported, either. So don't use these functions as they
+ * are - there are higher-level ones further below, that handle things nicely.
+ *
+ ******************************************************************************/
+
+static uint8 *pushheader(uint8 *instrs, int isword, int tot) {
+ if ( isword ) {
+ if ( tot>8 ) {
+ *instrs++ = 0x41; /* N(next word) Push words */
+ *instrs++ = tot;
+ } else
+ *instrs++ = 0xb8+(tot-1); /* Push Words */
+ } else {
+ if ( tot>8 ) {
+ *instrs++ = 0x40; /* N(next byte) Push bytes */
+ *instrs++ = tot;
+ } else
+ *instrs++ = 0xb0+(tot-1); /* Push bytes */
+ }
+return( instrs );
+}
+
+static uint8 *addpoint(uint8 *instrs,int isword,int pt) {
+ if ( !isword ) {
+ *instrs++ = pt;
+ } else {
+ *instrs++ = pt>>8;
+ *instrs++ = pt&0xff;
+ }
+return( instrs );
+}
+
+/* Exemplary high-level routines to add PUSH-es to bytecode instruction
+ * stream. They handle negative numbers correctly. As they are used
+ * in various roles here, some aliases are defined, so that the name
+ * speaks for itself in the code.
+ */
+
+static uint8 *pushpoint(uint8 *instrs,int pt) {
+ instrs = pushheader(instrs,(pt>255)||(pt<0),1);
+return( addpoint(instrs,(pt>255)||(pt<0),pt));
+}
+
+#define pushnum(a, b) pushpoint(a, b)
+
+static uint8 *pushpointstem(uint8 *instrs, int pt, int stem) {
+ int isword = pt>255 || stem>255 || pt<0 || stem<0;
+ instrs = pushheader(instrs,isword,2);
+ instrs = addpoint(instrs,isword,pt);
+return( addpoint(instrs,isword,stem));
+}
+
+#define push2points(a, b, c) pushpointstem(a, b, c)
+#define push2nums(a, b, c) pushpointstem(a, b, c)
+
+/* Push a bunch of point numbers (or other numbers) onto the stack.
+ * TODO!
+ * Possible strategies:
+ * - push point by point (poor space efficiency)
+ * - push all the stock at once (currently used, better, but has
+ * poor space efficiency in case of a word among several bytes).
+ * - push bytes and words separately
+ */
+static uint8 *pushpoints(uint8 *instrs, int ptcnt, const int *pts) {
+ int i, isword = 0;
+ for (i=0; i<ptcnt; i++) if (pts[i]>255 || pts[i]<0) isword=1;
+
+ /* It's an error to push more than STACK_DEPTH points. */
+ if (ptcnt > STACK_DEPTH)
+ IError("Truetype stack overflow will occur.");
+
+ if (ptcnt > 255 && !isword) {
+ instrs = pushpoints(instrs, 255, pts);
+ ptcnt-=255;
+ pts+=255;
+ }
+
+ instrs = pushheader(instrs,isword,ptcnt);
+ for (i=0; i<ptcnt; i++) instrs = addpoint(instrs, isword, pts[i]);
+return( instrs );
+}
+
+#define pushnums(a, b, c) pushpoints(a, b, c)
+
+/* As we don't have "push F26dot6" command in truetype instructions,
+ * we need to do this by hand. As we can explicitly push only 16-bit
+ * quantities, we need to push a F26dot6 value in halves, shift left
+ * the more significant half and add halves.
+ *
+ * There are no checks for overflow!
+ */
+static uint8 *pushF26Dot6(uint8 *instrs, double num) {
+ int a, elems[3];
+ int negative=0;
+
+ if (num < 0) {
+ negative=1;
+ num*=-1.0;
+ }
+
+ num *= 64;
+ a = rint(num);
+ elems[0] = a % 65536;
+ elems[1] = (int)rint(a / 65536.0) % 65536;
+ elems[2] = 16384;
+
+ if (elems[1]) {
+ instrs = pushpoints(instrs, 3, elems);
+ *instrs++ = DUP;
+ *instrs++ = MUL;
+ *instrs++ = MUL;
+ *instrs++ = ADD;
+ }
+ else instrs = pushpoint(instrs, elems[0]);
+
+ if (negative) *instrs++ = NEG;
+
+return( instrs );
+}
+
+/* Compute an EF2Dot14 representation of a floating point number.
+ * The number must be in range [-2.0 ... 1.0+(2^14-1)/(2^14) = 1.99993896...]
+ *
+ * There are no checks for overflow!
+ */
+static int EF2Dot14(double num) {
+return( rint(num*16384) );
+}
+
+/* An apparatus for instructing sets of points with given truetype command.
+ * The command must pop exactly 1 element from the stack and mustn't push any.
+ * These points must be marked as 'touched' elsewhere! this function only
+ * generates intructions.
+ */
+static uint8 *instructpoints(uint8 *instrs, int ptcnt, const int *pts, uint8 command) {
+ int i, use_sloop;
+
+ use_sloop = 0;
+ use_sloop |= (command == SHP_rp1);
+ use_sloop |= (command == SHP_rp2);
+ use_sloop |= (command == SHPIX);
+ use_sloop |= (command == IP);
+ use_sloop |= (command == FLIPPT);
+ use_sloop |= (command == ALIGNRP);
+ use_sloop = use_sloop && (ptcnt > 3);
+
+ instrs = pushpoints(instrs, ptcnt<STACK_DEPTH?ptcnt:STACK_DEPTH-1, pts);
+
+ if (use_sloop) {
+ *instrs++ = DEPTH;
+ *instrs++ = SLOOP;
+ *instrs++ = command;
+ }
+ else for (i=0; i<(ptcnt<STACK_DEPTH?ptcnt:STACK_DEPTH-1); i++)
+ *instrs++ = command;
+
+ if (ptcnt>=STACK_DEPTH)
+ instrs=instructpoints(instrs, ptcnt-(STACK_DEPTH-1), pts+(STACK_DEPTH-1), command);
+
+return( instrs );
+}
+
+/******************************************************************************
+ *
+ * Low-level routines for getting a cvt index for a stem width, assuming there
+ * are any numbers in cvt. Includes legacy code for importing PS Private into
+ * CVT.
+ *
+ ******************************************************************************/
+
+struct ttf_table *SFFindTable(SplineFont *sf,uint32 tag) {
+ struct ttf_table *tab;
+
+ for ( tab=sf->ttf_tables; tab!=NULL && tab->tag!=tag; tab=tab->next );
+return( tab );
+}
+
+int TTF__getcvtval(SplineFont *sf,int val) {
+ int i;
+ struct ttf_table *cvt_tab = SFFindTable(sf,CHR('c','v','t',' '));
+
+ if ( cvt_tab==NULL ) {
+ cvt_tab = chunkalloc(sizeof(struct ttf_table));
+ cvt_tab->tag = CHR('c','v','t',' ');
+ cvt_tab->maxlen = 200;
+ cvt_tab->data = malloc(100*sizeof(short));
+ cvt_tab->next = sf->ttf_tables;
+ sf->ttf_tables = cvt_tab;
+ }
+ for ( i=0; (int)sizeof(uint16)*i<cvt_tab->len; ++i ) {
+ int tval = (int16) memushort(cvt_tab->data,cvt_tab->len, sizeof(uint16)*i);
+ if ( val>=tval-1 && val<=tval+1 )
+return( i );
+ }
+ if ( (int)sizeof(uint16)*i>=cvt_tab->maxlen ) {
+ if ( cvt_tab->maxlen==0 ) cvt_tab->maxlen = cvt_tab->len;
+ cvt_tab->maxlen += 200;
+ cvt_tab->data = realloc(cvt_tab->data,cvt_tab->maxlen);
+ }
+ memputshort(cvt_tab->data,sizeof(uint16)*i,val);
+ cvt_tab->len += sizeof(uint16);
+return( i );
+}
+
+/* by default sign is unimportant in the cvt
+ * For some instructions anyway, but not for MIAP so this routine has
+ * been broken in two.
+ */
+int TTF_getcvtval(SplineFont *sf,int val) {
+ if ( val<0 ) val = -val;
+return( TTF__getcvtval(sf,val));
+}
+
+/* We are given a stem weight and try to find matching one in CVT.
+ * If none found, we return -1.
+ */
+static StdStem *CVTSeekStem(int xdir, GlobalInstrCt *gic, double value, int can_fail) {
+ StdStem *mainstem = xdir?&(gic->stdvw):&(gic->stdhw);
+ StdStem *otherstems = xdir?gic->stemsnapv:gic->stemsnaph;
+ StdStem *closest = NULL;
+ int otherstemcnt = xdir?gic->stemsnapvcnt:gic->stemsnaphcnt;
+ int i;
+ double mindelta=1e20, delta, closestwidth=1e20;
+
+ if (mainstem->width == -1)
+return NULL;
+
+ value = fabs(value);
+ delta = fabs(mainstem->width - value);
+
+ if (delta < mindelta) {
+ mindelta = delta;
+ closestwidth = rint(mainstem->width);
+ closest = mainstem;
+ }
+
+ for (i=0; i<otherstemcnt; i++) {
+ delta = fabs(otherstems[i].width - value);
+
+ if (delta < mindelta) {
+ mindelta = delta;
+ closestwidth = otherstems[i].width;
+ closest = otherstems+i;
+ }
+ }
+
+ if (mindelta <= gic->fudge)
+return closest;
+ if (value/closestwidth < 1.11 && value/closestwidth > 0.9)
+return closest;
+ if (can_fail)
+return NULL;
+return closest;
+}
+
+/******************************************************************************
+ ******************************************************************************
+ **
+ ** We need to initialize global instructing context before autoinstructing
+ ** a glyph, because we want to be sure that global hinting tables (cvt, prep,
+ ** fpgm) were (or weren't) properly set up.
+ **
+ ******************************************************************************
+ ******************************************************************************/
+
+/* Helper routines: read PS private entry and return its contents.
+ */
+static int GetBlueFuzz(SplineFont *sf) {
+ char *str, *end;
+
+ if ( sf->private==NULL || (str=PSDictHasEntry(sf->private,"BlueFuzz"))==NULL || !isdigit(str[0]) )
+return 1;
+return strtod(str, &end);
+}
+
+/* Return BlueScale as PPEM at which we have to stop suppressing overshoots */
+static int GetBlueScale(SplineFont *sf) {
+ char *str, *end;
+ double bs;
+ int result;
+ if ( sf->private==NULL || (str=PSDictHasEntry(sf->private,"BlueScale"))==NULL )
+return 42;
+
+ bs = strtod(str, &end);
+ if (end==str || bs<=0.0) bs=0.039625;
+ bs*=240;
+ bs+=0.49;
+ bs*=300.0/72.0;
+
+ result = (int)rint(bs);
+ if (result>255) result = 255; /* Who would need such blue scale??? */
+
+return result;
+}
+
+static real *ParsePSArray(const char *str, int *rescnt) {
+ char *end;
+ real d, *results=NULL;
+
+ if ((rescnt == NULL) || (str == NULL))
+return NULL;
+
+ *rescnt = 0;
+
+ while (*str)
+ {
+ while (!isdigit(*str) && *str!='-' && *str!='+' && *str!='.' && *str!='\0')
+ ++str;
+
+ if ( *str=='\0' )
+ break;
+
+ d = strtod(str, &end);
+
+ if ( d>=-32768 && d<=32767 ) {
+ if (*rescnt) {
+ results = realloc(results, sizeof(real)*(++(*rescnt)));
+ results[*rescnt-1] = d;
+ }
+ else (results = calloc(*rescnt=1, sizeof(real)))[0] = d;
+ }
+
+ str = end;
+ }
+
+return results;
+}
+
+static real *GetNParsePSArray(SplineFont *sf, const char *name, int *rescnt) {
+return ParsePSArray(PSDictHasEntry(sf->private, name), rescnt);
+}
+
+/* Tell if the two segments, [b1,o1] and [b2,o2] intersect.
+ * This can be used to determine whether blues or stems overlap.
+ */
+static int SegmentsOverlap(real b1, real o1, real b2, real o2) {
+ real t;
+
+ if (b1 > o1) {
+ t = o1;
+ o1 = b1;
+ b1 = t;
+ }
+
+ if (b2 > o2) {
+ t = o2;
+ o2 = b2;
+ b2 = t;
+ }
+
+return !((b2 > o1) || (o2 < b1));
+}
+
+/* To be used with qsort() - sorts BlueZone array by base in ascending order.
+ */
+static int SortBlues(const void *a, const void *b) {
+ return ((BlueZone *)a)->base > ((BlueZone *)b)->base;
+}
+
+/* Import blue data into global instructing context. Include family blues too.
+ * We assume that blues are needed for family blues to make sense. If there are
+ * only family blues, we treat them as normal blues. Otherwise, if a family blue
+ * zone doesn't match any normal blue zone, or if they match perfectly,
+ * it is ignored.
+ */
+static void GICImportBlues(GlobalInstrCt *gic) {
+ int bluecnt = 0;
+ int i, j, cnt;
+ real *values;
+
+ int HasPSBlues =
+ (PSDictHasEntry(gic->sf->private, "BlueValues") != NULL) ||
+ (PSDictHasEntry(gic->sf->private, "OtherBlues") != NULL);
+
+ int HasPSFamilyBlues =
+ (PSDictHasEntry(gic->sf->private, "FamilyBlues") != NULL) ||
+ (PSDictHasEntry(gic->sf->private, "FamilyOtherBlues") != NULL);
+
+ const char *PrimaryBlues = HasPSBlues ? "BlueValues" : "FamilyBlues";
+ const char *OtherBlues = HasPSBlues ? "OtherBlues" : "FamilyOtherBlues";
+
+ if (HasPSBlues || HasPSFamilyBlues){
+ values = GetNParsePSArray(gic->sf, PrimaryBlues, &cnt);
+ cnt /= 2;
+ if (cnt > 7) cnt = 7;
+
+ if (values != NULL) {
+ gic->bluecnt = bluecnt = cnt;
+
+ /* First pair is a bottom zone (see Type1 specification). */
+ gic->blues[0].base = values[1];
+ gic->blues[0].overshoot = values[0];
+ gic->blues[0].family_base = strtod("NAN", NULL);
+
+ /* Next pairs are top zones (see Type1 specification). */
+ for (i=1; i<bluecnt; i++) {
+ gic->blues[i].family_base = strtod("NAN", NULL);
+ gic->blues[i].base = values[2*i];
+ gic->blues[i].overshoot = values[2*i+1];
+ }
+
+ free(values);
+ }
+
+ values = GetNParsePSArray(gic->sf, OtherBlues, &cnt);
+ cnt /= 2;
+ if (cnt > 5) cnt = 5;
+
+ if (values != NULL) {
+ gic->bluecnt += cnt;
+
+ /* All pairs are bottom zones (see Type1 specification). */
+ for (i=0; i<cnt; i++) {
+ gic->blues[i+bluecnt].family_base = strtod("NAN", NULL);
+ gic->blues[i+bluecnt].base = values[2*i+1];
+ gic->blues[i+bluecnt].overshoot = values[2*i];
+ }
+
+ free(values);
+ bluecnt += cnt;
+ }
+
+ /* Add family data to blues */
+ if (HasPSBlues && HasPSFamilyBlues) {
+ values = GetNParsePSArray(gic->sf, "FamilyBlues", &cnt);
+ cnt /= 2;
+ if (cnt > 7) cnt = 7;
+
+ if (values != NULL) {
+ /* First pair is a bottom zone (see Type1 specification). */
+ for (j=0; j<bluecnt; j++)
+ if (isfinite(gic->blues[j].family_base))
+ continue;
+ else if (values[1] != gic->blues[j].base &&
+ SegmentsOverlap(gic->blues[j].base,
+ gic->blues[j].overshoot,
+ values[0], values[1]))
+ gic->blues[j].family_base = values[1];
+
+ /* Next pairs are top zones (see Type1 specification). */
+ for (i=1; i<cnt; i++) {
+ for (j=0; j<bluecnt; j++)
+ if (isfinite(gic->blues[j].family_base))
+ continue;
+ else if (values[2*i] != gic->blues[j].base &&
+ SegmentsOverlap(gic->blues[j].base,
+ gic->blues[j].overshoot,
+ values[2*i], values[2*i+1]))
+ gic->blues[j].family_base = values[2*i];
+ }
+
+ free(values);
+ }
+
+ values = GetNParsePSArray(gic->sf, "FamilyOtherBlues", &cnt);
+ cnt /= 2;
+ if (cnt > 5) cnt = 5;
+
+ if (values != NULL) {
+ /* All pairs are bottom zones (see Type1 specification). */
+ for (i=0; i<cnt; i++) {
+ for (j=0; j<bluecnt; j++)
+ if (isfinite(gic->blues[j].family_base))
+ continue;
+ else if (values[2*i+1] != gic->blues[j].base &&
+ SegmentsOverlap(gic->blues[j].base,
+ gic->blues[j].overshoot,
+ values[2*i], values[2*i+1]))
+ gic->blues[j].family_base = values[2*i+1];
+ }
+
+ free(values);
+ }
+ }
+ }
+ else if (gic->bd->bluecnt) {
+ /* If there are no PS private entries, we have */
+ /* to use FF's quickly guessed fallback blues. */
+ gic->bluecnt = bluecnt = gic->bd->bluecnt;
+
+ for (i=0; i<bluecnt; i++) {
+ gic->blues[i].family_base = strtod("NAN", NULL);
+ gic->blues[i].family_cvtindex = -1;
+
+ if (gic->bd->blues[i][1] <= 0) {
+ gic->blues[i].base = gic->bd->blues[i][1];
+ gic->blues[i].overshoot = gic->bd->blues[i][0];
+ }
+ else {
+ gic->blues[i].base = gic->bd->blues[i][0];
+ gic->blues[i].overshoot = gic->bd->blues[i][1];
+ }
+ }
+ }
+
+ /* 'highest' and 'lowest' are not to be set yet. */
+ for (i=0; i<gic->bluecnt; i++)
+ gic->blues[i].highest = gic->blues[i].lowest = -1;
+
+ /* I assume ascending order in snap_to_blues(). */
+ qsort(gic->blues, gic->bluecnt, sizeof(BlueZone), SortBlues);
+}
+
+/* To be used with qsort() - sorts StdStem array by width in ascending order.
+ */
+static int SortStems(const void *a, const void *b) {
+ return ((StdStem *)a)->width > ((StdStem *)b)->width;
+}
+
+/* Import stem data into global instructing context. We deal only with
+ * horizontal or vertical stems (xdir decides) here. If Std*W is not specified,
+ * but there exists StemSnap*, we'll make up a fake Std*V as a fallback.
+ * Subtle manipulations with Std*W's value can result in massive change of
+ * font appearance at some pixel sizes, because it's used as a base for
+ * normalization of all other stems.
+ */
+static void GICImportStems(int xdir, GlobalInstrCt *gic) {
+ int i, cnt, next;
+ real *values;
+ const char *s_StdW = xdir?"StdVW":"StdHW";
+ const char *s_StemSnap = xdir?"StemSnapV":"StemSnapH";
+ StdStem *stdw = xdir?&(gic->stdvw):&(gic->stdhw);
+ StdStem **stemsnap = xdir?&(gic->stemsnapv):&(gic->stemsnaph);
+ int *stemsnapcnt = xdir?&(gic->stemsnapvcnt):&(gic->stemsnaphcnt);
+
+ if ((values = GetNParsePSArray(gic->sf, s_StdW, &cnt)) != NULL) {
+ stdw->width = *values;
+ free(values);
+ }
+
+ if ((values = GetNParsePSArray(gic->sf, s_StemSnap, &cnt)) != NULL) {
+ *stemsnap = (StdStem *)calloc(cnt, sizeof(StdStem));
+
+ for (next=i=0; i<cnt; i++)
+ if (values[i] != gic->stdhw.width)
+ (*stemsnap)[next++].width = values[i];
+
+ if (!next) {
+ free(*stemsnap);
+ *stemsnap = NULL;
+ }
+
+ *stemsnapcnt = next;
+ free(values);
+
+ /* I assume ascending order here and in normalize_stems(). */
+ qsort(*stemsnap, *stemsnapcnt, sizeof(StdStem), SortStems);
+ }
+
+ /* No StdW, but StemSnap exists? */
+ if (stdw->width == -1 && *stemsnap != NULL) {
+ cnt = *stemsnapcnt;
+ i = cnt/2;
+ stdw->width = (*stemsnap)[i].width;
+ memmove((*stemsnap)+i, (*stemsnap)+i+1, cnt-i-1);
+
+ if (--(*stemsnapcnt) == 0) {
+ free(*stemsnap);
+ *stemsnap = NULL;
+ }
+ }
+}
+
+/* Assign CVT indices to blues and stems in global instructing context. In case
+ * we can't implant it because of already existent cvt table, reassign the cvt
+ * indices, picking them from existing cvt table (thus a cvt value can't be
+ * considered 'horizontal' or 'vertical', and reliable stem normalization is
+ * thus impossible) and adding some for new values.
+ */
+static void init_cvt(GlobalInstrCt *gic) {
+ int i, cvtindex, cvtsize;
+ struct ttf_table *tab;
+ uint8 *cvt;
+
+ cvtsize = 1;
+ if (gic->stdhw.width != -1) cvtsize++;
+ if (gic->stdvw.width != -1) cvtsize++;
+ cvtsize += gic->stemsnaphcnt;
+ cvtsize += gic->stemsnapvcnt;
+ cvtsize += gic->bluecnt * 2; /* possible family blues */
+
+ cvt = calloc(cvtsize, cvtsize * sizeof(int16));
+ cvtindex = 0;
+
+ /* Assign cvt indices */
+ for (i=0; i<gic->bluecnt; i++) {
+ gic->blues[i].cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->blues[i].base));
+
+ if (isfinite(gic->blues[i].family_base)) {
+ gic->blues[i].family_cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->blues[i].family_base));
+ }
+ }
+
+ if (gic->stdhw.width != -1) {
+ gic->stdhw.cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->stdhw.width));
+ }
+
+ for (i=0; i<gic->stemsnaphcnt; i++) {
+ gic->stemsnaph[i].cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->stemsnaph[i].width));
+ }
+
+ if (gic->stdvw.width != -1) {
+ gic->stdvw.cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->stdvw.width));
+ }
+
+ for (i=0; i<gic->stemsnapvcnt; i++) {
+ gic->stemsnapv[i].cvtindex = cvtindex;
+ memputshort(cvt, 2*cvtindex++, rint(gic->stemsnapv[i].width));
+ }
+
+ cvtsize = cvtindex;
+ cvt = realloc(cvt, cvtsize * sizeof(int16));
+
+ /* Try to implant the new cvt table */
+ gic->cvt_done = 0;
+
+ tab = SFFindTable(gic->sf, CHR('c','v','t',' '));
+
+ if ( tab==NULL ) {
+ tab = chunkalloc(sizeof(struct ttf_table));
+ tab->next = gic->sf->ttf_tables;
+ gic->sf->ttf_tables = tab;
+ tab->tag = CHR('c','v','t',' ');
+
+ tab->len = tab->maxlen = cvtsize * sizeof(int16);
+ if (tab->maxlen >256) tab->maxlen = 256;
+ tab->data = cvt;
+
+ gic->cvt_done = 1;
+ }
+ else {
+ if (tab->len >= cvtsize * (int)sizeof(int16) &&
+ memcmp(cvt, tab->data, cvtsize * sizeof(int16)) == 0)
+ gic->cvt_done = 1;
+
+ free(cvt);
+
+ if (!gic->cvt_done) {
+ ff_post_error(_("Can't insert 'cvt'"),
+ _("There already exists a 'cvt' table, perhaps legacy. "
+ "FontForge can use it, but can't make any assumptions on "
+ "values stored there, so generated instructions will be of "
+ "lower quality. If legacy hinting is to be scrapped, it is "
+ "suggested to clear the `cvt` and repeat autoinstructing. "
+ ));
+ }
+ }
+
+ if (gic->cvt_done)
+return;
+
+ /* Fallback mode starts here. */
+
+ for (i=0; i<gic->bluecnt; i++)
+ gic->blues[i].cvtindex =
+ TTF_getcvtval(gic->sf, gic->blues[i].base);
+
+ if (gic->stdhw.width != -1)
+ gic->stdhw.cvtindex =
+ TTF_getcvtval(gic->sf, gic->stdhw.width);
+
+ for (i=0; i<gic->stemsnaphcnt; i++)
+ gic->stemsnaph[i].cvtindex =
+ TTF_getcvtval(gic->sf, gic->stemsnaph[i].width);
+
+ if (gic->stdvw.width != -1)
+ gic->stdvw.cvtindex =
+ TTF_getcvtval(gic->sf, gic->stdvw.width);
+
+ for (i=0; i<gic->stemsnapvcnt; i++)
+ gic->stemsnapv[i].cvtindex =
+ TTF_getcvtval(gic->sf, gic->stemsnapv[i].width);
+}
+
+/* We'll need at least STACK_DEPTH stack levels and a twilight point (and thus
+ * also a twilight zone). We also currently define some functions in fpgm.
+ * We must ensure this is indicated in the 'maxp' table.
+ *
+ * We also need two storage cells. As we now use SPVFS to set projection
+ * vector for diagonal hinting, we have to adjust values taken by SPVFS,
+ * so that diagonals look cleanly in all aspect ratios. Adjustments are
+ * not trivial to compute, so we do this once (in prep) and store them
+ * in storage[0] (for X direction) and storage[1] (for Y direction).
+ */
+static void init_maxp(GlobalInstrCt *gic) {
+ struct ttf_table *tab = SFFindTable(gic->sf, CHR('m','a','x','p'));
+ uint16 zones, twpts, store, fdefs, stack;
+
+ if ( tab==NULL ) {
+ tab = chunkalloc(sizeof(struct ttf_table));
+ tab->next = gic->sf->ttf_tables;
+ gic->sf->ttf_tables = tab;
+ tab->tag = CHR('m','a','x','p');
+ }
+
+ if ( tab->len<32 ) {
+ tab->data = realloc(tab->data,32);
+ memset(tab->data+tab->len,0,32-tab->len);
+ tab->len = tab->maxlen = 32;
+ }
+
+ zones = memushort(tab->data, 32, 7*sizeof(uint16));
+ twpts = memushort(tab->data, 32, 8*sizeof(uint16));
+ store = memushort(tab->data, 32, 9*sizeof(uint16));
+ fdefs = memushort(tab->data, 32, 10*sizeof(uint16));
+ stack = memushort(tab->data, 32, 12*sizeof(uint16));
+
+ if (gic->fpgm_done && zones<2) zones=2;
+ if (gic->fpgm_done && twpts<1) twpts=1;
+ if (gic->fpgm_done && gic->prep_done && store<2) store=2;
+ if (gic->fpgm_done && fdefs<22) fdefs=22;
+ if (stack<STACK_DEPTH) stack=STACK_DEPTH;
+
+ memputshort(tab->data, 7*sizeof(uint16), zones);
+ memputshort(tab->data, 8*sizeof(uint16), twpts);
+ memputshort(tab->data, 9*sizeof(uint16), store);
+ memputshort(tab->data,10*sizeof(uint16), fdefs);
+ memputshort(tab->data,12*sizeof(uint16), stack);
+}
+
+/* Other hinting software puts certain actions in FPGM to ease developer's life
+ * and compress the code. I feel that having a 'standard' library of functions
+ * could also help FF users.
+ *
+ * Caution! This code is heavily relied by autohinting. Any other code should
+ * be placed below it. It's good to first clear font's hinting tables, then
+ * autohint it, and then insert user's own code and do the manual hinting of
+ * glyphs that do need it.
+ */
+static void init_fpgm(GlobalInstrCt *gic) {
+ uint8 new_fpgm[] =
+ {
+ /* Function 0: position a point within a blue zone (given via cvt).
+ * Note: in case of successful init of 'cvt' and 'prep' this function
+ * could be much simpler.
+ * Syntax: PUSHB_3 point cvt_of_blue 0 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x2c, // FDEF
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x13, // SZP0
+ 0x4b, // MPPEM
+ 0xb0, // PUSHB_1 - under this ppem blues will be specially rounded
+ GetBlueScale(gic->sf),
+ 0x50, // LT
+ 0x58, // IF
+ 0xb0, // PUSHB_0
+ 0x4a, // 74
+ 0x76, // SROUND - round blues a bit up to grid
+ 0x59, // EIF
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x23, // SWAP
+ 0x3f, // MIAP[rnd] - blue zone positioned here
+ 0x18, // RTG - round state for overshoots in monochrome mode
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0x3d, // RTDG - round state for overshoots in antialiased mode
+ 0x59, // EIF
+ 0x4b, // MPPEM
+ 0xb0, // PUSHB_1 - under following ppem overshoots will be suppressed
+ GetBlueScale(gic->sf),
+ 0x50, // LT
+ 0x58, // IF
+ 0x7d, // RDTG - suppress overshoots
+ 0x59, // EIF
+ 0x20, // DUP
+ 0xd4, // MDRP[rp0,rnd,grey]
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x13, // SZP0
+ 0x2e, // MDAP[no-rnd]
+ 0x18, // RTG
+ 0x2d, // ENDF
+
+ /* Function 1: Place given point relatively to previous, maintaining the
+ * minimum distance. Then call FPGM 12 to check if the point's gridfitted
+ * position is too far from its original position, and correct it, if necessary.
+ * Syntax: PUSB_2 point 1 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0xda, // MDRP[rp0,min,white]
+ 0xb0, // PUSHB_1
+ 0x0c, // 12
+ 0x2b, // CALL
+ 0x2d, // ENDF
+
+ /* Function 2: Below given ppem, substitute the width with cvt entry.
+ * Leave the resulting width on the stack. Used as the first step in
+ * normalizing cvt stems, see normalize_stem().
+ * Syntax: PUSHX_3 width cvt_index ppem 2 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x02, // 2
+ 0x2c, // FDEF
+ 0x4b, // MPPEM
+ 0x52, // GT
+ 0x58, // IF
+ 0x45, // RCVT
+ 0x23, // SWAP
+ 0x59, // EIF
+ 0x21, // POP
+ 0x2d, // ENDF
+
+ /* Function 3: round a stack element as a black distance, respecting
+ * minimum distance of 1px. This is used for rounding stems after width
+ * normalization. Often preceeded with SROUND, so finally sets RTG.
+ * Leaves the rounded width on the stack.
+ * Syntax: PUSHX_2 width_to_be_rounded 3 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x03, // 3
+ 0x2c, // FDEF
+ 0x69, // ROUND[black]
+ 0x18, // RTG
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x40, // 64, that's one pixel as F26Dot6
+ 0x50, // LT
+ 0x58, // IF
+ 0x21, // POP
+ 0xb0, // PUSHB_1
+ 0x40, // 64
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 4: Position the second edge of a stem that is not normally
+ * regularized via cvt (but we snap it to cvt width below given ppem).
+ * Vertical stems need special round state when not snapped to cvt
+ * (basically, they are shortened by 0.25px before being rounded).
+ * Syntax: PUSHX_5 pt cvt_index chg_rp0 ppem 4 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x04, // 4
+ 0x2c, // FDEF
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0x21, // POP
+ 0x23, // SWAP
+ 0x21, // POP
+ 0x7a, // ROFF
+ 0x58, // IF
+ 0xdd, // MDRP[rp0,min,rnd,black]
+ 0x1b, // ELSE
+ 0xcd, // MDRP[min,rnd,black]
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x4b, // MPPEM
+ 0x52, // GT
+ 0x58, // IF
+ 0x58, // IF
+ 0xfd, // MIRP[rp0,min,rnd,black]
+ 0x1b, // ELSE
+ 0xed, // MIRP[min,rnd,black]
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x23, // SWAP
+ 0x21, // POP
+ 0xb0, // PUSHB_1
+ 0x05, // 5
+ 0x2b, // CALL
+ 0x58, // IF
+ 0xb0, // PUSHB_1
+ 0x46, // 70
+ 0x76, // SROUND
+ 0x59, // EIF
+ 0x58, // IF
+ 0xdd, // MDRP[rp0,min,rnd,black]
+ 0x1b, // ELSE
+ 0xcd, // MDRP[min,rnd,black]
+ 0x59, // EIF
+ 0x59, // EIF
+ 0x59, // EIF
+ 0x18, // RTG
+ 0x2d, // ENDF
+
+ /* Function 5: determine if we are hinting vertically. The function
+ * is crude and it's use is limited to conditions set by SVTCA[].
+ * Syntax: PUSHB_1 5 CALL; leaves boolean on the stack.
+ */
+ 0xb0, // PUSHB_1
+ 0x05, // 5
+ 0x2c, // FDEF
+ 0x0d, // GFV
+ 0x5c, // NOT
+ 0x5a, // AND
+ 0x2d, // ENDF
+
+ /* Function 6: check if we are hinting in grayscale.
+ * CAUTION! Older FreeType versions lie if asked.
+ * Syntax: PUSHB_1 6 CALL; leaves boolean on the stack.
+ */
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2c, // FDEF
+ 0xb1, // PUSHB_2
+ 0x22, // 34
+ 0x01, // 1
+ 0x88, // GETINFO
+ 0x50, // LT
+ 0x58, // IF
+ 0xb0, // PUSHB_1
+ 0x20, // 32
+ 0x88, // GETINFO
+ 0x5c, // NOT
+ 0x5c, // NOT
+ 0x1b, // ELSE
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 7: check if we are hinting in cleartype.
+ * CAUTION! FreeType doesn't support that, as subpixel
+ * filtering is usually done by higher level library.
+ * Syntax: PUSHB_1 7 CALL; leaves boolean on the stack.
+ */
+ 0xb0, // PUSHB_1
+ 0x07, // 7
+ 0x2c, // FDEF
+ 0xb1, // PUSHB_2
+ 0x24, // 36
+ 0x01, // 1
+ 0x88, // GETINFO
+ 0x50, // LT
+ 0x58, // IF
+ 0xb0, // PUSHB_1
+ 0x40, // 64
+ 0x88, // GETINFO
+ 0x5c, // NOT
+ 0x5c, // NOT
+ 0x1b, // ELSE
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 8: Interpolate a point between
+ * two other points and snap it to the grid.
+ * Syntax: PUSHX_4 pt_to_ip rp1 rp2 8 CALL;
+ */
+ 0xb0, // PUSHB_1
+ 0x08, // 8
+ 0x2c, // FDEF
+ 0x12, // SRP2
+ 0x11, // SRP1
+ 0x20, // DUP
+ 0x39, // IP
+ 0x2f, // MDAP[rnd]
+ 0x2d, // ENDF
+
+ /* Function 9: Link a serif-like element edge to the opposite
+ * edge of the base stem when rounding down to grid, but ensure
+ * that its distance from the reference point is larger than
+ * the base stem width at least to a specified amount of pixels.
+ * Syntax: PUSHX_3 min_dist inner_pt outer_pt CALL;
+ */
+ 0xb0, // PUSHB_1
+ 0x09, // 9
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0x7d, // RDTG
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0xc4, // MDRP[min,grey]
+ 0x1b, // ELSE
+ 0xcd, // MDRP[min,rnd,black]
+ 0x59, // EIF
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x03, // 3
+ 0x25, // CINDEX
+ 0x49, // MD[grid]
+ 0x23, // SWAP
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x04, // 4
+ 0x26, // MINDEX
+ 0x4a, // MD[orig]
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x50, // LT
+ 0x58, // IF
+ 0x8a, // ROLL
+ 0x65, // NEG
+ 0x8a, // ROLL
+ 0x61, // SUB
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x50, // LT
+ 0x58, // IF
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x8a, // ROLL
+ 0x8a, // ROLL
+ 0x61, // SUB
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x52, // GT
+ 0x58, // IF
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x59, // EIF
+ 0x18, // RTG
+ 0x2d, // ENDF
+
+ /* Function 10: depending from the hinting mode (grayscale or mono) set
+ * rp0 either to pt1 or to pt2. This is used to link serif-like elements
+ * either to the opposite side of the base stem or to the same side (i. e.
+ * left-to-left and right-to-right).
+ * Syntax: PUSHX_3 pt2 pt1 10 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x0a, // 10
+ 0x2c, // FDEF
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0x21, // POP
+ 0x10, // SRP0
+ 0x1b, // ELSE
+ 0x10, // SRP0
+ 0x21, // POP
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 11: similar to FPGM 1, but places a point without
+ * maintaining the minimum distance.
+ * Syntax: PUSHX_2 point 11 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x0b, // 11
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0xd2, // MDRP[rp0,white]
+ 0xb0, // PUSHB_1
+ 0x0c, // 12
+ 0x2b, // CALL
+ 0x2d, // ENDF
+
+ /* Function 12: Check if the gridfitted position of the point is too far
+ * from its original position, and shift it, if necessary. The function is
+ * used to place vertical stems, it assures almost linear advance width
+ * to PPEM scaling. Shift amount is capped to at most 1 px to prevent some
+ * weird artifacts at very small ppems. In cleartype mode, no shift
+ * is made at all.
+ * Syntax: PUSHX_2 point 12 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x0c, // 12
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0x2f, // MDAP[rnd], this is needed for grayscale mode
+ 0xb0, // PUSHB_1
+ 0x07, // 7
+ 0x2b, // CALL
+ 0x5c, // NOT
+ 0x58, // IF
+ 0x20, // DUP
+ 0x20, // DUP
+ 0x47, // GC[cur]
+ 0x23, // SWAP
+ 0x46, // GC[orig]
+ 0x61, // SUB
+ 0x6a, // ROUND[white]
+ 0x20, // DUP
+ 0x58, // IF
+ 0x20, // DUP
+ 0x64, // ABS
+ 0x62, // DIV
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 13: Interpolate a HStem edge's reference point between two other points
+ * and snap it to the grid. Then compare its new position with the ungridfitted
+ * position of the second edge. If the gridfitted point belongs to the bottom edge
+ * and now it is positioned above the top edge's original coordinate, then shift it
+ * one pixel down; similarly, if the interpolation resulted in positioning the top
+ * edge below the original coordinate of the bottom edge, shift it one pixel up.
+ * Syntax: PUSHX_6 other_edge_refpt pt_to_ip rp1 rp2 13 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x0d, // 13
+ 0x2c, // FDEF
+ 0x12, // SRP2
+ 0x11, // SRP1
+ 0x20, // DUP
+ 0x20, // DUP
+ 0x39, // IP
+ 0x2f, // MDAP[rnd]
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x47, // GC[orig]
+ 0x8a, // ROLL
+ 0x46, // GC[cur]
+ 0x61, // SUB
+ 0x23, // SWAP
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x23, // SWAP
+ 0x4A, // MD[orig]
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x50, // LT
+ 0x58, // IF
+ 0x23, // SWAP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x52, // GT
+ 0x58, // IF
+ 0xb0, // PUSHB_1
+ 0x40, // 64
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x23, // SWAP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x50, // LT
+ 0x58, // IF
+ 0xb0, // PUSHB_1
+ 0x40, // 64
+ 0x65, // NEG
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x59, // EIF
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 14: Link two points using MDRP without maintaining
+ * the minimum distance. In antialiased mode use rounding to
+ * double grid for this operation, otherwise ensure there is no
+ * distance between those two points below the given PPEM (i. e.
+ * points are aligned). The function is used for linking nested
+ * stems to each other, and guarantees their relative positioning
+ * is preserved in the gridfitted outline.
+ * Syntax: PUSHX_4 ppem ref_pt base_pt 14 CALL;
+ */
+ 0xb0, // PUSHB_1
+ 0x0e, // 14
+ 0x2c, // FDEF
+ 0xb0, // PUSHB_1
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0x3d, // RTDG
+ 0xd6, // MDRP[rp0,rnd,white]
+ 0x18, // RTG
+ 0x21, // POP
+ 0x21, // POP
+ 0x1b, // ELSE
+ 0x20, // DUP
+ 0xd6, // MDRP[rp0,rnd,white]
+ 0x8a, // ROLL
+ 0x4b, // MPPEM
+ 0x52, // GT
+ 0x58, // IF
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x23, // SWAP
+ 0x49, // MD[grid]
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x55, // NEQ
+ 0x58, // IF
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 15: similar to FPGM 1, but used to position a stem
+ * relatively to the previous stem preserving the counter width
+ * equal to the distance between another pair of previously positioned
+ * stems. Thus it serves nearly the same purpose as PS counter hints.
+ * Syntax: PUSHX_6 master_counter_start_pt master_counter_end_pt
+ * current_counter_start_pt current_counter_end_pt ppem 15 CALL;
+ */
+ 0xb0, // PUSHB_1
+ 0x0f, // 15
+ 0x2c, // FDEF
+ 0x23, // SWAP
+ 0x20, // DUP
+ 0xd6, // MDRP[rp0,rnd,white]
+ 0x20, // DUP
+ 0x2f, // MDAP[rnd], this is needed for grayscale mode
+ 0xb0, // PUSHB_1
+ 0x07, // 7
+ 0x2b, // CALL
+ 0x5c, // NOT
+ 0x58, // IF
+ 0x23, // SWAP
+ 0x20, // DUP
+ 0x58, // IF
+ 0x4b, // MPPEM
+ 0x53, // GTEQ
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x59, // EIF
+ 0x58, // IF
+ 0x8a, // ROLL
+ 0xb0, // PUSHB_1
+ 0x04, // 4
+ 0x26, // MINDEX
+ 0x49, // MD[grid]
+ 0x23, // SWAP
+ 0x8a, // ROLL
+ 0x23, // SWAP
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x49, // MD[grid]
+ 0x8a, // ROLL
+ 0x23, // SWAP
+ 0x61, // SUB
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x21, // POP
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 16: Same as FPGM 1, but calls FPGM 18 rather than FPGM 12
+ * and thus takes 3 arguments.
+ * Syntax: PUSHX_3 ref_point point 16 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x10, // 16
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0xda, // MDRP[rp0,min,white]
+ 0xb0, // PUSHB_1
+ 0x12, // 18
+ 0x2b, // CALL
+ 0x2d, // ENDF
+
+ /* Function 17: Same as FPGM 11, but calls FPGM 18 rather than FPGM 12
+ * and thus takes 3 arguments.
+ * Syntax: PUSHX_3 ref_point point 17 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x11, // 17
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0xd2, // MDRP[rp0,white]
+ 0xb0, // PUSHB_1
+ 0x12, // 18
+ 0x2b, // CALL
+ 0x2d, // ENDF
+
+ /* Function 18: this is a special version of FPGM 12, used when the counter
+ * control is enabled but doesn't directly affect the stem which is going to
+ * be positioned. Unlike FPGM 12, it doesn't just attempt to position a point
+ * closely enough to its original coordinate, but also checks if the previous
+ * stem has already been shifted relatively to its "ideal" position FPGM 12 would
+ * determine. If so, then the desired point position is corrected relatively to
+ * the current placement of the previous stem.
+ * Syntax: PUSHX_3 ref_point point 18 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x12, // 18
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0x2f, // MDAP[rnd], this is needed for grayscale mode
+ 0xb0, // PUSHB_1
+ 0x07, // 7
+ 0x2b, // CALL
+ 0x5c, // NOT
+ 0x58, // IF
+ 0x20, // DUP
+ 0x20, // DUP
+ 0x47, // GC[cur]
+ 0x23, // SWAP
+ 0x46, // GC[orig]
+ 0x61, // SUB
+ 0x6a, // ROUND[white]
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x47, // GC[cur]
+ 0x23, // SWAP
+ 0x46, // GC[orig]
+ 0x23, // SWAP
+ 0x61, // SUB
+ 0x6a, // ROUND[white]
+ 0x60, // ADD
+ 0x20, // DUP
+ 0x58, // IF
+ 0x20, // DUP
+ 0x64, // ABS
+ 0x62, // DIV
+ 0x38, // SHPIX
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 19: used to align a point relatively to a diagonal line,
+ * specified by two other points. First we check if the point going
+ * to be positioned doesn't deviate too far from the line in the original
+ * outline. If the deviation is small enough to neglect it, we use ALIGNRP
+ * to position the point, otherwise MDRP is used instead. We can't just
+ * always use MDRP, because this command may produce wrong results at
+ * small PPEMs, if the original and gridfitted coordinates of the line end
+ * points specify slightly different unit vectors.
+ * Syntax: point diag_start_point diag_end_point 19 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x13, // 19
+ 0x2c, // FDEF
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x87, // SDPVTL[orthogonal]
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x03, // 4
+ 0x25, // CINDEX
+ 0x4a, // MD[orig]
+ 0x64, // ABS
+ 0x23, // SWAP
+ 0x8a, // ROLL
+ 0x07, // SPVTL[orthogonal]
+ 0xb0, // PUSHB_1
+ 0x20, // 32
+ 0x50, // LT
+ 0x58, // IF
+ 0x3c, // ALIGNRP
+ 0x1b, // ELSE
+ 0xc0, // MDRP[grey]
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 20: compute adjustments for X and Y components of projection
+ * vector, for aspect ratios different than 1:1, and store them
+ * in storage[0] and storage[1] respectively.
+ * Syntax: 20 CALL (use it only ONCE, from PREP table).
+ */
+ 0xb0, // PUSHB_1
+ 0x14, // 20
+ 0x2c, // FDEF
+ 0xb3, // PUSHB_4 (we normally need no adjustments)
+ 0x00, // 0
+ 0x40, // 1.0 (F26Dot6)
+ 0x01, // 1
+ 0x40, // 1.0 (F26Dot6)
+ 0x42, // WS
+ 0x42, // WS
+ 0x01, // SVTCA[x-axis]
+ 0x4b, // MPPEM
+ 0xb8, // PUSHW_1
+ 0x10, // 4096
+ 0x00, // ...still that 4096
+ 0x63, // MUL (so we have PPEM along X casted to F26Dot6)
+ 0x00, // SVTCA[y-axis]
+ 0x4b, // MPPEM
+ 0xb8, // PUSHW_1
+ 0x10, // 4096
+ 0x00, // ...still that 4096
+ 0x63, // MUL (so we have PPEM along Y casted to F26Dot6)
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x55, // NEQ
+ 0x58, // IF (if PPEM along X != PPEM along Y)
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x20, // DUP
+ 0x8a, // ROLL
+ 0x52, // GT
+ 0x58, // IF (if PPEM along X < PPEM along Y)
+ 0x23, // SWAP
+ 0x62, // DIV
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x23, // SWAP
+ 0x42, // WS
+ 0x1b, // ELSE (if PPEM along X > PPEM along Y)
+ 0x62, // DIV
+ 0x20, // DUP
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x23, // SWAP
+ 0x42, // WS
+ 0x59, // EIF
+ 0x20, // DUP [A LOOP STARTS HERE]
+ 0xb0, // PUSHB_1
+ 0x40, // 1.0 (F26Dot6)
+ 0x52, // GT
+ 0x58, // IF (bigger adjustment is greater than 1.0 => needs fixing)
+ 0xb2, // PUSHB_3
+ 0x00, // 0
+ 0x20, // 0.5 (F26Dot6)
+ 0x00, // 0
+ 0x43, // RS
+ 0x63, // MUL
+ 0x42, // WS (we halved adjustment for X)
+ 0xb2, // PUSHB_3
+ 0x01, // 1
+ 0x20, // 0.5 (F26Dot6)
+ 0x01, // 1
+ 0x43, // RS
+ 0x63, // MUL
+ 0x42, // WS (we halved adjustment for Y)
+ 0xb0, // PUSHB_1
+ 0x20, // 0.5 (F26Dot6)
+ 0x63, // MUL (we halved the bigger adjustment)
+ 0xb0, // PUSHB_1
+ 0x19, // 25
+ 0x65, // NEG
+ 0x1c, // JMPR (go back to the start of the loop)
+ 0x21, // POP
+ 0x59, // EIF
+ 0x1b, // ELSE (if PPEM along X == PPEM along Y)
+ 0x21, // POP
+ 0x21, // POP
+ 0x59, // EIF
+ 0x2d, // ENDF
+
+ /* Function 21: call it before SFVFS or SPVFS, so that the vector
+ * passed is aspect-ratio corrected.
+ * Syntax: x y 21 CALL
+ */
+ 0xb0, // PUSHB_1
+ 0x15, // 21
+ 0x2c, // FDEF
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x43, // RS
+ 0x63, // MUL
+ 0x23, // SWAP
+ 0xb0, // PUSHB_1
+ 0x00, // 0
+ 0x43, // RS
+ 0x63, // MUL
+ 0x23, // SWAP
+ 0x2d // ENDF
+ };
+
+ struct ttf_table *tab = SFFindTable(gic->sf, CHR('f','p','g','m'));
+
+ if ( tab==NULL ) {
+ /* We have to create such table. */
+ tab = chunkalloc(sizeof(struct ttf_table));
+ tab->next = gic->sf->ttf_tables;
+ gic->sf->ttf_tables = tab;
+ tab->tag = CHR('f','p','g','m');
+ tab->len = 0;
+ }
+
+ if (tab->len==0 ||
+ (tab->len < (int)sizeof(new_fpgm) &&
+ !memcmp(tab->data, new_fpgm, tab->len)))
+ {
+ /* We can safely update font program. */
+ tab->len = tab->maxlen = sizeof(new_fpgm);
+ tab->data = realloc(tab->data, sizeof(new_fpgm));
+ memmove(tab->data, new_fpgm, sizeof(new_fpgm));
+ gic->fpgm_done = 1;
+ }
+ else {
+ /* there already is a font program. */
+ gic->fpgm_done = 0;
+ if (tab->len >= (int)sizeof(new_fpgm))
+ if (!memcmp(tab->data, new_fpgm, sizeof(new_fpgm)))
+ gic->fpgm_done = 1; /* it's ours. */
+
+ /* Log warning message. */
+ if (!gic->fpgm_done)
+ ff_post_error(_("Can't insert 'fpgm'"),
+ _("There exists a 'fpgm' code that seems incompatible with "
+ "FontForge's. Instructions generated will be of lower "
+ "quality. If legacy hinting is to be scrapped, it is "
+ "suggested to clear the `fpgm` and repeat autoinstructing. "
+ "It will be then possible to append user's code to "
+ "FontForge's 'fpgm', but due to possible future updates, "
+ "it is extremely advised to use high numbers for user's "
+ "functions."
+ ));
+ }
+}
+
+/* When initializing global instructing context, we want to set up the 'prep'
+ * table in order to apply family blues and normalize stem widths for monochrome
+ * display.
+ *
+ * The stem normalizer is heavily based on simple concept from FreeType2.
+ *
+ * First round the StdW. Then for each StemSnap (going outwards from StdW) check
+ * if it's within 1px from its already rounded neighbor, and if so, snap it
+ * before rounding. From all vertical stems (but not StdHW itself), 0.25px is
+ * subtracted before rounding. Similar method is used for non-cvt stems, they're
+ * snapped to the closest standard width if possible.
+ *
+ * NOTE: because of tiny scaling issues, we have to compute ppem at which each
+ * stem stops being snapped to its already-rounded neighbor here instead of
+ * relegating this to the truetype bytecide interpreter. We can't simply rely
+ * on cvt cut-in.
+ */
+
+static int compute_blue_height(real val, int EM, int bluescale, int ppem) {
+ int scaled_val = rint((rint(fabs(val)) * ppem * 64)/EM);
+ if (ppem < bluescale) scaled_val += 16;
+return (scaled_val + 32) / 64 * (val / fabs(val));
+}
+
+static uint8 *use_family_blues(uint8 *prep_head, GlobalInstrCt *gic) {
+ int i, h1, h2, stopat;
+ int bs = GetBlueScale(gic->sf);
+ int EM = gic->sf->ascent + gic->sf->descent;
+ int callargs[3];
+
+ for (i=0; i<gic->bluecnt; i++) {
+ if (isfinite(gic->blues[i].family_base))
+ {
+ for (stopat=0; stopat<32768; stopat++) {
+ h1 = compute_blue_height(gic->blues[i].base, EM, bs, stopat);
+ h2 = compute_blue_height(gic->blues[i].family_base, EM, bs, stopat);
+ if (abs(h1 - h2) > 1) break;
+ }
+
+ callargs[0] = gic->blues[i].family_cvtindex;
+ callargs[1] = stopat;
+ callargs[2] = 2;
+
+ prep_head = pushnum(prep_head, gic->blues[i].cvtindex);
+ *prep_head++ = DUP;
+ *prep_head++ = 0x45; //RCVT
+ prep_head = pushnums(prep_head, 3, callargs);
+ *prep_head++ = CALL;
+ *prep_head++ = 0x44; //WCVTP
+ }
+ }
+
+ return prep_head;
+}
+
+/* Return width (in pixels) of given stem, taking snaps into account.
+ */
+#define SNAP_THRESHOLD (64)
+static int compute_stem_width(int xdir, StdStem *stem, int EM, int ppem) {
+ int scaled_width; /* in 1/64th pixels */
+ int snapto_width; /* in 1/64th pixels */
+
+ scaled_width = (int)rint((rint(fabs(stem->width)) * ppem * 64.0)/EM);
+ if (scaled_width < 64) scaled_width = 64;
+
+ if (stem->snapto != NULL)
+ {
+ if (stem->stopat > ppem) {
+ snapto_width = 64*compute_stem_width(xdir, stem->snapto, EM, ppem);
+
+ if (abs(snapto_width - scaled_width) < SNAP_THRESHOLD)
+ scaled_width = snapto_width;
+ }
+
+ if (xdir) scaled_width -= 16;
+ }
+
+return (scaled_width + 32) / 64;
+}
+
+/* Normalize a single stem. The code generated assumes there is a scaled stem
+ * width on bytecode interpreter's stack, and leaves normalized width there.
+ */
+static uint8 *normalize_stem(uint8 *prep_head, int xdir, StdStem *stem, GlobalInstrCt *gic) {
+ int callargs[3];
+ int i;
+
+ stem->stopat = 32767;
+
+ if (stem->snapto != NULL)
+ {
+ /* compute ppem at which to stop snapping stem to stem->snapto */
+ int EM = gic->sf->ascent + gic->sf->descent;
+
+ for (i=7; i<32768; i++) {
+ int width_parent = compute_stem_width(xdir, stem->snapto, EM, i);
+ int width_me = compute_stem_width(xdir, stem, EM, i);
+
+ if (width_parent != width_me) {
+ stem->stopat = i;
+ break;
+ }
+ }
+
+ /* snap if below given ppem */
+ callargs[0] = stem->snapto->cvtindex;
+ callargs[1] = stem->stopat;
+ callargs[2] = 2;
+ prep_head = pushnums(prep_head, 3, callargs);
+ *prep_head++ = CALL;
+
+ /* Round[black], respecting minimum distance of 1 px */
+ /* Vertical stems (but not StdVW) use special rounding threshold. */
+ /* The rounding function restores default round state at the end. */
+ if (xdir) {
+ prep_head = push2nums(prep_head, 3, 70);
+ *prep_head++ = SROUND;
+ }
+ else prep_head = pushnum(prep_head, 3);
+
+ *prep_head++ = CALL;
+ }
+ else {
+ /* simply round[black] respecting minimum distance of 1 px */
+ prep_head = pushnum(prep_head, 3);
+ *prep_head++ = CALL;
+ }
+
+return prep_head;
+}
+
+/* Append the code for normalizing standard stems' widths to 'prep'.
+ */
+static uint8 *normalize_stems(uint8 *prep_head, int xdir, GlobalInstrCt *gic) {
+ int i, t;
+ StdStem *mainstem = xdir?&(gic->stdvw):&(gic->stdhw);
+ StdStem *otherstems = xdir?gic->stemsnapv:gic->stemsnaph;
+ int otherstemcnt = xdir?gic->stemsnapvcnt:gic->stemsnaphcnt;
+
+ if (mainstem->width == -1)
+return prep_head;
+
+ /* set up the standard width */
+ mainstem->snapto = NULL;
+ *prep_head++ = xdir?SVTCA_x:SVTCA_y;
+ prep_head = pushnum(prep_head, mainstem->cvtindex);
+ *prep_head++ = DUP;
+ *prep_head++ = 0x45; //RCVT
+ prep_head = normalize_stem(prep_head, xdir, mainstem, gic);
+ *prep_head++ = 0x44; //WCVTP
+
+ /* set up other standard widths */
+ for (i=0; i<otherstemcnt && otherstems[i].width < mainstem->width; i++);
+ t = i-1;
+
+ for (i=t; i>=0; i--) {
+ otherstems[i].snapto = i==t?mainstem:otherstems+i+1;
+ prep_head = pushnum(prep_head, otherstems[i].cvtindex);
+ *prep_head++ = DUP;
+ *prep_head++ = 0x45; //RCVT
+ prep_head = normalize_stem(prep_head, xdir, otherstems+i, gic);
+ *prep_head++ = 0x44; //WCVTP
+ }
+
+ for (i=t+1; i<otherstemcnt; i++) {
+ otherstems[i].snapto = i==t+1?mainstem:otherstems+i-1;
+ prep_head = pushnum(prep_head, otherstems[i].cvtindex);
+ *prep_head++ = DUP;
+ *prep_head++ = 0x45; //RCVT
+ prep_head = normalize_stem(prep_head, xdir, otherstems+i, gic);
+ *prep_head++ = 0x44; //WCVTP
+ }
+
+return prep_head;
+}
+
+/* Turning dropout control on will dramatically improve mono rendering, even
+ * without further hinting, especcialy for light typefaces. And turning hinting
+ * off at veeery small pixel sizes is required, because hints tend to visually
+ * tear outlines apart when not having enough workspace.
+ *
+ * We also normalize stem widths here, this usually massively improves overall
+ * consistency. We currently do this only for monochrome rendering (this
+ * includes WinXP's cleartype).
+ *
+ * TODO! We should take 'gasp' table into account and set up blues here.
+ */
+static void init_prep(GlobalInstrCt *gic) {
+ uint8 new_prep_preamble[] =
+ {
+ /* Enable dropout control. FreeType 2.3.7 need explicit SCANTYPE. */
+ 0xb8, // PUSHW_1
+ 0x01, // 511
+ 0xff, // ...still that 511
+ 0x85, // SCANCTRL
+ 0xb0, // PUSHB_1
+ 0x01, // 1
+ 0x8d, // SCANTYPE
+
+ /* Measurements are taken along Y axis */
+ 0x00, // SVTCA[y-axis]
+
+ /* Turn hinting off at very small pixel sizes */
+ 0x4b, // MPPEM
+ 0xb0, // PUSHB_1
+ 0x08, // 8 - hinting threshold - should be configurable
+ 0x50, // LT
+ 0x58, // IF
+ 0xb1, // PUSHB_2
+ 0x01, // 1
+ 0x01, // 1
+ 0x8e, // INSTCTRL
+ 0x59, // EIF
+
+ /* Determine the cvt cut-in used */
+ 0xb1, // PUSHB_2
+ 0x46, // 70/64 = about 1.094 pixel (that's our default setting)
+ 0x06, // 6
+ 0x2b, // CALL
+ 0x58, // IF
+ 0x21, // POP
+ 0xb0, // PUSHB_1
+ 0x10, // 16/64 = 0.25 pixel (very low cut-in for grayscale mode)
+ 0x59, // EIF
+ 0x4b, // MPPEM
+ 0xb0, // PUSHB_1
+ 0x14, // 20 PPEM - a threshold below which we'll use larger CVT cut-in
+ 0x52, // GT
+ 0x58, // IF
+ 0x21, // POP
+ 0xb0, // PUSHB_1
+ 0x80, // 128/64 = 2 pixels (extreme regularization for small ppems)
+ 0x59, // EIF
+ 0x1d // SCVTCI
+ };
+
+ int preplen = sizeof(new_prep_preamble);
+ int prepmaxlen = preplen;
+ uint8 *new_prep, *prep_head;
+ struct ttf_table *tab;
+
+ if (gic->cvt_done) {
+ prepmaxlen += 48 + 38*(gic->stemsnaphcnt + gic->stemsnapvcnt);
+ prepmaxlen += 14*(gic->bluecnt);
+ }
+
+ if (gic->fpgm_done)
+ prepmaxlen += 3;
+
+ new_prep = calloc(prepmaxlen, sizeof(uint8));
+ memmove(new_prep, new_prep_preamble, preplen*sizeof(uint8));
+ prep_head = new_prep + preplen;
+
+ if (gic->cvt_done && gic->fpgm_done) {
+ /* Apply family blues. */
+ prep_head = use_family_blues(prep_head, gic);
+
+ /* Normalize stems (only in monochrome mode) */
+ prep_head = pushnum(prep_head, 6);
+ *prep_head++ = CALL;
+ *prep_head++ = 0x5c; // NOT
+ *prep_head++ = 0x58; // IF
+ prep_head = normalize_stems(prep_head, 0, gic);
+ prep_head = normalize_stems(prep_head, 1, gic);
+ *prep_head++ = 0x59; // EIF
+ }
+
+ /* compute adjustments for projection vector */
+ if (gic->fpgm_done) {
+ prep_head = pushnum(prep_head, 20);
+ *prep_head++ = CALL;
+ }
+
+ preplen = prep_head - new_prep;
+
+ tab = SFFindTable(gic->sf, CHR('p','r','e','p'));
+
+ if ( tab==NULL ) {
+ /* We have to create such table. */
+ tab = chunkalloc(sizeof(struct ttf_table));
+ tab->next = gic->sf->ttf_tables;
+ gic->sf->ttf_tables = tab;
+ tab->tag = CHR('p','r','e','p');
+ tab->len = 0;
+ }
+
+ if (tab->len==0 ||
+ (tab->len < preplen && !memcmp(tab->data, new_prep, tab->len)))
+ {
+ /* We can safely update cvt program. */
+ tab->len = tab->maxlen = preplen;
+ tab->data = realloc(tab->data, preplen);
+ memmove(tab->data, new_prep, preplen);
+ gic->prep_done = 1;
+ }
+ else {
+ /* there already is a font program. */
+ gic->prep_done = 0;
+ if (tab->len >= preplen)
+ if (!memcmp(tab->data, new_prep, preplen))
+ gic->prep_done = 1; /* it's ours */
+
+ /* Log warning message. */
+ if (!gic->prep_done)
+ ff_post_error(_("Can't insert 'prep'"),
+ _("There exists a 'prep' code incompatible with FontForge's. "
+ "It can't be guaranteed it will work well. It is suggested "
+ "to allow FontForge to insert its code and then append user"
+ "'s own."
+ ));
+ }
+
+ free(new_prep);
+}
+
+/*
+ * Initialize Global Instructing Context
+ */
+#define EDGE_FUZZ (500.0)
+void InitGlobalInstrCt(GlobalInstrCt *gic, SplineFont *sf, int layer,
+ BlueData *bd) {
+ BlueData _bd;
+
+ if (bd == NULL) {
+ QuickBlues(sf,layer,&_bd);
+ bd = &_bd;
+ }
+
+ gic->sf = sf;
+ gic->bd = bd;
+ gic->layer = layer;
+ gic->fudge = (sf->ascent+sf->descent)/EDGE_FUZZ;
+
+ gic->cvt_done = false;
+ gic->fpgm_done = false;
+ gic->prep_done = false;
+
+ gic->bluecnt = 0;
+ gic->stdhw.width = -1;
+ gic->stemsnaph = NULL;
+ gic->stemsnaphcnt = 0;
+ gic->stdvw.width = -1;
+ gic->stemsnapv = NULL;
+ gic->stemsnapvcnt = 0;
+
+ GICImportBlues(gic);
+ GICImportStems(0, gic); /* horizontal stems */
+ GICImportStems(1, gic); /* vertical stems */
+
+ init_cvt(gic);
+ init_fpgm(gic);
+ init_prep(gic);
+ init_maxp(gic);
+}
+
+/*
+ * Finalize Global Instructing Context
+ */
+void FreeGlobalInstrCt(GlobalInstrCt *gic) {
+ gic->sf = NULL;
+ gic->bd = NULL;
+ gic->fudge = 0;
+
+ gic->cvt_done = false;
+ gic->fpgm_done = false;
+ gic->prep_done = false;
+
+ gic->bluecnt = 0;
+ gic->stdhw.width = -1;
+ if (gic->stemsnaphcnt != 0) free(gic->stemsnaph);
+ gic->stemsnaphcnt = 0;
+ gic->stemsnaph = NULL;
+ gic->stdvw.width = -1;
+ if (gic->stemsnapvcnt != 0) free(gic->stemsnapv);
+ gic->stemsnapvcnt = 0;
+ gic->stemsnapv = NULL;
+}
+
+/******************************************************************************
+ ******************************************************************************
+ **
+ ** Stuff for managing global instructing context ends here. Now we'll deal
+ ** with single glyphs.
+ **
+ ** Many functions here need large or similar sets of arguments. I decided to
+ ** define an '(local) instructing context' to have them in one place and keep
+ ** functions' argument lists reasonably short. I first need to define some
+ ** internal sub-structures for instructing diagonal stems. Similar structures
+ ** for CVT management (based on PS Private) are defined in splinefont.h, and
+ ** were initialized handled above.
+ **
+ ******************************************************************************
+ ******************************************************************************/
+
+/* A line, described by two points */
+typedef struct pointvector {
+ PointData *pd1, *pd2;
+ int done;
+} PointVector;
+
+/* In this structure we store information about diagonales,
+ relatively to which the given point should be positioned */
+typedef struct diagpointinfo {
+ struct pointvector line[2];
+ int count;
+} DiagPointInfo;
+
+typedef struct instrct {
+ /* Things that are global for font and should be
+ initialized before instructing particular glyph. */
+ GlobalInstrCt *gic;
+
+ /* Here things for this particular glyph start. */
+ SplineChar *sc;
+ SplineSet *ss;
+
+ /* instructions */
+ uint8 *instrs; /* the beginning of the instructions */
+ uint8 *pt; /* the current position in the instructions */
+
+ /* properties indexed by contour number */
+ int *contourends; /* points ending their contours. Null-terminated. */
+ uint8 *clockwise; /* is given contour clockwise? */
+
+ /* properties, indexed by ttf point index. Some could be compressed. */
+ int ptcnt; /* number of points in this glyph */
+ BasePoint *bp; /* point coordinates */
+ uint8 *touched; /* touchflags; points explicitly instructed */
+ uint8 *affected; /* touchflags; almost touched, but optimized out */
+
+ /* data from stem detector */
+ GlyphData *gd;
+
+ /* stuff for hinting diagonals */
+ int diagcnt;
+ StemData **diagstems;
+ DiagPointInfo *diagpts; /* indexed by ttf point index */
+
+ /* stuff for hinting edges (stems, blues, strong point interpolation). */
+ int xdir; /* direction flag: x=true, y=false */
+ int cdir; /* is current contour outer? - blues need this */
+ struct __edge {
+ real base; /* where the edge is */
+ int refpt; /* best ref. point for an edge, ttf index, -1 if none */
+ int refscore; /* its quality, for searching better one; 0 if none */
+ int othercnt; /* count of other points to instruct for this edge */
+ int *others; /* their ttf indices, optimize_edge() is advised */
+ } edge;
+
+ /* Some variables for tracking graphics state */
+ int rp0;
+} InstrCt;
+
+/******************************************************************************
+ *
+ * Low-level routines for manipulting and classifying splinepoints
+ *
+ ******************************************************************************/
+
+/* Find previous point index on the contour. */
+static int PrevOnContour(int *contourends, int p) {
+ int i;
+
+ if (p == 0) return contourends[0];
+ else {
+ for (i=0; contourends[i+1]; i++)
+ if (contourends[i]+1 == p)
+ return contourends[i+1];
+
+ return p-1;
+ }
+}
+
+/* Find next point index on the contour. */
+static int NextOnContour(int *contourends, int p) {
+ int i;
+
+ if (p == 0) return 1;
+ else {
+ for (i=0; contourends[i]; i++) {
+ if (contourends[i] == p) {
+ if (i==0) return 0;
+ else return contourends[i-1]+1;
+ }
+ }
+ return p+1;
+ }
+}
+
+/* For hinting stems, I found it needed to check if candidate point for
+ * instructing is pararell to hint's direction to avoid snapping wrong points.
+ * I splitted the routine into two, as sometimes it may be needed to check
+ * the angle to be strictly almost the same, not just pararell.
+ */
+static int __same_angle(int *contourends, BasePoint *bp, int p, double angle) {
+ int PrevPoint, NextPoint;
+ double PrevTangent, NextTangent;
+
+ PrevPoint = PrevOnContour(contourends, p);
+ NextPoint = NextOnContour(contourends, p);
+ PrevTangent = atan2(bp[p].y - bp[PrevPoint].y, bp[p].x - bp[PrevPoint].x);
+ NextTangent = atan2(bp[NextPoint].y - bp[p].y, bp[NextPoint].x - bp[p].x);
+
+ /* If at least one of the tangents is close to the given angle, return */
+ /* true. 'Close' means about 5 deg, i.e. about 0.087 rad. */
+ PrevTangent = fabs(PrevTangent-angle);
+ NextTangent = fabs(NextTangent-angle);
+ while (PrevTangent > M_PI) PrevTangent -= 2*M_PI;
+ while (NextTangent > M_PI) NextTangent -= 2*M_PI;
+return (fabs(PrevTangent) <= 0.087) || (fabs(NextTangent) <= 0.087);
+}
+
+static int same_angle(int *contourends, BasePoint *bp, int p, double angle) {
+return __same_angle(contourends, bp, p, angle) || __same_angle(contourends, bp, p, angle+M_PI);
+}
+
+/* I found it needed to write some simple functions to classify points snapped
+ * to hint's edges. Classification helps to establish the most accurate leading
+ * point for an edge.
+ */
+static int _IsExtremum(int xdir, SplinePoint *sp) {
+return xdir?
+ (!sp->nonextcp && !sp->noprevcp && sp->nextcp.x==sp->me.x && sp->prevcp.x==sp->me.x):
+ (!sp->nonextcp && !sp->noprevcp && sp->nextcp.y==sp->me.y && sp->prevcp.y==sp->me.y);
+}
+
+static int IsExtremum(int xdir, int p, SplinePoint *sp) {
+ int ret = _IsExtremum(xdir, sp);
+
+ if ((sp->nextcpindex == p) && (sp->next != NULL) && (sp->next->to != NULL))
+ ret = ret || _IsExtremum(xdir, sp->next->to);
+ else if ((sp->ttfindex != p) && (sp->prev != NULL) && (sp->prev->from != NULL))
+ ret = ret || _IsExtremum(xdir, sp->prev->from);
+
+return ret;
+}
+
+static int IsCornerExtremum(int xdir, int *contourends, BasePoint *bp, int p) {
+ int PrevPoint = PrevOnContour(contourends, p);
+ int NextPoint = NextOnContour(contourends, p);
+
+return xdir?
+ ((bp[PrevPoint].x > bp[p].x && bp[NextPoint].x > bp[p].x) ||
+ (bp[PrevPoint].x < bp[p].x && bp[NextPoint].x < bp[p].x)):
+ ((bp[PrevPoint].y > bp[p].y && bp[NextPoint].y > bp[p].y) ||
+ (bp[PrevPoint].y < bp[p].y && bp[NextPoint].y < bp[p].y));
+}
+
+static int IsAnglePoint(int *contourends, BasePoint *bp, SplinePoint *sp) {
+ int PrevPoint, NextPoint, p=sp->ttfindex;
+ double PrevTangent, NextTangent;
+
+ if ((sp->pointtype != pt_corner) || (p == 0xffff))
+return 0;
+
+ PrevPoint = PrevOnContour(contourends, p);
+ NextPoint = NextOnContour(contourends, p);
+ PrevTangent = atan2(bp[p].y - bp[PrevPoint].y, bp[p].x - bp[PrevPoint].x);
+ NextTangent = atan2(bp[NextPoint].y - bp[p].y, bp[NextPoint].x - bp[p].x);
+
+return fabs(PrevTangent - NextTangent) > 0.261;
+}
+
+static int IsInflectionPoint(int *contourends, BasePoint *bp, SplinePoint *sp) {
+ double CURVATURE_THRESHOLD = 1e-9;
+ struct spline *prev, *next;
+ double in, out;
+
+ if (IsAnglePoint(contourends, bp, sp))
+return 0;
+
+ /* point of a single-point contour can't be an inflection point. */
+ if (sp->prev != NULL && sp->prev->from != NULL && sp->prev->from == sp)
+return 0;
+
+ prev = sp->prev;
+ in = 0;
+ while (prev != NULL && fabs(in) < CURVATURE_THRESHOLD) {
+ in = SplineCurvature(prev, 1);
+ if (fabs(in) < CURVATURE_THRESHOLD) in = SplineCurvature(prev, 0);
+ if (fabs(in) < CURVATURE_THRESHOLD) prev = prev->from->prev;
+ if ((prev != NULL && IsAnglePoint(contourends, bp, prev->to)) || (prev == sp->prev))
+ break;
+ }
+
+ next = sp->next;
+ out = 0;
+ while (next != NULL && fabs(out) < CURVATURE_THRESHOLD) {
+ out = SplineCurvature(next, 0);
+ if (fabs(out) < CURVATURE_THRESHOLD) out = SplineCurvature(next, 1);
+ if (fabs(out) < CURVATURE_THRESHOLD) next = next->to->next;
+ if ((next != NULL && IsAnglePoint(contourends, bp, next->from)) || (next == sp->next))
+ break;
+ }
+
+ if (in==0 || out==0 || (prev != sp->prev && next != sp->next))
+return 0;
+
+ in/=fabs(in);
+ out/=fabs(out);
+
+return (in*out < 0);
+}
+
+/******************************************************************************
+ *
+ * I found it easier to write an iterator that calls given function for each
+ * point worth instructing than repeating the same loops all the time.
+ *
+ * The control points are not skipped, but runmes often eliminate them as
+ * instructing them seems to cause more damages than profits. They are included
+ * here because edge optimizer cam be simpler and work more reliably then.
+ *
+ * The contour_direction option is for blues - snapping internal contour to a
+ * blue zone is plain wrong, unless there is a stem hint tat don't fit to any
+ * other blue zone.
+ *
+ ******************************************************************************/
+#define EXTERNAL_CONTOURS 0
+#define ALL_CONTOURS 1
+#define INTERNAL_CONTOURS 2
+static void RunOnPoints(InstrCt *ct, int contour_direction,
+ void (*runme)(int p, SplinePoint *sp, InstrCt *ct))
+{
+ SplineSet *ss = ct->ss;
+ SplinePoint *sp;
+ uint8 *done;
+ int c, p;
+
+ done = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+
+ for ( c=0; ss!=NULL; ss=ss->next, ++c ) {
+ ct->cdir = ct->clockwise[c];
+
+ if (((contour_direction == EXTERNAL_CONTOURS) && !ct->cdir) ||
+ ((contour_direction == INTERNAL_CONTOURS) && ct->cdir)) continue;
+
+ for ( sp=ss->first; ; ) {
+ if (sp->ttfindex != 0xffff) {
+ if (!sp->noprevcp &&
+ !done[p = PrevOnContour(ct->contourends, sp->ttfindex)])
+ {
+ runme(p, sp, ct);
+ done[p] = true;
+ }
+
+ if (!done[p = sp->ttfindex]) {
+ runme(p, sp, ct);
+ done[p] = true;
+ }
+
+ if (!sp->nonextcp && !done[p = sp->nextcpindex])
+ {
+ runme(p, sp, ct);
+ done[p] = true;
+ }
+ }
+ else if (!sp->nonextcp) {
+ if (!done[p = PrevOnContour(ct->contourends, sp->nextcpindex)]) {
+ runme(p, sp, ct);
+ done[p] = true;
+ }
+
+ if (!done[p = sp->nextcpindex]) {
+ runme(p, sp, ct);
+ done[p] = true;
+ }
+ }
+
+ if ( sp->next==NULL ) break;
+ sp = sp->next->to;
+ if ( sp==ss->first ) break;
+ }
+ }
+
+ free(done);
+}
+
+/******************************************************************************
+ *
+ * Hinting is mostly aligning 'edges' (in FreeType's sense). Each stem hint
+ * consists of two edges (or one, for ghost hints). And each blue zone can be
+ * represented as an edge with extended fudge (overshoot).
+ *
+ * Hinting a stem edge is broken in two steps. First: init_stem_edge() seeks for
+ * points to snap and chooses one that will be used as a reference point - it
+ * should be then instructed elsewhere (a general method of edge positioning).
+ * Old init_edge() is still used instead for blue zones and strong points.
+ * Finally, finish_edge() instructs the rest of points found with given command,
+ * using instructpoints(). It normally optimizes an edge before instructing,
+ * but not in presence of diagonal hints.
+ *
+ * The contour_direction option of init_edge() is for hinting blues - snapping
+ * internal contour to a bluezone seems just plainly wrong.
+ *
+ ******************************************************************************/
+
+/* The following operations have been separated from search_edge(), */
+/* because sometimes it is important to be able to determine, if the */
+/* given point is about to be gridfitted or interpolated */
+static int value_point(InstrCt *ct, int p, SplinePoint *sp, real fudge) {
+ int score = 0;
+ int EM = ct->gic->sf->ascent + ct->gic->sf->descent;
+ uint8 touchflag = ct->xdir?tf_x:tf_y;
+
+ if (IsCornerExtremum(ct->xdir, ct->contourends, ct->bp, p) ||
+ IsExtremum(ct->xdir, p, sp))
+ score+=4;
+
+ if (same_angle(ct->contourends, ct->bp, p, ct->xdir?0.5*M_PI:0.0))
+ score++;
+
+ if (p == sp->ttfindex && IsAnglePoint(ct->contourends, ct->bp, sp))
+ score++;
+
+ if (interpolate_more_strong && (fudge > (EM/EDGE_FUZZ+0.0001)))
+ if (IsExtremum(!ct->xdir, p, sp))
+ score++;
+
+ if (IsInflectionPoint(ct->contourends, ct->bp, sp))
+ score++;
+
+ if (score && ct->gd->points[p].sp != NULL) /* oncurve */
+ score+=2;
+
+ if (!score)
+return( 0 );
+
+ if (ct->diagstems != NULL && ct->diagpts[p].count) score+=9;
+ if (ct->touched[p] & touchflag) score+=26;
+return( score );
+}
+
+/* search for points to be snapped to an edge - to be used in RunOnPoints() */
+static void search_edge(int p, SplinePoint *sp, InstrCt *ct) {
+ int tmp, score;
+ real fudge = ct->gic->fudge;
+ uint8 touchflag = ct->xdir?tf_x:tf_y;
+ real refcoord, coord = ct->xdir?ct->bp[p].x:ct->bp[p].y;
+
+ if (fabs(coord - ct->edge.base) <= fudge)
+ {
+ score = value_point(ct, p, sp, ct->gic->fudge);
+ if (!score)
+ return;
+ else if (ct->edge.refpt == -1) {
+ ct->edge.refpt = p;
+ ct->edge.refscore = score;
+ return;
+ }
+
+ refcoord = ct->xdir?ct->bp[ct->edge.refpt].x:ct->bp[ct->edge.refpt].y;
+
+ if ((score > ct->edge.refscore) ||
+ (score == ct->edge.refscore &&
+ fabs(coord - ct->edge.base) < fabs(refcoord - ct->edge.base)))
+ {
+ tmp = ct->edge.refpt;
+ ct->edge.refpt = p;
+ ct->edge.refscore = score;
+ p = tmp;
+ }
+
+ if ((p!=-1) && !((ct->touched[p] | ct->affected[p]) & touchflag)) {
+ ct->edge.othercnt++;
+
+ if (ct->edge.othercnt==1) ct->edge.others=(int *)calloc(1, sizeof(int));
+ else ct->edge.others=(int *)realloc(ct->edge.others, ct->edge.othercnt*sizeof(int));
+
+ ct->edge.others[ct->edge.othercnt-1] = p;
+ }
+ }
+}
+
+static int StemPreferredForPoint(PointData *pd, StemData *stem,int is_next ) {
+ StemData **stems;
+ BasePoint bp;
+ real off, bestoff;
+ int i, is_l, best=0, *stemcnt;
+
+ stems = ( is_next ) ? pd->nextstems : pd->prevstems;
+ stemcnt = ( is_next) ? &pd->nextcnt : &pd->prevcnt;
+
+ bestoff = 1e4;
+ for ( i=0; i<*stemcnt; i++ ) {
+ /* Ghost hints are always assigned to both sides of a point, no matter
+ * what the next/previous spline direction is. So we need an additional
+ * check for stem unit parallelity */
+ if (stems[i]->toobig > stem->toobig ||
+ stems[i]->unit.x != stem->unit.x || stems[i]->unit.y != stem->unit.y)
+ continue;
+ is_l = is_next ? pd->next_is_l[i] : pd->prev_is_l[i];
+ bp = is_l ? stems[i]->left : stems[i]->right;
+ off = fabs(( pd->base.x - bp.x )*stem->l_to_r.x +
+ ( pd->base.y - bp.y )*stem->l_to_r.y );
+ if (off < bestoff || (RealNear(off, bestoff) && stems[i] == stem)) {
+ best = i;
+ bestoff = off;
+ }
+ }
+ if (best < *stemcnt && stem == stems[best])
+ return( best );
+
+ return( -1 );
+}
+
+static int has_valid_dstem( PointData *pd,int next ) {
+ int i, cnt;
+ StemData *test;
+
+ cnt = next ? pd->nextcnt : pd->prevcnt;
+ for ( i=0; i<cnt; i++ ) {
+ test = next ? pd->nextstems[i] : pd->prevstems[i];
+ if ( !test->toobig && test->lpcnt > 1 && test->rpcnt > 1 &&
+ fabs( test->unit.x ) > .05 && fabs( test->unit.y ) > .05 )
+ return( i );
+ }
+ return( -1 );
+}
+
+/* init_stem_edge(): Initialize the InstrCt for instructing given edge.
+ *
+ * Finds points that should be snapped to this hint's given edge.
+ * It will return two types of points: a 'chosen one' ct->edge.refpt, that
+ * should be used as a reference for this hint, and ct->edge.others that should
+ * be positioned after ct.refpt with, for example, SHP.
+ *
+ * assign_points_to_edge() is a helper function, only to use from init_stem_edge().
+ */
+static void assign_points_to_edge(InstrCt *ct, StemData *stem, int is_l, int *refidx) {
+ int i, previdx, nextidx, test_l, dint_inner = false, flag;
+ PointData *pd;
+
+ flag = RealNear( stem->unit.y,1 ) ? tf_x : tf_y;
+
+ for ( i=0; i<ct->gd->realcnt; i++ ) {
+ pd = &ct->gd->points[i];
+ previdx = StemPreferredForPoint( pd,stem,false );
+ nextidx = StemPreferredForPoint( pd,stem,true );
+ if (!pd->ticked && (previdx != -1 || nextidx != -1)) {
+ pd->ticked = true;
+ /* Don't attempt to position inner points at diagonal intersections:
+ * our diagonal stem hinter will handle them better */
+ if ( ct->diagcnt > 0 && (
+ ( stem->unit.y == 1 && pd->x_corner == 2 ) ||
+ ( stem->unit.x == 1 && pd->y_corner == 2 ))) {
+
+ dint_inner= has_valid_dstem( pd,true ) != -1 &&
+ has_valid_dstem( pd,false ) != -1;
+ }
+ test_l = (nextidx != -1) ?
+ pd->next_is_l[nextidx] : pd->prev_is_l[previdx];
+ if (test_l == is_l && !dint_inner &&
+ !(ct->touched[pd->ttfindex] & flag) && !(ct->affected[pd->ttfindex] & flag)) {
+ ct->edge.others = (int *)realloc(
+ ct->edge.others, (ct->edge.othercnt+1)*sizeof(int));
+ ct->edge.others[ct->edge.othercnt++] = pd->ttfindex;
+ if ( *refidx == -1 ) *refidx = pd->ttfindex;
+ }
+ }
+ }
+}
+
+static void init_stem_edge(InstrCt *ct, StemData *stem, int is_l) {
+ real left, right, base;
+ struct dependent_stem *slave;
+ PointData *rpd = NULL;
+ int i, *refidx = NULL;
+
+ left = ( stem->unit.x == 0 ) ? stem->left.x : stem->left.y;
+ right = ( stem->unit.x == 0 ) ? stem->right.x : stem->right.y;
+ base = ( is_l ) ? left : right;
+
+ ct->edge.base = base;
+ ct->edge.refpt = -1;
+ ct->edge.refscore = 0;
+ ct->edge.othercnt = 0;
+ ct->edge.others = NULL;
+
+ refidx = ( is_l ) ? &stem->leftidx : &stem->rightidx;
+ if ( *refidx != -1 )
+ rpd = &ct->gd->points[*refidx];
+
+ /* Don't attempt to position inner points at diagonal intersections:
+ * our diagonal stem hinter will handle them better */
+ if ( rpd != NULL && ct->diagcnt > 0 && (
+ ( stem->unit.y == 1 && rpd->x_corner == 2 ) ||
+ ( stem->unit.x == 1 && rpd->y_corner == 2 )) &&
+ has_valid_dstem( rpd,true ) != -1 && has_valid_dstem( rpd,false ) != -1 )
+ *refidx = -1;
+
+ for ( i=0; i<ct->gd->realcnt; i++ )
+ ct->gd->points[i].ticked = false;
+ assign_points_to_edge(ct, stem, is_l, refidx);
+
+ for ( i=0; i<stem->dep_cnt; i++ ) {
+ slave = &stem->dependent[i];
+ if (slave->dep_type == 'a' &&
+ ((is_l && slave->lbase) || (!is_l && !slave->lbase))) {
+
+ if ( is_l ) slave->stem->leftidx = *refidx;
+ else slave->stem->rightidx = *refidx;
+ assign_points_to_edge(ct, slave->stem, is_l, refidx);
+ }
+ }
+ ct->edge.refpt = *refidx;
+}
+
+/* Initialize the InstrCt for instructing given edge. */
+static void init_edge(InstrCt *ct, real base, int contour_direction) {
+ ct->edge.base = base;
+ ct->edge.refpt = -1;
+ ct->edge.refscore = 0;
+ ct->edge.othercnt = 0;
+ ct->edge.others = NULL;
+
+ RunOnPoints(ct, contour_direction, &search_edge);
+}
+
+/* Apparatus for edge hinting optimization. For given 'others' in ct,
+ * it detects 'segments' (in FreeType's sense) and leaves only one point per
+ * segment. A segment to which refpt belong is completely removed (refpt is
+ * enough).
+ *
+ * optimize_edge() is the right high-level function to call with instructing
+ * context (an edge must be previously initialized with init_edge). It calls
+ * optimize_segment() internally - a function that is otherwise unsafe.
+ *
+ * optimize_blue() is even higher-level function to call before optimize_edge
+ * if init_edge() was used to collect points in a blue zone (or other narrow
+ * zone).
+ *
+ * Optimizers keep points used by diagonal hinter.
+ *
+ * optimize_strongpts() is used instead of two routines above when hinting
+ * inter-stem zones (see interpolate_strong option). It's invoked after
+ * instructing diagonal stems.
+ */
+
+/* To be used with qsort() - sorts integer array in ascending order. */
+static int sortbynum(const void *a, const void *b) {
+ return *(int *)a > *(int *)b;
+}
+
+/* Find element's index within an array - return -1 if element not found. */
+static int findoffs(const int *elems, int elemcnt, int val) {
+ int i;
+ for (i=0; i<elemcnt; i++) if (elems[i]==val) return i;
+ return -1;
+}
+
+/* In given ct, others[segstart...segend] form a continuous segment on an edge
+ * parallel to one of coordinate axes. If there are no diagonal hints, we can
+ * instruct just one point of a segment, preferring refpt if included, and
+ * preferring on-curve points ovef off-curve. Otherwise we must instruct all
+ * points used by diagonal hinter along with refpt if included. We mark points
+ * that are not to be instructed as 'affected'.
+ */
+static void optimize_segment(int segstart, int segend, InstrCt *ct) {
+ int i, local_refpt=-1;
+ int *others = ct->edge.others;
+ int touchflag = (ct->xdir)?tf_x:tf_y;
+ int ondiags = 0;
+
+ if (segstart==segend)
+return;
+
+ /* purely for aesthetic reasons - can be safely removed. */
+ qsort(others+segstart, segend+1-segstart, sizeof(int), sortbynum);
+
+ /* are there any to be used with dstems? */
+ if (ct->diagstems)
+ for (i=segstart; !ondiags && i<=segend; i++)
+ ondiags = ct->diagpts[others[i]].count;
+
+ if (ondiags) {
+ for (i=segstart; i<=segend; i++)
+ ct->affected[others[i]] |= ct->diagpts[others[i]].count?0:touchflag;
+ }
+ else {
+ for (i=segstart; i<=segend && ct->gd->points[others[i]].sp == NULL; i++);
+ if (i<=segend) local_refpt = others[i];
+
+ if (findoffs(others+segstart, segend+1-segstart, ct->edge.refpt) != -1)
+ local_refpt = ct->edge.refpt;
+
+ if (local_refpt==-1) local_refpt = others[segstart];
+
+ for (i=segstart; i<=segend; i++)
+ ct->affected[others[i]] |= local_refpt==others[i]?0:touchflag;
+ }
+}
+
+/* Subdivide an edge into segments and optimize segments separately.
+ * A segment consists oh a point, his neighbours, their neighbours...
+ */
+static void optimize_edge(InstrCt *ct) {
+ int i, p, segstart, next;
+ int refpt = ct->edge.refpt;
+ int *others = ct->edge.others;
+ int othercnt = ct->edge.othercnt;
+ int touchflag = (ct->xdir)?tf_x:tf_y;
+
+ if (othercnt == 0)
+return;
+
+ /* add edge.refpt to edge.others */
+ ct->edge.othercnt = ++othercnt;
+ ct->edge.others = others = (int *)realloc(others, othercnt*sizeof(int));
+ others[othercnt-1]=refpt;
+
+ next = 0;
+ while (next < othercnt) {
+ p = others[segstart = next++];
+
+ while((next < othercnt) && (i = findoffs(others+next, othercnt-next,
+ NextOnContour(ct->contourends, p))) != -1) {
+ p = others[i+=next];
+ others[i] = others[next];
+ others[next++] = p;
+ }
+
+ p=others[segstart];
+
+ while((next < othercnt) && (i = findoffs(others+next, othercnt-next,
+ PrevOnContour(ct->contourends, p))) != -1) {
+ p = others[i+=next];
+ others[i] = others[next];
+ others[next++] = p;
+ }
+
+ optimize_segment(segstart, next-1, ct);
+ }
+
+ for (i=next=0; i<othercnt; i++)
+ if (!(ct->affected[others[i]] & touchflag) && (others[i] != refpt))
+ others[next++] = others[i];
+
+ if ((ct->edge.othercnt = next) == 0) {
+ free(others);
+ ct->edge.others = NULL;
+ }
+ else /* purely for aesthetic reasons - could be safely removed. */
+ qsort(others, ct->edge.othercnt, sizeof(int), sortbynum);
+}
+
+/* For any given point on edge, if there exists a path to other point snapped
+ * or to-be-snapped in that zone, such that any points on this path are within
+ * that zone, then this given point may be optimized out.
+ */
+static void optimize_blue(InstrCt *ct) {
+ int i, j, curr;
+ int *others = ct->edge.others;
+ int othercnt = ct->edge.othercnt;
+ int touchflag = (ct->xdir)?tf_x:tf_y;
+ int *contourends = ct->contourends;
+ uint8 *touched = ct->touched;
+ uint8 *affected = ct->affected;
+ uint8 *tosnap;
+
+ if (othercnt == 0)
+return;
+
+ tosnap = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+
+ for(i=0; i<ct->edge.othercnt; i++)
+ {
+ if (ct->diagpts && ct->diagpts[others[i]].count) continue;
+
+ /* check path forward */
+ curr=NextOnContour(contourends, others[i]);
+ while(curr!=others[i]) {
+ double coord = (ct->xdir) ? ct->bp[curr].x : ct->bp[curr].y;
+ if (fabs(ct->edge.base - coord) > ct->gic->fudge) break;
+ if ((touched[curr] | affected[curr]) & touchflag || tosnap[curr]) {
+ affected[others[i]] |= touchflag;
+ break;
+ }
+ curr=NextOnContour(contourends, curr);
+ }
+
+ if (affected[others[i]] & touchflag) continue;
+
+ /* check path backward */
+ curr=PrevOnContour(contourends, others[i]);
+ while(curr!=others[i]) {
+ double coord = (ct->xdir) ? ct->bp[curr].x : ct->bp[curr].y;
+ if (fabs(ct->edge.base - coord) > ct->gic->fudge) break;
+ if ((touched[curr] | affected[curr]) & touchflag || tosnap[curr]) {
+ affected[others[i]] |= touchflag;
+ break;
+ }
+ curr=PrevOnContour(contourends, curr);
+ }
+
+ if (!(affected[others[i]] & touchflag)) tosnap[others[i]] = 1;
+ }
+
+ free(tosnap);
+
+ /* remove optimized-out points from list to be instructed. */
+ for(i=0; i<ct->edge.othercnt; i++)
+ if (affected[others[i]]) {
+ ct->edge.othercnt--;
+ for(j=i; j<ct->edge.othercnt; j++) others[j] = others[j+1];
+ i--;
+ }
+}
+
+/* For any strong point, check whether it's position can rely on other
+ * points (if so, we don't have to instruct it explicitly).
+ * This optimization is two-pass. 'Obvious' Off-curve points are sweeped
+ * first. Some remaining unneeded points (off- and on-curve) may then be
+ * optimized out in second pass.
+ *
+ * TODO! This optimizer could be even more aggressive - it currently
+ * skips some features too small or unexposed to benefit from hinting.
+ */
+static void optimize_strongpts_step1(InstrCt *ct);
+static void optimize_strongpts_step2(InstrCt *ct);
+
+static void optimize_strongpts(InstrCt *ct) {
+ optimize_strongpts_step1(ct);
+ optimize_strongpts_step2(ct);
+}
+
+static void optimize_strongpts_step1(InstrCt *ct) {
+ int i, j;
+ int *others = ct->edge.others;
+ int othercnt = ct->edge.othercnt;
+ int *contourends = ct->contourends;
+ uint8 *tocull, *tocheck;
+
+ if (othercnt == 0)
+return;
+
+ tocull = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+ tocheck = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+ for(i=0; i<ct->edge.othercnt; i++) tocheck[ct->edge.others[i]] = 1;
+
+ /* for each point of "edge" (would be better called "zone") */
+ for(i=0; i<ct->edge.othercnt; i++)
+ {
+ int pt = others[i];
+ double pt_x = ct->bp[pt].x;
+ double pt_y = ct->bp[pt].y;
+
+ int pt_next = NextOnContour(contourends, pt);
+ double pt_next_x = ct->bp[pt_next].x;
+ double pt_next_y = ct->bp[pt_next].y;
+
+ int pt_prev = PrevOnContour(contourends, pt);
+ double pt_prev_x = ct->bp[pt_prev].x;
+ double pt_prev_y = ct->bp[pt_prev].y;
+
+ /* We sweep only off-curve points here */
+ if (ct->gd->points[pt].sp != NULL)
+ continue;
+
+ if (IsCornerExtremum(ct->xdir, ct->contourends, ct->bp, pt))
+ continue;
+
+ /* Some off-curve points may 'belong' to extrema from other zone. */
+
+ if (/*tocheck[pt_next] &&*/ (ct->gd->points[pt_next].sp != NULL) &&
+ (pt_x == pt_next_x || pt_y == pt_next_y))
+ tocull[pt] = 1;
+
+ if (/*tocheck[pt_prev] &&*/ (ct->gd->points[pt_prev].sp != NULL) &&
+ (pt_x == pt_prev_x || pt_y == pt_prev_y))
+ tocull[pt] = 1;
+ }
+
+ /* remove optimized-out points from list to be instructed. */
+ for(i=0; i<ct->edge.othercnt; i++)
+ if (tocull[others[i]]) {
+ ct->edge.othercnt--;
+ for(j=i; j<ct->edge.othercnt; j++) others[j] = others[j+1];
+ i--;
+ }
+
+ free(tocull);
+ free(tocheck);
+}
+
+static void optimize_strongpts_step2(InstrCt *ct) {
+ int pass, i, j, forward;
+ int next_closed, prev_closed;
+ int next_pt_max, next_pt_min, prev_pt_max, prev_pt_min;
+ int next_coord_max, next_coord_min, prev_coord_max, prev_coord_min;
+ int *others = ct->edge.others;
+ int othercnt = ct->edge.othercnt;
+ int touchflag = (ct->xdir)?tf_x:tf_y;
+ int *contourends = ct->contourends;
+ uint8 *touched = ct->touched;
+ uint8 *affected = ct->affected;
+ uint8 *toinstr, *tocull, *tocheck;
+
+ if (othercnt == 0)
+return;
+
+ toinstr = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+ tocull = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+ tocheck = (uint8 *)calloc(ct->ptcnt, sizeof(uint8));
+ for(i=0; i<ct->edge.othercnt; i++) tocheck[ct->edge.others[i]] = 1;
+
+ /* two passes... */
+ for(pass=0; pass<2; pass++)
+ {
+ /* ...for each point of "edge" (would be better called "zone" here) */
+ for(i=0; i<ct->edge.othercnt; i++)
+ {
+ int pt = others[i];
+ double pt_coord = (ct->xdir) ? ct->bp[pt].x : ct->bp[pt].y;
+
+ /* In first pass, we sweep only off-curve points */
+ if ((pass==0) && (ct->gd->points[pt].sp != NULL))
+ continue;
+
+ if (tocull[pt] || toinstr[pt])
+ continue;
+
+ /* check path backward and forward */
+ for (forward=0; forward<2; forward++)
+ {
+ int closed = 0;
+ int pt_max = pt, pt_min = pt;
+ double coord_max = pt_coord, coord_min = pt_coord;
+ int curr = forward ? NextOnContour(contourends, pt):
+ PrevOnContour(contourends, pt);
+
+ while(curr!=pt)
+ {
+ double coord = (ct->xdir) ? ct->bp[curr].x : ct->bp[curr].y;
+
+ if (fabs(ct->edge.base - coord) > ct->gic->fudge)
+ break;
+
+ if ((touched[curr] | affected[curr]) & touchflag || tocheck[curr])
+ {
+ if (coord > coord_max) { coord_max = coord; pt_max = curr; }
+ else if ((coord == coord_max) && (curr < pt_max)) pt_max = curr;
+
+ if (coord < coord_min) { coord_min = coord; pt_min = curr; }
+ else if ((coord == coord_min) && (curr < pt_min)) pt_min = curr;
+
+ closed = 1;
+ }
+
+ if ((touched[curr] | affected[curr]) & touchflag || toinstr[curr])
+ break;
+
+ curr = forward ? NextOnContour(contourends, curr):
+ PrevOnContour(contourends, curr);
+ }
+
+ if (forward) {
+ next_closed = closed;
+ next_pt_max = pt_max;
+ next_pt_min = pt_min;
+ next_coord_max = coord_max;
+ next_coord_min = coord_min;
+ }
+ else {
+ prev_closed = closed;
+ prev_pt_max = pt_max;
+ prev_pt_min = pt_min;
+ prev_coord_max = coord_max;
+ prev_coord_min = coord_min;
+ }
+ }
+
+ if (prev_closed && next_closed && (
+ (prev_coord_max >= pt_coord && pt != prev_pt_max &&
+ next_coord_min <= pt_coord && pt != next_pt_min) ||
+ (prev_coord_min <= pt_coord && pt != prev_pt_min &&
+ next_coord_max >= pt_coord && pt != next_pt_max)))
+ tocull[pt] = 1;
+ else
+ toinstr[pt] = 1;
+ }
+ }
+
+ /* remove optimized-out points from list to be instructed. */
+ for(i=0; i<ct->edge.othercnt; i++)
+ if (tocull[others[i]]) {
+ ct->edge.othercnt--;
+ for(j=i; j<ct->edge.othercnt; j++) others[j] = others[j+1];
+ i--;
+ }
+
+ free(tocheck);
+ free(toinstr);
+ free(tocull);
+}
+
+/* Finish instructing the edge. Try to hint only those points on edge that are
+ * necessary - IUP should do the rest.
+ */
+static void finish_edge(InstrCt *ct, uint8 command) {
+ int i;
+
+ optimize_edge(ct);
+ if (ct->edge.othercnt==0)
+return;
+
+ ct->pt=instructpoints(ct->pt, ct->edge.othercnt, ct->edge.others, command);
+ for(i=0; i<ct->edge.othercnt; i++)
+ ct->touched[ct->edge.others[i]] |= (ct->xdir?tf_x:tf_y);
+
+ free(ct->edge.others);
+ ct->edge.others=NULL;
+ ct->edge.othercnt = 0;
+}
+
+/******************************************************************************
+ *
+ * Routines for hinting single stems.
+ *
+ ******************************************************************************/
+
+/* Each stem hint has 'ldone' and 'rdone' flag, indicating whether 'left'
+ * or 'right' edge is hinted or not. This functions marks as done all edges at
+ * specified coordinate, starting from given hint (hints sometimes share edges).
+ */
+static void mark_startenddones(StemData *stem, int is_l ) {
+ struct dependent_stem *slave;
+ int i;
+ uint8 *done;
+
+ done = is_l ? &stem->ldone : &stem->rdone;
+ *done = true;
+ for (i=0; i<stem->dep_cnt; i++) {
+ slave = &stem->dependent[i];
+ if ( slave->dep_type == 'a' && slave->lbase == is_l ) {
+ done = is_l ? &slave->stem->ldone : &slave->stem->rdone;
+ *done = true;
+ }
+ }
+}
+
+static void build_cvt_stem(InstrCt *ct, real width, StdStem *cvt_stem) {
+ int i, width_parent, width_me;
+ int EM = ct->gic->sf->ascent + ct->gic->sf->descent;
+
+ cvt_stem->width = (int)rint(fabs(width));
+ cvt_stem->stopat = 32767;
+ cvt_stem->snapto =
+ CVTSeekStem(ct->xdir, ct->gic, width, false);
+
+ for (i=7; i<32768; i++) {
+ width_parent = compute_stem_width(ct->xdir, cvt_stem->snapto, EM, i);
+ width_me = compute_stem_width(ct->xdir, cvt_stem, EM, i);
+
+ if (width_parent != width_me) {
+ cvt_stem->stopat = i;
+ break;
+ }
+ }
+}
+
+/* This function has been separated from finish_stem(), because sometimes
+ * it is necessary to maintain the distance between two points (usually on
+ * opposite stem edges) without instructing the whole stem. Currently we use this
+ * to achieve proper positioning of the left edge of a vertical stem in antialiased
+ * mode, if instructing this stem has to be started from the right edge
+ */
+static void maintain_black_dist(InstrCt *ct, real width, int refpt, int chg_rp0) {
+ int callargs[5];
+ StdStem *StdW = ct->xdir?&(ct->gic->stdvw):&(ct->gic->stdhw);
+ StdStem *ClosestStem;
+ StdStem cvt_stem;
+
+ ClosestStem = CVTSeekStem(ct->xdir, ct->gic, width, true);
+
+ if (ClosestStem != NULL) {
+ ct->pt = push2nums(ct->pt, refpt, ClosestStem->cvtindex);
+
+ if (ct->gic->cvt_done && ct->gic->fpgm_done && ct->gic->prep_done)
+ *(ct->pt)++ = chg_rp0?MIRP_rp0_min_black:MIRP_min_black;
+ else *(ct->pt)++ = chg_rp0?MIRP_min_rnd_black:MIRP_rp0_min_rnd_black;
+ }
+ else {
+ if (ct->gic->cvt_done && ct->gic->fpgm_done && ct->gic->prep_done &&
+ StdW->width!=-1)
+ {
+ build_cvt_stem(ct, width, &cvt_stem);
+
+ callargs[0] = ct->edge.refpt;
+ callargs[1] = cvt_stem.snapto->cvtindex;
+ callargs[2] = chg_rp0?1:0;
+ callargs[3] = cvt_stem.stopat;
+ callargs[4] = 4;
+ ct->pt = pushnums(ct->pt, 5, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = chg_rp0?MDRP_rp0_min_rnd_black:MDRP_min_rnd_black;
+ }
+ }
+}
+
+/* Given the refpt for one of this hint's edges is already positioned, this
+ * function aligns 'others' (SHP with given shp_rp) for this edge and positions
+ * the second edge, optionally setting its refpt as rp0. It frees edge.others
+ * and sets edge.othercnt to zero, but it leaves edge.refpt set to last
+ * instructed edge.
+ */
+#define use_rp1 (true)
+#define use_rp2 (false)
+#define set_new_rp0 (true)
+#define keep_old_rp0 (false)
+static void finish_stem(StemData *stem, int shp_rp1, int chg_rp0, InstrCt *ct)
+{
+ int is_l, basedone, oppdone, reverse;
+ real hleft, hright, width;
+
+ if (stem == NULL)
+ return;
+ hleft = ((real *) &stem->left.x)[!ct->xdir];
+ hright= ((real *) &stem->right.x)[!ct->xdir];
+
+ is_l = (fabs(hleft - ct->edge.base) < fabs(hright - ct->edge.base));
+ basedone = ( is_l && stem->ldone ) || ( !is_l && stem->rdone );
+ oppdone = ( is_l && stem->rdone ) || ( !is_l && stem->ldone );
+ reverse = ( ct->xdir && !is_l && !stem->ldone && !stem->ghost );
+ width = stem->width;
+
+ if ( !reverse && !basedone ) {
+ ct->touched[ct->edge.refpt] |= ct->xdir?tf_x:tf_y;
+ finish_edge(ct, shp_rp1?SHP_rp1:SHP_rp2);
+ mark_startenddones(stem, is_l );
+ }
+
+ if (oppdone || (stem->ghost && ((stem->width==20) || (stem->width==21)))) {
+ stem->ldone = stem->rdone = 1;
+ return;
+ }
+
+ init_stem_edge(ct, stem, !is_l);
+ if (ct->edge.refpt == -1) {
+ /* We have skipped the right edge to start instructing this stem from
+ * left. But its left edge appears to have no points to be instructed.
+ * So return to the right edge and instruct it before exiting */
+ if ( reverse && !basedone ) {
+ init_stem_edge(ct, stem, is_l);
+ ct->touched[ct->edge.refpt] |= ct->xdir?tf_x:tf_y;
+ finish_edge(ct, shp_rp1?SHP_rp1:SHP_rp2);
+ mark_startenddones(stem, is_l );
+ }
+ return;
+ }
+ maintain_black_dist(ct, width, ct->edge.refpt, chg_rp0);
+
+ if ( reverse ) {
+ is_l = !is_l;
+ ct->rp0 = ct->edge.refpt;
+ ct->pt = pushpoint(ct->pt, ct->rp0);
+ *(ct->pt)++ = MDAP_rnd;
+ ct->touched[ct->edge.refpt] |= ct->xdir?tf_x:tf_y;
+ finish_edge(ct, SHP_rp1);
+ mark_startenddones( stem, is_l );
+ if ( !stem->rdone ) {
+ init_stem_edge(ct, stem, false);
+ if (ct->edge.refpt == -1)
+ return;
+ maintain_black_dist(ct, width, ct->edge.refpt, chg_rp0);
+ }
+ }
+
+ if (chg_rp0) ct->rp0 = ct->edge.refpt;
+ ct->touched[ct->edge.refpt] |= ct->xdir?tf_x:tf_y;
+ finish_edge(ct, SHP_rp2);
+ mark_startenddones( stem, !is_l );
+}
+
+static void mark_points_affected(InstrCt *ct,StemData *target,PointData *opd,int next) {
+ Spline *s;
+ PointData *pd, *cpd;
+ int cpidx;
+
+ s = next ? opd->sp->next : opd->sp->prev;
+ pd = next ? &ct->gd->points[s->to->ptindex] : &ct->gd->points[s->from->ptindex];
+ while (IsStemAssignedToPoint(pd, target, !next) == -1) {
+ if (pd->ttfindex < ct->gd->realcnt &&
+ value_point(ct, pd->ttfindex, pd->sp, ct->gd->emsize))
+ ct->affected[pd->ttfindex] |= ct->xdir?tf_x:tf_y;
+
+ if (!pd->sp->noprevcp) {
+ cpidx = pd->sp->prev->from->nextcpindex;
+ cpd = &ct->gd->points[cpidx];
+ if (value_point(ct, cpd->ttfindex, pd->sp, ct->gd->emsize))
+ ct->affected[cpd->ttfindex] |= ct->xdir?tf_x:tf_y;
+ }
+ if (!pd->sp->nonextcp) {
+ cpidx = pd->sp->nextcpindex;
+ cpd = &ct->gd->points[cpidx];
+ if (value_point(ct, cpd->ttfindex, pd->sp, ct->gd->emsize))
+ ct->affected[cpd->ttfindex] |= ct->xdir?tf_x:tf_y;
+ }
+ s = next ? pd->sp->next : pd->sp->prev;
+ pd = next ? &ct->gd->points[s->to->ptindex] : &ct->gd->points[s->from->ptindex];
+ if ( pd == opd ) {
+ IError( "The ball terminal with a key point at %.3f,%.3f\n"
+ "appears to be incorrectly linked to the %s stem\n"
+ "<%.3f, %.3f>",
+ pd->base.x,pd->base.y,
+ ct->xdir?"vertical":"horizontal",
+ ct->xdir?target->left.x:target->right.y,target->width );
+ break;
+ }
+ }
+}
+
+static void finish_serif(StemData *slave, StemData *master, int lbase, int is_ball, InstrCt *ct)
+{
+ int inner_pt, callargs[4];
+ struct stem_chunk *chunk;
+ PointData *opd;
+ int i;
+
+ if (slave == NULL || master == NULL)
+return;
+ inner_pt = ( lbase ) ? master->rightidx : master->leftidx;
+
+ init_stem_edge(ct, slave, !lbase);
+ if (ct->edge.refpt == -1)
+return;
+
+ if (ct->gic->fpgm_done) {
+ callargs[0] = is_ball ? 0 : 64;
+ callargs[1] = inner_pt;
+ callargs[2] = ct->edge.refpt;
+ callargs[3] = 9;
+ ct->pt = pushnums(ct->pt, 4, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ *(ct->pt)++ = 0x7D; /* RDTG */
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = MDRP_min_rnd_black;
+ *(ct->pt)++ = 0x18; /* RTG */
+ }
+
+ ct->touched[ct->edge.refpt] |= ct->xdir?tf_x:tf_y;
+ finish_edge(ct, SHP_rp2);
+ mark_startenddones( slave, !lbase );
+
+ if ( !interpolate_strong || !instruct_ball_terminals )
+return;
+
+ /* Preserve points on ball terminals from being interpolated
+ * between edges by marking them as affected */
+ for ( i=0; i<slave->chunk_cnt; i++ ) {
+ chunk = &slave->chunks[i];
+ opd = lbase ? chunk->r : chunk->l;
+
+ if (chunk->is_ball && opd != NULL) {
+ mark_points_affected(ct, chunk->ball_m, opd, true);
+ mark_points_affected(ct, chunk->ball_m, opd, false);
+ }
+ }
+}
+
+static void link_serifs_to_edge(InstrCt *ct, StemData *stem, int is_l) {
+ int i, callargs[3];
+ struct dependent_serif *serif;
+
+ /* We use an FPGM function to set rp0, and thus the exact value
+ * is not known at the compilation time. So it is safer to reset
+ * ct->rp0 to -1
+ */
+ if ( ct->gic->fpgm_done ) {
+ ct->rp0 = -1;
+ callargs[0] = is_l ? stem->rightidx : stem->leftidx;
+ callargs[1] = is_l ? stem->leftidx : stem->rightidx;
+ callargs[2] = 10;
+ ct->pt = pushnums(ct->pt, 3, callargs);
+ *(ct->pt)++ = CALL;
+ } else {
+ init_stem_edge(ct, stem, !is_l);
+ if ( ct->rp0 != ct->edge.refpt ) {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = SRP0;
+ ct->rp0 = ct->edge.refpt;
+ }
+ }
+ for (i=0; i<stem->serif_cnt; i++) {
+ serif = &stem->serifs[i];
+ if (serif->lbase == is_l &&
+ ((serif->is_ball && instruct_ball_terminals) ||
+ (!serif->is_ball && instruct_serif_stems)))
+ finish_serif( serif->stem,stem,is_l,serif->is_ball,ct );
+ }
+}
+
+static void instruct_serifs(InstrCt *ct, StemData *stem) {
+ int i, lcnt, rcnt;
+ struct dependent_serif *serif;
+
+ if ( stem->leftidx == -1 || stem->rightidx == -1 )
+ return;
+ lcnt = rcnt = 0;
+ for (i=0; i<stem->serif_cnt; i++) {
+ serif = &stem->serifs[i];
+ if ((serif->is_ball && !instruct_ball_terminals) ||
+ (!serif->is_ball && !instruct_serif_stems))
+ continue;
+ if ( serif->lbase )
+ lcnt++;
+ else if ( !serif->lbase )
+ rcnt++;
+ }
+
+ if (stem->ldone && lcnt > 0)
+ link_serifs_to_edge(ct, stem, true);
+ if (stem->rdone && rcnt > 0)
+ link_serifs_to_edge(ct, stem, false);
+}
+
+static void instruct_dependent(InstrCt *ct, StemData *stem) {
+ int i, j, rp, rp1, rp2, stopat, callargs[4];
+ struct dependent_stem *slave;
+ int w_master, w_slave;
+ StdStem *std_master, *std_slave, norm_master, norm_slave;
+ StdStem *StdW = ct->xdir?&(ct->gic->stdvw):&(ct->gic->stdhw);
+
+ for (i=0; i<stem->dep_cnt; i++) {
+ slave = &stem->dependent[i];
+ if (slave->stem->master == NULL)
+ continue;
+
+ init_stem_edge(ct, slave->stem, slave->lbase);
+ if (ct->edge.refpt == -1) continue;
+
+ if (slave->dep_type == 'i' && stem->ldone && stem->rdone) {
+ rp1 = ct->xdir ? stem->leftidx : stem->rightidx;
+ rp2 = ct->xdir ? stem->rightidx : stem->leftidx;
+ callargs[0] = ct->edge.refpt;
+ callargs[1] = rp2;
+ callargs[2] = rp1;
+ if (ct->gic->fpgm_done) {
+ callargs[3] = 8;
+ ct->pt = pushpoints(ct->pt, 4, callargs);
+ *(ct->pt)++ = CALL;
+ } else {
+ ct->pt = pushpoints(ct->pt, 3, callargs);
+ *(ct->pt)++ = SRP1;
+ *(ct->pt)++ = SRP2;
+ *(ct->pt)++ = DUP;
+ *(ct->pt)++ = IP;
+ *(ct->pt)++ = MDAP_rnd;
+ }
+ }
+ else if (slave->dep_type == 'm' &&
+ ((slave->lbase && stem->ldone) || (!slave->lbase && stem->rdone))) {
+
+ rp = slave->lbase ? stem->leftidx : stem->rightidx;
+ if ( rp != ct->rp0 ) {
+ ct->pt = pushpoint(ct->pt, rp);
+ *(ct->pt)++ = SRP0;
+ ct->rp0 = rp;
+ }
+
+ /* It is possible that at certain PPEMs both the master and slave stems are
+ * regularized, say, to 1 pixel, but the difference between their positions
+ * is rounded to 1 pixel too. Thus one stem is shifted relatively to another,
+ * so that the overlap disappears. This looks especially odd for nesting/nested
+ * stems. We use a special FPGM function to prevent this.
+ */
+ if ( ct->gic->cvt_done && ct->gic->fpgm_done && ct->gic->prep_done && StdW->width!=-1 && (
+ ((&stem->left.x)[!ct->xdir] <= (&slave->stem->left.x)[!ct->xdir] &&
+ ( &stem->right.x)[!ct->xdir] >= (&slave->stem->right.x)[!ct->xdir] ) ||
+ ((&stem->left.x)[!ct->xdir] >= (&slave->stem->left.x)[!ct->xdir] &&
+ ( &stem->right.x)[!ct->xdir] <= (&slave->stem->right.x)[!ct->xdir] ))) {
+
+ std_master = CVTSeekStem(ct->xdir, ct->gic, stem->width, true);
+ std_slave = CVTSeekStem(ct->xdir, ct->gic, slave->stem->width, true);
+ if ( std_master == NULL ) {
+ build_cvt_stem(ct, stem->width, &norm_master);
+ std_master = &norm_master;
+ }
+ if ( std_slave == NULL ) {
+ build_cvt_stem(ct, slave->stem->width, &norm_slave);
+ std_slave = &norm_slave;
+ }
+
+ stopat = 32768;
+ for (j=7; j<=stopat; j++) {
+ w_master = compute_stem_width(ct->xdir, std_master, ct->gd->emsize, j);
+ w_slave = compute_stem_width(ct->xdir, std_slave , ct->gd->emsize, j);
+
+ if (w_master != w_slave)
+ stopat = j;
+ }
+ callargs[0] = stopat;
+ callargs[1] = ct->rp0;
+ callargs[2] = ct->edge.refpt;
+ callargs[3] = 14;
+ ct->pt = pushpoints(ct->pt, 4, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = DUP;
+ *(ct->pt)++ = MDRP_rp0_rnd_white;
+ *(ct->pt)++ = SRP1;
+ }
+ }
+ else if (slave->dep_type == 'a' &&
+ ((slave->lbase && stem->ldone) || (!slave->lbase && stem->rdone))) {
+ if ( ct->edge.refpt != ct->rp0 ) {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = SRP0;
+ }
+ }
+ else
+ continue;
+
+ ct->rp0 = ct->edge.refpt;
+ finish_stem(slave->stem, use_rp1, keep_old_rp0, ct);
+ if ( instruct_serif_stems || instruct_ball_terminals )
+ instruct_serifs(ct, slave->stem);
+
+ instruct_dependent(ct, slave->stem);
+ }
+}
+
+/******************************************************************************
+ *
+ * I decided to do snapping to blues at the very beginning of the instructing.
+ *
+ * Blues are processed in certain (important) order: baseline, descenders
+ * (from deeper to shorter), ascenders (from taller to shorter).
+ *
+ * For each blue, one of the edges is put into CVT: lower if is't > zero,
+ * the upper otherwise. A twilight point 0 is established at this height. All
+ * the glyph's points decided to be worth snapping are then moved relative to
+ * this twilight point, being subject to rounding 'down-to-int'. Space taken
+ * is at most 8*ptcnt.
+ *
+ * For each blue, all yet unprocessed HStems affected are instructed. Ghost
+ * hints are reckognised. If there is at least one stem hint in given blue zone,
+ * autoinstructor will seek for other interesting features, so there is no need
+ * to hint them explicitly.
+ *
+ * TODO! We currently instruct hints dependent on those controlled by blues.
+ * This may be not always corrrect (e.g. if a dependent hint is itself
+ * controlled by blue zone - possibly even different). Research needed.
+ *
+ * Important notes:
+ *
+ * The zone count must be set to 2, the twilight point count must be nonzero.
+ * This is done automagically in init_maxp(), otherwise this method wouldn't
+ * work at all. Currently there is only one twilight point used, but there
+ * may be needed one or even two points per blue zone if some advanced snapping
+ * and counter managing is to be done.
+ *
+ * Snapping relies on function 0 in FPGM, see init_fpgm().
+ *
+ * Using MIAP (single cvt, relying on cut-in) instead of twilight points
+ * causes overshoots to appear/disappear inconsistently at small pixel sizes.
+ * This flickering is disastrous to soft, wavy horizontal lines. We could use
+ * any glyph's point at needed height, but we're not certain we'll find any.
+ *
+ * The inner (leftwards) contours aren't snapped to the blue zone.
+ * This could have created weird artifacts. Of course this will fail for
+ * glyphs with wrong direction, but I won't handle it for now.
+ *
+ * TODO! Remind the user to correct direction or do it for him.
+ * TODO! Try to instruct 'free points' with single push and LOOPCALL.
+ *
+ * If we didn't snapped any point to a blue zone, we shouldn't mark any HStem
+ * edges done. This could made some important points on inner contours missed.
+ *
+ ******************************************************************************/
+
+/* Each blue zone has two TTF point indices associated with it: 'highest' and
+ * 'lowest'. These have to be points with highest and lowest Y coordinates that
+ * are snapped to that blue zone (directly or by horizontal stem). Currently
+ * we register only edge.refpt. These points are later to be used for horizontal
+ * stems' positioning.
+ */
+static void update_blue_pts(int blueindex, InstrCt *ct)
+{
+ BasePoint *bp = ct->bp;
+ BlueZone *blues = ct->gic->blues;
+
+ if (ct->edge.refpt == -1)
+return;
+
+ if (blues[blueindex].highest == -1 ||
+ bp[ct->edge.refpt].y > bp[blues[blueindex].highest].y)
+ blues[blueindex].highest = ct->edge.refpt;
+
+ if (blues[blueindex].lowest == -1 ||
+ bp[ct->edge.refpt].y < bp[blues[blueindex].lowest].y)
+ blues[blueindex].lowest = ct->edge.refpt;
+}
+
+/* It is theoretically possible that 'highest' and 'lowest' points of neighbour
+ * blue zones overlap, and thus may spoil horizontal stems' positioning.
+ * Here we fix this up.
+ */
+static void fixup_blue_pts(BlueZone *b1, BlueZone *b2) {
+ if (b1->lowest > b2->lowest) b1->lowest = b2->lowest;
+ if (b1->highest < b2->highest) b1->highest = b2->highest;
+}
+
+static void check_blue_pts(InstrCt *ct) {
+ BasePoint *bp = ct->bp;
+ BlueZone *blues = ct->gic->blues;
+ int i, j, bluecnt = ct->gic->bluecnt;
+
+ for (i=0; i<bluecnt; i++)
+ if (blues[i].lowest != -1)
+ for (j=0; j<bluecnt; j++)
+ if (i != j && blues[j].lowest != -1 && SegmentsOverlap(
+ bp[blues[i].lowest].y, bp[blues[i].highest].y,
+ bp[blues[j].lowest].y, bp[blues[j].highest].y))
+ fixup_blue_pts(blues+i, blues+j);
+}
+
+static int snap_stem_to_blue(InstrCt *ct,StemData *stem, BlueZone *blue, int idx) {
+ int i, is_l, ret = 0;
+ int callargs[3] = { 0/*pt*/, 0/*cvt*/, 0 };
+ real base, advance, tmp;
+ real fuzz = GetBlueFuzz(ct->gic->sf);
+ StemData *slave;
+
+ /* Which edge to start at? */
+ /* Starting at the other would usually be wrong. */
+ if (blue->overshoot < blue->base && ( !stem->ghost || stem->width == 21 ))
+ {
+ is_l = false;
+ base = stem->right.y;
+ advance = stem->left.y;
+ }
+ else {
+ is_l = true;
+ base = stem->left.y;
+ advance = stem->right.y;
+ }
+
+ /* This is intended as a fallback if the base edge wasn't within
+ * this bluezone, and advance edge was.
+ */
+ if (!stem->ghost &&
+ !SegmentsOverlap(base+fuzz, base-fuzz, blue->base, blue->overshoot) &&
+ SegmentsOverlap(advance+fuzz, advance-fuzz, blue->base, blue->overshoot))
+ {
+ tmp = base;
+ base = advance;
+ advance = tmp;
+ is_l = !is_l;
+ }
+
+ /* instruct the stem */
+ init_stem_edge(ct, stem, is_l);
+ if (ct->edge.refpt == -1) {
+ for ( i=0; i<stem->dep_cnt; i++ ) {
+ slave = stem->dependent[i].stem;
+ /* A hack which allows single-edge hints to tie features
+ * to remote blue zones. */
+ if ( stem->ghost ) slave->blue = idx;
+ if ( slave->blue == idx )
+ ret += snap_stem_to_blue(ct, slave, blue, idx);
+ }
+ return( ret );
+ }
+ update_blue_pts(idx, ct);
+ callargs[0] = ct->rp0 = ct->edge.refpt;
+ callargs[1] = blue->cvtindex;
+
+ if (ct->gic->fpgm_done) {
+ ct->pt = pushpoints(ct->pt, 3, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoints(ct->pt, 2, callargs);
+ *(ct->pt)++ = MIAP_rnd;
+ }
+
+ finish_stem(stem, use_rp1, keep_old_rp0, ct);
+ for ( i=0; i<stem->dep_cnt; i++ ) {
+ slave = stem->dependent[i].stem;
+ if ( slave->blue == idx ) {
+ ret += snap_stem_to_blue(ct, slave, blue, idx);
+ slave->master = NULL;
+ }
+ }
+
+ if( instruct_serif_stems || instruct_ball_terminals )
+ instruct_serifs(ct, stem);
+ instruct_dependent(ct, stem);
+ update_blue_pts(idx, ct); /* this uses only refpt: who cares? */
+ return( ret + 1 );
+}
+
+/* Snap stems and perhaps also some other points to given bluezone and set up
+ * its 'highest' and 'lowest' point indices.
+ */
+static void snap_to_blues(InstrCt *ct) {
+ int i, j;
+ int therewerestems; /* were there any HStems snapped to this blue? */
+ StemData *stem; /* for HStems affected by blues */
+ real base; /* for the hint */
+ int callargs[3] = { 0/*pt*/, 0/*cvt*/, 0 };
+ real fudge;
+ int bluecnt=ct->gic->bluecnt;
+ int queue[12]; /* Blue zones' indices in processing order */
+ BlueZone *blues = ct->gic->blues;
+ real fuzz = GetBlueFuzz(ct->gic->sf);
+
+ if (bluecnt == 0)
+return;
+
+ /* Fill the processing queue - baseline goes first, then bottom zones */
+ /* sorted by base in ascending order, then top zones sorted in descending */
+ /* order. I assume the blues are sorted in ascending order first. */
+ for (i=0; (i < bluecnt) && (blues[i].base < 0); i++);
+ queue[0] = i;
+ for (i=0; i<queue[0]; i++) queue[i+1] = i;
+ for (i=queue[0]+1; i<bluecnt; i++) queue[i] = bluecnt - i + queue[0];
+
+ /* Process the blues. */
+ for (i=0; i<bluecnt; i++) {
+ therewerestems = 0;
+
+ /* Process all hints with edges within current blue zone. */
+ for ( j=0; j<ct->gd->hbundle->cnt; j++ ) {
+ stem = ct->gd->hbundle->stemlist[j];
+ if (stem->master != NULL || stem->blue != queue[i] || stem->ldone || stem->rdone)
+ continue;
+
+ therewerestems += snap_stem_to_blue(ct, stem, &blues[queue[i]], queue[i]);
+ }
+
+ /* Now I'll try to find points not snapped by any previous stem hint. */
+ if (therewerestems) {
+ base = (blues[queue[i]].base + blues[queue[i]].overshoot) / 2.0;
+ fudge = ct->gic->fudge;
+ ct->gic->fudge = fabs(base - blues[queue[i]].base) + fuzz;
+ init_edge(ct, base, EXTERNAL_CONTOURS);
+ optimize_blue(ct);
+ optimize_edge(ct);
+
+ if (ct->edge.refpt == -1) {
+ ct->gic->fudge = fudge;
+ continue;
+ }
+
+ if (!(ct->touched[ct->edge.refpt]&tf_y || ct->affected[ct->edge.refpt]&tf_y)) {
+ callargs[0] = ct->rp0 = ct->edge.refpt;
+
+ if (ct->gic->fpgm_done) {
+ ct->pt = pushpoints(ct->pt, 3, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoints(ct->pt, 2, callargs);
+ *(ct->pt)++ = MIAP_rnd;
+ }
+
+ ct->touched[ct->edge.refpt] |= tf_y;
+ }
+
+ for (j=0; j<ct->edge.othercnt; j++) {
+ callargs[0] = ct->rp0 = ct->edge.others[j];
+
+ if (ct->gic->fpgm_done) {
+ ct->pt = pushpoints(ct->pt, 3, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoints(ct->pt, 2, callargs);
+ *(ct->pt)++ = MIAP_rnd;
+ }
+
+ ct->touched[ct->edge.others[j]] |= tf_y;
+ }
+
+ update_blue_pts(queue[i], ct);
+
+ if (ct->edge.others != NULL) {
+ free(ct->edge.others);
+ ct->edge.others = NULL;
+ ct->edge.othercnt = 0;
+ }
+
+ ct->gic->fudge = fudge;
+ }
+ }
+
+ check_blue_pts(ct);
+}
+
+static int get_counters_cut_in(InstrCt *ct, int m1, int m2, int c1, int c2) {
+ real s1, e1, s2, e2, width1, width2;
+ int i, swidth1, swidth2;
+ int EM = ct->gic->sf->ascent + ct->gic->sf->descent;
+
+ s1 = (&ct->gd->points[m1].base.x)[!ct->xdir];
+ e1 = (&ct->gd->points[m2].base.x)[!ct->xdir];
+ s2 = (&ct->gd->points[c1].base.x)[!ct->xdir];
+ e2 = (&ct->gd->points[c2].base.x)[!ct->xdir];
+ width1 = e1 - s1; width2 = e2 - s2;
+
+ if ( RealNear( width1, width2 ))
+ return( 0 );
+
+ for (i=7; i<32768; i++) {
+ swidth1 = (int)rint((rint(fabs(width1)) * i * 64.0)/EM);
+ swidth2 = (int)rint((rint(fabs(width2)) * i * 64.0)/EM);
+ if ( fabs(swidth1 - swidth2) >= SNAP_THRESHOLD )
+ break;
+ }
+ return( i );
+}
+
+/******************************************************************************
+ *
+ * High-level functions for instructing horizontal and vertical stems.
+ * Both use 'geninstrs' for positioning single, elementary stems.
+ *
+ ******************************************************************************/
+
+/* geninstrs's main burden is to choose the better of two reference points
+ * found by init_stem_edge() - one for each edge - and position it relatively
+ * to other stems (if not already done).
+ *
+ * If none of the edges is positioned:
+ * If this hint is the first, previously overlapped, or simply horizontal,
+ * position the reference point at the base where it is using MDAP; otherwise
+ * position the hint's base rp0 relatively to the previous hint's end using
+ * MDRP with white minimum distance (fpgm function 1).
+ *
+ * Calling finish_stem() will deal with the rest of points needing explicit
+ * positioning. Then we instruct serifs and dependent stems, if wanted.
+ */
+static void geninstrs(InstrCt *ct, StemData *stem, StemData *prev, int lbase) {
+ int shp_rp1, chg_rp0, c_m_pt1 = -1, c_m_pt2 = -1;
+ int callargs[6];
+ real prev_pos = 0, cur_pos;
+
+ if (stem->ldone && stem->rdone)
+ return;
+ if ((lbase && stem->rdone) || (!lbase && stem->ldone))
+ lbase = !lbase;
+ init_stem_edge(ct, stem, lbase);
+ if (ct->edge.refpt == -1) {
+ lbase = !lbase;
+ init_stem_edge(ct, stem, lbase);
+ }
+ if (ct->edge.refpt == -1)
+ return;
+
+ if (ct->rp0 < ct->gd->realcnt && ct->rp0 >= 0)
+ prev_pos = (&ct->gd->points[ct->rp0].base.x)[!ct->xdir];
+ cur_pos = (&ct->gd->points[ct->edge.refpt].base.x)[!ct->xdir];
+
+ if (prev != NULL && stem->prev_c_m != NULL && prev->next_c_m != NULL ) {
+ c_m_pt1 = ct->xdir ? prev->next_c_m->rightidx : prev->next_c_m->leftidx;
+ c_m_pt2 = ct->xdir ? stem->prev_c_m->leftidx : stem->prev_c_m->rightidx;
+ }
+
+ /* Now the stem's origin must be placed in respect to others... */
+ /* TODO! What's really needed here is an iterative procedure that */
+ /* would preserve counters and widths, like in freetype2. */
+ /* For horizontal stems, interpolating between blues is being be done. */
+
+ if (stem->ldone || stem->rdone ) {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = MDAP; /* sets rp0 and rp1 */
+ shp_rp1 = use_rp1;
+ chg_rp0 = (ct->xdir && !lbase) || (!ct->xdir && lbase);
+ }
+ else if (!ct->xdir) { /* horizontal stem */
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = MDAP_rnd;
+ shp_rp1 = use_rp1;
+ chg_rp0 = keep_old_rp0;
+ }
+ else if (prev == NULL) { /* first vertical stem */
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ *(ct->pt)++ = MDRP_rp0_rnd_white;
+ shp_rp1 = use_rp2;
+ chg_rp0 = keep_old_rp0;
+ }
+ else {
+ if (ct->gic->fpgm_done) {
+ if ( control_counters && c_m_pt1 != -1 && c_m_pt2 != -1 ) {
+ callargs[0] = c_m_pt1;
+ callargs[1] = c_m_pt2;
+ callargs[2] = ct->rp0;
+ callargs[3] = ct->edge.refpt;
+ callargs[4] = get_counters_cut_in(ct, c_m_pt1, c_m_pt2, ct->rp0, ct->edge.refpt);
+ callargs[5] = 15;
+ ct->pt = pushpoints(ct->pt, 6, callargs);
+
+ } else if ( control_counters && prev != NULL && prev->leftidx != -1 && prev->rightidx != -1 ) {
+ callargs[0] = ct->xdir ? prev->leftidx : prev->rightidx;
+ callargs[1] = ct->edge.refpt;
+ callargs[2] = ( cur_pos - prev_pos ) > ct->gic->fudge ? 16 : 17;
+ ct->pt = pushpoints(ct->pt, 3, callargs);
+
+ } else if ( fabs( cur_pos - prev_pos ) > ct->gic->fudge ) {
+ ct->pt = push2nums(ct->pt, ct->edge.refpt, 1);
+ } else {
+ ct->pt = push2nums(ct->pt, ct->edge.refpt, 11);
+ }
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ ct->pt = pushpoint(ct->pt, ct->edge.refpt);
+ if ( fabs( cur_pos - prev_pos ) > ct->gic->fudge )
+ *(ct->pt)++ = MDRP_rp0_min_rnd_grey;
+ else
+ *(ct->pt)++ = MDRP_rp0_rnd_white;
+ }
+ shp_rp1 = use_rp2;
+
+ /* Don't switch rp0 to the second edge. Thus, relative distance
+ * to the next stem is be larger, and errors are hopefully lesser.
+ * TODO! This is disputable.
+ * TODO! For the last vstem, we probably want to switch rp0 anyway.
+ */
+ chg_rp0 = keep_old_rp0;
+ }
+ ct->rp0 = ct->edge.refpt;
+ finish_stem(stem, shp_rp1, chg_rp0, ct);
+ if ( instruct_serif_stems || instruct_ball_terminals )
+ instruct_serifs(ct, stem);
+
+ instruct_dependent(ct, stem);
+}
+
+/* High-level function for instructing horizontal stems.
+ *
+ * It is assumed that blues (and hstems associated with them) are already
+ * done so that remaining stems can be interpolated between them.
+ *
+ * TODO! CJK hinting will probably need different function (HStemGeninstCJK?)
+ * TODO! Instruct top and bottom bearings for fonts which have them.
+ */
+static void HStemGeninst(InstrCt *ct) {
+ BlueZone *blues = ct->gic->blues;
+ int bluecnt = ct->gic->bluecnt;
+ BasePoint *bp = ct->bp;
+ StemData *stem;
+ int i, j, rp1, rp2, opp, bpt, ept;
+ double hbase, hend;
+ int mdrp_end, mdrp_base, ip_base, *rpts1, *rpts2;
+ int callargs[5];
+
+ if ( ct->gd->hbundle == NULL )
+ return;
+ rpts1 = calloc(ct->gd->hbundle->cnt, sizeof(int));
+ rpts2 = calloc(ct->gd->hbundle->cnt, sizeof(int));
+
+ /* Interpolating between blues is splitted to two stages: first
+ * we determine which stems can be interpolated and which cannot
+ * and store the numbers of reference points, and then (in the
+ * second cycle) proceed to generating actual instructions. The reason is
+ * that we need a special handling for dependent stems: if they
+ * can be interpolated, we process them separately, but otherwise
+ * the normal algorithm for positioning dependent stems relatively
+ * to their "masters" is used. It is necessary to know which method
+ * to prefer for each stem at the time instructions are generated.
+ */
+ for ( i=0; i<ct->gd->hbundle->cnt; i++ )
+ {
+ stem = ct->gd->hbundle->stemlist[i];
+ if (!stem->ldone && !stem->rdone)
+ {
+ /* Set up upper edge (hend) and lower edge (hbase). */
+ hbase = stem->right.y;
+ hend = stem->left.y;
+
+ /* Find two points to interpolate the HStem between.
+ rp1 = lower, rp2 = upper. */
+ rp1 = -1;
+ rp2 = -1;
+
+ for (j=0; j<bluecnt; j++) {
+ if (blues[j].lowest == -1) // implies blues[j].highest==-1 too
+ continue;
+
+ if (bp[blues[j].lowest].y < hbase)
+ if (rp1==-1 || bp[rp1].y < bp[blues[j].lowest].y)
+ rp1=blues[j].lowest;
+
+ if (bp[blues[j].highest].y > hend)
+ if (rp2==-1 || bp[rp2].y > bp[blues[j].highest].y)
+ rp2=blues[j].highest;
+ }
+ rpts1[i] = rp1; rpts2[i] = rp2;
+
+ /* If a dependent stem has to be positioned by interpolating
+ * one of its edges between the edges of the master stem and
+ * we have found reference points to interpolate it between
+ * blues, then we prefer to interpolate it between blues. However
+ * we keep the standard handling for other types of dependent
+ * stems, since usually positioning relatively to the "master"
+ * stem is more important than positioning relatively to blues
+ * in such cases.
+ * Exception: nested stems marked for interpolation should be
+ * positioned by interpolating between the edges of the nesting
+ * stem.
+ */
+ if (rp1!=-1 && rp2!=-1 && stem->master != NULL)
+ for (j=0; j<stem->master->dep_cnt; j++) {
+ if (stem->master->dependent[j].stem == stem &&
+ stem->master->dependent[j].dep_type == 'i' &&
+ (stem->master->left.y <= stem->left.y ||
+ stem->master->right.y >= stem->right.y)) {
+ stem->master = NULL;
+ break;
+ }
+ }
+ }
+ }
+
+ for ( i=0; i<ct->gd->hbundle->cnt; i++ )
+ {
+ stem = ct->gd->hbundle->stemlist[i];
+ if ( stem->master != NULL )
+ continue;
+ if (!stem->ldone && !stem->rdone)
+ {
+ hbase = stem->right.y;
+ hend = stem->left.y;
+
+ rp1 = rpts1[i]; rp2 = rpts2[i];
+ /* Reference points not found? Fall back to old method. */
+ if (rp1==-1 || rp2==-1) {
+ geninstrs(ct, stem, NULL, false);
+ continue;
+ }
+
+ bpt = ept = -1;
+ if ( !stem->ghost || stem->width == 21 ) {
+ init_stem_edge(ct, stem, false);
+ bpt = ct->edge.refpt;
+ }
+ if ( !stem->ghost || stem->width == 20 ) {
+ init_stem_edge(ct, stem, true);
+ ept = ct->edge.refpt;
+ }
+ if ( bpt == -1 && ept == -1 )
+ continue;
+
+ /* Align the stem relatively to rp0 and rp1. */
+ mdrp_end = ept != -1 &&
+ fabs(bp[rp2].y - hbase) < 0.2*fabs(bp[rp2].y - bp[rp1].y);
+ mdrp_base = bpt != -1 &&
+ fabs(bp[rp1].y - hend) < 0.2*fabs(bp[rp2].y - bp[rp1].y);
+
+ if (mdrp_end || mdrp_base) {
+ if (mdrp_end) init_stem_edge(ct, stem, true);
+ else init_stem_edge(ct, stem, false);
+
+ if (ct->edge.refpt == -1) continue;
+
+ if (mdrp_end) ct->pt = push2points(ct->pt, ct->edge.refpt, rp2);
+ else ct->pt = push2points(ct->pt, ct->edge.refpt, rp1);
+
+ *(ct->pt)++ = SRP0;
+ *(ct->pt)++ = DUP;
+ *(ct->pt)++ = MDRP_grey;
+ *(ct->pt)++ = MDAP_rnd;
+ }
+ else if ( bpt == -1 || ept == -1 ) {
+ ip_base = ( ept == -1 );
+ init_stem_edge(ct, stem, !ip_base);
+ if ( ct->gic->fpgm_done ) {
+ callargs[0] = ct->edge.refpt;
+ callargs[1] = rp1;
+ callargs[2] = rp2;
+ callargs[3] = 8;
+ ct->pt = pushnums(ct->pt, 4, callargs);
+ *(ct->pt)++ = CALL;
+ }
+ else {
+ callargs[0] = ct->edge.refpt;
+ callargs[1] = rp1;
+ callargs[2] = rp2;
+ ct->pt = pushnums(ct->pt, 3, callargs);
+ *(ct->pt)++ = SRP2;
+ *(ct->pt)++ = SRP1;
+ *(ct->pt)++ = DUP;
+ *(ct->pt)++ = IP;
+ *(ct->pt)++ = MDAP_rnd;
+ }
+ }
+ else {
+ ip_base = fabs(bp[rp2].y - hend) < fabs(bp[rp1].y - hbase);
+ opp = ip_base ? ept : bpt;
+ init_stem_edge(ct, stem, !ip_base);
+
+ if (ct->edge.refpt == -1) continue;
+
+ if ( ct->gic->fpgm_done ) {
+ callargs[0] = opp;
+ callargs[1] = ct->edge.refpt;
+ callargs[2] = rp1;
+ callargs[3] = rp2;
+ callargs[4] = 13;
+ ct->pt = pushnums(ct->pt, 5, callargs);
+ *(ct->pt)++ = CALL;
+ } else {
+ callargs[0] = ct->edge.refpt;
+ callargs[1] = rp1;
+ callargs[2] = rp2;
+ ct->pt = pushnums(ct->pt, 3, callargs);
+ *(ct->pt)++ = SRP2;
+ *(ct->pt)++ = SRP1;
+ *(ct->pt)++ = DUP;
+ *(ct->pt)++ = IP;
+ *(ct->pt)++ = MDAP_rnd;
+ }
+ }
+
+ ct->rp0 = ct->edge.refpt;
+ finish_stem(stem, use_rp1, keep_old_rp0, ct);
+ if ( instruct_serif_stems || instruct_ball_terminals )
+ instruct_serifs(ct, stem);
+
+ instruct_dependent(ct, stem);
+ }
+ }
+ free(rpts1);
+ free(rpts2);
+}
+
+/*
+ * High-level function for instructing vertical stems.
+ *
+ * TODO! CJK hinting may need different function (VStemGeninstCJK?)
+ */
+static void VStemGeninst(InstrCt *ct) {
+ StemData *stem, *prev=NULL;
+ int i;
+
+ if (ct->rp0 != ct->ptcnt) {
+ ct->pt = pushpoint(ct->pt, ct->ptcnt);
+ *(ct->pt)++ = MDAP_rnd;
+ ct->rp0 = ct->ptcnt;
+ }
+
+ if ( ct->gd->vbundle != NULL ) {
+ for ( i=0; i<ct->gd->vbundle->cnt; i++ ) {
+ stem = ct->gd->vbundle->stemlist[i];
+ if ((!stem->ldone || !stem->rdone) && stem->master == NULL) {
+
+ if (prev != NULL && prev->rightidx != -1 && ct->rp0 != prev->rightidx) {
+ ct->pt = pushpoint(ct->pt, prev->rightidx);
+ *(ct->pt)++ = SRP0;
+ ct->rp0 = prev->rightidx;
+ }
+ geninstrs(ct, stem, prev, true);
+ prev = stem;
+ }
+ }
+ }
+
+ /* instruct right sidebearing */
+ if (ct->sc->width != 0) {
+ if ( ct->gic->fpgm_done && !control_counters ) {
+ ct->pt = push2nums(ct->pt, ct->ptcnt+1, 1);
+ *(ct->pt)++ = CALL;
+ } else {
+ /* select rp0 at the right edge of last stem - geninstrs() didn't. */
+ /* TODO! after some time, move this to geninstrs(), to save space. */
+ if (prev != NULL && prev->rightidx != -1 && ct->rp0 != prev->rightidx) {
+ ct->pt = pushpoint(ct->pt, prev->rightidx);
+ *(ct->pt)++ = SRP0;
+ ct->rp0 = prev->rightidx;
+ }
+ ct->pt = pushpoint(ct->pt, ct->ptcnt+1);
+ *(ct->pt)++ = MDRP_rp0_rnd_white;
+ }
+ ct->rp0 = ct->ptcnt+1;
+ }
+}
+
+/******************************************************************************
+ *
+ * Everything related with diagonal hinting goes here
+ *
+ ******************************************************************************/
+
+#define DIAG_MIN_DISTANCE (0.84375)
+
+static int ds_cmp( const void *_s1, const void *_s2 ) {
+ StemData * const *s1 = _s1, * const *s2 = _s2;
+
+ BasePoint *bp1, *bp2;
+ bp1 = (*s1)->unit.y > 0 ? &(*s1)->keypts[0]->base : &(*s1)->keypts[2]->base;
+ bp2 = (*s2)->unit.y > 0 ? &(*s2)->keypts[0]->base : &(*s2)->keypts[2]->base;
+ if ( bp1->x < bp2->x || ( bp1->x == bp2->x && bp1->y < bp2->y ))
+return( -1 );
+ else if ( bp2->x < bp1->x || ( bp2->x == bp1->x && bp2->y < bp1->y ))
+return( 1 );
+
+return( 0 );
+}
+
+/* Takes a line defined by two points and returns a vector decribed as a
+ * pair of x and y values, such that the value (x2 + y2) is equal to 1.
+ * Note that the BasePoint structure is used to store the vector, although
+ * it is not a point itself. This is just because that structure has "x"
+ * and "y" fields which can be used for our purpose.
+ */
+static BasePoint GetVector ( BasePoint *top,BasePoint *bottom,int orth ) {
+ real catx, caty, hyp, temp;
+ BasePoint ret;
+
+ catx = top->x - bottom->x; caty = top->y - bottom->y;
+ hyp = sqrt(( catx*catx ) + ( caty*caty ));
+ ret.y = caty/hyp; ret.x = catx/hyp;
+
+ if( orth ) {
+ temp = ret.x; ret.x = -ret.y; ret.y = temp;
+ }
+return( ret );
+}
+
+static int SetDStemKeyPoint( InstrCt *ct,StemData *stem,PointData *pd,int aindex ) {
+
+ int nextidx, previdx, cpidx, prev_outer, next_outer, is_start;
+ int nsidx, psidx, sidx;
+ uint8 flag;
+ PointData *ncpd, *pcpd, *cpd, *best = NULL;
+ real prevdot, nextdot, cpdist;
+
+ if ( pd == NULL )
+return( false );
+
+ flag = fabs( stem->unit.y ) > fabs( stem->unit.x ) ? tf_y : tf_x;
+ is_start = ( aindex == 0 || aindex == 2 );
+ prevdot = ( pd->prevunit.x * stem->unit.x ) +
+ ( pd->prevunit.y * stem->unit.y );
+ nextdot = ( pd->nextunit.x * stem->unit.x ) +
+ ( pd->nextunit.y * stem->unit.y );
+ prev_outer = IsStemAssignedToPoint( pd,stem,false ) != -1 &&
+ (( is_start && prevdot < 0 ) || ( !is_start && prevdot > 0 ));
+ next_outer = IsStemAssignedToPoint( pd,stem,true ) != -1 &&
+ (( is_start && nextdot < 0 ) || ( !is_start && nextdot > 0 ));
+
+ if ( pd->ttfindex >= ct->gd->realcnt ) {
+ nextidx = pd->sp->nextcpindex;
+ previdx = pd->sp->prev->from->nextcpindex;
+ ncpd = &ct->gd->points[nextidx];
+ pcpd = &ct->gd->points[previdx];
+ psidx = IsStemAssignedToPoint( pcpd,stem,true );
+ nsidx = IsStemAssignedToPoint( ncpd,stem,false );
+
+ if ( psidx == -1 && nsidx == -1 )
+return( false );
+
+ if ( psidx > -1 && nsidx > -1 )
+ best = ( prev_outer ) ? pcpd : ncpd;
+ else
+ best = ( psidx > -1 ) ? pcpd : ncpd;
+
+ } else if (( !pd->sp->nonextcp && next_outer ) || ( !pd->sp->noprevcp && prev_outer )) {
+ cpidx = ( prev_outer ) ? pd->sp->prev->from->nextcpindex : pd->sp->nextcpindex;
+ cpd = &ct->gd->points[cpidx];
+ sidx = IsStemAssignedToPoint( cpd,stem,prev_outer );
+
+ if ( sidx != -1 ) {
+ cpdist = fabs(( pd->base.x - cpd->base.x ) * stem->unit.x +
+ ( pd->base.y - cpd->base.y ) * stem->unit.y );
+ if (( cpdist > stem->clen/2 ) ||
+ (!(ct->touched[pd->ttfindex] & flag) && !(ct->affected[pd->ttfindex] & flag) &&
+ ( ct->touched[cpd->ttfindex] & flag || ct->affected[cpd->ttfindex] & flag )))
+ best = cpd;
+ }
+ if ( best == NULL ) best = pd;
+ } else
+ best = pd;
+
+ stem->keypts[aindex] = best;
+return( true );
+}
+
+static void AssignLineToPoint( DiagPointInfo *diagpts,StemData *stem,int idx,int is_l ) {
+ int num, base, i;
+ PointData *pd1, *pd2;
+
+ num = diagpts[idx].count;
+ base = ( is_l ) ? 0 : 2;
+ pd1 = stem->keypts[base];
+ pd2 = stem->keypts[base+1];
+ for ( i=0; i<num; i++ ) {
+ if ( diagpts[idx].line[i].pd1 == pd1 && diagpts[idx].line[i].pd2 == pd2 )
+return;
+ }
+
+ diagpts[idx].line[num].pd1 = stem->keypts[base];
+ diagpts[idx].line[num].pd2 = stem->keypts[base+1];
+ diagpts[idx].line[num].done = false;
+ diagpts[idx].count++;
+return;
+}
+
+/* Convert the existing diagonal stem layout to glyph data, containing
+ * information about points assigned to each stem. Then run on stem chunks
+ * and associate with each point the line it should be aligned by. Note that
+ * we have to do this on a relatively early stage, as it may be important
+ * to know, if the given point is subject to the subsequent diagonale hinting,
+ * before any actual processing of diagonal stems is started.
+ */
+static void InitDStemData( InstrCt *ct ) {
+ DiagPointInfo *diagpts = ct->diagpts;
+ int i, j, idx, previdx, nextidx, num1, num2, psidx, nsidx, is_l, cnt=0;
+ real prevlsp, prevrsp, prevlep, prevrep, lpos, rpos;
+ GlyphData *gd;
+ StemData *stem;
+ PointData *ls, *rs, *le, *re, *tpd, *ppd, *npd;
+ struct stem_chunk *chunk;
+
+ gd = ct->gd;
+
+ for ( i=0; i<gd->stemcnt; i++ ) {
+ stem = &gd->stems[i];
+ if ( stem->toobig )
+ continue;
+ if (( stem->unit.y > -.05 && stem->unit.y < .05 ) ||
+ ( stem->unit.x > -.05 && stem->unit.x < .05 ))
+ continue;
+ if ( stem->lpcnt < 2 || stem->rpcnt < 2 )
+ continue;
+
+ prevlsp = prevrsp = 1e4;
+ prevlep = prevrep = -1e4;
+ ls = rs = le = re = NULL;
+ for ( j=0; j<stem->chunk_cnt; j++ ) {
+ chunk = &stem->chunks[j];
+ if ( chunk->l != NULL ) {
+ lpos = ( chunk->l->base.x - stem->left.x )*stem->unit.x +
+ ( chunk->l->base.y - stem->left.y )*stem->unit.y;
+ if ( lpos < prevlsp ) {
+ ls = chunk->l; prevlsp = lpos;
+ }
+ if ( lpos > prevlep ) {
+ le = chunk->l; prevlep = lpos;
+ }
+ }
+ if ( chunk->r != NULL ) {
+ rpos = ( chunk->r->base.x - stem->right.x )*stem->unit.x +
+ ( chunk->r->base.y - stem->right.y )*stem->unit.y;
+ if ( rpos < prevrsp ) {
+ rs = chunk->r; prevrsp = rpos;
+ }
+ if ( rpos > prevrep ) {
+ re = chunk->r; prevrep = rpos;
+ }
+ }
+ }
+
+ /* Swap "left" and "right" sides for vectors pointing north-east,
+ * so that the "left" side is always determined along the x axis
+ * rather than relatively to the vector direction */
+ num1 = ( stem->unit.y > 0 ) ? 0 : 2;
+ num2 = ( stem->unit.y > 0 ) ? 2 : 0;
+ if (!SetDStemKeyPoint( ct,stem,ls,num1 ) || !SetDStemKeyPoint( ct,stem,rs,num2 ))
+ continue;
+
+ num1 = ( stem->unit.y > 0 ) ? 1 : 3;
+ num2 = ( stem->unit.y > 0 ) ? 3 : 1;
+ if (!SetDStemKeyPoint( ct,stem,le,num1 ) || !SetDStemKeyPoint( ct,stem,re,num2 ))
+ continue;
+
+ for ( j=0; j<gd->pcnt; j++ )
+ gd->points[j].ticked = false;
+ for ( j=0; j<gd->pcnt; j++ ) if ( gd->points[j].sp != NULL ) {
+ tpd = &gd->points[j];
+ idx = tpd->ttfindex;
+ psidx = nsidx = -1;
+ if ( idx < gd->realcnt ) {
+ if ( !tpd->ticked && diagpts[idx].count < 2 && (
+ ( psidx = IsStemAssignedToPoint( tpd,stem,false )) > -1 ||
+ ( nsidx = IsStemAssignedToPoint( tpd,stem,true )) > -1)) {
+
+ is_l = ( nsidx > -1 ) ? tpd->next_is_l[nsidx] : tpd->prev_is_l[psidx];
+ if ( stem->unit.y < 0 ) is_l = !is_l;
+ AssignLineToPoint( diagpts,stem,idx,is_l );
+ tpd->ticked = true;
+ }
+ } else {
+ previdx = tpd->sp->prev->from->nextcpindex;
+ nextidx = tpd->sp->nextcpindex;
+ ppd = &gd->points[previdx];
+ npd = &gd->points[nextidx];
+ if (!ppd->ticked && diagpts[previdx].count < 2 &&
+ ( nsidx = IsStemAssignedToPoint( ppd,stem,true )) > -1 ) {
+
+ is_l = ppd->next_is_l[nsidx];
+ if ( stem->unit.y < 0 ) is_l = !is_l;
+ AssignLineToPoint( diagpts,stem,previdx,is_l );
+ ppd->ticked = true;
+ }
+ if (!npd->ticked && diagpts[nextidx].count < 2 &&
+ ( psidx = IsStemAssignedToPoint( npd,stem,false )) > -1 ) {
+
+ is_l = npd->prev_is_l[psidx];
+ if ( stem->unit.y < 0 ) is_l = !is_l;
+ AssignLineToPoint( diagpts,stem,nextidx,is_l );
+ npd->ticked = true;
+ }
+ }
+ }
+ ct->diagstems[cnt++] = stem;
+ }
+ qsort( ct->diagstems,cnt,sizeof( StemData *),ds_cmp );
+ ct->diagcnt = cnt;
+}
+
+/* Usually we have to start doing each diagonal stem from the point which
+ * is most touched in any directions.
+ */
+static int FindDiagStartPoint( StemData *stem, uint8 *touched ) {
+ int i;
+
+ for ( i=0; i<4; ++i ) {
+ if (( touched[stem->keypts[i]->ttfindex] & tf_x ) &&
+ ( touched[stem->keypts[i]->ttfindex] & tf_y ))
+return( i );
+ }
+
+ for ( i=0; i<4; ++i ) {
+ if (( stem->unit.x > stem->unit.y &&
+ touched[stem->keypts[i]->ttfindex] & tf_y ) ||
+ ( stem->unit.y > stem->unit.x &&
+ touched[stem->keypts[i]->ttfindex] & tf_x ))
+return( i );
+ }
+
+ for ( i=0; i<4; ++i ) {
+ if ( touched[stem->keypts[i]->ttfindex] & ( tf_x | tf_y ))
+return( i );
+ }
+return( 0 );
+}
+
+/* Check the directions at which the given point still can be moved
+ * (i. e. has not yet been touched) and set freedom vector to that
+ * direction in case it has not already been set.
+ */
+static int SetFreedomVector( uint8 **instrs,int pnum,
+ uint8 *touched,DiagPointInfo *diagpts,BasePoint *norm,BasePoint *fv,int pvset,int fpgm_ok ) {
+
+ int i, pushpts[3];
+ PointData *start=NULL, *end=NULL;
+ BasePoint newfv;
+
+ if (( touched[pnum] & tf_d ) && !( touched[pnum] & tf_x ) && !( touched[pnum] & tf_y )) {
+ for ( i=0 ; i<diagpts[pnum].count ; i++) {
+ if ( diagpts[pnum].line[i].done ) {
+ start = diagpts[pnum].line[i].pd1;
+ end = diagpts[pnum].line[i].pd2;
+ }
+ }
+
+ /* This should never happen */
+ if ( start == NULL || end == NULL )
+return( false );
+
+ newfv = GetVector( &start->base,&end->base,false );
+ if ( !UnitsParallel( fv,&newfv,true )) {
+ fv->x = newfv.x; fv->y = newfv.y;
+
+ pushpts[0] = start->ttfindex; pushpts[1] = end->ttfindex;
+ *instrs = pushpoints( *instrs,2,pushpts );
+ *(*instrs)++ = 0x08; /*SFVTL[parallel]*/
+ }
+
+return( true );
+
+ } else if ( touched[pnum] & tf_x && !(touched[pnum] & tf_d) && !(touched[pnum] & tf_y)) {
+ if (!( RealNear( fv->x,0 ) && RealNear( fv->y,1 ))) {
+ *(*instrs)++ = 0x04; /*SFVTCA[y-axis]*/
+ fv->x = 0; fv->y = 1;
+ }
+return( true );
+
+ } else if ( touched[pnum] & tf_y && !(touched[pnum] & tf_d) && !(touched[pnum] & tf_x)) {
+ if (!( RealNear( fv->x,1 ) && RealNear( fv->y,0 ))) {
+ *(*instrs)++ = 0x05; /*SFVTCA[x-axis]*/
+ fv->x = 1; fv->y = 0;
+ }
+return( true );
+ } else if ( !(touched[pnum] & (tf_x|tf_y|tf_d))) {
+ if ( !UnitsParallel( fv,norm,true )) {
+ fv->x = norm->x; fv->y = norm->y;
+
+ if ( pvset )
+ *(*instrs)++ = 0x0E; /*SFVTPV*/
+ else {
+ pushpts[0] = EF2Dot14(norm->x);
+ pushpts[1] = EF2Dot14(norm->y);
+ if ( fpgm_ok ) {
+ pushpts[2] = 21;
+ *instrs = pushpoints( *instrs,3,pushpts );
+ *(*instrs)++ = CALL; /* aspect-ratio correction */
+ } else
+ *instrs = pushpoints( *instrs,2,pushpts );
+
+ *(*instrs)++ = 0x0b; /* SFVFS */
+ }
+ }
+return( true );
+ }
+return( false );
+}
+
+static int MarkLineFinished( int pnum,int startnum,int endnum,DiagPointInfo *diagpts ) {
+ int i;
+
+ for ( i=0; i<diagpts[pnum].count; i++ ) {
+ if (( diagpts[pnum].line[i].pd1->ttfindex == startnum ) &&
+ ( diagpts[pnum].line[i].pd2->ttfindex == endnum )) {
+
+ diagpts[pnum].line[i].done = 2;
+return( true );
+ }
+ }
+return( false );
+}
+
+static uint8 *FixDStemPoint ( InstrCt *ct,StemData *stem,
+ int pt,int refpt,int firstedge,int cvt,BasePoint *fv ) {
+ uint8 *instrs, *touched;
+ DiagPointInfo *diagpts;
+
+ diagpts = ct->diagpts;
+ touched = ct->touched;
+ instrs = ct->pt;
+
+ if ( SetFreedomVector( &instrs,pt,touched,diagpts,&stem->l_to_r,fv,true,
+ ct->gic->fpgm_done && ct->gic->prep_done )) {
+ if ( refpt == -1 ) {
+ if (( fv->x == 1 && !( touched[pt] & tf_x )) ||
+ ( fv->y == 1 && !( touched[pt] & tf_y ))) {
+
+ instrs = pushpoint( instrs,pt );
+ *instrs++ = MDAP;
+ } else {
+ instrs = pushpoint( instrs,pt );
+ *instrs++ = SRP0;
+ }
+ ct->rp0 = pt;
+ } else {
+ if ( refpt != ct->rp0 ) {
+ instrs = pushpoint( instrs,refpt );
+ *instrs++ = SRP0;
+ ct->rp0 = refpt;
+ }
+
+ if ( cvt < 0 ) {
+ instrs = pushpoint( instrs,pt );
+ *instrs++ = MDRP_grey;
+ } else {
+ instrs = pushpointstem( instrs,pt,cvt );
+ *instrs++ = MIRP_rp0_min_black;
+ ct->rp0 = pt;
+ }
+ }
+ touched[pt] |= tf_d;
+
+ if (!MarkLineFinished( pt,stem->keypts[0]->ttfindex,stem->keypts[1]->ttfindex,diagpts ))
+ MarkLineFinished( pt,stem->keypts[2]->ttfindex,stem->keypts[3]->ttfindex,diagpts );
+ }
+return( instrs );
+}
+
+static int DStemHasSnappableCorners ( InstrCt *ct,StemData *stem,PointData *pd1,PointData *pd2 ) {
+ uint8 *touched = ct->touched;
+
+ /* We should be dealing with oncurve points */
+ if ( pd1->sp == NULL || pd2->sp == NULL )
+return( false );
+
+ /* points should not be lined up vertically or horizontally */
+ if (fabs( pd1->base.x - pd2->base.x ) <= ct->gic->fudge ||
+ fabs( pd1->base.y - pd2->base.y ) <= ct->gic->fudge )
+return( false );
+
+ if (( pd1->x_corner == 1 && !( touched[pd1->ttfindex] & tf_y ) &&
+ pd2->y_corner == 1 && !( touched[pd2->ttfindex] & tf_x )) ||
+ ( pd1->y_corner == 1 && !( touched[pd1->ttfindex] & tf_x ) &&
+ pd2->x_corner == 1 && !( touched[pd2->ttfindex] & tf_y )))
+return( true );
+
+return( false );
+}
+
+static uint8 *SnapDStemCorners ( InstrCt *ct,StemData *stem,PointData *pd1,PointData *pd2,BasePoint *fv ) {
+ uint8 *instrs, *touched;
+ int xbase, ybase;
+
+ instrs = ct->pt;
+ touched = ct->touched;
+
+ if ( pd1->x_corner && pd2->y_corner ) {
+ xbase = pd1->ttfindex; ybase = pd2->ttfindex;
+ } else {
+ xbase = pd2->ttfindex; ybase = pd1->ttfindex;
+ }
+
+ *(ct->pt)++ = SVTCA_x;
+ ct->pt = push2points( ct->pt,ybase,xbase );
+ *(ct->pt)++ = touched[xbase] & tf_x ? MDAP : MDAP_rnd;
+ *(ct->pt)++ = MDRP_min_black;
+ *(ct->pt)++ = SVTCA_y;
+ ct->pt = push2points( ct->pt,xbase,ybase );
+ *(ct->pt)++ = touched[ybase] & tf_y ? MDAP : MDAP_rnd;
+ *(ct->pt)++ = MDRP_min_black;
+
+ touched[xbase] |= ( tf_x | tf_y );
+ touched[ybase] |= ( tf_x | tf_y );
+ fv->x = 0; fv->y = 1;
+
+return( instrs );
+}
+
+/* A basic algorithm for hinting diagonal stems:
+ * -- iterate through diagonal stems, ordered from left to right;
+ * -- for each stem, find the most touched point, to start from,
+ * and fix that point. TODO: the positioning should be done
+ * relatively to points already touched by x or y;
+ * -- position the second point on the same edge, using dual projection
+ * vector;
+ * -- link to the second edge and repeat the same operation.
+ *
+ * For each point we first determine a direction at which it still can
+ * be moved. If a point has already been positioned relatively to another
+ * diagonal line, then we move it along that diagonale. Thus this algorithm
+ * can handle things like "V" where one line's ending point is another
+ * line's starting point without special exceptions.
+ */
+static uint8 *FixDstem( InstrCt *ct, StemData *ds, BasePoint *fv ) {
+ int startnum, a1, a2, b1, b2, firstedge, cvt;
+ int x_ldup, y_ldup, x_edup, y_edup, dsc1, dsc2;
+ PointData *v1, *v2;
+ uint8 *touched;
+ int pushpts[3];
+
+ if ( ds->ldone && ds->rdone )
+return( ct->pt );
+
+ touched = ct->touched;
+
+ dsc1 = DStemHasSnappableCorners( ct,ds,ds->keypts[0],ds->keypts[2] );
+ dsc2 = DStemHasSnappableCorners( ct,ds,ds->keypts[1],ds->keypts[3] );
+
+ if ( dsc1 || dsc2 ) {
+ ct->pt = pushF26Dot6( ct->pt,.59662 );
+ *(ct->pt)++ = SMD;
+
+ if ( dsc1 )
+ SnapDStemCorners( ct,ds,ds->keypts[0],ds->keypts[2],fv );
+ if ( dsc2 )
+ SnapDStemCorners( ct,ds,ds->keypts[1],ds->keypts[3],fv );
+
+ ct->pt = pushF26Dot6( ct->pt,DIAG_MIN_DISTANCE );
+ *(ct->pt)++ = SMD;
+ }
+
+ if ( !dsc1 || !dsc2 ) {
+ startnum = FindDiagStartPoint( ds,touched );
+ a1 = ds->keypts[startnum]->ttfindex;
+ if (( startnum == 0 ) || ( startnum == 1 )) {
+ firstedge = true;
+ v1 = ds->keypts[0]; v2 = ds->keypts[1];
+ a2 = ( startnum == 1 ) ? ds->keypts[0]->ttfindex : ds->keypts[1]->ttfindex;
+ b1 = ( startnum == 1 ) ? ds->keypts[3]->ttfindex : ds->keypts[2]->ttfindex;
+ b2 = ( startnum == 1 ) ? ds->keypts[2]->ttfindex : ds->keypts[3]->ttfindex;
+ } else {
+ firstedge = false;
+ v1 = ds->keypts[2]; v2 = ds->keypts[3];
+ a2 = ( startnum == 3 ) ? ds->keypts[2]->ttfindex : ds->keypts[3]->ttfindex;
+ b1 = ( startnum == 3 ) ? ds->keypts[1]->ttfindex : ds->keypts[0]->ttfindex;
+ b2 = ( startnum == 3 ) ? ds->keypts[0]->ttfindex : ds->keypts[1]->ttfindex;
+ }
+
+ /* Always put the calculated stem width into the CVT table, unless it is
+ * already there. This approach would be wrong for vertical or horizontal
+ * stems, but for diagonales it is just unlikely that we can find an
+ * acceptable predefined value in StemSnapH or StemSnapV
+ */
+ cvt = TTF_getcvtval( ct->gic->sf,ds->width );
+
+ pushpts[0] = EF2Dot14(ds->l_to_r.x);
+ pushpts[1] = EF2Dot14(ds->l_to_r.y);
+ if ( ct->gic->fpgm_done && ct->gic->prep_done ) {
+ pushpts[2] = 21;
+ ct->pt = pushnums( ct->pt, 3, pushpts );
+ *(ct->pt)++ = CALL; /* Aspect ratio correction */
+ } else
+ ct->pt = pushnums( ct->pt, 2, pushpts );
+ *(ct->pt)++ = 0x0A; /* SPVFS */
+
+ pushpts[0] = v1->ttfindex; pushpts[1] = v2->ttfindex;
+
+ x_ldup =( touched[a1] & tf_x && touched[a2] & tf_x ) ||
+ ( touched[b1] & tf_x && touched[b2] & tf_x );
+ y_ldup =( touched[a1] & tf_y && touched[a2] & tf_y ) ||
+ ( touched[b1] & tf_y && touched[b2] & tf_y );
+ x_edup =( touched[a1] & tf_x && touched[b1] & tf_x ) ||
+ ( touched[a2] & tf_x && touched[b2] & tf_x );
+ y_edup =( touched[a1] & tf_y && touched[b1] & tf_y ) ||
+ ( touched[a2] & tf_y && touched[b2] & tf_y );
+
+ if (( x_ldup && !y_edup ) || ( y_ldup && !x_edup)) {
+
+ ct->pt = FixDStemPoint ( ct,ds,a1,-1,firstedge,-1,fv );
+ ct->pt = FixDStemPoint ( ct,ds,b2,-1,firstedge,-1,fv );
+ ct->pt = FixDStemPoint ( ct,ds,b1,a1,firstedge,cvt,fv );
+ ct->pt = FixDStemPoint ( ct,ds,a2,b2,firstedge,cvt,fv );
+ } else {
+ ct->pt = FixDStemPoint ( ct,ds,a1,-1,firstedge,-1,fv );
+ ct->pt = FixDStemPoint ( ct,ds,a2,a1,firstedge,-1,fv );
+ ct->pt = FixDStemPoint ( ct,ds,b1,a1,firstedge,cvt,fv );
+ ct->pt = FixDStemPoint ( ct,ds,b2,b1,firstedge,-1,fv );
+ }
+ }
+
+ ds->ldone = ds->rdone = true;
+return( ct->pt );
+}
+
+static uint8 *FixPointOnLine ( DiagPointInfo *diagpts,PointVector *line,
+ PointData *pd,InstrCt *ct,BasePoint *fv,BasePoint *pv,int *rp1,int *rp2 ) {
+
+ uint8 *instrs, *touched;
+ BasePoint newpv;
+ int pushpts[4];
+
+ touched = ct->touched;
+ instrs = ct->pt;
+
+ newpv = GetVector( &line->pd1->base,&line->pd2->base,true );
+
+ if ( SetFreedomVector( &instrs,pd->ttfindex,touched,diagpts,&newpv,fv,false,
+ ct->gic->fpgm_done && ct->gic->prep_done )) {
+ if ( ct->rp0 != line->pd1->ttfindex ) {
+ instrs = pushpoint( instrs,line->pd1->ttfindex );
+ *instrs++ = SRP0;
+ ct->rp0 = line->pd1->ttfindex;
+ }
+ if ( ct->gic->fpgm_done ) {
+ pv->x = newpv.x; pv->y = newpv.y;
+
+ pushpts[0] = pd->ttfindex;
+ pushpts[1] = line->pd1->ttfindex;
+ pushpts[2] = line->pd2->ttfindex;
+ pushpts[3] = 19;
+ instrs = pushpoints( instrs,4,pushpts );
+ *instrs++ = CALL;
+ } else {
+ if ( !UnitsParallel( pv,&newpv,true )) {
+ pv->x = newpv.x; pv->y = newpv.y;
+
+ pushpts[0] = line->pd1->ttfindex; pushpts[1] = line->pd2->ttfindex;
+ instrs = pushpoints( instrs,2,pushpts );
+ *instrs++ = 0x07; /*SPVTL[orthogonal]*/
+ }
+
+ instrs = pushpoint( instrs,pd->ttfindex );
+ *instrs++ = MDRP_grey;
+ }
+ }
+return( instrs );
+}
+
+/* If a point has to be positioned just relatively to the diagonal
+ * line (no intersections, no need to maintain other directions),
+ * then we can interpolate it along that line. This usually produces
+ * better results for things like a Danish slashed "O".
+ */
+static uint8 *InterpolateAlongDiag ( DiagPointInfo *diagpts,PointVector *line,
+ PointData *pd,InstrCt *ct,BasePoint *fv,BasePoint *pv,int *rp1,int *rp2 ) {
+
+ uint8 *instrs, *touched;
+ BasePoint newpv;
+ int pushpts[3];
+
+ touched = ct->touched;
+ instrs = ct->pt;
+
+ if (diagpts[pd->ttfindex].count != 1 || touched[pd->ttfindex] & ( tf_x|tf_y ) ||
+ diagpts[pd->ttfindex].line[0].done > 1 )
+return( instrs );
+
+ newpv = GetVector( &line->pd1->base,&line->pd2->base,false );
+
+ if ( !UnitsParallel( pv,&newpv,false ) ||
+ *rp1 != line->pd1->ttfindex || *rp2 != line->pd1->ttfindex ) {
+
+ pushpts[0] = pd->ttfindex;
+ pushpts[1] = line->pd1->ttfindex;
+ pushpts[2] = line->pd2->ttfindex;
+ instrs = pushpoints( instrs,3,pushpts );
+ } else
+ instrs = pushpoint ( instrs,pd->ttfindex );
+
+ if ( !UnitsParallel( pv,&newpv,true )) {
+ pv->x = newpv.x; pv->y = newpv.y;
+
+ if ( *rp1 != line->pd1->ttfindex || *rp2 != line->pd1->ttfindex ) {
+ *instrs++ = DUP;
+ *instrs++ = 0x8a; /* ROLL */
+ *instrs++ = DUP;
+ *instrs++ = 0x8a; /* ROLL */
+ *instrs++ = 0x23; /* SWAP */
+ }
+ *instrs++ = 0x06; /* SPVTL[parallel] */
+ }
+
+ if ( !UnitsParallel( fv,&newpv,true )) {
+ *instrs++ = 0x0E; /* SFVTPV */
+ fv->x = newpv.x; fv->y = newpv.y;
+ }
+ if ( *rp1 != line->pd1->ttfindex || *rp2 != line->pd1->ttfindex ) {
+ *rp1 = line->pd1->ttfindex;
+ *rp2 = line->pd1->ttfindex;
+
+ *instrs++ = SRP1;
+ *instrs++ = SRP2;
+ }
+ *instrs++ = IP;
+ touched[pd->ttfindex] |= tf_d;
+ diagpts[pd->ttfindex].line[0].done = 2;
+return( instrs );
+}
+
+/* When all stem edges have already been positioned, run through other
+ * points which are known to be related with some diagonales and position
+ * them too. This may include both intersections and points which just
+ * lie on a diagonal line. This function does not care about starting/ending
+ * points of stems, unless they should be additionally positioned relatively
+ * to another stem. Thus is can handle things like "X" or "K".
+ */
+static uint8 *MovePointsToIntersections( InstrCt *ct,BasePoint *fv ) {
+
+ int i, j, ptcnt, rp1=-1, rp2=-1;
+ uint8 *touched;
+ BasePoint pv;
+ PointData *curpd, *npd, *ppd;
+ DiagPointInfo *diagpts;
+ StemData *ds;
+
+ touched = ct->touched;
+ ptcnt = ct->gd->realcnt;
+ diagpts = ct->diagpts;
+ pv.x = 1; pv.y = 0;
+
+ for ( i=0; i<ptcnt; i++ ) {
+ if ( diagpts[i].count > 0 ) {
+ for ( j=0; j<diagpts[i].count; j++ ) {
+ if ( !diagpts[i].line[j].done ) {
+ curpd = &ct->gd->points[i];
+
+ ct->pt = FixPointOnLine( diagpts,&diagpts[i].line[j],
+ curpd,ct,fv,&pv,&rp1,&rp2 );
+
+ diagpts[i].line[j].done = true;
+ touched[i] |= tf_d;
+ }
+ }
+ }
+ }
+
+ /* Second pass to interpolate points lying on diagonal lines (but not
+ * starting/ending stem points) along those lines. This operation, unlike
+ * moving points to diagonals, requires vectors to be set parallel to lines,
+ * and this is the reason for which it is done in a separate cycle
+ */
+ for ( i=0; i<ct->diagcnt; i++ ) {
+ ds = ct->diagstems[i];
+ if ( ds->ldone ) {
+ for ( j=0; j<ds->chunk_cnt; j++ ) if (( curpd = ds->chunks[j].l ) != NULL ) {
+ if ( curpd->ttfindex < ct->ptcnt ) {
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[curpd->ttfindex].line[0],
+ curpd,ct,fv,&pv,&rp1,&rp2 );
+ } else {
+ ppd = &ct->gd->points[curpd->sp->prev->from->nextcpindex];
+ npd = &ct->gd->points[curpd->sp->nextcpindex];
+ if ( IsStemAssignedToPoint(ppd, ds, true) != -1 )
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[ppd->ttfindex].line[0],
+ ppd,ct,fv,&pv,&rp1,&rp2 );
+ if ( IsStemAssignedToPoint(npd, ds, false) != -1 )
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[npd->ttfindex].line[0],
+ npd,ct,fv,&pv,&rp1,&rp2 );
+ }
+ }
+ }
+ if ( ds->rdone ) {
+ for ( j=0; j<ds->chunk_cnt; j++ ) if (( curpd = ds->chunks[j].r ) != NULL ) {
+ if ( curpd->ttfindex < ct->ptcnt ) {
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[curpd->ttfindex].line[0],
+ curpd,ct,fv,&pv,&rp1,&rp2 );
+ } else {
+ ppd = &ct->gd->points[curpd->sp->prev->from->nextcpindex];
+ npd = &ct->gd->points[curpd->sp->nextcpindex];
+ if ( IsStemAssignedToPoint(ppd, ds, true) != -1 )
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[ppd->ttfindex].line[0],
+ ppd,ct,fv,&pv,&rp1,&rp2 );
+ if ( IsStemAssignedToPoint(npd, ds, false) != -1 )
+ ct->pt = InterpolateAlongDiag ( diagpts,&diagpts[npd->ttfindex].line[0],
+ npd,ct,fv,&pv,&rp1,&rp2 );
+ }
+ }
+ }
+ }
+return( ct->pt );
+}
+
+static void TouchControlPoint( InstrCt *ct,PointData *pd,
+ int next,int *tobefixedy,int *tobefixedx,int *numx,int *numy ) {
+
+ int idx, cpidx;
+ PointData *cpd;
+ uint8 *touched = ct->touched;
+
+ idx = pd->ttfindex;
+ cpidx = next ? pd->sp->nextcpindex : pd->sp->prev->from->nextcpindex;
+ cpd = &ct->gd->points[cpidx];
+
+ if ( has_valid_dstem( cpd, !next ) != -1 ) {
+ /* if this control point is used to describe an implied spline
+ * point, then it is instructed as if it was an oncurve point */
+ if ( idx == 0xffff && touched[cpidx] & tf_d ) {
+ if (!( touched[cpidx] & tf_y )) {
+ tobefixedy[(*numy)++] = cpidx;
+ touched[cpidx] |= tf_y;
+ }
+
+ if (!( touched[cpidx] & tf_x )) {
+ tobefixedx[(*numx)++] = cpidx;
+ touched[cpidx] |= tf_x;
+ }
+ /* otherwise we just mark it as affected to prevent undesired
+ * interpolations */
+ } else if ( idx < ct->gd->realcnt && touched[idx] & tf_d ) {
+ ct->affected[cpidx] |= tf_x;
+ ct->affected[cpidx] |= tf_y;
+ }
+ }
+}
+
+/* Finally explicitly touch all affected points by X and Y (unless they
+ * have already been), so that subsequent IUP's can't distort our stems.
+ */
+static uint8 *TouchDStemPoints( InstrCt *ct,BasePoint *fv ) {
+
+ int i, ptcnt, numx=0, numy=0, idx;
+ int *tobefixedy, *tobefixedx;
+ uint8 *instrs, *touched;
+ PointData *pd;
+
+ touched = ct->touched;
+ instrs = ct->pt;
+ ptcnt = ct->gd->pcnt;
+
+ tobefixedy = calloc( ptcnt,sizeof( int ));
+ tobefixedx = calloc( ptcnt,sizeof( int ));
+
+ /* Ensure that the projection vector is no longer set to a diagonal line */
+ if ( fv->x == 1 && fv->y == 0 )
+ *instrs++ = 0x03; /* SPVTCA[x] */
+ else if ( fv->x == 0 && fv->y == 1 )
+ *instrs++ = 0x02; /* SPVTCA[y] */
+
+ for ( i=0; i<ptcnt; i++ ) if ( ct->gd->points[i].sp != NULL ) {
+ pd = &ct->gd->points[i];
+ if (( has_valid_dstem( pd,false )) != -1 ||
+ ( has_valid_dstem( pd,true )) != -1 ) {
+
+ idx = pd->ttfindex;
+ if ( idx < ct->gd->realcnt && touched[idx] & tf_d ) {
+ if (!( touched[idx] & tf_y )) {
+ tobefixedy[numy++] = idx;
+ touched[idx] |= tf_y;
+ }
+
+ if (!( touched[idx] & tf_x )) {
+ tobefixedx[numx++] = idx;
+ touched[idx] |= tf_x;
+ }
+ }
+ if ( !pd->sp->noprevcp )
+ TouchControlPoint( ct,pd,false,tobefixedy,tobefixedx,&numx,&numy );
+ if ( !pd->sp->nonextcp )
+ TouchControlPoint( ct,pd,true,tobefixedy,tobefixedx,&numx,&numy );
+ }
+ }
+
+ if ( numy>0 ) {
+ if ( !(fv->x == 0 && fv->y == 1) ) *instrs++ = SVTCA_y;
+ instrs = instructpoints ( instrs,numy,tobefixedy,MDAP );
+ }
+
+ if ( numx>0 ) {
+ if ( !(fv->x == 1 && fv->y == 0) || numy > 0 ) *instrs++ = SVTCA_x;
+ instrs = instructpoints ( instrs,numx,tobefixedx,MDAP );
+ }
+
+ if ( numx == 0 && numy == 0 ) *instrs++ = SVTCA_x;
+
+ free( tobefixedy );
+ free( tobefixedx );
+return( instrs );
+}
+
+static void DStemInfoGeninst( InstrCt *ct ) {
+ BasePoint fv;
+ int i;
+
+ if (ct->diagcnt == 0)
+return;
+
+ fv.x = 1; fv.y = 0;
+
+ ct->pt = pushF26Dot6( ct->pt,DIAG_MIN_DISTANCE );
+ *(ct->pt)++ = SMD; /* Set Minimum Distance */
+
+ for ( i=0; i<ct->diagcnt; i++ )
+ ct->pt = FixDstem ( ct,ct->diagstems[i],&fv );
+
+ ct->pt = MovePointsToIntersections( ct,&fv );
+ ct->pt = TouchDStemPoints ( ct,&fv);
+
+ ct->pt = pushF26Dot6( ct->pt,1.0 );
+ *(ct->pt)++ = SMD; /* Set Minimum Distance */
+
+ ct->xdir = fv.x;
+}
+
+/******************************************************************************
+ *
+ * Strong point interpolation
+ *
+ * TODO! Better optimization, if possible.
+ * TODO! leftmost and righmost bounds, if not already controlled by stems.
+ *
+ ******************************************************************************/
+
+/* To be used with qsort() - sorts edge array in ascending order. */
+struct stemedge {
+ int refpt;
+ double pos;
+};
+
+/* To be used with qsort() - sorts edge array in ascending order. */
+static int sortedges(const void *_e1, const void *_e2) {
+ const struct stemedge *e1 = _e1, *e2 = _e2;
+ return ( e1->pos > e2->pos );
+}
+
+static int AddEdge(InstrCt *ct, StemData *stem, int is_l, struct stemedge *edgelist, int cnt) {
+ real coord;
+ int i, skip, refidx;
+
+ if (!stem->ghost ||
+ (is_l && stem->width == 20) || (!is_l && stem->width == 21)) {
+
+ coord = is_l ?
+ ((real *) &stem->left.x)[!ct->xdir] : ((real *) &stem->right.x)[!ct->xdir];
+ refidx = is_l ? stem->leftidx : stem->rightidx;
+ for (i=skip=0; i<cnt; i++)
+ if (abs(coord - edgelist[i].pos) <= ct->gic->fudge ||
+ edgelist[i].refpt == refidx) {
+ skip=1;
+ break;
+ }
+ if (!skip && refidx != -1) {
+ edgelist[cnt ].refpt = refidx;
+ edgelist[cnt++].pos = coord;
+ }
+ }
+ return( cnt );
+}
+
+/* Optional feature: tries to maintain relative position of some important
+ * points between stems' edges, so that glyph's shape is mostly preserved
+ * when strongly gridfitted. This in terms of FreeType is called 'Strong Point
+ * Interpolation'. It now does more or else what it should, but generates large
+ * and sometimes incomplete code - see 'todos' above, and optimize_strongpts().
+ * Note: it would affect diagonals if done before instructing them.
+ *
+ * TODO: it now intrpolates strong points only between hints' edges.
+ * What about between leftmost/rightmost edge and leftmost/rightmost
+ * glyph extents, if they protrude beyond the edges?
+ */
+static void InterpolateStrongPoints(InstrCt *ct) {
+ StemBundle *bundle;
+ StemData *stem;
+ uint8 touchflag = ct->xdir?tf_x:tf_y;
+ real fudge;
+ struct stemedge edgelist[192];
+ int edgecnt=0, i, j;
+ int lpoint = -1, ledge=0;
+ int rpoint = -1;
+ int nowrp1 = 1;
+ int ldone = 0;
+
+ bundle = ( ct->xdir ) ? ct->gd->vbundle : ct->gd->hbundle;
+ if (bundle == NULL || bundle->cnt == 0)
+ return;
+
+ /* List all stem edges. List only active edges for ghost hints. */
+ for(i=0; i<bundle->cnt; i++) {
+ stem = bundle->stemlist[i];
+
+ edgecnt = AddEdge(ct, stem, ct->xdir, edgelist, edgecnt);
+ edgecnt = AddEdge(ct, stem, !ct->xdir, edgelist, edgecnt);
+ }
+
+ if (edgecnt < 2)
+return;
+
+ qsort(edgelist, edgecnt, sizeof(struct stemedge), sortedges);
+
+ /* Interpolate important points between subsequent edges */
+ for (i=0; i<edgecnt; i++) {
+ rpoint = edgelist[i].refpt;
+ if (rpoint == -1 || !(ct->touched[rpoint] & touchflag)) continue;
+
+ if (lpoint==-1) {
+ /* first edge */
+ lpoint = rpoint;
+ ledge = i;
+ }
+ else {
+ fudge = ct->gic->fudge;
+ ct->gic->fudge = (edgelist[i].pos-edgelist[ledge].pos)/2;
+ init_edge(ct, (edgelist[i].pos+edgelist[ledge].pos)/2, ALL_CONTOURS);
+ optimize_strongpts(ct); /* Special way is needed here. */
+ ct->gic->fudge = fudge;
+
+ if (!ct->edge.othercnt) {
+ nowrp1 = 1;
+ lpoint = rpoint;
+ ledge = i;
+ ldone = 0;
+ }
+ else if (ct->edge.refscore) {
+ if (!ldone) {
+ ct->pt = push2points(ct->pt, rpoint, lpoint);
+ *ct->pt++ = SRP1;
+ *ct->pt++ = SRP2;
+ }
+ else {
+ ct->pt = pushpoint(ct->pt, rpoint);
+ if (nowrp1) *ct->pt++ = SRP1;
+ else *ct->pt++ = SRP2;
+ nowrp1 = !nowrp1;
+ }
+
+ lpoint = rpoint;
+ ledge = i;
+ ldone = 1;
+
+ /* instruct points */
+ ct->pt = instructpoints(ct->pt, ct->edge.othercnt,
+ ct->edge.others, IP);
+ for (j=0; j<ct->edge.othercnt; j++)
+ ct->touched[ct->edge.others[j]] |= touchflag;
+ }
+
+ if (ct->edge.othercnt) {
+ free(ct->edge.others);
+ ct->edge.othercnt = 0;
+ }
+ }
+ }
+}
+
+/******************************************************************************
+ *
+ * Generate instructions for a glyph.
+ *
+ ******************************************************************************/
+
+static uint8 *dogeninstructions(InstrCt *ct) {
+ StemData *stem;
+ int max, i;
+ DStemInfo *dstem;
+ BlueData nbd;
+
+ /* Fill a temporary BlueData structure basing on the data stored in the global
+ * instruction context. This is needed for GlyphDataBuild(), as it accepts
+ * blue data only in this format
+ */
+ for ( i=0; i<ct->gic->bluecnt; i++ ) {
+ if ( ct->gic->blues[i].base < ct->gic->blues[i].overshoot ) {
+ nbd.blues[i][0] = ct->gic->blues[i].base;
+ nbd.blues[i][1] = ct->gic->blues[i].overshoot;
+ } else {
+ nbd.blues[i][0] = ct->gic->blues[i].overshoot;
+ nbd.blues[i][1] = ct->gic->blues[i].base;
+ }
+ }
+ nbd.bluecnt = ct->gic->bluecnt;
+ ct->gd = GlyphDataBuild( ct->sc,ct->gic->layer,&nbd,instruct_diagonal_stems );
+
+ /* Maximum instruction length is 6 bytes for each point in each dimension
+ * 2 extra bytes to finish up. And one byte to switch from x to y axis
+ * Diagonal take more space because we need to set the orientation on
+ * each stem, and worry about intersections, etc.
+ * That should be an over-estimate
+ */
+ max=2;
+ if ( ct->gd->hbundle!=NULL ) max += ct->ptcnt*8;
+ if ( ct->gd->vbundle!=NULL ) max += ct->ptcnt*8+4;
+ for ( dstem=ct->sc->dstem; dstem!=NULL; max+=7+4*6+100, dstem=dstem->next );
+ if ( ct->sc->md!=NULL ) max += ct->ptcnt*12;
+ max += ct->ptcnt*6; /* in case there are any rounds */
+ max += ct->ptcnt*6; /* paranoia */
+ ct->instrs = ct->pt = malloc(max);
+
+ /* Initially no stem hints are done */
+ if ( ct->gd->hbundle!=NULL ) {
+ for ( i=0; i<ct->gd->hbundle->cnt; i++ ) {
+ stem = ct->gd->hbundle->stemlist[i];
+ stem->ldone = stem->rdone = false;
+ }
+ }
+ if ( ct->gd->vbundle!=NULL ) {
+ for ( i=0; i<ct->gd->vbundle->cnt; i++ ) {
+ stem = ct->gd->vbundle->stemlist[i];
+ stem->ldone = stem->rdone = false;
+ }
+ }
+
+ if ( instruct_diagonal_stems ) {
+ /* Prepare info about diagonal stems to be used during edge optimization. */
+ /* These contents need to be explicitly freed after hinting diagonals. */
+ ct->diagstems = calloc(ct->gd->stemcnt, sizeof(StemData *));
+ ct->diagpts = calloc(ct->ptcnt, sizeof(struct diagpointinfo));
+ InitDStemData(ct);
+ }
+
+ /* We start from instructing horizontal features (=> movement in y)
+ * Do this first so that the diagonal hinter will have everything moved
+ * properly when it sets the projection vector
+ * Even if we aren't doing the diagonals, we do the blues.
+ */
+ ct->xdir = false;
+ *(ct->pt)++ = SVTCA_y;
+ snap_to_blues(ct);
+ HStemGeninst(ct);
+
+ /* Next instruct vertical features (=> movement in x). */
+ ct->xdir = true;
+ *(ct->pt)++ = SVTCA_x;
+ VStemGeninst(ct);
+
+ /* Then instruct diagonal stems (=> movement in x)
+ * This is done after vertical stems because it involves
+ * moving some points out-of their vertical stems.
+ */
+ if (instruct_diagonal_stems && ct->diagcnt > 0) DStemInfoGeninst(ct);
+
+ if ( interpolate_strong ) {
+ /* Adjust important points between hint edges. */
+ if (ct->xdir == false) *(ct->pt)++ = SVTCA_x;
+ ct->xdir = true;
+ InterpolateStrongPoints(ct);
+ ct->xdir = false;
+ *(ct->pt)++ = SVTCA_y;
+ InterpolateStrongPoints(ct);
+ }
+
+ /* Interpolate untouched points */
+ *(ct->pt)++ = IUP_y;
+ *(ct->pt)++ = IUP_x;
+
+ if ((ct->pt)-(ct->instrs) > max) IError(
+ "We're about to crash.\n"
+ "We miscalculated the glyph's instruction set length\n"
+ "When processing TTF instructions (hinting) of %s", ct->sc->name
+ );
+
+ if ( instruct_diagonal_stems ) {
+ free(ct->diagstems);
+ free(ct->diagpts);
+ }
+ GlyphDataFree( ct->gd );
+
+ ct->sc->ttf_instrs_len = (ct->pt)-(ct->instrs);
+ ct->sc->instructions_out_of_date = false;
+return ct->sc->ttf_instrs = realloc(ct->instrs,(ct->pt)-(ct->instrs));
+}
+
+void NowakowskiSCAutoInstr(GlobalInstrCt *gic, SplineChar *sc) {
+ int cnt, contourcnt;
+ BasePoint *bp;
+ int *contourends;
+ uint8 *clockwise;
+ uint8 *touched;
+ uint8 *affected;
+ SplineSet *ss;
+ RefChar *ref;
+ InstrCt ct;
+ int i;
+
+ if ( !sc->layers[gic->layer].order2 )
+return;
+
+ if ( sc->layers[gic->layer].refs!=NULL && sc->layers[gic->layer].splines!=NULL ) {
+ ff_post_error(_("Can't instruct this glyph"),
+ _("TrueType does not support mixed references and contours.\nIf you want instructions for %.30s you should either:\n * Unlink the reference(s)\n * Copy the inline contours into their own (unencoded\n glyph) and make a reference to that."),
+ sc->name );
+return;
+ }
+ for ( ref = sc->layers[gic->layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->transform[0]>=2 || ref->transform[0]<-2 ||
+ ref->transform[1]>=2 || ref->transform[1]<-2 ||
+ ref->transform[2]>=2 || ref->transform[2]<-2 ||
+ ref->transform[3]>=2 || ref->transform[3]<-2 )
+ break;
+ }
+ if ( ref!=NULL ) {
+ ff_post_error(_("Can't instruct this glyph"),
+ _("TrueType does not support references which\nare scaled by more than 200%%. But %1$.30s\nhas been in %2$.30s. Any instructions\nadded would be meaningless."),
+ ref->sc->name, sc->name );
+return;
+ }
+
+ if ( sc->ttf_instrs ) {
+ free(sc->ttf_instrs);
+ sc->ttf_instrs = NULL;
+ sc->ttf_instrs_len = 0;
+ }
+ SCNumberPoints(sc,gic->layer);
+ if ( autohint_before_generate && sc->changedsincelasthinted &&
+ !sc->manualhints )
+ SplineCharAutoHint(sc,gic->layer,NULL);
+
+ if ( sc->vstem==NULL && sc->hstem==NULL && sc->dstem==NULL && sc->md==NULL)
+return;
+
+ /* TODO!
+ *
+ * We're having problems with references utilizing 'use my metrics' that are
+ * rotated or flipped horizontally. Basically, such glyphs can get negative
+ * width and behave strangely when the glyph referred is instructed. Such
+ * widths are treated very differently under Freetype (OK) and Windows
+ * (terribly shifted), and I suppose other rasterizers can also complain.
+ * Perhaps we should advise turning 'use my metrics' off.
+ */
+
+ if ( sc->layers[gic->layer].splines==NULL )
+return;
+
+ /* Start dealing with the glyph */
+ contourcnt = 0;
+ for ( ss=sc->layers[gic->layer].splines; ss!=NULL; ss=ss->next, ++contourcnt );
+ cnt = SSTtfNumberPoints(sc->layers[gic->layer].splines);
+
+ contourends = malloc((contourcnt+1)*sizeof(int));
+ clockwise = calloc(contourcnt,1);
+ bp = malloc(cnt*sizeof(BasePoint));
+ touched = calloc(cnt,1);
+ affected = calloc(cnt,1);
+
+ contourcnt = cnt = 0;
+ for ( ss=sc->layers[gic->layer].splines; ss!=NULL; ss=ss->next ) {
+ touched[cnt] |= tf_startcontour;
+ cnt = SSAddPoints(ss,cnt,bp,NULL);
+ touched[cnt-1] |= tf_endcontour;
+ contourends[contourcnt] = cnt-1;
+ clockwise[contourcnt++] = SplinePointListIsClockwise(ss);
+ }
+ contourends[contourcnt] = 0;
+
+ for (i=0; i<gic->bluecnt; i++)
+ gic->blues[i].highest = gic->blues[i].lowest = -1;
+
+ ct.gic = gic;
+
+ ct.sc = sc;
+ ct.ss = sc->layers[gic->layer].splines;
+ ct.instrs = NULL;
+ ct.pt = NULL;
+ ct.ptcnt = cnt;
+ ct.contourends = contourends;
+ ct.clockwise = clockwise;
+ ct.bp = bp;
+ ct.touched = touched;
+ ct.affected = affected;
+ ct.diagstems = NULL;
+ ct.diagpts = NULL;
+
+ ct.rp0 = 0;
+
+ dogeninstructions(&ct);
+
+ free(touched);
+ free(affected);
+ free(bp);
+ free(contourends);
+ free(clockwise);
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/parsepfa.c b/dviware/dvisvgm/libs/ff-woff/fontforge/parsepfa.c
new file mode 100644
index 0000000000..9f3d5f8161
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/parsepfa.c
@@ -0,0 +1,583 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "psfont.h"
+
+const char *AdobeStandardEncoding[] = {
+/* 0000 */ ".notdef",
+/* 0001 */ ".notdef",
+/* 0002 */ ".notdef",
+/* 0003 */ ".notdef",
+/* 0004 */ ".notdef",
+/* 0005 */ ".notdef",
+/* 0006 */ ".notdef",
+/* 0007 */ ".notdef",
+/* 0008 */ ".notdef",
+/* 0009 */ ".notdef",
+/* 000a */ ".notdef",
+/* 000b */ ".notdef",
+/* 000c */ ".notdef",
+/* 000d */ ".notdef",
+/* 000e */ ".notdef",
+/* 000f */ ".notdef",
+/* 0010 */ ".notdef",
+/* 0011 */ ".notdef",
+/* 0012 */ ".notdef",
+/* 0013 */ ".notdef",
+/* 0014 */ ".notdef",
+/* 0015 */ ".notdef",
+/* 0016 */ ".notdef",
+/* 0017 */ ".notdef",
+/* 0018 */ ".notdef",
+/* 0019 */ ".notdef",
+/* 001a */ ".notdef",
+/* 001b */ ".notdef",
+/* 001c */ ".notdef",
+/* 001d */ ".notdef",
+/* 001e */ ".notdef",
+/* 001f */ ".notdef",
+/* 0020 */ "space",
+/* 0021 */ "exclam",
+/* 0022 */ "quotedbl",
+/* 0023 */ "numbersign",
+/* 0024 */ "dollar",
+/* 0025 */ "percent",
+/* 0026 */ "ampersand",
+/* 0027 */ "quoteright",
+/* 0028 */ "parenleft",
+/* 0029 */ "parenright",
+/* 002a */ "asterisk",
+/* 002b */ "plus",
+/* 002c */ "comma",
+/* 002d */ "hyphen",
+/* 002e */ "period",
+/* 002f */ "slash",
+/* 0030 */ "zero",
+/* 0031 */ "one",
+/* 0032 */ "two",
+/* 0033 */ "three",
+/* 0034 */ "four",
+/* 0035 */ "five",
+/* 0036 */ "six",
+/* 0037 */ "seven",
+/* 0038 */ "eight",
+/* 0039 */ "nine",
+/* 003a */ "colon",
+/* 003b */ "semicolon",
+/* 003c */ "less",
+/* 003d */ "equal",
+/* 003e */ "greater",
+/* 003f */ "question",
+/* 0040 */ "at",
+/* 0041 */ "A",
+/* 0042 */ "B",
+/* 0043 */ "C",
+/* 0044 */ "D",
+/* 0045 */ "E",
+/* 0046 */ "F",
+/* 0047 */ "G",
+/* 0048 */ "H",
+/* 0049 */ "I",
+/* 004a */ "J",
+/* 004b */ "K",
+/* 004c */ "L",
+/* 004d */ "M",
+/* 004e */ "N",
+/* 004f */ "O",
+/* 0050 */ "P",
+/* 0051 */ "Q",
+/* 0052 */ "R",
+/* 0053 */ "S",
+/* 0054 */ "T",
+/* 0055 */ "U",
+/* 0056 */ "V",
+/* 0057 */ "W",
+/* 0058 */ "X",
+/* 0059 */ "Y",
+/* 005a */ "Z",
+/* 005b */ "bracketleft",
+/* 005c */ "backslash",
+/* 005d */ "bracketright",
+/* 005e */ "asciicircum",
+/* 005f */ "underscore",
+/* 0060 */ "quoteleft",
+/* 0061 */ "a",
+/* 0062 */ "b",
+/* 0063 */ "c",
+/* 0064 */ "d",
+/* 0065 */ "e",
+/* 0066 */ "f",
+/* 0067 */ "g",
+/* 0068 */ "h",
+/* 0069 */ "i",
+/* 006a */ "j",
+/* 006b */ "k",
+/* 006c */ "l",
+/* 006d */ "m",
+/* 006e */ "n",
+/* 006f */ "o",
+/* 0070 */ "p",
+/* 0071 */ "q",
+/* 0072 */ "r",
+/* 0073 */ "s",
+/* 0074 */ "t",
+/* 0075 */ "u",
+/* 0076 */ "v",
+/* 0077 */ "w",
+/* 0078 */ "x",
+/* 0079 */ "y",
+/* 007a */ "z",
+/* 007b */ "braceleft",
+/* 007c */ "bar",
+/* 007d */ "braceright",
+/* 007e */ "asciitilde",
+/* 007f */ ".notdef",
+/* 0080 */ ".notdef",
+/* 0081 */ ".notdef",
+/* 0082 */ ".notdef",
+/* 0083 */ ".notdef",
+/* 0084 */ ".notdef",
+/* 0085 */ ".notdef",
+/* 0086 */ ".notdef",
+/* 0087 */ ".notdef",
+/* 0088 */ ".notdef",
+/* 0089 */ ".notdef",
+/* 008a */ ".notdef",
+/* 008b */ ".notdef",
+/* 008c */ ".notdef",
+/* 008d */ ".notdef",
+/* 008e */ ".notdef",
+/* 008f */ ".notdef",
+/* 0090 */ ".notdef",
+/* 0091 */ ".notdef",
+/* 0092 */ ".notdef",
+/* 0093 */ ".notdef",
+/* 0094 */ ".notdef",
+/* 0095 */ ".notdef",
+/* 0096 */ ".notdef",
+/* 0097 */ ".notdef",
+/* 0098 */ ".notdef",
+/* 0099 */ ".notdef",
+/* 009a */ ".notdef",
+/* 009b */ ".notdef",
+/* 009c */ ".notdef",
+/* 009d */ ".notdef",
+/* 009e */ ".notdef",
+/* 009f */ ".notdef",
+/* 00a0 */ ".notdef",
+/* 00a1 */ "exclamdown",
+/* 00a2 */ "cent",
+/* 00a3 */ "sterling",
+/* 00a4 */ "fraction",
+/* 00a5 */ "yen",
+/* 00a6 */ "florin",
+/* 00a7 */ "section",
+/* 00a8 */ "currency",
+/* 00a9 */ "quotesingle",
+/* 00aa */ "quotedblleft",
+/* 00ab */ "guillemotleft",
+/* 00ac */ "guilsinglleft",
+/* 00ad */ "guilsinglright",
+/* 00ae */ "fi",
+/* 00af */ "fl",
+/* 00b0 */ ".notdef",
+/* 00b1 */ "endash",
+/* 00b2 */ "dagger",
+/* 00b3 */ "daggerdbl",
+/* 00b4 */ "periodcentered",
+/* 00b5 */ ".notdef",
+/* 00b6 */ "paragraph",
+/* 00b7 */ "bullet",
+/* 00b8 */ "quotesinglbase",
+/* 00b9 */ "quotedblbase",
+/* 00ba */ "quotedblright",
+/* 00bb */ "guillemotright",
+/* 00bc */ "ellipsis",
+/* 00bd */ "perthousand",
+/* 00be */ ".notdef",
+/* 00bf */ "questiondown",
+/* 00c0 */ ".notdef",
+/* 00c1 */ "grave",
+/* 00c2 */ "acute",
+/* 00c3 */ "circumflex",
+/* 00c4 */ "tilde",
+/* 00c5 */ "macron",
+/* 00c6 */ "breve",
+/* 00c7 */ "dotaccent",
+/* 00c8 */ "dieresis",
+/* 00c9 */ ".notdef",
+/* 00ca */ "ring",
+/* 00cb */ "cedilla",
+/* 00cc */ ".notdef",
+/* 00cd */ "hungarumlaut",
+/* 00ce */ "ogonek",
+/* 00cf */ "caron",
+/* 00d0 */ "emdash",
+/* 00d1 */ ".notdef",
+/* 00d2 */ ".notdef",
+/* 00d3 */ ".notdef",
+/* 00d4 */ ".notdef",
+/* 00d5 */ ".notdef",
+/* 00d6 */ ".notdef",
+/* 00d7 */ ".notdef",
+/* 00d8 */ ".notdef",
+/* 00d9 */ ".notdef",
+/* 00da */ ".notdef",
+/* 00db */ ".notdef",
+/* 00dc */ ".notdef",
+/* 00dd */ ".notdef",
+/* 00de */ ".notdef",
+/* 00df */ ".notdef",
+/* 00e0 */ ".notdef",
+/* 00e1 */ "AE",
+/* 00e2 */ ".notdef",
+/* 00e3 */ "ordfeminine",
+/* 00e4 */ ".notdef",
+/* 00e5 */ ".notdef",
+/* 00e6 */ ".notdef",
+/* 00e7 */ ".notdef",
+/* 00e8 */ "Lslash",
+/* 00e9 */ "Oslash",
+/* 00ea */ "OE",
+/* 00eb */ "ordmasculine",
+/* 00ec */ ".notdef",
+/* 00ed */ ".notdef",
+/* 00ee */ ".notdef",
+/* 00ef */ ".notdef",
+/* 00f0 */ ".notdef",
+/* 00f1 */ "ae",
+/* 00f2 */ ".notdef",
+/* 00f3 */ ".notdef",
+/* 00f4 */ ".notdef",
+/* 00f5 */ "dotlessi",
+/* 00f6 */ ".notdef",
+/* 00f7 */ ".notdef",
+/* 00f8 */ "lslash",
+/* 00f9 */ "oslash",
+/* 00fa */ "oe",
+/* 00fb */ "germandbls",
+/* 00fc */ ".notdef",
+/* 00fd */ ".notdef",
+/* 00fe */ ".notdef",
+/* 00ff */ ".notdef"
+};
+
+const char *AdobeExpertEncoding[] = {
+/* 0000 */ ".notdef",
+/* 0001 */ ".notdef",
+/* 0002 */ ".notdef",
+/* 0003 */ ".notdef",
+/* 0004 */ ".notdef",
+/* 0005 */ ".notdef",
+/* 0006 */ ".notdef",
+/* 0007 */ ".notdef",
+/* 0008 */ ".notdef",
+/* 0009 */ ".notdef",
+/* 000a */ ".notdef",
+/* 000b */ ".notdef",
+/* 000c */ ".notdef",
+/* 000d */ ".notdef",
+/* 000e */ ".notdef",
+/* 000f */ ".notdef",
+/* 0010 */ ".notdef",
+/* 0011 */ ".notdef",
+/* 0012 */ ".notdef",
+/* 0013 */ ".notdef",
+/* 0014 */ ".notdef",
+/* 0015 */ ".notdef",
+/* 0016 */ ".notdef",
+/* 0017 */ ".notdef",
+/* 0018 */ ".notdef",
+/* 0019 */ ".notdef",
+/* 001a */ ".notdef",
+/* 001b */ ".notdef",
+/* 001c */ ".notdef",
+/* 001d */ ".notdef",
+/* 001e */ ".notdef",
+/* 001f */ ".notdef",
+/* 0020 */ "space",
+/* 0021 */ "exclamsmall",
+/* 0022 */ "Hungarumlautsmal",
+/* 0023 */ ".notdef",
+/* 0024 */ "dollaroldstyle",
+/* 0025 */ "dollarsuperior",
+/* 0026 */ "ampersandsmall",
+/* 0027 */ "Acutesmall",
+/* 0028 */ "parenleftsuperior",
+/* 0029 */ "parenrightsuperior",
+/* 002a */ "twodotenleader",
+/* 002b */ "onedotenleader",
+/* 002c */ "comma",
+/* 002d */ "hyphen",
+/* 002e */ "period",
+/* 002f */ "fraction",
+/* 0030 */ "zerooldstyle",
+/* 0031 */ "oneoldstyle",
+/* 0032 */ "twooldstyle",
+/* 0033 */ "threeoldstyle",
+/* 0034 */ "fouroldstyle",
+/* 0035 */ "fiveoldstyle",
+/* 0036 */ "sixoldstyle",
+/* 0037 */ "sevenoldstyle",
+/* 0038 */ "eightoldstyle",
+/* 0039 */ "nineoldstyle",
+/* 003a */ "colon",
+/* 003b */ "semicolon",
+/* 003c */ "commasuperior",
+/* 003d */ "threequartersemdash",
+/* 003e */ "periodsuperior",
+/* 003f */ "questionsmall",
+/* 0040 */ ".notdef",
+/* 0041 */ "asuperior",
+/* 0042 */ "bsuperior",
+/* 0043 */ "centsuperior",
+/* 0044 */ "dsuperior",
+/* 0045 */ "esuperior",
+/* 0046 */ ".notdef",
+/* 0047 */ ".notdef",
+/* 0048 */ ".notdef",
+/* 0049 */ "isuperior",
+/* 004a */ ".notdef",
+/* 004b */ ".notdef",
+/* 004c */ "lsuperior",
+/* 004d */ "msuperior",
+/* 004e */ "nsuperior",
+/* 004f */ "osuperior",
+/* 0050 */ ".notdef",
+/* 0051 */ ".notdef",
+/* 0052 */ "rsuperior",
+/* 0053 */ "ssuperior",
+/* 0054 */ "tsuperior",
+/* 0055 */ ".notdef",
+/* 0056 */ "ff",
+/* 0057 */ "fi",
+/* 0058 */ "fl",
+/* 0059 */ "ffi",
+/* 005a */ "ffl",
+/* 005b */ "parenleftinferior",
+/* 005c */ ".notdef",
+/* 005d */ "parenrightinferior",
+/* 005e */ "Circumflexsmall",
+/* 005f */ "hyphensuperior",
+/* 0060 */ "Gravesmall",
+/* 0061 */ "Asmall",
+/* 0062 */ "Bsmall",
+/* 0063 */ "Csmall",
+/* 0064 */ "Dsmall",
+/* 0065 */ "Esmall",
+/* 0066 */ "Fsmall",
+/* 0067 */ "Gsmall",
+/* 0068 */ "Hsmall",
+/* 0069 */ "Ismall",
+/* 006a */ "Jsmall",
+/* 006b */ "Ksmall",
+/* 006c */ "Lsmall",
+/* 006d */ "Msmall",
+/* 006e */ "Nsmall",
+/* 006f */ "Osmall",
+/* 0070 */ "Psmall",
+/* 0071 */ "Qsmall",
+/* 0072 */ "Rsmall",
+/* 0073 */ "Ssmall",
+/* 0074 */ "Tsmall",
+/* 0075 */ "Usmall",
+/* 0076 */ "Vsmall",
+/* 0077 */ "Wsmall",
+/* 0078 */ "Xsmall",
+/* 0079 */ "Ysmall",
+/* 007a */ "Zsmall",
+/* 007b */ "colonmonetary",
+/* 007c */ "onefitted",
+/* 007d */ "rupiah",
+/* 007e */ "Tildesmall",
+/* 007f */ ".notdef",
+/* 0080 */ ".notdef",
+/* 0081 */ ".notdef",
+/* 0082 */ ".notdef",
+/* 0083 */ ".notdef",
+/* 0084 */ ".notdef",
+/* 0085 */ ".notdef",
+/* 0086 */ ".notdef",
+/* 0087 */ ".notdef",
+/* 0088 */ ".notdef",
+/* 0089 */ ".notdef",
+/* 008a */ ".notdef",
+/* 008b */ ".notdef",
+/* 008c */ ".notdef",
+/* 008d */ ".notdef",
+/* 008e */ ".notdef",
+/* 008f */ ".notdef",
+/* 0090 */ ".notdef",
+/* 0091 */ ".notdef",
+/* 0092 */ ".notdef",
+/* 0093 */ ".notdef",
+/* 0094 */ ".notdef",
+/* 0095 */ ".notdef",
+/* 0096 */ ".notdef",
+/* 0097 */ ".notdef",
+/* 0098 */ ".notdef",
+/* 0099 */ ".notdef",
+/* 009a */ ".notdef",
+/* 009b */ ".notdef",
+/* 009c */ ".notdef",
+/* 009d */ ".notdef",
+/* 009e */ ".notdef",
+/* 009f */ ".notdef",
+/* 00a0 */ ".notdef",
+/* 00a1 */ "exclamdownsmall",
+/* 00a2 */ "centoldstyle",
+/* 00a3 */ "Lslashsmall",
+/* 00a4 */ ".notdef",
+/* 00a5 */ ".notdef",
+/* 00a6 */ "Scaronsmall",
+/* 00a7 */ "Zcaronsmall",
+/* 00a8 */ "Dieresissmall",
+/* 00a9 */ "Brevesmall",
+/* 00aa */ "Caronsmall",
+/* 00ab */ ".notdef",
+/* 00ac */ "Dotaccentsmall",
+/* 00ad */ ".notdef",
+/* 00ae */ ".notdef",
+/* 00af */ "Macronsmall",
+/* 00b0 */ ".notdef",
+/* 00b1 */ ".notdef",
+/* 00b2 */ "figuredash",
+/* 00b3 */ "hypheninferior",
+/* 00b4 */ ".notdef",
+/* 00b5 */ ".notdef",
+/* 00b6 */ "Ogoneksmall",
+/* 00b7 */ "Ringsmall",
+/* 00b8 */ "Cedillasmall",
+/* 00b9 */ ".notdef",
+/* 00ba */ ".notdef",
+/* 00bb */ ".notdef",
+/* 00bc */ "onequarter",
+/* 00bd */ "onehalf",
+/* 00be */ "threequarters",
+/* 00bf */ "questiondownsmall",
+/* 00c0 */ "oneeighth",
+/* 00c1 */ "threeeighths",
+/* 00c2 */ "fiveeighths",
+/* 00c3 */ "seveneighths",
+/* 00c4 */ "onethird",
+/* 00c5 */ "twothirds",
+/* 00c6 */ ".notdef",
+/* 00c7 */ ".notdef",
+/* 00c8 */ "zerosuperior",
+/* 00c9 */ "onesuperior",
+/* 00ca */ "twosuperior",
+/* 00cb */ "threesuperior",
+/* 00cc */ "foursuperior",
+/* 00cd */ "fivesuperior",
+/* 00ce */ "sixsuperior",
+/* 00cf */ "sevensuperior",
+/* 00d0 */ "eightsuperior",
+/* 00d1 */ "ninesuperior",
+/* 00d2 */ "zeroinferior",
+/* 00d3 */ "oneinferior",
+/* 00d4 */ "twoinferior",
+/* 00d5 */ "threeinferior",
+/* 00d6 */ "fourinferior",
+/* 00d7 */ "fiveinferior",
+/* 00d8 */ "sixinferior",
+/* 00d9 */ "seveninferior",
+/* 00da */ "eightinferior",
+/* 00db */ "nineinferior",
+/* 00dc */ "centinferior",
+/* 00dd */ "dollarinferior",
+/* 00de */ "periodinferior",
+/* 00df */ "commainferior",
+/* 00e0 */ "Agravesmall",
+/* 00e1 */ "Aacutesmall",
+/* 00e2 */ "Acircumflexsmall",
+/* 00e3 */ "Atildesmall",
+/* 00e4 */ "Adieresissmall",
+/* 00e5 */ "Aringsmall",
+/* 00e6 */ "AEsmall",
+/* 00e7 */ "Ccedillasmall",
+/* 00e8 */ "Egravesmall",
+/* 00e9 */ "Eacutesmall",
+/* 00ea */ "Ecircumflexsmall",
+/* 00eb */ "Edieresissmall",
+/* 00ec */ "Igravesmall",
+/* 00ed */ "Iacutesmall",
+/* 00ee */ "Icircumflexsmall",
+/* 00ef */ "Idieresissmall",
+/* 00f0 */ "Ethsmall",
+/* 00f1 */ "Ntildesmall",
+/* 00f2 */ "Ogravesmall",
+/* 00f3 */ "Oacutesmall",
+/* 00f4 */ "Ocircumflexsmall",
+/* 00f5 */ "Otildesmall",
+/* 00f6 */ "Odieresissmall",
+/* 00f7 */ "OEsmall",
+/* 00f8 */ "Oslashsmall",
+/* 00f9 */ "Ugravesmall",
+/* 00fa */ "Uacutesmall",
+/* 00fb */ "Ucircumflexsmall",
+/* 00fc */ "Udieresissmall",
+/* 00fd */ "Yacutesmall",
+/* 00fe */ "Thornsmall",
+/* 00ff */ "Ydieresissmall"
+};
+
+unsigned short r;
+#define c1 52845
+#define c2 22719
+
+#define EODMARKLEN 16
+
+#define bgetc(extra,in) (*(extra)=='\0' ? getc(in) : (unsigned char ) *(extra)++ )
+
+void PSCharsFree(struct pschars *chrs) {
+ int i;
+
+ if ( chrs==NULL )
+return;
+ for ( i=0; i<chrs->next; ++i ) {
+ if ( chrs->keys!=NULL ) free(chrs->keys[i]);
+ free(chrs->values[i]);
+ }
+ free(chrs->lens);
+ free(chrs->keys);
+ free(chrs->values);
+ free(chrs);
+}
+
+void PSDictFree(struct psdict *dict) {
+ int i;
+
+ if ( dict==NULL )
+return;
+ for ( i=0; i<dict->next; ++i ) {
+ if ( dict->keys!=NULL ) free(dict->keys[i]);
+ free(dict->values[i]);
+ }
+ free(dict->keys);
+ free(dict->values);
+ free(dict);
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/parsettf.c b/dviware/dvisvgm/libs/ff-woff/fontforge/parsettf.c
new file mode 100644
index 0000000000..d6cd930c51
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/parsettf.c
@@ -0,0 +1,505 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "ttf.h"
+
+/* True Type is a really icky format. Nothing is together. It's badly described */
+/* much of the description is misleading */
+/* Apple's version: */
+/* http://fonts.apple.com/TTRefMan/index.html */
+/* MS's version: */
+/* http://www.microsoft.com/typography/tt/tt.htm */
+/* An helpful but incomplete description is given at */
+/* http://www.truetype.demon.co.uk/ttoutln.htm */
+/* For some things I looked at freetype's code to see how they did it */
+/* (I think only for what happens if !ARGS_ARE_XY) */
+/* http://freetype.sourceforge.net/ */
+/* It grows on you though... now that I understand it better it seems better designed */
+/* but the docs remain in conflict. Sometimes badly so */
+
+
+/* ************************************************************************** */
+
+int getushort(FILE *ttf) {
+ int ch1 = getc(ttf);
+ int ch2 = getc(ttf);
+ if ( ch2==EOF )
+return( EOF );
+return( (ch1<<8)|ch2 );
+}
+
+int32 getlong(FILE *ttf) {
+ int ch1 = getc(ttf);
+ int ch2 = getc(ttf);
+ int ch3 = getc(ttf);
+ int ch4 = getc(ttf);
+ if ( ch4==EOF )
+return( EOF );
+return( (ch1<<24)|(ch2<<16)|(ch3<<8)|ch4 );
+}
+
+/* Chooses which font to open from a TTC TrueType Collection font file. */
+/* */
+/* There are five ways that one enclosed font is selected: */
+/* 1) there is only one font enclosed, so we force defaulting to that one.*/
+/* 2a) the filename has a font index appended, we choose that N'th font. */
+/* 2b) the filename has a font name appended, we try to match that name */
+/* in list of discovered font names and select that named font. */
+/* 3) the user is prompted with a list of all discovered font names, and */
+/* asked to select one, and then that N'th font is chosen. */
+/* 4) when there is no UI, then font index zero is used. */
+/* */
+/* On failure and no font is chosen, returns false. */
+/* */
+/* On success, true is returned. The chosen font name (allocated) pointer */
+/* is returned via 'chosenname'. Additionally, the file position is set */
+/* pointing to the chosen TTF font offset table, ready for reading the */
+/* TTF header. */
+/* */
+/* Example filename strings with appended font selector: */
+/* ./tests/fonts/mingliu.windows.ttc(PMingLiU) */
+/* ./tests/fonts/mingliu.windows.ttc(1) */
+/* */
+/* 'offsets' is a list of file offsets to each enclosed TTF offset table. */
+/* 'names' is a list of font names as found in each enclosed name table. */
+/* 'names' is used to search for a matching font name, or to present as a */
+/* list to the user via ff_choose() to select from. */
+/* Once the chosen font index is determined, offsets[choice] is used to */
+/* call fseek() to position to the chosen TTF header offset table. Then */
+/* the chosen font name is copied into 'chosenname'. */
+
+
+/* Standard names for cff */
+const char *cffnames[] = {
+ ".notdef",
+ "space",
+ "exclam",
+ "quotedbl",
+ "numbersign",
+ "dollar",
+ "percent",
+ "ampersand",
+ "quoteright",
+ "parenleft",
+ "parenright",
+ "asterisk",
+ "plus",
+ "comma",
+ "hyphen",
+ "period",
+ "slash",
+ "zero",
+ "one",
+ "two",
+ "three",
+ "four",
+ "five",
+ "six",
+ "seven",
+ "eight",
+ "nine",
+ "colon",
+ "semicolon",
+ "less",
+ "equal",
+ "greater",
+ "question",
+ "at",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H",
+ "I",
+ "J",
+ "K",
+ "L",
+ "M",
+ "N",
+ "O",
+ "P",
+ "Q",
+ "R",
+ "S",
+ "T",
+ "U",
+ "V",
+ "W",
+ "X",
+ "Y",
+ "Z",
+ "bracketleft",
+ "backslash",
+ "bracketright",
+ "asciicircum",
+ "underscore",
+ "quoteleft",
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i",
+ "j",
+ "k",
+ "l",
+ "m",
+ "n",
+ "o",
+ "p",
+ "q",
+ "r",
+ "s",
+ "t",
+ "u",
+ "v",
+ "w",
+ "x",
+ "y",
+ "z",
+ "braceleft",
+ "bar",
+ "braceright",
+ "asciitilde",
+ "exclamdown",
+ "cent",
+ "sterling",
+ "fraction",
+ "yen",
+ "florin",
+ "section",
+ "currency",
+ "quotesingle",
+ "quotedblleft",
+ "guillemotleft",
+ "guilsinglleft",
+ "guilsinglright",
+ "fi",
+ "fl",
+ "endash",
+ "dagger",
+ "daggerdbl",
+ "periodcentered",
+ "paragraph",
+ "bullet",
+ "quotesinglbase",
+ "quotedblbase",
+ "quotedblright",
+ "guillemotright",
+ "ellipsis",
+ "perthousand",
+ "questiondown",
+ "grave",
+ "acute",
+ "circumflex",
+ "tilde",
+ "macron",
+ "breve",
+ "dotaccent",
+ "dieresis",
+ "ring",
+ "cedilla",
+ "hungarumlaut",
+ "ogonek",
+ "caron",
+ "emdash",
+ "AE",
+ "ordfeminine",
+ "Lslash",
+ "Oslash",
+ "OE",
+ "ordmasculine",
+ "ae",
+ "dotlessi",
+ "lslash",
+ "oslash",
+ "oe",
+ "germandbls",
+ "onesuperior",
+ "logicalnot",
+ "mu",
+ "trademark",
+ "Eth",
+ "onehalf",
+ "plusminus",
+ "Thorn",
+ "onequarter",
+ "divide",
+ "brokenbar",
+ "degree",
+ "thorn",
+ "threequarters",
+ "twosuperior",
+ "registered",
+ "minus",
+ "eth",
+ "multiply",
+ "threesuperior",
+ "copyright",
+ "Aacute",
+ "Acircumflex",
+ "Adieresis",
+ "Agrave",
+ "Aring",
+ "Atilde",
+ "Ccedilla",
+ "Eacute",
+ "Ecircumflex",
+ "Edieresis",
+ "Egrave",
+ "Iacute",
+ "Icircumflex",
+ "Idieresis",
+ "Igrave",
+ "Ntilde",
+ "Oacute",
+ "Ocircumflex",
+ "Odieresis",
+ "Ograve",
+ "Otilde",
+ "Scaron",
+ "Uacute",
+ "Ucircumflex",
+ "Udieresis",
+ "Ugrave",
+ "Yacute",
+ "Ydieresis",
+ "Zcaron",
+ "aacute",
+ "acircumflex",
+ "adieresis",
+ "agrave",
+ "aring",
+ "atilde",
+ "ccedilla",
+ "eacute",
+ "ecircumflex",
+ "edieresis",
+ "egrave",
+ "iacute",
+ "icircumflex",
+ "idieresis",
+ "igrave",
+ "ntilde",
+ "oacute",
+ "ocircumflex",
+ "odieresis",
+ "ograve",
+ "otilde",
+ "scaron",
+ "uacute",
+ "ucircumflex",
+ "udieresis",
+ "ugrave",
+ "yacute",
+ "ydieresis",
+ "zcaron",
+ "exclamsmall",
+ "Hungarumlautsmall",
+ "dollaroldstyle",
+ "dollarsuperior",
+ "ampersandsmall",
+ "Acutesmall",
+ "parenleftsuperior",
+ "parenrightsuperior",
+ "twodotenleader",
+ "onedotenleader",
+ "zerooldstyle",
+ "oneoldstyle",
+ "twooldstyle",
+ "threeoldstyle",
+ "fouroldstyle",
+ "fiveoldstyle",
+ "sixoldstyle",
+ "sevenoldstyle",
+ "eightoldstyle",
+ "nineoldstyle",
+ "commasuperior",
+ "threequartersemdash",
+ "periodsuperior",
+ "questionsmall",
+ "asuperior",
+ "bsuperior",
+ "centsuperior",
+ "dsuperior",
+ "esuperior",
+ "isuperior",
+ "lsuperior",
+ "msuperior",
+ "nsuperior",
+ "osuperior",
+ "rsuperior",
+ "ssuperior",
+ "tsuperior",
+ "ff",
+ "ffi",
+ "ffl",
+ "parenleftinferior",
+ "parenrightinferior",
+ "Circumflexsmall",
+ "hyphensuperior",
+ "Gravesmall",
+ "Asmall",
+ "Bsmall",
+ "Csmall",
+ "Dsmall",
+ "Esmall",
+ "Fsmall",
+ "Gsmall",
+ "Hsmall",
+ "Ismall",
+ "Jsmall",
+ "Ksmall",
+ "Lsmall",
+ "Msmall",
+ "Nsmall",
+ "Osmall",
+ "Psmall",
+ "Qsmall",
+ "Rsmall",
+ "Ssmall",
+ "Tsmall",
+ "Usmall",
+ "Vsmall",
+ "Wsmall",
+ "Xsmall",
+ "Ysmall",
+ "Zsmall",
+ "colonmonetary",
+ "onefitted",
+ "rupiah",
+ "Tildesmall",
+ "exclamdownsmall",
+ "centoldstyle",
+ "Lslashsmall",
+ "Scaronsmall",
+ "Zcaronsmall",
+ "Dieresissmall",
+ "Brevesmall",
+ "Caronsmall",
+ "Dotaccentsmall",
+ "Macronsmall",
+ "figuredash",
+ "hypheninferior",
+ "Ogoneksmall",
+ "Ringsmall",
+ "Cedillasmall",
+ "questiondownsmall",
+ "oneeighth",
+ "threeeighths",
+ "fiveeighths",
+ "seveneighths",
+ "onethird",
+ "twothirds",
+ "zerosuperior",
+ "foursuperior",
+ "fivesuperior",
+ "sixsuperior",
+ "sevensuperior",
+ "eightsuperior",
+ "ninesuperior",
+ "zeroinferior",
+ "oneinferior",
+ "twoinferior",
+ "threeinferior",
+ "fourinferior",
+ "fiveinferior",
+ "sixinferior",
+ "seveninferior",
+ "eightinferior",
+ "nineinferior",
+ "centinferior",
+ "dollarinferior",
+ "periodinferior",
+ "commainferior",
+ "Agravesmall",
+ "Aacutesmall",
+ "Acircumflexsmall",
+ "Atildesmall",
+ "Adieresissmall",
+ "Aringsmall",
+ "AEsmall",
+ "Ccedillasmall",
+ "Egravesmall",
+ "Eacutesmall",
+ "Ecircumflexsmall",
+ "Edieresissmall",
+ "Igravesmall",
+ "Iacutesmall",
+ "Icircumflexsmall",
+ "Idieresissmall",
+ "Ethsmall",
+ "Ntildesmall",
+ "Ogravesmall",
+ "Oacutesmall",
+ "Ocircumflexsmall",
+ "Otildesmall",
+ "Odieresissmall",
+ "OEsmall",
+ "Oslashsmall",
+ "Ugravesmall",
+ "Uacutesmall",
+ "Ucircumflexsmall",
+ "Udieresissmall",
+ "Yacutesmall",
+ "Thornsmall",
+ "Ydieresissmall",
+ "001.000",
+ "001.001",
+ "001.002",
+ "001.003",
+ "Black",
+ "Bold",
+ "Book",
+ "Light",
+ "Medium",
+ "Regular",
+ "Roman",
+ "Semibold",
+ NULL
+};
+const int nStdStrings = sizeof(cffnames)/sizeof(cffnames[0])-1;
+
+void AltUniFigure(SplineFont *sf,EncMap *map,int check_dups) {
+ int i,gid;
+
+ if ( map->enc!=&custom ) {
+ for ( i=0; i<map->enccount; ++i ) if ( (gid = map->map[i])!=-1 ) {
+ int uni = UniFromEnc(i,map->enc);
+ if (check_dups)
+ AltUniAdd(sf->glyphs[gid],uni);
+ else
+ AltUniAdd_DontCheckDups(sf->glyphs[gid],uni);
+ }
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/parsettfatt.c b/dviware/dvisvgm/libs/ff-woff/fontforge/parsettfatt.c
new file mode 100644
index 0000000000..1b6a172a0e
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/parsettfatt.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+
+int memushort(uint8 *data,int len, int offset) {
+ if ( offset>=0 && offset+1<len ) {
+ int ch1 = data[offset], ch2 = data[offset+1];
+return( (ch1<<8)|ch2 );
+ } else {
+ LogError( _("Bad font, offset out of bounds.\n") );
+return( 0 );
+ }
+}
+
+void memputshort(uint8 *data,int offset,uint16 val) {
+ data[offset] = (val>>8);
+ data[offset+1] = val&0xff;
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/psfont.h b/dviware/dvisvgm/libs/ff-woff/fontforge/psfont.h
new file mode 100644
index 0000000000..58f9c1c775
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/psfont.h
@@ -0,0 +1,188 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _PSFONT_H_
+#define _PSFONT_H_
+
+#include "splinefont.h"
+
+/* pfb section headers.
+ There seem to be three and a half of them. the first is a the start of the
+ file and is 6 bytes long "\200\001x\005\000\000", the second is right after
+ the newline after eexec and is 6 bytes "\200\002I\224\000\000", the third
+ is right before the zeros (after the encoded data) and is "\200\001\024\002\000\000"
+ the last is at the end of file and is only two bytes "\200\003"
+ I think that the \200 byte indicates a header, the next byte is 1 for ascii,
+ 2 for binary and 3 for eof, then next 4 bytes are the length (not present
+ for eof headers) with the first byte the least significant.
+*/
+
+struct charprocs {
+ int cnt, next;
+ char **keys;
+ SplineChar **values;
+};
+
+struct fontinfo {
+ char *familyname;
+ char *fullname;
+ char *notice;
+ char *weight;
+ char *version;
+ real italicangle;
+ unsigned int isfixedpitch:1;
+ real underlineposition;
+ real underlinethickness;
+ int em, ascent, descent; /* Generated by Fontographer (and us) */
+ int fstype; /* 2=>no embedding, 4=>print, 8=>edit */
+ /* Multiple master */
+ char *blenddesignpositions;
+ char *blenddesignmap;
+ char *blendaxistypes;
+};
+
+struct private {
+ struct psdict *private;
+ struct pschars *subrs; /* (optional, required if othersubrs is present) */
+ /* 0-2 part of Flex, 3 hint replacement, 4 and up for charstrings */
+ int leniv; /* (optional) must be 4 for old interpreters (number of rand chars at start of charstrings entries) */
+/* int bluefuzz; /\* (optional) (expand bluezones by this much, def=1) *\/ */
+/* real bluescale; /\* (optional) if the current pointsize in pixels is less than this value then do overshoot hinting *\/ */
+/* int blueshift; /\* (optional) *\/ */
+/* real bluevalues[14]; /\* <=7 pairs of integers, first less than second, (may be empty) *\/ */
+/* /\* first pair is baseline overshoots, other pairs above baseline *\/ */
+/* real expansionfactor; /\* (optional) only for languagegroup==1 (CJK) *\/ */
+/* real familyblues[14]; /\* (optional) bluevalues for family, can override local entry at small pointsizes *\/ */
+/* real familyotherblues[10];/\* (optional) otherblues for family *\/ */
+/* unsigned int forcebold:1; /\* (optional) *\/ */
+/* int languagegroup; /\* (optional) (0=>latin, greek, cyril, etc.), (1=>CJK)*\/ */
+/* int leniv; /\* (optional) must be 4 for old interpreters (number of rand chars at start of charstrings entries) *\/ */
+/* char *minfeature; /\* obsolete, required must be {16 16} *\/ */
+/* char *nd; /\* "noaccess def" (may also be named "|-") *\/ */
+/* char *np; /\* "noaccess put" (may also be named "|") *\/ */
+/* real otherblues[10]; /\* (optional) descender blue zones *\/ */
+/* struct pschars *othersubrs; /\* (optional) shouldn't contain user defined subs *\/ */
+/* int password; /\* obsolete, required must be 5839 *\/ */
+/* char *rd; /\* "{string currentfile exch readstring pop}" (may also be named "-|") *\/ */
+/* unsigned int rndstemup:1; /\* (optional) obsolete, false if languagegroud==1 *\/ */
+/* real stdhw[1]; /\* (optional) dominant horizontal stem width *\/ */
+/* real stdvw[1]; /\* (optional) dominant vert *\/ */
+/* real stemsnaph[12]; /\* (optional) common h stem widths (at most 12, includes stdhw, sorted by increasing size) *\/ */
+/* real stemsnapv[12]; /\* (optional) common v stem widths*\/ */
+/* struct pschars *subrs; /\* (optional, required if othersubrs is present) *\/ */
+/* /\* 0-2 part of Flex, 3 hint replacement, 4 and up for charstrings *\/ */
+/* int uniqueid; /\* (optional) seems same as fontdict entry. why's it here too? what of XUID? *\/ */
+/* /\* CID entries *\/ */
+/* int subrmapoffset; /\* Offset to the start of this font's subr strings map *\/ */
+/* int sdbytes; /\* bytes in each pointer in the map *\/ */
+/* int subrcnt; /\* number of subroutines, number of pointers-1 in the map *\/ */
+};
+
+typedef struct fontdict {
+ int fonttype;
+ real fontmatrix[6];
+ char *fontname; /* (optional) */
+ struct fontinfo *fontinfo;
+ int languagelevel; /* (optional) */
+ int wmode; /* (optional) chooses between alternate metric sets */
+/* non-type0 entries */
+ char (*encoding[256]);
+ real fontbb[4];
+ int uniqueid; /* (optional) open range between 4,000,000 and 4,999,999 */
+ int xuid[20]; /* (optional) */
+/* Type1 specific values */
+ int painttype; /* 0 (filled) 2 (stroked) */
+ real strokewidth; /* (optional) only if painttype==2 */
+ struct psdict *metrics; /* (optional) */
+ struct psdict *metrics2; /* (optional) */
+ struct pschars *chars;
+ struct charprocs *charprocs;
+ struct private *private;
+ unsigned int wasbinary: 1;
+ unsigned int wascff: 1;
+ Encoding *encoding_name;
+/* CID stuff */
+ int fdcnt; /* For the underlying dictionaries */
+ struct fontdict **fds;
+ char *cidfontname;
+ int cidfonttype;
+ real cidversion;
+ char *registry;
+ char *ordering;
+ int supplement;
+ int mapoffset;
+ int fdbytes;
+ int gdbytes;
+ int cidcnt;
+ uint8 **cidstrs;
+ int16 *cidlens;
+ int16 *cidfds;
+/* CFF stuff */
+ struct splinefont *sf;
+/* MM stuff */
+ char *blendfunc;
+ char *weightvector;
+ char *cdv;
+ char *ndv;
+ struct psdict *blendprivate;
+ struct psdict *blendfontinfo;
+ long long creationtime; /* seconds since 1970 */
+ long long modificationtime;
+} FontDict;
+
+struct fddata {
+ int leniv;
+ int subrmapoff, sdbytes, subrcnt;
+ int flexmax;
+ unsigned int iscjk:1;
+ struct pschars *subrs;
+};
+
+struct cidbytes {
+ int fdbytes, gdbytes, cidcnt;
+ int cidmapoffset;
+ int fdcnt;
+ struct fddata *fds;
+ int *fdind;
+ int errors;
+};
+
+struct fd2data {
+ int defwid, nomwid; /* For Type2 charstrings */
+ struct pschars *subrs;
+ FILE *private; /* Subroutines get stored in the private file immediately after the private dict */
+ int eodictmark, fillindictmark;
+ int privatelen;
+};
+
+extern const char (*AdobeStandardEncoding[256]);
+extern const char (*AdobeExpertEncoding[256]);
+extern int copymetadata, copyttfinstr;
+
+extern FontDict *_ReadPSFont(FILE *ps);
+extern FontDict *ReadPSFont(char *fontname);
+extern void PSFontFree(FontDict *fd);
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/psread.c b/dviware/dvisvgm/libs/ff-woff/fontforge/psread.c
new file mode 100644
index 0000000000..5c5a52ed64
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/psread.c
@@ -0,0 +1,73 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "sd.h"
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+typedef struct _io {
+ const char *macro;
+ char *start;
+ FILE *ps, *fog;
+ char fogbuf[60];
+ int backedup, cnt, isloop, isstopped, fogns;
+ struct _io *prev;
+} _IO;
+
+typedef struct io {
+ struct _io *top;
+ int endedstopped;
+ int advance_width; /* Can be set from a PS comment by MF2PT1 */
+} IO;
+
+#define GARBAGE_MAX 64
+
+/* length (of string)
+ fill eofill stroke
+ gsave grestore
+*/
+
+void MatMultiply(real m1[6], real m2[6], real to[6]) {
+ real trans[6];
+
+ trans[0] = m1[0]*m2[0] +
+ m1[1]*m2[2];
+ trans[1] = m1[0]*m2[1] +
+ m1[1]*m2[3];
+ trans[2] = m1[2]*m2[0] +
+ m1[3]*m2[2];
+ trans[3] = m1[2]*m2[1] +
+ m1[3]*m2[3];
+ trans[4] = m1[4]*m2[0] +
+ m1[5]*m2[2] +
+ m2[4];
+ trans[5] = m1[4]*m2[1] +
+ m1[5]*m2[3] +
+ m2[5];
+ memcpy(to,trans,sizeof(trans));
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/pua.c b/dviware/dvisvgm/libs/ff-woff/fontforge/pua.c
new file mode 100644
index 0000000000..3e7582829b
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/pua.c
@@ -0,0 +1,1612 @@
+/* A number of encodings use the public use area to map to glyphs that are */
+/* defined in planes other than the BMP (chinese), or just multiple encodings*/
+/* for the same glyph (ams) */
+
+/* These data are taken from http://www.ams.org/STIX/bnb/stix-tbl.asc-2003-10-10 */
+const int amspua[] = {
+/* E000 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E008 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E010 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E018 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E020 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E028 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E030 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E038 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E040 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E048 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E050 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E058 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E060 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E068 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E070 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E078 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E080 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E088 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E090 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E098 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E100 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E108 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E110 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E118 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E120 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E128 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E130 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E138 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E140 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E148 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E150 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E158 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E160 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E168 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E170 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E178 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E180 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E188 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E190 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E198 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E1F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E200 */ 0x027f8, 0x027f5, 0x027fa, 0x027f7, 0x027f9, 0x027f6, 0x0290e, 0x0290f,
+/* E208 */ 0x027fc, 0x02910, 0x02926, 0x02925, 0x02923, 0x02924, 0x02928, 0x02929,
+/* E210 */ 0x0292a, 0x02927, 0x02905, 0x0, 0x0297c, 0x0297d, 0x021f5, 0x0296f,
+/* E218 */ 0x0296e, 0x02937, 0x02936, 0x0, 0x02933, 0x0, 0x02945, 0x02946,
+/* E220 */ 0x0291f, 0x02920, 0x0291d, 0x0291e, 0x02964, 0x02962, 0x02963, 0x02965,
+/* E228 */ 0x0294b, 0x0294a, 0x02968, 0x02966, 0x02967, 0x02969, 0x0296a, 0x0296d,
+/* E230 */ 0x0296c, 0x0296b, 0x02192, 0x02190, 0x02972, 0x02975, 0x02971, 0x02949,
+/* E238 */ 0x02911, 0x02916, 0x0291a, 0x0291c, 0x02919, 0x0291b, 0x02938, 0x02939,
+/* E240 */ 0x02948, 0x021fe, 0x021fd, 0x021ff, 0x021dd, 0x02904, 0x02903, 0x02902,
+/* E248 */ 0x0237c, 0x0293c, 0x0293d, 0x0297e, 0x0297f, 0x02974, 0x02973, 0x02af0,
+/* E250 */ 0x02aef, 0x02a3f, 0x0, 0x0, 0x02a00, 0x02a01, 0x02a02, 0x02a06,
+/* E258 */ 0x02a04, 0x02a3c, 0x02a25, 0x02a2a, 0x02a2d, 0x02a2e, 0x02a34, 0x02a35,
+/* E260 */ 0x029b5, 0x02a40, 0x02abd, 0x02abe, 0x02a33, 0x02a5f, 0x02a22, 0x02a72,
+/* E268 */ 0x02a71, 0x02a27, 0x02a23, 0x02a24, 0x02a26, 0x02a30, 0x02a46, 0x02a47,
+/* E270 */ 0x02a48, 0x02a49, 0x02a4a, 0x02a4b, 0x0, 0x0, 0x0, 0x0,
+/* E278 */ 0x02a4c, 0x02a4d, 0x02a50, 0x02a39, 0x02a3a, 0x02a3b, 0x029cd, 0x029c4,
+/* E280 */ 0x029c5, 0x02a44, 0x02a45, 0x02a42, 0x02a43, 0x02a38, 0x029bc, 0x029bf,
+/* E288 */ 0x029c0, 0x029c1, 0x029b7, 0x029b9, 0x02a37, 0x02a36, 0x02a31, 0x0,
+/* E290 */ 0x0, 0x02994, 0x02993, 0x023b1, 0x023b0, 0x02996, 0x02995, 0x02991,
+/* E298 */ 0x02992, 0x0298b, 0x0298c, 0x0298d, 0x0298e, 0x0298f, 0x02990, 0x02a8a,
+/* E2A0 */ 0x02a88, 0x02269, 0x02a89, 0x02a87, 0x02268, 0x02271, 0x02271, 0x02270,
+/* E2A8 */ 0x02270, 0x0, 0x02224, 0x02226, 0x02284, 0x02288, 0x02288, 0x02285,
+/* E2B0 */ 0x02289, 0x02289, 0x02ab9, 0x02ab5, 0x02aba, 0x02ab6, 0x02acb, 0x02acc,
+/* E2B8 */ 0x02acb, 0x0228a, 0x0228b, 0x02acc, 0x0, 0x0, 0x0, 0x0,
+/* E2C0 */ 0x0, 0x02270, 0x02271, 0x0226e, 0x0226f, 0x0, 0x02249, 0x0,
+/* E2C8 */ 0x02af3, 0x0f423, 0x0f428, 0x0, 0x0, 0x0, 0x0, 0x022ed,
+/* E2D0 */ 0x022ec, 0x02aee, 0x0, 0x0, 0x0, 0x0210f, 0x029a4, 0x029a5,
+/* E2D8 */ 0x0, 0x029a8, 0x029a9, 0x029aa, 0x029ab, 0x029ac, 0x029ad, 0x029ae,
+/* E2E0 */ 0x029af, 0x0299d, 0x025f9, 0x0, 0x025f8, 0x025fa, 0x029c9, 0x029b1,
+/* E2E8 */ 0x029b2, 0x029b3, 0x029b4, 0x0299a, 0x0ee39, 0x0204f, 0x023b5, 0x023b4,
+/* E2F0 */ 0x023b6, 0x029c2, 0x029c3, 0x0, 0x02a86, 0x02a8c, 0x02a7e, 0x02aa2,
+/* E2F8 */ 0x02a85, 0x02a8b, 0x02a7d, 0x02aa1, 0x0, 0x02ab7, 0x02aaf, 0x02ab8,
+/* E300 */ 0x02ab0, 0x02223, 0x02225, 0x02323, 0x02ac5, 0x02ac6, 0x02248, 0x0,
+/* E308 */ 0x0, 0x02a77, 0x02adb, 0x02a9d, 0x02a9e, 0x02aeb, 0x02a74, 0x02ae4,
+/* E310 */ 0x02ae8, 0x02ae7, 0x02ae9, 0x02ae6, 0x02a6d, 0x02a70, 0x02aae, 0x02a73,
+/* E318 */ 0x02a78, 0x02a66, 0x02a29, 0x02ad9, 0x02ada, 0x02a7f, 0x02a80, 0x02a81,
+/* E320 */ 0x02a82, 0x02a83, 0x02a84, 0x02a97, 0x02a98, 0x02a79, 0x02a7a, 0x0,
+/* E328 */ 0x0, 0x02a7b, 0x02a7c, 0x022da, 0x022db, 0x02a91, 0x02a92, 0x02aa4,
+/* E330 */ 0x02aa5, 0x02a93, 0x02a94, 0x02a8d, 0x02a8e, 0x02a8f, 0x02a90, 0x02a9f,
+/* E338 */ 0x02aa0, 0x02aaa, 0x02aab, 0x02aac, 0x02aad, 0x0, 0x0, 0x02979,
+/* E340 */ 0x0297b, 0x02abf, 0x02ac0, 0x02ac1, 0x02ac2, 0x02ac7, 0x02ac8, 0x02ad3,
+/* E348 */ 0x02ad4, 0x02ad5, 0x02ad6, 0x02ad7, 0x02ad8, 0x0ee40, 0x0ee41, 0x02ac3,
+/* E350 */ 0x02ac4, 0x02acf, 0x02ad0, 0x02ad1, 0x02ad2, 0x02aa6, 0x02aa7, 0x02aa8,
+/* E358 */ 0x02aa9, 0x029ce, 0x02ab3, 0x02ab4, 0x02abb, 0x02abc, 0x02976, 0x02978,
+/* E360 */ 0x0, 0x02218, 0x0, 0x022a5, 0x1d453, 0x021d4, 0x0, 0x0,
+/* E368 */ 0x0, 0x0, 0x0204e, 0x0, 0x0220c, 0x0220c, 0x02a55, 0x02a56,
+/* E370 */ 0x02209, 0x02057, 0x029dc, 0x0299c, 0x02a53, 0x02a54, 0x02a15, 0x02a16,
+/* E378 */ 0x02a0c, 0x0, 0x0, 0x022f7, 0x022f6, 0x022fe, 0x022fd, 0x001b5,
+/* E380 */ 0x0ee44, 0x0ee45, 0x02afd, 0x02af1, 0x029e3, 0x029e4, 0x029e5, 0x0,
+/* E388 */ 0x0, 0x0, 0x0, 0x02a6a, 0x02a6f, 0x02af2, 0x029de, 0x029dd,
+/* E390 */ 0x0, 0x02a5a, 0x02a5b, 0x02a5d, 0x02a5c, 0x02a10, 0x02a0d, 0x02a12,
+/* E398 */ 0x02a13, 0x02a14, 0x02a17, 0x02a11, 0x022f5, 0x0, 0x022f9, 0x0,
+/* E3A0 */ 0x022f2, 0x022fa, 0x022f3, 0x022fb, 0x022f4, 0x022fc, 0x0ee46, 0x0ee47,
+/* E3A8 */ 0x029bb, 0x02052, 0x029a6, 0x029a7, 0x02aec, 0x02aed, 0x02a57, 0x02a58,
+/* E3B0 */ 0x02a61, 0x02218, 0x0ee24, 0x0, 0x02026, 0x0ee30, 0x00308, 0x02aea,
+/* E3B8 */ 0x022f8, 0x0, 0x0, 0x0, 0x02209, 0x02275, 0x02274, 0x0,
+/* E3C0 */ 0x02053, 0x0, 0x0, 0x0, 0x02ae2, 0x0, 0x0, 0x0299f,
+/* E3C8 */ 0x029e1, 0x0, 0x02a51, 0x02a52, 0x003b1, 0x0026b, 0x0, 0x0,
+/* E3D0 */ 0x003c3, 0x00067, 0x025aa, 0x02a0f, 0x022bd, 0x0007c, 0x02934, 0x02935,
+/* E3D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E3E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E3E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E3F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E3F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E400 */ 0x0, 0x0, 0x0290c, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E408 */ 0x0, 0x029be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E410 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x02241, 0x0, 0x0,
+/* E418 */ 0x0, 0x0, 0x029b0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E420 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E428 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E430 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E438 */ 0x0, 0x0, 0x0, 0x0ee3b, 0x0ee3c, 0x0, 0x0, 0x0,
+/* E440 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E448 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E450 */ 0x00308, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E458 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E460 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E468 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E470 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E478 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E480 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E488 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E490 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E498 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4F8 */ 0x0, 0x02423, 0x0, 0x0, 0x0ee31, 0x0, 0x0, 0x0ee32,
+/* E500 */ 0x1d538, 0x1d539, 0x02102, 0x1d53b, 0x1d53c, 0x1d53d, 0x1d53e, 0x0210d,
+/* E508 */ 0x1d540, 0x1d541, 0x1d542, 0x1d543, 0x1d544, 0x02115, 0x1d546, 0x02119,
+/* E510 */ 0x0211a, 0x0211d, 0x1d54a, 0x1d54b, 0x1d54c, 0x1d54d, 0x1d54e, 0x1d54f,
+/* E518 */ 0x1d550, 0x02124, 0x0213f, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E520 */ 0x1d49c, 0x0212c, 0x1d49e, 0x1d49f, 0x02130, 0x02131, 0x1d4a2, 0x0210b,
+/* E528 */ 0x02110, 0x1d4a5, 0x1d4a6, 0x02112, 0x02133, 0x1d4a9, 0x1d4aa, 0x1d4ab,
+/* E530 */ 0x1d4ac, 0x0211b, 0x1d4ae, 0x1d4af, 0x1d4b0, 0x1d4b1, 0x1d4b2, 0x1d4b3,
+/* E538 */ 0x1d4b4, 0x1d4b5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E540 */ 0x1d4b6, 0x1d4b7, 0x1d4b8, 0x1d4b9, 0x0212f, 0x1d4bb, 0x0210a, 0x1d4bd,
+/* E548 */ 0x1d4be, 0x1d4bf, 0x1d4c0, 0x02113, 0x1d4c2, 0x1d4c3, 0x02134, 0x1d4c5,
+/* E550 */ 0x1d4c6, 0x1d4c7, 0x1d4c8, 0x1d4c9, 0x1d4ca, 0x1d4cb, 0x1d4cc, 0x1d4cd,
+/* E558 */ 0x1d4ce, 0x1d4cf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E560 */ 0x1d504, 0x1d505, 0x1d506, 0x1d507, 0x1d508, 0x1d509, 0x1d50a, 0x0210c,
+/* E568 */ 0x02111, 0x1d50d, 0x1d50e, 0x1d50f, 0x1d510, 0x1d511, 0x1d512, 0x1d513,
+/* E570 */ 0x1d514, 0x0211c, 0x1d516, 0x1d517, 0x1d518, 0x1d519, 0x1d51a, 0x1d51b,
+/* E578 */ 0x1d51c, 0x12128, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E580 */ 0x1d51e, 0x1d51f, 0x1d520, 0x1d521, 0x1d522, 0x1d523, 0x1d524, 0x1d525,
+/* E588 */ 0x1d526, 0x1d527, 0x1d528, 0x1d529, 0x1d52a, 0x1d52b, 0x1d52c, 0x1d52d,
+/* E590 */ 0x1d52e, 0x1d52f, 0x1d530, 0x1d531, 0x1d532, 0x1d533, 0x1d534, 0x1d535,
+/* E598 */ 0x1d536, 0x1d537, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E5A0 */ 0x02942, 0x02944, 0x02947, 0x02940, 0x02941, 0x0, 0x0, 0x0,
+/* E5A8 */ 0x02985, 0x0, 0x02980, 0x0, 0x0ec01, 0x0, 0x0, 0x02986,
+/* E5B0 */ 0x02af6, 0x0, 0x02999, 0x0, 0x0ee33, 0x0ee34, 0x0ee35, 0x0ee36,
+/* E5B8 */ 0x025a9, 0x0ee37, 0x0ee38, 0x0, 0x0ee80, 0x0, 0x0, 0x02222,
+/* E5C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x02a08, 0x02a07, 0x02a63,
+/* E5C8 */ 0x02a5e, 0x0, 0x029ca, 0x0, 0x0, 0x0, 0x0, 0x02a95,
+/* E5D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E5D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x02a96,
+/* E5E0 */ 0x0, 0x0, 0x0, 0x0, 0x0e84e, 0x0, 0x0, 0x0ee50,
+/* E5E8 */ 0x0ee51, 0x0ee52, 0x0ee53, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E5F0 */ 0x0, 0x0, 0x0ee3a, 0x0, 0x0ee54, 0x0, 0x0ee55, 0x0ee56,
+/* E5F8 */ 0x0ee57, 0x0ee58, 0x0, 0x0ee59, 0x0ee5a, 0x0ee5b, 0x029f8, 0x029f9,
+/* E600 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0ee5c, 0x0ee5d, 0x0ee5e,
+/* E608 */ 0x0ee5f, 0x0ee60, 0x0ee61, 0x0ee62, 0x0224c, 0x0224c, 0x0, 0x029cb,
+/* E610 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E618 */ 0x0, 0x02a2f, 0x0, 0x029b6, 0x0, 0x0, 0x0, 0x0,
+/* E620 */ 0x0, 0x0, 0x0, 0x02205, 0x0ee10, 0x00326, 0x000b7, 0x0,
+/* E628 */ 0x0, 0x003f5, 0x0, 0x0, 0x0, 0x0ee14, 0x00061, 0x0,
+/* E630 */ 0x0ee15, 0x0, 0x0ee18, 0x0ee19, 0x0ee1a, 0x0ee1b, 0x0ee1c, 0x0,
+/* E638 */ 0x0ee1d, 0x0ee1e, 0x0026e, 0x0, 0x002af, 0x0, 0x00235, 0x00236,
+/* E640 */ 0x0ee1f, 0x00221, 0x0ee12, 0x02afd, 0x0ee20, 0x0, 0x0, 0x02afb,
+/* E648 */ 0x0, 0x0, 0x0005c, 0x0ee13, 0x0ee16, 0x0, 0x0, 0x0,
+/* E650 */ 0x021f9, 0x0, 0x0, 0x0, 0x0e215, 0x0, 0x0, 0x0,
+/* E658 */ 0x0, 0x1d5b2, 0x0, 0x02a05, 0x0, 0x0, 0x0, 0x0,
+/* E660 */ 0x003d8, 0x003d9, 0x0223c, 0x003d2, 0x003f4, 0x0, 0x0, 0x0,
+/* E668 */ 0x00062, 0x00063, 0x00064, 0x00065, 0x00066, 0x00068, 0x00069, 0x0006a,
+/* E670 */ 0x0006b, 0x0006c, 0x0006d, 0x0006e, 0x0006f, 0x00070, 0x00071, 0x00072,
+/* E678 */ 0x00073, 0x00074, 0x00075, 0x00076, 0x00077, 0x00078, 0x00079, 0x0007a,
+/* E680 */ 0x0030f, 0x003c7, 0x003b2, 0x001a5, 0x01d1c, 0x01d07, 0x0004d, 0x0002f,
+/* E688 */ 0x01d00, 0x0029c, 0x0e2d4, 0x003b8, 0x003bb, 0x02260, 0x00110, 0x003c9,
+/* E690 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E698 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6A0 */ 0x0ee17, 0x0ee70, 0x0ee71, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E700 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E708 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E710 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E718 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E720 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E728 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E730 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E738 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E740 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E748 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E750 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E758 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E760 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E768 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E770 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E778 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E780 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E788 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E790 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E798 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E800 */ 0x003f6, 0x0213f, 0x0, 0x1d7d9, 0x1d7d8, 0x02a03, 0x0, 0x0,
+/* E808 */ 0x0, 0x02a09, 0x0290d, 0x029eb, 0x0, 0x029c6, 0x0, 0x0,
+/* E810 */ 0x029c7, 0x0, 0x02a32, 0x02ae3, 0x0, 0x0, 0x0, 0x0,
+/* E818 */ 0x0, 0x029df, 0x02adc, 0x02add, 0x02141, 0x0, 0x0, 0x0,
+/* E820 */ 0x0, 0x02a0e, 0x02a19, 0x02a1a, 0x02af4, 0x02a18, 0x0, 0x0,
+/* E828 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x027fb, 0x027fd, 0x0,
+/* E830 */ 0x027fe, 0x0, 0x0, 0x0, 0x02906, 0x02907, 0x0, 0x0,
+/* E838 */ 0x0, 0x029b8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E840 */ 0x02aa3, 0x0, 0x0, 0x02322, 0x02216, 0x0, 0x0214b, 0x0221d,
+/* E848 */ 0x0, 0x00303, 0x0, 0x0, 0x0, 0x0, 0x0e84e, 0x0,
+/* E850 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E858 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E860 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E868 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E870 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E878 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E880 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E888 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E890 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E898 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E8F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E900 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E908 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E910 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E918 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E920 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E928 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E930 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E938 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E940 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E948 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E950 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E958 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E960 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E968 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E970 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E978 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E980 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E988 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E990 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E998 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA00 */ 0x029a2, 0x0299e, 0x029a3, 0x0ee73, 0x0ee74, 0x0, 0x0ee75, 0x02943,
+/* EA08 */ 0x02051, 0x00319, 0x0ee11, 0x0, 0x0ee76, 0x0, 0x0, 0x0,
+/* EA10 */ 0x0, 0x029f3, 0x029f1, 0x0, 0x0, 0x029bd, 0x029ec, 0x029ed,
+/* EA18 */ 0x0, 0x029ba, 0x02050, 0x0ee77, 0x029ef, 0x0, 0x0, 0x0,
+/* EA20 */ 0x0, 0x0, 0x025a0, 0x0, 0x0, 0x0223c, 0x0ee21, 0x0ee22,
+/* EA28 */ 0x029ea, 0x02908, 0x0ee72, 0x0, 0x0ee78, 0x0ee79, 0x0ee7a, 0x0ee7b,
+/* EA30 */ 0x0ee7c, 0x0ee7d, 0x0ee23, 0x0, 0x0, 0x0, 0x0, 0x0ee7e,
+/* EA38 */ 0x0, 0x0, 0x0, 0x0, 0x02142, 0x029e0, 0x0293e, 0x029d1,
+/* EA40 */ 0x029d4, 0x0, 0x0, 0x02983, 0x02922, 0x02921, 0x029f2, 0x029f0,
+/* EA48 */ 0x029ee, 0x0, 0x029d6, 0x02034, 0x021f6, 0x0293b, 0x029d2, 0x029d5,
+/* EA50 */ 0x02984, 0x02143, 0x1d5ab, 0x0ee42, 0x0ee43, 0x025fb, 0x025fc, 0x02a0b,
+/* EA58 */ 0x020e8, 0x0297a, 0x02a28, 0x029cc, 0x02909, 0x0ee7f, 0x02144, 0x029c8,
+/* EA60 */ 0x027d0, 0x029d3, 0x029d7, 0x00318, 0x02977, 0x02278, 0x02279, 0x0,
+/* EA68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAA0 */ 0x02987, 0x02988, 0x02989, 0x0298a, 0x02982, 0x02a3e, 0x02a1f, 0x02a20,
+/* EAA8 */ 0x02040, 0x02a21, 0x02a64, 0x02a65, 0x022ff, 0x02a41, 0x020e6, 0x0,
+/* EAB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB00 */ 0x0ee3d, 0x0, 0x0ee3e, 0x029e7, 0x0ee81, 0x029e8, 0x029e9, 0x0,
+/* EB08 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EB98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EBF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC00 */ 0x02a3d, 0x0e5ac, 0x0e5a5, 0x00302, 0x0030c, 0x00330, 0x020e7, 0x029e2,
+/* EC08 */ 0x0290a, 0x0290b, 0x02140, 0x02a1b, 0x02a1c, 0x02a1d, 0x02a1e, 0x0,
+/* EC10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EC98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED00 */ 0x0292b, 0x0292c, 0x0292d, 0x0292e, 0x0292f, 0x02930, 0x02931, 0x02932,
+/* ED08 */ 0x0294c, 0x0294d, 0x021f7, 0x021f8, 0x021fa, 0x0, 0x021fb, 0x021fc,
+/* ED10 */ 0x02900, 0x02901, 0x02914, 0x02915, 0x02917, 0x02918, 0x0, 0x0,
+/* ED18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED20 */ 0x0293f, 0x0293a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED30 */ 0x0e370, 0x0e36c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED40 */ 0x0, 0x0, 0x02a2c, 0x02a2b, 0x02a62, 0x02a60, 0x0, 0x0,
+/* ED48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED50 */ 0x02a6b, 0x0, 0x0, 0x02a6c, 0x0, 0x0, 0x0, 0x0,
+/* ED58 */ 0x0, 0x0, 0x02a67, 0x0, 0x0, 0x0, 0x02a76, 0x0,
+/* ED60 */ 0x02270, 0x02271, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED68 */ 0x02a99, 0x02a9a, 0x02a9b, 0x02a9c, 0x0, 0x0, 0x0, 0x0,
+/* ED70 */ 0x02272, 0x02273, 0x02a9d, 0x02a9e, 0x02ab1, 0x02ab2, 0x0, 0x0,
+/* ED78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED80 */ 0x02ac9, 0x02aca, 0x02288, 0x02289, 0x02a59, 0x02a4e, 0x02a4f, 0x02acd,
+/* ED88 */ 0x02ace, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED90 */ 0x02ae0, 0x02ade, 0x02adf, 0x02ae5, 0x02ae1, 0x0299b, 0x029a0, 0x029a1,
+/* ED98 */ 0x0, 0x02af5, 0x02a68, 0x02a69, 0x02af7, 0x02af8, 0x02a0a, 0x0213e,
+/* EDA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDF0 */ 0x0ee82, 0x0ee83, 0x0ee84, 0x0220a, 0x0220d, 0x0ee85, 0x0, 0x0,
+/* EDF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE08 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EED0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EED8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF08 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F000 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F008 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F010 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F018 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F020 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F028 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F030 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F038 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F040 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F048 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F050 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F058 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F060 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F068 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F070 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F078 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F080 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F088 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F090 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F098 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F100 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F108 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F110 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F118 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F120 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F128 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F130 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F138 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F140 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F148 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F150 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F158 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F160 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F168 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F170 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F178 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F180 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F188 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F190 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F198 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F200 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F208 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F210 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F218 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F220 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F228 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F230 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F238 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F240 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F248 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F250 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F258 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F260 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F268 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F270 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F278 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F280 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F288 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F290 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F298 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F300 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F308 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F310 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F318 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F320 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F328 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F330 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F338 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F340 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F348 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F350 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F358 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F360 */ 0x0, 0x0, 0x0, 0x0, 0x0205f, 0x0, 0x0, 0x0,
+/* F368 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F370 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F378 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F380 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F388 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F390 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F398 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3B0 */ 0x0, 0x0, 0x0ee90, 0x0, 0x0, 0x0, 0x02062, 0x02061,
+/* F3B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F400 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F408 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F410 */ 0x029cf, 0x029d0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F418 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F420 */ 0x0, 0x0, 0x0, 0x0f423, 0x0, 0x0, 0x0, 0x0,
+/* F428 */ 0x0f428, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F430 */ 0x0, 0x02a75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F438 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F440 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F448 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F450 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F458 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F460 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F468 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F470 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F478 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F480 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F488 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F490 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F498 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F4F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F500 */ 0x0, 0x0, 0x0, 0x02912, 0x02913, 0x0294e, 0x0, 0x02952,
+/* F508 */ 0x02953, 0x0295a, 0x0295b, 0x02950, 0x02956, 0x02957, 0x0295e, 0x0295f,
+/* F510 */ 0x0294f, 0x02954, 0x02955, 0x0295c, 0x0295d, 0x02951, 0x02958, 0x02959,
+/* F518 */ 0x02960, 0x02961, 0x0, 0x0, 0x0, 0x0, 0x0, 0x029f4,
+/* F520 */ 0x0ee05, 0x0, 0x0, 0x0, 0x02970, 0x0, 0x0, 0x0ee06,
+/* F528 */ 0x0ee07, 0x025fe, 0x02191, 0x02193, 0x0, 0x0, 0x0, 0x0,
+/* F530 */ 0x025fd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F538 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F540 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F548 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F550 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F558 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F560 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F568 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F570 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F578 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F580 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F588 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F590 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F598 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F600 */ 0x0, 0x0ee91, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F608 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F610 */ 0x0, 0x0, 0x0, 0x0, 0x00346, 0x0033a, 0x0, 0x0,
+/* F618 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F620 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F628 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F630 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F638 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F640 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F648 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F650 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F658 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F660 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F668 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F670 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F678 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F680 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F688 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F690 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F698 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d552, 0x1d553,
+/* F6E8 */ 0x1d554, 0x1d555, 0x1d556, 0x1d557, 0x1d558, 0x1d559, 0x1d55a, 0x1d55b,
+/* F6F0 */ 0x1d55c, 0x1d55d, 0x1d55e, 0x1d55f, 0x1d560, 0x1d561, 0x1d562, 0x1d563,
+/* F6F8 */ 0x1d564, 0x1d565, 0x1d566, 0x1d567, 0x1d568, 0x1d569, 0x1d56a, 0x1d56b,
+/* F700 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F708 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F710 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F718 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F720 */ 0x0, 0x0ee92, 0x0ee93, 0x0ee94, 0x0, 0x026a0, 0x0, 0x0,
+/* F728 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F730 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F738 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F740 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F748 */ 0x0, 0x0ee00, 0x0213d, 0x02145, 0x02146, 0x02147, 0x02148, 0x02149,
+/* F750 */ 0x02981, 0x0ee95, 0x0ee96, 0x0ee97, 0x0, 0x0, 0x0ee98, 0x0ee99,
+/* F758 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F760 */ 0x0, 0x0, 0x0, 0x0ee9d, 0x0ee9a, 0x0, 0x0ee9e, 0x0ee9b,
+/* F768 */ 0x0ee9c, 0x0ee9f, 0x0eea0, 0x0eeab, 0x0eeac, 0x0, 0x0, 0x0,
+/* F770 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F778 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F780 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F788 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F790 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F798 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0eea1, 0x0eea2,
+/* F7C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7D0 */ 0x0eea3, 0x0eea4, 0x0eea5, 0x0eea6, 0x0eea7, 0x0eea8, 0x0eea9, 0x0eeaa,
+/* F7D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F800 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F808 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F810 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F818 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F820 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F828 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F830 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F838 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F840 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F848 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F850 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F858 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F860 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F868 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F870 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F878 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F880 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F888 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F890 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F898 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+};
+
+/* These data are taken from adobe's cid2code.txt for ac14 */
+const int cns14pua[] = { /* Big5 and friends */
+/* E000 */ 0x20547, 0x0, 0x205df, 0x23fc5, 0x0, 0x0, 0x0, 0x0,
+/* E008 */ 0x0, 0x24942, 0x289e4, 0x0, 0x219db, 0x0, 0x23cc8, 0x0,
+/* E010 */ 0x0, 0x0, 0x24933, 0x289aa, 0x202a0, 0x26bb3, 0x21305, 0x0,
+/* E018 */ 0x224ed, 0x0, 0x26d29, 0x27a84, 0x23600, 0x24ab1, 0x22513, 0x0,
+/* E020 */ 0x2037e, 0x0, 0x20380, 0x20347, 0x0, 0x2041f, 0x0, 0x0,
+/* E028 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x249a4, 0x20487, 0x0,
+/* E030 */ 0x233b4, 0x0, 0x20bff, 0x220fc, 0x202e5, 0x22530, 0x2058e, 0x23233,
+/* E038 */ 0x21983, 0x0, 0x0, 0x205b3, 0x23c99, 0x0, 0x0, 0x0,
+/* E040 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x24aa6, 0x0, 0x0,
+/* E048 */ 0x0, 0x0, 0x0, 0x0, 0x2372d, 0x0, 0x0, 0x0,
+/* E050 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E058 */ 0x0, 0x0, 0x26b13, 0x0, 0x28ade, 0x0, 0x0, 0x23f80,
+/* E060 */ 0x20954, 0x23fec, 0x0, 0x0, 0x20be2, 0x0, 0x21726, 0x0,
+/* E068 */ 0x0, 0x0, 0x0, 0x0, 0x216e8, 0x0, 0x0, 0x0,
+/* E070 */ 0x0, 0x286ab, 0x0, 0x0, 0x21596, 0x21613, 0x0, 0x0,
+/* E078 */ 0x28a9b, 0x0, 0x0, 0x0, 0x0, 0x25772, 0x0, 0x0,
+/* E080 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20b8f,
+/* E088 */ 0x0, 0x23feb, 0x22da3, 0x0, 0x20c77, 0x0, 0x0, 0x0,
+/* E090 */ 0x0, 0x0, 0x0, 0x26b53, 0x20d74, 0x0, 0x0, 0x0,
+/* E098 */ 0x0, 0x2170d, 0x20edd, 0x0, 0x20d4d, 0x289bc, 0x22698, 0x0,
+/* E0A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x218d7, 0x2403a,
+/* E0A8 */ 0x0, 0x24435, 0x0, 0x210b4, 0x0, 0x0, 0x2328a, 0x0,
+/* E0B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0B8 */ 0x0, 0x0, 0x28b66, 0x0, 0x2124f, 0x0, 0x241a5, 0x0,
+/* E0C0 */ 0x0, 0x0, 0x0, 0x26c7e, 0x0, 0x21416, 0x0, 0x21454,
+/* E0C8 */ 0x24363, 0x0, 0x24bf5, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0D0 */ 0x2123c, 0x0, 0x0, 0x0, 0x2a150, 0x24278, 0x0, 0x0,
+/* E0D8 */ 0x0, 0x0, 0x0, 0x0, 0x2163e, 0x0, 0x0, 0x21692,
+/* E0E0 */ 0x0, 0x0, 0x20d4e, 0x26c81, 0x26d2a, 0x217dc, 0x0, 0x217fb,
+/* E0E8 */ 0x217b2, 0x26da6, 0x0, 0x21828, 0x216d5, 0x0, 0x26e45, 0x0,
+/* E0F0 */ 0x0, 0x0, 0x249a9, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E0F8 */ 0x26fa1, 0x22554, 0x0, 0x21911, 0x0, 0x216b8, 0x0, 0x0,
+/* E100 */ 0x0, 0x0, 0x0, 0x27a0e, 0x0, 0x0, 0x20204, 0x0,
+/* E108 */ 0x0, 0x21a34, 0x259cc, 0x205a5, 0x0, 0x0, 0x0, 0x0,
+/* E110 */ 0x21b44, 0x0, 0x0, 0x0, 0x21ca5, 0x26b28, 0x0, 0x0,
+/* E118 */ 0x0, 0x0, 0x0, 0x0, 0x21df9, 0x21e37, 0x0, 0x0,
+/* E120 */ 0x0, 0x21ea4, 0x0, 0x0, 0x0, 0x0, 0x24901, 0x22049,
+/* E128 */ 0x22173, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E130 */ 0x244bc, 0x20cd3, 0x0, 0x0, 0x0, 0x0, 0x21771, 0x0,
+/* E138 */ 0x0, 0x28482, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E140 */ 0x0, 0x201c1, 0x2f894, 0x0, 0x0, 0x2133a, 0x0, 0x26888,
+/* E148 */ 0x223d0, 0x0, 0x22471, 0x0, 0x0, 0x26e6e, 0x0, 0x0,
+/* E150 */ 0x28a36, 0x0, 0x0, 0x0, 0x25250, 0x21f6a, 0x270f8, 0x22668,
+/* E158 */ 0x0, 0x2029e, 0x28a29, 0x0, 0x0, 0x21877, 0x0, 0x0,
+/* E160 */ 0x0, 0x0, 0x227b4, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E168 */ 0x24982, 0x2498f, 0x27a53, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E170 */ 0x0, 0x2f8a6, 0x26ed2, 0x0, 0x0, 0x20656, 0x0, 0x0,
+/* E178 */ 0x23fb7, 0x2285f, 0x0, 0x28b9d, 0x2995d, 0x0, 0x0, 0x22980,
+/* E180 */ 0x228c1, 0x0, 0x0, 0x0, 0x0, 0x20118, 0x0, 0x21770,
+/* E188 */ 0x0, 0x22e0d, 0x0, 0x249df, 0x0, 0x0, 0x0, 0x2138e,
+/* E190 */ 0x217fc, 0x0, 0x0, 0x22e36, 0x0, 0x2408c, 0x2571d, 0x0,
+/* E198 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24a28,
+/* E1A0 */ 0x24a23, 0x0, 0x0, 0x0, 0x2307e, 0x0, 0x24940, 0x0,
+/* E1A8 */ 0x0, 0x0, 0x21829, 0x0, 0x0, 0x0, 0x23400, 0x0,
+/* E1B0 */ 0x231f7, 0x231f8, 0x0, 0x231a4, 0x231a5, 0x0, 0x20e75, 0x0,
+/* E1B8 */ 0x251e6, 0x0, 0x0, 0x21e3d, 0x23231, 0x285f4, 0x231c8, 0x25313,
+/* E1C0 */ 0x0, 0x228f7, 0x0, 0x0, 0x2439c, 0x24a21, 0x0, 0x0,
+/* E1C8 */ 0x237c2, 0x0, 0x0, 0x0, 0x241cd, 0x290ed, 0x0, 0x0,
+/* E1D0 */ 0x0, 0x0, 0x0, 0x0, 0x233e6, 0x26da0, 0x0, 0x2346f,
+/* E1D8 */ 0x0, 0x0, 0x28adf, 0x0, 0x0, 0x235cd, 0x0, 0x0,
+/* E1E0 */ 0x0, 0x0, 0x2363c, 0x0, 0x0, 0x0, 0x28a4a, 0x0,
+/* E1E8 */ 0x0, 0x0, 0x0, 0x203c9, 0x0, 0x0, 0x0, 0x23659,
+/* E1F0 */ 0x2212a, 0x0, 0x23703, 0x0, 0x0, 0x0, 0x0, 0x2919c,
+/* E1F8 */ 0x0, 0x0, 0x20923, 0x0, 0x0, 0x0, 0x227cd, 0x0,
+/* E200 */ 0x23adb, 0x203b5, 0x21958, 0x0, 0x0, 0x23b5a, 0x0, 0x23efc,
+/* E208 */ 0x0, 0x0, 0x2248b, 0x248f1, 0x26b51, 0x0, 0x0, 0x0,
+/* E210 */ 0x23dbc, 0x0, 0x23dbd, 0x241a4, 0x2490c, 0x24900, 0x23cc9, 0x0,
+/* E218 */ 0x0, 0x20d32, 0x0, 0x231f9, 0x22491, 0x0, 0x0, 0x26d25,
+/* E220 */ 0x26da1, 0x26deb, 0x0, 0x0, 0x0, 0x0, 0x2497f, 0x24085,
+/* E228 */ 0x26e72, 0x0, 0x26f74, 0x0, 0x0, 0x0, 0x0, 0x28b21,
+/* E230 */ 0x0, 0x23e2f, 0x0, 0x23f82, 0x0, 0x0, 0x0, 0x2304b,
+/* E238 */ 0x0, 0x0, 0x0, 0x23e30, 0x0, 0x21497, 0x2403d, 0x0,
+/* E240 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x29170, 0x0, 0x0,
+/* E248 */ 0x24144, 0x0, 0x24091, 0x24155, 0x24039, 0x23ff0, 0x23fb4, 0x2413f,
+/* E250 */ 0x0, 0x24156, 0x24157, 0x24140, 0x261dd, 0x0, 0x0, 0x0,
+/* E258 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E260 */ 0x0, 0x24277, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E268 */ 0x24365, 0x0, 0x0, 0x242c1, 0x0, 0x2445a, 0x24a27, 0x24a22,
+/* E270 */ 0x0, 0x28be8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E278 */ 0x0, 0x0, 0x25605, 0x0, 0x0, 0x24974, 0x0, 0x0,
+/* E280 */ 0x0, 0x0, 0x23044, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E288 */ 0x24823, 0x2882b, 0x0, 0x28804, 0x0, 0x0, 0x0, 0x0,
+/* E290 */ 0x20c3a, 0x26a2e, 0x0, 0x0, 0x241e2, 0x216e7, 0x24a24, 0x0,
+/* E298 */ 0x0, 0x249b7, 0x2498d, 0x249fb, 0x0, 0x0, 0x0, 0x24a26,
+/* E2A0 */ 0x0, 0x205c3, 0x0, 0x0, 0x228ad, 0x0, 0x28eb2, 0x0,
+/* E2A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E2B0 */ 0x0, 0x0, 0x24a8c, 0x2415f, 0x24a79, 0x28b8f, 0x0, 0x28c03,
+/* E2B8 */ 0x2189e, 0x0, 0x21988, 0x0, 0x0, 0x0, 0x28ed9, 0x21a4b,
+/* E2C0 */ 0x0, 0x28eac, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24f82,
+/* E2C8 */ 0x0, 0x24d13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E2D0 */ 0x0, 0x0, 0x0, 0x0, 0x263f5, 0x0, 0x0, 0x0,
+/* E2D8 */ 0x26911, 0x2690e, 0x0, 0x0, 0x0, 0x0, 0x26f9f, 0x0,
+/* E2E0 */ 0x2509d, 0x2517d, 0x21e1c, 0x0, 0x0, 0x0, 0x0, 0x25220,
+/* E2E8 */ 0x0, 0x232ac, 0x0, 0x28964, 0x28968, 0x216c1, 0x0, 0x0,
+/* E2F0 */ 0x21376, 0x24a12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E2F8 */ 0x255e0, 0x0, 0x0, 0x0, 0x2760c, 0x0, 0x0, 0x28b2b,
+/* E300 */ 0x26083, 0x2261c, 0x0, 0x0, 0x0, 0x0, 0x25857, 0x0,
+/* E308 */ 0x27b39, 0x0, 0x0, 0x0, 0x27126, 0x0, 0x0, 0x2910d,
+/* E310 */ 0x0, 0x23ed7, 0x0, 0x26ed3, 0x0, 0x257e0, 0x0, 0x0,
+/* E318 */ 0x28be9, 0x0, 0x0, 0x258e1, 0x294d9, 0x0, 0x0, 0x259ac,
+/* E320 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x2648d, 0x0, 0x0,
+/* E328 */ 0x0, 0x0, 0x0, 0x0, 0x25c01, 0x0, 0x0, 0x0,
+/* E330 */ 0x2530e, 0x25cfe, 0x0, 0x0, 0x0, 0x25bb4, 0x26c7f, 0x0,
+/* E338 */ 0x0, 0x0, 0x0, 0x25d20, 0x0, 0x25c65, 0x0, 0x0,
+/* E340 */ 0x0, 0x0, 0x25cc1, 0x0, 0x0, 0x24882, 0x0, 0x0,
+/* E348 */ 0x24578, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E350 */ 0x0, 0x0, 0x26e44, 0x0, 0x26ed6, 0x0, 0x0, 0x0,
+/* E358 */ 0x0, 0x0, 0x0, 0x24057, 0x26029, 0x0, 0x0, 0x0,
+/* E360 */ 0x217f9, 0x0, 0x2836d, 0x0, 0x26121, 0x2615a, 0x0, 0x0,
+/* E368 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x262d0,
+/* E370 */ 0x0, 0x0, 0x26351, 0x0, 0x21661, 0x20068, 0x0, 0x23766,
+/* E378 */ 0x0, 0x2833a, 0x0, 0x26489, 0x0, 0x0, 0x0, 0x0,
+/* E380 */ 0x0, 0x2a087, 0x26cc3, 0x0, 0x0, 0x0, 0x22714, 0x0,
+/* E388 */ 0x26626, 0x23de3, 0x266e8, 0x0, 0x0, 0x28a48, 0x0, 0x0,
+/* E390 */ 0x0, 0x226f6, 0x0, 0x26498, 0x24fb8, 0x0, 0x2148a, 0x0,
+/* E398 */ 0x2185e, 0x0, 0x24a65, 0x24a95, 0x0, 0x0, 0x20b0d, 0x26a52,
+/* E3A0 */ 0x23d7e, 0x0, 0x214fd, 0x0, 0x0, 0x26b0a, 0x249a7, 0x23530,
+/* E3A8 */ 0x21773, 0x23df8, 0x0, 0x0, 0x2f994, 0x0, 0x0, 0x0,
+/* E3B0 */ 0x0, 0x20e16, 0x217b4, 0x0, 0x2317d, 0x2355a, 0x0, 0x0,
+/* E3B8 */ 0x0, 0x23e8b, 0x26da3, 0x26b05, 0x26b97, 0x235ce, 0x0, 0x0,
+/* E3C0 */ 0x0, 0x0, 0x0, 0x26da5, 0x0, 0x0, 0x0, 0x0,
+/* E3C8 */ 0x26ed4, 0x0, 0x0, 0x0, 0x26e42, 0x22eef, 0x0, 0x25be4,
+/* E3D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x23cb5, 0x0, 0x0,
+/* E3D8 */ 0x26b96, 0x26e77, 0x26e43, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E3E0 */ 0x0, 0x25c91, 0x0, 0x25cc0, 0x0, 0x0, 0x0, 0x26e99,
+/* E3E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x28625, 0x2863b, 0x0,
+/* E3F0 */ 0x27088, 0x0, 0x21582, 0x270cd, 0x2f9b2, 0x0, 0x0, 0x0,
+/* E3F8 */ 0x218a2, 0x0, 0x2739a, 0x0, 0x0, 0x2a0f8, 0x0, 0x22c27,
+/* E400 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E408 */ 0x0, 0x275e0, 0x23db9, 0x275e4, 0x0, 0x0, 0x0, 0x0,
+/* E410 */ 0x0, 0x0, 0x0, 0x0, 0x2770f, 0x0, 0x0, 0x0,
+/* E418 */ 0x0, 0x0, 0x0, 0x28a25, 0x0, 0x27924, 0x27abd, 0x0,
+/* E420 */ 0x0, 0x0, 0x0, 0x27a59, 0x0, 0x27b3a, 0x23f8f, 0x0,
+/* E428 */ 0x27b38, 0x0, 0x0, 0x0, 0x25430, 0x25565, 0x0, 0x0,
+/* E430 */ 0x0, 0x0, 0x24a7a, 0x0, 0x0, 0x0, 0x216df, 0x0,
+/* E438 */ 0x0, 0x0, 0x27d54, 0x27d8f, 0x2f9d4, 0x0, 0x27d53, 0x0,
+/* E440 */ 0x27d98, 0x27dbd, 0x0, 0x0, 0x21910, 0x0, 0x0, 0x0,
+/* E448 */ 0x24cc9, 0x0, 0x0, 0x0, 0x28002, 0x21014, 0x2498a, 0x0,
+/* E450 */ 0x281bc, 0x2710c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E458 */ 0x0, 0x28365, 0x28412, 0x0, 0x0, 0x2a29f, 0x20a50, 0x0,
+/* E460 */ 0x0, 0x289de, 0x2853d, 0x23dbb, 0x0, 0x23262, 0x0, 0x2a014,
+/* E468 */ 0x286bc, 0x28501, 0x22325, 0x0, 0x26ed7, 0x0, 0x2853c, 0x27abe,
+/* E470 */ 0x0, 0x2856c, 0x2860b, 0x0, 0x28713, 0x0, 0x286e6, 0x0,
+/* E478 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28933, 0x21e89,
+/* E480 */ 0x0, 0x0, 0x0, 0x0, 0x255b9, 0x0, 0x28ac6, 0x23c9b,
+/* E488 */ 0x28b0c, 0x255db, 0x20d31, 0x0, 0x0, 0x28ae1, 0x28beb, 0x0,
+/* E490 */ 0x0, 0x28ae2, 0x28ae5, 0x0, 0x0, 0x28bec, 0x28c39, 0x28bff,
+/* E498 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4A0 */ 0x0, 0x2267a, 0x286d8, 0x2127c, 0x23e2e, 0x0, 0x0, 0x0,
+/* E4A8 */ 0x0, 0x0, 0x0, 0x26ed5, 0x0, 0x0, 0x0, 0x28ae0,
+/* E4B0 */ 0x0, 0x0, 0x0, 0x26cb8, 0x20274, 0x26410, 0x290af, 0x290e5,
+/* E4B8 */ 0x24ad1, 0x21915, 0x2330a, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E4C0 */ 0x0, 0x24ae9, 0x0, 0x0, 0x0, 0x0, 0x291d5, 0x0,
+/* E4C8 */ 0x0, 0x291eb, 0x0, 0x0, 0x0, 0x230b7, 0x230bc, 0x0,
+/* E4D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2546c, 0x0,
+/* E4D8 */ 0x0, 0x29433, 0x0, 0x0, 0x2941d, 0x2797a, 0x0, 0x0,
+/* E4E0 */ 0x0, 0x0, 0x0, 0x0, 0x27175, 0x0, 0x20630, 0x2415c,
+/* E4E8 */ 0x25706, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26d27, 0x216d3,
+/* E4F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24a29, 0x0,
+/* E4F8 */ 0x29857, 0x29905, 0x0, 0x0, 0x0, 0x0, 0x0, 0x25725,
+/* E500 */ 0x0, 0x290b1, 0x29bd5, 0x0, 0x0, 0x29b05, 0x0, 0x0,
+/* E508 */ 0x0, 0x0, 0x28600, 0x0, 0x0, 0x269a8, 0x0, 0x2307d,
+/* E510 */ 0x0, 0x0, 0x29d3e, 0x0, 0x21863, 0x0, 0x2424b, 0x0,
+/* E518 */ 0x0, 0x0, 0x29e68, 0x0, 0x29fb7, 0x2a192, 0x2a1ab, 0x2a0e1,
+/* E520 */ 0x2a123, 0x2a1df, 0x0, 0x0, 0x2a134, 0x0, 0x0, 0x0,
+/* E528 */ 0x2215b, 0x2a193, 0x2a220, 0x2193b, 0x2a233, 0x0, 0x2a0b9, 0x2a2b4,
+/* E530 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24364,
+/* E538 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28c2b, 0x0,
+/* E540 */ 0x0, 0x0, 0x0, 0x26da2, 0x0, 0x0, 0x0, 0x0,
+/* E548 */ 0x0, 0x0, 0x0, 0x2908b, 0x0, 0x0, 0x0, 0x0,
+/* E550 */ 0x0, 0x0, 0x0, 0x0, 0x24975, 0x249bb, 0x0, 0x249f8,
+/* E558 */ 0x24348, 0x24a51, 0x0, 0x28bda, 0x218fa, 0x0, 0x2897e, 0x28e36,
+/* E560 */ 0x0, 0x0, 0x28a44, 0x0, 0x0, 0x0, 0x2896c, 0x244b9,
+/* E568 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x24473, 0x243f8, 0x0,
+/* E570 */ 0x217ef, 0x0, 0x218be, 0x23599, 0x0, 0x21885, 0x2542f, 0x217f8,
+/* E578 */ 0x0, 0x216fb, 0x21839, 0x0, 0x21774, 0x218d1, 0x25f4b, 0x0,
+/* E580 */ 0x216c0, 0x0, 0x24a25, 0x213fe, 0x212a8, 0x213c6, 0x214b6, 0x0,
+/* E588 */ 0x236a6, 0x0, 0x0, 0x24994, 0x27165, 0x23e31, 0x2555c, 0x23efb,
+/* E590 */ 0x27052, 0x0, 0x236ee, 0x2999d, 0x26f26, 0x0, 0x0, 0x0,
+/* E598 */ 0x0, 0x0, 0x21922, 0x0, 0x0, 0x2373f, 0x240e1, 0x2408b,
+/* E5A0 */ 0x2410f, 0x26c21, 0x0, 0x0, 0x266b1, 0x0, 0x20fdf, 0x20ba8,
+/* E5A8 */ 0x20e0d, 0x0, 0x28b13, 0x0, 0x0, 0x0, 0x0, 0x24436,
+/* E5B0 */ 0x0, 0x20465, 0x2037f, 0x0, 0x0, 0x25651, 0x0, 0x201ab,
+/* E5B8 */ 0x203cb, 0x0, 0x2030a, 0x20414, 0x0, 0x0, 0x202c0, 0x28eb3,
+/* E5C0 */ 0x20275, 0x0, 0x2020c, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E5C8 */ 0x24a0e, 0x23e8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E5D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23595,
+/* E5D8 */ 0x23e39, 0x23ebf, 0x0, 0x21884, 0x23e89, 0x0, 0x0, 0x205e0,
+/* E5E0 */ 0x0, 0x204a3, 0x20492, 0x20491, 0x0, 0x28a9c, 0x2070e, 0x0,
+/* E5E8 */ 0x0, 0x20873, 0x0, 0x0, 0x0, 0x0, 0x2438c, 0x20c20,
+/* E5F0 */ 0x249ac, 0x210e4, 0x0, 0x20e1d, 0x0, 0x0, 0x0, 0x0,
+/* E5F8 */ 0x0, 0x0, 0x0, 0x24abc, 0x2408d, 0x0, 0x0, 0x0,
+/* E600 */ 0x240c9, 0x0, 0x20345, 0x0, 0x20bc6, 0x0, 0x0, 0x0,
+/* E608 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28a46,
+/* E610 */ 0x216fa, 0x2176f, 0x21710, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E618 */ 0x0, 0x25946, 0x219f3, 0x21861, 0x24295, 0x0, 0x0, 0x0,
+/* E620 */ 0x0, 0x25e83, 0x0, 0x28bd7, 0x20413, 0x0, 0x0, 0x21303,
+/* E628 */ 0x0, 0x0, 0x0, 0x289fb, 0x0, 0x0, 0x0, 0x0,
+/* E630 */ 0x0, 0x0, 0x21996, 0x2197c, 0x23aee, 0x0, 0x0, 0x21903,
+/* E638 */ 0x21904, 0x0, 0x218a0, 0x0, 0x216fe, 0x0, 0x0, 0x28a47,
+/* E640 */ 0x21dba, 0x23472, 0x289a8, 0x0, 0x0, 0x21927, 0x217ab, 0x0,
+/* E648 */ 0x2173b, 0x0, 0x0, 0x275fd, 0x0, 0x0, 0x22860, 0x2262b,
+/* E650 */ 0x0, 0x0, 0x225af, 0x225be, 0x29088, 0x26f73, 0x0, 0x2003e,
+/* E658 */ 0x20046, 0x2261b, 0x0, 0x0, 0x0, 0x22c9b, 0x22d07, 0x246d4,
+/* E660 */ 0x2914d, 0x0, 0x24665, 0x22b6a, 0x0, 0x22b22, 0x23450, 0x298ea,
+/* E668 */ 0x22e78, 0x0, 0x2a45b, 0x0, 0x0, 0x0, 0x249e3, 0x22d67,
+/* E670 */ 0x0, 0x22ca1, 0x0, 0x0, 0x0, 0x0, 0x2308e, 0x232ad,
+/* E678 */ 0x24989, 0x232ab, 0x0, 0x232e0, 0x218d9, 0x2943f, 0x0, 0x23289,
+/* E680 */ 0x231b3, 0x0, 0x0, 0x25584, 0x28b22, 0x2558f, 0x216fc, 0x2555b,
+/* E688 */ 0x25425, 0x0, 0x23103, 0x2182a, 0x23234, 0x0, 0x2320f, 0x23182,
+/* E690 */ 0x242c9, 0x0, 0x26d24, 0x0, 0x0, 0x0, 0x27870, 0x21deb,
+/* E698 */ 0x0, 0x232d2, 0x232e1, 0x0, 0x25872, 0x0, 0x2383a, 0x237bc,
+/* E6A0 */ 0x0, 0x237a2, 0x233fe, 0x0, 0x0, 0x0, 0x2462a, 0x0,
+/* E6A8 */ 0x0, 0x0, 0x0, 0x0, 0x237d5, 0x24487, 0x0, 0x0,
+/* E6B0 */ 0x0, 0x0, 0x21912, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6B8 */ 0x0, 0x23fc0, 0x23c9a, 0x0, 0x0, 0x28bea, 0x28acb, 0x0,
+/* E6C0 */ 0x2801e, 0x289dc, 0x0, 0x0, 0x0, 0x249ec, 0x0, 0x23f7f,
+/* E6C8 */ 0x0, 0x0, 0x2403c, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E6D0 */ 0x0, 0x2431a, 0x24276, 0x0, 0x0, 0x0, 0x0, 0x2478f,
+/* E6D8 */ 0x24725, 0x0, 0x24aa4, 0x205eb, 0x0, 0x23ef8, 0x2365f, 0x24a4a,
+/* E6E0 */ 0x24917, 0x25fe1, 0x0, 0x0, 0x24adf, 0x28c23, 0x23f35, 0x0,
+/* E6E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x26dea, 0x0,
+/* E6F0 */ 0x0, 0x0, 0x24cd9, 0x24d06, 0x0, 0x0, 0x0, 0x2a5c6,
+/* E6F8 */ 0x0, 0x0, 0x28acc, 0x249ab, 0x2498e, 0x0, 0x0, 0x24a4e,
+/* E700 */ 0x0, 0x249c5, 0x248f3, 0x0, 0x0, 0x0, 0x28ae3, 0x21864,
+/* E708 */ 0x0, 0x25221, 0x251e7, 0x0, 0x23232, 0x0, 0x0, 0x0,
+/* E710 */ 0x24697, 0x23781, 0x0, 0x248f0, 0x0, 0x0, 0x0, 0x24aba,
+/* E718 */ 0x24ac7, 0x0, 0x24a96, 0x261ae, 0x0, 0x25581, 0x0, 0x0,
+/* E720 */ 0x0, 0x0, 0x0, 0x0, 0x27741, 0x256e3, 0x0, 0x0,
+/* E728 */ 0x0, 0x0, 0x0, 0x23efa, 0x0, 0x0, 0x0, 0x216e6,
+/* E730 */ 0x0, 0x0, 0x0, 0x20d4c, 0x2498c, 0x20299, 0x23dba, 0x2176e,
+/* E738 */ 0x0, 0x0, 0x0, 0x0, 0x201d4, 0x20c0d, 0x0, 0x0,
+/* E740 */ 0x226f5, 0x25aaf, 0x25a9c, 0x0, 0x2025b, 0x0, 0x0, 0x25bc6,
+/* E748 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x25bb3, 0x25ebc, 0x25ea6,
+/* E750 */ 0x0, 0x249f9, 0x217b0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E758 */ 0x0, 0x0, 0x0, 0x26261, 0x2615c, 0x27b48, 0x0, 0x25e82,
+/* E760 */ 0x0, 0x26b75, 0x20916, 0x0, 0x2004e, 0x235cf, 0x0, 0x26412,
+/* E768 */ 0x263f8, 0x24962, 0x0, 0x0, 0x2082c, 0x25ae9, 0x25d43, 0x0,
+/* E770 */ 0x25e0e, 0x0, 0x0, 0x0, 0x0, 0x2343f, 0x0, 0x249f7,
+/* E778 */ 0x265ad, 0x0, 0x265a0, 0x0, 0x27127, 0x26cd1, 0x0, 0x0,
+/* E780 */ 0x0, 0x0, 0x0, 0x0, 0x267b4, 0x0, 0x26a42, 0x0,
+/* E788 */ 0x0, 0x26a51, 0x0, 0x26da7, 0x0, 0x2721b, 0x0, 0x0,
+/* E790 */ 0x21840, 0x0, 0x218a1, 0x0, 0x218d8, 0x0, 0x2f9bc, 0x23d8f,
+/* E798 */ 0x0, 0x27422, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7A0 */ 0x0, 0x0, 0x25683, 0x0, 0x27785, 0x27784, 0x28bf5, 0x28bd9,
+/* E7A8 */ 0x28b9c, 0x289f9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7B0 */ 0x0, 0x29448, 0x0, 0x0, 0x24284, 0x0, 0x0, 0x0,
+/* E7B8 */ 0x21845, 0x0, 0x0, 0x0, 0x27ddc, 0x0, 0x0, 0x0,
+/* E7C0 */ 0x0, 0x0, 0x0, 0x0, 0x24c09, 0x0, 0x0, 0x0,
+/* E7C8 */ 0x0, 0x0, 0x22321, 0x0, 0x0, 0x0, 0x217da, 0x0,
+/* E7D0 */ 0x0, 0x2492f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E7D8 */ 0x28a4b, 0x0, 0x28afc, 0x0, 0x28c1d, 0x28c3b, 0x0, 0x0,
+/* E7E0 */ 0x0, 0x0, 0x0, 0x0, 0x28d34, 0x0, 0x0, 0x248ff,
+/* E7E8 */ 0x24a42, 0x243ea, 0x0, 0x23225, 0x0, 0x28ee7, 0x28e66, 0x28e65,
+/* E7F0 */ 0x0, 0x249ed, 0x24a78, 0x23fee, 0x0, 0x0, 0x0, 0x0,
+/* E7F8 */ 0x290b0, 0x0, 0x0, 0x29093, 0x257df, 0x0, 0x0, 0x28989,
+/* E800 */ 0x28c26, 0x28b2f, 0x263be, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E808 */ 0x2421b, 0x0, 0x0, 0x0, 0x20f26, 0x0, 0x28bc5, 0x24ab2,
+/* E810 */ 0x0, 0x294da, 0x0, 0x295d7, 0x0, 0x0, 0x28b50, 0x24a67,
+/* E818 */ 0x28b64, 0x0, 0x28a45, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E820 */ 0x0, 0x27b06, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28b65,
+/* E828 */ 0x258c8, 0x0, 0x0, 0x0, 0x0, 0x298f1, 0x0, 0x29948,
+/* E830 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x21302, 0x0, 0x249b8,
+/* E838 */ 0x214e8, 0x0, 0x2271f, 0x23db8, 0x0, 0x0, 0x0, 0x0,
+/* E840 */ 0x0, 0x22781, 0x2296b, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E848 */ 0x0, 0x0, 0x0, 0x29e2d, 0x0, 0x2a1f5, 0x2a0fe, 0x0,
+/* E850 */ 0x0, 0x24104, 0x0, 0x0, 0x0, 0x2a1b4, 0x2a0ed, 0x2a0f3,
+/* E858 */ 0x2992f, 0x0, 0x0, 0x26e12, 0x26fdf, 0x26b82, 0x0, 0x0,
+/* E860 */ 0x26da4, 0x26e84, 0x26df0, 0x0, 0x0, 0x26e00, 0x237d7, 0x26064,
+/* E868 */ 0x0, 0x2359c, 0x23640, 0x0, 0x249de, 0x0, 0x0, 0x0,
+/* E870 */ 0x0, 0x202bf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E878 */ 0x2555d, 0x0, 0x0, 0x0, 0x0, 0x21757, 0x231c9, 0x24941,
+/* E880 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x241b5,
+/* E888 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x241ac,
+/* E890 */ 0x0, 0x26c40, 0x24f97, 0x0, 0x217b5, 0x28a49, 0x0, 0x0,
+/* E898 */ 0x0, 0x0, 0x24488, 0x0, 0x0, 0x289fc, 0x0, 0x0,
+/* E8A0 */ 0x218d6, 0x20f1d, 0x0, 0x26cc0, 0x21413, 0x242fa, 0x22c26, 0x243c1,
+/* E8A8 */ 0x0, 0x23db7, 0x26741, 0x0, 0x2615b, 0x260a4, 0x249b9, 0x2498b,
+/* E8B0 */ 0x289fa, 0x0, 0x0, 0x0, 0x0, 0x28b63, 0x2189f, 0x0,
+/* E8B8 */ 0x24ab3, 0x0, 0x0, 0x0, 0x0, 0x24a3e, 0x24a94, 0x217d9,
+/* E8C0 */ 0x24a66, 0x203a7, 0x21424, 0x249e5, 0x0, 0x24916, 0x0, 0x24976,
+/* E8C8 */ 0x0, 0x0, 0x0, 0x204fe, 0x0, 0x28ace, 0x28a16, 0x0,
+/* E8D0 */ 0x28be7, 0x255d5, 0x0, 0x28a82, 0x0, 0x24943, 0x20cff, 0x0,
+/* E8D8 */ 0x2061a, 0x20beb, 0x20cb8, 0x0, 0x0, 0x217fa, 0x0, 0x216c2,
+/* E8E0 */ 0x24a50, 0x21852, 0x0, 0x0, 0x0, 0x28ac0, 0x249ad, 0x0,
+/* E8E8 */ 0x218bf, 0x21883, 0x27484, 0x0, 0x0, 0x23d5b, 0x0, 0x0,
+/* E8F0 */ 0x0, 0x28a81, 0x21862, 0x0, 0x0, 0x20ab4, 0x0, 0x0,
+/* E8F8 */ 0x0, 0x0, 0x0, 0x2139c, 0x0, 0x0, 0x28218, 0x0,
+/* E900 */ 0x290e4, 0x0, 0x0, 0x27e4f, 0x0, 0x0, 0x0, 0x23fed,
+/* E908 */ 0x23e2d, 0x0, 0x0, 0x0, 0x203f5, 0x0, 0x0, 0x0,
+/* E910 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28c1c,
+/* E918 */ 0x26bc0, 0x0, 0x0, 0x0, 0x21452, 0x0, 0x24362, 0x24a71,
+/* E920 */ 0x22fe3, 0x212b0, 0x223bd, 0x0, 0x0, 0x21398, 0x234e5, 0x27bf4,
+/* E928 */ 0x236df, 0x28a83, 0x237d6, 0x233fa, 0x24c9f, 0x0, 0x236ad, 0x26cb7,
+/* E930 */ 0x0, 0x0, 0x0, 0x26d26, 0x26d51, 0x26c82, 0x26fde, 0x0,
+/* E938 */ 0x27109, 0x0, 0x2173a, 0x0, 0x26c80, 0x27053, 0x217db, 0x0,
+/* E940 */ 0x0, 0x217b3, 0x0, 0x0, 0x21905, 0x241fc, 0x0, 0x0,
+/* E948 */ 0x2173c, 0x0, 0x0, 0x0, 0x0, 0x242a5, 0x0, 0x0,
+/* E950 */ 0x24293, 0x0, 0x23ef9, 0x27736, 0x2445b, 0x242ca, 0x0, 0x24259,
+/* E958 */ 0x289e1, 0x0, 0x26d28, 0x0, 0x244ce, 0x27e4d, 0x243bd, 0x0,
+/* E960 */ 0x24256, 0x21304, 0x0, 0x0, 0x243e9, 0x0, 0x0, 0x2f825,
+/* E968 */ 0x24a4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24a5d, 0x217df,
+/* E970 */ 0x0, 0x0, 0x0, 0x23afa, 0x23300, 0x20214, 0x0, 0x208d5,
+/* E978 */ 0x20619, 0x0, 0x21f9e, 0x2a2b6, 0x0, 0x2915b, 0x0, 0x0,
+/* E980 */ 0x0, 0x28a59, 0x29420, 0x0, 0x0, 0x0, 0x0, 0x27af4,
+/* E988 */ 0x0, 0x0, 0x256f6, 0x0, 0x0, 0x0, 0x27b18, 0x0,
+/* E990 */ 0x0, 0x248f2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E998 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9B0 */ 0x24f5c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9C8 */ 0x0, 0x0, 0x0, 0x25535, 0x0, 0x0, 0x0, 0x0,
+/* E9D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20ccf,
+/* E9F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* E9F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA08 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA40 */ 0x0, 0x0, 0x0, 0x27967, 0x0, 0x0, 0x0, 0x0,
+/* EA48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EA98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAA8 */ 0x0, 0x21bc2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EAB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20094,
+/* EAC0 */ 0x202b7, 0x203a0, 0x0, 0x0, 0x0, 0x204d7, 0x0, 0x0,
+/* EAC8 */ 0x0, 0x205d5, 0x20615, 0x20676, 0x216ba, 0x0, 0x0, 0x20ac2,
+/* EAD0 */ 0x20acd, 0x20bbf, 0x0, 0x2f83b, 0x20bcb, 0x0, 0x20bfb, 0x20c3b,
+/* EAD8 */ 0x20c53, 0x20c65, 0x20c7c, 0x0, 0x20c8d, 0x0, 0x20cb5, 0x20cdd,
+/* EAE0 */ 0x20ced, 0x20d6f, 0x20db2, 0x20dc8, 0x0, 0x0, 0x0, 0x20e04,
+/* EAE8 */ 0x20e0e, 0x20ed7, 0x20f90, 0x20f2d, 0x20e73, 0x0, 0x20fbc, 0x0,
+/* EAF0 */ 0x2105c, 0x2104f, 0x21076, 0x0, 0x2107b, 0x21088, 0x21096, 0x0,
+/* EAF8 */ 0x210bf, 0x210d3, 0x2112f, 0x2113b, 0x0, 0x0, 0x212e3, 0x21375,
+/* EB00 */ 0x21336, 0x0, 0x21577, 0x21619, 0x217c3, 0x217c7, 0x0, 0x0,
+/* EB08 */ 0x2182d, 0x2196a, 0x21a2d, 0x21a45, 0x21c2a, 0x21c70, 0x21cac, 0x21ec8,
+/* EB10 */ 0x0, 0x21ed5, 0x21f15, 0x0, 0x0, 0x22045, 0x0, 0x0,
+/* EB18 */ 0x2227c, 0x223d7, 0x223fa, 0x2272a, 0x22871, 0x2294f, 0x0, 0x22967,
+/* EB20 */ 0x22993, 0x22ad5, 0x0, 0x22ae8, 0x0, 0x22b0e, 0x0, 0x22b3f,
+/* EB28 */ 0x0, 0x0, 0x22c4c, 0x0, 0x22c88, 0x22cb7, 0x25be8, 0x22d08,
+/* EB30 */ 0x22d12, 0x22db7, 0x22d95, 0x22e42, 0x22f74, 0x22fcc, 0x23033, 0x23066,
+/* EB38 */ 0x2331f, 0x233de, 0x0, 0x0, 0x0, 0x27a79, 0x23567, 0x235f3,
+/* EB40 */ 0x0, 0x249ba, 0x0, 0x2361a, 0x23716, 0x0, 0x20346, 0x0,
+/* EB48 */ 0x0, 0x0, 0x23aa7, 0x27657, 0x25fe2, 0x23e11, 0x23eb9, 0x275fe,
+/* EB50 */ 0x2209a, 0x0, 0x0, 0x24119, 0x28a9a, 0x242ee, 0x2430d, 0x2403b,
+/* EB58 */ 0x24334, 0x24396, 0x24a45, 0x205ca, 0x0, 0x20611, 0x0, 0x21ea8,
+/* EB60 */ 0x0, 0x23cff, 0x24404, 0x244d6, 0x0, 0x24674, 0x0, 0x2472f,
+/* EB68 */ 0x285e8, 0x299c9, 0x0, 0x221c3, 0x0, 0x28b4e, 0x0, 0x24812,
+/* EB70 */ 0x248fb, 0x24a15, 0x0, 0x24ac0, 0x20c78, 0x0, 0x24ea5, 0x24f86,
+/* EB78 */ 0x20779, 0x0, 0x2502c, 0x0, 0x0, 0x0, 0x25299, 0x25419,
+/* EB80 */ 0x23f4a, 0x24aa7, 0x0, 0x25446, 0x2546e, 0x26b52, 0x0, 0x0,
+/* EB88 */ 0x2553f, 0x27632, 0x2555e, 0x0, 0x25562, 0x25566, 0x257c7, 0x2493f,
+/* EB90 */ 0x2585d, 0x0, 0x0, 0x233cc, 0x0, 0x25903, 0x0, 0x28948,
+/* EB98 */ 0x25aae, 0x25b89, 0x25c06, 0x21d90, 0x0, 0x0, 0x0, 0x26102,
+/* EBA0 */ 0x27c12, 0x0, 0x261b2, 0x24f9a, 0x0, 0x26402, 0x2644a, 0x0,
+/* EBA8 */ 0x26bf7, 0x0, 0x26484, 0x2191c, 0x0, 0x249f6, 0x26488, 0x23fef,
+/* EBB0 */ 0x26512, 0x0, 0x265bf, 0x266b5, 0x2271b, 0x0, 0x257e1, 0x0,
+/* EBB8 */ 0x0, 0x2f8cd, 0x0, 0x0, 0x24521, 0x266fc, 0x0, 0x24934,
+/* EBC0 */ 0x0, 0x0, 0x26cbd, 0x0, 0x0, 0x26799, 0x2686e, 0x26411,
+/* EBC8 */ 0x2685e, 0x0, 0x268c7, 0x0, 0x290c0, 0x20a11, 0x26926, 0x0,
+/* EBD0 */ 0x26939, 0x0, 0x0, 0x269fa, 0x0, 0x26a2d, 0x0, 0x26469,
+/* EBD8 */ 0x20021, 0x0, 0x26a34, 0x26b5b, 0x0, 0x23519, 0x0, 0x26b9d,
+/* EBE0 */ 0x0, 0x26ca4, 0x0, 0x0, 0x26dae, 0x0, 0x0, 0x2258d,
+/* EBE8 */ 0x2704b, 0x271cd, 0x0, 0x27280, 0x27285, 0x0, 0x2217a, 0x2728b,
+/* EBF0 */ 0x0, 0x272e6, 0x249d0, 0x0, 0x0, 0x27450, 0x20ef8, 0x0,
+/* EBF8 */ 0x0, 0x22926, 0x28473, 0x217b1, 0x0, 0x24a2a, 0x21820, 0x0,
+/* EC00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x29cad, 0x298a4, 0x0,
+/* EC08 */ 0x277cc, 0x27858, 0x0, 0x0, 0x2160a, 0x0, 0x2372f, 0x280e8,
+/* EC10 */ 0x213c5, 0x0, 0x0, 0x279dd, 0x291a8, 0x0, 0x0, 0x270af,
+/* EC18 */ 0x289ab, 0x279fd, 0x27a0a, 0x27b0b, 0x27d66, 0x2417a, 0x0, 0x0,
+/* EC20 */ 0x28009, 0x0, 0x2a2df, 0x0, 0x28318, 0x0, 0x26e07, 0x0,
+/* EC28 */ 0x0, 0x0, 0x2816f, 0x28023, 0x269b5, 0x213ed, 0x2322f, 0x28048,
+/* EC30 */ 0x0, 0x28c30, 0x28083, 0x0, 0x0, 0x28949, 0x0, 0x24988,
+/* EC38 */ 0x0, 0x0, 0x0, 0x24aa5, 0x23f81, 0x0, 0x0, 0x28090,
+/* EC40 */ 0x280f4, 0x2812e, 0x21fa1, 0x2814f, 0x28189, 0x281af, 0x2821a, 0x28306,
+/* EC48 */ 0x2832f, 0x2838a, 0x0, 0x28468, 0x286aa, 0x0, 0x0, 0x28956,
+/* EC50 */ 0x0, 0x0, 0x289b8, 0x0, 0x289e7, 0x0, 0x289e8, 0x28b46,
+/* EC58 */ 0x28bd4, 0x0, 0x28c09, 0x0, 0x28fc5, 0x290ec, 0x0, 0x29110,
+/* EC60 */ 0x2913c, 0x0, 0x2915e, 0x24aca, 0x0, 0x0, 0x0, 0x294e7,
+/* EC68 */ 0x295e9, 0x295b0, 0x295b8, 0x29732, 0x298d1, 0x29949, 0x2996a, 0x299c3,
+/* EC70 */ 0x29a28, 0x29b0e, 0x29d5a, 0x29d9b, 0x0, 0x29ef8, 0x29f23, 0x0,
+/* EC78 */ 0x0, 0x2a293, 0x0, 0x2a2ff, 0x0, 0x0, 0x2a5cb, 0x0,
+/* EC80 */ 0x20c9c, 0x0, 0x0, 0x0, 0x224b0, 0x0, 0x24a93, 0x0,
+/* EC88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x28b2c, 0x2789d, 0x0,
+/* EC90 */ 0x0, 0x217f5, 0x28024, 0x28b6c, 0x28b99, 0x27a3e, 0x266af, 0x0,
+/* EC98 */ 0x27655, 0x23cb7, 0x25635, 0x25956, 0x0, 0x25e81, 0x26258, 0x0,
+/* ECA0 */ 0x20e6d, 0x0, 0x0, 0x23e88, 0x24c9e, 0x0, 0x0, 0x217f6,
+/* ECA8 */ 0x2187b, 0x0, 0x0, 0x25c4a, 0x0, 0x25311, 0x0, 0x29d98,
+/* ECB0 */ 0x0, 0x0, 0x0, 0x0, 0x25ed8, 0x0, 0x23d40, 0x0,
+/* ECB8 */ 0x0, 0x20fea, 0x20d49, 0x236ba, 0x0, 0x0, 0x0, 0x0,
+/* ECC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20e9d,
+/* ECD0 */ 0x0, 0x0, 0x0, 0x0, 0x282e2, 0x0, 0x0, 0x0,
+/* ECD8 */ 0x0, 0x0, 0x0, 0x20c41, 0x20c96, 0x0, 0x25148, 0x20e76,
+/* ECE0 */ 0x22c62, 0x20ea2, 0x0, 0x0, 0x0, 0x21075, 0x0, 0x0,
+/* ECE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ECF0 */ 0x22b43, 0x0, 0x22eb3, 0x0, 0x0, 0x20da7, 0x0, 0x0,
+/* ECF8 */ 0x0, 0x0, 0x0, 0x0, 0x2688a, 0x0, 0x0, 0x0,
+/* ED00 */ 0x0, 0x0, 0x0, 0x0, 0x210c1, 0x0, 0x0, 0x24706,
+/* ED08 */ 0x0, 0x0, 0x26893, 0x0, 0x226f4, 0x27d2f, 0x241a3, 0x27d73,
+/* ED10 */ 0x26ed0, 0x272b6, 0x0, 0x211d9, 0x0, 0x23cfc, 0x2a6a9, 0x20eac,
+/* ED18 */ 0x20ef9, 0x0, 0x21ca2, 0x0, 0x24fc2, 0x27ff9, 0x20feb, 0x0,
+/* ED20 */ 0x0, 0x0, 0x22da0, 0x0, 0x247e0, 0x29d7c, 0x20fec, 0x20e0a,
+/* ED28 */ 0x0, 0x275a3, 0x20fed, 0x0, 0x26048, 0x21187, 0x0, 0x0,
+/* ED30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED38 */ 0x0, 0x0, 0x0, 0x24618, 0x0, 0x24b6e, 0x0, 0x0,
+/* ED40 */ 0x0, 0x25a95, 0x20979, 0x0, 0x0, 0x22465, 0x0, 0x29eac,
+/* ED48 */ 0x0, 0x0, 0x23cfe, 0x29f30, 0x0, 0x24fa9, 0x2959e, 0x29fde,
+/* ED50 */ 0x0, 0x23db6, 0x272b2, 0x267b3, 0x23720, 0x0, 0x0, 0x23ef7,
+/* ED58 */ 0x23e2c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2048e,
+/* ED60 */ 0x0, 0x0, 0x20eb6, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED68 */ 0x0, 0x0, 0x0, 0x2a434, 0x0, 0x0, 0x0, 0x0,
+/* ED70 */ 0x0, 0x230da, 0x243f2, 0x0, 0x0, 0x212a9, 0x0, 0x24963,
+/* ED78 */ 0x29e06, 0x0, 0x270ae, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED80 */ 0x0, 0x2176c, 0x0, 0x0, 0x294d0, 0x26335, 0x27164, 0x0,
+/* ED88 */ 0x20d28, 0x26d22, 0x24ae2, 0x20d71, 0x0, 0x0, 0x21f0f, 0x0,
+/* ED90 */ 0x0, 0x21dd1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* ED98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2493e, 0x0,
+/* EDA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2176d, 0x0,
+/* EDC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28e97,
+/* EDD0 */ 0x0, 0x26d23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x203fc,
+/* EDD8 */ 0x0, 0x0, 0x25c21, 0x23cfd, 0x0, 0x24919, 0x0, 0x0,
+/* EDE0 */ 0x0, 0x20cd4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x201f2, 0x0, 0x0,
+/* EDF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EDF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE08 */ 0x2a64a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE10 */ 0x0, 0x2837d, 0x0, 0x0, 0x0, 0x24a77, 0x0, 0x0,
+/* EE18 */ 0x0, 0x0, 0x0, 0x28a5a, 0x0, 0x0, 0x0, 0x0,
+/* EE20 */ 0x2a2b2, 0x0, 0x2f840, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE28 */ 0x0, 0x0, 0x24abb, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE30 */ 0x2183b, 0x26e05, 0x0, 0x0, 0x2251b, 0x0, 0x0, 0x0,
+/* EE38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE48 */ 0x26159, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x233f5, 0x0,
+/* EE58 */ 0x0, 0x0, 0x0, 0x28bc2, 0x0, 0x28e39, 0x0, 0x0,
+/* EE60 */ 0x21d46, 0x0, 0x0, 0x0, 0x20f3b, 0x0, 0x0, 0x0,
+/* EE68 */ 0x0, 0x0, 0x25f1a, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27486, 0x0,
+/* EE78 */ 0x0, 0x0, 0x0, 0x0, 0x267cc, 0x0, 0x26ed1, 0x0,
+/* EE80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE90 */ 0x0, 0x24011, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EE98 */ 0x0, 0x0, 0x0, 0x0, 0x28b2d, 0x0, 0x0, 0x0,
+/* EEA0 */ 0x0, 0x0, 0x23cc7, 0x25ed7, 0x27656, 0x25531, 0x21944, 0x212fe,
+/* EEA8 */ 0x29903, 0x26ddc, 0x270ad, 0x0, 0x261ad, 0x28a0f, 0x23677, 0x200ee,
+/* EEB0 */ 0x26846, 0x24f0e, 0x0, 0x0, 0x2634c, 0x0, 0x0, 0x2626b,
+/* EEB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EED0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EED8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EEF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF00 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF08 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF18 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF28 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF30 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF38 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF40 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF48 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF50 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF58 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF60 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF68 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF70 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF78 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF88 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF90 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EF98 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFA0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFA8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFB0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFB8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFC0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFC8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFD0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFD8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFE0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFE8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFF0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* EFF8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F000 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F008 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F010 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F018 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F020 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F028 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F030 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F038 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F040 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F048 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F050 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F058 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F060 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F068 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F070 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F078 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F080 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F088 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F090 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F098 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F0F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F100 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F108 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F110 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F118 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F120 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F128 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F130 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F138 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F140 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F148 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F150 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F158 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F160 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F168 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F170 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F178 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F180 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F188 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F190 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F198 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F1F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F200 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F208 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F210 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F218 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F220 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F228 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F230 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F238 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F240 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F248 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F250 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F258 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F260 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F268 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F270 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F278 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F280 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F288 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F290 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F298 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F2F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F300 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F308 */ 0x2010c, 0x0, 0x200d1, 0x200cd, 0x0, 0x0, 0x200cb, 0x21fe8,
+/* F310 */ 0x0, 0x200ca, 0x0, 0x0, 0x0, 0x0, 0x2010e, 0x0,
+/* F318 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F320 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F328 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F330 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F338 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F340 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F348 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F350 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F358 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F360 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F368 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F370 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F378 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F380 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F388 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F390 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F398 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3A0 */ 0x2a3a9, 0x21145, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3A8 */ 0x0, 0x0, 0x0, 0x0, 0x27735, 0x0, 0x0, 0x0,
+/* F3B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3F0 */ 0x209e7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F3F8 */ 0x0, 0x29df6, 0x2700e, 0x0, 0x2a133, 0x0, 0x0, 0x0,
+/* F400 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F408 */ 0x2846c, 0x21dca, 0x205d0, 0x22ae6, 0x0, 0x0, 0x0, 0x0,
+/* F410 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F418 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F420 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F428 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F430 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F438 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x27d84, 0x0, 0x0,
+/* F440 */ 0x20c42, 0x20d15, 0x2512b, 0x0, 0x22cc6, 0x0, 0x20341, 0x0,
+/* F448 */ 0x24db8, 0x294e5, 0x0, 0x280be, 0x0, 0x22c38, 0x0, 0x0,
+/* F450 */ 0x2815d, 0x269f2, 0x24dea, 0x0, 0x20d7c, 0x20fb4, 0x20cd5, 0x210f4,
+/* F458 */ 0x0, 0x0, 0x20e96, 0x20c0b, 0x20f64, 0x22ca9, 0x28256, 0x244d3,
+/* F460 */ 0x0, 0x20d46, 0x29a4d, 0x280e9, 0x0, 0x24ea7, 0x22cc2, 0x0,
+/* F468 */ 0x0, 0x295f4, 0x0, 0x0, 0x252c7, 0x297d4, 0x278c8, 0x22d44,
+/* F470 */ 0x0, 0x0, 0x0, 0x0, 0x260a5, 0x0, 0x0, 0x22d4c,
+/* F478 */ 0x22bca, 0x21077, 0x0, 0x2106f, 0x266da, 0x26716, 0x279a0, 0x0,
+/* F480 */ 0x25052, 0x20c43, 0x0, 0x221a1, 0x28b4c, 0x20731, 0x0, 0x0,
+/* F488 */ 0x201a9, 0x0, 0x0, 0x22d8d, 0x0, 0x245c8, 0x204fc, 0x26097,
+/* F490 */ 0x20f4c, 0x20d96, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22a66,
+/* F498 */ 0x2109d, 0x0, 0x0, 0x20d9c, 0x0, 0x0, 0x22775, 0x0,
+/* F4A0 */ 0x0, 0x0, 0x0, 0x0, 0x2a601, 0x20e09, 0x22acf, 0x22cc9,
+/* F4A8 */ 0x0, 0x210c8, 0x239c2, 0x0, 0x0, 0x2829b, 0x0, 0x25e49,
+/* F4B0 */ 0x220c7, 0x0, 0x20f31, 0x22cb2, 0x29720, 0x0, 0x0, 0x24e3b,
+/* F4B8 */ 0x0, 0x0, 0x27574, 0x22e8b, 0x22208, 0x2a65b, 0x28ccd, 0x20e7a,
+/* F4C0 */ 0x20c34, 0x2681c, 0x0, 0x210cf, 0x22803, 0x22939, 0x0, 0x251e3,
+/* F4C8 */ 0x20e8c, 0x20f8d, 0x20eaa, 0x0, 0x20f30, 0x20d47, 0x2114f, 0x20e4c,
+/* F4D0 */ 0x0, 0x20eab, 0x20ba9, 0x20d48, 0x210c0, 0x2113d, 0x0, 0x22696,
+/* F4D8 */ 0x0, 0x20fad, 0x233f4, 0x27639, 0x22bce, 0x20d7e, 0x20d7f, 0x22c51,
+/* F4E0 */ 0x22c55, 0x0, 0x20e98, 0x210c7, 0x20f2e, 0x2a632, 0x26b50, 0x28cd2,
+/* F4E8 */ 0x28d99, 0x28cca, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29ec3,
+/* F4F0 */ 0x0, 0x0, 0x2775e, 0x22dee, 0x0, 0x0, 0x0, 0x0,
+/* F4F8 */ 0x26572, 0x0, 0x0, 0x0, 0x280bd, 0x0, 0x20efa, 0x20e0f,
+/* F500 */ 0x20e77, 0x20efb, 0x0, 0x24deb, 0x0, 0x20cd6, 0x0, 0x227b5,
+/* F508 */ 0x210c9, 0x20e10, 0x20e78, 0x21078, 0x21148, 0x28207, 0x21455, 0x20e79,
+/* F510 */ 0x24e50, 0x22da4, 0x0, 0x2101d, 0x2101e, 0x210f5, 0x210f6, 0x0,
+/* F518 */ 0x20e11, 0x27694, 0x282cd, 0x20fb5, 0x20e7b, 0x2517e, 0x0, 0x20fb6,
+/* F520 */ 0x21180, 0x252d8, 0x2a2bd, 0x249da, 0x2183a, 0x24177, 0x2827c, 0x0,
+/* F528 */ 0x0, 0x0, 0x2573d, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F530 */ 0x0, 0x0, 0x0, 0x25b74, 0x2313d, 0x0, 0x0, 0x0,
+/* F538 */ 0x0, 0x0, 0x21bc1, 0x2f878, 0x0, 0x20086, 0x0, 0x0,
+/* F540 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F548 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x248e9, 0x0,
+/* F550 */ 0x0, 0x0, 0x0, 0x2626a, 0x0, 0x0, 0x2634b, 0x0,
+/* F558 */ 0x0, 0x26612, 0x26951, 0x0, 0x0, 0x0, 0x278b2, 0x0,
+/* F560 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x28e0f, 0x0, 0x0,
+/* F568 */ 0x0, 0x0, 0x0, 0x29810, 0x0, 0x0, 0x0, 0x0,
+/* F570 */ 0x0, 0x0, 0x20087, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F578 */ 0x0, 0x29c73, 0x0, 0x0, 0x0, 0x2414e, 0x0, 0x0,
+/* F580 */ 0x0, 0x251cd, 0x0, 0x25d30, 0x0, 0x28a32, 0x0, 0x0,
+/* F588 */ 0x0, 0x0, 0x0, 0x23281, 0x2a107, 0x0, 0x21980, 0x0,
+/* F590 */ 0x0, 0x0, 0x0, 0x2870f, 0x0, 0x0, 0x2a2ba, 0x0,
+/* F598 */ 0x0, 0x0, 0x0, 0x29947, 0x28aea, 0x0, 0x0, 0x0,
+/* F5A0 */ 0x2207e, 0x0, 0x0, 0x289e3, 0x0, 0x0, 0x0, 0x0,
+/* F5A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5B0 */ 0x21db6, 0x0, 0x0, 0x0, 0x22712, 0x0, 0x233f9, 0x0,
+/* F5B8 */ 0x0, 0x23c63, 0x0, 0x0, 0x0, 0x24505, 0x0, 0x0,
+/* F5C0 */ 0x24a13, 0x0, 0x0, 0x0, 0x25ca4, 0x25695, 0x0, 0x0,
+/* F5C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28db9, 0x2143f,
+/* F5D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5E0 */ 0x0, 0x0, 0x0, 0x0, 0x2497b, 0x0, 0x2710d, 0x0,
+/* F5E8 */ 0x26d74, 0x0, 0x26b15, 0x26fbe, 0x0, 0x0, 0x0, 0x0,
+/* F5F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F5F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F600 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F608 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F610 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F618 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F620 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F628 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F630 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F638 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F640 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F648 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F650 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F658 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F660 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F668 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F670 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F678 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F680 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F688 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F690 */ 0x0, 0x0, 0x0, 0x0, 0x289c0, 0x0, 0x0, 0x0,
+/* F698 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x23f41, 0x0,
+/* F6A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x20325, 0x0, 0x0,
+/* F6B0 */ 0x20ed8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F6F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F700 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F708 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F710 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F718 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F720 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F728 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F730 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F738 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F740 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F748 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F750 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F758 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F760 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F768 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F770 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F778 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F780 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F788 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F790 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F798 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x200cc, 0x0,
+/* F7E8 */ 0x2008a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x27607, 0x0,
+/* F7F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F7F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F800 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F808 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F810 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F818 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F820 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F828 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F830 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F838 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F840 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F848 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F850 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F858 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F860 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F868 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F870 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F878 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F880 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F888 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F890 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F898 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8A0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8A8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8B0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8B8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8C0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8C8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8D0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8D8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8E0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8E8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8F0 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+/* F8F8 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
+};
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/sd.h b/dviware/dvisvgm/libs/ff-woff/fontforge/sd.h
new file mode 100644
index 0000000000..9e9bd56c1d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/sd.h
@@ -0,0 +1,168 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _SD_H
+#define _SD_H
+# include <gimage.h>
+
+/* All coordinates are in millimeters */
+/* they will be displayed to the user scaled by the units field of the design */
+
+#include "splinefont.h"
+
+struct epattern {
+ struct entity *tile;
+ real width, height;
+ DBounds bbox;
+ real transform[6];
+};
+
+typedef struct entpen {
+ Color col;
+ struct gradient *grad;
+ struct epattern *tile;
+ float scale;
+ float opacity;
+} Pen;
+
+typedef struct textunit {
+ unichar_t *text;
+ SplineFont *sf;
+ float size; /* in points */
+ float kernafter;
+ Pen fill;
+ struct textunit *next;
+} TextUnit;
+
+struct filledsplines {
+ SplineSet *splines;
+ unsigned int isfillable: 1; /* All splinesets are closed */
+ Pen fill, stroke; /* A value of 0xffffffff means do not fill or stroke */
+ float stroke_width;
+ enum linejoin join;
+ enum linecap cap;
+ real transform[6]; /* The stroke may be quite different depending on the transformation (ie. ellipse not circle, rotated, etc) */
+};
+
+struct text {
+ TextUnit *text;
+ real transform[6];
+ struct entity *bound;
+};
+
+struct image {
+ GImage *image;
+ real transform[6];
+ Color col; /* that gets poured into imagemasks */
+};
+
+struct group {
+ struct entity *group;
+};
+
+enum entity_type { et_splines, et_text, et_image, et_group };
+
+typedef struct entity {
+ enum entity_type type;
+ union {
+ struct filledsplines splines;
+ struct text text;
+ struct image image;
+ struct group group;
+ } u;
+ SplineSet *clippath;
+ DBounds bb;
+ struct entity *next;
+} Entity;
+
+typedef struct entlayer {
+ Entity *entities;
+ char *name;
+ unsigned int isvisible: 1;
+} EntLayer;
+
+typedef struct tile {
+ Entity *tile;
+ struct tileinstance { real scale; struct gwindow *pixmap; struct tileinstance *next; }
+ *instances;
+ char *name;
+} Tile;
+
+typedef struct splinedesign {
+ int lcnt, lmax, active;
+ EntLayer *layers;
+
+ real width, height; /* in millimeters */
+ int16 hpages, vpages;
+ real pwidth, pheight; /* in millimeters */
+ real units; /* if user wants to see things in */
+ /* centimeters then units will be 10, if inches then 25.4, if points */
+ /* then 25.4/72, if 1/1200" then 25.4/1200, etc. */
+ struct dview *dvs;
+} SplineDesign, Design;
+
+/* Used for type3 fonts briefly */
+/* This is not a "real" structure. It is a temporary hack that encompasses */
+/* various possibilities, the combination of which won't occur in reality */
+typedef struct entitychar {
+ Entity *splines;
+ RefChar *refs;
+ int width, vwidth;
+ SplineChar *sc;
+ uint8 fromtype3;
+} EntityChar;
+
+extern SplinePointList *SplinesFromEntityChar(EntityChar *ec,int *flags,int is_stroked);
+
+struct pskeydict {
+ int16 cnt, max;
+ uint8 is_executable;
+ struct pskeyval *entries;
+};
+
+enum pstype { ps_void, ps_num, ps_bool, ps_string, ps_instr, ps_lit,
+ ps_mark, ps_array, ps_dict };
+
+union vals {
+ real val;
+ int tf;
+ char *str;
+ struct pskeydict dict; /* and for arrays too */
+};
+
+struct pskeyval {
+ enum pstype type;
+ union vals u;
+ char *key;
+};
+
+typedef struct retstack {
+ int max;
+ int cnt;
+ real *stack;
+} RetStack;
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/sfd.c b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd.c
new file mode 100644
index 0000000000..1f6ca428f9
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd.c
@@ -0,0 +1,4669 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <utype.h>
+#include <sys/stat.h>
+
+#ifndef NAME_MAX
+# ifndef _POSIX_NAME_MAX
+# define _POSIX_NAME_MAX 512
+# endif
+# define NAME_MAX _POSIX_NAME_MAX
+#endif
+
+static const char *joins[] = { "miter", "round", "bevel", "inher", NULL };
+static const char *caps[] = { "butt", "round", "square", "inher", NULL };
+static const char *spreads[] = { "pad", "reflect", "repeat", NULL };
+
+#define SFD_PTFLAG_TYPE_MASK 0x3
+#define SFD_PTFLAG_IS_SELECTED 0x4
+#define SFD_PTFLAG_NEXTCP_IS_DEFAULT 0x8
+#define SFD_PTFLAG_PREVCP_IS_DEFAULT 0x10
+#define SFD_PTFLAG_ROUND_IN_X 0x20
+#define SFD_PTFLAG_ROUND_IN_Y 0x40
+#define SFD_PTFLAG_INTERPOLATE 0x80
+#define SFD_PTFLAG_INTERPOLATE_NEVER 0x100
+#define SFD_PTFLAG_PREV_EXTREMA_MARKED_ACCEPTABLE 0x200
+#define SFD_PTFLAG_FORCE_OPEN_PATH 0x400
+
+
+
+
+/* I will retain this list in case there are still some really old sfd files */
+/* including numeric encodings. This table maps them to string encodings */
+static const char *charset_names[] = {
+ "custom",
+ "iso8859-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5",
+ "iso8859-6", "iso8859-7", "iso8859-8", "iso8859-9", "iso8859-10",
+ "iso8859-11", "iso8859-13", "iso8859-14", "iso8859-15",
+ "koi8-r",
+ "jis201",
+ "win", "mac", "symbol", "zapfding", "adobestandard",
+ "jis208", "jis212", "ksc5601", "gb2312", "big5", "big5hkscs", "johab",
+ "unicode", "unicode4", "sjis", "wansung", "gb2312pk", NULL};
+
+static const char *unicode_interp_names[] = { "none", "adobe", "greek",
+ "japanese", "tradchinese", "simpchinese", "korean", "ams", NULL };
+
+/* sfdir files and extensions */
+#define FONT_PROPS "font.props"
+#define STRIKE_PROPS "strike.props"
+#define EXT_CHAR '.'
+#define GLYPH_EXT ".glyph"
+#define BITMAP_EXT ".bitmap"
+#define STRIKE_EXT ".strike"
+#define SUBFONT_EXT ".subfont"
+#define INSTANCE_EXT ".instance"
+
+signed char inbase64[256] = {
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+};
+
+static const char *end_tt_instrs = "EndTTInstrs";
+static RefChar *SFDGetRef(FILE *sfd, int was_enc);
+static AnchorPoint *SFDReadAnchorPoints(FILE *sfd,SplineChar *sc,AnchorPoint** alist, AnchorPoint *lastap);
+static StemInfo *SFDReadHints(FILE *sfd);
+static DStemInfo *SFDReadDHints( SplineFont *sf,FILE *sfd,int old );
+extern uint8 *_IVParse(SplineFont *sf, char *text, int *len, void (*IVError)(void *,char *, int), void *iv);
+
+static int PeekMatch(FILE *stream, const char * target) {
+ // This returns 1 if target matches the next characters in the stream.
+ int pos1 = 0;
+ int lastread = getc(stream);
+ while (target[pos1] != '\0' && lastread != EOF && lastread == target[pos1]) {
+ pos1 ++; lastread = getc(stream);
+ }
+
+ int rewind_amount = pos1 + ((lastread == EOF) ? 0 : 1);
+ fseek(stream, -rewind_amount, SEEK_CUR);
+ return (target[pos1] == '\0');
+}
+
+/* Long lines can be broken by inserting \\\n (backslash newline) */
+/* into the line. I don't think this is ever ambiguous as I don't */
+/* think a line can end with backslash */
+/* UPDATE: it can... that's handled in getquotedeol() below. */
+static int nlgetc(FILE *sfd) {
+ int ch, ch2;
+
+ ch=getc(sfd);
+ if ( ch!='\\' )
+return( ch );
+ ch2 = getc(sfd);
+ if ( ch2=='\n' )
+return( nlgetc(sfd));
+ ungetc(ch2,sfd);
+return( ch );
+}
+
+static char *SFDReadUTF7Str(FILE *sfd) {
+ char *buffer = NULL, *pt, *end = NULL;
+ int ch1, ch2, ch3, ch4, done, c;
+ int prev_cnt=0, prev=0, in=0;
+
+ ch1 = nlgetc(sfd);
+ while ( isspace(ch1) && ch1!='\n' && ch1!='\r') ch1 = nlgetc(sfd);
+ if ( ch1=='\n' || ch1=='\r' )
+ ungetc(ch1,sfd);
+ if ( ch1!='"' )
+return( NULL );
+ pt = 0;
+ while ( (ch1=nlgetc(sfd))!=EOF && ch1!='"' ) {
+ done = 0;
+ if ( !done && !in ) {
+ if ( ch1=='+' ) {
+ ch1 = nlgetc(sfd);
+ if ( ch1=='-' ) {
+ ch1 = '+';
+ done = true;
+ } else {
+ in = true;
+ prev_cnt = 0;
+ }
+ } else
+ done = true;
+ }
+ if ( !done ) {
+ if ( ch1=='-' ) {
+ in = false;
+ } else if ( inbase64[ch1]==-1 ) {
+ in = false;
+ done = true;
+ } else {
+ ch1 = inbase64[ch1];
+ ch2 = inbase64[c = nlgetc(sfd)];
+ if ( ch2==-1 ) {
+ ungetc(c, sfd);
+ ch2 = ch3 = ch4 = 0;
+ } else {
+ ch3 = inbase64[c = nlgetc(sfd)];
+ if ( ch3==-1 ) {
+ ungetc(c, sfd);
+ ch3 = ch4 = 0;
+ } else {
+ ch4 = inbase64[c = nlgetc(sfd)];
+ if ( ch4==-1 ) {
+ ungetc(c, sfd);
+ ch4 = 0;
+ }
+ }
+ }
+ ch1 = (ch1<<18) | (ch2<<12) | (ch3<<6) | ch4;
+ if ( prev_cnt==0 ) {
+ prev = ch1&0xff;
+ ch1 >>= 8;
+ prev_cnt = 1;
+ } else /* if ( prev_cnt == 1 ) */ {
+ ch1 |= (prev<<24);
+ prev = (ch1&0xffff);
+ ch1 = (ch1>>16)&0xffff;
+ prev_cnt = 2;
+ }
+ done = true;
+ }
+ }
+ if ( pt+10>=end ) {
+ if ( buffer==NULL ) {
+ pt = buffer = malloc(400);
+ end = buffer+400;
+ } else if (pt) {
+ char *temp = realloc(buffer,end-buffer+400);
+ pt = temp+(pt-buffer);
+ end = temp+(end-buffer+400);
+ buffer = temp;
+ }
+ }
+ if ( pt && done )
+ pt = utf8_idpb(pt,ch1,0);
+ if ( prev_cnt==2 ) {
+ prev_cnt = 0;
+ if ( pt && prev!=0 )
+ pt = utf8_idpb(pt,prev,0);
+ }
+ if ( pt==0 ) {
+ free(buffer);
+ return( NULL );
+ }
+ }
+ if ( buffer==NULL )
+return( NULL );
+ *pt = '\0';
+ pt = copy(buffer);
+ free(buffer );
+return( pt );
+}
+
+struct enc85 {
+ FILE *sfd;
+ unsigned char sofar[4];
+ int pos;
+ int ccnt;
+};
+
+static void *SFDUnPickle(FILE *sfd, int python_data_has_lists) {
+ int ch, quoted;
+ static int max = 0;
+ static char *buf = NULL;
+ char *pt, *end;
+ int cnt;
+
+ pt = buf; end = buf+max;
+ while ( (ch=nlgetc(sfd))!='"' && ch!='\n' && ch!=EOF );
+ if ( ch!='"' )
+return( NULL );
+
+ quoted = false;
+ while ( ((ch=nlgetc(sfd))!='"' || quoted) && ch!=EOF ) {
+ if ( !quoted && ch=='\\' )
+ quoted = true;
+ else {
+ if ( pt>=end ) {
+ cnt = pt-buf;
+ buf = realloc(buf,(max+=200)+1);
+ pt = buf+cnt;
+ end = buf+max;
+ }
+ *pt++ = ch;
+ quoted = false;
+ }
+ }
+ if ( pt==buf )
+return( NULL );
+ *pt='\0';
+#ifdef _NO_PYTHON
+return( copy(buf));
+#else
+return( PyFF_UnPickleMeToObjects(buf));
+#endif
+ /* buf is a static buffer, I don't free it, I'll reuse it next time */
+}
+
+/* ********************************* INPUT ********************************** */
+#include "sfd1.h"
+
+char *getquotedeol(FILE *sfd) {
+ char *pt, *str, *end;
+ int ch;
+
+ pt = str = malloc(101); end = str+100;
+ while ( isspace(ch = nlgetc(sfd)) && ch!='\r' && ch!='\n' );
+ while ( ch!='\n' && ch!='\r' && ch!=EOF ) {
+ if ( ch=='\\' ) {
+ /* We can't use nlgetc() here, because it would misinterpret */
+ /* double backslash at the end of line. Multiline strings, */
+ /* broken with backslash + newline, are just handled above. */
+ ch = getc(sfd);
+ if ( ch=='n' ) ch='\n';
+ /* else if ( ch=='\\' ) ch=='\\'; */ /* second backslash of '\\' */
+
+ /* FontForge doesn't write other escape sequences in this context. */
+ /* So any other value of ch is assumed impossible. */
+ }
+ if ( pt>=end ) {
+ pt = realloc(str,end-str+101);
+ end = pt+(end-str)+100;
+ str = pt;
+ pt = end-100;
+ }
+ *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+ /* these strings should be in utf8 now, but some old sfd files might have */
+ /* latin1. Not a severe problems because they SHOULD be in ASCII. So any */
+ /* non-ascii strings are erroneous anyway */
+ if ( !utf8_valid(str) ) {
+ pt = latin1_2_utf8_copy(str);
+ free(str);
+ str = pt;
+ }
+return( str );
+}
+
+static int geteol(FILE *sfd, char *tokbuf) {
+ char *pt=tokbuf, *end = tokbuf+2000-2; int ch;
+
+ while ( isspace(ch = nlgetc(sfd)) && ch!='\r' && ch!='\n' );
+ while ( ch!='\n' && ch!='\r' && ch!=EOF ) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+return( pt!=tokbuf?1:ch==EOF?-1: 0 );
+}
+
+static int getprotectedname(FILE *sfd, char *tokbuf) {
+ char *pt=tokbuf, *end = tokbuf+100-2; int ch;
+
+ while ( (ch = nlgetc(sfd))==' ' || ch=='\t' );
+ while ( ch!=EOF && !isspace(ch) && ch!='[' && ch!=']' && ch!='{' && ch!='}' && ch!='<' && ch!='%' ) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ if ( pt==tokbuf && ch!=EOF )
+ *pt++ = ch;
+ else
+ ungetc(ch,sfd);
+ *pt='\0';
+return( pt!=tokbuf?1:ch==EOF?-1: 0 );
+}
+
+int getname(FILE *sfd, char *tokbuf) {
+ int ch;
+
+ while ( isspace(ch = nlgetc(sfd)));
+ ungetc(ch,sfd);
+return( getprotectedname(sfd,tokbuf));
+}
+
+static uint32 gettag(FILE *sfd) {
+ int ch, quoted;
+ uint32 tag;
+
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( (quoted = (ch=='\'')) ) ch = nlgetc(sfd);
+ tag = (ch<<24)|(nlgetc(sfd)<<16);
+ tag |= nlgetc(sfd)<<8;
+ tag |= nlgetc(sfd);
+ if ( quoted ) (void) nlgetc(sfd);
+return( tag );
+}
+
+static int getint(FILE *sfd, int *val) {
+ char tokbuf[100]; int ch;
+ char *pt=tokbuf, *end = tokbuf+100-2;
+
+ while ( isspace(ch = nlgetc(sfd)));
+ if ( ch=='-' || ch=='+' ) {
+ *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ while ( isdigit(ch)) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+ ungetc(ch,sfd);
+ *val = strtol(tokbuf,NULL,10);
+return( pt!=tokbuf?1:ch==EOF?-1: 0 );
+}
+
+static int getlonglong(FILE *sfd, long long *val) {
+ char tokbuf[100]; int ch;
+ char *pt=tokbuf, *end = tokbuf+100-2;
+
+ while ( isspace(ch = nlgetc(sfd)));
+ if ( ch=='-' || ch=='+' ) {
+ *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ while ( isdigit(ch)) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+ ungetc(ch,sfd);
+ *val = strtoll(tokbuf,NULL,10);
+return( pt!=tokbuf?1:ch==EOF?-1: 0 );
+}
+
+static int gethex(FILE *sfd, uint32 *val) {
+ char tokbuf[100]; int ch;
+ char *pt=tokbuf, *end = tokbuf+100-2;
+
+ while ( isspace(ch = nlgetc(sfd)));
+ if ( ch=='#' )
+ ch = nlgetc(sfd);
+ if ( ch=='-' || ch=='+' ) {
+ *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ if ( ch=='0' ) {
+ ch = nlgetc(sfd);
+ if ( ch=='x' || ch=='X' )
+ ch = nlgetc(sfd);
+ else {
+ ungetc(ch,sfd);
+ ch = '0';
+ }
+ }
+ while ( isdigit(ch) || (ch>='a' && ch<='f') || (ch>='A' && ch<='F')) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+ ungetc(ch,sfd);
+ *val = strtoul(tokbuf,NULL,16);
+return( pt!=tokbuf?1:ch==EOF?-1: 0 );
+}
+
+static int gethexints(FILE *sfd, uint32 *val, int cnt) {
+ int i, ch;
+
+ for ( i=0; i<cnt; ++i ) {
+ if ( i!=0 ) {
+ ch = nlgetc(sfd);
+ if ( ch!='.' ) ungetc(ch,sfd);
+ }
+ if ( !gethex(sfd,&val[i]))
+return( false );
+ }
+return( true );
+}
+
+static int getsint(FILE *sfd, int16 *val) {
+ int val2;
+ int ret = getint(sfd,&val2);
+ *val = val2;
+return( ret );
+}
+
+static int getusint(FILE *sfd, uint16 *val) {
+ int val2;
+ int ret = getint(sfd,&val2);
+ *val = val2;
+return( ret );
+}
+
+static int getreal(FILE *sfd, real *val) {
+ char tokbuf[100];
+ int ch;
+ char *pt=tokbuf, *end = tokbuf+100-2, *nend;
+
+ while ( isspace(ch = nlgetc(sfd)));
+ if ( ch!='e' && ch!='E' ) /* real's can't begin with exponants */
+ while ( isdigit(ch) || ch=='-' || ch=='+' || ch=='e' || ch=='E' || ch=='.' || ch==',' ) {
+ if ( pt<end ) *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt='\0';
+ ungetc(ch,sfd);
+ *val = strtod(tokbuf,&nend);
+ /* Beware of different locals! */
+ if ( *nend!='\0' ) {
+ if ( *nend=='.' )
+ *nend = ',';
+ else if ( *nend==',' )
+ *nend = '.';
+ *val = strtod(tokbuf,&nend);
+ }
+return( pt!=tokbuf && *nend=='\0'?1:ch==EOF?-1: 0 );
+}
+
+/* Don't use nlgetc here. We carefully control newlines when dumping in 85 */
+/* but backslashes can occur at end of line. */
+static int Dec85(struct enc85 *dec) {
+ int ch1, ch2, ch3, ch4, ch5;
+ unsigned int val;
+
+ if ( dec->pos<0 ) {
+ while ( isspace(ch1=getc(dec->sfd)));
+ if ( ch1=='z' ) {
+ dec->sofar[0] = dec->sofar[1] = dec->sofar[2] = dec->sofar[3] = 0;
+ dec->pos = 3;
+ } else {
+ while ( isspace(ch2=getc(dec->sfd)));
+ while ( isspace(ch3=getc(dec->sfd)));
+ while ( isspace(ch4=getc(dec->sfd)));
+ while ( isspace(ch5=getc(dec->sfd)));
+ val = ((((ch1-'!')*85+ ch2-'!')*85 + ch3-'!')*85 + ch4-'!')*85 + ch5-'!';
+ dec->sofar[3] = val>>24;
+ dec->sofar[2] = val>>16;
+ dec->sofar[1] = val>>8;
+ dec->sofar[0] = val;
+ dec->pos = 3;
+ }
+ }
+return( dec->sofar[dec->pos--] );
+}
+
+static void SFDGetType1(FILE *sfd) {
+ /* We've read the OrigType1 token (this is now obselete, but parse it in case there are any old sfds) */
+ int len;
+ struct enc85 dec;
+
+ memset(&dec,'\0', sizeof(dec)); dec.pos = -1;
+ dec.sfd = sfd;
+
+ getint(sfd,&len);
+ while ( --len >= 0 )
+ Dec85(&dec);
+}
+
+static void SFDGetTtfInstrs(FILE *sfd, SplineChar *sc) {
+ /* We've read the TtfInstr token, it is followed by a byte count */
+ /* and then the instructions in enc85 format */
+ int i,len;
+ struct enc85 dec;
+
+ memset(&dec,'\0', sizeof(dec)); dec.pos = -1;
+ dec.sfd = sfd;
+
+ getint(sfd,&len);
+ sc->ttf_instrs = malloc(len);
+ sc->ttf_instrs_len = len;
+ for ( i=0; i<len; ++i )
+ sc->ttf_instrs[i] = Dec85(&dec);
+}
+
+static void tterr(void *UNUSED(rubbish), char *message, int UNUSED(pos)) {
+ LogError(_("When loading tt instrs from sfd: %s\n"), message );
+}
+
+static void SFDGetTtInstrs(FILE *sfd, SplineChar *sc) {
+ /* We've read the TtInstr token, it is followed by text versions of */
+ /* the instructions, slurp it all into a big buffer, and then parse that */
+ char *buf=NULL, *pt=buf, *end=buf;
+ int ch;
+ int backlen = strlen(end_tt_instrs);
+ int instr_len;
+
+ while ( (ch=nlgetc(sfd))!=EOF ) {
+ if ( pt>=end ) {
+ char *newbuf = realloc(buf,(end-buf+200));
+ pt = newbuf+(pt-buf);
+ end = newbuf+(end+200-buf);
+ buf = newbuf;
+ }
+ *pt++ = ch;
+ if ( pt-buf>backlen && strncmp(pt-backlen,end_tt_instrs,backlen)==0 ) {
+ pt -= backlen;
+ break;
+ }
+ }
+ *pt = '\0';
+
+ sc->ttf_instrs = _IVParse(sc->parent,buf,&instr_len,tterr,NULL);
+ sc->ttf_instrs_len = instr_len;
+
+ free(buf);
+}
+
+static struct ttf_table *SFDGetTtfTable(FILE *sfd, SplineFont *sf,struct ttf_table *lasttab[2]) {
+ /* We've read the TtfTable token, it is followed by a tag and a byte count */
+ /* and then the instructions in enc85 format */
+ int i,len;
+ int which;
+ struct enc85 dec;
+ struct ttf_table *tab = chunkalloc(sizeof(struct ttf_table));
+
+ memset(&dec,'\0', sizeof(dec)); dec.pos = -1;
+ dec.sfd = sfd;
+
+ tab->tag = gettag(sfd);
+
+ if ( tab->tag==CHR('f','p','g','m') || tab->tag==CHR('p','r','e','p') ||
+ tab->tag==CHR('c','v','t',' ') || tab->tag==CHR('m','a','x','p'))
+ which = 0;
+ else
+ which = 1;
+
+ getint(sfd,&len);
+ tab->data = malloc(len);
+ tab->len = len;
+ for ( i=0; i<len; ++i )
+ tab->data[i] = Dec85(&dec);
+
+ if ( lasttab[which]!=NULL )
+ lasttab[which]->next = tab;
+ else if ( which==0 )
+ sf->ttf_tables = tab;
+ else
+ sf->ttf_tab_saved = tab;
+ lasttab[which] = tab;
+return( tab );
+}
+
+static struct ttf_table *SFDGetShortTable(FILE *sfd, SplineFont *sf,struct ttf_table *lasttab[2]) {
+ /* We've read the ShortTable token, it is followed by a tag and a word count */
+ /* and then the (text) values of the words that make up the cvt table */
+ int i,len, ch;
+ uint8 *pt;
+ int which, iscvt, started;
+ struct ttf_table *tab = chunkalloc(sizeof(struct ttf_table));
+
+ tab->tag = gettag(sfd);
+
+ if ( tab->tag==CHR('f','p','g','m') || tab->tag==CHR('p','r','e','p') ||
+ tab->tag==CHR('c','v','t',' ') || tab->tag==CHR('m','a','x','p'))
+ which = 0;
+ else
+ which = 1;
+ iscvt = tab->tag==CHR('c','v','t',' ');
+
+ getint(sfd,&len);
+ pt = tab->data = malloc(2*len);
+ tab->len = 2*len;
+ started = false;
+ for ( i=0; i<len; ++i ) {
+ int num;
+ getint(sfd,&num);
+ *pt++ = num>>8;
+ *pt++ = num&0xff;
+ if ( iscvt ) {
+ ch = nlgetc(sfd);
+ if ( ch==' ' ) {
+ if ( !started ) {
+ sf->cvt_names = calloc(len+1,sizeof(char *));
+ sf->cvt_names[len] = END_CVT_NAMES;
+ started = true;
+ }
+ sf->cvt_names[i] = SFDReadUTF7Str(sfd);
+ } else
+ ungetc(ch,sfd);
+ }
+ }
+
+ if ( lasttab[which]!=NULL )
+ lasttab[which]->next = tab;
+ else if ( which==0 )
+ sf->ttf_tables = tab;
+ else
+ sf->ttf_tab_saved = tab;
+ lasttab[which] = tab;
+return( tab );
+}
+
+static struct ttf_table *SFDGetTtTable(FILE *sfd, SplineFont *sf,struct ttf_table *lasttab[2]) {
+ /* We've read the TtTable token, it is followed by a tag */
+ /* and then the instructions in text format */
+ int ch;
+ int which;
+ struct ttf_table *tab = chunkalloc(sizeof(struct ttf_table));
+ char *buf=NULL, *pt=buf, *end=buf;
+ int backlen = strlen(end_tt_instrs);
+
+ tab->tag = gettag(sfd);
+
+ if ( tab->tag==CHR('f','p','g','m') || tab->tag==CHR('p','r','e','p') ||
+ tab->tag==CHR('c','v','t',' ') || tab->tag==CHR('m','a','x','p'))
+ which = 0;
+ else
+ which = 1;
+
+ while ( (ch=nlgetc(sfd))!=EOF ) {
+ if ( pt>=end ) {
+ char *newbuf = realloc(buf,(end-buf+200));
+ pt = newbuf+(pt-buf);
+ end = newbuf+(end+200-buf);
+ buf = newbuf;
+ }
+ *pt++ = ch;
+ if ( pt-buf>backlen && strncmp(pt-backlen,end_tt_instrs,backlen)==0 ) {
+ pt -= backlen;
+ break;
+ }
+ }
+ *pt = '\0';
+ tab->data = _IVParse(sf,buf,(int*)&tab->len,tterr,NULL);
+ free(buf);
+
+ if ( lasttab[which]!=NULL )
+ lasttab[which]->next = tab;
+ else if ( which==0 )
+ sf->ttf_tables = tab;
+ else
+ sf->ttf_tab_saved = tab;
+ lasttab[which] = tab;
+return( tab );
+}
+
+static int SFDCloseCheck(SplinePointList *spl,int order2) {
+ if ( spl->first!=spl->last &&
+ RealNear(spl->first->me.x,spl->last->me.x) &&
+ RealNear(spl->first->me.y,spl->last->me.y)) {
+ SplinePoint *oldlast = spl->last;
+ spl->first->prevcp = oldlast->prevcp;
+ spl->first->noprevcp = oldlast->noprevcp;
+ oldlast->prev->from->next = NULL;
+ spl->last = oldlast->prev->from;
+ chunkfree(oldlast->prev,sizeof(*oldlast));
+ chunkfree(oldlast->hintmask,sizeof(HintMask));
+ chunkfree(oldlast,sizeof(*oldlast));
+ SplineMake(spl->last,spl->first,order2);
+ spl->last = spl->first;
+return( true );
+ }
+return( false );
+}
+
+static void SFDGetHintMask(FILE *sfd,HintMask *hintmask) {
+ int nibble = 0, ch;
+
+ memset(hintmask,0,sizeof(HintMask));
+ for (;;) {
+ ch = nlgetc(sfd);
+ if ( isdigit(ch))
+ ch -= '0';
+ else if ( ch>='a' && ch<='f' )
+ ch -= 'a'-10;
+ else if ( ch>='A' && ch<='F' )
+ ch -= 'A'-10;
+ else {
+ ungetc(ch,sfd);
+ break;
+ }
+ if ( nibble<2*HntMax/8 )
+ (*hintmask)[nibble>>1] |= ch<<(4*(1-(nibble&1)));
+ ++nibble;
+ }
+}
+
+static void SFDGetSpiros(FILE *sfd,SplineSet *cur) {
+ int ch;
+ spiro_cp cp;
+
+ ch = nlgetc(sfd); /* S */
+ ch = nlgetc(sfd); /* p */
+ ch = nlgetc(sfd); /* i */
+ ch = nlgetc(sfd); /* r */
+ ch = nlgetc(sfd); /* o */
+ while ( fscanf(sfd,"%lg %lg %c", &cp.x, &cp.y, &cp.ty )==3 ) {
+ if ( cur!=NULL ) {
+ if ( cur->spiro_cnt>=cur->spiro_max )
+ cur->spiros = realloc(cur->spiros,(cur->spiro_max+=10)*sizeof(spiro_cp));
+ cur->spiros[cur->spiro_cnt++] = cp;
+ }
+ }
+ if ( cur!=NULL && (cur->spiros[cur->spiro_cnt-1].ty&0x7f)!=SPIRO_END ) {
+ if ( cur->spiro_cnt>=cur->spiro_max )
+ cur->spiros = realloc(cur->spiros,(cur->spiro_max+=1)*sizeof(spiro_cp));
+ memset(&cur->spiros[cur->spiro_cnt],0,sizeof(spiro_cp));
+ cur->spiros[cur->spiro_cnt++].ty = SPIRO_END;
+ }
+ ch = nlgetc(sfd);
+ if ( ch=='E' ) {
+ ch = nlgetc(sfd); /* n */
+ ch = nlgetc(sfd); /* d */
+ ch = nlgetc(sfd); /* S */
+ ch = nlgetc(sfd); /* p */
+ ch = nlgetc(sfd); /* i */
+ ch = nlgetc(sfd); /* r */
+ ch = nlgetc(sfd); /* o */
+ } else
+ ungetc(ch,sfd);
+}
+
+static SplineSet *SFDGetSplineSet(FILE *sfd,int order2) {
+ SplinePointList *cur=NULL, *head=NULL;
+ BasePoint current;
+ real stack[100];
+ int sp=0;
+ SplinePoint *pt = NULL;
+ int ch;
+ int ch2;
+ char tok[100];
+ int ttfindex = 0;
+ int lastacceptable;
+
+ current.x = current.y = 0;
+ lastacceptable = 0;
+ while ( 1 ) {
+ int have_read_val = 0;
+ int val = 0;
+
+ while ( getreal(sfd,&stack[sp])==1 )
+ if ( sp<99 )
+ ++sp;
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch=='E' || ch=='e' || ch==EOF )
+ break;
+ if ( ch=='S' ) {
+ ungetc(ch,sfd);
+ SFDGetSpiros(sfd,cur);
+ continue;
+ } else if (( ch=='N' ) &&
+ nlgetc(sfd)=='a' && /* a */
+ nlgetc(sfd)=='m' && /* m */
+ nlgetc(sfd)=='e' && /* e */
+ nlgetc(sfd)=='d' ) /* d */ {
+ ch2 = nlgetc(sfd); /* : */
+ // We are either fetching a splineset name (Named:) or a point name (NamedP:).
+ if (ch2=='P') { if ((nlgetc(sfd)==':') && (pt!=NULL)) { if (pt->name!=NULL) {free(pt->name);} pt->name = SFDReadUTF7Str(sfd); } }
+ else if (ch2==':') { if (cur != NULL) cur->contour_name = SFDReadUTF7Str(sfd); else { char * freetmp = SFDReadUTF7Str(sfd); free(freetmp); freetmp = NULL; } }
+ continue;
+ } else if ( ch=='P' && PeekMatch(sfd,"ath") ) {
+ int flags;
+ nlgetc(sfd); /* a */
+ nlgetc(sfd); /* t */
+ nlgetc(sfd); /* h */
+ if (PeekMatch(sfd,"Flags:")) {
+ nlgetc(sfd); /* F */
+ nlgetc(sfd); /* l */
+ nlgetc(sfd); /* a */
+ nlgetc(sfd); /* g */
+ nlgetc(sfd); /* s */
+ nlgetc(sfd); /* : */
+ getint(sfd,&flags);
+ if (cur != NULL) cur->is_clip_path = flags&1;
+ } else if (PeekMatch(sfd,"Start:")) {
+ nlgetc(sfd); /* S */
+ nlgetc(sfd); /* t */
+ nlgetc(sfd); /* a */
+ nlgetc(sfd); /* r */
+ nlgetc(sfd); /* t */
+ nlgetc(sfd); /* : */
+ getint(sfd,&flags);
+ if (cur != NULL) cur->start_offset = flags;
+ }
+ }
+ pt = NULL;
+ if ( ch=='l' || ch=='m' ) {
+ if ( sp>=2 ) {
+ current.x = stack[sp-2];
+ current.y = stack[sp-1];
+ sp -= 2;
+ pt = chunkalloc(sizeof(SplinePoint));
+ pt->me = current;
+ pt->noprevcp = true; pt->nonextcp = true;
+ if ( ch=='m' ) {
+ SplinePointList *spl = chunkalloc(sizeof(SplinePointList));
+ spl->first = spl->last = pt;
+ spl->start_offset = 0;
+ if ( cur!=NULL ) {
+ if ( SFDCloseCheck(cur,order2))
+ --ttfindex;
+ cur->next = spl;
+ } else
+ head = spl;
+ cur = spl;
+ } else {
+ if ( cur!=NULL && cur->first!=NULL && (cur->first!=cur->last || cur->first->next==NULL) ) {
+ if ( cur->last->nextcpindex==0xfffe )
+ cur->last->nextcpindex = 0xffff;
+ SplineMake(cur->last,pt,order2);
+ cur->last->nonextcp = 1;
+ pt->noprevcp = 1;
+ cur->last = pt;
+ }
+ }
+ } else
+ sp = 0;
+ } else if ( ch=='c' ) {
+ if ( sp>=6 ) {
+ getint(sfd,&val);
+ have_read_val = 1;
+
+
+ current.x = stack[sp-2];
+ current.y = stack[sp-1];
+ real original_current_x = current.x;
+ if( val & SFD_PTFLAG_FORCE_OPEN_PATH )
+ {
+ // Find somewhere vacant to put the point.x for now
+ // we need to do this check in case we choose a point that is already
+ // on the spline and this connect back to that point instead of creating
+ // an open path
+ while( 1 )
+ {
+ real offset = 0.1;
+ current.x += offset;
+ if( !cur || !SplinePointListContainsPointAtX( cur, current.x ))
+ {
+ break;
+ }
+ }
+ }
+
+ if ( cur!=NULL && cur->first!=NULL && (cur->first!=cur->last || cur->first->next==NULL) ) {
+ cur->last->nextcp.x = stack[sp-6];
+ cur->last->nextcp.y = stack[sp-5];
+ cur->last->nonextcp = false;
+ pt = chunkalloc(sizeof(SplinePoint));
+ pt->prevcp.x = stack[sp-4];
+ pt->prevcp.y = stack[sp-3];
+ pt->me = current;
+ pt->nonextcp = true;
+ if ( cur->last->nextcpindex==0xfffe )
+ cur->last->nextcpindex = ttfindex++;
+ else if ( cur->last->nextcpindex!=0xffff )
+ ttfindex = cur->last->nextcpindex+1;
+ SplineMake(cur->last,pt,order2);
+ cur->last = pt;
+ // pt->me is a copy of 'current' so we should now move
+ // the x coord of pt->me back to where it should be.
+ // The whole aim here is that this spline remains an open path
+ // when PTFLAG_FORCE_OPEN_PATH is set.
+ pt->me.x = original_current_x;
+ }
+
+ // Move the point back to the same location it was
+ // but do not connect it back to the point that is
+ // already there.
+ if( val & SFD_PTFLAG_FORCE_OPEN_PATH )
+ {
+ current.x = original_current_x;
+ }
+
+ sp -= 6;
+ } else
+ sp = 0;
+ }
+ if ( pt!=NULL ) {
+ if( !have_read_val )
+ getint(sfd,&val);
+
+ pt->pointtype = (val & SFD_PTFLAG_TYPE_MASK);
+ pt->selected = (val & SFD_PTFLAG_IS_SELECTED) > 0;
+ pt->nextcpdef = (val & SFD_PTFLAG_NEXTCP_IS_DEFAULT) > 0;
+ pt->prevcpdef = (val & SFD_PTFLAG_PREVCP_IS_DEFAULT) > 0;
+ pt->roundx = (val & SFD_PTFLAG_ROUND_IN_X) > 0;
+ pt->roundy = (val & SFD_PTFLAG_ROUND_IN_Y) > 0;
+ pt->dontinterpolate = (val & SFD_PTFLAG_INTERPOLATE_NEVER) > 0;
+ if ( pt->prev!=NULL )
+ pt->prev->acceptableextrema = (val & SFD_PTFLAG_PREV_EXTREMA_MARKED_ACCEPTABLE) > 0;
+ else
+ lastacceptable = (val & SFD_PTFLAG_PREV_EXTREMA_MARKED_ACCEPTABLE) > 0;
+ if ( val&0x80 )
+ pt->ttfindex = 0xffff;
+ else
+ pt->ttfindex = ttfindex++;
+ pt->nextcpindex = 0xfffe;
+ ch = nlgetc(sfd);
+ if ( ch=='x' ) {
+ pt->hintmask = chunkalloc(sizeof(HintMask));
+ SFDGetHintMask(sfd,pt->hintmask);
+ } else if ( ch!=',' )
+ ungetc(ch,sfd);
+ else {
+ ch = nlgetc(sfd);
+ if ( ch==',' )
+ pt->ttfindex = 0xfffe;
+ else {
+ ungetc(ch,sfd);
+ getint(sfd,&val);
+ pt->ttfindex = val;
+ nlgetc(sfd); /* skip comma */
+ if ( val!=-1 )
+ ttfindex = val+1;
+ }
+ ch = nlgetc(sfd);
+ if ( ch=='\r' || ch=='\n' )
+ ungetc(ch,sfd);
+ else {
+ ungetc(ch,sfd);
+ getint(sfd,&val);
+ pt->nextcpindex = val;
+ if ( val!=-1 )
+ ttfindex = val+1;
+ }
+ }
+ }
+ }
+ if ( cur!=NULL )
+ SFDCloseCheck(cur,order2);
+ if ( lastacceptable && cur->last->prev!=NULL )
+ cur->last->prev->acceptableextrema = true;
+ getname(sfd,tok);
+return( head );
+}
+
+static void SFDGetMinimumDistances(FILE *sfd, SplineChar *sc) {
+ SplineSet *ss;
+ SplinePoint *sp;
+ int pt,i, val, err;
+ int ch;
+ SplinePoint **mapping=NULL;
+ MinimumDistance *last, *md, *mdhead=NULL;
+
+ for ( i=0; i<2; ++i ) {
+ pt = 0;
+ for ( ss = sc->layers[ly_fore].splines; ss!=NULL; ss=ss->next ) {
+ for ( sp=ss->first; ; ) {
+ if ( mapping!=NULL ) mapping[pt] = sp;
+ pt++;
+ if ( sp->next == NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+ if ( mapping==NULL )
+ mapping = calloc(pt,sizeof(SplinePoint *));
+ }
+
+ last = NULL;
+ for ( ch=nlgetc(sfd); ch!=EOF && ch!='\n'; ch=nlgetc(sfd)) {
+ err = false;
+ while ( isspace(ch) && ch!='\n' ) ch=nlgetc(sfd);
+ if ( ch=='\n' )
+ break;
+ md = chunkalloc(sizeof(MinimumDistance));
+ if ( ch=='x' ) md->x = true;
+ getint(sfd,&val);
+ if ( val<-1 || val>=pt ) {
+ IError( "Minimum Distance specifies bad point (%d) in sfd file\n", val );
+ err = true;
+ } else if ( val!=-1 ) {
+ md->sp1 = mapping[val];
+ md->sp1->dontinterpolate = true;
+ }
+ ch = nlgetc(sfd);
+ if ( ch!=',' ) {
+ IError( "Minimum Distance lacks a comma where expected\n" );
+ err = true;
+ }
+ getint(sfd,&val);
+ if ( val<-1 || val>=pt ) {
+ IError( "Minimum Distance specifies bad point (%d) in sfd file\n", val );
+ err = true;
+ } else if ( val!=-1 ) {
+ md->sp2 = mapping[val];
+ md->sp2->dontinterpolate = true;
+ }
+ if ( !err ) {
+ if ( last!=NULL )
+ last->next = md;
+ last = md;
+ } else
+ chunkfree(md,sizeof(MinimumDistance));
+ }
+ free(mapping);
+
+ /* Obsolete concept */
+ MinimumDistancesFree(mdhead);
+}
+
+static HintInstance *SFDReadHintInstances(FILE *sfd, StemInfo *stem) {
+ HintInstance *head=NULL, *last=NULL, *cur;
+ real begin, end;
+ int ch;
+
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ if ( ch=='G' && stem != NULL ) {
+ stem->ghost = true;
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ }
+ if ( ch!='<' ) {
+ ungetc(ch,sfd);
+return(NULL);
+ }
+ while ( getreal(sfd,&begin)==1 && getreal(sfd,&end)) {
+ cur = chunkalloc(sizeof(HintInstance));
+ cur->begin = begin;
+ cur->end = end;
+ if ( head == NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ if ( ch!='>' )
+ ungetc(ch,sfd);
+return( head );
+}
+
+static StemInfo *SFDReadHints(FILE *sfd) {
+ StemInfo *head=NULL, *last=NULL, *cur;
+ real start, width;
+
+ while ( getreal(sfd,&start)==1 && getreal(sfd,&width)) {
+ cur = chunkalloc(sizeof(StemInfo));
+ cur->start = start;
+ cur->width = width;
+ cur->where = SFDReadHintInstances(sfd,cur);
+ if ( head == NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+return( head );
+}
+
+static DStemInfo *SFDReadDHints( SplineFont *sf,FILE *sfd,int old ) {
+ DStemInfo *head=NULL, *last=NULL, *cur;
+ int i;
+ BasePoint bp[4], *bpref[4], left, right, unit;
+ double rstartoff, rendoff, lendoff;
+
+ if ( old ) {
+ for ( i=0 ; i<4 ; i++ ) bpref[i] = &bp[i];
+
+ while ( getreal( sfd,&bp[0].x ) && getreal( sfd,&bp[0].y ) &&
+ getreal( sfd,&bp[1].x ) && getreal( sfd,&bp[1].y ) &&
+ getreal( sfd,&bp[2].x ) && getreal( sfd,&bp[2].y ) &&
+ getreal( sfd,&bp[3].x ) && getreal( sfd,&bp[3].y )) {
+
+ /* Ensure point coordinates specified in the sfd file do */
+ /* form a diagonal line */
+ if ( PointsDiagonalable( sf,bpref,&unit )) {
+ cur = chunkalloc( sizeof( DStemInfo ));
+ cur->left = *bpref[0];
+ cur->right = *bpref[1];
+ cur->unit = unit;
+ /* Generate a temporary hint instance, so that the hint can */
+ /* be visible in charview even if subsequent rebuilding instances */
+ /* fails (e. g. for composite characters) */
+ cur->where = chunkalloc( sizeof( HintInstance ));
+ rstartoff = ( cur->right.x - cur->left.x ) * cur->unit.x +
+ ( cur->right.y - cur->left.y ) * cur->unit.y;
+ rendoff = ( bpref[2]->x - cur->left.x ) * cur->unit.x +
+ ( bpref[2]->y - cur->left.y ) * cur->unit.y;
+ lendoff = ( bpref[3]->x - cur->left.x ) * cur->unit.x +
+ ( bpref[3]->y - cur->left.y ) * cur->unit.y;
+ cur->where->begin = ( rstartoff > 0 ) ? rstartoff : 0;
+ cur->where->end = ( rendoff > lendoff ) ? lendoff : rendoff;
+ MergeDStemInfo( sf,&head,cur );
+ }
+ }
+ } else {
+ while ( getreal( sfd,&left.x ) && getreal( sfd,&left.y ) &&
+ getreal( sfd,&right.x ) && getreal( sfd,&right.y ) &&
+ getreal( sfd,&unit.x ) && getreal( sfd,&unit.y )) {
+ cur = chunkalloc( sizeof( DStemInfo ));
+ cur->left = left;
+ cur->right = right;
+ cur->unit = unit;
+ cur->where = SFDReadHintInstances( sfd,NULL );
+ if ( head == NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+ }
+return( head );
+}
+
+static DeviceTable *SFDReadDeviceTable(FILE *sfd,DeviceTable *adjust) {
+ int i, junk, first, last, ch, len;
+
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='{' ) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='}' )
+return(NULL);
+ else
+ ungetc(ch,sfd);
+ getint(sfd,&first);
+ ch = nlgetc(sfd); /* Should be '-' */
+ getint(sfd,&last);
+ len = last-first+1;
+ if ( len<=0 ) {
+ IError( "Bad device table, invalid length.\n" );
+return(NULL);
+ }
+ if ( adjust==NULL )
+ adjust = chunkalloc(sizeof(DeviceTable));
+ adjust->first_pixel_size = first;
+ adjust->last_pixel_size = last;
+ adjust->corrections = malloc(len);
+ for ( i=0; i<len; ++i ) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=',' ) ungetc(ch,sfd);
+ getint(sfd,&junk);
+ adjust->corrections[i] = junk;
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!='}' ) ungetc(ch,sfd);
+ } else
+ ungetc(ch,sfd);
+return( adjust );
+}
+
+static ValDevTab *SFDReadValDevTab(FILE *sfd) {
+ int i, j, ch;
+ ValDevTab vdt;
+ char buf[4];
+
+ memset(&vdt,0,sizeof(vdt));
+ buf[3] = '\0';
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='[' ) {
+ for ( i=0; i<4; ++i ) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch==']' )
+ break;
+ buf[0]=ch;
+ for ( j=1; j<3; ++j ) buf[j]=nlgetc(sfd);
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!='=' ) ungetc(ch,sfd);
+ SFDReadDeviceTable(sfd,
+ strcmp(buf,"ddx")==0 ? &vdt.xadjust :
+ strcmp(buf,"ddy")==0 ? &vdt.yadjust :
+ strcmp(buf,"ddh")==0 ? &vdt.xadv :
+ strcmp(buf,"ddv")==0 ? &vdt.yadv :
+ (&vdt.xadjust) + i );
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=']' ) ungetc(ch,sfd);
+ else
+ break;
+ }
+ if ( vdt.xadjust.corrections!=NULL || vdt.yadjust.corrections!=NULL ||
+ vdt.xadv.corrections!=NULL || vdt.yadv.corrections!=NULL ) {
+ ValDevTab *v = chunkalloc(sizeof(ValDevTab));
+ *v = vdt;
+return( v );
+ }
+ } else
+ ungetc(ch,sfd);
+return( NULL );
+}
+
+static AnchorPoint *SFDReadAnchorPoints(FILE *sfd,SplineChar *sc,AnchorPoint** alist, AnchorPoint *lastap)
+{
+ AnchorPoint *ap = chunkalloc(sizeof(AnchorPoint));
+ AnchorClass *an;
+ char *name;
+ char tok[200];
+ int ch;
+
+ name = SFDReadUTF7Str(sfd);
+ if ( name==NULL ) {
+ LogError(_("Anchor Point with no class name: %s"), sc->name );
+ AnchorPointsFree(ap);
+return( lastap );
+ }
+ for ( an=sc->parent->anchor; an!=NULL && strcmp(an->name,name)!=0; an=an->next );
+ free(name);
+ ap->anchor = an;
+ getreal(sfd,&ap->me.x);
+ getreal(sfd,&ap->me.y);
+ ap->type = -1;
+ if ( getname(sfd,tok)==1 ) {
+ if ( strcmp(tok,"mark")==0 )
+ ap->type = at_mark;
+ else if ( strcmp(tok,"basechar")==0 )
+ ap->type = at_basechar;
+ else if ( strcmp(tok,"baselig")==0 )
+ ap->type = at_baselig;
+ else if ( strcmp(tok,"basemark")==0 )
+ ap->type = at_basemark;
+ else if ( strcmp(tok,"entry")==0 )
+ ap->type = at_centry;
+ else if ( strcmp(tok,"exit")==0 )
+ ap->type = at_cexit;
+ }
+ getsint(sfd,&ap->lig_index);
+ ch = nlgetc(sfd);
+ ungetc(ch,sfd);
+ if ( ch==' ' ) {
+ SFDReadDeviceTable(sfd,&ap->xadjust);
+ SFDReadDeviceTable(sfd,&ap->yadjust);
+ ch = nlgetc(sfd);
+ ungetc(ch,sfd);
+ if ( isdigit(ch)) {
+ getsint(sfd,(int16 *) &ap->ttf_pt_index);
+ ap->has_ttf_pt = true;
+ }
+ }
+ if ( ap->anchor==NULL || ap->type==-1 ) {
+ LogError(_("Bad Anchor Point: %s"), sc->name );
+ AnchorPointsFree(ap);
+return( lastap );
+ }
+ if ( lastap==NULL )
+ (*alist) = ap;
+ else
+ lastap->next = ap;
+
+ return( ap );
+}
+
+static RefChar *SFDGetRef(FILE *sfd, int was_enc) {
+ RefChar *rf;
+ int temp=0, ch;
+
+ rf = RefCharCreate();
+ getint(sfd,&rf->orig_pos);
+ rf->encoded = was_enc;
+ if ( getint(sfd,&temp))
+ rf->unicode_enc = temp;
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch=='S' ) rf->selected = true;
+ getreal(sfd,&rf->transform[0]);
+ getreal(sfd,&rf->transform[1]);
+ getreal(sfd,&rf->transform[2]);
+ getreal(sfd,&rf->transform[3]);
+ getreal(sfd,&rf->transform[4]);
+ getreal(sfd,&rf->transform[5]);
+ while ( (ch=nlgetc(sfd))==' ');
+ ungetc(ch,sfd);
+ if ( isdigit(ch) ) {
+ getint(sfd,&temp);
+ rf->use_my_metrics = temp&1;
+ rf->round_translation_to_grid = (temp&2)?1:0;
+ rf->point_match = (temp&4)?1:0;
+ if ( rf->point_match ) {
+ getsint(sfd,(int16 *) &rf->match_pt_base);
+ getsint(sfd,(int16 *) &rf->match_pt_ref);
+ while ( (ch=nlgetc(sfd))==' ');
+ if ( ch=='O' )
+ rf->point_match_out_of_date = true;
+ else
+ ungetc(ch,sfd);
+ }
+ }
+return( rf );
+}
+
+/* I used to create multiple ligatures by putting ";" between them */
+/* that is the component string for "ffi" was "ff i ; f f i" */
+/* Now I want to have separate ligature structures for each */
+static PST1 *LigaCreateFromOldStyleMultiple(PST1 *liga) {
+ char *pt;
+ PST1 *new, *last=liga;
+ while ( (pt = strrchr(liga->pst.u.lig.components,';'))!=NULL ) {
+ new = chunkalloc(sizeof( PST1 ));
+ *new = *liga;
+ new->pst.u.lig.components = copy(pt+1);
+ last->pst.next = (PST *) new;
+ last = new;
+ *pt = '\0';
+ }
+return( last );
+}
+
+#ifdef FONTFORGE_CONFIG_CVT_OLD_MAC_FEATURES
+static struct { int feature, setting; uint32 tag; } formertags[] = {
+ { 1, 6, CHR('M','L','O','G') },
+ { 1, 8, CHR('M','R','E','B') },
+ { 1, 10, CHR('M','D','L','G') },
+ { 1, 12, CHR('M','S','L','G') },
+ { 1, 14, CHR('M','A','L','G') },
+ { 8, 0, CHR('M','S','W','I') },
+ { 8, 2, CHR('M','S','W','F') },
+ { 8, 4, CHR('M','S','L','I') },
+ { 8, 6, CHR('M','S','L','F') },
+ { 8, 8, CHR('M','S','N','F') },
+ { 22, 1, CHR('M','W','I','D') },
+ { 27, 1, CHR('M','U','C','M') },
+ { 103, 2, CHR('M','W','I','D') },
+ { -1, -1, 0xffffffff },
+};
+
+static void CvtOldMacFeature(PST1 *pst) {
+ int i;
+
+ if ( pst->macfeature )
+return;
+ for ( i=0; formertags[i].feature!=-1 ; ++i ) {
+ if ( pst->tag == formertags[i].tag ) {
+ pst->macfeature = true;
+ pst->tag = (formertags[i].feature<<16) | formertags[i].setting;
+return;
+ }
+ }
+}
+#endif
+
+static void SFDSetEncMap(SplineFont *sf,int orig_pos,int enc) {
+ EncMap *map = sf->map;
+
+ if ( map==NULL )
+return;
+
+ if ( orig_pos>=map->backmax ) {
+ int old = map->backmax;
+ map->backmax = orig_pos+10;
+ map->backmap = realloc(map->backmap,map->backmax*sizeof(int));
+ memset(map->backmap+old,-1,(map->backmax-old)*sizeof(int));
+ }
+ if ( map->backmap[orig_pos] == -1 ) /* backmap will not be unique if multiple encodings come from same glyph */
+ map->backmap[orig_pos] = enc;
+ if ( enc>=map->encmax ) {
+ int old = map->encmax;
+ map->encmax = enc+10;
+ map->map = realloc(map->map,map->encmax*sizeof(int));
+ memset(map->map+old,-1,(map->encmax-old)*sizeof(int));
+ }
+ if ( enc>=map->enccount )
+ map->enccount = enc+1;
+ if ( enc!=-1 )
+ map->map[enc] = orig_pos;
+}
+
+static void SCDefaultInterpolation(SplineChar *sc) {
+ SplineSet *cur;
+ SplinePoint *sp;
+ /* We used not to store the dontinterpolate bit. We used to use the */
+ /* presence or absence of instructions as that flag */
+
+ if ( sc->ttf_instrs_len!=0 ) {
+ for ( cur=sc->layers[ly_fore].splines; cur!=NULL; cur=cur->next ) {
+ for ( sp=cur->first; ; ) {
+ if ( sp->ttfindex!=0xffff && SPInterpolate(sp))
+ sp->dontinterpolate = true;
+ if ( sp->next==NULL )
+ break;
+ sp=sp->next->to;
+ if ( sp==cur->first )
+ break;
+ }
+ }
+ }
+}
+
+static void SFDParseMathValueRecord(FILE *sfd,int16 *value,DeviceTable **devtab) {
+ getsint(sfd,value);
+ *devtab = SFDReadDeviceTable(sfd,NULL);
+}
+
+static struct glyphvariants *SFDParseGlyphComposition(FILE *sfd,
+ struct glyphvariants *gv, char *tok) {
+ int i;
+
+ if ( gv==NULL )
+ gv = chunkalloc(sizeof(struct glyphvariants));
+ getint(sfd,&gv->part_cnt);
+ gv->parts = calloc(gv->part_cnt,sizeof(struct gv_part));
+ for ( i=0; i<gv->part_cnt; ++i ) {
+ int temp, ch;
+ getname(sfd,tok);
+ gv->parts[i].component = copy(tok);
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!='%' ) ungetc(ch,sfd);
+ getint(sfd,&temp);
+ gv->parts[i].is_extender = temp;
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=',' ) ungetc(ch,sfd);
+ getint(sfd,&temp);
+ gv->parts[i].startConnectorLength=temp;
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=',' ) ungetc(ch,sfd);
+ getint(sfd,&temp);
+ gv->parts[i].endConnectorLength = temp;
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=',' ) ungetc(ch,sfd);
+ getint(sfd,&temp);
+ gv->parts[i].fullAdvance = temp;
+ }
+return( gv );
+}
+
+static void SFDParseVertexKern(FILE *sfd, struct mathkernvertex *vertex) {
+ int i,ch;
+
+ getint(sfd,&vertex->cnt);
+ vertex->mkd = calloc(vertex->cnt,sizeof(struct mathkerndata));
+ for ( i=0; i<vertex->cnt; ++i ) {
+ SFDParseMathValueRecord(sfd,&vertex->mkd[i].height,&vertex->mkd[i].height_adjusts);
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!=EOF && ch!=',' )
+ ungetc(ch,sfd);
+ SFDParseMathValueRecord(sfd,&vertex->mkd[i].kern,&vertex->mkd[i].kern_adjusts);
+ }
+}
+
+static struct gradient *SFDParseGradient(FILE *sfd,char *tok) {
+ struct gradient *grad = chunkalloc(sizeof(struct gradient));
+ int ch, i;
+
+ getreal(sfd,&grad->start.x);
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!=';' ) ungetc(ch,sfd);
+ getreal(sfd,&grad->start.y);
+
+ getreal(sfd,&grad->stop.x);
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!=';' ) ungetc(ch,sfd);
+ getreal(sfd,&grad->stop.y);
+
+ getreal(sfd,&grad->radius);
+
+ getname(sfd,tok);
+ for ( i=0; spreads[i]!=NULL; ++i )
+ if ( strmatch(spreads[i],tok)==0 )
+ break;
+ if ( spreads[i]==NULL ) i=0;
+ grad->sm = i;
+
+ getint(sfd,&grad->stop_cnt);
+ grad->grad_stops = calloc(grad->stop_cnt,sizeof(struct grad_stops));
+ for ( i=0; i<grad->stop_cnt; ++i ) {
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!='{' ) ungetc(ch,sfd);
+ getreal( sfd, &grad->grad_stops[i].offset );
+ gethex( sfd, &grad->grad_stops[i].col );
+ getreal( sfd, &grad->grad_stops[i].opacity );
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!='}' ) ungetc(ch,sfd);
+ }
+return( grad );
+}
+
+static struct pattern *SFDParsePattern(FILE *sfd,char *tok) {
+ struct pattern *pat = chunkalloc(sizeof(struct pattern));
+ int ch;
+
+ getname(sfd,tok);
+ pat->pattern = copy(tok);
+
+ getreal(sfd,&pat->width);
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!=';' ) ungetc(ch,sfd);
+ getreal(sfd,&pat->height);
+
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!='[' ) ungetc(ch,sfd);
+ getreal(sfd,&pat->transform[0]);
+ getreal(sfd,&pat->transform[1]);
+ getreal(sfd,&pat->transform[2]);
+ getreal(sfd,&pat->transform[3]);
+ getreal(sfd,&pat->transform[4]);
+ getreal(sfd,&pat->transform[5]);
+ while ( isspace(ch=nlgetc(sfd)));
+ if ( ch!=']' ) ungetc(ch,sfd);
+return( pat );
+}
+
+
+static int orig_pos;
+
+static SplineChar *SFDGetChar(FILE *sfd,SplineFont *sf, int had_sf_layer_cnt) {
+ SplineChar *sc;
+ char tok[2000], ch;
+ RefChar *lastr=NULL, *ref;
+ AnchorPoint *lastap = NULL;
+ int isliga = 0, ispos, issubs=0, ismult=0, islcar=0, ispair=0, temp, i;
+ PST *last = NULL;
+ uint32 script = 0;
+ int current_layer = ly_fore;
+ int had_old_dstems = false;
+ SplineFont *sli_sf = sf->cidmaster ? sf->cidmaster : sf;
+ struct altuni *altuni;
+ int oldback = false;
+
+ if ( getname(sfd,tok)!=1 )
+return( NULL );
+ if ( strcmp(tok,"StartChar:")!=0 )
+return( NULL );
+ while ( isspace(ch=nlgetc(sfd)));
+ ungetc(ch,sfd);
+ sc = SFSplineCharCreate(sf);
+ if ( ch!='"' ) {
+ if ( getname(sfd,tok)!=1 ) {
+ SplineCharFree(sc);
+return( NULL );
+ }
+ sc->name = copy(tok);
+ } else {
+ sc->name = SFDReadUTF7Str(sfd);
+ if ( sc->name==NULL ) {
+ SplineCharFree(sc);
+return( NULL );
+ }
+ }
+ sc->vwidth = sf->ascent+sf->descent;
+ sc->parent = sf;
+ while ( 1 ) {
+ if ( getname(sfd,tok)!=1 ) {
+ SplineCharFree(sc);
+return( NULL );
+ }
+ if ( strmatch(tok,"Encoding:")==0 ) {
+ int enc;
+ getint(sfd,&enc);
+ getint(sfd,&sc->unicodeenc);
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ ungetc(ch,sfd);
+ if ( ch!='\n' && ch!='\r' ) {
+ getint(sfd,&sc->orig_pos);
+ if ( sc->orig_pos==65535 )
+ sc->orig_pos = orig_pos++;
+ /* An old mark meaning: "I don't know" */
+ if ( sc->orig_pos<sf->glyphcnt && sf->glyphs[sc->orig_pos]!=NULL )
+ sc->orig_pos = sf->glyphcnt;
+ if ( sc->orig_pos>=sf->glyphcnt ) {
+ if ( sc->orig_pos>=sf->glyphmax )
+ sf->glyphs = realloc(sf->glyphs,(sf->glyphmax = sc->orig_pos+10)*sizeof(SplineChar *));
+ memset(sf->glyphs+sf->glyphcnt,0,(sc->orig_pos+1-sf->glyphcnt)*sizeof(SplineChar *));
+ sf->glyphcnt = sc->orig_pos+1;
+ }
+ if ( sc->orig_pos+1 > orig_pos )
+ orig_pos = sc->orig_pos+1;
+ } else if ( sf->cidmaster!=NULL ) { /* In cid fonts the orig_pos is just the cid */
+ sc->orig_pos = enc;
+ } else {
+ sc->orig_pos = orig_pos++;
+ }
+ SFDSetEncMap(sf,sc->orig_pos,enc);
+ } else if ( strmatch(tok,"AltUni:")==0 ) {
+ int uni;
+ while ( getint(sfd,&uni)==1 ) {
+ altuni = chunkalloc(sizeof(struct altuni));
+ altuni->unienc = uni;
+ altuni->vs = -1;
+ altuni->fid = 0;
+ altuni->next = sc->altuni;
+ sc->altuni = altuni;
+ }
+ } else if ( strmatch(tok,"AltUni2:")==0 ) {
+ uint32 uni[3];
+ while ( gethexints(sfd,uni,3) ) {
+ altuni = chunkalloc(sizeof(struct altuni));
+ altuni->unienc = uni[0];
+ altuni->vs = uni[1];
+ altuni->fid = uni[2];
+ altuni->next = sc->altuni;
+ sc->altuni = altuni;
+ }
+ } else if ( strmatch(tok,"OldEncoding:")==0 ) {
+ int old_enc; /* Obsolete info */
+ getint(sfd,&old_enc);
+ } else if ( strmatch(tok,"Script:")==0 ) {
+ /* Obsolete. But still used for parsing obsolete ligature/subs tags */
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ if ( ch=='\n' || ch=='\r' )
+ script = 0;
+ else {
+ ungetc(ch,sfd);
+ script = gettag(sfd);
+ }
+ } else if ( strmatch(tok,"GlifName:")==0 ) {
+ while ( isspace(ch=nlgetc(sfd)));
+ ungetc(ch,sfd);
+ if ( ch!='"' ) {
+ if ( getname(sfd,tok)!=1 ) {
+ LogError(_("Invalid glif name.\n"));
+ }
+ sc->glif_name = copy(tok);
+ } else {
+ sc->glif_name = SFDReadUTF7Str(sfd);
+ if ( sc->glif_name==NULL ) {
+ LogError(_("Invalid glif name.\n"));
+ }
+ }
+ } else if ( strmatch(tok,"Width:")==0 ) {
+ getsint(sfd,&sc->width);
+ } else if ( strmatch(tok,"VWidth:")==0 ) {
+ getsint(sfd,&sc->vwidth);
+ } else if ( strmatch(tok,"GlyphClass:")==0 ) {
+ getint(sfd,&temp);
+ sc->glyph_class = temp;
+ } else if ( strmatch(tok,"UnlinkRmOvrlpSave:")==0 ) {
+ getint(sfd,&temp);
+ sc->unlink_rm_ovrlp_save_undo = temp;
+ } else if ( strmatch(tok,"InSpiro:")==0 ) {
+ getint(sfd,&temp);
+ sc->inspiro = temp;
+ } else if ( strmatch(tok,"LigCaretCntFixed:")==0 ) {
+ getint(sfd,&temp);
+ sc->lig_caret_cnt_fixed = temp;
+ } else if ( strmatch(tok,"Flags:")==0 ) {
+ while ( isspace(ch=nlgetc(sfd)) && ch!='\n' && ch!='\r');
+ while ( ch!='\n' && ch!='\r' ) {
+ if ( ch=='H' ) sc->changedsincelasthinted=true;
+ else if ( ch=='M' ) sc->manualhints = true;
+ else if ( ch=='W' ) sc->widthset = true;
+ else if ( ch=='O' ) sc->wasopen = true;
+ else if ( ch=='I' ) sc->instructions_out_of_date = true;
+ ch = nlgetc(sfd);
+ }
+ if ( sf->multilayer || sf->strokedfont || sc->layers[ly_fore].order2 )
+ sc->changedsincelasthinted = false;
+ } else if ( strmatch(tok,"TeX:")==0 ) {
+ getsint(sfd,&sc->tex_height);
+ getsint(sfd,&sc->tex_depth);
+ while ( isspace(ch=nlgetc(sfd)) && ch!='\n' && ch!='\r');
+ ungetc(ch,sfd);
+ if ( ch!='\n' && ch!='\r' ) {
+ int16 old_tex;
+ /* Used to store two extra values here */
+ getsint(sfd,&old_tex);
+ getsint(sfd,&old_tex);
+ if ( sc->tex_height==0 && sc->tex_depth==0 ) /* Fixup old bug */
+ sc->tex_height = sc->tex_depth = TEX_UNDEF;
+ }
+ } else if ( strmatch(tok,"ItalicCorrection:")==0 ) {
+ SFDParseMathValueRecord(sfd,&sc->italic_correction,&sc->italic_adjusts);
+ } else if ( strmatch(tok,"TopAccentHorizontal:")==0 ) {
+ SFDParseMathValueRecord(sfd,&sc->top_accent_horiz,&sc->top_accent_adjusts);
+ } else if ( strmatch(tok,"GlyphCompositionVerticalIC:")==0 ) {
+ if ( sc->vert_variants==NULL )
+ sc->vert_variants = chunkalloc(sizeof(struct glyphvariants));
+ SFDParseMathValueRecord(sfd,&sc->vert_variants->italic_correction,&sc->vert_variants->italic_adjusts);
+ } else if ( strmatch(tok,"GlyphCompositionHorizontalIC:")==0 ) {
+ if ( sc->horiz_variants==NULL )
+ sc->horiz_variants = chunkalloc(sizeof(struct glyphvariants));
+ SFDParseMathValueRecord(sfd,&sc->horiz_variants->italic_correction,&sc->horiz_variants->italic_adjusts);
+ } else if ( strmatch(tok,"IsExtendedShape:")==0 ) {
+ int temp;
+ getint(sfd,&temp);
+ sc->is_extended_shape = temp;
+ } else if ( strmatch(tok,"GlyphVariantsVertical:")==0 ) {
+ if ( sc->vert_variants==NULL )
+ sc->vert_variants = chunkalloc(sizeof(struct glyphvariants));
+ geteol(sfd,tok);
+ sc->vert_variants->variants = copy(tok);
+ } else if ( strmatch(tok,"GlyphVariantsHorizontal:")==0 ) {
+ if ( sc->horiz_variants==NULL )
+ sc->horiz_variants = chunkalloc(sizeof(struct glyphvariants));
+ geteol(sfd,tok);
+ sc->horiz_variants->variants = copy(tok);
+ } else if ( strmatch(tok,"GlyphCompositionVertical:")==0 ) {
+ sc->vert_variants = SFDParseGlyphComposition(sfd, sc->vert_variants,tok);
+ } else if ( strmatch(tok,"GlyphCompositionHorizontal:")==0 ) {
+ sc->horiz_variants = SFDParseGlyphComposition(sfd, sc->horiz_variants,tok);
+ } else if ( strmatch(tok,"TopRightVertex:")==0 ) {
+ if ( sc->mathkern==NULL )
+ sc->mathkern = chunkalloc(sizeof(struct mathkern));
+ SFDParseVertexKern(sfd, &sc->mathkern->top_right);
+ } else if ( strmatch(tok,"TopLeftVertex:")==0 ) {
+ if ( sc->mathkern==NULL )
+ sc->mathkern = chunkalloc(sizeof(struct mathkern));
+ SFDParseVertexKern(sfd, &sc->mathkern->top_left);
+ } else if ( strmatch(tok,"BottomRightVertex:")==0 ) {
+ if ( sc->mathkern==NULL )
+ sc->mathkern = chunkalloc(sizeof(struct mathkern));
+ SFDParseVertexKern(sfd, &sc->mathkern->bottom_right);
+ } else if ( strmatch(tok,"BottomLeftVertex:")==0 ) {
+ if ( sc->mathkern==NULL )
+ sc->mathkern = chunkalloc(sizeof(struct mathkern));
+ SFDParseVertexKern(sfd, &sc->mathkern->bottom_left);
+#if HANYANG
+ } else if ( strmatch(tok,"CompositionUnit:")==0 ) {
+ getsint(sfd,&sc->jamo);
+ getsint(sfd,&sc->varient);
+ sc->compositionunit = true;
+#endif
+ } else if ( strmatch(tok,"HStem:")==0 ) {
+ sc->hstem = SFDReadHints(sfd);
+ sc->hconflicts = StemListAnyConflicts(sc->hstem);
+ } else if ( strmatch(tok,"VStem:")==0 ) {
+ sc->vstem = SFDReadHints(sfd);
+ sc->vconflicts = StemListAnyConflicts(sc->vstem);
+ } else if ( strmatch(tok,"DStem:")==0 ) {
+ sc->dstem = SFDReadDHints( sc->parent,sfd,true );
+ had_old_dstems = true;
+ } else if ( strmatch(tok,"DStem2:")==0 ) {
+ sc->dstem = SFDReadDHints( sc->parent,sfd,false );
+ } else if ( strmatch(tok,"CounterMasks:")==0 ) {
+ getsint(sfd,&sc->countermask_cnt);
+ sc->countermasks = calloc(sc->countermask_cnt,sizeof(HintMask));
+ for ( i=0; i<sc->countermask_cnt; ++i ) {
+ int ch;
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ SFDGetHintMask(sfd,&sc->countermasks[i]);
+ }
+ } else if ( strmatch(tok,"AnchorPoint:")==0 ) {
+ lastap = SFDReadAnchorPoints(sfd,sc,&sc->anchor,lastap);
+ } else if ( strmatch(tok,"Fore")==0 ) {
+ while ( isspace(ch = nlgetc(sfd)));
+ ungetc(ch,sfd);
+ if ( ch!='I' && ch!='R' && ch!='S' && ch!='V' && ch!=' ' && ch!='\n' &&
+ !PeekMatch(sfd, "Pickled") && !PeekMatch(sfd, "EndChar") &&
+ !PeekMatch(sfd, "Fore") && !PeekMatch(sfd, "Back") && !PeekMatch(sfd, "Layer") ) {
+ /* Old format, without a SplineSet token */
+ sc->layers[ly_fore].splines = SFDGetSplineSet(sfd,sc->layers[ly_fore].order2);
+ }
+ current_layer = ly_fore;
+ } else if ( strmatch(tok,"MinimumDistance:")==0 ) {
+ SFDGetMinimumDistances(sfd,sc);
+ } else if ( strmatch(tok,"Validated:")==0 ) {
+ getsint(sfd,(int16 *) &sc->layers[current_layer].validation_state);
+ } else if ( strmatch(tok,"Back")==0 ) {
+ while ( isspace(ch=nlgetc(sfd)));
+ ungetc(ch,sfd);
+ if ( ch!='I' && ch!='R' && ch!='S' && ch!='V' && ch!=' ' && ch!='\n' &&
+ !PeekMatch(sfd, "Pickled") && !PeekMatch(sfd, "EndChar") &&
+ !PeekMatch(sfd, "Fore") && !PeekMatch(sfd, "Back") && !PeekMatch(sfd, "Layer") ) {
+ /* Old format, without a SplineSet token */
+ sc->layers[ly_back].splines = SFDGetSplineSet(sfd,sc->layers[ly_back].order2);
+ oldback = true;
+ }
+ current_layer = ly_back;
+ } else if ( strmatch(tok,"LayerCount:")==0 ) {
+ getint(sfd,&temp);
+ if ( temp>sc->layer_cnt ) {
+ sc->layers = realloc(sc->layers,temp*sizeof(Layer));
+ memset(sc->layers+sc->layer_cnt,0,(temp-sc->layer_cnt)*sizeof(Layer));
+ }
+ sc->layer_cnt = temp;
+ current_layer = ly_fore;
+ } else if ( strmatch(tok,"Layer:")==0 ) {
+ int layer;
+ int dofill, dostroke, fillfirst, linejoin, linecap;
+ uint32 fillcol, strokecol;
+ real fillopacity, strokeopacity, strokewidth, trans[4];
+ DashType dashes[DASH_MAX];
+ int i;
+ getint(sfd,&layer);
+ if ( layer>=sc->layer_cnt ) {
+ sc->layers = realloc(sc->layers,(layer+1)*sizeof(Layer));
+ memset(sc->layers+sc->layer_cnt,0,(layer+1-sc->layer_cnt)*sizeof(Layer));
+ }
+ if ( sc->parent->multilayer ) {
+ getint(sfd,&dofill);
+ getint(sfd,&dostroke);
+ getint(sfd,&fillfirst);
+ gethex(sfd,&fillcol);
+ getreal(sfd,&fillopacity);
+ gethex(sfd,&strokecol);
+ getreal(sfd,&strokeopacity);
+ getreal(sfd,&strokewidth);
+ getname(sfd,tok);
+ for ( i=0; joins[i]!=NULL; ++i )
+ if ( strmatch(joins[i],tok)==0 )
+ break;
+ if ( joins[i]==NULL ) --i;
+ linejoin = i;
+ getname(sfd,tok);
+ for ( i=0; caps[i]!=NULL; ++i )
+ if ( strmatch(caps[i],tok)==0 )
+ break;
+ if ( caps[i]==NULL ) --i;
+ linecap = i;
+ while ( (ch=nlgetc(sfd))==' ' || ch=='[' );
+ ungetc(ch,sfd);
+ getreal(sfd,&trans[0]);
+ getreal(sfd,&trans[1]);
+ getreal(sfd,&trans[2]);
+ getreal(sfd,&trans[3]);
+ while ( (ch=nlgetc(sfd))==' ' || ch==']' );
+ if ( ch=='[' ) {
+ for ( i=0;; ++i ) { int temp;
+ if ( !getint(sfd,&temp) )
+ break;
+ else if ( i<DASH_MAX )
+ dashes[i] = temp;
+ }
+ if ( i<DASH_MAX )
+ dashes[i] = 0;
+ } else {
+ ungetc(ch,sfd);
+ memset(dashes,0,sizeof(dashes));
+ }
+ sc->layers[layer].dofill = dofill;
+ sc->layers[layer].dostroke = dostroke;
+ sc->layers[layer].fillfirst = fillfirst;
+ sc->layers[layer].fill_brush.col = fillcol;
+ sc->layers[layer].fill_brush.opacity = fillopacity;
+ sc->layers[layer].stroke_pen.brush.col = strokecol;
+ sc->layers[layer].stroke_pen.brush.opacity = strokeopacity;
+ sc->layers[layer].stroke_pen.width = strokewidth;
+ sc->layers[layer].stroke_pen.linejoin = linejoin;
+ sc->layers[layer].stroke_pen.linecap = linecap;
+ memcpy(sc->layers[layer].stroke_pen.dashes,dashes,sizeof(dashes));
+ memcpy(sc->layers[layer].stroke_pen.trans,trans,sizeof(trans));
+ }
+ current_layer = layer;
+ lastr = NULL;
+ } else if ( strmatch(tok,"FillGradient:")==0 ) {
+ sc->layers[current_layer].fill_brush.gradient = SFDParseGradient(sfd,tok);
+ } else if ( strmatch(tok,"FillPattern:")==0 ) {
+ sc->layers[current_layer].fill_brush.pattern = SFDParsePattern(sfd,tok);
+ } else if ( strmatch(tok,"StrokeGradient:")==0 ) {
+ sc->layers[current_layer].stroke_pen.brush.gradient = SFDParseGradient(sfd,tok);
+ } else if ( strmatch(tok,"StrokePattern:")==0 ) {
+ sc->layers[current_layer].stroke_pen.brush.pattern = SFDParsePattern(sfd,tok);
+ } else if ( strmatch(tok,"SplineSet")==0 ) {
+ sc->layers[current_layer].splines = SFDGetSplineSet(sfd,sc->layers[current_layer].order2);
+ } else if ( strmatch(tok,"Ref:")==0 || strmatch(tok,"Refer:")==0 ) {
+ /* I should be depending on the version number here, but I made */
+ /* a mistake and bumped the version too late. So the version is */
+ /* not an accurate mark, but the presence of a LayerCount keyword*/
+ /* in the font is an good mark. Before the LayerCount was added */
+ /* (version 2) only the foreground layer could have references */
+ /* after that (eventually version 3) any layer could. */
+ if ( oldback || !had_sf_layer_cnt ) current_layer = ly_fore;
+ ref = SFDGetRef(sfd,strmatch(tok,"Ref:")==0);
+ if ( sc->layers[current_layer].refs==NULL )
+ sc->layers[current_layer].refs = ref;
+ else
+ lastr->next = ref;
+ lastr = ref;
+ } else if ( strmatch(tok,"PickledData:")==0 ) {
+ if (current_layer < sc->layer_cnt) {
+ sc->layers[current_layer].python_persistent = SFDUnPickle(sfd, 0);
+ sc->layers[current_layer].python_persistent_has_lists = 0;
+ }
+ } else if ( strmatch(tok,"PickledDataWithLists:")==0 ) {
+ if (current_layer < sc->layer_cnt) {
+ sc->layers[current_layer].python_persistent = SFDUnPickle(sfd, 1);
+ sc->layers[current_layer].python_persistent_has_lists = 1;
+ }
+ } else if ( strmatch(tok,"OrigType1:")==0 ) { /* Accept, slurp, ignore contents */
+ SFDGetType1(sfd);
+ } else if ( strmatch(tok,"TtfInstrs:")==0 ) { /* Binary format */
+ SFDGetTtfInstrs(sfd,sc);
+ } else if ( strmatch(tok,"TtInstrs:")==0 ) { /* ASCII format */
+ SFDGetTtInstrs(sfd,sc);
+ } else if ( strmatch(tok,"Kerns2:")==0 ||
+ strmatch(tok,"VKerns2:")==0 ) {
+ KernPair *kp, *last=NULL;
+ int isv = *tok=='V';
+ int off, index;
+ struct lookup_subtable *sub;
+
+ while ( fscanf(sfd,"%d %d", &index, &off )==2 ) {
+ sub = SFFindLookupSubtableAndFreeName(sf,SFDReadUTF7Str(sfd));
+ if ( sub==NULL ) {
+ LogError(_("KernPair with no subtable name.\n"));
+ break;
+ }
+ kp = chunkalloc(sizeof(KernPair1));
+ kp->sc = (SplineChar *) (intpt) index;
+ kp->kcid = true;
+ kp->off = off;
+ kp->subtable = sub;
+ kp->next = NULL;
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( ch=='{' ) {
+ kp->adjust = SFDReadDeviceTable(sfd, NULL);
+ }
+ if ( last != NULL )
+ last->next = kp;
+ else if ( isv )
+ sc->vkerns = kp;
+ else
+ sc->kerns = kp;
+ last = kp;
+ }
+ } else if ( (ispos = (strmatch(tok,"Position:")==0)) ||
+ ( ispos = (strmatch(tok,"Position2:")==0)) ||
+ ( ispair = (strmatch(tok,"PairPos:")==0)) ||
+ ( ispair = (strmatch(tok,"PairPos2:")==0)) ||
+ ( islcar = (strmatch(tok,"LCarets:")==0)) ||
+ ( islcar = (strmatch(tok,"LCarets2:")==0)) ||
+ ( isliga = (strmatch(tok,"Ligature:")==0)) ||
+ ( isliga = (strmatch(tok,"Ligature2:")==0)) ||
+ ( issubs = (strmatch(tok,"Substitution:")==0)) ||
+ ( issubs = (strmatch(tok,"Substitution2:")==0)) ||
+ ( ismult = (strmatch(tok,"MultipleSubs:")==0)) ||
+ ( ismult = (strmatch(tok,"MultipleSubs2:")==0)) ||
+ strmatch(tok,"AlternateSubs:")==0 ||
+ strmatch(tok,"AlternateSubs2:")==0 ) {
+ PST *pst;
+ int old, type;
+ type = ispos ? pst_position :
+ ispair ? pst_pair :
+ islcar ? pst_lcaret :
+ isliga ? pst_ligature :
+ issubs ? pst_substitution :
+ ismult ? pst_multiple :
+ pst_alternate;
+ if ( strchr(tok,'2')!=NULL ) {
+ old = false;
+ pst = chunkalloc(sizeof(PST));
+ if ( type!=pst_lcaret )
+ pst->subtable = SFFindLookupSubtableAndFreeName(sf,SFDReadUTF7Str(sfd));
+ } else {
+ old = true;
+ pst = chunkalloc(sizeof(PST1));
+ ((PST1 *) pst)->tag = CHR('l','i','g','a');
+ ((PST1 *) pst)->script_lang_index = 0xffff;
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ if ( isdigit(ch)) {
+ int temp;
+ ungetc(ch,sfd);
+ getint(sfd,&temp);
+ ((PST1 *) pst)->flags = temp;
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ } else
+ ((PST1 *) pst)->flags = 0 /*PSTDefaultFlags(type,sc)*/;
+ if ( isdigit(ch)) {
+ ungetc(ch,sfd);
+ getusint(sfd,&((PST1 *) pst)->script_lang_index);
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ } else
+ ((PST1 *) pst)->script_lang_index = SFFindBiggestScriptLangIndex(sf,
+ script!=0?script:SCScriptFromUnicode(sc),DEFAULT_LANG);
+ if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ ((PST1 *) pst)->tag = gettag(sfd);
+ } else if ( ch=='<' ) {
+ getint(sfd,&temp);
+ ((PST1 *) pst)->tag = temp<<16;
+ nlgetc(sfd); /* comma */
+ getint(sfd,&temp);
+ ((PST1 *) pst)->tag |= temp;
+ nlgetc(sfd); /* close '>' */
+ ((PST1 *) pst)->macfeature = true;
+ } else
+ ungetc(ch,sfd);
+ if ( type==pst_lcaret ) {
+ /* These are meaningless for lcarets, set them to innocuous values */
+ ((PST1 *) pst)->script_lang_index = SLI_UNKNOWN;
+ ((PST1 *) pst)->tag = CHR(' ',' ',' ',' ');
+ } else if ( ((PST1 *) pst)->script_lang_index>=((SplineFont1 *) sli_sf)->sli_cnt && ((PST1 *) pst)->script_lang_index!=SLI_NESTED ) {
+ static int complained=false;
+ if ( !complained )
+ IError("'%c%c%c%c' in %s has a script index out of bounds: %d",
+ (((PST1 *) pst)->tag>>24), (((PST1 *) pst)->tag>>16)&0xff, (((PST1 *) pst)->tag>>8)&0xff, ((PST1 *) pst)->tag&0xff,
+ sc->name, ((PST1 *) pst)->script_lang_index );
+ else
+ IError( "'%c%c%c%c' in %s has a script index out of bounds: %d\n",
+ (((PST1 *) pst)->tag>>24), (((PST1 *) pst)->tag>>16)&0xff, (((PST1 *) pst)->tag>>8)&0xff, ((PST1 *) pst)->tag&0xff,
+ sc->name, ((PST1 *) pst)->script_lang_index );
+ ((PST1 *) pst)->script_lang_index = SFFindBiggestScriptLangIndex(sli_sf,
+ SCScriptFromUnicode(sc),DEFAULT_LANG);
+ complained = true;
+ }
+ }
+ if ( (sf->sfd_version<2)!=old ) {
+ IError( "Version mixup in PST of sfd file." );
+exit(1);
+ }
+ if ( last==NULL )
+ sc->possub = pst;
+ else
+ last->next = pst;
+ last = pst;
+ pst->type = type;
+ if ( pst->type==pst_position ) {
+ fscanf( sfd, " dx=%hd dy=%hd dh=%hd dv=%hd",
+ &pst->u.pos.xoff, &pst->u.pos.yoff,
+ &pst->u.pos.h_adv_off, &pst->u.pos.v_adv_off);
+ pst->u.pos.adjust = SFDReadValDevTab(sfd);
+ ch = nlgetc(sfd); /* Eat new line */
+ } else if ( pst->type==pst_pair ) {
+ getname(sfd,tok);
+ pst->u.pair.paired = copy(tok);
+ pst->u.pair.vr = chunkalloc(sizeof(struct vr [2]));
+ fscanf( sfd, " dx=%hd dy=%hd dh=%hd dv=%hd",
+ &pst->u.pair.vr[0].xoff, &pst->u.pair.vr[0].yoff,
+ &pst->u.pair.vr[0].h_adv_off, &pst->u.pair.vr[0].v_adv_off);
+ pst->u.pair.vr[0].adjust = SFDReadValDevTab(sfd);
+ fscanf( sfd, " dx=%hd dy=%hd dh=%hd dv=%hd",
+ &pst->u.pair.vr[1].xoff, &pst->u.pair.vr[1].yoff,
+ &pst->u.pair.vr[1].h_adv_off, &pst->u.pair.vr[1].v_adv_off);
+ pst->u.pair.vr[0].adjust = SFDReadValDevTab(sfd);
+ ch = nlgetc(sfd);
+ } else if ( pst->type==pst_lcaret ) {
+ int i;
+ fscanf( sfd, " %d", &pst->u.lcaret.cnt );
+ pst->u.lcaret.carets = malloc(pst->u.lcaret.cnt*sizeof(int16));
+ for ( i=0; i<pst->u.lcaret.cnt; ++i )
+ fscanf( sfd, " %hd", &pst->u.lcaret.carets[i]);
+ geteol(sfd,tok);
+ } else {
+ geteol(sfd,tok);
+ pst->u.lig.components = copy(tok); /* it's in the same place for all formats */
+ if ( isliga ) {
+ pst->u.lig.lig = sc;
+ if ( old )
+ last = (PST *) LigaCreateFromOldStyleMultiple((PST1 *) pst);
+ }
+ }
+#ifdef FONTFORGE_CONFIG_CVT_OLD_MAC_FEATURES
+ if ( old )
+ CvtOldMacFeature((PST1 *) pst);
+#endif
+ } else if ( strmatch(tok,"Colour:")==0 ) {
+ uint32 temp;
+ gethex(sfd,&temp);
+ sc->color = temp;
+ } else if ( strmatch(tok,"Comment:")==0 ) {
+ sc->comment = SFDReadUTF7Str(sfd);
+ } else if ( strmatch(tok,"TileMargin:")==0 ) {
+ getreal(sfd,&sc->tile_margin);
+ } else if ( strmatch(tok,"TileBounds:")==0 ) {
+ getreal(sfd,&sc->tile_bounds.minx);
+ getreal(sfd,&sc->tile_bounds.miny);
+ getreal(sfd,&sc->tile_bounds.maxx);
+ getreal(sfd,&sc->tile_bounds.maxy);
+ } else if ( strmatch(tok,"EndChar")==0 ) {
+ if ( sc->orig_pos<sf->glyphcnt )
+ sf->glyphs[sc->orig_pos] = sc;
+ /* Recalculating hint active zones may be needed for old .sfd files. */
+ /* Do this when we have finished with other glyph components, */
+ /* so that splines are already available */
+ if ( had_old_dstems && sc->layers[ly_fore].splines != NULL )
+ SCGuessHintInstancesList( sc,ly_fore,NULL,NULL,sc->dstem,false,true );
+ if ( sc->layers[ly_fore].order2 )
+ SCDefaultInterpolation(sc);
+return( sc );
+ } else {
+ geteol(sfd,tok);
+ }
+ }
+}
+
+static void SFDFixupRef(SplineChar *sc,RefChar *ref,int layer) {
+ RefChar *rf;
+ int ly;
+
+ if ( sc->parent->multilayer ) {
+ for ( ly=ly_fore; ly<ref->sc->layer_cnt; ++ly ) {
+ for ( rf = ref->sc->layers[ly].refs; rf!=NULL; rf=rf->next ) {
+ if ( rf->sc==sc ) { /* Huh? */
+ ref->sc->layers[ly].refs = NULL;
+ break;
+ }
+ if ( rf->layers[0].splines==NULL )
+ SFDFixupRef(ref->sc,rf,layer);
+ }
+ }
+ } else {
+ for ( rf = ref->sc->layers[layer].refs; rf!=NULL; rf=rf->next ) {
+ if ( rf->sc==sc ) { /* Huh? */
+ ref->sc->layers[layer].refs = NULL;
+ break;
+ }
+ if ( rf->layers[0].splines==NULL )
+ SFDFixupRef(ref->sc,rf,layer);
+ }
+ }
+ SCReinstanciateRefChar(sc,ref,layer);
+ SCMakeDependent(sc,ref->sc);
+}
+
+/* Look for character duplicates, such as might be generated by having the same */
+/* glyph at two encoding slots */
+/* This is an obsolete convention, supported now only in sfd files */
+/* I think it is ok if something depends on this character, because the */
+/* code that handles references will automatically unwrap it down to be base */
+static SplineChar *SCDuplicate(SplineChar *sc) {
+ SplineChar *matched = sc;
+
+ if ( sc==NULL || sc->parent==NULL || sc->parent->cidmaster!=NULL )
+return( sc ); /* Can't do this in CID keyed fonts */
+
+ if ( sc->layer_cnt!=2 )
+return( sc );
+
+ while ( sc->layers[ly_fore].refs!=NULL &&
+ sc->layers[ly_fore].refs->sc!=NULL && /* Can happen if we are called during font loading before references are fixed up */
+ sc->layers[ly_fore].refs->next==NULL &&
+ sc->layers[ly_fore].refs->transform[0]==1 && sc->layers[ly_fore].refs->transform[1]==0 &&
+ sc->layers[ly_fore].refs->transform[2]==0 && sc->layers[ly_fore].refs->transform[3]==1 &&
+ sc->layers[ly_fore].refs->transform[4]==0 && sc->layers[ly_fore].refs->transform[5]==0 ) {
+ char *basename = sc->layers[ly_fore].refs->sc->name;
+ if ( strcmp(sc->name,basename)!=0 )
+ break;
+ matched = sc->layers[ly_fore].refs->sc;
+ sc = sc->layers[ly_fore].refs->sc;
+ }
+return( matched );
+}
+
+
+void SFDFixupRefs(SplineFont *sf) {
+ int i, isv;
+ RefChar *refs, *rnext, *rprev;
+ /*int isautorecovery = sf->changed;*/
+ KernPair *kp, *prev, *next;
+ EncMap *map = sf->map;
+ int layer;
+ int k,l;
+ SplineFont *cidmaster = sf, *ksf;
+
+ k = 1;
+ if ( sf->subfontcnt!=0 )
+ sf = sf->subfonts[0];
+
+ ff_progress_change_line2(_("Interpreting Glyphs"));
+ for (;;) {
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ SplineChar *sc = sf->glyphs[i];
+ /* A changed character is one that has just been recovered */
+ /* unchanged characters will already have been fixed up */
+ /* Er... maybe not. If the character being recovered is refered to */
+ /* by another character then we need to fix up that other char too*/
+ /*if ( isautorecovery && !sc->changed )*/
+ /*continue;*/
+ for ( layer = 0; layer<sc->layer_cnt; ++layer ) {
+ rprev = NULL;
+ for ( refs = sc->layers[layer].refs; refs!=NULL; refs=rnext ) {
+ rnext = refs->next;
+ if ( refs->encoded ) { /* Old sfd format */
+ if ( refs->orig_pos<map->encmax && map->map[refs->orig_pos]!=-1 )
+ refs->orig_pos = map->map[refs->orig_pos];
+ else
+ refs->orig_pos = sf->glyphcnt;
+ refs->encoded = false;
+ }
+ if ( refs->orig_pos<sf->glyphcnt && refs->orig_pos>=0 )
+ refs->sc = sf->glyphs[refs->orig_pos];
+ if ( refs->sc!=NULL ) {
+ refs->unicode_enc = refs->sc->unicodeenc;
+ refs->adobe_enc = getAdobeEnc(refs->sc->name);
+ rprev = refs;
+ if ( refs->use_my_metrics ) {
+ if ( sc->width != refs->sc->width ) {
+ LogError(_("Bad sfd file. Glyph %s has width %d even though it should be\n bound to the width of %s which is %d.\n"),
+ sc->name, sc->width, refs->sc->name, refs->sc->width );
+ sc->width = refs->sc->width;
+ }
+ }
+ } else {
+ RefCharFree(refs);
+ if ( rprev!=NULL )
+ rprev->next = rnext;
+ else
+ sc->layers[layer].refs = rnext;
+ }
+ }
+ }
+ /* In old sfd files we used a peculiar idiom to represent a multiply */
+ /* encoded glyph. Fix it up now. Remove the fake glyph and adjust the*/
+ /* map */
+ /*if ( isautorecovery && !sc->changed )*/
+ /*continue;*/
+ for ( isv=0; isv<2; ++isv ) {
+ for ( prev = NULL, kp=isv?sc->vkerns : sc->kerns; kp!=NULL; kp=next ) {
+ int index = (intpt) (kp->sc);
+
+ next = kp->next;
+ // be impotent if the reference is already to the correct location
+ if ( !kp->kcid ) { /* It's encoded (old sfds), else orig */
+ if ( index>=map->encmax || map->map[index]==-1 )
+ index = sf->glyphcnt;
+ else
+ index = map->map[index];
+ }
+ kp->kcid = false;
+ ksf = sf;
+ if ( cidmaster!=sf ) {
+ for ( l=0; l<cidmaster->subfontcnt; ++l ) {
+ ksf = cidmaster->subfonts[l];
+ if ( index<ksf->glyphcnt && ksf->glyphs[index]!=NULL )
+ break;
+ }
+ }
+ if ( index>=ksf->glyphcnt || ksf->glyphs[index]==NULL ) {
+ IError( "Bad kerning information in glyph %s\n", sc->name );
+ kp->sc = NULL;
+ } else {
+ kp->sc = ksf->glyphs[index];
+ }
+
+ if ( kp->sc!=NULL )
+ prev = kp;
+ else{
+ if ( prev!=NULL )
+ prev->next = next;
+ else if ( isv )
+ sc->vkerns = next;
+ else
+ sc->kerns = next;
+ chunkfree(kp,sizeof(KernPair));
+ }
+ }
+ }
+ if ( SCDuplicate(sc)!=sc ) {
+ SplineChar *base = SCDuplicate(sc);
+ int orig = sc->orig_pos, enc = sf->map->backmap[orig], uni = sc->unicodeenc;
+ SplineCharFree(sc);
+ sf->glyphs[i]=NULL;
+ sf->map->backmap[orig] = -1;
+ sf->map->map[enc] = base->orig_pos;
+ AltUniAdd(base,uni);
+ }
+ }
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ SplineChar *sc = sf->glyphs[i];
+ for ( layer=0; layer<sc->layer_cnt; ++layer ) {
+ for ( refs = sf->glyphs[i]->layers[layer].refs; refs!=NULL; refs=refs->next ) {
+ SFDFixupRef(sf->glyphs[i],refs,layer);
+ }
+ }
+ ff_progress_next();
+ }
+ if ( sf->cidmaster==NULL )
+ for ( i=sf->glyphcnt-1; i>=0 && sf->glyphs[i]==NULL; --i )
+ sf->glyphcnt = i;
+ if ( k>=cidmaster->subfontcnt )
+ break;
+ sf = cidmaster->subfonts[k++];
+ }
+}
+
+static void SFDGetPrivate(FILE *sfd,SplineFont *sf) {
+ int i, cnt, len;
+ char name[200];
+ char *pt, *end;
+
+ sf->private = calloc(1,sizeof(struct psdict));
+ getint(sfd,&cnt);
+ sf->private->next = sf->private->cnt = cnt;
+ sf->private->values = calloc(cnt,sizeof(char *));
+ sf->private->keys = calloc(cnt,sizeof(char *));
+ for ( i=0; i<cnt; ++i ) {
+ getname(sfd,name);
+ sf->private->keys[i] = copy(name);
+ getint(sfd,&len);
+ nlgetc(sfd); /* skip space */
+ pt = sf->private->values[i] = malloc(len+1);
+ for ( end = pt+len; pt<end; ++pt )
+ *pt = nlgetc(sfd);
+ *pt='\0';
+ }
+}
+
+static void SFDGetSubrs(FILE *sfd) {
+ /* Obselete, parse it in case there are any old sfds */
+ int i, cnt, tot, len;
+ struct enc85 dec;
+
+ getint(sfd,&cnt);
+ tot = 0;
+ for ( i=0; i<cnt; ++i ) {
+ getint(sfd,&len);
+ tot += len;
+ }
+
+ memset(&dec,'\0', sizeof(dec)); dec.pos = -1;
+ dec.sfd = sfd;
+ for ( i=0; i<tot; ++i )
+ Dec85(&dec);
+}
+
+static struct ttflangname *SFDGetLangName(FILE *sfd,struct ttflangname *old) {
+ struct ttflangname *cur = chunkalloc(sizeof(struct ttflangname)), *prev;
+ int i;
+
+ getint(sfd,&cur->lang);
+ for ( i=0; i<ttf_namemax; ++i )
+ cur->names[i] = SFDReadUTF7Str(sfd);
+ if ( old==NULL )
+return( cur );
+ for ( prev = old; prev->next !=NULL; prev = prev->next );
+ prev->next = cur;
+return( old );
+}
+
+static void SFDGetGasp(FILE *sfd,SplineFont *sf) {
+ int i;
+
+ getsint(sfd,(int16 *) &sf->gasp_cnt);
+ sf->gasp = malloc(sf->gasp_cnt*sizeof(struct gasp));
+ for ( i=0; i<sf->gasp_cnt; ++i ) {
+ getsint(sfd,(int16 *) &sf->gasp[i].ppem);
+ getsint(sfd,(int16 *) &sf->gasp[i].flags);
+ }
+ getsint(sfd,(int16 *) &sf->gasp_version);
+}
+
+static void SFDGetDesignSize(FILE *sfd,SplineFont *sf) {
+ int ch;
+ struct otfname *cur;
+
+ getsint(sfd,(int16 *) &sf->design_size);
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( isdigit(ch)) {
+ getsint(sfd,(int16 *) &sf->design_range_bottom);
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch!='-' )
+ ungetc(ch,sfd);
+ getsint(sfd,(int16 *) &sf->design_range_top);
+ getsint(sfd,(int16 *) &sf->fontstyle_id);
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( !isdigit(ch))
+ break;
+ cur = chunkalloc(sizeof(struct otfname));
+ cur->next = sf->fontstyle_name;
+ sf->fontstyle_name = cur;
+ getsint(sfd,(int16 *) &cur->lang);
+ cur->name = SFDReadUTF7Str(sfd);
+ }
+ }
+}
+
+static void SFDGetOtfFeatName(FILE *sfd,SplineFont *sf) {
+ int ch;
+ struct otfname *cur;
+ struct otffeatname *fn;
+
+ fn = chunkalloc(sizeof(struct otffeatname));
+ fn->tag = gettag(sfd);
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( !isdigit(ch))
+ break;
+ cur = chunkalloc(sizeof(struct otfname));
+ cur->next = fn->names;
+ fn->names = cur;
+ getsint(sfd,(int16 *) &cur->lang);
+ cur->name = SFDReadUTF7Str(sfd);
+ }
+ fn->next = sf->feat_names;
+ sf->feat_names = fn;
+}
+
+static Encoding *SFDGetEncoding(FILE *sfd, char *tok) {
+ Encoding *enc = NULL;
+ int encname;
+
+ if ( getint(sfd,&encname) ) {
+ if ( encname<(int)(sizeof(charset_names)/sizeof(charset_names[0])-1) )
+ enc = FindOrMakeEncoding(charset_names[encname]);
+ } else {
+ geteol(sfd,tok);
+ enc = FindOrMakeEncoding(tok);
+ }
+ if ( enc==NULL )
+ enc = &custom;
+return( enc );
+}
+
+static enum uni_interp SFDGetUniInterp(FILE *sfd, char *tok, SplineFont *sf) {
+ int uniinterp = ui_none;
+ int i;
+
+ geteol(sfd,tok);
+ for ( i=0; unicode_interp_names[i]!=NULL; ++i )
+ if ( strcmp(tok,unicode_interp_names[i])==0 ) {
+ uniinterp = i;
+ break;
+ }
+ /* These values are now handled by namelists */
+ if ( uniinterp == ui_adobe ) {
+ sf->for_new_glyphs = NameListByName("AGL with PUA");
+ uniinterp = ui_none;
+ } else if ( uniinterp == ui_greek ) {
+ sf->for_new_glyphs = NameListByName("Greek small caps");
+ uniinterp = ui_none;
+ } else if ( uniinterp == ui_ams ) {
+ sf->for_new_glyphs = NameListByName("AMS Names");
+ uniinterp = ui_none;
+ }
+
+return( uniinterp );
+}
+
+static void SFDGetNameList(FILE *sfd, char *tok, SplineFont *sf) {
+ NameList *nl;
+
+ geteol(sfd,tok);
+ nl = NameListByName(tok);
+ if ( nl==NULL )
+ LogError(_("Failed to find NameList: %s"), tok);
+ else
+ sf->for_new_glyphs = nl;
+}
+
+
+static OTLookup *SFD_ParseNestedLookup(FILE *sfd, SplineFont *sf, int old) {
+ uint32 tag;
+ int ch, isgpos;
+ OTLookup *otl;
+ char *name;
+
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='~' )
+return( NULL );
+ else if ( old ) {
+ if ( ch!='\'' )
+return( NULL );
+
+ ungetc(ch,sfd);
+ tag = gettag(sfd);
+return( (OTLookup *) (intpt) tag );
+ } else {
+ ungetc(ch,sfd);
+ name = SFDReadUTF7Str(sfd);
+ if ( name==NULL )
+return( NULL );
+ for ( isgpos=0; isgpos<2; ++isgpos ) {
+ for ( otl=isgpos ? sf->gpos_lookups : sf->gsub_lookups; otl!=NULL; otl=otl->next ) {
+ if ( strcmp(name,otl->lookup_name )==0 )
+ goto break2;
+ }
+ }
+ break2:
+ free(name);
+return( otl );
+ }
+}
+
+static void SFDParseChainContext(FILE *sfd,SplineFont *sf,FPST *fpst, char *tok, int old) {
+ int ch, i, j, k, temp;
+ SplineFont *sli_sf = sf->cidmaster ? sf->cidmaster : sf;
+
+ fpst->type = strnmatch(tok,"ContextPos",10)==0 ? pst_contextpos :
+ strnmatch(tok,"ContextSub",10)==0 ? pst_contextsub :
+ strnmatch(tok,"ChainPos",8)==0 ? pst_chainpos :
+ strnmatch(tok,"ChainSub",8)==0 ? pst_chainsub : pst_reversesub;
+ getname(sfd,tok);
+ fpst->format = strmatch(tok,"glyph")==0 ? pst_glyphs :
+ strmatch(tok,"class")==0 ? pst_class :
+ strmatch(tok,"coverage")==0 ? pst_coverage : pst_reversecoverage;
+ if ( old ) {
+ fscanf(sfd, "%hu %hu", &((FPST1 *) fpst)->flags, &((FPST1 *) fpst)->script_lang_index );
+ if ( ((FPST1 *) fpst)->script_lang_index>=((SplineFont1 *) sli_sf)->sli_cnt && ((FPST1 *) fpst)->script_lang_index!=SLI_NESTED ) {
+ static int complained=false;
+ if ( ((SplineFont1 *) sli_sf)->sli_cnt==0 )
+ IError("'%c%c%c%c' has a script index out of bounds: %d\nYou MUST fix this manually",
+ (((FPST1 *) fpst)->tag>>24), (((FPST1 *) fpst)->tag>>16)&0xff, (((FPST1 *) fpst)->tag>>8)&0xff, ((FPST1 *) fpst)->tag&0xff,
+ ((FPST1 *) fpst)->script_lang_index );
+ else if ( !complained )
+ IError("'%c%c%c%c' has a script index out of bounds: %d",
+ (((FPST1 *) fpst)->tag>>24), (((FPST1 *) fpst)->tag>>16)&0xff, (((FPST1 *) fpst)->tag>>8)&0xff, ((FPST1 *) fpst)->tag&0xff,
+ ((FPST1 *) fpst)->script_lang_index );
+ else
+ IError("'%c%c%c%c' has a script index out of bounds: %d\n",
+ (((FPST1 *) fpst)->tag>>24), (((FPST1 *) fpst)->tag>>16)&0xff, (((FPST1 *) fpst)->tag>>8)&0xff, ((FPST1 *) fpst)->tag&0xff,
+ ((FPST1 *) fpst)->script_lang_index );
+ if ( ((SplineFont1 *) sli_sf)->sli_cnt!=0 )
+ ((FPST1 *) fpst)->script_lang_index = ((SplineFont1 *) sli_sf)->sli_cnt-1;
+ complained = true;
+ }
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ ((FPST1 *) fpst)->tag = gettag(sfd);
+ } else
+ ungetc(ch,sfd);
+ } else {
+ fpst->subtable = SFFindLookupSubtableAndFreeName(sf,SFDReadUTF7Str(sfd));
+ if ( !fpst->subtable )
+ LogError(_("Missing Subtable definition found in chained context"));
+ else
+ fpst->subtable->fpst = fpst;
+ }
+ fscanf(sfd, "%hu %hu %hu %hu", &fpst->nccnt, &fpst->bccnt, &fpst->fccnt, &fpst->rule_cnt );
+ if ( fpst->nccnt!=0 || fpst->bccnt!=0 || fpst->fccnt!=0 ) {
+ fpst->nclass = malloc(fpst->nccnt*sizeof(char *));
+ fpst->nclassnames = calloc(fpst->nccnt,sizeof(char *));
+ if ( fpst->nccnt!=0 ) fpst->nclass[0] = NULL;
+ if ( fpst->bccnt!=0 || fpst->fccnt!=0 ) {
+ fpst->bclass = malloc(fpst->bccnt*sizeof(char *));
+ fpst->bclassnames = calloc(fpst->bccnt,sizeof(char *));
+ if (fpst->bccnt!=0 ) fpst->bclass[0] = NULL;
+ fpst->fclass = malloc(fpst->fccnt*sizeof(char *));
+ fpst->fclassnames = calloc(fpst->fccnt,sizeof(char *));
+ if (fpst->fccnt!=0 ) fpst->fclass[0] = NULL;
+ }
+ }
+
+ for ( j=0; j<3; ++j ) {
+ for ( i=1; i<(&fpst->nccnt)[j]; ++i ) {
+ getname(sfd,tok);
+ if ( i==1 && j==0 && strcmp(tok,"Class0:")==0 )
+ i=0;
+ getint(sfd,&temp);
+ (&fpst->nclass)[j][i] = malloc(temp+1); (&fpst->nclass)[j][i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread((&fpst->nclass)[j][i],1,temp,sfd);
+ }
+ }
+
+ fpst->rules = calloc(fpst->rule_cnt,sizeof(struct fpst_rule));
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ switch ( fpst->format ) {
+ case pst_glyphs:
+ for ( j=0; j<3; ++j ) {
+ getname(sfd,tok);
+ getint(sfd,&temp);
+ (&fpst->rules[i].u.glyph.names)[j] = malloc(temp+1);
+ (&fpst->rules[i].u.glyph.names)[j][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread((&fpst->rules[i].u.glyph.names)[j],1,temp,sfd);
+ }
+ break;
+ case pst_class:
+ fscanf( sfd, "%d %d %d", &fpst->rules[i].u.class.ncnt, &fpst->rules[i].u.class.bcnt, &fpst->rules[i].u.class.fcnt );
+ for ( j=0; j<3; ++j ) {
+ getname(sfd,tok);
+ (&fpst->rules[i].u.class.nclasses)[j] = malloc((&fpst->rules[i].u.class.ncnt)[j]*sizeof(uint16));
+ for ( k=0; k<(&fpst->rules[i].u.class.ncnt)[j]; ++k ) {
+ getusint(sfd,&(&fpst->rules[i].u.class.nclasses)[j][k]);
+ }
+ }
+ break;
+ case pst_coverage:
+ case pst_reversecoverage:
+ fscanf( sfd, "%d %d %d", &fpst->rules[i].u.coverage.ncnt, &fpst->rules[i].u.coverage.bcnt, &fpst->rules[i].u.coverage.fcnt );
+ for ( j=0; j<3; ++j ) {
+ (&fpst->rules[i].u.coverage.ncovers)[j] = malloc((&fpst->rules[i].u.coverage.ncnt)[j]*sizeof(char *));
+ for ( k=0; k<(&fpst->rules[i].u.coverage.ncnt)[j]; ++k ) {
+ getname(sfd,tok);
+ getint(sfd,&temp);
+ (&fpst->rules[i].u.coverage.ncovers)[j][k] = malloc(temp+1);
+ (&fpst->rules[i].u.coverage.ncovers)[j][k][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread((&fpst->rules[i].u.coverage.ncovers)[j][k],1,temp,sfd);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ switch ( fpst->format ) {
+ case pst_glyphs:
+ case pst_class:
+ case pst_coverage:
+ getint(sfd,&fpst->rules[i].lookup_cnt);
+ fpst->rules[i].lookups = malloc(fpst->rules[i].lookup_cnt*sizeof(struct seqlookup));
+ for ( j=k=0; j<fpst->rules[i].lookup_cnt; ++j ) {
+ getname(sfd,tok);
+ getint(sfd,&fpst->rules[i].lookups[j].seq);
+ fpst->rules[i].lookups[k].lookup = SFD_ParseNestedLookup(sfd,sf,old);
+ if ( fpst->rules[i].lookups[k].lookup!=NULL )
+ ++k;
+ }
+ fpst->rules[i].lookup_cnt = k;
+ break;
+ case pst_reversecoverage:
+ getname(sfd,tok);
+ getint(sfd,&temp);
+ fpst->rules[i].u.rcoverage.replacements = malloc(temp+1);
+ fpst->rules[i].u.rcoverage.replacements[temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(fpst->rules[i].u.rcoverage.replacements,1,temp,sfd);
+ break;
+ default:
+ break;
+ }
+ }
+ getname(sfd,tok); /* EndFPST, or one of the ClassName tokens (in newer sfds) */
+ while ( strcmp(tok,"ClassNames:")==0 || strcmp(tok,"BClassNames:")==0 ||
+ strcmp(tok,"FClassNames:")==0 ) {
+ int which = strcmp(tok,"ClassNames:")==0 ? 0 :
+ strcmp(tok,"BClassNames:")==0 ? 1 : 2;
+ int cnt = (&fpst->nccnt)[which];
+ char **classnames = (&fpst->nclassnames)[which];
+ int i;
+
+ for ( i=0; i<cnt; ++i )
+ classnames[i] = SFDReadUTF7Str(sfd);
+ getname(sfd,tok); /* EndFPST, or one of the ClassName tokens (in newer sfds) */
+ }
+
+}
+
+static void SFDParseStateMachine(FILE *sfd,SplineFont *sf,ASM *sm, char *tok,int old) {
+ int i, temp;
+
+ sm->type = strnmatch(tok,"MacIndic",8)==0 ? asm_indic :
+ strnmatch(tok,"MacContext",10)==0 ? asm_context :
+ strnmatch(tok,"MacLigature",11)==0 ? asm_lig :
+ strnmatch(tok,"MacSimple",9)==0 ? asm_simple :
+ strnmatch(tok,"MacKern",7)==0 ? asm_kern : asm_insert;
+ if ( old ) {
+ getusint(sfd,&((ASM1 *) sm)->feature);
+ nlgetc(sfd); /* Skip comma */
+ getusint(sfd,&((ASM1 *) sm)->setting);
+ } else {
+ sm->subtable = SFFindLookupSubtableAndFreeName(sf,SFDReadUTF7Str(sfd));
+ sm->subtable->sm = sm;
+ }
+ getusint(sfd,&sm->flags);
+ getusint(sfd,&sm->class_cnt);
+ getusint(sfd,&sm->state_cnt);
+
+ sm->classes = malloc(sm->class_cnt*sizeof(char *));
+ sm->classes[0] = sm->classes[1] = sm->classes[2] = sm->classes[3] = NULL;
+ for ( i=4; i<sm->class_cnt; ++i ) {
+ getname(sfd,tok);
+ getint(sfd,&temp);
+ sm->classes[i] = malloc(temp+1); sm->classes[i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(sm->classes[i],1,temp,sfd);
+ }
+
+ sm->state = malloc(sm->class_cnt*sm->state_cnt*sizeof(struct asm_state));
+ for ( i=0; i<sm->class_cnt*sm->state_cnt; ++i ) {
+ getusint(sfd,&sm->state[i].next_state);
+ getusint(sfd,&sm->state[i].flags);
+ if ( sm->type == asm_context ) {
+ sm->state[i].u.context.mark_lookup = SFD_ParseNestedLookup(sfd,sf,old);
+ sm->state[i].u.context.cur_lookup = SFD_ParseNestedLookup(sfd,sf,old);
+ } else if ( sm->type == asm_insert ) {
+ getint(sfd,&temp);
+ if ( temp==0 )
+ sm->state[i].u.insert.mark_ins = NULL;
+ else {
+ sm->state[i].u.insert.mark_ins = malloc(temp+1); sm->state[i].u.insert.mark_ins[temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(sm->state[i].u.insert.mark_ins,1,temp,sfd);
+ }
+ getint(sfd,&temp);
+ if ( temp==0 )
+ sm->state[i].u.insert.cur_ins = NULL;
+ else {
+ sm->state[i].u.insert.cur_ins = malloc(temp+1); sm->state[i].u.insert.cur_ins[temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(sm->state[i].u.insert.cur_ins,1,temp,sfd);
+ }
+ } else if ( sm->type == asm_kern ) {
+ int j;
+ getint(sfd,&sm->state[i].u.kern.kcnt);
+ if ( sm->state[i].u.kern.kcnt!=0 )
+ sm->state[i].u.kern.kerns = malloc(sm->state[i].u.kern.kcnt*sizeof(int16));
+ for ( j=0; j<sm->state[i].u.kern.kcnt; ++j ) {
+ getint(sfd,&temp);
+ sm->state[i].u.kern.kerns[j] = temp;
+ }
+ }
+ }
+ getname(sfd,tok); /* EndASM */
+}
+
+static struct macname *SFDParseMacNames(FILE *sfd, char *tok) {
+ struct macname *head=NULL, *last=NULL, *cur;
+ int enc, lang, len;
+ char *pt;
+ int ch;
+
+ while ( strcmp(tok,"MacName:")==0 ) {
+ cur = chunkalloc(sizeof(struct macname));
+ if ( last==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+
+ getint(sfd,&enc);
+ getint(sfd,&lang);
+ getint(sfd,&len);
+ cur->enc = enc;
+ cur->lang = lang;
+ cur->name = pt = malloc(len+1);
+
+ while ( (ch=nlgetc(sfd))==' ');
+ if ( ch=='"' )
+ ch = nlgetc(sfd);
+ while ( ch!='"' && ch!=EOF && pt<cur->name+len ) {
+ if ( ch=='\\' ) {
+ *pt = (nlgetc(sfd)-'0')<<6;
+ *pt |= (nlgetc(sfd)-'0')<<3;
+ *pt |= (nlgetc(sfd)-'0');
+ } else
+ *pt++ = ch;
+ ch = nlgetc(sfd);
+ }
+ *pt = '\0';
+ getname(sfd,tok);
+ }
+return( head );
+}
+
+MacFeat *SFDParseMacFeatures(FILE *sfd, char *tok) {
+ MacFeat *cur, *head=NULL, *last=NULL;
+ struct macsetting *slast, *scur;
+ int feat, ism, def, set;
+
+ while ( strcmp(tok,"MacFeat:")==0 ) {
+ cur = chunkalloc(sizeof(MacFeat));
+ if ( last==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+
+ getint(sfd,&feat); getint(sfd,&ism); getint(sfd, &def);
+ cur->feature = feat; cur->ismutex = ism; cur->default_setting = def;
+ getname(sfd,tok);
+ cur->featname = SFDParseMacNames(sfd,tok);
+ slast = NULL;
+ while ( strcmp(tok,"MacSetting:")==0 ) {
+ scur = chunkalloc(sizeof(struct macsetting));
+ if ( slast==NULL )
+ cur->settings = scur;
+ else
+ slast->next = scur;
+ slast = scur;
+
+ getint(sfd,&set);
+ scur->setting = set;
+ getname(sfd,tok);
+ scur->setname = SFDParseMacNames(sfd,tok);
+ }
+ }
+return( head );
+}
+
+static char *SFDParseMMSubroutine(FILE *sfd) {
+ char buffer[400], *sofar=calloc(1,1);
+ const char *endtok = "EndMMSubroutine";
+ int len = 0, blen, first=true;
+
+ while ( fgets(buffer,sizeof(buffer),sfd)!=NULL ) {
+ if ( strncmp(buffer,endtok,strlen(endtok))==0 )
+ break;
+ if ( first ) {
+ first = false;
+ if ( strcmp(buffer,"\n")==0 )
+ continue;
+ }
+ blen = strlen(buffer);
+ sofar = realloc(sofar,len+blen+1);
+ strcpy(sofar+len,buffer);
+ len += blen;
+ }
+ if ( len>0 && sofar[len-1]=='\n' )
+ sofar[len-1] = '\0';
+return( sofar );
+}
+
+static void MMInferStuff(MMSet *mm) {
+ int i,j;
+
+ if ( mm==NULL )
+return;
+ if ( mm->apple ) {
+ for ( i=0; i<mm->axis_count; ++i ) {
+ for ( j=0; j<mm->axismaps[i].points; ++j ) {
+ real val = mm->axismaps[i].blends[j];
+ if ( val == -1. )
+ mm->axismaps[i].min = mm->axismaps[i].designs[j];
+ else if ( val==0 )
+ mm->axismaps[i].def = mm->axismaps[i].designs[j];
+ else if ( val==1 )
+ mm->axismaps[i].max = mm->axismaps[i].designs[j];
+ }
+ }
+ }
+}
+
+static void SFDSizeMap(EncMap *map,int glyphcnt,int enccnt) {
+ if ( glyphcnt>map->backmax ) {
+ map->backmap = realloc(map->backmap,glyphcnt*sizeof(int));
+ memset(map->backmap+map->backmax,-1,(glyphcnt-map->backmax)*sizeof(int));
+ map->backmax = glyphcnt;
+ }
+ if ( enccnt>map->encmax ) {
+ map->map = realloc(map->map,enccnt*sizeof(int));
+ memset(map->map+map->backmax,-1,(enccnt-map->encmax)*sizeof(int));
+ map->encmax = map->enccount = enccnt;
+ }
+}
+
+static SplineFont *SFD_GetFont(FILE *sfd,SplineFont *cidmaster,char *tok,
+ int fromdir, char *dirname, float sfdversion);
+
+static void SFD_DoAltUnis(SplineFont *sf) {
+ int i;
+ struct altuni *alt;
+ SplineChar *sc;
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL ) {
+ for ( alt = sc->altuni; alt!=NULL; alt = alt->next ) {
+ if ( alt->vs==-1 && alt->fid==0 ) {
+ int enc = EncFromUni(alt->unienc,sf->map->enc);
+ if ( enc!=-1 )
+ SFDSetEncMap(sf,sc->orig_pos,enc);
+ }
+ }
+ }
+}
+
+static void SFDParseLookup(FILE *sfd,OTLookup *otl) {
+ int ch;
+ struct lookup_subtable *sub, *lastsub;
+ FeatureScriptLangList *fl, *lastfl;
+ struct scriptlanglist *sl, *lastsl;
+ int i, lcnt, lmax=0;
+ uint32 *langs=NULL;
+ char *subname;
+
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='{' ) {
+ lastsub = NULL;
+ while ( (subname = SFDReadUTF7Str(sfd))!=NULL ) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ sub = chunkalloc(sizeof(struct lookup_subtable));
+ sub->subtable_name = subname;
+ sub->lookup = otl;
+ switch ( otl->lookup_type ) {
+ case gsub_single:
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='(' ) {
+ sub->suffix = SFDReadUTF7Str(sfd);
+ while ( (ch=nlgetc(sfd))==' ' );
+ /* slurp final paren */
+ } else
+ ungetc(ch,sfd);
+ sub->per_glyph_pst_or_kern = true;
+ break;
+ case gsub_multiple: case gsub_alternate: case gsub_ligature:
+ case gpos_single:
+ sub->per_glyph_pst_or_kern = true;
+ break;
+ case gpos_pair:
+ if ( (ch=nlgetc(sfd))=='(' ) {
+ ch = nlgetc(sfd);
+ sub->vertical_kerning = (ch=='1');
+ nlgetc(sfd); /* slurp final paren */
+ ch=nlgetc(sfd);
+ }
+ if ( ch=='[' ) {
+ getsint(sfd,&sub->separation);
+ nlgetc(sfd); /* slurp comma */
+ getsint(sfd,&sub->minkern);
+ nlgetc(sfd); /* slurp comma */
+ ch = nlgetc(sfd);
+ sub->kerning_by_touch = ((ch-'0')&1)?1:0;
+ sub->onlyCloser = ((ch-'0')&2)?1:0;
+ sub->dontautokern = ((ch-'0')&4)?1:0;
+ nlgetc(sfd); /* slurp final bracket */
+ } else {
+ ungetc(ch,sfd);
+ }
+ sub->per_glyph_pst_or_kern = true;
+ break;
+ case gpos_cursive: case gpos_mark2base: case gpos_mark2ligature: case gpos_mark2mark:
+ sub->anchor_classes = true;
+ break;
+ default:
+ break;
+ }
+ if ( lastsub==NULL )
+ otl->subtables = sub;
+ else
+ lastsub->next = sub;
+ lastsub = sub;
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='}' )
+ ch = nlgetc(sfd);
+ }
+ while ( ch==' ' )
+ ch = nlgetc(sfd);
+ if ( ch=='[' ) {
+ lastfl = NULL;
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch==']' )
+ break;
+ fl = chunkalloc(sizeof(FeatureScriptLangList));
+ if ( lastfl==NULL )
+ otl->features = fl;
+ else
+ lastfl->next = fl;
+ lastfl = fl;
+ if ( ch=='<' ) {
+ int ft=0,fs=0;
+ fscanf(sfd,"%d,%d>", &ft, &fs );
+ fl->ismac = true;
+ fl->featuretag = (ft<<16) | fs;
+ } else if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ fl->featuretag = gettag(sfd);
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='(' ) {
+ lastsl = NULL;
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch==')' )
+ break;
+ sl = chunkalloc(sizeof(struct scriptlanglist));
+ if ( lastsl==NULL )
+ fl->scripts = sl;
+ else
+ lastsl->next = sl;
+ lastsl = sl;
+ if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ sl->script = gettag(sfd);
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='<' ) {
+ lcnt = 0;
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='>' )
+ break;
+ if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ if ( lcnt>=lmax )
+ langs = realloc(langs,(lmax+=10)*sizeof(uint32));
+ langs[lcnt++] = gettag(sfd);
+ }
+ }
+ sl->lang_cnt = lcnt;
+ if ( lcnt>MAX_LANG )
+ sl->morelangs = malloc((lcnt-MAX_LANG)*sizeof(uint32));
+ for ( i=0; i<lcnt; ++i ) {
+ if ( i<MAX_LANG )
+ sl->langs[i] = langs[i];
+ else
+ sl->morelangs[i-MAX_LANG] = langs[i];
+ }
+ }
+ }
+ }
+ }
+ }
+ free(langs);
+}
+
+static void SFDParseMathItem(FILE *sfd,SplineFont *sf,char *tok) {
+ /* The first five characters of a math item's keyword will be "MATH:" */
+ /* the rest will be one of the entries in math_constants_descriptor */
+ int i;
+ struct MATH *math;
+
+ if ( (math = sf->MATH) == NULL )
+ math = sf->MATH = calloc(1,sizeof(struct MATH));
+ for ( i=0; math_constants_descriptor[i].script_name!=NULL; ++i ) {
+ char *name = math_constants_descriptor[i].script_name;
+ int len = strlen( name );
+ if ( strncmp(tok+5,name,len)==0 && tok[5+len] == ':' && tok[6+len]=='\0' ) {
+ int16 *pos = (int16 *) (((char *) (math)) + math_constants_descriptor[i].offset );
+ getsint(sfd,pos);
+ if ( math_constants_descriptor[i].devtab_offset != -1 ) {
+ DeviceTable **devtab = (DeviceTable **) (((char *) (math)) + math_constants_descriptor[i].devtab_offset );
+ *devtab = SFDReadDeviceTable(sfd,*devtab);
+ break;
+ }
+ }
+ }
+}
+
+static struct baselangextent *ParseBaseLang(FILE *sfd) {
+ struct baselangextent *bl;
+ struct baselangextent *cur, *last;
+ int ch;
+
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='{' ) {
+ bl = chunkalloc(sizeof(struct baselangextent));
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( ch=='\'' )
+ bl->lang = gettag(sfd); /* Lang or Feature tag, or nothing */
+ getsint(sfd,&bl->descent);
+ getsint(sfd,&bl->ascent);
+ last = NULL;
+ while ( (ch=nlgetc(sfd))==' ' );
+ while ( ch=='{' ) {
+ ungetc(ch,sfd);
+ cur = ParseBaseLang(sfd);
+ if ( last==NULL )
+ bl->features = cur;
+ else
+ last->next = cur;
+ last = cur;
+ while ( (ch=nlgetc(sfd))==' ' );
+ }
+ if ( ch!='}' ) ungetc(ch,sfd);
+return( bl );
+ }
+return( NULL );
+}
+
+static struct basescript *SFDParseBaseScript(FILE *sfd,struct Base *base) {
+ struct basescript *bs;
+ int i, ch;
+ struct baselangextent *last, *cur;
+
+ if ( base==NULL )
+return(NULL);
+
+ bs = chunkalloc(sizeof(struct basescript));
+
+ bs->script = gettag(sfd);
+ getint(sfd,&bs->def_baseline);
+ if ( base->baseline_cnt!=0 ) {
+ bs->baseline_pos = calloc(base->baseline_cnt,sizeof(int16));
+ for ( i=0; i<base->baseline_cnt; ++i )
+ getsint(sfd, &bs->baseline_pos[i]);
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ last = NULL;
+ while ( ch=='{' ) {
+ ungetc(ch,sfd);
+ cur = ParseBaseLang(sfd);
+ if ( last==NULL )
+ bs->langs = cur;
+ else
+ last->next = cur;
+ last = cur;
+ while ( (ch=nlgetc(sfd))==' ' );
+ }
+return( bs );
+}
+
+static struct Base *SFDParseBase(FILE *sfd) {
+ struct Base *base = chunkalloc(sizeof(struct Base));
+ int i;
+
+ getint(sfd,&base->baseline_cnt);
+ if ( base->baseline_cnt!=0 ) {
+ base->baseline_tags = malloc(base->baseline_cnt*sizeof(uint32));
+ for ( i=0; i<base->baseline_cnt; ++i )
+ base->baseline_tags[i] = gettag(sfd);
+ }
+return( base );
+}
+
+static OTLookup **SFDLookupList(FILE *sfd,SplineFont *sf) {
+ int ch;
+ OTLookup *space[100], **buf=space, *otl, **ret;
+ int lcnt=0, lmax=100;
+ char *name;
+
+ for (;;) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ if ( ch=='\n' || ch==EOF )
+ break;
+ ungetc(ch,sfd);
+ name = SFDReadUTF7Str(sfd);
+ otl = SFFindLookup(sf,name);
+ free(name);
+ if ( otl!=NULL ) {
+ if ( lcnt>lmax ) {
+ if ( buf==space ) {
+ buf = malloc((lmax=lcnt+50)*sizeof(OTLookup *));
+ memcpy(buf,space,sizeof(space));
+ } else
+ buf = realloc(buf,(lmax+=50)*sizeof(OTLookup *));
+ }
+ buf[lcnt++] = otl;
+ }
+ }
+ if ( lcnt==0 )
+return( NULL );
+
+ ret = malloc((lcnt+1)*sizeof(OTLookup *));
+ memcpy(ret,buf,lcnt*sizeof(OTLookup *));
+ ret[lcnt] = NULL;
+return( ret );
+}
+
+static void SFDParseJustify(FILE *sfd, SplineFont *sf, char *tok) {
+ Justify *last=NULL, *cur;
+ struct jstf_lang *jlang, *llast;
+ int p = 0,ch;
+
+ while ( strcmp(tok,"Justify:")==0 ) {
+ cur = chunkalloc(sizeof(Justify));
+ if ( last==NULL )
+ sf->justify = cur;
+ else
+ last->next = cur;
+ last = cur;
+ llast = jlang = NULL;
+ cur->script = gettag(sfd);
+ while ( getname(sfd,tok)>0 ) {
+ if ( strcmp(tok,"Justify:")==0 || strcmp(tok,"EndJustify")==0 )
+ break;
+ if ( strcmp(tok,"JstfExtender:")==0 ) {
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ geteol(sfd,tok);
+ cur->extenders = copy(tok);
+ } else if ( strcmp(tok,"JstfLang:")==0 ) {
+ jlang = chunkalloc(sizeof(struct jstf_lang));
+ if ( llast==NULL )
+ cur->langs = jlang;
+ else
+ llast->next = jlang;
+ llast = jlang;
+ jlang->lang = gettag(sfd);
+ p = -1;
+ getint(sfd,&jlang->cnt);
+ if ( jlang->cnt!=0 )
+ jlang->prios = calloc(jlang->cnt,sizeof(struct jstf_prio));
+ } else if ( strcmp(tok,"JstfPrio:")==0 ) {
+ if ( jlang!=NULL ) {
+ ++p;
+ if ( p>= jlang->cnt ) {
+ jlang->prios = realloc(jlang->prios,(p+1)*sizeof(struct jstf_prio));
+ memset(jlang->prios+jlang->cnt,0,(p+1-jlang->cnt)*sizeof(struct jstf_prio));
+ jlang->cnt = p+1;
+ }
+ }
+ } else if ( strcmp(tok,"JstfEnableShrink:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].enableShrink = SFDLookupList(sfd,sf);
+ } else if ( strcmp(tok,"JstfDisableShrink:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].disableShrink = SFDLookupList(sfd,sf);
+ } else if ( strcmp(tok,"JstfMaxShrink:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].maxShrink = SFDLookupList(sfd,sf);
+ } else if ( strcmp(tok,"JstfEnableExtend:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].enableExtend = SFDLookupList(sfd,sf);
+ } else if ( strcmp(tok,"JstfDisableExtend:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].disableExtend = SFDLookupList(sfd,sf);
+ } else if ( strcmp(tok,"JstfMaxExtend:" )==0 ) {
+ if ( p<0 ) p=0;
+ if ( jlang!=NULL && p<jlang->cnt )
+ jlang->prios[p].maxExtend = SFDLookupList(sfd,sf);
+ } else
+ geteol(sfd,tok);
+ }
+ }
+}
+
+
+
+void SFD_GetFontMetaDataData_Init( SFD_GetFontMetaDataData* d )
+{
+ memset( d, 0, sizeof(SFD_GetFontMetaDataData));
+}
+
+/**
+ *
+ * @return true if the function matched the current token. If true
+ * is returned the caller should avoid further processing of 'tok'
+ * a return of false means that the caller might try
+ * to handle the token with another function or drop it.
+ */
+bool SFD_GetFontMetaData( FILE *sfd,
+ char *tok,
+ SplineFont *sf,
+ SFD_GetFontMetaDataData* d )
+{
+ int ch;
+ int i;
+ KernClass* kc = 0;
+ int old;
+ char val[2000];
+
+ // This allows us to assume we can dereference d
+ // at all times
+ static SFD_GetFontMetaDataData my_static_d;
+ static int my_static_d_is_virgin = 1;
+ if( !d )
+ {
+ if( my_static_d_is_virgin )
+ {
+ my_static_d_is_virgin = 0;
+ SFD_GetFontMetaDataData_Init( &my_static_d );
+ }
+ d = &my_static_d;
+ }
+
+ if ( strmatch(tok,"FontName:")==0 )
+ {
+ geteol(sfd,val);
+ sf->fontname = copy(val);
+ }
+ else if ( strmatch(tok,"FullName:")==0 )
+ {
+ geteol(sfd,val);
+ sf->fullname = copy(val);
+ }
+ else if ( strmatch(tok,"FamilyName:")==0 )
+ {
+ geteol(sfd,val);
+ sf->familyname = copy(val);
+ }
+ else if ( strmatch(tok,"DefaultBaseFilename:")==0 )
+ {
+ geteol(sfd,val);
+ sf->defbasefilename = copy(val);
+ }
+ else if ( strmatch(tok,"Weight:")==0 )
+ {
+ getprotectedname(sfd,val);
+ sf->weight = copy(val);
+ }
+ else if ( strmatch(tok,"Copyright:")==0 )
+ {
+ sf->copyright = getquotedeol(sfd);
+ }
+ else if ( strmatch(tok,"Comments:")==0 )
+ {
+ char *temp = getquotedeol(sfd);
+ sf->comments = latin1_2_utf8_copy(temp);
+ free(temp);
+ }
+ else if ( strmatch(tok,"UComments:")==0 )
+ {
+ sf->comments = SFDReadUTF7Str(sfd);
+ }
+ else if ( strmatch(tok,"FontLog:")==0 )
+ {
+ sf->fontlog = SFDReadUTF7Str(sfd);
+ }
+ else if ( strmatch(tok,"Version:")==0 )
+ {
+ geteol(sfd,val);
+ sf->version = copy(val);
+ }
+ else if ( strmatch(tok,"StyleMapFamilyName:")==0 )
+ {
+ sf->styleMapFamilyName = SFDReadUTF7Str(sfd);
+ }
+ /* Legacy attribute for StyleMapFamilyName. Deprecated. */
+ else if ( strmatch(tok,"OS2FamilyName:")==0 )
+ {
+ if (sf->styleMapFamilyName == NULL)
+ sf->styleMapFamilyName = SFDReadUTF7Str(sfd);
+ }
+ else if ( strmatch(tok,"FONDName:")==0 )
+ {
+ geteol(sfd,val);
+ sf->fondname = copy(val);
+ }
+ else if ( strmatch(tok,"ItalicAngle:")==0 )
+ {
+ getreal(sfd,&sf->italicangle);
+ }
+ else if ( strmatch(tok,"StrokeWidth:")==0 )
+ {
+ getreal(sfd,&sf->strokewidth);
+ }
+ else if ( strmatch(tok,"UnderlinePosition:")==0 )
+ {
+ getreal(sfd,&sf->upos);
+ }
+ else if ( strmatch(tok,"UnderlineWidth:")==0 )
+ {
+ getreal(sfd,&sf->uwidth);
+ }
+ else if ( strmatch(tok,"ModificationTime:")==0 )
+ {
+ getlonglong(sfd,&sf->modificationtime);
+ }
+ else if ( strmatch(tok,"CreationTime:")==0 )
+ {
+ getlonglong(sfd,&sf->creationtime);
+ d->hadtimes = true;
+ }
+ else if ( strmatch(tok,"PfmFamily:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->pfminfo.pfmfamily = temp;
+ sf->pfminfo.pfmset = true;
+ }
+ else if ( strmatch(tok,"LangName:")==0 )
+ {
+ sf->names = SFDGetLangName(sfd,sf->names);
+ }
+ else if ( strmatch(tok,"GaspTable:")==0 )
+ {
+ SFDGetGasp(sfd,sf);
+ }
+ else if ( strmatch(tok,"DesignSize:")==0 )
+ {
+ SFDGetDesignSize(sfd,sf);
+ }
+ else if ( strmatch(tok,"OtfFeatName:")==0 )
+ {
+ SFDGetOtfFeatName(sfd,sf);
+ }
+ else if ( strmatch(tok,"PfmWeight:")==0 || strmatch(tok,"TTFWeight:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.weight);
+ sf->pfminfo.pfmset = true;
+ }
+ else if ( strmatch(tok,"TTFWidth:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.width);
+ sf->pfminfo.pfmset = true;
+ }
+ else if ( strmatch(tok,"Panose:")==0 )
+ {
+ int temp,i;
+ for ( i=0; i<10; ++i )
+ {
+ getint(sfd,&temp);
+ sf->pfminfo.panose[i] = temp;
+ }
+ sf->pfminfo.panose_set = true;
+ }
+ else if ( strmatch(tok,"LineGap:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.linegap);
+ sf->pfminfo.pfmset = true;
+ }
+ else if ( strmatch(tok,"VLineGap:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.vlinegap);
+ sf->pfminfo.pfmset = true;
+ }
+ else if ( strmatch(tok,"HheadAscent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.hhead_ascent);
+ }
+ else if ( strmatch(tok,"HheadAOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.hheadascent_add = temp;
+ }
+ else if ( strmatch(tok,"HheadDescent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.hhead_descent);
+ }
+ else if ( strmatch(tok,"HheadDOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.hheaddescent_add = temp;
+ }
+ else if ( strmatch(tok,"OS2TypoLinegap:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_typolinegap);
+ }
+ else if ( strmatch(tok,"OS2TypoAscent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_typoascent);
+ }
+ else if ( strmatch(tok,"OS2TypoAOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.typoascent_add = temp;
+ }
+ else if ( strmatch(tok,"OS2TypoDescent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_typodescent);
+ }
+ else if ( strmatch(tok,"OS2TypoDOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.typodescent_add = temp;
+ }
+ else if ( strmatch(tok,"OS2WinAscent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_winascent);
+ }
+ else if ( strmatch(tok,"OS2WinDescent:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_windescent);
+ }
+ else if ( strmatch(tok,"OS2WinAOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.winascent_add = temp;
+ }
+ else if ( strmatch(tok,"OS2WinDOffset:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.windescent_add = temp;
+ }
+ else if ( strmatch(tok,"HHeadAscent:")==0 )
+ {
+ // DUPLICATE OF ABOVE
+ getsint(sfd,&sf->pfminfo.hhead_ascent);
+ }
+ else if ( strmatch(tok,"HHeadDescent:")==0 )
+ {
+ // DUPLICATE OF ABOVE
+ getsint(sfd,&sf->pfminfo.hhead_descent);
+ }
+
+ else if ( strmatch(tok,"HHeadAOffset:")==0 )
+ {
+ // DUPLICATE OF ABOVE
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.hheadascent_add = temp;
+ }
+ else if ( strmatch(tok,"HHeadDOffset:")==0 )
+ {
+ // DUPLICATE OF ABOVE
+ int temp;
+ getint(sfd,&temp); sf->pfminfo.hheaddescent_add = temp;
+ }
+ else if ( strmatch(tok,"MacStyle:")==0 )
+ {
+ getsint(sfd,&sf->macstyle);
+ }
+ else if ( strmatch(tok,"OS2SubXSize:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_subxsize);
+ sf->pfminfo.subsuper_set = true;
+ }
+ else if ( strmatch(tok,"OS2SubYSize:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_subysize);
+ }
+ else if ( strmatch(tok,"OS2SubXOff:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_subxoff);
+ }
+ else if ( strmatch(tok,"OS2SubYOff:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_subyoff);
+ }
+ else if ( strmatch(tok,"OS2SupXSize:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_supxsize);
+ }
+ else if ( strmatch(tok,"OS2SupYSize:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_supysize);
+ }
+ else if ( strmatch(tok,"OS2SupXOff:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_supxoff);
+ }
+ else if ( strmatch(tok,"OS2SupYOff:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_supyoff);
+ }
+ else if ( strmatch(tok,"OS2StrikeYSize:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_strikeysize);
+ }
+ else if ( strmatch(tok,"OS2StrikeYPos:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_strikeypos);
+ }
+ else if ( strmatch(tok,"OS2CapHeight:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_capheight);
+ }
+ else if ( strmatch(tok,"OS2XHeight:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_xheight);
+ }
+ else if ( strmatch(tok,"OS2FamilyClass:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.os2_family_class);
+ }
+ else if ( strmatch(tok,"OS2Vendor:")==0 )
+ {
+ while ( isspace(nlgetc(sfd)));
+ sf->pfminfo.os2_vendor[0] = nlgetc(sfd);
+ sf->pfminfo.os2_vendor[1] = nlgetc(sfd);
+ sf->pfminfo.os2_vendor[2] = nlgetc(sfd);
+ sf->pfminfo.os2_vendor[3] = nlgetc(sfd);
+ (void) nlgetc(sfd);
+ }
+ else if ( strmatch(tok,"OS2CodePages:")==0 )
+ {
+ gethexints(sfd,sf->pfminfo.codepages,2);
+ sf->pfminfo.hascodepages = true;
+ }
+ else if ( strmatch(tok,"OS2UnicodeRanges:")==0 )
+ {
+ gethexints(sfd,sf->pfminfo.unicoderanges,4);
+ sf->pfminfo.hasunicoderanges = true;
+ }
+ else if ( strmatch(tok,"TopEncoding:")==0 )
+ {
+ /* Obsolete */
+ getint(sfd,&sf->top_enc);
+ }
+ else if ( strmatch(tok,"Ascent:")==0 )
+ {
+ getint(sfd,&sf->ascent);
+ }
+ else if ( strmatch(tok,"Descent:")==0 )
+ {
+ getint(sfd,&sf->descent);
+ }
+ else if ( strmatch(tok,"InvalidEm:")==0 )
+ {
+ getint(sfd,&sf->invalidem);
+ }
+ else if ( strmatch(tok,"woffMajor:")==0 )
+ {
+ getint(sfd,&sf->woffMajor);
+ }
+ else if ( strmatch(tok,"woffMinor:")==0 )
+ {
+ getint(sfd,&sf->woffMinor);
+ }
+ else if ( strmatch(tok,"woffMetadata:")==0 )
+ {
+ sf->woffMetadata = SFDReadUTF7Str(sfd);
+ }
+ else if ( strmatch(tok,"sfntRevision:")==0 )
+ {
+ gethex(sfd,(uint32 *)&sf->sfntRevision);
+ }
+ else if ( strmatch(tok,"LayerCount:")==0 )
+ {
+ d->had_layer_cnt = true;
+ getint(sfd,&sf->layer_cnt);
+ if ( sf->layer_cnt>2 ) {
+ sf->layers = realloc(sf->layers,sf->layer_cnt*sizeof(LayerInfo));
+ memset(sf->layers+2,0,(sf->layer_cnt-2)*sizeof(LayerInfo));
+ }
+ }
+ else if ( strmatch(tok,"Layer:")==0 )
+ {
+ // TODO: Read the U. F. O. path.
+ int layer, o2, bk;
+ getint(sfd,&layer);
+ if ( layer>=sf->layer_cnt ) {
+ sf->layers = realloc(sf->layers,(layer+1)*sizeof(LayerInfo));
+ memset(sf->layers+sf->layer_cnt,0,((layer+1)-sf->layer_cnt)*sizeof(LayerInfo));
+ sf->layer_cnt = layer+1;
+ }
+ getint(sfd,&o2);
+ sf->layers[layer].order2 = o2;
+ sf->layers[layer].background = layer==ly_back;
+ /* Used briefly, now background is after layer name */
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( ch!='"' ) {
+ getint(sfd,&bk);
+ sf->layers[layer].background = bk;
+ }
+ /* end of section for obsolete format */
+ sf->layers[layer].name = SFDReadUTF7Str(sfd);
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( ch!='\n' ) {
+ getint(sfd,&bk);
+ sf->layers[layer].background = bk;
+ }
+ while ( (ch=nlgetc(sfd))==' ' );
+ ungetc(ch,sfd);
+ if ( ch!='\n' ) { sf->layers[layer].ufo_path = SFDReadUTF7Str(sfd); }
+ }
+ else if ( strmatch(tok,"PreferredKerning:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->preferred_kerning = temp;
+ }
+ else if ( strmatch(tok,"StrokedFont:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->strokedfont = temp;
+ }
+ else if ( strmatch(tok,"MultiLayer:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->multilayer = temp;
+ }
+ else if ( strmatch(tok,"NeedsXUIDChange:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->changed_since_xuidchanged = temp;
+ }
+ else if ( strmatch(tok,"VerticalOrigin:")==0 )
+ {
+ // this doesn't seem to be written ever.
+ int temp;
+ getint(sfd,&temp);
+ sf->hasvmetrics = true;
+ }
+ else if ( strmatch(tok,"HasVMetrics:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->hasvmetrics = temp;
+ }
+ else if ( strmatch(tok,"Justify:")==0 )
+ {
+ SFDParseJustify(sfd,sf,tok);
+ }
+ else if ( strmatch(tok,"BaseHoriz:")==0 )
+ {
+ sf->horiz_base = SFDParseBase(sfd);
+ d->last_base = sf->horiz_base;
+ d->last_base_script = NULL;
+ }
+ else if ( strmatch(tok,"BaseVert:")==0 )
+ {
+ sf->vert_base = SFDParseBase(sfd);
+ d->last_base = sf->vert_base;
+ d->last_base_script = NULL;
+ }
+ else if ( strmatch(tok,"BaseScript:")==0 )
+ {
+ struct basescript *bs = SFDParseBaseScript(sfd,d->last_base);
+ if ( d->last_base==NULL )
+ {
+ BaseScriptFree(bs);
+ bs = NULL;
+ }
+ else if ( d->last_base_script!=NULL )
+ d->last_base_script->next = bs;
+ else
+ d->last_base->scripts = bs;
+ d->last_base_script = bs;
+ }
+ else if ( strmatch(tok,"StyleMap:")==0 )
+ {
+ gethex(sfd,(uint32 *)&sf->pfminfo.stylemap);
+ }
+ /* Legacy attribute for StyleMap. Deprecated. */
+ else if ( strmatch(tok,"OS2StyleName:")==0 )
+ {
+ char* sname = SFDReadUTF7Str(sfd);
+ if (sf->pfminfo.stylemap == -1) {
+ if (strcmp(sname,"bold italic")==0) sf->pfminfo.stylemap = 0x21;
+ else if (strcmp(sname,"bold")==0) sf->pfminfo.stylemap = 0x20;
+ else if (strcmp(sname,"italic")==0) sf->pfminfo.stylemap = 0x01;
+ else if (strcmp(sname,"regular")==0) sf->pfminfo.stylemap = 0x40;
+ }
+ free(sname);
+ }
+ else if ( strmatch(tok,"FSType:")==0 )
+ {
+ getsint(sfd,&sf->pfminfo.fstype);
+ }
+ else if ( strmatch(tok,"OS2Version:")==0 )
+ {
+ getsint(sfd,&sf->os2_version);
+ }
+ else if ( strmatch(tok,"OS2_WeightWidthSlopeOnly:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->weight_width_slope_only = temp;
+ }
+ else if ( strmatch(tok,"OS2_UseTypoMetrics:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->use_typo_metrics = temp;
+ }
+ else if ( strmatch(tok,"UseUniqueID:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->use_uniqueid = temp;
+ }
+ else if ( strmatch(tok,"UseXUID:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->use_xuid = temp;
+ }
+ else if ( strmatch(tok,"UniqueID:")==0 )
+ {
+ getint(sfd,&sf->uniqueid);
+ }
+ else if ( strmatch(tok,"XUID:")==0 )
+ {
+ geteol(sfd,tok);
+ sf->xuid = copy(tok);
+ }
+ else if ( strmatch(tok,"Lookup:")==0 )
+ {
+ OTLookup *otl;
+ int temp;
+ otl = chunkalloc(sizeof(OTLookup));
+ getint(sfd,&temp); otl->lookup_type = temp;
+ getint(sfd,&temp); otl->lookup_flags = temp;
+ getint(sfd,&temp); otl->store_in_afm = temp;
+ otl->lookup_name = SFDReadUTF7Str(sfd);
+ if ( otl->lookup_type<gpos_single ) {
+ if ( d->lastsotl==NULL )
+ sf->gsub_lookups = otl;
+ else
+ d->lastsotl->next = otl;
+ d->lastsotl = otl;
+ } else {
+ if ( d->lastpotl==NULL )
+ sf->gpos_lookups = otl;
+ else
+ d->lastpotl->next = otl;
+ d->lastpotl = otl;
+ }
+ SFDParseLookup(sfd,otl);
+ }
+ else if ( strmatch(tok,"MarkAttachClasses:")==0 )
+ {
+ getint(sfd,&sf->mark_class_cnt);
+ sf->mark_classes = malloc(sf->mark_class_cnt*sizeof(char *));
+ sf->mark_class_names = malloc(sf->mark_class_cnt*sizeof(char *));
+ sf->mark_classes[0] = NULL; sf->mark_class_names[0] = NULL;
+ for ( i=1; i<sf->mark_class_cnt; ++i )
+ {
+ /* Class 0 is unused */
+ int temp;
+ while ( (temp=nlgetc(sfd))=='\n' || temp=='\r' ); ungetc(temp,sfd);
+ sf->mark_class_names[i] = SFDReadUTF7Str(sfd);
+ getint(sfd,&temp);
+ sf->mark_classes[i] = malloc(temp+1); sf->mark_classes[i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(sf->mark_classes[i],1,temp,sfd);
+ }
+ }
+ else if ( strmatch(tok,"MarkAttachSets:")==0 )
+ {
+ getint(sfd,&sf->mark_set_cnt);
+ sf->mark_sets = malloc(sf->mark_set_cnt*sizeof(char *));
+ sf->mark_set_names = malloc(sf->mark_set_cnt*sizeof(char *));
+ for ( i=0; i<sf->mark_set_cnt; ++i )
+ {
+ /* Set 0 is used */
+ int temp;
+ while ( (temp=nlgetc(sfd))=='\n' || temp=='\r' ); ungetc(temp,sfd);
+ sf->mark_set_names[i] = SFDReadUTF7Str(sfd);
+ getint(sfd,&temp);
+ sf->mark_sets[i] = malloc(temp+1); sf->mark_sets[i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(sf->mark_sets[i],1,temp,sfd);
+ }
+ }
+ else if ( strmatch(tok,"KernClass2:")==0 || strmatch(tok,"VKernClass2:")==0 ||
+ strmatch(tok,"KernClass:")==0 || strmatch(tok,"VKernClass:")==0 ||
+ strmatch(tok,"KernClass3:")==0 || strmatch(tok,"VKernClass3:")==0 )
+ {
+ int kernclassversion = 0;
+ int isv = tok[0]=='V';
+ int kcvoffset = (isv ? 10 : 9); //Offset to read kerning class version
+ if (isdigit(tok[kcvoffset])) kernclassversion = tok[kcvoffset] - '0';
+ int temp, classstart=1;
+ int old = (kernclassversion == 0);
+
+ if ( (sf->sfd_version<2)!=old ) {
+ IError( "Version mixup in Kerning Classes of sfd file." );
+ exit(1);
+ }
+ kc = chunkalloc(old ? sizeof(KernClass1) : sizeof(KernClass));
+ getint(sfd,&kc->first_cnt);
+ ch=nlgetc(sfd);
+ if ( ch=='+' )
+ classstart = 0;
+ else
+ ungetc(ch,sfd);
+ getint(sfd,&kc->second_cnt);
+ if ( old ) {
+ getint(sfd,&temp); ((KernClass1 *) kc)->sli = temp;
+ getint(sfd,&temp); ((KernClass1 *) kc)->flags = temp;
+ } else {
+ kc->subtable = SFFindLookupSubtableAndFreeName(sf,SFDReadUTF7Str(sfd));
+ if ( kc->subtable!=NULL && kc->subtable->kc==NULL )
+ kc->subtable->kc = kc;
+ else {
+ if ( kc->subtable==NULL )
+ LogError(_("Bad SFD file, missing subtable in kernclass defn.\n") );
+ else
+ LogError(_("Bad SFD file, two kerning classes assigned to the same subtable: %s\n"), kc->subtable->subtable_name );
+ kc->subtable = NULL;
+ }
+ }
+ kc->firsts = calloc(kc->first_cnt,sizeof(char *));
+ kc->seconds = calloc(kc->second_cnt,sizeof(char *));
+ kc->offsets = calloc(kc->first_cnt*kc->second_cnt,sizeof(int16));
+ kc->adjusts = calloc(kc->first_cnt*kc->second_cnt,sizeof(DeviceTable));
+ if (kernclassversion >= 3) {
+ kc->firsts_flags = calloc(kc->first_cnt, sizeof(int));
+ kc->seconds_flags = calloc(kc->second_cnt, sizeof(int));
+ kc->offsets_flags = calloc(kc->first_cnt*kc->second_cnt, sizeof(int));
+ kc->firsts_names = calloc(kc->first_cnt, sizeof(char*));
+ kc->seconds_names = calloc(kc->second_cnt, sizeof(char*));
+ }
+ kc->firsts[0] = NULL;
+ for ( i=classstart; i<kc->first_cnt; ++i ) {
+ if (kernclassversion < 3) {
+ getint(sfd,&temp);
+ kc->firsts[i] = malloc(temp+1); kc->firsts[i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(kc->firsts[i],1,temp,sfd);
+ } else {
+ getint(sfd,&kc->firsts_flags[i]);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd); if (ch == '\n' || ch == EOF) continue;
+ kc->firsts_names[i] = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd); if (ch == '\n' || ch == EOF) continue;
+ kc->firsts[i] = SFDReadUTF7Str(sfd);
+ if (kc->firsts[i] == NULL) kc->firsts[i] = copy(""); // In certain places, this must be defined.
+ while ((ch=nlgetc(sfd)) == ' ' || ch == '\n'); ungetc(ch, sfd);
+ }
+ }
+ kc->seconds[0] = NULL;
+ for ( i=1; i<kc->second_cnt; ++i ) {
+ if (kernclassversion < 3) {
+ getint(sfd,&temp);
+ kc->seconds[i] = malloc(temp+1); kc->seconds[i][temp] = '\0';
+ nlgetc(sfd); /* skip space */
+ fread(kc->seconds[i],1,temp,sfd);
+ } else {
+ getint(sfd,&temp);
+ kc->seconds_flags[i] = temp;
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd); if (ch == '\n' || ch == EOF) continue;
+ kc->seconds_names[i] = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd); if (ch == '\n' || ch == EOF) continue;
+ kc->seconds[i] = SFDReadUTF7Str(sfd);
+ if (kc->seconds[i] == NULL) kc->seconds[i] = copy(""); // In certain places, this must be defined.
+ while ((ch=nlgetc(sfd)) == ' ' || ch == '\n'); ungetc(ch, sfd);
+ }
+ }
+ for ( i=0; i<kc->first_cnt*kc->second_cnt; ++i ) {
+ if (kernclassversion >= 3) {
+ getint(sfd,&temp);
+ kc->offsets_flags[i] = temp;
+ }
+ getint(sfd,&temp);
+ kc->offsets[i] = temp;
+ SFDReadDeviceTable(sfd,&kc->adjusts[i]);
+ }
+ if ( !old && kc->subtable == NULL ) {
+ /* Error. Ignore it. Free it. Whatever */;
+ } else if ( !isv ) {
+ if ( d->lastkc==NULL )
+ sf->kerns = kc;
+ else
+ d->lastkc->next = kc;
+ d->lastkc = kc;
+ } else {
+ if ( d->lastvkc==NULL )
+ sf->vkerns = kc;
+ else
+ d->lastvkc->next = kc;
+ d->lastvkc = kc;
+ }
+ }
+ else if ( strmatch(tok,"ContextPos2:")==0 || strmatch(tok,"ContextSub2:")==0 ||
+ strmatch(tok,"ChainPos2:")==0 || strmatch(tok,"ChainSub2:")==0 ||
+ strmatch(tok,"ReverseChain2:")==0 ||
+ strmatch(tok,"ContextPos:")==0 || strmatch(tok,"ContextSub:")==0 ||
+ strmatch(tok,"ChainPos:")==0 || strmatch(tok,"ChainSub:")==0 ||
+ strmatch(tok,"ReverseChain:")==0 )
+ {
+ FPST *fpst;
+ int old;
+ if ( strchr(tok,'2')!=NULL ) {
+ old = false;
+ fpst = chunkalloc(sizeof(FPST));
+ } else {
+ old = true;
+ fpst = chunkalloc(sizeof(FPST1));
+ }
+ if ( (sf->sfd_version<2)!=old ) {
+ IError( "Version mixup in FPST of sfd file." );
+ exit(1);
+ }
+ if ( d->lastfp==NULL )
+ sf->possub = fpst;
+ else
+ d->lastfp->next = fpst;
+ d->lastfp = fpst;
+ SFDParseChainContext(sfd,sf,fpst,tok,old);
+ }
+ else if ( strmatch(tok,"Group:")==0 ) {
+ struct ff_glyphclasses *grouptmp = calloc(1, sizeof(struct ff_glyphclasses));
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ grouptmp->classname = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ grouptmp->glyphs = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' ' || ch == '\n'); ungetc(ch, sfd);
+ if (d->lastgroup != NULL) d->lastgroup->next = grouptmp; else sf->groups = grouptmp;
+ d->lastgroup = grouptmp;
+ }
+ else if ( strmatch(tok,"GroupKern:")==0 ) {
+ int temp = 0;
+ struct ff_rawoffsets *kerntmp = calloc(1, sizeof(struct ff_rawoffsets));
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ kerntmp->left = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ kerntmp->right = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ getint(sfd,&temp);
+ kerntmp->offset = temp;
+ while ((ch=nlgetc(sfd)) == ' ' || ch == '\n'); ungetc(ch, sfd);
+ if (d->lastgroupkern != NULL) d->lastgroupkern->next = kerntmp; else sf->groupkerns = kerntmp;
+ d->lastgroupkern = kerntmp;
+ }
+ else if ( strmatch(tok,"GroupVKern:")==0 ) {
+ int temp = 0;
+ struct ff_rawoffsets *kerntmp = calloc(1, sizeof(struct ff_rawoffsets));
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ kerntmp->left = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ kerntmp->right = SFDReadUTF7Str(sfd);
+ while ((ch=nlgetc(sfd)) == ' '); ungetc(ch, sfd);
+ getint(sfd,&temp);
+ kerntmp->offset = temp;
+ while ((ch=nlgetc(sfd)) == ' ' || ch == '\n'); ungetc(ch, sfd);
+ if (d->lastgroupvkern != NULL) d->lastgroupvkern->next = kerntmp; else sf->groupvkerns = kerntmp;
+ d->lastgroupvkern = kerntmp;
+ }
+ else if ( strmatch(tok,"MacIndic2:")==0 || strmatch(tok,"MacContext2:")==0 ||
+ strmatch(tok,"MacLigature2:")==0 || strmatch(tok,"MacSimple2:")==0 ||
+ strmatch(tok,"MacKern2:")==0 || strmatch(tok,"MacInsert2:")==0 ||
+ strmatch(tok,"MacIndic:")==0 || strmatch(tok,"MacContext:")==0 ||
+ strmatch(tok,"MacLigature:")==0 || strmatch(tok,"MacSimple:")==0 ||
+ strmatch(tok,"MacKern:")==0 || strmatch(tok,"MacInsert:")==0 )
+ {
+ ASM *sm;
+ if ( strchr(tok,'2')!=NULL ) {
+ old = false;
+ sm = chunkalloc(sizeof(ASM));
+ } else {
+ old = true;
+ sm = chunkalloc(sizeof(ASM1));
+ }
+ if ( (sf->sfd_version<2)!=old ) {
+ IError( "Version mixup in state machine of sfd file." );
+ exit(1);
+ }
+ if ( d->lastsm==NULL )
+ sf->sm = sm;
+ else
+ d->lastsm->next = sm;
+ d->lastsm = sm;
+ SFDParseStateMachine(sfd,sf,sm,tok,old);
+ }
+ else if ( strmatch(tok,"MacFeat:")==0 )
+ {
+ sf->features = SFDParseMacFeatures(sfd,tok);
+ }
+ else if ( strmatch(tok,"TtfTable:")==0 )
+ {
+ /* Old, binary format */
+ /* still used for maxp and unknown tables */
+ SFDGetTtfTable(sfd,sf,d->lastttf);
+ }
+ else if ( strmatch(tok,"TtTable:")==0 )
+ {
+ /* text instruction format */
+ SFDGetTtTable(sfd,sf,d->lastttf);
+ }
+
+
+ ///////////////////
+
+ else if ( strmatch(tok,"ShortTable:")==0 )
+ {
+ // only read, not written.
+ /* text number format */
+ SFDGetShortTable(sfd,sf,d->lastttf);
+ }
+ else
+ {
+ //
+ // We didn't have a match ourselves.
+ //
+ return false;
+ }
+ return true;
+}
+
+static SplineFont *SFD_GetFont( FILE *sfd,SplineFont *cidmaster,char *tok,
+ int fromdir, char *dirname, float sfdversion )
+{
+ SplineFont *sf;
+ int realcnt, i, eof, mappos=-1, ch;
+ struct table_ordering *lastord = NULL;
+ struct axismap *lastaxismap = NULL;
+ struct named_instance *lastnamedinstance = NULL;
+ int pushedbacktok = false;
+ Encoding *enc = &custom;
+ struct remap *remap = NULL;
+ int haddupenc;
+ int old_style_order2 = false;
+ int had_layer_cnt=false;
+
+ orig_pos = 0; /* Only used for compatibility with extremely old sfd files */
+
+ sf = SplineFontEmpty();
+ sf->sfd_version = sfdversion;
+ sf->cidmaster = cidmaster;
+ sf->uni_interp = ui_unset;
+ SFD_GetFontMetaDataData d;
+ SFD_GetFontMetaDataData_Init( &d );
+ while ( 1 ) {
+ if ( pushedbacktok )
+ pushedbacktok = false;
+ else if ( (eof = getname(sfd,tok))!=1 ) {
+ if ( eof==-1 )
+ break;
+ geteol(sfd,tok);
+ continue;
+ }
+
+
+ bool wasMetadata = SFD_GetFontMetaData( sfd, tok, sf, &d );
+ had_layer_cnt = d.had_layer_cnt;
+ if( wasMetadata )
+ {
+ // we have handled the token entirely
+ // inside SFD_GetFontMetaData() move to next token.
+ continue;
+ }
+
+
+ if ( strmatch(tok,"DisplaySize:")==0 )
+ {
+ getint(sfd,&sf->display_size);
+ }
+ else if ( strmatch(tok,"DisplayLayer:")==0 )
+ {
+ getint(sfd,&sf->display_layer);
+ }
+ else if ( strmatch(tok,"ExtremaBound:")==0 )
+ {
+ getint(sfd,&sf->extrema_bound);
+ }
+ else if ( strmatch(tok,"WidthSeparation:")==0 )
+ {
+ getint(sfd,&sf->width_separation);
+ }
+ else if ( strmatch(tok,"WinInfo:")==0 )
+ {
+ int temp1, temp2;
+ getint(sfd,&sf->top_enc);
+ getint(sfd,&temp1);
+ getint(sfd,&temp2);
+ if ( sf->top_enc<=0 ) sf->top_enc=-1;
+ if ( temp1<=0 ) temp1 = 16;
+ if ( temp2<=0 ) temp2 = 4;
+ sf->desired_col_cnt = temp1;
+ sf->desired_row_cnt = temp2;
+ }
+ else if ( strmatch(tok,"AntiAlias:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->display_antialias = temp;
+ }
+ else if ( strmatch(tok,"FitToEm:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->display_bbsized = temp;
+ }
+ else if ( strmatch(tok,"Order2:")==0 )
+ {
+ getint(sfd,&old_style_order2);
+ sf->grid.order2 = old_style_order2;
+ sf->layers[ly_back].order2 = old_style_order2;
+ sf->layers[ly_fore].order2 = old_style_order2;
+ }
+ else if ( strmatch(tok,"GridOrder2:")==0 )
+ {
+ int o2;
+ getint(sfd,&o2);
+ sf->grid.order2 = o2;
+ }
+ else if ( strmatch(tok,"Encoding:")==0 )
+ {
+ enc = SFDGetEncoding(sfd,tok);
+ if ( sf->map!=NULL ) sf->map->enc = enc;
+ }
+ else if ( strmatch(tok,"OldEncoding:")==0 )
+ {
+ /* old_encname =*/ (void) SFDGetEncoding(sfd,tok);
+ }
+ else if ( strmatch(tok,"UnicodeInterp:")==0 )
+ {
+ sf->uni_interp = SFDGetUniInterp(sfd,tok,sf);
+ }
+ else if ( strmatch(tok,"NameList:")==0 )
+ {
+ SFDGetNameList(sfd,tok,sf);
+ }
+ else if ( strmatch(tok,"Compacted:")==0 )
+ {
+ int temp;
+ getint(sfd,&temp);
+ sf->compacted = temp;
+ }
+ else if ( strmatch(tok,"Registry:")==0 )
+ {
+ geteol(sfd,tok);
+ sf->cidregistry = copy(tok);
+ }
+
+
+ //////////
+
+
+ else if ( strmatch(tok,"Ordering:")==0 ) {
+ geteol(sfd,tok);
+ sf->ordering = copy(tok);
+ } else if ( strmatch(tok,"Supplement:")==0 ) {
+ getint(sfd,&sf->supplement);
+ } else if ( strmatch(tok,"RemapN:")==0 ) {
+ int n;
+ getint(sfd,&n);
+ remap = calloc(n+1,sizeof(struct remap));
+ remap[n].infont = -1;
+ mappos = 0;
+ if ( sf->map!=NULL ) sf->map->remap = remap;
+ } else if ( strmatch(tok,"Remap:")==0 ) {
+ uint32 f, l; int p;
+ gethex(sfd,&f);
+ gethex(sfd,&l);
+ getint(sfd,&p);
+ if ( remap!=NULL && remap[mappos].infont!=-1 ) {
+ remap[mappos].firstenc = f;
+ remap[mappos].lastenc = l;
+ remap[mappos].infont = p;
+ mappos++;
+ }
+ } else if ( strmatch(tok,"CIDVersion:")==0 ) {
+ real temp;
+ getreal(sfd,&temp);
+ sf->cidversion = temp;
+ } else if ( strmatch(tok,"Grid")==0 ) {
+ sf->grid.splines = SFDGetSplineSet(sfd,sf->grid.order2);
+ } else if ( strmatch(tok,"ScriptLang:")==0 ) {
+ int i,j,k;
+ int imax, jmax, kmax;
+ if ( sf->sfd_version==0 || sf->sfd_version>=2 ) {
+ IError( "Script lang lists should not happen in version 2 sfd files." );
+ SplineFontFree(sf);
+ return NULL;
+ }
+ getint(sfd,&imax);
+ ((SplineFont1 *) sf)->sli_cnt = imax;
+ ((SplineFont1 *) sf)->script_lang = malloc((imax+1)*sizeof(struct script_record *));
+ ((SplineFont1 *) sf)->script_lang[imax] = NULL;
+ for ( i=0; i<imax; ++i ) {
+ getint(sfd,&jmax);
+ ((SplineFont1 *) sf)->script_lang[i] = malloc((jmax+1)*sizeof(struct script_record));
+ ((SplineFont1 *) sf)->script_lang[i][jmax].script = 0;
+ for ( j=0; j<jmax; ++j ) {
+ ((SplineFont1 *) sf)->script_lang[i][j].script = gettag(sfd);
+ getint(sfd,&kmax);
+ ((SplineFont1 *) sf)->script_lang[i][j].langs = malloc((kmax+1)*sizeof(uint32));
+ ((SplineFont1 *) sf)->script_lang[i][j].langs[kmax] = 0;
+ for ( k=0; k<kmax; ++k ) {
+ ((SplineFont1 *) sf)->script_lang[i][j].langs[k] = gettag(sfd);
+ }
+ }
+ }
+ } else if ( strmatch(tok,"TeXData:")==0 ) {
+ int temp;
+ getint(sfd,&temp);
+ sf->texdata.type = temp;
+ getint(sfd, &temp);
+ if ( sf->design_size==0 ) {
+ sf->design_size = (5*temp+(1<<18))>>19;
+ }
+ for ( i=0; i<22; ++i ) {
+ int foo;
+ getint(sfd,&foo);
+ sf->texdata.params[i]=foo;
+ }
+ } else if ( strnmatch(tok,"AnchorClass",11)==0 ) {
+ char *name;
+ AnchorClass *lastan = NULL, *an;
+ int old = strchr(tok,'2')==NULL;
+ while ( (name=SFDReadUTF7Str(sfd))!=NULL ) {
+ an = chunkalloc(old ? sizeof(AnchorClass1) : sizeof(AnchorClass));
+ an->name = name;
+ if ( old ) {
+ getname(sfd,tok);
+ if ( tok[0]=='0' && tok[1]=='\0' )
+ ((AnchorClass1 *) an)->feature_tag = 0;
+ else {
+ if ( tok[1]=='\0' ) { tok[1]=' '; tok[2] = 0; }
+ if ( tok[2]=='\0' ) { tok[2]=' '; tok[3] = 0; }
+ if ( tok[3]=='\0' ) { tok[3]=' '; tok[4] = 0; }
+ ((AnchorClass1 *) an)->feature_tag = (tok[0]<<24) | (tok[1]<<16) | (tok[2]<<8) | tok[3];
+ }
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ ungetc(ch,sfd);
+ if ( isdigit(ch)) {
+ int temp;
+ getint(sfd,&temp);
+ ((AnchorClass1 *) an)->flags = temp;
+ }
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ ungetc(ch,sfd);
+ if ( isdigit(ch)) {
+ int temp;
+ getint(sfd,&temp);
+ ((AnchorClass1 *) an)->script_lang_index = temp;
+ } else
+ ((AnchorClass1 *) an)->script_lang_index = 0xffff; /* Will be fixed up later */
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ ungetc(ch,sfd);
+ if ( isdigit(ch)) {
+ int temp;
+ getint(sfd,&temp);
+ ((AnchorClass1 *) an)->merge_with = temp;
+ } else
+ ((AnchorClass1 *) an)->merge_with = 0xffff; /* Will be fixed up later */
+ } else {
+ char *subtable_name = SFDReadUTF7Str(sfd);
+ if ( subtable_name!=NULL) /* subtable is optional */
+ an->subtable = SFFindLookupSubtableAndFreeName(sf,subtable_name);
+ }
+ while ( (ch=nlgetc(sfd))==' ' || ch=='\t' );
+ ungetc(ch,sfd);
+ if ( isdigit(ch) ) {
+ /* Early versions of SfdFormat 2 had a number here */
+ int temp;
+ getint(sfd,&temp);
+ an->type = temp;
+ } else if ( old ) {
+ if ( ((AnchorClass1 *) an)->feature_tag==CHR('c','u','r','s'))
+ an->type = act_curs;
+ else if ( ((AnchorClass1 *) an)->feature_tag==CHR('m','k','m','k'))
+ an->type = act_mkmk;
+ else
+ an->type = act_mark;
+ } else {
+ an->type = act_mark;
+ if( an->subtable && an->subtable->lookup )
+ {
+ switch ( an->subtable->lookup->lookup_type )
+ {
+ case gpos_cursive:
+ an->type = act_curs;
+ break;
+ case gpos_mark2base:
+ an->type = act_mark;
+ break;
+ case gpos_mark2ligature:
+ an->type = act_mklg;
+ break;
+ case gpos_mark2mark:
+ an->type = act_mkmk;
+ break;
+ default:
+ an->type = act_mark;
+ break;
+ }
+ }
+ }
+ if ( lastan==NULL )
+ sf->anchor = an;
+ else
+ lastan->next = an;
+ lastan = an;
+ }
+ } else if ( strncmp(tok,"MATH:",5)==0 ) {
+ SFDParseMathItem(sfd,sf,tok);
+ } else if ( strmatch(tok,"TableOrder:")==0 ) {
+ int temp;
+ struct table_ordering *ord;
+ if ( sfdversion==0 || sfdversion>=2 ) {
+ IError("Table ordering specified in version 2 sfd file.\n" );
+ SplineFontFree(sf);
+ return NULL;
+ }
+ ord = chunkalloc(sizeof(struct table_ordering));
+ ord->table_tag = gettag(sfd);
+ getint(sfd,&temp);
+ ord->ordered_features = malloc((temp+1)*sizeof(uint32));
+ ord->ordered_features[temp] = 0;
+ for ( i=0; i<temp; ++i ) {
+ while ( isspace((ch=nlgetc(sfd))) );
+ if ( ch=='\'' ) {
+ ungetc(ch,sfd);
+ ord->ordered_features[i] = gettag(sfd);
+ } else if ( ch=='<' ) {
+ int f,s;
+ fscanf(sfd,"%d,%d>", &f, &s );
+ ord->ordered_features[i] = (f<<16)|s;
+ }
+ }
+ if ( lastord==NULL )
+ ((SplineFont1 *) sf)->orders = ord;
+ else
+ lastord->next = ord;
+ lastord = ord;
+ } else if ( strmatch(tok,"BeginPrivate:")==0 ) {
+ SFDGetPrivate(sfd,sf);
+ } else if ( strmatch(tok,"BeginSubrs:")==0 ) { /* leave in so we don't croak on old sfd files */
+ SFDGetSubrs(sfd);
+ } else if ( strmatch(tok,"PickledData:")==0 ) {
+ if (sf->python_persistent != NULL) {
+#if defined(_NO_PYTHON)
+ free( sf->python_persistent ); /* It's a string of pickled data which we leave as a string */
+#else
+ PyFF_FreePythonPersistent(sf->python_persistent);
+#endif
+ sf->python_persistent = NULL;
+ }
+ sf->python_persistent = SFDUnPickle(sfd, 0);
+ sf->python_persistent_has_lists = 0;
+ } else if ( strmatch(tok,"PickledDataWithLists:")==0 ) {
+ if (sf->python_persistent != NULL) {
+#if defined(_NO_PYTHON)
+ free( sf->python_persistent ); /* It's a string of pickled data which we leave as a string */
+#else
+ PyFF_FreePythonPersistent(sf->python_persistent);
+#endif
+ sf->python_persistent = NULL;
+ }
+ sf->python_persistent = SFDUnPickle(sfd, 1);
+ sf->python_persistent_has_lists = 1;
+ } else if ( strmatch(tok,"MMCounts:")==0 ) {
+ MMSet *mm = sf->mm = chunkalloc(sizeof(MMSet));
+ getint(sfd,&mm->instance_count);
+ getint(sfd,&mm->axis_count);
+ ch = nlgetc(sfd);
+ if ( ch!=' ' )
+ ungetc(ch,sfd);
+ else { int temp;
+ getint(sfd,&temp);
+ mm->apple = temp;
+ getint(sfd,&mm->named_instance_count);
+ }
+ mm->instances = calloc(mm->instance_count,sizeof(SplineFont *));
+ mm->positions = malloc(mm->instance_count*mm->axis_count*sizeof(real));
+ mm->defweights = malloc(mm->instance_count*sizeof(real));
+ mm->axismaps = calloc(mm->axis_count,sizeof(struct axismap));
+ if ( mm->named_instance_count!=0 )
+ mm->named_instances = calloc(mm->named_instance_count,sizeof(struct named_instance));
+ } else if ( strmatch(tok,"MMAxis:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL ) {
+ for ( i=0; i<mm->axis_count; ++i ) {
+ getname(sfd,tok);
+ mm->axes[i] = copy(tok);
+ }
+ }
+ } else if ( strmatch(tok,"MMPositions:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL ) {
+ for ( i=0; i<mm->axis_count*mm->instance_count; ++i )
+ getreal(sfd,&mm->positions[i]);
+ }
+ } else if ( strmatch(tok,"MMWeights:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL ) {
+ for ( i=0; i<mm->instance_count; ++i )
+ getreal(sfd,&mm->defweights[i]);
+ }
+ } else if ( strmatch(tok,"MMAxisMap:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL ) {
+ int index, points;
+ getint(sfd,&index); getint(sfd,&points);
+ mm->axismaps[index].points = points;
+ mm->axismaps[index].blends = malloc(points*sizeof(real));
+ mm->axismaps[index].designs = malloc(points*sizeof(real));
+ for ( i=0; i<points; ++i ) {
+ getreal(sfd,&mm->axismaps[index].blends[i]);
+ while ( (ch=nlgetc(sfd))!=EOF && isspace(ch));
+ ungetc(ch,sfd);
+ if ( (ch=nlgetc(sfd))!='=' )
+ ungetc(ch,sfd);
+ else if ( (ch=nlgetc(sfd))!='>' )
+ ungetc(ch,sfd);
+ getreal(sfd,&mm->axismaps[index].designs[i]);
+ }
+ lastaxismap = &mm->axismaps[index];
+ lastnamedinstance = NULL;
+ }
+ } else if ( strmatch(tok,"MMNamedInstance:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL ) {
+ int index;
+ getint(sfd,&index);
+ mm->named_instances[index].coords = malloc(mm->axis_count*sizeof(real));
+ for ( i=0; i<mm->axis_count; ++i )
+ getreal(sfd,&mm->named_instances[index].coords[i]);
+ lastnamedinstance = &mm->named_instances[index];
+ lastaxismap = NULL;
+ }
+ } else if ( strmatch(tok,"MacName:")==0 ) {
+ struct macname *names = SFDParseMacNames(sfd,tok);
+ if ( lastaxismap!=NULL )
+ lastaxismap->axisnames = names;
+ else if ( lastnamedinstance !=NULL )
+ lastnamedinstance->names = names;
+ pushedbacktok = true;
+ } else if ( strmatch(tok,"MMCDV:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL )
+ mm->cdv = SFDParseMMSubroutine(sfd);
+ } else if ( strmatch(tok,"MMNDV:")==0 ) {
+ MMSet *mm = sf->mm;
+ if ( mm!=NULL )
+ mm->ndv = SFDParseMMSubroutine(sfd);
+ } else if ( strmatch(tok,"BeginMMFonts:")==0 ) {
+ int cnt;
+ getint(sfd,&cnt);
+ getint(sfd,&realcnt);
+ ff_progress_change_stages(cnt);
+ ff_progress_change_total(realcnt);
+ MMInferStuff(sf->mm);
+ break;
+ } else if ( strmatch(tok,"BeginSubFonts:")==0 ) {
+ getint(sfd,&sf->subfontcnt);
+ sf->subfonts = calloc(sf->subfontcnt,sizeof(SplineFont *));
+ getint(sfd,&realcnt);
+ sf->map = EncMap1to1(realcnt);
+ ff_progress_change_stages(2);
+ ff_progress_change_total(realcnt);
+ break;
+ } else if ( strmatch(tok,"BeginChars:")==0 ) {
+ int charcnt;
+ getint(sfd,&charcnt);
+ if (charcnt<enc->char_cnt) {
+ IError("SFD file specifies too few slots for its encoding.\n" );
+exit( 1 );
+ }
+ if ( getint(sfd,&realcnt)!=1 || realcnt==-1 )
+ realcnt = charcnt;
+ else
+ ++realcnt; /* value saved is max glyph, not glyph cnt */
+ ff_progress_change_total(realcnt);
+ sf->glyphcnt = sf->glyphmax = realcnt;
+ sf->glyphs = calloc(realcnt,sizeof(SplineChar *));
+ if ( cidmaster!=NULL ) {
+ sf->map = cidmaster->map;
+ } else {
+ sf->map = EncMapNew(charcnt,realcnt,enc);
+ sf->map->remap = remap;
+ }
+ SFDSizeMap(sf->map,sf->glyphcnt,charcnt);
+ break;
+#if HANYANG
+ } else if ( strmatch(tok,"BeginCompositionRules")==0 ) {
+ sf->rules = SFDReadCompositionRules(sfd);
+#endif
+ } else {
+ /* If we don't understand it, skip it */
+ geteol(sfd,tok);
+ }
+ }
+
+ if ( sf->subfontcnt!=0 ) {
+ ff_progress_change_stages(2*sf->subfontcnt);
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ if ( i!=0 )
+ ff_progress_next_stage();
+ sf->subfonts[i] = SFD_GetFont(sfd,sf,tok,fromdir,dirname,sfdversion);
+ }
+ } else if ( sf->mm!=NULL ) {
+ MMSet *mm = sf->mm;
+ ff_progress_change_stages(2*(mm->instance_count+1));
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( i!=0 )
+ ff_progress_next_stage();
+ mm->instances[i] = SFD_GetFont(sfd,NULL,tok,fromdir,dirname,sfdversion);
+ EncMapFree(mm->instances[i]->map); mm->instances[i]->map=NULL;
+ mm->instances[i]->mm = mm;
+ }
+ ff_progress_next_stage();
+ mm->normal = SFD_GetFont(sfd,NULL,tok,fromdir,dirname,sfdversion);
+ mm->normal->mm = mm;
+ sf->mm = NULL;
+ SplineFontFree(sf);
+ sf = mm->normal;
+ if ( sf->map->enc!=&custom ) {
+ EncMap *map;
+ MMMatchGlyphs(mm); /* sfd files from before the encoding change can have mismatched orig pos */
+ map = EncMapFromEncoding(sf,sf->map->enc);
+ EncMapFree(sf->map);
+ sf->map = map;
+ }
+ } else {
+ while ( SFDGetChar(sfd,sf,had_layer_cnt)!=NULL ) {
+ ff_progress_next();
+ }
+ ff_progress_next_stage();
+ }
+ haddupenc = false;
+ while ( getname(sfd,tok)==1 ) {
+ if ( strcmp(tok,"EndSplineFont")==0 || strcmp(tok,"EndSubSplineFont")==0 )
+ break;
+ else if ( strmatch(tok,"DupEnc:")==0 ) {
+ int enc, orig;
+ haddupenc = true;
+ if ( getint(sfd,&enc) && getint(sfd,&orig) && sf->map!=NULL ) {
+ SFDSetEncMap(sf,orig,enc);
+ }
+ }
+ }
+ if ( sf->cidmaster==NULL )
+ SFDFixupRefs(sf);
+
+ if ( !haddupenc )
+ SFD_DoAltUnis(sf);
+ else
+ AltUniFigure(sf,sf->map,true);
+ if ( !d.hadtimes )
+ SFTimesFromFile(sf,sfd);
+return( sf );
+}
+
+void SFTimesFromFile(SplineFont *sf,FILE *file) {
+ struct stat b;
+ if ( fstat(fileno(file),&b)!=-1 ) {
+ sf->modificationtime = b.st_mtime;
+ sf->creationtime = b.st_mtime;
+ }
+}
+
+static double SFDStartsCorrectly(FILE *sfd,char *tok) {
+ real dval;
+ int ch;
+
+ if ( getname(sfd,tok)!=1 )
+return( -1 );
+ if ( strcmp(tok,"SplineFontDB:")!=0 )
+return( -1 );
+ if ( getreal(sfd,&dval)!=1 )
+return( -1 );
+ /* We don't yet generate version 4 of sfd. It will contain backslash */
+ /* newline in the middle of very long lines. I've put in code to parse */
+ /* this sequence, but I don't yet generate it. I want the parser to */
+ /* perculate through to users before I introduce the new format so there */
+ /* will be fewer complaints when it happens */
+ // MIQ: getreal() can give some funky rounding errors it seems
+ if ( dval!=2.0 && dval!=3.0
+ && !(dval > 3.09 && dval <= 3.11)
+ && dval!=4.0 )
+ {
+ LogError("Bad SFD Version number %.1f", dval );
+return( -1 );
+ }
+ ch = nlgetc(sfd); ungetc(ch,sfd);
+ if ( ch!='\r' && ch!='\n' )
+return( -1 );
+
+return( dval );
+}
+
+static SplineFont *SFD_Read(char *filename,FILE *sfd, int fromdir) {
+ SplineFont *sf=NULL;
+ char tok[2000];
+ double version;
+
+ if ( sfd==NULL ) {
+ if ( fromdir ) {
+ snprintf(tok,sizeof(tok),"%s/" FONT_PROPS, filename );
+ sfd = fopen(tok,"r");
+ } else
+ sfd = fopen(filename,"r");
+ }
+ if ( sfd==NULL )
+return( NULL );
+ ff_locale_t tmplocale, oldlocale; // Declare temporary locale storage.
+ switch_to_c_locale(&tmplocale, &oldlocale); // Switch to the C locale temporarily and cache the old locale.
+ ff_progress_change_stages(2);
+ if ( (version = SFDStartsCorrectly(sfd,tok))!=-1 )
+ sf = SFD_GetFont(sfd,NULL,tok,fromdir,filename,version);
+ switch_to_old_locale(&tmplocale, &oldlocale); // Switch to the cached locale.
+ if ( sf!=NULL ) {
+ sf->filename = copy(filename);
+ if ( sf->mm!=NULL ) {
+ int i;
+ for ( i=0; i<sf->mm->instance_count; ++i )
+ sf->mm->instances[i]->filename = copy(filename);
+ }
+ }
+ fclose(sfd);
+return( sf );
+}
+
+SplineFont *SFDRead(char *filename) {
+return( SFD_Read(filename,NULL,false));
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.c b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.c
new file mode 100644
index 0000000000..159748302a
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.c
@@ -0,0 +1,164 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fontforge.h"
+#include "sfd1.h"
+
+/* This file contains the routines needed to process an old style sfd file and*/
+/* convert it into the new format */
+
+static void SFGuessScriptList(SplineFont1 *sf) {
+ uint32 scripts[32], script;
+ int i, scnt=0, j;
+
+ for ( i=0; i<sf->sf.glyphcnt; ++i ) if ( sf->sf.glyphs[i]!=NULL ) {
+ script = SCScriptFromUnicode(sf->sf.glyphs[i]);
+ if ( script!=0 && script!=DEFAULT_SCRIPT ) {
+ for ( j=scnt-1; j>=0 ; --j )
+ if ( scripts[j]==script )
+ break;
+ if ( j<0 ) {
+ scripts[scnt++] = script;
+ if ( scnt>=32 )
+ break;
+ }
+ }
+ }
+ if ( scnt==0 )
+ scripts[scnt++] = CHR('l','a','t','n');
+
+ /* order scripts */
+ for ( i=0; i<scnt-1; ++i ) for ( j=i+1; j<scnt; ++j ) {
+ if ( scripts[i]>scripts[j] ) {
+ script = scripts[i];
+ scripts[i] = scripts[j];
+ scripts[j] = script;
+ }
+ }
+
+ if ( sf->sf.cidmaster ) sf = (SplineFont1 *) sf->sf.cidmaster;
+ else if ( sf->sf.mm!=NULL ) sf=(SplineFont1 *) sf->sf.mm->normal;
+ if ( sf->script_lang!=NULL )
+return;
+ sf->script_lang = calloc(2,sizeof(struct script_record *));
+ sf->script_lang[0] = calloc(scnt+1,sizeof(struct script_record));
+ sf->sli_cnt = 1;
+ for ( j=0; j<scnt; ++j ) {
+ sf->script_lang[0][j].script = scripts[j];
+ sf->script_lang[0][j].langs = malloc(2*sizeof(uint32));
+ sf->script_lang[0][j].langs[0] = DEFAULT_LANG;
+ sf->script_lang[0][j].langs[1] = 0;
+ }
+ sf->script_lang[1] = NULL;
+}
+
+static int SLContains(struct script_record *sr, uint32 script, uint32 lang) {
+ int i, j;
+
+ if ( script==DEFAULT_SCRIPT || script == 0 )
+return( true );
+ for ( i=0; sr[i].script!=0; ++i ) {
+ if ( sr[i].script==script ) {
+ if ( lang==0 )
+return( true );
+ for ( j=0; sr[i].langs[j]!=0; ++j )
+ if ( sr[i].langs[j]==lang )
+return( true );
+
+return( false ); /* this script entry didn't contain the language. won't be any other scripts to check */
+ }
+ }
+return( false ); /* Never found script */
+}
+
+static int SFAddScriptLangIndex(SplineFont *_sf,uint32 script,uint32 lang) {
+ int i;
+ SplineFont1 *sf;
+
+ if ( _sf->cidmaster ) _sf = _sf->cidmaster;
+ else if ( _sf->mm!=NULL ) _sf=_sf->mm->normal;
+
+ if ( _sf->sfd_version>=2 )
+ IError( "SFFindBiggestScriptLangIndex called with bad version number.\n" );
+
+ sf = (SplineFont1 *) _sf;
+
+ if ( script==0 ) script=DEFAULT_SCRIPT;
+ if ( lang==0 ) lang=DEFAULT_LANG;
+ if ( sf->script_lang==NULL )
+ sf->script_lang = calloc(2,sizeof(struct script_record *));
+ for ( i=0; sf->script_lang[i]!=NULL; ++i ) {
+ if ( sf->script_lang[i][0].script==script && sf->script_lang[i][1].script==0 &&
+ sf->script_lang[i][0].langs[0]==lang &&
+ sf->script_lang[i][0].langs[1]==0 )
+return( i );
+ }
+ sf->script_lang = realloc(sf->script_lang,(i+2)*sizeof(struct script_record *));
+ sf->script_lang[i] = calloc(2,sizeof(struct script_record));
+ sf->script_lang[i][0].script = script;
+ sf->script_lang[i][0].langs = malloc(2*sizeof(uint32));
+ sf->script_lang[i][0].langs[0] = lang;
+ sf->script_lang[i][0].langs[1] = 0;
+ sf->script_lang[i+1] = NULL;
+ sf->sli_cnt = i+1;
+return( i );
+}
+
+static int SLCount(struct script_record *sr) {
+ int sl_cnt = 0;
+ int i,j;
+
+ for ( i=0; sr[i].script!=0; ++i ) {
+ for ( j=0; sr[i].langs[j]!=0; ++j )
+ ++sl_cnt;
+ }
+return( sl_cnt );
+}
+
+int SFFindBiggestScriptLangIndex(SplineFont *_sf,uint32 script,uint32 lang) {
+ int i, best_sli= -1, best_cnt= -1, cnt;
+ SplineFont1 *sf = (SplineFont1 *) _sf;
+
+ if ( _sf->sfd_version>=2 )
+ IError( "SFFindBiggestScriptLangIndex called with bad version number.\n" );
+
+ if ( sf->script_lang==NULL )
+ SFGuessScriptList(sf);
+ for ( i=0; sf->script_lang[i]!=NULL; ++i ) {
+ if ( SLContains(sf->script_lang[i],script,lang)) {
+ cnt = SLCount(sf->script_lang[i]);
+ if ( cnt>best_cnt ) {
+ best_sli = i;
+ best_cnt = cnt;
+ }
+ }
+ }
+ if ( best_sli==-1 )
+return( SFAddScriptLangIndex(_sf,script,lang) );
+
+return( best_sli );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.h b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.h
new file mode 100644
index 0000000000..a3ce6aa5ec
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/sfd1.h
@@ -0,0 +1,122 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _SFD1_H
+#define _SFD1_H
+/* This file contains the data structures needed to read in an old sfd file */
+/* features and lookups and scripts are handled differently. That means that */
+/* the KernPair, KernClass, PST, FPST, AnchorClass, StateMachine data structures */
+/* are organized differently. Also we've got a script language list which */
+/* doesn't exist in the new format and we don't have OTLookup */
+
+#include "splinefont.h"
+
+#define SLI_UNKNOWN 0xffff
+#define SLI_NESTED 0xfffe
+
+typedef struct anchorclass1 {
+ AnchorClass ac;
+ uint32 feature_tag;
+ uint16 script_lang_index;
+ uint16 flags;
+ uint16 merge_with;
+ uint8 has_bases;
+ uint8 has_ligatures;
+} AnchorClass1;
+
+typedef struct kernpair1 {
+ KernPair kp;
+ uint16 sli, flags;
+} KernPair1;
+
+typedef struct kernclass1 {
+ KernClass kc;
+ uint16 sli;
+ uint16 flags;
+} KernClass1;
+
+typedef struct generic_pst1 {
+ PST pst;
+ uint8 macfeature; /* tag should be interpretted as <feature,setting> rather than 'abcd' */
+ uint16 flags;
+ uint16 script_lang_index; /* 0xffff means none */
+ uint32 tag;
+} PST1;
+
+typedef struct generic_fpst1 {
+ FPST fpst;
+ uint16 script_lang_index;
+ uint16 flags;
+ uint32 tag;
+} FPST1;
+
+typedef struct generic_asm1 { /* Apple State Machine */
+ ASM sm;
+ uint16 feature, setting;
+ uint32 opentype_tag; /* If converted from opentype */
+} ASM1;
+
+struct table_ordering {
+ uint32 table_tag;
+ uint32 *ordered_features;
+ struct table_ordering *next;
+};
+
+struct script_record {
+ uint32 script;
+ uint32 *langs;
+};
+
+struct tagtype {
+ enum possub_type type;
+ uint32 tag;
+};
+
+struct gentagtype {
+ uint16 tt_cur, tt_max;
+ struct tagtype *tagtype;
+};
+
+typedef struct splinefont1 {
+ SplineFont sf;
+
+ struct table_ordering *orders;
+
+ /* Any GPOS/GSUB entry (PST, AnchorClass, kerns, FPST */
+ /* Has an entry saying what scripts/languages it should appear it */
+ /* Things like fractions will appear in almost all possible script/lang */
+ /* combinations, while alphabetic ligatures will only live in one script */
+ /* Rather than store the complete list of possibilities in each PST we */
+ /* store all choices used here, and just store an index into this list */
+ /* in the PST. All lists are terminated by a 0 entry */
+ struct script_record **script_lang;
+ int16 sli_cnt;
+
+ struct gentagtype gentags;
+} SplineFont1;
+
+extern int SFFindBiggestScriptLangIndex(SplineFont *_sf,uint32 script,uint32 lang);
+#endif /* _SFD1_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinechar.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splinechar.c
new file mode 100644
index 0000000000..41cbc0745d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinechar.c
@@ -0,0 +1,328 @@
+/* -*- coding: utf-8 -*- */
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fontforgevw.h"
+# include <utype.h>
+
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+int adjustwidth = true;
+
+RefChar *HasUseMyMetrics(SplineChar *sc,int layer) {
+ RefChar *r;
+
+ if ( layer==ly_grid ) layer = ly_fore;
+
+ for ( r=sc->layers[layer].refs; r!=NULL; r=r->next )
+ if ( r->use_my_metrics )
+return( r );
+
+return( NULL );
+}
+
+/* if they changed the width, then change the width on all bitmap chars of */
+/* ours, and if we are a letter, then change the width on all chars linked */
+/* to us which had the same width that we used to have (so if we change the */
+/* width of A, we'll also change that of À and Ä and ... */
+void SCSynchronizeWidth(SplineChar *sc,real newwidth, real oldwidth) {
+ struct splinecharlist *dlist;
+ RefChar *r = HasUseMyMetrics(sc,ly_fore);
+ int isprobablybase;
+
+ sc->widthset = true;
+ if( r!=NULL ) {
+ if ( oldwidth==r->sc->width ) {
+ sc->width = r->sc->width;
+return;
+ }
+ newwidth = r->sc->width;
+ }
+ if ( newwidth==oldwidth )
+return;
+ sc->width = newwidth;
+ if ( !adjustwidth )
+return;
+
+ isprobablybase = true;
+ if ( sc->unicodeenc==-1 || sc->unicodeenc>=0x10000 ||
+ !isalpha(sc->unicodeenc) || iscombining(sc->unicodeenc))
+ isprobablybase = false;
+
+ for ( dlist=sc->dependents; dlist!=NULL; dlist=dlist->next ) {
+ RefChar *metrics = HasUseMyMetrics(dlist->sc,ly_fore);
+ if ( metrics!=NULL && metrics->sc!=sc )
+ continue;
+ else if ( metrics==NULL && !isprobablybase )
+ continue;
+ if ( dlist->sc->width==oldwidth &&
+ (metrics!=NULL)) {
+ SCSynchronizeWidth(dlist->sc,newwidth,oldwidth);
+ if ( !dlist->sc->changed ) {
+ dlist->sc->changed = true;
+ }
+ }
+ }
+}
+
+static int _SCRefNumberPoints2(SplineSet **_rss,SplineChar *sc,int pnum,int layer) {
+ SplineSet *ss, *rss = *_rss;
+ SplinePoint *sp, *rsp;
+ RefChar *r;
+ int starts_with_cp, startcnt;
+
+ for ( ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next, rss=rss->next ) {
+ if ( rss==NULL ) /* Can't happen */
+ break;
+ starts_with_cp = !ss->first->noprevcp &&
+ ((ss->first->ttfindex == pnum+1 && ss->first->prev!=NULL &&
+ ss->first->prev->from->nextcpindex==pnum ) ||
+ ((ss->first->ttfindex==0xffff || SPInterpolate( ss->first ))));
+ startcnt = pnum;
+ if ( starts_with_cp ) ++pnum;
+ for ( sp = ss->first, rsp=rss->first; ; ) {
+ if ( sp->ttfindex==0xffff || SPInterpolate( sp ))
+ rsp->ttfindex = 0xffff;
+ else
+ rsp->ttfindex = pnum++;
+ if ( sp->next==NULL )
+ break;
+ if ( sp->next!=NULL && sp->next->to == ss->first ) {
+ if ( sp->nonextcp )
+ rsp->nextcpindex = 0xffff;
+ else if ( starts_with_cp )
+ rsp->nextcpindex = startcnt;
+ else
+ rsp->nextcpindex = pnum++;
+ break;
+ }
+ if ( sp->nonextcp )
+ rsp->nextcpindex = 0xffff;
+ else
+ rsp->nextcpindex = pnum++;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ rsp = rsp->next->to;
+ }
+ }
+
+ *_rss = rss;
+ for ( r = sc->layers[layer].refs; r!=NULL; r=r->next )
+ pnum = _SCRefNumberPoints2(_rss,r->sc,pnum,layer);
+return( pnum );
+}
+
+static int SCRefNumberPoints2(RefChar *ref,int pnum,int layer) {
+ SplineSet *rss;
+
+ rss = ref->layers[0].splines;
+return( _SCRefNumberPoints2(&rss,ref->sc,pnum,layer));
+}
+
+int SSTtfNumberPoints(SplineSet *ss) {
+ int pnum=0;
+ SplinePoint *sp;
+ int starts_with_cp;
+
+ for ( ; ss!=NULL; ss=ss->next ) {
+ starts_with_cp = !ss->first->noprevcp &&
+ ((ss->first->ttfindex == pnum+1 && ss->first->prev!=NULL &&
+ ss->first->prev->from->nextcpindex==pnum ) ||
+ SPInterpolate( ss->first ));
+ if ( starts_with_cp && ss->first->prev!=NULL )
+ ss->first->prev->from->nextcpindex = pnum++;
+ for ( sp=ss->first; ; ) {
+ if ( SPInterpolate(sp) )
+ sp->ttfindex = 0xffff;
+ else
+ sp->ttfindex = pnum++;
+ if ( sp->nonextcp && sp->nextcpindex!=pnum )
+ sp->nextcpindex = 0xffff;
+ else if ( !starts_with_cp || (sp->next!=NULL && sp->next->to!=ss->first) )
+ sp->nextcpindex = pnum++;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+return( pnum );
+}
+
+static int SSPsNumberPoints(SplineChar *sc, SplineSet *splines,int pnum) {
+ SplineSet *ss;
+ SplinePoint *sp;
+
+ for ( ss = splines; ss!=NULL; ss=ss->next ) {
+ for ( sp=ss->first; ; ) {
+ sp->ttfindex = pnum++;
+ sp->nextcpindex = 0xffff;
+ if ( sc->numberpointsbackards ) {
+ if ( sp->prev==NULL )
+ break;
+ if ( !sp->noprevcp || !sp->prev->from->nonextcp )
+ pnum += 2;
+ sp = sp->prev->from;
+ } else {
+ if ( sp->next==NULL )
+ break;
+ if ( !sp->nonextcp || !sp->next->to->noprevcp )
+ pnum += 2;
+ sp = sp->next->to;
+ }
+ if ( sp==ss->first )
+ break;
+ }
+ }
+return( pnum );
+}
+
+int SCNumberPoints(SplineChar *sc,int layer) {
+ int pnum=0;
+ SplineSet *ss;
+ SplinePoint *sp;
+ RefChar *ref;
+
+ if ( layer<0 || layer>=sc->layer_cnt )
+ return( pnum );
+
+ if ( sc->layers[layer].order2 ) { /* TrueType and its complexities. I ignore svg here */
+ if ( sc->layers[layer].refs!=NULL ) {
+ /* if there are references there can't be splines. So if we've got*/
+ /* splines mark all point numbers on them as meaningless */
+ for ( ss = sc->layers[layer].splines; ss!=NULL; ss=ss->next ) {
+ for ( sp=ss->first; ; ) {
+ sp->ttfindex = 0xfffe;
+ if ( !sp->nonextcp )
+ sp->nextcpindex = 0xfffe;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next )
+ pnum = SCRefNumberPoints2(ref,pnum,layer);
+ } else {
+ pnum = SSTtfNumberPoints(sc->layers[layer].splines);
+ }
+ } else { /* cubic (PostScript/SVG) splines */
+ int first, last;
+ if ( sc->parent->multilayer ) {
+ first = ly_fore;
+ last = sc->layer_cnt-1;
+ } else
+ first = last = layer;
+ for ( layer=first; layer<=last; ++layer ) {
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next )
+ pnum = SSPsNumberPoints(sc,ref->layers[0].splines,pnum);
+ pnum = SSPsNumberPoints(sc,sc->layers[layer].splines,pnum);
+ }
+ }
+return( pnum );
+}
+
+int SCPointsNumberedProperly(SplineChar *sc,int layer) {
+ int pnum=0, skipit;
+ SplineSet *ss;
+ SplinePoint *sp;
+ int starts_with_cp;
+ int start_pnum;
+
+ if ( sc->layers[layer].splines!=NULL &&
+ sc->layers[layer].refs!=NULL )
+return( false ); /* TrueType can't represent this, so always remove instructions. They can't be meaningful */
+
+ for ( ss = sc->layers[layer].splines; ss!=NULL; ss=ss->next ) {
+ starts_with_cp = (ss->first->ttfindex == pnum+1 || ss->first->ttfindex==0xffff) &&
+ !ss->first->noprevcp;
+ start_pnum = pnum;
+ if ( starts_with_cp ) ++pnum;
+ for ( sp=ss->first; ; ) {
+ skipit = SPInterpolate(sp);
+ if ( sp->nonextcp || sp->noprevcp ) skipit = false;
+ if ( sp->ttfindex==0xffff && skipit )
+ /* Doesn't count */;
+ else if ( sp->ttfindex!=pnum )
+return( false );
+ else
+ ++pnum;
+ if ( sp->nonextcp && sp->nextcpindex==0xffff )
+ /* Doesn't count */;
+ else if ( sp->nextcpindex==pnum )
+ ++pnum;
+ else if ( sp->nextcpindex==start_pnum && starts_with_cp &&
+ (sp->next!=NULL && sp->next->to==ss->first) )
+ /* Ok */;
+ else
+return( false );
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ /* if ( starts_with_cp ) --pnum; */
+ }
+return( true );
+}
+
+void AltUniAdd(SplineChar *sc,int uni) {
+ struct altuni *altuni;
+
+ if ( sc!=NULL && uni!=-1 && uni!=sc->unicodeenc ) {
+ for ( altuni = sc->altuni; altuni!=NULL && (altuni->unienc!=uni ||
+ altuni->vs!=-1 ||
+ altuni->fid); altuni=altuni->next );
+ if ( altuni==NULL ) {
+ altuni = chunkalloc(sizeof(struct altuni));
+ altuni->next = sc->altuni;
+ sc->altuni = altuni;
+ altuni->unienc = uni;
+ altuni->vs = -1;
+ altuni->fid = 0;
+ }
+ }
+}
+
+void AltUniAdd_DontCheckDups(SplineChar *sc,int uni) {
+ struct altuni *altuni;
+
+ if ( sc!=NULL && uni!=-1 && uni!=sc->unicodeenc ) {
+ altuni = chunkalloc(sizeof(struct altuni));
+ altuni->next = sc->altuni;
+ sc->altuni = altuni;
+ altuni->unienc = uni;
+ altuni->vs = -1;
+ altuni->fid = 0;
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.c
new file mode 100644
index 0000000000..cffba73ccf
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.c
@@ -0,0 +1,504 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "fontforgevw.h"
+
+/* Use URW 4 letter abbreviations */
+const char *knownweights[] = { "Demi", "Bold", "Regu", "Medi", "Book", "Thin",
+ "Ligh", "Heav", "Blac", "Ultr", "Nord", "Norm", "Gras", "Stan", "Halb",
+ "Fett", "Mage", "Mitt", "Buch", NULL };
+const char *realweights[] = { "Demi", "Bold", "Regular", "Medium", "Book", "Thin",
+ "Light", "Heavy", "Black", "Ultra", "Nord", "Normal", "Gras", "Standard", "Halbfett",
+ "Fett", "Mager", "Mittel", "Buchschrift", NULL};
+
+static const char *modifierlist[] = { "Ital", "Obli", "Kursive", "Cursive", "Slanted",
+ "Expa", "Cond", NULL };
+static const char *modifierlistfull[] = { "Italic", "Oblique", "Kursive", "Cursive", "Slanted",
+ "Expanded", "Condensed", NULL };
+static const char **mods[] = { knownweights, modifierlist, NULL };
+static const char **fullmods[] = { realweights, modifierlistfull, NULL };
+
+const char *_GetModifiers(const char *fontname, const char *familyname, const char *weight) {
+ const char *pt, *fpt;
+ static char space[20];
+ int i, j;
+
+ /* URW fontnames don't match the familyname */
+ /* "NimbusSanL-Regu" vs "Nimbus Sans L" (note "San" vs "Sans") */
+ /* so look for a '-' if there is one and use that as the break point... */
+
+ if ( (fpt=strchr(fontname,'-'))!=NULL ) {
+ ++fpt;
+ if ( *fpt=='\0' )
+ fpt = NULL;
+ } else if ( familyname!=NULL ) {
+ for ( pt = fontname, fpt=familyname; *fpt!='\0' && *pt!='\0'; ) {
+ if ( *fpt == *pt ) {
+ ++fpt; ++pt;
+ } else if ( *fpt==' ' )
+ ++fpt;
+ else if ( *pt==' ' )
+ ++pt;
+ else if ( *fpt=='a' || *fpt=='e' || *fpt=='i' || *fpt=='o' || *fpt=='u' )
+ ++fpt; /* allow vowels to be omitted from family when in fontname */
+ else
+ break;
+ }
+ if ( *fpt=='\0' && *pt!='\0' )
+ fpt = pt;
+ else
+ fpt = NULL;
+ }
+
+ if ( fpt == NULL ) {
+ for ( i=0; mods[i]!=NULL; ++i ) for ( j=0; mods[i][j]!=NULL; ++j ) {
+ pt = strstr(fontname,mods[i][j]);
+ if ( pt!=NULL && (fpt==NULL || pt<fpt))
+ fpt = pt;
+ }
+ }
+ if ( fpt!=NULL ) {
+ for ( i=0; mods[i]!=NULL; ++i ) for ( j=0; mods[i][j]!=NULL; ++j ) {
+ if ( strcmp(fpt,mods[i][j])==0 ) {
+ strncpy(space,fullmods[i][j],sizeof(space)-1);
+return(space);
+ }
+ }
+ if ( strcmp(fpt,"BoldItal")==0 )
+return( "BoldItalic" );
+ else if ( strcmp(fpt,"BoldObli")==0 )
+return( "BoldOblique" );
+
+return( fpt );
+ }
+
+return( weight==NULL || *weight=='\0' ? "Regular": weight );
+}
+
+const char *SFGetModifiers(const SplineFont *sf) {
+return( _GetModifiers(sf->fontname,sf->familyname,sf->weight));
+}
+
+enum flatness { mt_flat, mt_round, mt_pointy, mt_unknown };
+
+static bigreal SPLMaxHeight(SplineSet *spl, enum flatness *isflat) {
+ enum flatness f = mt_unknown;
+ bigreal max = -1.0e23;
+ Spline *s, *first;
+ extended ts[2];
+ int i;
+
+ for ( ; spl!=NULL; spl=spl->next ) {
+ first = NULL;
+ for ( s = spl->first->next; s!=first && s!=NULL; s=s->to->next ) {
+ if ( first==NULL ) first = s;
+ if ( s->from->me.y >= max ||
+ s->to->me.y >= max ||
+ s->from->nextcp.y > max ||
+ s->to->prevcp.y > max ) {
+ if ( !s->knownlinear ) {
+ if ( s->from->me.y > max ) {
+ f = mt_round;
+ max = s->from->me.y;
+ }
+ if ( s->to->me.y > max ) {
+ f = mt_round;
+ max = s->to->me.y;
+ }
+ SplineFindExtrema(&s->splines[1],&ts[0],&ts[1]);
+ for ( i=0; i<2; ++i ) if ( ts[i]!=-1 ) {
+ bigreal y = ((s->splines[1].a*ts[i]+s->splines[1].b)*ts[i]+s->splines[1].c)*ts[i]+s->splines[1].d;
+ if ( y>max ) {
+ f = mt_round;
+ max = y;
+ }
+ }
+ } else if ( s->from->me.y == s->to->me.y ) {
+ if ( s->from->me.y >= max ) {
+ max = s->from->me.y;
+ f = mt_flat;
+ }
+ } else {
+ if ( s->from->me.y > max ) {
+ f = mt_pointy;
+ max = s->from->me.y;
+ }
+ if ( s->to->me.y > max ) {
+ f = mt_pointy;
+ max = s->to->me.y;
+ }
+ }
+ }
+ }
+ }
+ *isflat = f;
+return( max );
+}
+
+static bigreal SCMaxHeight(SplineChar *sc, int layer, enum flatness *isflat) {
+ /* Find the max height of this layer of the glyph. Also find whether that */
+ /* max is flat (as in "z", curved as in "o" or pointy as in "A") */
+ enum flatness f = mt_unknown, curf;
+ bigreal max = -1.0e23, test;
+ RefChar *r;
+
+ max = SPLMaxHeight(sc->layers[layer].splines,&curf);
+ f = curf;
+ for ( r = sc->layers[layer].refs; r!=NULL; r=r->next ) {
+ test = SPLMaxHeight(r->layers[0].splines,&curf);
+ if ( test>max || (test==max && curf==mt_flat)) {
+ max = test;
+ f = curf;
+ }
+ }
+ *isflat = f;
+return( max );
+}
+
+static bigreal SPLMinHeight(SplineSet *spl, enum flatness *isflat) {
+ enum flatness f = mt_unknown;
+ bigreal min = 1.0e23;
+ Spline *s, *first;
+ extended ts[2];
+ int i;
+
+ for ( ; spl!=NULL; spl=spl->next ) {
+ first = NULL;
+ for ( s = spl->first->next; s!=first && s!=NULL; s=s->to->next ) {
+ if ( first==NULL ) first = s;
+ if ( s->from->me.y <= min ||
+ s->to->me.y <= min ||
+ s->from->nextcp.y < min ||
+ s->to->prevcp.y < min ) {
+ if ( !s->knownlinear ) {
+ if ( s->from->me.y < min ) {
+ f = mt_round;
+ min = s->from->me.y;
+ }
+ if ( s->to->me.y < min ) {
+ f = mt_round;
+ min = s->to->me.y;
+ }
+ SplineFindExtrema(&s->splines[1],&ts[0],&ts[1]);
+ for ( i=0; i<2; ++i ) if ( ts[i]!=-1 ) {
+ bigreal y = ((s->splines[1].a*ts[i]+s->splines[1].b)*ts[i]+s->splines[1].c)*ts[i]+s->splines[1].d;
+ if ( y<min ) {
+ f = mt_round;
+ min = y;
+ }
+ }
+ } else if ( s->from->me.y == s->to->me.y ) {
+ if ( s->from->me.y <= min ) {
+ min = s->from->me.y;
+ f = mt_flat;
+ }
+ } else {
+ if ( s->from->me.y < min ) {
+ f = mt_pointy;
+ min = s->from->me.y;
+ }
+ if ( s->to->me.y < min ) {
+ f = mt_pointy;
+ min = s->to->me.y;
+ }
+ }
+ }
+ }
+ }
+ *isflat = f;
+return( min );
+}
+
+static bigreal SCMinHeight(SplineChar *sc, int layer, enum flatness *isflat) {
+ /* Find the min height of this layer of the glyph. Also find whether that */
+ /* min is flat (as in "z", curved as in "o" or pointy as in "A") */
+ enum flatness f = mt_unknown, curf;
+ bigreal min = 1.0e23, test;
+ RefChar *r;
+
+ min = SPLMinHeight(sc->layers[layer].splines,&curf);
+ f = curf;
+ for ( r = sc->layers[layer].refs; r!=NULL; r=r->next ) {
+ test = SPLMinHeight(r->layers[0].splines,&curf);
+ if ( test<min || (test==min && curf==mt_flat)) {
+ min = test;
+ f = curf;
+ }
+ }
+ *isflat = f;
+return( min );
+}
+
+#define RANGE 0x40ffffff
+
+struct dimcnt { bigreal pos; int cnt; };
+
+static int dclist_insert( struct dimcnt *arr, int cnt, bigreal val ) {
+ int i;
+
+ for ( i=0; i<cnt; ++i ) {
+ if ( arr[i].pos == val ) {
+ ++arr[i].cnt;
+return( cnt );
+ }
+ }
+ arr[i].pos = val;
+ arr[i].cnt = 1;
+return( i+1 );
+}
+
+static bigreal SFStandardHeight(SplineFont *sf, int layer, int do_max, unichar_t *list) {
+ struct dimcnt flats[200], curves[200];
+ bigreal test;
+ enum flatness curf;
+ int fcnt=0, ccnt=0, cnt, tot, i, useit;
+ unichar_t ch, top;
+ bigreal result, bestheight, bestdiff, diff, val;
+ char *blues, *end;
+
+ while ( *list ) {
+ ch = top = *list;
+ if ( list[1]==RANGE && list[2]!=0 ) {
+ list += 2;
+ top = *list;
+ }
+ for ( ; ch<=top; ++ch ) {
+ SplineChar *sc = SFGetChar(sf,ch,NULL);
+ if ( sc!=NULL ) {
+ if ( do_max )
+ test = SCMaxHeight(sc, layer, &curf );
+ else
+ test = SCMinHeight(sc, layer, &curf );
+ if ( curf==mt_flat )
+ fcnt = dclist_insert(flats, fcnt, test);
+ else if ( curf!=mt_unknown )
+ ccnt = dclist_insert(curves, ccnt, test);
+ }
+ }
+ ++list;
+ }
+
+ /* All flat surfaces at tops of glyphs are at the same level */
+ if ( fcnt==1 )
+ result = flats[0].pos;
+ else if ( fcnt>1 ) {
+ cnt = 0;
+ for ( i=0; i<fcnt; ++i ) {
+ if ( flats[i].cnt>cnt )
+ cnt = flats[i].cnt;
+ }
+ test = 0;
+ tot = 0;
+ /* find the mode. If multiple values have the same high count, average them */
+ for ( i=0; i<fcnt; ++i ) {
+ if ( flats[i].cnt==cnt ) {
+ test += flats[i].pos;
+ ++tot;
+ }
+ }
+ result = test/tot;
+ } else if ( ccnt==0 )
+return( do_max ? -1e23 : 1e23 ); /* We didn't find any glyphs */
+ else {
+ /* Italic fonts will often have no flat surfaces for x-height just wavies */
+ test = 0;
+ tot = 0;
+ /* find the mean */
+ for ( i=0; i<ccnt; ++i ) {
+ test += curves[i].pos;
+ ++tot;
+ }
+ result = test/tot;
+ }
+
+ /* Do we have a BlueValues entry? */
+ /* If so, snap height to the closest alignment zone (bottom of the zone) */
+ if ( sf->private!=NULL && (blues = PSDictHasEntry(sf->private,do_max ? "BlueValues" : "OtherBlues"))!=NULL ) {
+ while ( *blues==' ' || *blues=='[' ) ++blues;
+ /* Must get at least this close, else we'll just use what we found */
+ bestheight = result; bestdiff = (sf->ascent+sf->descent)/100.0;
+ useit = true;
+ while ( *blues!='\0' && *blues!=']' ) {
+ val = strtod(blues,&end);
+ if ( blues==end )
+ break;
+ blues = end;
+ while ( *blues==' ' ) ++blues;
+ if ( useit ) {
+ if ( (diff = val-result)<0 ) diff = -diff;
+ if ( diff<bestdiff ) {
+ bestheight = val;
+ bestdiff = diff;
+ }
+ }
+ useit = !useit; /* Only interested in every other BV entry */
+ }
+ result = bestheight;
+ }
+return( result );
+}
+
+static unichar_t capheight_str[] = { 'A', RANGE, 'Z',
+ 0x391, RANGE, 0x3a9,
+ 0x402, 0x404, 0x405, 0x406, 0x408, RANGE, 0x40b, 0x40f, RANGE, 0x418, 0x41a, 0x42f,
+ 0 };
+static unichar_t xheight_str[] = { 'a', 'c', 'e', 'g', 'm', 'n', 'o', 'p', 'q', 'r', 's', 'u', 'v', 'w', 'x', 'y', 'z', 0x131,
+ 0x3b3, 0x3b9, 0x3ba, 0x3bc, 0x3bd, 0x3c0, 0x3c3, 0x3c4, 0x3c5, 0x3c7, 0x3c8, 0x3c9,
+ 0x432, 0x433, 0x438, 0x43a, RANGE, 0x43f, 0x442, 0x443, 0x445, 0x44c,0x44f, 0x459, 0x45a,
+ 0 };
+
+bigreal SFCapHeight(SplineFont *sf, int layer, int return_error) {
+ bigreal result = SFStandardHeight(sf,layer,true,capheight_str);
+
+ if ( result==-1e23 && !return_error )
+ result = (8*sf->ascent)/10;
+return( result );
+}
+
+bigreal SFXHeight(SplineFont *sf, int layer, int return_error) {
+ bigreal result = SFStandardHeight(sf,layer,true,xheight_str);
+
+ if ( result==-1e23 && !return_error )
+ result = (6*sf->ascent)/10;
+return( result );
+}
+
+void SPLFirstVisitSplines( SplinePoint* splfirst, SPLFirstVisitSplinesVisitor f, void* udata )
+{
+ Spline *spline=0;
+ Spline *first=0;
+ Spline *next=0;
+
+ if ( splfirst!=NULL )
+ {
+ first = NULL;
+ for ( spline = splfirst->next; spline!=NULL && spline!=first; spline = next )
+ {
+ next = spline->to->next;
+
+ // callback
+ f( splfirst, spline, udata );
+
+ if ( first==NULL )
+ {
+ first = spline;
+ }
+ }
+ }
+}
+
+typedef struct SPLFirstVisitorFoundSoughtXYDataS
+{
+ int use_x;
+ int use_y;
+ real x;
+ real y;
+
+ // outputs
+ int found;
+ Spline* spline;
+ SplinePoint* sp;
+
+} SPLFirstVisitorFoundSoughtXYData;
+
+static void SPLFirstVisitorFoundSoughtXY(SplinePoint* splfirst, Spline* spline, void* udata )
+{
+ SPLFirstVisitorFoundSoughtXYData* d = (SPLFirstVisitorFoundSoughtXYData*)udata;
+ int found = 0;
+
+ if( d->found )
+ return;
+
+ // printf("SPLFirstVisitorFoundSoughtXY() %f %f %f\n", d->x, spline->from->me.x, spline->to->me.x );
+ if( d->use_x )
+ {
+ if( spline->from->me.x == d->x )
+ {
+ found = 1;
+ d->spline = spline;
+ d->sp = spline->from;
+ }
+
+ if( spline->to->me.x == d->x )
+ {
+ found = 1;
+ d->spline = spline;
+ d->sp = spline->to;
+ }
+ }
+ if( d->use_x && found && d->use_y )
+ {
+ if( d->sp->me.y != d->y )
+ {
+ found = 0;
+ }
+ }
+ else if( d->use_y )
+ {
+ if( spline->from->me.y == d->y )
+ {
+ found = 1;
+ d->spline = spline;
+ d->sp = spline->from;
+ }
+
+ if( spline->to->me.y == d->y )
+ {
+ found = 1;
+ d->spline = spline;
+ d->sp = spline->to;
+ }
+ }
+
+ if( found )
+ {
+ d->found = found;
+ d->spline = spline;
+ }
+ else
+ {
+ d->sp = 0;
+ }
+}
+
+SplinePoint* SplinePointListContainsPointAtX( SplinePointList* container, real x )
+{
+ SplinePointList *spl;
+ for ( spl = container; spl!=NULL; spl = spl->next )
+ {
+ SPLFirstVisitorFoundSoughtXYData d;
+ d.use_x = 1;
+ d.use_y = 0;
+ d.x = x;
+ d.y = 0;
+ d.found = 0;
+ SPLFirstVisitSplines( spl->first, SPLFirstVisitorFoundSoughtXY, &d );
+ if( d.found )
+ return d.sp;
+ }
+ return 0;
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.h b/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.h
new file mode 100644
index 0000000000..09945f456d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinefont.h
@@ -0,0 +1,2554 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _SPLINEFONT_H
+#define _SPLINEFONT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <basics.h>
+#include <dlist.h>
+#include "configure-fontforge.h"
+#include "fflocale.h"
+#ifdef HAVE_ICONV
+# include <iconv.h>
+#else
+# include <gwwiconv.h>
+#endif
+#include <gnetwork.h>
+
+#ifdef FONTFORGE_CONFIG_USE_DOUBLE
+# define real double
+# define bigreal double
+#else
+# define real float
+# define bigreal double
+#endif
+
+#define extended double
+ /* Solaris wants to define extended to be unsigned [3] unless we do this*/
+#define _EXTENDED
+
+#define CHR(ch1,ch2,ch3,ch4) (((ch1)<<24)|((ch2)<<16)|((ch3)<<8)|(ch4))
+
+#define MmMax 16 /* PS says at most this many instances for type1/2 mm fonts */
+#define AppleMmMax 26 /* Apple sort of has a limit of 4095, but we only support this many */
+
+typedef struct ipoint {
+ int x;
+ int y;
+} IPoint;
+
+#define IPOINT_EMPTY { 0, 0 }
+
+
+typedef struct basepoint {
+ real x;
+ real y;
+} BasePoint;
+
+#define BASEPOINT_EMPTY { (real)0.0, (real)0.0 }
+
+
+typedef struct dbasepoint {
+ bigreal x;
+ bigreal y;
+} DBasePoint;
+
+#define DBASEPOINT_EMPTY { (bigreal)0.0, (bigreal)0.0 }
+
+
+typedef struct tpoint {
+ real x;
+ real y;
+ real t;
+} TPoint;
+
+#define TPOINT_EMPTY { (real)0.0, (real)0.0, (real)0.0 }
+
+
+typedef struct dbounds {
+ real minx, maxx;
+ real miny, maxy;
+} DBounds;
+
+#define DBOUNDS_EMPTY { (real)0.0, (real)0.0, (real)0.0, (real)0.0 }
+
+
+typedef struct ibounds {
+ int minx, maxx;
+ int miny, maxy;
+} IBounds;
+
+#define IBOUNDS_EMPTY { 0, 0, 0, 0 }
+
+
+enum val_type { v_int, v_real, v_str, v_unicode, v_lval, v_arr, v_arrfree,
+ v_int32pt, v_int16pt, v_int8pt, v_void };
+
+typedef struct val {
+ enum val_type type;
+ union {
+ int ival;
+ real fval;
+ char *sval;
+ struct val *lval;
+ struct array *aval;
+ uint32 *u32ptval;
+ uint16 *u16ptval;
+ uint8 *u8ptval;
+ } u;
+} Val; /* Used by scripting */
+
+struct psdict {
+ int cnt; /* *key[0..cnt] and *values[0..cnt] currently available */
+ int next; /* **key[0..next] and **values[0..next] currently used */
+ char **keys;
+ char **values;
+};
+
+struct pschars {
+ int cnt, next;
+ char **keys;
+ uint8 **values;
+ int *lens;
+ int bias; /* for type2 strings */
+};
+
+enum linejoin {
+ lj_miter, /* Extend lines until they meet */
+ lj_round, /* circle centered at the join of expand radius */
+ lj_bevel, /* Straight line between the ends of next and prev */
+ lj_inherited
+};
+enum linecap {
+ lc_butt, /* equiv to lj_bevel, straight line extends from one side to other */
+ lc_round, /* semi-circle */
+ lc_square, /* Extend lines by radius, then join them */
+ lc_inherited
+};
+enum spreadMethod {
+ sm_pad, sm_reflect, sm_repeat
+};
+
+#define COLOR_INHERITED 0xfffffffe
+
+struct grad_stops {
+ real offset;
+ uint32 col;
+ real opacity;
+};
+
+struct gradient {
+ BasePoint start; /* focal of a radial gradient, start of a linear */
+ BasePoint stop; /* center of a radial gradient, end of a linear */
+ real radius; /* 0=>linear gradient, else radius of a radial gradient */
+ enum spreadMethod sm;
+ int stop_cnt;
+ struct grad_stops *grad_stops;
+};
+
+struct pattern {
+ char *pattern;
+ real width, height; /* Pattern is scaled to be repeated every width/height (in user coordinates) */
+ real transform[6];
+ /* Used during rasterization process */
+ struct bdfchar *pat;
+ real invtrans[6];
+ int bminx, bminy, bwidth, bheight; /* of the pattern at bdfchar scale */
+};
+
+struct brush {
+ uint32 col;
+ float opacity; /* number between [0,1], only for svg/pdf */
+ struct pattern *pattern; /* A pattern to be tiled */
+ struct gradient *gradient; /* A gradient fill */
+};
+#define WIDTH_INHERITED (-1)
+#define DASH_INHERITED 255 /* if the dashes[0]==0 && dashes[1]==DASH_INHERITED */
+#define DASH_MAX 8
+typedef unsigned char DashType;
+struct pen {
+ struct brush brush;
+ uint8 linejoin;
+ uint8 linecap;
+ float width;
+ real trans[4];
+ DashType dashes[DASH_MAX];
+};
+
+struct spline;
+enum si_type { si_std, si_caligraphic, si_poly, si_centerline };
+/* If you change this structure you may need to update MakeStrokeDlg */
+/* and cvpalettes.c both contain statically initialized StrokeInfos */
+typedef struct strokeinfo {
+ real radius; /* or major axis of pen */
+ enum linejoin join;
+ enum linecap cap;
+ enum si_type stroke_type;
+ unsigned int removeinternal: 1;
+ unsigned int removeexternal: 1;
+ unsigned int leave_users_center: 1; /* Don't move the pen so its center is at the origin */
+ real penangle;
+ real minorradius;
+ struct splinepointlist *poly;
+ real resolution;
+/* For freehand tool */
+ real radius2;
+ int pressure1, pressure2;
+/* End freehand tool */
+ void *data;
+ bigreal (*factor)(void *data,struct spline *spline,real t);
+} StrokeInfo;
+
+enum PolyType { Poly_Convex, Poly_Concave, Poly_PointOnEdge,
+ Poly_TooFewPoints, Poly_Line };
+
+
+enum overlap_type { over_remove, over_rmselected, over_intersect, over_intersel,
+ over_exclude, over_findinter, over_fisel };
+
+enum simpify_flags { sf_cleanup=-1, sf_normal=0, sf_ignoreslopes=1,
+ sf_ignoreextremum=2, sf_smoothcurves=4, sf_choosehv=8,
+ sf_forcelines=0x10, sf_nearlyhvlines=0x20,
+ sf_mergelines=0x40, sf_setstart2extremum=0x80,
+ sf_rmsingletonpoints=0x100 };
+
+struct hsquash { double lsb_percent, stem_percent, counter_percent, rsb_percent; };
+
+enum serif_type { srf_flat, srf_simpleslant, srf_complexslant };
+/* | | (flat) | | (simple) | | (complex) */
+/* | | | / | / */
+/* | | | / | / */
+/* +----+ |/ \ / */
+
+typedef struct italicinfo {
+ double italic_angle;
+ double xheight_percent;
+ struct hsquash lc, uc, neither;
+ enum serif_type secondary_serif;
+
+ unsigned int transform_bottom_serifs: 1;
+ unsigned int transform_top_xh_serifs: 1; /* Those at x-height */
+ unsigned int transform_top_as_serifs: 1; /* Those at ascender-height */
+ unsigned int transform_diagon_serifs: 1; /* Those at baseline/xheight */
+
+ unsigned int a_from_d: 1; /* replace the "a" glyph with the variant which looks like a "d" without an ascender */
+ /* When I say "f" I also mean "f_f" ligature, "longs", cyrillic phi and other things shaped like "f" */
+ unsigned int f_long_tail: 1; /* Some Italic fonts have the "f" grow an extension of the main stem below the baseline */
+ unsigned int f_rotate_top: 1; /* Most Italic fonts take the top curve of the "f", rotate it 180 and attach to the bottom */
+ unsigned int pq_deserif: 1; /* Remove a serif from the descender of p or q and replace with a secondary serif as above */
+
+ /* Unsupported */
+ /* e becomes rounder, cross bar slightly slanted */
+ /* g closed counter at bottom */
+ /* k closed counter at top */
+ /* v-z diagonal stems become more curvatious */
+
+ unsigned int cyrl_phi: 1; /* Gains an "f" like top, bottom treated like "f" */
+ unsigned int cyrl_i: 1; /* Turns into a latin u */
+ unsigned int cyrl_pi: 1; /* Turns into a latin n */
+ unsigned int cyrl_te: 1; /* Turns into a latin m */
+ unsigned int cyrl_sha: 1; /* Turns into a latin m rotated 180 */
+ unsigned int cyrl_dje: 1; /* Turns into a latin smallcaps T */
+ unsigned int cyrl_dzhe: 1; /* Turns into a latin u */
+ /* Is there a difference between dzhe and i? both look like u to me */
+
+ /* Unsupported */
+ /* u432 curved B */
+ /* u433 strange gamma */
+ /* u434 normal delta */
+ /* u436 */
+ /* u43b lambda ? */
+ /* u43c */
+ /* u446 */
+ /* u449 */
+ /* u449 */
+ /* u44a */
+
+/* This half of the structure gets filled in later - see ITALICINFO_REMAINDER */
+ double tan_ia;
+ double x_height;
+ double pq_depth;
+ double ascender_height;
+ double emsize;
+ int order2;
+ struct splinefont *sf;
+ int layer;
+ double serif_extent, serif_height;
+ struct splinepoint *f_start, *f_end; /* start has next pointing into the f head and up */
+ struct splinepoint *ff_start1, *ff_end1, *ff_start2, *ff_end2;
+ double f_height, ff_height;
+} ItalicInfo;
+
+#define ITALICINFO_REMAINDER 0, 0, 0, 0, 0, 0, NULL, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0
+
+
+typedef struct bluedata {
+ real xheight, xheighttop; /* height of "x" and "o" (u,v,w,x,y,z) */
+ real caph, caphtop; /* height of "I" and "O" */
+ real base, basebelow; /* bottom of "I" and "O" */
+ real ascent; /* height of "l" */
+ real descent; /* depth of "p" */
+ real numh, numhtop; /* height of "7" and "8" */ /* numbers with ascenders */
+ int bluecnt; /* If the private dica contains bluevalues... */
+ real blues[12][2]; /* 7 pairs from bluevalues, 5 from otherblues */
+} BlueData;
+
+#define BLUEDATA_EMPTY { \
+ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, \
+ { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, \
+ { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } \
+ } \
+}
+
+
+typedef struct bdffloat {
+ int16 xmin,xmax,ymin,ymax;
+ int16 bytes_per_line;
+ unsigned int byte_data:1;
+ uint8 depth;
+ uint8 *bitmap;
+} BDFFloat;
+
+/* OpenType does not document 'dflt' as a language, but we'll use it anyway. */
+/* (Adobe uses it too) we'll turn it into a default entry when we output it. */
+#define DEFAULT_LANG CHR('d','f','l','t')
+/* The OpenType spec says in one place that the default script is 'dflt' and */
+/* in another that it is 'DFLT'. 'DFLT' is correct */
+#define DEFAULT_SCRIPT CHR('D','F','L','T')
+#define REQUIRED_FEATURE CHR(' ','R','Q','D')
+
+enum otlookup_type {
+ ot_undef = 0, /* Not a lookup type */
+ gsub_start = 0x000, /* Not a lookup type */
+ gsub_single = 0x001,
+ gsub_multiple = 0x002,
+ gsub_alternate = 0x003,
+ gsub_ligature = 0x004,
+ gsub_context = 0x005,
+ gsub_contextchain = 0x006,
+ /* GSUB extension 7 */
+ gsub_reversecchain = 0x008,
+ /* mac state machines */
+ morx_indic = 0x0fd,
+ morx_context = 0x0fe,
+ morx_insert = 0x0ff,
+ /* ********************* */
+ gpos_start = 0x100, /* Not a lookup type */
+
+ gpos_single = 0x101,
+ gpos_pair = 0x102,
+ gpos_cursive = 0x103,
+ gpos_mark2base = 0x104,
+ gpos_mark2ligature = 0x105,
+ gpos_mark2mark = 0x106,
+ gpos_context = 0x107,
+ gpos_contextchain = 0x108,
+ /* GPOS extension 9 */
+ kern_statemachine = 0x1ff
+
+ /* otlookup&0xff == lookup type for the appropriate table */
+ /* otlookup>>8: 0=>GSUB, 1=>GPOS */
+};
+
+enum otlookup_typemasks {
+ gsub_single_mask = 0x00001,
+ gsub_multiple_mask = 0x00002,
+ gsub_alternate_mask = 0x00004,
+ gsub_ligature_mask = 0x00008,
+ gsub_context_mask = 0x00010,
+ gsub_contextchain_mask = 0x00020,
+ gsub_reversecchain_mask = 0x00040,
+ morx_indic_mask = 0x00080,
+ morx_context_mask = 0x00100,
+ morx_insert_mask = 0x00200,
+ /* ********************* */
+ gpos_single_mask = 0x00400,
+ gpos_pair_mask = 0x00800,
+ gpos_cursive_mask = 0x01000,
+ gpos_mark2base_mask = 0x02000,
+ gpos_mark2ligature_mask = 0x04000,
+ gpos_mark2mark_mask = 0x08000,
+ gpos_context_mask = 0x10000,
+ gpos_contextchain_mask = 0x20000,
+ kern_statemachine_mask = 0x40000
+};
+
+#define MAX_LANG 4 /* If more than this we allocate more_langs in chunks of MAX_LANG */
+struct scriptlanglist {
+ uint32 script;
+ uint32 langs[MAX_LANG];
+ uint32 *morelangs;
+ int lang_cnt;
+ struct scriptlanglist *next;
+};
+
+#define OPENTYPE_FEATURE_FRIENDLYNAMES_EMPTY { 0, NULL, NULL, 0 }
+
+
+typedef struct featurescriptlanglist {
+ uint32 featuretag;
+ struct scriptlanglist *scripts;
+ struct featurescriptlanglist *next;
+ unsigned int ismac: 1; /* treat the featuretag as a mac feature/setting */
+} FeatureScriptLangList;
+
+enum pst_flags { pst_r2l=1, pst_ignorebaseglyphs=2, pst_ignoreligatures=4,
+ pst_ignorecombiningmarks=8, pst_usemarkfilteringset=0x10,
+ pst_markclass=0xff00, pst_markset=0xffff0000 };
+
+struct lookup_subtable {
+ char *subtable_name;
+ char *suffix; /* for gsub_single, used to find a default replacement */
+ int16 separation, minkern; /* for gpos_pair, used to guess default kerning values */
+ struct otlookup *lookup;
+ unsigned int unused: 1;
+ unsigned int per_glyph_pst_or_kern: 1;
+ unsigned int anchor_classes: 1;
+ unsigned int vertical_kerning: 1;
+ unsigned int ticked: 1;
+ unsigned int kerning_by_touch: 1; /* for gpos_pair, calculate kerning so that glyphs will touch */
+ unsigned int onlyCloser: 1; /* for kerning classes */
+ unsigned int dontautokern: 1; /* for kerning classes */
+ struct kernclass *kc;
+ struct generic_fpst *fpst;
+ struct generic_asm *sm;
+ /* Each time an item is added to a lookup we must place it into a */
+ /* subtable. If it's a kerning class, fpst or state machine it has */
+ /* a subtable all to itself. If it's an anchor class it can share */
+ /* a subtable with other anchor classes (merge with). If it's a glyph */
+ /* PST it may share a subtable with other PSTs */
+ /* Note items may only be placed in lookups in which they fit. Can't */
+ /* put kerning data in a gpos_single lookup, etc. */
+ struct lookup_subtable *next;
+ int32 subtable_offset;
+ int32 *extra_subtables;
+ /* If a kerning subtable has too much stuff in it, we are prepared to */
+ /* break it up into several smaller subtables, each of which has */
+ /* an offset in this list (extra-subtables[0]==subtable_offset) */
+ /* the list is terminated by an entry of -1 */
+};
+
+typedef struct otlookup {
+ struct otlookup *next;
+ enum otlookup_type lookup_type;
+ uint32 lookup_flags; /* Low order: traditional flags, High order: markset index, only meaningful if pst_usemarkfilteringset set */
+ char *lookup_name;
+ FeatureScriptLangList *features;
+ struct lookup_subtable *subtables;
+ unsigned int unused: 1; /* No subtable is used (call SFFindUnusedLookups before examining) */
+ unsigned int empty: 1; /* No subtable is used, and no anchor classes are used */
+ unsigned int store_in_afm: 1; /* Used for ligatures, some get stored */
+ /* 'liga' generally does, but 'frac' doesn't */
+ unsigned int needs_extension: 1; /* Used during opentype generation */
+ unsigned int temporary_kern: 1; /* Used when decomposing kerning classes into kern pairs for older formats */
+ unsigned int def_lang_checked: 1;
+ unsigned int def_lang_found: 1;
+ unsigned int ticked: 1;
+ unsigned int in_gpos: 1;
+ unsigned int in_jstf: 1;
+ unsigned int only_jstf: 1;
+ int16 subcnt; /* Actual number of subtables we will output */
+ /* Some of our subtables may contain no data */
+ /* Some may be too big and need to be broken up.*/
+ /* So this field may be different than just counting the subtables */
+ int lookup_index; /* used during opentype generation */
+ uint32 lookup_offset;
+ uint32 lookup_length;
+ char *tempname;
+} OTLookup;
+
+#define LOOKUP_SUBTABLE_EMPTY { NULL, NULL, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, 0, NULL }
+#define OTLOOKUP_EMPTY { NULL, 0, 0, NULL, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL }
+
+
+typedef struct devicetab {
+ uint16 first_pixel_size, last_pixel_size; /* A range of point sizes to which this table applies */
+ int8 *corrections; /* a set of pixel corrections, one for each point size */
+} DeviceTable;
+
+typedef struct valdev { /* Value records can have four associated device tables */
+ DeviceTable xadjust;
+ DeviceTable yadjust;
+ DeviceTable xadv;
+ DeviceTable yadv;
+} ValDevTab;
+
+enum anchorclass_type { act_mark, act_mkmk, act_curs, act_mklg, act_unknown };
+typedef struct anchorclass {
+ char *name; /* in utf8 */
+ struct lookup_subtable *subtable;
+ uint8 type; /* anchorclass_type */
+ uint8 has_base;
+ uint8 processed, has_mark, matches, ac_num;
+ uint8 ticked;
+ struct anchorclass *next;
+} AnchorClass;
+
+enum anchor_type { at_mark, at_basechar, at_baselig, at_basemark, at_centry, at_cexit, at_max };
+typedef struct anchorpoint {
+ AnchorClass *anchor;
+ BasePoint me;
+ DeviceTable xadjust, yadjust;
+ unsigned int type: 4;
+ unsigned int selected: 1;
+ unsigned int ticked: 1;
+ unsigned int has_ttf_pt: 1;
+ uint16 ttf_pt_index;
+ int16 lig_index;
+ struct anchorpoint *next;
+} AnchorPoint;
+
+typedef struct kernpair {
+ // Note that the left character in the pair has the reference to the kerning pair, which in turn references the right character.
+ struct lookup_subtable *subtable;
+ struct splinechar *sc;
+ int16 off;
+ uint16 kcid; /* temporary value */
+ DeviceTable *adjust; /* Only adjustment in one dimen, if more needed use pst */
+ struct kernpair *next;
+} KernPair;
+
+#define FF_KERNCLASS_FLAG_NATIVE 2 // If set, the class goes into groups.plist or kerning.plist.
+#define FF_KERNCLASS_FLAG_FEATURE 4 // If set, the class or rule goes into the feature file. In the present configuration, this ought to be zero always.
+#define FF_KERNCLASS_FLAG_NAMETYPE 8 // If unset (default), the class has a standard name, which translates to a U. F. O. name starting in public.kern, which may be illegal in the feature file. If set, it has a name like @MMK_.
+#define FF_KERNCLASS_FLAG_NAMELEGACY 16 // If set, the class has a U. F. O. name starting in @kc as FontForge liked to do in the past.
+#define FF_KERNCLASS_FLAG_VIRTUAL 32 // If unset (default), the class is a real character class and does not conflict with same-sided classes. If set, FontForge mostly ignores the class except for U. F. O. input/output.
+#define FF_KERNCLASS_FLAG_FLATTEN 64 // If unset (default), the class gets exported as a class. If set, it gets exported as its first member (in order to support class-character kerns).
+#define FF_KERNCLASS_FLAG_SINGLECHAR (FF_KERNCLASS_FLAG_VIRTUAL | FF_KERNCLASS_FLAG_FLATTEN) // We expect to see these used together.
+
+typedef struct kernclass {
+ int first_cnt, second_cnt; /* Count of classes for first and second chars */
+ char **firsts; /* list of a space separated list of char names */
+ char **seconds; /* one entry for each class. Entry 0 is null */
+ /* and means everything not specified elsewhere */
+ char **firsts_names; // We need to track the names of the classes in order to round-trip U. F. O. data.
+ char **seconds_names;
+ int *firsts_flags; // This tracks the storage format of the class in U. F. O. (groups.plist or features.fea) and whether it's a single-character class.
+ int *seconds_flags; // We also track the name format (@MMK or public.kern).
+ struct lookup_subtable *subtable;
+ uint16 kcid; /* Temporary value, used for many things briefly */
+ int16 *offsets; /* array of first_cnt*second_cnt entries with 0 representing no data */
+ int *offsets_flags;
+ DeviceTable *adjusts; /* array of first_cnt*second_cnt entries representing resolution-specific adjustments */
+ struct kernclass *next; // Note that, in most cases, a typeface needs only one struct kernclass since it can contain all classes.
+ int feature; // This indicates whether the kerning class came from a feature file. This is important during export.
+} KernClass;
+
+enum possub_type { pst_null, pst_position, pst_pair,
+ pst_substitution, pst_alternate,
+ pst_multiple, pst_ligature,
+ pst_lcaret /* must be pst_max-1, see charinfo.c*/,
+ pst_max,
+ /* These are not psts but are related so it's handly to have values for them */
+ pst_kerning = pst_max, pst_vkerning, pst_anchors,
+ /* And these are fpsts */
+ pst_contextpos, pst_contextsub, pst_chainpos, pst_chainsub,
+ pst_reversesub, fpst_max,
+ /* And these are used to specify a kerning pair where the current */
+ /* char is the final glyph rather than the initial one */
+ /* A kludge used when cutting and pasting features */
+ pst_kernback, pst_vkernback
+ };
+
+struct vr {
+ int16 xoff, yoff, h_adv_off, v_adv_off;
+ ValDevTab *adjust;
+};
+
+typedef struct generic_pst {
+ unsigned int ticked: 1;
+ unsigned int temporary: 1; /* Used in afm ligature closure */
+ /* enum possub_type*/ uint8 type;
+ struct lookup_subtable *subtable;
+ struct generic_pst *next;
+ union {
+ struct vr pos;
+ struct { char *paired; struct vr *vr; } pair;
+ struct { char *variant; } subs;
+ struct { char *components; } mult, alt;
+ struct { char *components; struct splinechar *lig; } lig;
+ struct { int16 *carets; int cnt; } lcaret; /* Ligature caret positions */
+ } u;
+} PST;
+
+typedef struct liglist {
+ PST *lig;
+ struct splinechar *first; /* First component */
+ struct splinecharlist *components; /* Other than the first */
+ struct liglist *next;
+ int ccnt; /* Component count. (includes first component) */
+} LigList;
+
+enum fpossub_format { pst_glyphs, pst_class, pst_coverage,
+ pst_reversecoverage, pst_formatmax };
+
+struct seqlookup {
+ int seq;
+ struct otlookup *lookup;
+};
+
+struct fpg { char *names, *back, *fore; };
+struct fpc { int ncnt, bcnt, fcnt; uint16 *nclasses, *bclasses, *fclasses, *allclasses; };
+struct fpv { int ncnt, bcnt, fcnt; char **ncovers, **bcovers, **fcovers; };
+struct fpr { int always1, bcnt, fcnt; char **ncovers, **bcovers, **fcovers; char *replacements; };
+
+struct fpst_rule {
+ union {
+ /* Note: Items in backtrack area are in reverse order because that's how the OT wants them */
+ /* they need to be reversed again to be displayed to the user */
+ struct fpg glyph;
+ struct fpc class;
+ struct fpv coverage;
+ struct fpr rcoverage;
+ } u;
+ int lookup_cnt;
+ struct seqlookup *lookups;
+};
+
+typedef struct generic_fpst {
+ uint16 /*enum possub_type*/ type;
+ uint16 /*enum fpossub_format*/ format;
+ struct lookup_subtable *subtable;
+ struct generic_fpst *next;
+ uint16 nccnt, bccnt, fccnt;
+ uint16 rule_cnt;
+ char **nclass, **bclass, **fclass;
+ struct fpst_rule *rules;
+ uint8 ticked;
+ uint8 effectively_by_glyphs;
+ char **nclassnames, **bclassnames, **fclassnames;
+} FPST;
+
+enum asm_type { asm_indic, asm_context, asm_lig, asm_simple=4, asm_insert,
+ asm_kern=0x11 };
+enum asm_flags { asm_vert=0x8000, asm_descending=0x4000, asm_always=0x2000 };
+
+struct asm_state {
+ uint16 next_state;
+ uint16 flags;
+ union {
+ struct {
+ struct otlookup *mark_lookup; /* for contextual glyph subs (tag of a nested lookup) */
+ struct otlookup *cur_lookup; /* for contextual glyph subs */
+ } context;
+ struct {
+ char *mark_ins;
+ char *cur_ins;
+ } insert;
+ struct {
+ int16 *kerns;
+ int kcnt;
+ } kern;
+ } u;
+};
+
+typedef struct generic_asm { /* Apple State Machine */
+ struct generic_asm *next;
+ uint16 /*enum asm_type*/ type;
+ struct lookup_subtable *subtable; /* Lookup contains feature setting info */
+ uint16 flags; /* 0x8000=>vert, 0x4000=>r2l, 0x2000=>hor&vert */
+ uint8 ticked;
+
+ uint16 class_cnt, state_cnt;
+ char **classes;
+ struct asm_state *state;
+} ASM;
+/* State Flags:
+ Indic:
+ 0x8000 mark current glyph as first in rearrangement
+ 0x4000 don't advance to next glyph
+ 0x2000 mark current glyph as last
+ 0x000f verb
+ 0 = no change 8 = AxCD => CDxA
+ 1 = Ax => xA 9 = AxCD => DCxA
+ 2 = xD => Dx a = ABxD => DxAB
+ 3 = AxD => DxA b = ABxD => DxBA
+ 4 = ABx => xAB c = ABxCD => CDxAB
+ 5 = ABx => xBA d = ABxCD => CDxBA
+ 6 = xCD => CDx e = ABxCD => DCxAB
+ 7 = xCD => DCx f = ABxCD => DCxBA
+ Contextual:
+ 0x8000 mark current glyph
+ 0x4000 don't advance to next glyph
+ Insert:
+ 0x8000 mark current glyph
+ 0x4000 don't advance to next glyph
+ 0x2000 current is Kashida like
+ 0x1000 mark is Kashida like
+ 0x0800 current insert before
+ 0x0400 mark insert before
+ 0x03e0 count of chars to be inserted at current (31 max)
+ 0x001f count of chars to be inserted at mark (31 max)
+ Kern:
+ 0x8000 add current glyph to kerning stack
+ 0x4000 don't advance to next glyph
+ 0x3fff value offset
+*/
+
+struct jstf_prio {
+ OTLookup **enableShrink; /* Points to an array of lookups (GSUB or GPOS)*/
+ OTLookup **disableShrink; /* NULL terminated */
+ OTLookup **maxShrink; /* Array of GPOS like lookups */
+ OTLookup **enableExtend;
+ OTLookup **disableExtend;
+ OTLookup **maxExtend;
+};
+
+struct jstf_lang {
+ uint32 lang;
+ struct jstf_lang *next;
+ int cnt;
+ struct jstf_prio *prios;
+};
+
+typedef struct jstf_script {
+ uint32 script;
+ struct jstf_script *next;
+ char *extenders; /* list of glyph names */
+ struct jstf_lang *langs;
+} Justify;
+
+struct macname {
+ struct macname *next;
+ uint16 enc; /* Platform specific encoding. 0=>mac roman, 1=>sjis, 7=>russian */
+ uint16 lang; /* Mac languages 0=>english, 1=>french, 2=>german */
+ char *name; /* Not a unicode string, uninterpreted mac encoded string */
+};
+
+/* Wow, the GPOS 'size' feature stores a string in the name table just as mac */
+/* features do */
+/* And now (OTF 1.6) GSUB 'ss01'-'ss20' do too */
+struct otfname {
+ struct otfname *next;
+ uint16 lang; /* windows language code */
+ char *name; /* utf8 */
+};
+
+struct otffeatname {
+ uint32 tag; /* Feature tag */
+ struct otfname *names;
+ struct otffeatname *next;
+ uint16 nid; /* temporary value */
+};
+
+struct macsetting {
+ struct macsetting *next;
+ uint16 setting;
+ uint16 strid;
+ struct macname *setname;
+ unsigned int initially_enabled: 1;
+};
+
+typedef struct macfeat {
+ struct macfeat *next;
+ uint16 feature;
+ uint8 ismutex;
+ uint8 default_setting; /* Apple's docs say both that this is a byte and a short. It's a byte */
+ uint16 strid; /* Temporary value, used when reading in */
+ struct macname *featname;
+ struct macsetting *settings;
+} MacFeat;
+
+typedef struct refbdfc {
+ unsigned int checked: 1;
+ unsigned int selected: 1;
+ int8 xoff;
+ int8 yoff;
+ uint16 gid;
+ struct refbdfc *next;
+ struct bdfchar *bdfc;
+} BDFRefChar;
+
+struct bdfcharlist {
+ struct bdfchar *bc;
+ struct bdfcharlist *next;
+};
+
+typedef struct bdfchar {
+ struct splinechar *sc;
+ int16 xmin,xmax,ymin,ymax;
+ int16 width;
+ int16 bytes_per_line;
+ uint8 *bitmap;
+ struct refbdfc *refs;
+ int orig_pos;
+ int16 pixelsize; /* for undoes */
+ struct bitmapview *views;
+ struct undoes *undoes;
+ struct undoes *redoes;
+ unsigned int changed: 1;
+ unsigned int byte_data: 1; /* for anti-aliased chars entries are grey-scale bytes not bw bits */
+ unsigned int widthgroup: 1; /* for ttf bitmap output */
+ unsigned int isreference: 1; /* for ttf bitmap input, */
+ unsigned int ticked: 1;
+ uint8 depth; /* for ttf bitmap output */
+ uint16 vwidth;
+ BDFFloat *selection;
+ BDFFloat *backup;
+ struct bdfcharlist *dependents;
+} BDFChar;
+
+enum undotype { ut_none=0, ut_state, ut_tstate, ut_statehint, ut_statename,
+ ut_statelookup,
+ ut_anchors,
+ ut_width, ut_vwidth, ut_lbearing, ut_rbearing, ut_possub,
+ ut_hints, ut_bitmap, ut_bitmapsel, ut_composit, ut_multiple, ut_layers,
+ ut_noop };
+
+#define UNDO_LAYER_UNKNOWN -1
+
+
+enum sfundotype
+{
+ sfut_none=0,
+ sfut_lookups,
+ sfut_lookups_kerns,
+ sfut_fontinfo,
+ sfut_noop
+};
+
+/**
+ * A spline font level undo stack. undoes are doubly linked using the
+ * 'ln' member and carry some user presentable description of what the
+ * undo relates to in 'msg'.
+ *
+ * The sfdchunk is a pointer to an SFD fragment which will apply the
+ * undo to the current state. For example, it might contain
+ * information about the old value of kerning pairs which can be used
+ * to restore state to how it was. Note that the sfdchunk might only
+ * be partial, containing only enough information to restore the state
+ * which changed when the undo was created.
+ */
+
+typedef struct enc {
+ char *enc_name;
+ int char_cnt; /* Size of the next two arrays */
+ int32 *unicode; /* unicode value for each encoding point */
+ char **psnames; /* optional postscript name for each encoding point */
+ struct enc *next;
+ unsigned int builtin: 1;
+ unsigned int hidden: 1;
+ unsigned int only_1byte: 1;
+ unsigned int has_1byte: 1;
+ unsigned int has_2byte: 1;
+ unsigned int is_unicodebmp: 1;
+ unsigned int is_unicodefull: 1;
+ unsigned int is_custom: 1;
+ unsigned int is_original: 1;
+ unsigned int is_compact: 1;
+ unsigned int is_japanese: 1;
+ unsigned int is_korean: 1;
+ unsigned int is_tradchinese: 1;
+ unsigned int is_simplechinese: 1;
+ char iso_2022_escape[8];
+ int iso_2022_escape_len;
+ int low_page, high_page;
+ char *iconv_name; /* For compatibility to old versions we might use a different name from that used by iconv. */
+ iconv_t *tounicode;
+ iconv_t *fromunicode;
+ int (*tounicode_func)(int);
+ int (*fromunicode_func)(int);
+ unsigned int is_temporary: 1; /* freed when the map gets freed */
+ int char_max; /* Used by temporary encodings */
+} Encoding;
+
+struct renames { char *from; char *to; };
+
+typedef struct namelist {
+ struct namelist *basedon;
+ char *title;
+ const char ***unicode[17];
+ struct namelist *next;
+ struct renames *renames;
+ int uses_unicode;
+ char *a_utf8_name;
+} NameList;
+
+enum uni_interp { ui_unset= -1, ui_none, ui_adobe, ui_greek, ui_japanese,
+ ui_trad_chinese, ui_simp_chinese, ui_korean, ui_ams };
+
+struct remap { uint32 firstenc, lastenc; int32 infont; };
+
+typedef struct encmap { /* A per-font map of encoding to glyph id */
+ int32 *map; /* Map from encoding to glyphid */
+ int32 *backmap; /* Map from glyphid to encoding */
+ int enccount; /* used size of the map array */
+ /* strictly speaking this might include */
+ /* glyphs that are not encoded, but which */
+ /* are displayed after the proper encoding */
+ int encmax; /* allocated size of the map array */
+ int backmax; /* allocated size of the backmap array */
+ struct remap *remap;
+ Encoding *enc;
+ unsigned int ticked: 1;
+} EncMap;
+
+enum property_type { prt_string, prt_atom, prt_int, prt_uint, prt_property=0x10 };
+
+typedef struct bdfprops {
+ char *name; /* These include both properties (like SLANT) and non-properties (like FONT) */
+ int type;
+ union {
+ char *str;
+ char *atom;
+ int val;
+ } u;
+} BDFProperties;
+
+typedef struct bdffont {
+ struct splinefont *sf;
+ int glyphcnt, glyphmax; /* used & allocated sizes of glyphs array */
+ BDFChar **glyphs; /* an array of charcnt entries */
+ int16 pixelsize;
+ int16 ascent, descent;
+ int16 layer; /* for piecemeal fonts */
+ unsigned int piecemeal: 1;
+ unsigned int bbsized: 1;
+ unsigned int ticked: 1;
+ unsigned int unhinted_freetype: 1;
+ unsigned int recontext_freetype: 1;
+ struct bdffont *next;
+ struct clut *clut;
+ char *foundry;
+ int res;
+ void *freetype_context;
+ uint16 truesize; /* for bbsized fonts */
+ int16 prop_cnt;
+ int16 prop_max; /* only used within bdfinfo dlg */
+ BDFProperties *props;
+ uint16 ptsize, dpi; /* for piecemeal fonts */
+} BDFFont;
+
+#define HntMax 96 /* PS says at most 96 hints */
+typedef uint8 HintMask[HntMax/8];
+
+enum pointtype { pt_curve, pt_corner, pt_tangent, pt_hvcurve };
+typedef struct splinepoint {
+ BasePoint me;
+ BasePoint nextcp; /* control point */
+ BasePoint prevcp; /* control point */
+ unsigned int nonextcp:1;
+ unsigned int noprevcp:1;
+ unsigned int nextcpdef:1;
+ unsigned int prevcpdef:1;
+ unsigned int selected:1; /* for UI */
+ unsigned int nextcpselected: 2; /* Is the next BCP selected */
+ unsigned int prevcpselected: 2; /* Is the prev BCP selected */
+ unsigned int pointtype:2;
+ unsigned int isintersection: 1;
+ unsigned int flexy: 1; /* When "freetype_markup" is on in charview.c:DrawPoint */
+ unsigned int flexx: 1; /* flexy means select nextcp, and flexx means draw circle around nextcp */
+ unsigned int roundx: 1; /* For true type hinting */
+ unsigned int roundy: 1; /* For true type hinting */
+ unsigned int dontinterpolate: 1; /* in ttf, don't imply point by interpolating between cps */
+ unsigned int ticked: 1;
+ unsigned int watched: 1;
+ /* 1 bits left... */
+ uint16 ptindex; /* Temporary value used by metafont routine */
+ uint16 ttfindex; /* Truetype point index */
+ /* Special values 0xffff => point implied by averaging control points */
+ /* 0xfffe => point created with no real number yet */
+ /* (or perhaps point in context where no number is possible as in a glyph with points & refs) */
+ uint16 nextcpindex; /* Truetype point index */
+ struct spline *next;
+ struct spline *prev;
+ HintMask *hintmask;
+ char* name;
+} SplinePoint;
+
+enum linelist_flags { cvli_onscreen=0x1, cvli_clipped=0x2 };
+
+typedef struct linelist {
+ IPoint here;
+ struct linelist *next;
+ /* The first two fields are constant for the linelist, the next ones */
+ /* refer to a particular screen. If some portion of the line from */
+ /* this point to the next one is on the screen then set cvli_onscreen */
+ /* if this point needs to be clipped then set cvli_clipped */
+ /* asend and asstart are the actual screen locations where this point */
+ /* intersects the clip edge. */
+ enum linelist_flags flags;
+ IPoint asend, asstart;
+} LineList;
+
+typedef struct linearapprox {
+ real scale;
+ unsigned int oneline: 1;
+ unsigned int onepoint: 1;
+ unsigned int any: 1; /* refers to a particular screen */
+ struct linelist *lines;
+ struct linearapprox *next;
+} LinearApprox;
+
+typedef struct spline1d {
+ real a, b, c, d;
+} Spline1D;
+
+/**
+ *
+ * 2013Note: If you are altering from->me.x and y then you will
+ * probably have to modify splines[] to match your change.
+ * eg, moving both ends of a spline up/down by changing their
+ * to/from will also probably need an update to splines[ 0 | 1 ].d to
+ * match.
+ */
+typedef struct spline {
+ unsigned int islinear: 1; /* No control points */
+ unsigned int isquadratic: 1; /* probably read in from ttf */
+ unsigned int isticked: 1;
+ unsigned int isneeded: 1; /* Used in remove overlap */
+ unsigned int isunneeded: 1; /* Used in remove overlap */
+ unsigned int exclude: 1; /* Used in remove overlap varient: exclude */
+ unsigned int ishorvert: 1;
+ unsigned int knowncurved: 1; /* We know that it curves */
+ unsigned int knownlinear: 1; /* it might have control points, but still traces out a line */
+ /* If neither knownlinear nor curved then we haven't checked */
+ unsigned int order2: 1; /* It's a bezier curve with only one cp */
+ unsigned int touched: 1;
+ unsigned int leftedge: 1;
+ unsigned int rightedge: 1;
+ unsigned int acceptableextrema: 1; /* This spline has extrema, but we don't care */
+ SplinePoint *from;
+ SplinePoint *to;
+ Spline1D splines[2]; /* splines[0] is the x spline, splines[1] is y */
+ struct linearapprox *approx;
+ /* Posible optimizations:
+ Precalculate bounding box
+ Precalculate min/max/ points of inflection
+ */
+} Spline;
+
+#ifndef _NO_LIBSPIRO
+# include "spiroentrypoints.h"
+#else
+# define SPIRO_OPEN_CONTOUR '{'
+# define SPIRO_CORNER 'v'
+# define SPIRO_G4 'o'
+# define SPIRO_G2 'c'
+# define SPIRO_LEFT '['
+# define SPIRO_RIGHT ']'
+# define SPIRO_END 'z'
+typedef struct { /* Taken from spiro.h because I want */
+ double x; /* to be able to compile for spiro */
+ double y; /* even on a system without it */
+ char ty;
+} spiro_cp;
+#endif
+#define SPIRO_SELECTED(cp) ((cp)->ty&0x80)
+#define SPIRO_DESELECT(cp) ((cp)->ty&=~0x80)
+#define SPIRO_SELECT(cp) ((cp)->ty|=0x80)
+#define SPIRO_SPL_OPEN(spl) ((spl)->spiro_cnt>1 && ((spl)->spiros[0].ty&0x7f)==SPIRO_OPEN_CONTOUR)
+
+#define SPIRO_NEXT_CONSTRAINT SPIRO_RIGHT /* The curve is on the next side of the constraint point */
+#define SPIRO_PREV_CONSTRAINT SPIRO_LEFT /* The curve is on the prev side of the constraint point */
+
+typedef struct splinepointlist {
+ SplinePoint *first, *last;
+ struct splinepointlist *next;
+ spiro_cp *spiros;
+ uint16 spiro_cnt, spiro_max;
+ /* These could be bit fields, but bytes are easier to access and we */
+ /* don't need the space (yet) */
+ uint8 ticked;
+ uint8 beziers_need_optimizer; /* If the spiros have changed in spiro mode, then reverting to bezier mode might, someday, run a simplifier */
+ uint8 is_clip_path; /* In type3/svg fonts */
+ int start_offset; // This indicates which point is the canonical first for purposes of outputting to U. F. O..
+ char *contour_name;
+} SplinePointList, SplineSet;
+
+
+struct reflayer {
+ unsigned int background: 1;
+ unsigned int order2: 1;
+ unsigned int anyflexes: 1;
+ unsigned int dofill: 1;
+ unsigned int dostroke: 1;
+ unsigned int fillfirst: 1;
+ struct brush fill_brush;
+ struct pen stroke_pen;
+ SplinePointList *splines;
+};
+
+typedef struct refchar {
+ unsigned int checked: 1;
+ unsigned int selected: 1;
+ unsigned int point_match: 1; /* match_pt* are point indexes */
+ /* and need to be converted to a */
+ /* translation after truetype readin */
+ unsigned int encoded: 1; /* orig_pos is actually an encoded value, used for old sfd files */
+ unsigned int justtranslated: 1; /* The transformation matrix specifies a translation (or is identity) */
+ unsigned int use_my_metrics: 1; /* Retain the ttf "use_my_metrics" info. */
+ /* important for glyphs with instructions which change the width used */
+ /* inside composites */
+ unsigned int round_translation_to_grid: 1; /* Retain the ttf "round_to_grid" info. */
+ unsigned int point_match_out_of_date: 1; /* Someone has edited a base glyph */
+ int16 adobe_enc;
+ int orig_pos;
+ int unicode_enc; /* used by paste */
+ real transform[6]; /* transformation matrix (first 2 rows of a 3x3 matrix, missing row is 0,0,1) */
+ struct reflayer *layers;
+ int layer_cnt;
+ struct refchar *next;
+ DBounds bb;
+ struct splinechar *sc;
+ BasePoint top;
+ uint16 match_pt_base, match_pt_ref;
+} RefChar;
+
+/* Some stems may appear, disappear, reapear several times */
+/* Serif stems on I which appear at 0, disappear, reappear at top */
+/* Or the major vertical stems on H which disappear at the cross bar */
+typedef struct hintinstance {
+ real begin; /* location in the non-major direction*/
+ real end; /* width/height in non-major direction*/
+ unsigned int closed: 1;
+ short int counternumber;
+ struct hintinstance *next;
+} HintInstance;
+
+enum hinttypes { ht_unspecified=0, ht_h, ht_v, ht_d };
+typedef real _MMArray[2][MmMax];
+
+typedef struct steminfo {
+ struct steminfo *next;
+ unsigned int hinttype: 2; /* Only used by undoes */
+ unsigned int ghost: 1; /* this is a ghost stem hint. As such truetype should ignore it, type2 output should negate it, and type1 should use as is */
+ /* stored width will be either 20 or 21 */
+ /* Type2 says: -20 is "width" of top edge, -21 is "width" of bottom edge, type1 accepts either */
+ unsigned int haspointleft:1;
+ unsigned int haspointright:1;
+ unsigned int hasconflicts:1;/* Does this stem have conflicts within its cluster? */
+ unsigned int used: 1; /* Temporary for counter hints or hint substitution */
+ unsigned int tobeused: 1; /* Temporary for counter hints or hint substitution */
+ unsigned int active: 1; /* Currently active hint in Review Hints dlg */
+ /* displayed differently in char display */
+ unsigned int enddone: 1; /* Used by ttf instructing, indicates a prev */
+ /* hint had the same end as this one (so */
+ /* the points on the end line have been */
+ /* instructed already */
+ unsigned int startdone: 1; /* Used by ttf instructing */
+ /*unsigned int backwards: 1;*/ /* If we think this hint is better done with a negative width */
+ unsigned int reordered: 1; /* In AutoHinting. Means we changed the start of the hint, need to test for out of order */
+ unsigned int pendingpt: 1; /* A pending stem creation, not a true stem */
+ unsigned int linearedges: 1;/* If we have a nice rectangle then we aren't */
+ /* interested in the orientation which is */
+ /* wider than long */
+ int16 hintnumber; /* when dumping out hintmasks we need to know */
+ /* what bit to set for this hint */
+ union {
+ int mask; /* Mask of all references that use this hint */
+ /* in type2 output */
+ _MMArray *unblended /*[2][MmMax]*/; /* Used when reading in type1 mm hints */
+ } u;
+ real start; /* location at which the stem starts */
+ real width; /* or height */
+ HintInstance *where; /* location(s) in the other coord */
+} StemInfo;
+
+typedef struct dsteminfo {
+ struct dsteminfo *next; /* First two fields match those in steminfo */
+ unsigned int hinttype: 2; /* Only used by undoes */
+ unsigned int used: 1; /* used only by tottf.c:gendinstrs, metafont.c to mark a hint that has been dealt with */
+ BasePoint left, right, unit;
+ HintInstance *where; /* location(s) along the unit vector */
+} DStemInfo;
+
+typedef struct minimumdistance {
+ /* If either point is NULL it will be assumed to mean either the origin */
+ /* or the width point (depending on which is closer). This allows user */
+ /* to control metrics... */
+ SplinePoint *sp1, *sp2;
+ unsigned int x: 1;
+ unsigned int done: 1;
+ struct minimumdistance *next;
+} MinimumDistance;
+
+typedef struct layer /* : reflayer */{
+ unsigned int background: 1;
+ unsigned int order2: 1;
+ unsigned int anyflexes: 1;
+ unsigned int dofill: 1;
+ unsigned int dostroke: 1;
+ unsigned int fillfirst: 1;
+ struct brush fill_brush;
+ struct pen stroke_pen;
+ SplinePointList *splines;
+ RefChar *refs; /* Only in foreground layer(s) */
+ uint32 validation_state;
+ uint32 old_vs;
+ void *python_persistent; /* If python this will hold a python object, if not python this will hold a string containing a pickled object. We do nothing with it (if not python) except save it back out unchanged */
+ int python_persistent_has_lists;
+} Layer;
+
+enum layer_type { ly_all=-2, ly_grid= -1, ly_back=0, ly_fore=1,
+ /* Possibly other foreground layers for type3 things */
+ /* Possibly other background layers for normal fonts */
+ ly_none = -3
+ };
+
+struct gv_part {
+ char *component;
+ unsigned int is_extender: 1; /* This component may be skipped or repeated */
+ uint16 startConnectorLength;
+ uint16 endConnectorLength;
+ uint16 fullAdvance;
+};
+
+/* For the 'MATH' table (and for TeX) */
+struct glyphvariants {
+ char *variants; /* Space separated list of glyph names */
+/* Glyph assembly */
+ int16 italic_correction; /* Of the composed glyph */
+ DeviceTable *italic_adjusts;
+ int part_cnt;
+ struct gv_part *parts;
+};
+
+struct mathkerndata {
+ int16 height,kern;
+ DeviceTable *height_adjusts;
+ DeviceTable *kern_adjusts;
+};
+
+/* For the 'MATH' table */
+struct mathkernvertex {
+ int cnt; /* There is one more kern entry than height entry */
+ /* So the last mkd should have its height ignored */
+ /* The MATH table stores the height count, I think the kern count */
+ /* is more useful (and that's what I use here). They differ by 1 */
+ struct mathkerndata *mkd;
+};
+
+struct mathkern {
+ struct mathkernvertex top_right;
+ struct mathkernvertex top_left;
+ struct mathkernvertex bottom_right;
+ struct mathkernvertex bottom_left;
+};
+
+enum privatedict_state {
+ pds_odd = 0x1, /* Odd number of entries */
+ pds_outoforder = 0x2, /* Bluevalues should be listed in order */
+ pds_toomany = 0x4, /* arrays are of limited sizes */
+ pds_tooclose = 0x8, /* adjacent zones must not be within 2*bluefuzz+1 (or 3, if bluefuzz omitted) */
+ pds_notintegral= 0x10, /* Must be integers */
+ pds_toobig = 0x20, /* within pair difference have some relation to BlueScale but the docs make no sense to me */
+ pds_shift = 8, /* BlueValues/OtherBlues, unshifted, FamilyBlues/FamilyOtherBlues shifted once */
+
+ pds_missingblue = 0x010000,
+ pds_badbluefuzz = 0x020000,
+ pds_badbluescale = 0x040000,
+ pds_badstdhw = 0x080000,
+ pds_badstdvw = 0x100000,
+ pds_badstemsnaph = 0x200000,
+ pds_badstemsnapv = 0x400000,
+ pds_stemsnapnostdh = 0x0800000,
+ pds_stemsnapnostdv = 0x1000000,
+ pds_badblueshift = 0x2000000
+
+};
+
+enum validation_state { vs_unknown = 0,
+ vs_known=0x01, /* It has been validated */
+ vs_opencontour=0x02,
+ vs_selfintersects=0x04,
+ vs_wrongdirection=0x08,
+ vs_flippedreferences=0x10, /* special case of wrong direction */
+ vs_missingextrema=0x20,
+ vs_missingglyphnameingsub=0x40,
+ /* Next few are postscript only */
+ vs_toomanypoints=0x80,
+ vs_toomanyhints=0x100,
+ vs_badglyphname=0x200,
+ /* Next few are only for fontlint */
+ /* These are relative to maxp values which ff would fix on generating a font */
+ vs_maxp_toomanypoints =0x400,
+ vs_maxp_toomanypaths =0x800,
+ vs_maxp_toomanycomppoints=0x1000,
+ vs_maxp_toomanycomppaths =0x2000,
+ vs_maxp_instrtoolong =0x4000,
+ vs_maxp_toomanyrefs =0x8000,
+ vs_maxp_refstoodeep =0x10000,
+ /* vs_maxp_prepfpgmtoolong=0x20000, */ /* I think I was wrong about this "error" */
+ /* Oops, we need another one, two, for the glyphs */
+ vs_pointstoofarapart = 0x40000,
+ vs_nonintegral = 0x80000, /* This will never be interesting in a real font, but might be in an sfd file */
+ vs_missinganchor = 0x100000,
+ vs_dupname = 0x200000,
+ vs_dupunicode = 0x400000,
+ vs_overlappedhints = 0x800000,
+
+ vs_last = vs_overlappedhints,
+ vs_maskps = 0x3fe | vs_pointstoofarapart | vs_missinganchor | vs_dupname | vs_dupunicode | vs_overlappedhints,
+ vs_maskcid = 0x1fe | vs_pointstoofarapart | vs_missinganchor | vs_dupname | vs_overlappedhints,
+ vs_maskttf = 0x7e | vs_pointstoofarapart | vs_nonintegral | vs_missinganchor | vs_dupunicode,
+ vs_maskfindproblems = 0x1be | vs_pointstoofarapart | vs_nonintegral | vs_missinganchor | vs_overlappedhints
+ };
+
+struct splinecharlist { struct splinechar *sc; struct splinecharlist *next;};
+
+struct altuni { struct altuni *next; int32 unienc, vs; uint32 fid; };
+ /* vs is the "variation selector" a unicode codepoint which modifieds */
+ /* the code point before it. If vs is -1 then unienc is just an */
+ /* alternate encoding (greek Alpha and latin A), but if vs is one */
+ /* of unicode's variation selectors then this glyph is somehow a */
+ /* variant shape. The specifics depend on the selector and script */
+ /* fid is currently unused, but may, someday, be used to do ttcs */
+ /* NOTE: GlyphInfo displays vs==-1 as vs==0, and fixes things up */
+
+typedef struct splinechar {
+ char *name;
+ int unicodeenc;
+ int orig_pos; /* Original position in the glyph list */
+ int16 width, vwidth;
+ int16 lsidebearing; /* only used when reading in a type1 font */
+ /* Or an otf font where it is the subr number of a refered character */
+ /* or a ttf font without bit 1 of head.flags set */
+ /* or (once upon a time, but no longer) a ttf font with vert metrics where it is the ymax value when we had a font-wide vertical offset */
+ /* or when generating morx where it is the mask of tables in which the glyph occurs */
+ /* Always a temporary value */
+ int ttf_glyph; /* only used when writing out a ttf or otf font */
+ Layer *layers; /* layer[0] is background, layer[1] foreground */
+ /* In type3 fonts 2-n are also foreground, otherwise also background */
+ int layer_cnt;
+ StemInfo *hstem; /* hstem hints have a vertical offset but run horizontally */
+ StemInfo *vstem; /* vstem hints have a horizontal offset but run vertically */
+ DStemInfo *dstem; /* diagonal hints for ttf */
+ MinimumDistance *md;
+
+ struct charinfo *charinfo;
+ struct splinefont *parent;
+ unsigned int changed: 1;
+ unsigned int changedsincelasthinted: 1;
+ unsigned int manualhints: 1;
+ unsigned int ticked: 1; /* For reference character processing */
+ /* And fontview processing */
+ unsigned int changed_since_autosave: 1;
+ unsigned int widthset: 1; /* needed so an emspace char doesn't disappear */
+ unsigned int vconflicts: 1; /* Any hint overlaps in the vstem list? */
+ unsigned int hconflicts: 1; /* Any hint overlaps in the hstem list? */
+ unsigned int searcherdummy: 1;
+ unsigned int changed_since_search: 1;
+ unsigned int wasopen: 1;
+ unsigned int namechanged: 1;
+ unsigned int blended: 1; /* An MM blended character */
+ unsigned int ticked2: 1;
+ unsigned int glyph_class: 3; /* 0=> fontforge determines class automagically, else one more than the class value in gdef so 2+1=>lig, 3+1=>mark */
+ unsigned int numberpointsbackards: 1;
+ unsigned int instructions_out_of_date: 1;
+ unsigned int complained_about_ptnums: 1;
+ unsigned int vs_open: 1;
+ unsigned int unlink_rm_ovrlp_save_undo: 1;
+ unsigned int inspiro: 1;
+ unsigned int lig_caret_cnt_fixed: 1;
+ unsigned int suspendMetricsViewEventPropagation: 1; /* rect tool might do this while drawing */
+ /* 5 bits left (one more if we ignore compositionunit below) */
+#if HANYANG
+ unsigned int compositionunit: 1;
+ int16 jamo, varient;
+#endif
+ struct splinecharlist *dependents;
+ /* The dependents list is a list of all characters which refenence*/
+ /* the current character directly */
+ KernPair *kerns; // Note that the left character in the pair has the reference to the kerning pair, which in turn references the right character.
+ KernPair *vkerns;
+ PST *possub; /* If we are a ligature then this tells us what */
+ /* It may also contain a bunch of other stuff now */
+ LigList *ligofme; /* If this is the first character of a ligature then this gives us the list of possible ones */
+ /* this field must be regenerated before the font is saved */
+ char *comment; /* in utf8 */
+ uint32 /*Color*/ color;
+ AnchorPoint *anchor;
+ uint8 *ttf_instrs;
+ int16 ttf_instrs_len;
+ int16 countermask_cnt;
+ HintMask *countermasks;
+ struct altuni *altuni;
+/* for TeX */
+ int16 tex_height, tex_depth;
+/* TeX also uses italic_correction and glyph variants below */
+/* For the 'MATH' table (and for TeX) */
+ unsigned int is_extended_shape: 1;
+ int16 italic_correction;
+ int16 top_accent_horiz; /* MATH table allows you to specific a*/
+ /* horizontal anchor for accent attachments, vertical */
+ /* positioning is done elsewhere */
+ DeviceTable *italic_adjusts;
+ DeviceTable *top_accent_adjusts;
+ struct glyphvariants *vert_variants;
+ struct glyphvariants *horiz_variants;
+ struct mathkern *mathkern;
+/* End of MATH/TeX fields */
+#ifndef _NO_PYTHON
+ void *python_sc_object;
+ void *python_temporary;
+#endif
+#if 0
+ // Python persistent data is now in the layers.
+ void *python_persistent; /* If python this will hold a python object, if not python this will hold a string containing a pickled object. We do nothing with it (if not python) except save it back out unchanged */
+ int python_persistent_has_lists;
+#endif // 0
+ /* If the glyph is used as a tile pattern, then the next two values */
+ /* determine the amount of white space around the tile. If extra is*/
+ /* non-zero then we add it to the max components of the bbox and */
+ /* subtract it from the min components. If extra is 0 then tile_bounds*/
+ /* will be used. If tile_bounds is all zeros then the glyph's bbox */
+ /* will be used. */
+ real tile_margin; /* If the glyph is used as a tile */
+ DBounds tile_bounds;
+ char * glif_name; // This stores the base name of the glyph when saved to U. F. O..
+} SplineChar;
+
+#define TEX_UNDEF 0x7fff
+
+enum ttfnames { ttf_copyright=0, ttf_family, ttf_subfamily, ttf_uniqueid,
+ ttf_fullname, ttf_version, ttf_postscriptname, ttf_trademark,
+ ttf_manufacturer, ttf_designer, ttf_descriptor, ttf_venderurl,
+ ttf_designerurl, ttf_license, ttf_licenseurl, ttf_idontknow/*reserved*/,
+ ttf_preffamilyname, ttf_prefmodifiers, ttf_compatfull, ttf_sampletext,
+ ttf_cidfindfontname, ttf_wwsfamily, ttf_wwssubfamily, ttf_namemax };
+struct ttflangname {
+ int lang;
+ char *names[ttf_namemax]; /* in utf8 */
+ int frommac[(ttf_namemax+31)/32]; /* Used when parsing the 'name' table */
+ struct ttflangname *next;
+};
+
+struct MATH {
+/* From the MATH Constants subtable (constants for positioning glyphs. Not PI)*/
+ int16 ScriptPercentScaleDown;
+ int16 ScriptScriptPercentScaleDown;
+ uint16 DelimitedSubFormulaMinHeight;
+ uint16 DisplayOperatorMinHeight;
+ int16 MathLeading;
+ DeviceTable *MathLeading_adjust;
+ int16 AxisHeight;
+ DeviceTable *AxisHeight_adjust;
+ int16 AccentBaseHeight;
+ DeviceTable *AccentBaseHeight_adjust;
+ int16 FlattenedAccentBaseHeight;
+ DeviceTable *FlattenedAccentBaseHeight_adjust;
+ int16 SubscriptShiftDown;
+ DeviceTable *SubscriptShiftDown_adjust;
+ int16 SubscriptTopMax;
+ DeviceTable *SubscriptTopMax_adjust;
+ int16 SubscriptBaselineDropMin;
+ DeviceTable *SubscriptBaselineDropMin_adjust;
+ int16 SuperscriptShiftUp;
+ DeviceTable *SuperscriptShiftUp_adjust;
+ int16 SuperscriptShiftUpCramped;
+ DeviceTable *SuperscriptShiftUpCramped_adjust;
+ int16 SuperscriptBottomMin;
+ DeviceTable *SuperscriptBottomMin_adjust;
+ int16 SuperscriptBaselineDropMax;
+ DeviceTable *SuperscriptBaselineDropMax_adjust;
+ int16 SubSuperscriptGapMin;
+ DeviceTable *SubSuperscriptGapMin_adjust;
+ int16 SuperscriptBottomMaxWithSubscript;
+ DeviceTable *SuperscriptBottomMaxWithSubscript_adjust;
+ int16 SpaceAfterScript;
+ DeviceTable *SpaceAfterScript_adjust;
+ int16 UpperLimitGapMin;
+ DeviceTable *UpperLimitGapMin_adjust;
+ int16 UpperLimitBaselineRiseMin;
+ DeviceTable *UpperLimitBaselineRiseMin_adjust;
+ int16 LowerLimitGapMin;
+ DeviceTable *LowerLimitGapMin_adjust;
+ int16 LowerLimitBaselineDropMin;
+ DeviceTable *LowerLimitBaselineDropMin_adjust;
+ int16 StackTopShiftUp;
+ DeviceTable *StackTopShiftUp_adjust;
+ int16 StackTopDisplayStyleShiftUp;
+ DeviceTable *StackTopDisplayStyleShiftUp_adjust;
+ int16 StackBottomShiftDown;
+ DeviceTable *StackBottomShiftDown_adjust;
+ int16 StackBottomDisplayStyleShiftDown;
+ DeviceTable *StackBottomDisplayStyleShiftDown_adjust;
+ int16 StackGapMin;
+ DeviceTable *StackGapMin_adjust;
+ int16 StackDisplayStyleGapMin;
+ DeviceTable *StackDisplayStyleGapMin_adjust;
+ int16 StretchStackTopShiftUp;
+ DeviceTable *StretchStackTopShiftUp_adjust;
+ int16 StretchStackBottomShiftDown;
+ DeviceTable *StretchStackBottomShiftDown_adjust;
+ int16 StretchStackGapAboveMin;
+ DeviceTable *StretchStackGapAboveMin_adjust;
+ int16 StretchStackGapBelowMin;
+ DeviceTable *StretchStackGapBelowMin_adjust;
+ int16 FractionNumeratorShiftUp;
+ DeviceTable *FractionNumeratorShiftUp_adjust;
+ int16 FractionNumeratorDisplayStyleShiftUp;
+ DeviceTable *FractionNumeratorDisplayStyleShiftUp_adjust;
+ int16 FractionDenominatorShiftDown;
+ DeviceTable *FractionDenominatorShiftDown_adjust;
+ int16 FractionDenominatorDisplayStyleShiftDown;
+ DeviceTable *FractionDenominatorDisplayStyleShiftDown_adjust;
+ int16 FractionNumeratorGapMin;
+ DeviceTable *FractionNumeratorGapMin_adjust;
+ int16 FractionNumeratorDisplayStyleGapMin;
+ DeviceTable *FractionNumeratorDisplayStyleGapMin_adjust;
+ int16 FractionRuleThickness;
+ DeviceTable *FractionRuleThickness_adjust;
+ int16 FractionDenominatorGapMin;
+ DeviceTable *FractionDenominatorGapMin_adjust;
+ int16 FractionDenominatorDisplayStyleGapMin;
+ DeviceTable *FractionDenominatorDisplayStyleGapMin_adjust;
+ int16 SkewedFractionHorizontalGap;
+ DeviceTable *SkewedFractionHorizontalGap_adjust;
+ int16 SkewedFractionVerticalGap;
+ DeviceTable *SkewedFractionVerticalGap_adjust;
+ int16 OverbarVerticalGap;
+ DeviceTable *OverbarVerticalGap_adjust;
+ int16 OverbarRuleThickness;
+ DeviceTable *OverbarRuleThickness_adjust;
+ int16 OverbarExtraAscender;
+ DeviceTable *OverbarExtraAscender_adjust;
+ int16 UnderbarVerticalGap;
+ DeviceTable *UnderbarVerticalGap_adjust;
+ int16 UnderbarRuleThickness;
+ DeviceTable *UnderbarRuleThickness_adjust;
+ int16 UnderbarExtraDescender;
+ DeviceTable *UnderbarExtraDescender_adjust;
+ int16 RadicalVerticalGap;
+ DeviceTable *RadicalVerticalGap_adjust;
+ int16 RadicalDisplayStyleVerticalGap;
+ DeviceTable *RadicalDisplayStyleVerticalGap_adjust;
+ int16 RadicalRuleThickness;
+ DeviceTable *RadicalRuleThickness_adjust;
+ int16 RadicalExtraAscender;
+ DeviceTable *RadicalExtraAscender_adjust;
+ int16 RadicalKernBeforeDegree;
+ DeviceTable *RadicalKernBeforeDegree_adjust;
+ int16 RadicalKernAfterDegree;
+ DeviceTable *RadicalKernAfterDegree_adjust;
+ uint16 RadicalDegreeBottomRaisePercent;
+/* Global constants from other subtables */
+ uint16 MinConnectorOverlap; /* in the math variants sub-table */
+};
+
+enum backedup_state { bs_dontknow=0, bs_not=1, bs_backedup=2 };
+enum loadvalidation_state {
+ lvs_bad_ps_fontname = 0x001,
+ lvs_bad_glyph_table = 0x002,
+ lvs_bad_cff_table = 0x004,
+ lvs_bad_metrics_table = 0x008,
+ lvs_bad_cmap_table = 0x010,
+ lvs_bad_bitmaps_table = 0x020,
+ lvs_bad_gx_table = 0x040,
+ lvs_bad_ot_table = 0x080,
+ lvs_bad_os2_version = 0x100,
+ lvs_bad_sfnt_header = 0x200
+ };
+
+typedef struct layerinfo {
+ char *name;
+ unsigned int background: 1; /* Layer is to be treated as background: No width, images, not worth outputting */
+ unsigned int order2: 1; /* Layer's data are order 2 bezier splines (truetype) rather than order 3 (postscript) */
+ /* In all glyphs in the font */
+ unsigned int ticked: 1;
+ char * ufo_path;
+} LayerInfo;
+
+/* Baseline data from the 'BASE' table */
+struct baselangextent {
+ uint32 lang; /* also used for feature tag */
+ struct baselangextent *next;
+ int16 ascent, descent;
+ struct baselangextent *features;
+};
+
+struct basescript {
+ uint32 script;
+ struct basescript *next;
+ int def_baseline; /* index [0-baseline_cnt) */
+ int16 *baseline_pos; /* baseline_cnt of these */
+ struct baselangextent *langs; /* Language specific extents (may be NULL) */
+ /* The default one has the tag DEFAULT_LANG */
+};
+
+struct Base {
+ int baseline_cnt;
+ uint32 *baseline_tags;
+ /* A font does not need to provide info on all baselines, but if one script */
+ /* talks about a baseline, then all must. So the set of baselines is global*/
+ struct basescript *scripts;
+};
+
+struct pfminfo { /* A misnomer now. OS/2 info would be more accurate, but that's stuff in here from all over ttf files */
+ unsigned int pfmset: 1;
+ unsigned int winascent_add: 1;
+ unsigned int windescent_add: 1;
+ unsigned int hheadascent_add: 1;
+ unsigned int hheaddescent_add: 1;
+ unsigned int typoascent_add: 1;
+ unsigned int typodescent_add: 1;
+ unsigned int subsuper_set: 1;
+ unsigned int panose_set: 1;
+ unsigned int hheadset: 1;
+ unsigned int vheadset: 1;
+ unsigned int hascodepages: 1;
+ unsigned int hasunicoderanges: 1;
+ unsigned char pfmfamily;
+ int16 weight;
+ int16 width;
+ char panose[10];
+ /* A subset of OS/2 fsSelection, used for style mapping. */
+ /* Must agree with macStyle per otspec, takes precedence. */
+ /* Can't use macStyle because it doesn't have a "regular" bit unlike the OS/2 component. */
+ int16 stylemap;
+ int16 fstype;
+ int16 linegap; /* from hhea */
+ int16 vlinegap; /* from vhea */
+ int16 hhead_ascent, hhead_descent;
+ int16 os2_typoascent, os2_typodescent, os2_typolinegap;
+ int16 os2_winascent, os2_windescent;
+ int16 os2_subxsize, os2_subysize, os2_subxoff, os2_subyoff;
+ int16 os2_supxsize, os2_supysize, os2_supxoff, os2_supyoff;
+ int16 os2_strikeysize, os2_strikeypos;
+ int16 os2_capheight, os2_xheight;
+ char os2_vendor[4];
+ int16 os2_family_class;
+ uint32 codepages[2];
+ uint32 unicoderanges[4];
+};
+
+struct ttf_table {
+ uint32 tag;
+ uint32 len, maxlen;
+ uint8 *data;
+ struct ttf_table *next;
+ FILE *temp; /* Temporary storage used during generation */
+};
+
+enum texdata_type { tex_unset, tex_text, tex_math, tex_mathext };
+
+struct texdata {
+ enum texdata_type type;
+ int32 params[22]; /* param[6] has different meanings in normal and math fonts */
+};
+
+struct gasp {
+ uint16 ppem;
+ uint16 flags;
+};
+
+struct ff_glyphclasses {
+ // This matches struct glyphclasses from featurefile.c for now. We may make the references numeric in the future.
+ // There may be a matching entry as a class elsewhere. For now, the output driver is responsible for eliminating duplicates.
+ // In the interest of preserving orderings, we shall output from here, checking for value overrides from kerning classes on each kerning group entry.
+ char *classname, *glyphs;
+ struct ff_glyphclasses *next;
+};
+
+struct ff_rawoffsets {
+ // This stores raw offsets as read from kerning.plist.
+ // FontForge shall output these after native data and shall output only those for which it has not emitted native data.
+ char *left;
+ char *right;
+ int offset;
+ struct ff_rawoffsets *next;
+};
+
+typedef struct splinefont {
+ char *fontname, *fullname, *familyname, *weight;
+ char *familyname_with_timestamp;
+ char *copyright;
+ char *filename; /* sfd name. NULL if we open a font, that's origname */
+ char *defbasefilename;
+ char *version;
+ real italicangle, upos, uwidth; /* In font info */
+ int ascent, descent, invalidem; // If invalidem, then we use the format-specific ascent and descent on export.
+ int uniqueid; /* Not copied when reading in!!!! */
+ int glyphcnt, glyphmax; /* allocated size of glyphs array */
+ SplineChar **glyphs;
+ unsigned int changed: 1;
+ unsigned int changed_since_autosave: 1;
+ unsigned int changed_since_xuidchanged: 1;
+ unsigned int display_antialias: 1;
+ unsigned int display_bbsized: 1;
+ unsigned int dotlesswarn: 1; /* User warned that font doesn't have a dotless i character */
+ unsigned int serifcheck: 1; /* Have we checked to see if we have serifs? */
+ unsigned int issans: 1; /* We have no serifs */
+ unsigned int isserif: 1; /* We have serifs. If neither set then we don't know. */
+ unsigned int hasvmetrics: 1; /* We've got vertical metric data and should output vhea/vmtx/VORG tables */
+ unsigned int loading_cid_map: 1;
+ unsigned int dupnamewarn: 1; /* Warn about duplicate names when loading bdf font */
+ unsigned int encodingchanged: 1; /* Font's encoding has changed since it was loaded */
+ unsigned int multilayer: 1; /* only applies if TYPE3 is set, means this font can contain strokes & fills */
+ /* I leave it in so as to avoid cluttering up code with #ifdefs */
+ unsigned int strokedfont: 1;
+ unsigned int new: 1; /* A new and unsaved font */
+ unsigned int compacted: 1; /* only used when opening a font */
+ unsigned int backedup: 2; /* 0=>don't know, 1=>no, 2=>yes */
+ unsigned int use_typo_metrics: 1; /* The standard says to. But MS */
+ /* seems to feel that isn't good */
+ /* enough and has created a bit */
+ /* to mean "really use them" */
+ unsigned int weight_width_slope_only: 1; /* This bit seems stupid to me */
+ unsigned int save_to_dir: 1; /* Loaded from an sfdir collection rather than a simple sfd file */
+ unsigned int head_optimized_for_cleartype: 1;/* Bit in the 'head' flags field, if unset "East Asian fonts in the Windows Presentation Framework (Avalon) will not be hinted" */
+ unsigned int ticked: 1;
+ unsigned int internal_temp: 1; /* Internal temporary font to be passed to freetype for rasterizing. Don't complain about oddities. Don't generate GPOS/GSUB tables, etc. */
+ unsigned int complained_about_spiros: 1;
+ unsigned int use_xuid: 1; /* Adobe has deprecated these two */
+ unsigned int use_uniqueid: 1; /* fields. Mostly we don't want to use them */
+ /* 2 bits left */
+ struct metricsview *metrics;
+ enum uni_interp uni_interp;
+ NameList *for_new_glyphs;
+ EncMap *map; /* only used when opening a font to provide original default encoding */
+ Layer grid;
+ char *origname; /* filename of font file (ie. if not an sfd) */
+ char *autosavename;
+ int display_size; /* a val <0 => Generate our own images from splines, a value >0 => find a bdf font of that size */
+ struct psdict *private; /* read in from type1 file or provided by user */
+ char *xuid;
+ struct pfminfo pfminfo;
+ struct ttflangname *names;
+ char *cidregistry, *ordering;
+ int supplement;
+ int subfontcnt;
+ struct splinefont **subfonts;
+ struct splinefont *cidmaster; /* Top level cid font */
+ float cidversion;
+#if HANYANG
+ struct compositionrules *rules;
+#endif
+ char *comments; /* Used to be restricted to ASCII, now utf8 */
+ char *fontlog;
+ int tempuniqueid;
+ int top_enc;
+ uint16 desired_row_cnt, desired_col_cnt;
+ struct glyphnamehash *glyphnames;
+ struct ttf_table *ttf_tables, *ttf_tab_saved;
+ /* We copy: fpgm, prep, cvt, maxp (into ttf_tables) user can ask for others, into saved*/
+ char **cvt_names;
+ /* The end of this array is marked by a special entry: */
+#define END_CVT_NAMES ((char *) (~(intpt) 0))
+ struct instrdata *instr_dlgs; /* Pointer to all table and character instruction dlgs in this font */
+ struct shortview *cvt_dlg;
+ struct kernclasslistdlg *kcld, *vkcld;
+ struct kernclassdlg *kcd;
+ struct texdata texdata;
+ OTLookup *gsub_lookups, *gpos_lookups;
+ /* Apple morx subtables become gsub, and kern subtables become gpos */
+ AnchorClass *anchor;
+ KernClass *kerns, *vkerns;
+ FPST *possub;
+ ASM *sm; /* asm is a keyword */
+ MacFeat *features;
+ char *chosenname; /* Set for files with multiple fonts in them */
+ struct mmset *mm; /* If part of a multiple master set */
+ int16 macstyle;
+ char *fondname; /* For use in generating mac families */
+ /* from the GPOS 'size' feature. design_size, etc. are measured in tenths of a point */
+ /* bottom is exclusive, top is inclusive */
+ /* if any field is 0, it is undefined. All may be undefined, All may be */
+ /* defined, or design_size may be defined without any of the others */
+ /* but we can't define the range without defining the other junk */
+ /* Name must contain an English language name, may contain others */
+ uint16 design_size;
+ uint16 fontstyle_id;
+ struct otfname *fontstyle_name;
+ uint16 design_range_bottom, design_range_top;
+ struct otffeatname *feat_names;
+ real strokewidth;
+/* For GDEF Mark Attachment Class -- used in lookup flags */
+/* As usual, class 0 is unused */
+ int mark_class_cnt;
+ char **mark_classes; /* glyph name list */
+ char **mark_class_names; /* used within ff, utf8 (the name we've given to this class of marks) */
+/* For GDEF Mark Attachment Sets -- used in lookup flags */
+/* but here, set 0 is meaningful, since pst_usemarkfilteringset tells us */
+ int mark_set_cnt;
+ char **mark_sets; /* glyph name list */
+ char **mark_set_names; /* used within ff, utf8 (the name we've given to this class of marks) */
+ struct ff_glyphclasses *groups; // This stores arbitrary named character lists for use in kerning or in the feature file.
+ struct ff_rawoffsets *groupkerns;
+ struct ff_rawoffsets *groupvkerns;
+ long long creationtime; /* seconds since 1970 */
+ long long modificationtime;
+ short os2_version; /* 0 means default rather than the real version 0 */
+ short compression; /* If we opened a compressed sfd file, then save it out compressed too */
+ short gasp_version; /* 0/1 currently */
+ short gasp_cnt;
+ struct gasp *gasp;
+ struct MATH *MATH;
+ float sfd_version; /* Used only when reading in an sfd file */
+ struct gfi_data *fontinfo;
+ struct val_data *valwin;
+#if !defined(_NO_PYTHON)
+ void *python_temporary;
+#endif
+ void *python_persistent; /* If python this will hold a python object, if not python this will hold a string containing a pickled object. We do nothing with it (if not python) except save it back out unchanged */
+ int python_persistent_has_lists; // This affects whether arrays exist as tuples or as lists (thus allowing us to use tuples for foreign data).
+ enum loadvalidation_state loadvalidation_state;
+ LayerInfo *layers;
+ int layer_cnt;
+ int display_layer;
+ struct Base *horiz_base, *vert_base;
+ Justify *justify;
+ int extrema_bound; /* Splines do not count for extrema complaints when the distance between the endpoints is less than or equal to this */
+ int width_separation;
+ int sfntRevision;
+#define sfntRevisionUnset 0x44445555
+ int woffMajor;
+#define woffUnset 0x4455
+ int woffMinor;
+ char *woffMetadata;
+ real ufo_ascent, ufo_descent; /* I don't know what these mean, they don't seem to correspond to any other ascent/descent pair, but retain them so round-trip ufo input/output leaves them unchanged */
+ /* ufo_descent is negative */
+ char *styleMapFamilyName;
+ struct sfundoes *undoes;
+ char collab_uuid[ FF_UUID_STRING_SIZE ];
+ int preferred_kerning; // 1 for U. F. O. native, 2 for feature file, 0 undefined. Input functions shall flag 2, I think. This is now in S. F. D. in order to round-trip U. F. O. consistently.
+} SplineFont;
+
+struct axismap {
+ int points; /* size of the next two arrays */
+ real *blends; /* between [0,1] ordered so that blend[0]<blend[1]<... */
+ real *designs; /* between the design ranges for this axis, typically [1,999] or [6,72] */
+ real min, def, max; /* For mac */
+ struct macname *axisnames; /* For mac */
+};
+
+struct named_instance { /* For mac */
+ real *coords; /* array[axis], these are in user units */
+ struct macname *names;
+};
+
+/* I am going to simplify my life and not encourage intermediate designs */
+/* this means I can easily calculate ConvertDesignVector, and don't have */
+/* to bother the user with specifying it. */
+/* (NormalizeDesignVector is fairly basic and shouldn't need user help ever) */
+/* (As long as they want piecewise linear) */
+/* I'm not going to support intermediate designs at all for apple var tables */
+typedef struct mmset {
+ int axis_count;
+ char *axes[4];
+ int instance_count;
+ SplineFont **instances;
+ SplineFont *normal;
+ real *positions; /* array[instance][axis] saying where each instance lies on each axis */
+ real *defweights; /* array[instance] saying how much of each instance makes the normal font */
+ /* for adobe */
+ struct axismap *axismaps; /* array[axis] */
+ char *cdv, *ndv; /* for adobe */
+ int named_instance_count;
+ struct named_instance *named_instances;
+ unsigned int changed: 1;
+ unsigned int apple: 1;
+} MMSet;
+
+/* mac styles. Useful idea we'll just steal it */
+enum style_flags { sf_bold = 1, sf_italic = 2, sf_underline = 4, sf_outline = 8,
+ sf_shadow = 0x10, sf_condense = 0x20, sf_extend = 0x40 };
+
+struct sflist {
+ SplineFont *sf;
+ int32 *sizes;
+ FILE *tempttf; /* For ttf */
+ int id; /* For ttf */
+ int* ids; /* One for each size */
+ BDFFont **bdfs; /* Ditto */
+ EncMap *map;
+ struct sflist *next;
+ char **former_names;
+ int len;
+};
+
+ /* Used for drawing text with mark to base anchors */
+typedef struct anchorpos {
+ SplineChar *sc; /* This is the mark being positioned */
+ int x,y; /* Its origin should be shifted this much relative to that of the original base char */
+ AnchorPoint *apm; /* The anchor point in sc used to position it */
+ AnchorPoint *apb; /* The anchor point in the base character against which we are positioned */
+ int base_index; /* Index in this array to the base character (-1=> original base char) */
+ unsigned int ticked: 1; /* Used as a mark to mark */
+} AnchorPos;
+
+enum ttf_flags { ttf_flag_shortps = 1, ttf_flag_nohints = 2,
+ ttf_flag_applemode=4,
+ ttf_flag_pfed_comments=8, ttf_flag_pfed_colors=0x10,
+ ttf_flag_otmode=0x20,
+ ttf_flag_glyphmap=0x40,
+ ttf_flag_TeXtable=0x80,
+ ttf_flag_ofm=0x100,
+ ttf_flag_oldkern=0x200, /* never set in conjunction with applemode */
+ ttf_flag_pfed_lookupnames=0x800,
+ ttf_flag_pfed_guides=0x1000,
+ ttf_flag_pfed_layers=0x2000,
+ ttf_flag_symbol=0x4000,
+ ttf_flag_dummyDSIG=0x8000,
+ ttf_native_kern=0x10000, // This applies mostly to U. F. O. right now.
+ ttf_flag_oldkernmappedonly=0x20000000 // Allow only mapped glyphs in the old-style "kern" table, required for Windows compatibility
+ };
+enum ttc_flags { ttc_flag_trymerge=0x1, ttc_flag_cff=0x2 };
+enum openflags { of_fstypepermitted=1, of_askcmap=2, of_all_glyphs_in_ttc=4,
+ of_fontlint=8, of_hidewindow=0x10, of_all_tables=0x20 };
+enum ps_flags { ps_flag_nohintsubs = 0x10000, ps_flag_noflex=0x20000,
+ ps_flag_nohints = 0x40000, ps_flag_restrict256=0x80000,
+ ps_flag_afm = 0x100000, ps_flag_pfm = 0x200000,
+ ps_flag_tfm = 0x400000,
+ ps_flag_round = 0x800000,
+/* CFF fonts are wrapped up in some postscript sugar -- unless they are to */
+/* go into a pdf file or an otf font */
+ ps_flag_nocffsugar = 0x1000000,
+/* in type42 cid fonts we sometimes want an identity map from gid to cid */
+ ps_flag_identitycidmap = 0x2000000,
+ ps_flag_afmwithmarks = 0x4000000,
+ ps_flag_noseac = 0x8000000,
+ ps_flag_outputfontlog = 0x10000000,
+ ps_flag_mask = (ps_flag_nohintsubs|ps_flag_noflex|
+ ps_flag_afm|ps_flag_pfm|ps_flag_tfm|ps_flag_round)
+ };
+
+struct compressors { char *ext, *decomp, *recomp; };
+#define COMPRESSORS_EMPTY { NULL, NULL, NULL }
+extern struct compressors compressors[];
+
+enum archive_list_style { ars_tar, ars_zip };
+
+#define ARCHIVERS_EMPTY { NULL, NULL, NULL, NULL, NULL, NULL, 0 }
+
+struct fontdict;
+struct pschars;
+struct findsel;
+struct charprocs;
+struct enc;
+
+#define chunkalloc(size) calloc(1,size)
+#define chunkfree(item,size) free(item)
+
+extern int SFOneWidth(SplineFont *sf);
+extern int CIDOneWidth(SplineFont *sf);
+
+enum fontformat { ff_pfa, ff_pfb, ff_pfbmacbin, ff_multiple, ff_mma, ff_mmb,
+ ff_ptype3, ff_ptype0, ff_cid, ff_cff, ff_cffcid,
+ ff_type42, ff_type42cid,
+ ff_ttf, ff_ttfsym, ff_ttfmacbin, ff_ttc, ff_ttfdfont, ff_otf, ff_otfdfont,
+ ff_otfcid, ff_otfciddfont, ff_svg, ff_ufo, ff_woff, ff_none };
+struct cidbytes;
+struct fd2data;
+struct ttfinfo;
+struct alltabs;
+
+typedef struct growbuf {
+ unsigned char *pt;
+ unsigned char *base;
+ unsigned char *end;
+} GrowBuf;
+extern void GrowBuffer(GrowBuf *gb);
+
+struct glyphdata;
+extern int UnitsParallel(BasePoint *u1,BasePoint *u2,int strict);
+extern int CvtPsStem3(struct growbuf *gb, SplineChar *scs[MmMax], int instance_count,
+ int ishstem, int round);
+extern struct pschars *SplineFont2ChrsSubrs2(SplineFont *sf, int nomwid,
+ int defwid, const int *bygid, int cnt, int flags,
+ struct pschars **_subrs,int layer);
+extern struct pschars *CID2ChrsSubrs2(SplineFont *cidmaster,struct fd2data *fds,
+ int flags, struct pschars **_glbls,int layer);
+enum bitmapformat { bf_bdf, bf_ttf, bf_sfnt_dfont, bf_sfnt_ms, bf_otb,
+ bf_nfntmacbin, /*bf_nfntdfont, */bf_fon, bf_fnt, bf_palm,
+ bf_ptype3,
+ bf_none };
+extern int32 filechecksum(FILE *file);
+extern int _WriteWOFFFont(FILE *ttf,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer);
+extern int WriteWOFFFont(char *fontname,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer);
+extern int _WriteTTFFont(FILE *ttf,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer);
+extern int WriteTTFFont(char *fontname,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer);
+extern int _WriteType42SFNTS(FILE *type42,SplineFont *sf,enum fontformat format,
+ int flags,EncMap *enc,int layer);
+extern int WriteMacTTFFont(char *fontname,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer);
+extern int WriteMacFamily(char *filename,struct sflist *sfs,enum fontformat format,
+ enum bitmapformat bf,int flags,int layer);
+extern int WriteTTC(const char *filename,struct sflist *sfs,enum fontformat format,
+ enum bitmapformat bf,int flags,int layer,enum ttc_flags ttcflags);
+extern long mactime(void);
+extern void DefaultTTFEnglishNames(struct ttflangname *dummy, SplineFont *sf);
+extern int AlreadyMSSymbolArea(SplineFont *sf,EncMap *map);
+extern void OS2FigureCodePages(SplineFont *sf, uint32 CodePage[2]);
+extern void OS2FigureUnicodeRanges(SplineFont *sf, uint32 Ranges[4]);
+extern void SFDefaultOS2Info(struct pfminfo *pfminfo,SplineFont *sf,char *fontname);
+extern void SFDefaultOS2Simple(struct pfminfo *pfminfo,SplineFont *sf);
+extern void SFDefaultOS2SubSuper(struct pfminfo *pfminfo,int emsize,double italicangle);
+extern int ScriptIsRightToLeft(uint32 script);
+extern uint32 ScriptFromUnicode(uint32 u,SplineFont *sf);
+extern uint32 SCScriptFromUnicode(SplineChar *sc);
+extern int SCRightToLeft(SplineChar *sc);
+extern void SFMatchGlyphs(SplineFont *sf,SplineFont *target,int addempties);
+extern void MMMatchGlyphs(MMSet *mm);
+extern const char *_GetModifiers(const char *fontname, const char *familyname, const char *weight);
+extern const char *SFGetModifiers(const SplineFont *sf);
+
+extern int Within4RoundingErrors(bigreal v1, bigreal v2);
+extern int Within16RoundingErrors(bigreal v1, bigreal v2);
+extern int RealNear(real a,real b);
+extern int RealNearish(real a,real b);
+extern int RealApprox(real a,real b);
+extern int RealWithin(real a,real b,real fudge);
+
+extern int PointsDiagonalable(SplineFont *sf,BasePoint **bp,BasePoint *unit);
+extern int MergeDStemInfo(SplineFont *sf,DStemInfo **ds, DStemInfo *test);
+
+extern void LineListFree(LineList *ll);
+extern void LinearApproxFree(LinearApprox *la);
+extern void SplineFree(Spline *spline);
+extern SplinePoint *SplinePointCreate(real x, real y);
+extern void SplinePointFree(SplinePoint *sp);
+extern void SplinePointsFree(SplinePointList *spl);
+extern void SplinePointListFree(SplinePointList *spl);
+extern void SplinePointListsFree(SplinePointList *head);
+extern void SplineSetSpirosClear(SplineSet *spl);
+extern void RefCharFree(RefChar *ref);
+extern void RefCharsFree(RefChar *ref);
+extern void StemInfosFree(StemInfo *h);
+extern void StemInfoFree(StemInfo *h);
+extern void DStemInfosFree(DStemInfo *h);
+extern void DStemInfoFree(DStemInfo *h);
+extern void KernPairsFree(KernPair *kp);
+extern void AnchorPointsFree(AnchorPoint *ap);
+extern void AnchorClassesFree(AnchorClass *kp);
+extern void TtfTablesFree(struct ttf_table *tab);
+extern void ValDevFree(ValDevTab *adjust);
+extern void DeviceTableFree(DeviceTable *adjust);
+extern void PSTFree(PST *lig);
+
+struct lookup_cvt { OTLookup *from, *to; int old;};
+struct sub_cvt { struct lookup_subtable *from, *to; int old;};
+struct ac_cvt { AnchorClass *from, *to; int old;};
+
+extern void TTFLangNamesFree(struct ttflangname *l);
+extern void AltUniFree(struct altuni *altuni);
+extern void AltUniFigure(SplineFont *sf,EncMap *map,int check_dups);
+extern void AltUniAdd(SplineChar *sc,int uni);
+extern void AltUniAdd_DontCheckDups(SplineChar *sc,int uni);
+extern void MinimumDistancesFree(MinimumDistance *md);
+extern void LayerDefault(Layer *);
+extern SplineChar *SplineCharCreate(int layer_cnt);
+extern SplineChar *SFSplineCharCreate(SplineFont *sf);
+extern RefChar *RefCharCreate(void);
+extern void KernClassFreeContents(KernClass *kc);
+extern void KernClassClearSpecialContents(KernClass *kc);
+extern void KernClassListFree(KernClass *kc);
+extern void KernClassListClearSpecialContents(KernClass *kc);
+extern void OTLookupFree(OTLookup *lookup);
+extern void OTLookupListFree(OTLookup *lookup );
+extern void FPSTRuleContentsFree(struct fpst_rule *r, enum fpossub_format format);
+extern void FPSTClassesFree(FPST *fpst);
+extern void FPSTFree(FPST *fpst);
+extern void ASMFree(ASM *sm);
+extern void MacNameListFree(struct macname *mn);
+extern void MacSettingListFree(struct macsetting *ms);
+extern void MacFeatListFree(MacFeat *mf);
+extern void GlyphVariantsFree(struct glyphvariants *gv);
+extern void MathKernVContentsFree(struct mathkernvertex *mk);
+extern void MathKernFree(struct mathkern *mk);
+extern void SplineCharListsFree(struct splinecharlist *dlist);
+extern void LayerFreeContents(SplineChar *sc, int layer);
+extern void SplineCharFreeContents(SplineChar *sc);
+extern void SplineCharFree(SplineChar *sc);
+extern void EncMapFree(EncMap *map);
+extern EncMap *EncMapFromEncoding(SplineFont *sf,Encoding *enc);
+extern EncMap *EncMapNew(int encmax, int backmax, Encoding *enc);
+extern EncMap *EncMap1to1(int enccount);
+extern void ScriptLangListFree(struct scriptlanglist *sl);
+extern void FeatureScriptLangListFree(FeatureScriptLangList *fl);
+extern void SFBaseSort(SplineFont *sf);
+extern struct baselangextent *BaseLangCopy(struct baselangextent *extent);
+extern void BaseLangFree(struct baselangextent *extent);
+extern void BaseScriptFree(struct basescript *bs);
+extern void BaseFree(struct Base *base);
+extern void SplineFontFree(SplineFont *sf);
+extern void SplineFontClearSpecial(SplineFont *sf);
+
+#if 1
+// These relate to experimental support for U. F. O. groups.
+#define GROUP_NAME_KERNING_UFO 1
+#define GROUP_NAME_KERNING_FEATURE 2
+#define GROUP_NAME_VERTICAL 4 // Otherwise horizontal.
+#define GROUP_NAME_RIGHT 8 // Otherwise left (or above).
+
+void GlyphGroupFree(struct ff_glyphclasses* group);
+void GlyphGroupsFree(struct ff_glyphclasses* root);
+void GlyphGroupKernFree(struct ff_rawoffsets* groupkern);
+void GlyphGroupKernsFree(struct ff_rawoffsets* root);
+#ifdef FF_UTHASH_GLIF_NAMES
+struct glif_name_index;
+int HashKerningClassNamesFlex(SplineFont *sf, struct glif_name_index * class_name_hash, int capitalize);
+int HashKerningClassNames(SplineFont *sf, struct glif_name_index * class_name_hash);
+int HashKerningClassNamesCaps(SplineFont *sf, struct glif_name_index * class_name_hash);
+#endif
+#endif // 1
+extern void JstfLangFree(struct jstf_lang *jl);
+extern void JustifyFree(Justify *just);
+extern void OtfNameListFree(struct otfname *on);
+extern void OtfFeatNameListFree(struct otffeatname *fn);
+extern struct otffeatname *findotffeatname(uint32 tag,SplineFont *sf);
+extern void MarkSetFree(int cnt,char **classes,char **names);
+extern void MarkClassFree(int cnt,char **classes,char **names);
+extern void MMSetFreeContents(MMSet *mm);
+extern void MMSetFree(MMSet *mm);
+extern void MMSetClearSpecial(MMSet *mm);
+extern void SplineRefigure3(Spline *spline);
+extern void SplineRefigure(Spline *spline);
+extern Spline *SplineMake3(SplinePoint *from, SplinePoint *to);
+extern int SplinePointListIsClockwise(const SplineSet *spl);
+extern void SplineCharLayerFindBounds(SplineChar *sc,int layer,DBounds *bounds);
+extern void SplineCharFindBounds(SplineChar *sc,DBounds *bounds);
+extern void SplineFontLayerFindBounds(SplineFont *sf,int layer,DBounds *bounds);
+extern void SplineFontFindBounds(SplineFont *sf,DBounds *bounds);
+extern void CIDLayerFindBounds(SplineFont *sf,int layer,DBounds *bounds);
+extern void SplineSetQuickBounds(SplineSet *ss,DBounds *b);
+extern void SplineCharLayerQuickBounds(SplineChar *sc,int layer,DBounds *bounds);
+extern void SplineCharQuickBounds(SplineChar *sc, DBounds *b);
+extern void SplinePointCategorize(SplinePoint *sp);
+extern void SPLCategorizePoints(SplinePointList *spl);
+extern SplinePointList *SplinePointListCopy1(const SplinePointList *spl);
+extern SplinePointList *SplinePointListCopy(const SplinePointList *base);
+extern void BpTransform(BasePoint *to, BasePoint *from, real transform[6]);
+/* The order of the enum elements below doesn't make much sense, but it's done*/
+/* this way to preserve binary compatibility */
+enum transformPointType { tpt_OnlySelected, tpt_AllPoints, tpt_OnlySelectedInterpCPs };
+/*
+ * As SplinePointListTransform() does a few things, this is a mask to selectively be
+ * able to disable some of them.
+ */
+enum transformPointMask {
+ tpmask_dontFixControlPoints = 1 << 1,
+ tpmask_operateOnSelectedBCP = 1 << 2
+};
+extern SplinePointList *SplinePointListTransform(SplinePointList *base, real transform[6], enum transformPointType allpoints );
+extern SplinePointList *SplinePointListTransformExtended(SplinePointList *base, real transform[6],
+ enum transformPointType tpt, enum transformPointMask tpmask );
+extern HintMask *HintMaskFromTransformedRef(RefChar *ref,BasePoint *trans,
+ SplineChar *basesc,HintMask *hm);
+extern SplinePointList *SPLCopyTranslatedHintMasks(SplinePointList *base,
+ SplineChar *basesc, SplineChar *subsc, BasePoint *trans);
+extern SplinePointList *SPLCopyTransformedHintMasks(RefChar *r,
+ SplineChar *basesc, BasePoint *trans,int layer);
+extern void RefCharFindBounds(RefChar *rf);
+extern void SCReinstanciateRefChar(SplineChar *sc,RefChar *rf,int layer);
+enum piecemeal_flags { pf_antialias=1, pf_bbsized=2, pf_ft_nohints=4, pf_ft_recontext=8 };
+#define STD_BDF_PROPS_EMPTY { NULL, 0, 0 }
+
+/* Two lines intersect in at most 1 point */
+/* Two quadratics intersect in at most 4 points */
+/* Two cubics intersect in at most 9 points */ /* Plus an extra space for a trailing -1 */
+extern int SplinesIntersect(const Spline *s1, const Spline *s2, BasePoint pts[9],
+ extended t1s[10], extended t2s[10]);
+extern int _CubicSolve(const Spline1D *sp,bigreal sought,extended ts[3]);
+extern int CubicSolve(const Spline1D *sp,bigreal sought,extended ts[3]);
+/* Uses an iterative approximation */
+extern extended IterateSplineSolve(const Spline1D *sp, extended tmin, extended tmax, extended sought_y);
+/* Uses an iterative approximation and then tries to fix things up */
+extern extended IterateSplineSolveFixup(const Spline1D *sp, extended tmin, extended tmax, extended sought_y);
+extern void SplineFindExtrema(const Spline1D *sp, extended *_t1, extended *_t2 );
+
+#define CURVATURE_ERROR -1e9
+extern bigreal SplineCurvature(Spline *s, bigreal t);
+
+extern double CheckExtremaForSingleBitErrors(const Spline1D *sp, double t, double othert);
+extern int Spline2DFindExtrema(const Spline *sp, extended extrema[4] );
+extern int Spline2DFindPointsOfInflection(const Spline *sp, extended poi[2] );
+extern void SplineRemoveExtremaTooClose(Spline1D *sp, extended *_t1, extended *_t2 );
+extern void SCMakeDependent(SplineChar *dependent,SplineChar *base);
+extern SplinePoint *SplineBisect(Spline *spline, extended t);
+extern bigreal SplineLength(Spline *spline);
+extern int SplineIsLinear(Spline *spline);
+extern int SPInterpolate(const SplinePoint *sp);
+enum ae_type { ae_all, ae_between_selected, ae_only_good, ae_only_good_rm_later };
+extern int SpIsExtremum(SplinePoint *sp);
+extern int Spline1DCantExtremeX(const Spline *s);
+extern int Spline1DCantExtremeY(const Spline *s);
+extern Spline *SplineAddExtrema(Spline *s,int always,real lenbound,
+ real offsetbound,DBounds *b);
+extern SplineFont *SplineFontEmpty(void);
+extern void SFIncrementXUID(SplineFont *sf);
+extern SplineSet *SplineSetReverse(SplineSet *spl);
+extern void BP_HVForce(BasePoint *vector);
+extern void SplineCharDefaultPrevCP(SplinePoint *base);
+extern void SplineCharDefaultNextCP(SplinePoint *base);
+extern void SplineCharTangentNextCP(SplinePoint *sp);
+extern void SplineCharTangentPrevCP(SplinePoint *sp);
+/**
+ * This is like SPAdjustControl but you have not wanting to move the
+ * BCP at all, but you would like the current location of the passed
+ * BCP to reshape the spline through the splinepoint. For example, if
+ * you drag the spline between two points then you might like to touch
+ * the inside BCP between the two splinepoints to reshape the whole
+ * curve through a curve point.
+ */
+extern void SPTouchControl(SplinePoint *sp,BasePoint *which, int order2);
+extern void SPAdjustControl(SplinePoint *sp,BasePoint *cp, BasePoint *to,int order2);
+
+extern SplineSet *SSttfApprox(SplineSet *ss);
+extern SplineSet *SSPSApprox(SplineSet *ss);
+extern SplineSet *SplineSetsPSApprox(SplineSet *ss);
+extern void SplineRefigure2(Spline *spline);
+extern void SplineRefigureFixup(Spline *spline);
+extern Spline *SplineMake2(SplinePoint *from, SplinePoint *to);
+extern Spline *SplineMake(SplinePoint *from, SplinePoint *to, int order2);
+extern void SCConvertToOrder2(SplineChar *sc);
+extern void SFConvertToOrder2(SplineFont *sf);
+extern int IntersectLines(BasePoint *inter,
+ BasePoint *line1_1, BasePoint *line1_2,
+ BasePoint *line2_1, BasePoint *line2_2);
+extern int IntersectLinesClip(BasePoint *inter,
+ BasePoint *line1_1, BasePoint *line1_2,
+ BasePoint *line2_1, BasePoint *line2_2);
+
+extern double BlueScaleFigureForced(struct psdict *private_,real bluevalues[], real otherblues[]);
+extern double BlueScaleFigure(struct psdict *private_,real bluevalues[], real otherblues[]);
+extern void FindBlues( SplineFont *sf, int layer, real blues[14], real otherblues[10]);
+extern void QuickBlues(SplineFont *sf, int layer, BlueData *bd);
+extern void FindHStems( SplineFont *sf, real snaps[12], real cnt[12]);
+extern void FindVStems( SplineFont *sf, real snaps[12], real cnt[12]);
+extern void SCGuessHintInstancesList(SplineChar *sc,int layer,StemInfo *hstem,StemInfo *vstem,DStemInfo *dstem,int hvforce,int dforce);
+extern real HIlen( StemInfo *stems);
+extern real HIoverlap( HintInstance *mhi, HintInstance *thi);
+extern int StemListAnyConflicts(StemInfo *stems);
+extern HintInstance *HICopyTrans(HintInstance *hi, real mul, real offset);
+
+typedef struct bluezone {
+ real base;
+ int cvtindex;
+ real family_base; /* NaN if none */
+ int family_cvtindex;
+ real overshoot; /* relative to baseline, NOT to base */
+ int highest; /* used in autoinstructing for HStem positioning */
+ int lowest; /* as above */
+} BlueZone;
+
+typedef struct stdstem {
+ real width; /* -1 if none */
+ int cvtindex;
+ struct stdstem *snapto;/* NULL means stem isn't snapped to any other */
+ int stopat; /* at which ppem stop snapping to snapto */
+} StdStem;
+
+typedef struct globalinstrct {
+ SplineFont *sf;
+ int layer;
+ BlueData *bd;
+ double fudge;
+
+ /* Did we initialize the tables needed? 'maxp' is skipped because */
+ /* its initialization always succeeds. */
+ int cvt_done;
+ int fpgm_done;
+ int prep_done;
+
+ /* PS private data with truetype-specific information added */
+ BlueZone blues[12]; /* like in BlueData */
+ int bluecnt;
+ StdStem stdhw;
+ StdStem *stemsnaph; /* StdHW excluded */
+ int stemsnaphcnt;
+ StdStem stdvw;
+ StdStem *stemsnapv; /* StdVW excluded */
+ int stemsnapvcnt;
+} GlobalInstrCt;
+
+extern void InitGlobalInstrCt( GlobalInstrCt *gic,SplineFont *sf,int layer,
+ BlueData *bd );
+extern void FreeGlobalInstrCt( GlobalInstrCt *gic );
+extern void NowakowskiSCAutoInstr( GlobalInstrCt *gic,SplineChar *sc );
+
+extern void SCClearHintMasks(SplineChar *sc,int layer,int counterstoo);
+extern void SCFigureHintMasks(SplineChar *sc,int layer);
+extern void _SplineCharAutoHint( SplineChar *sc, int layer, BlueData *bd, struct glyphdata *gd2, int gen_undoes );
+extern void SplineCharAutoHint( SplineChar *sc,int layer, BlueData *bd);
+extern void SFSCAutoHint( SplineChar *sc,int layer,BlueData *bd);
+extern void SplineFontAutoHint( SplineFont *sf, int layer);
+extern void SplineFontAutoHintRefs( SplineFont *sf, int layer);
+extern int SplineFontIsFlexible(SplineFont *sf,int layer, int flags);
+extern int SCDrawsSomething(SplineChar *sc);
+extern int SCWorthOutputting(SplineChar *sc);
+extern void SFLigaturePrepare(SplineFont *sf);
+extern void SFLigatureCleanup(SplineFont *sf);
+extern void SFKernClassTempDecompose(SplineFont *sf,int isv);
+extern void SFKernCleanup(SplineFont *sf,int isv);
+
+typedef struct sfd_getfontmetadatadata
+{
+
+ // these indicate if we saw some metadata or not.
+ // perhaps the caller wants to do something special
+ // if the metadata was present/missing.
+ int hadtimes;
+ int had_layer_cnt;
+
+ // state that is mostly interesting to SFD_GetFontMetaData() only
+ struct Base* last_base;
+ struct basescript* last_base_script;
+ OTLookup* lastpotl;
+ OTLookup* lastsotl;
+ KernClass* lastkc;
+ KernClass* lastvkc;
+ struct ff_glyphclasses* lastgroup;
+ struct ff_rawoffsets* lastgroupkern;
+ struct ff_rawoffsets* lastgroupvkern;
+ FPST* lastfp;
+ ASM* lastsm;
+ struct ttf_table* lastttf[2];
+
+} SFD_GetFontMetaDataData;
+extern void SFD_GetFontMetaDataData_Init( SFD_GetFontMetaDataData* d );
+extern bool SFD_GetFontMetaData( FILE *sfd,
+ char *tok,
+ SplineFont *sf,
+ SFD_GetFontMetaDataData* d );
+extern const char*FindUnicharName(void);
+extern Encoding *_FindOrMakeEncoding(const char *name,int make_it);
+extern Encoding *FindOrMakeEncoding(const char *name);
+extern MacFeat *SFDParseMacFeatures(FILE *sfd, char *tok);
+extern SplineFont *SFDRead(char *filename);
+extern SplineFont *_SFDRead(char *filename,FILE *sfd);
+enum ttfflags { ttf_onlystrikes=1, ttf_onlyonestrike=2, ttf_onlykerns=4, ttf_onlynames=8 };
+extern uint16 _MacStyleCode( const char *styles, SplineFont *sf, uint16 *psstyle );
+extern uint16 MacStyleCode( SplineFont *sf, uint16 *psstyle );
+
+extern int getAdobeEnc(const char *name);
+
+extern void MatMultiply(real m1[6], real m2[6], real to[6]);
+
+extern void GlyphHashFree(SplineFont *sf);
+extern SplineChar *SFHashName(SplineFont *sf,const char *name);
+extern int SFFindGID(SplineFont *sf, int unienc, const char *name );
+extern int SFCIDFindCID(SplineFont *sf, int unienc, const char *name );
+extern SplineChar *SFGetChar(SplineFont *sf, int unienc, const char *name );
+extern int SFFindExistingSlot(SplineFont *sf, int unienc, const char *name );
+extern int SFHasCID(SplineFont *sf, int cid);
+
+extern void PSCharsFree(struct pschars *chrs);
+extern void PSDictFree(struct psdict *chrs);
+extern char *PSDictHasEntry(struct psdict *dict, const char *key);
+extern int PSDictSame(struct psdict *dict1, struct psdict *dict2);
+
+struct cidmap; /* private structure to encoding.c */
+
+int getushort(FILE *ttf);
+int32 getlong(FILE *ttf);
+void putshort(FILE *file,int sval);
+void putlong(FILE *file,int val);
+void putfixed(FILE *file,real dval);
+int ttfcopyfile(FILE *ttf, FILE *other, int pos, const char *table_name);
+
+extern int UniFromName(const char *name,enum uni_interp interp, Encoding *encname);
+extern NameList *DefaultNameListForNewFonts(void);
+extern NameList *NameListByName(const char *name);
+extern int SSTtfNumberPoints(SplineSet *ss);
+extern int SCNumberPoints(SplineChar *sc,int layer);
+extern int SCPointsNumberedProperly(SplineChar *sc,int layer);
+
+int SFFigureDefWidth(SplineFont *sf, int *_nomwid);
+
+extern int ClassesMatch(int cnt1,char **classes1,int cnt2,char **classes2);
+extern FPST *FPSTGlyphToClass(FPST *fpst);
+
+extern ASM *ASMFromOpenTypeForms(SplineFont *sf,uint32 script);
+extern ASM *ASMFromFPST(SplineFont *sf,FPST *fpst,int ordered);
+
+extern char *utf8_verify_copy(const char *str);
+
+extern char *Utf8ToMacStr(const char *ustr,int macenc,int maclang);
+extern uint8 MacEncFromMacLang(int maclang);
+extern uint16 WinLangToMac(int winlang);
+extern MacFeat *FindMacFeature(SplineFont *sf, int feat,MacFeat **secondary);
+extern struct macsetting *FindMacSetting(SplineFont *sf, int feat, int set,struct macsetting **secondary);
+
+extern int32 UniFromEnc(int enc, Encoding *encname);
+extern int32 EncFromUni(int32 uni, Encoding *encname);
+
+/* Colinear & between */
+
+enum psstrokeflags { /* sf_removeoverlap=2,*/ sf_handle_eraser=4,
+ sf_correctdir=8, sf_clearbeforeinput=16 };
+
+extern int MMValid(MMSet *mm,int complain);
+
+enum Compare_Ret { SS_DiffContourCount = 1,
+ SS_MismatchOpenClosed = 2,
+ SS_DisorderedContours = 4,
+ SS_DisorderedStart = 8,
+ SS_DisorderedDirection = 16,
+ SS_PointsMatch = 32,
+ SS_ContourMatch = 64,
+ SS_NoMatch = 128,
+ SS_RefMismatch = 256,
+ SS_WidthMismatch = 512,
+ SS_VWidthMismatch = 1024,
+ SS_HintMismatch = 2048,
+ SS_HintMaskMismatch = 4096,
+ SS_LayerCntMismatch = 8192,
+ SS_ContourMismatch = 16384,
+ SS_UnlinkRefMatch = 32768,
+
+ BC_DepthMismatch = 1<<16,
+ BC_BoundingBoxMismatch = 2<<16,
+ BC_BitmapMismatch = 4<<16,
+ BC_NoMatch = 8<<16,
+ BC_Match = 16<<16,
+
+ SS_RefPtMismatch = 32<<16
+ };
+
+enum font_compare_flags { fcf_outlines=1, fcf_exact=2, fcf_warn_not_exact=4,
+ fcf_hinting=8, fcf_hintmasks=0x10, fcf_hmonlywithconflicts=0x20,
+ fcf_warn_not_ref_exact=0x40,
+ fcf_bitmaps=0x80, fcf_names = 0x100, fcf_gpos=0x200, fcf_gsub=0x400,
+ fcf_adddiff2sf1=0x800, fcf_addmissing=0x1000 };
+
+# if HANYANG
+extern void SFDDumpCompositionRules(FILE *sfd,struct compositionrules *rules);
+extern struct compositionrules *SFDReadCompositionRules(FILE *sfd);
+extern void SFModifyComposition(SplineFont *sf);
+extern void SFBuildSyllables(SplineFont *sf);
+# endif
+
+extern void SFTimesFromFile(SplineFont *sf,FILE *);
+
+extern int SFHasInstructions(SplineFont *sf);
+extern int RefDepth(RefChar *ref,int layer);
+
+extern uint32 *SFScriptsInLookups(SplineFont *sf,int gpos);
+extern uint32 *SFLangsInScript(SplineFont *sf,int gpos,uint32 script);
+extern uint32 *SFFeaturesInScriptLang(SplineFont *sf,int gpos,uint32 script,uint32 lang);
+extern OTLookup **SFLookupsInScriptLangFeature(SplineFont *sf,int gpos,uint32 script,uint32 lang, uint32 feature);
+extern SplineChar **SFGlyphsWithPSTinSubtable(SplineFont *sf,struct lookup_subtable *subtable);
+extern void SFFindUnusedLookups(SplineFont *sf);
+extern struct lookup_subtable *SFFindLookupSubtable(SplineFont *sf,char *name);
+extern struct lookup_subtable *SFFindLookupSubtableAndFreeName(SplineFont *sf,char *name);
+extern OTLookup *SFFindLookup(SplineFont *sf,char *name);
+struct scriptlanglist *SLCopy(struct scriptlanglist *sl);
+struct scriptlanglist *SListCopy(struct scriptlanglist *sl);
+extern FeatureScriptLangList *FeatureListCopy(FeatureScriptLangList *fl);
+extern int DefaultLangTagInOneScriptList(struct scriptlanglist *sl);
+
+extern RefChar *HasUseMyMetrics(SplineChar *sc,int layer);
+
+extern EncMap *EncMapFromEncoding(SplineFont *sf,Encoding *enc);
+
+extern void InitSimpleStuff(void);
+
+extern struct math_constants_descriptor {
+ char *script_name;
+ int offset;
+ int devtab_offset;
+} math_constants_descriptor[];
+
+#define MATH_CONSTANTS_DESCRIPTOR_EMPTY { NULL, 0, 0}
+
+extern const char *knownweights[], *realweights[], **noticeweights[];
+
+struct lang_frequencies;
+extern struct gradient *GradientCopy(struct gradient *old,real transform[6]);
+extern void GradientFree(struct gradient *grad);
+extern struct pattern *PatternCopy(struct pattern *old,real transform[6]);
+extern void PatternFree(struct pattern *pat);
+extern void BrushCopy(struct brush *into, struct brush *from,real transform[6]);
+extern void PenCopy(struct pen *into, struct pen *from,real transform[6]);
+
+extern bigreal SFCapHeight(SplineFont *sf, int layer, int return_error);
+extern bigreal SFXHeight(SplineFont *sf, int layer, int return_error);
+
+/**
+ * Visitor for SPLFirstVisitSplines()
+ */
+typedef void (*SPLFirstVisitSplinesVisitor)( SplinePoint* splfirst, Spline* s, void* udata );
+
+/**
+ * Visitor Function: print debug information about each spline
+ */
+
+/**
+ * Given a SplinePointList* that you want to visit each spline in the
+ * iteration is not as simple as it could be, so you can call this
+ * function passing spl->first as 'splfirst' and a visitor function
+ * which will see each spline in the splfirst colleciton.
+ *
+ * For debug, you can pass SPLFirstVisitorDebug which will print
+ * information for each item in the splfirst collection.
+ *
+ * You can pass any arbitrary data in as udata and SPLFirstVisit()
+ * will pass that udata to your visitor function without change. If
+ * you want a return value from your visitor, pass a pointer to a
+ * struct as udata. eg:
+ *
+ * typedef struct SPLFirstVisitorFoundSoughtDataS
+ * {
+ * SplinePoint* sought;
+ * int found;
+ * } SPLFirstVisitorFoundSoughtData;
+ *
+ * // ...
+ *
+ * SPLFirstVisitorFoundSoughtData d;
+ * d.sought = sought;
+ * d.found = 0;
+ * SPLFirstVisit( spl->first, SPLFirstVisitorFoundSought, &d );
+ * if( d.found )
+ * return 1;
+ *
+ */
+extern void SPLFirstVisitSplines( SplinePoint* splfirst, SPLFirstVisitSplinesVisitor f, void* udata );
+
+/**
+ * Visitor for SPLFirstVisitPoints()
+ */
+typedef void (*SPLFirstVisitPointsVisitor)( SplinePoint* splfirst, Spline* s, SplinePoint* sp, void* udata );
+
+
+/**
+ * Applies a visitor to the container and returns false if no point in the SPL
+ * has an x coordinate of 'x'.
+ */
+extern SplinePoint* SplinePointListContainsPointAtX( SplinePointList* container, real x );
+
+
+/**
+ * It is like a == b, but also true if a is within
+ * tolerence of b.
+ */
+extern bool equalWithTolerence( real a, real b, real tolerence );
+
+// The following functions are in splineutil.c at present.
+char * upper_case(const char * input);
+
+#include "ustring.h"
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splineorder2.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splineorder2.c
new file mode 100644
index 0000000000..2e6ad93bff
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splineorder2.c
@@ -0,0 +1,1523 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+/* This file contains utility routines for second order bezier splines */
+/* (ie. truetype) */
+/* The most interesting thing */
+/* it does is to figure out a quadratic approximation to the cubic splines */
+/* that postscript uses. We do this by looking at each spline and running */
+/* from the end toward the beginning, checking approximately every emunit */
+/* There is only one quadratic spline possible for any given interval of the */
+/* cubic. The start and end points are the interval end points (obviously) */
+/* the control point is where the two slopes (at start and end) intersect. */
+/* If this spline is a close approximation to the cubic spline (doesn't */
+/* deviate from it by more than an emunit or so), then we use this interval */
+/* as one of our quadratic splines. */
+/* It may turn out that the "quadratic" spline above is actually linear. Well */
+/* that's ok. It may also turn out that we can't find a good approximation. */
+/* If that's true then just insert a linear segment for an emunit stretch. */
+/* (actually this failure mode may not be possible), but I'm not sure */
+/* Then we play the same trick for the rest of the cubic spline (if any) */
+
+/* Does the quadratic spline in ttf approximate the cubic spline in ps */
+/* within one pixel between tmin and tmax (on ps. presumably ttf between 0&1 */
+/* dim is the dimension in which there is the greatest change */
+static int comparespline(Spline *ps, Spline *ttf, real tmin, real tmax, real err) {
+ int dim=0, other;
+ real dx, dy, ddim, dt, t;
+ real d, o;
+ real ttf_t, sq, val;
+ DBounds bb;
+ extended ts[3];
+ int i;
+
+ /* Are all points on ttf near points on ps? */
+ /* This doesn't answer that question, but rules out gross errors */
+ bb.minx = bb.maxx = ps->from->me.x; bb.miny = bb.maxy = ps->from->me.y;
+ if ( ps->from->nextcp.x>bb.maxx ) bb.maxx = ps->from->nextcp.x;
+ else bb.minx = ps->from->nextcp.x;
+ if ( ps->from->nextcp.y>bb.maxy ) bb.maxy = ps->from->nextcp.y;
+ else bb.miny = ps->from->nextcp.y;
+ if ( ps->to->prevcp.x>bb.maxx ) bb.maxx = ps->to->prevcp.x;
+ else if ( ps->to->prevcp.x<bb.minx ) bb.minx = ps->to->prevcp.x;
+ if ( ps->to->prevcp.y>bb.maxy ) bb.maxy = ps->to->prevcp.y;
+ else if ( ps->to->prevcp.y<bb.miny ) bb.miny = ps->to->prevcp.y;
+ if ( ps->to->me.x>bb.maxx ) bb.maxx = ps->to->me.x;
+ else if ( ps->to->me.x<bb.minx ) bb.minx = ps->to->me.x;
+ if ( ps->to->me.y>bb.maxy ) bb.maxy = ps->to->me.y;
+ else if ( ps->to->me.y<bb.miny ) bb.miny = ps->to->me.y;
+ for ( t=.1; t<1; t+= .1 ) {
+ d = (ttf->splines[0].b*t+ttf->splines[0].c)*t+ttf->splines[0].d;
+ o = (ttf->splines[1].b*t+ttf->splines[1].c)*t+ttf->splines[1].d;
+ if ( d<bb.minx || d>bb.maxx || o<bb.miny || o>bb.maxy )
+return( false );
+ }
+
+ /* Are all points on ps near points on ttf? */
+ dx = ((ps->splines[0].a*tmax+ps->splines[0].b)*tmax+ps->splines[0].c)*tmax -
+ ((ps->splines[0].a*tmin+ps->splines[0].b)*tmin+ps->splines[0].c)*tmin ;
+ dy = ((ps->splines[1].a*tmax+ps->splines[1].b)*tmax+ps->splines[1].c)*tmax -
+ ((ps->splines[1].a*tmin+ps->splines[1].b)*tmin+ps->splines[1].c)*tmin ;
+ if ( dx<0 ) dx = -dx;
+ if ( dy<0 ) dy = -dy;
+ if ( dx>dy ) {
+ dim = 0;
+ ddim = dx;
+ } else {
+ dim = 1;
+ ddim = dy;
+ }
+ other = !dim;
+
+ t = tmin;
+ dt = (tmax-tmin)/ddim;
+ for ( t=tmin; t<=tmax; t+= dt ) {
+ if ( t>tmax-dt/8. ) t = tmax; /* Avoid rounding errors */
+ d = ((ps->splines[dim].a*t+ps->splines[dim].b)*t+ps->splines[dim].c)*t+ps->splines[dim].d;
+ o = ((ps->splines[other].a*t+ps->splines[other].b)*t+ps->splines[other].c)*t+ps->splines[other].d;
+ if ( ttf->splines[dim].b == 0 ) {
+ ttf_t = (d-ttf->splines[dim].d)/ttf->splines[dim].c;
+ } else {
+ sq = ttf->splines[dim].c*ttf->splines[dim].c -
+ 4*ttf->splines[dim].b*(ttf->splines[dim].d-d);
+ if ( sq<0 )
+return( false );
+ sq = sqrt(sq);
+ ttf_t = (-ttf->splines[dim].c-sq)/(2*ttf->splines[dim].b);
+ if ( ttf_t>=-0.1 && ttf_t<=1.1 ) { /* Optimizer gives us rounding errors */
+ /* And tmin/tmax are no longer exact */
+ val = (ttf->splines[other].b*ttf_t+ttf->splines[other].c)*ttf_t+
+ ttf->splines[other].d;
+ if ( val>o-err && val<o+err )
+ continue;
+ }
+ ttf_t = (-ttf->splines[dim].c+sq)/(2*ttf->splines[dim].b);
+ }
+ if ( ttf_t>=-0.1 && ttf_t<=1.1 ) {
+ val = (ttf->splines[other].b*ttf_t+ttf->splines[other].c)*ttf_t+
+ ttf->splines[other].d;
+ if ( val>o-err && val<o+err )
+ continue;
+ }
+return( false );
+ }
+
+ /* Are representative points on ttf near points on ps? */
+ for ( t=.125; t<1; t+= .125 ) {
+ d = (ttf->splines[dim].b*t+ttf->splines[dim].c)*t+ttf->splines[dim].d;
+ o = (ttf->splines[other].b*t+ttf->splines[other].c)*t+ttf->splines[other].d;
+ CubicSolve(&ps->splines[dim],d,ts);
+ for ( i=0; i<3; ++i ) if ( ts[i]!=-1 ) {
+ val = ((ps->splines[other].a*ts[i]+ps->splines[other].b)*ts[i]+ps->splines[other].c)*ts[i]+ps->splines[other].d;
+ if ( val>o-err && val<o+err )
+ break;
+ }
+ if ( i==3 )
+return( false );
+ }
+
+return( true );
+}
+
+static SplinePoint *MakeQuadSpline(SplinePoint *start,Spline *ttf,real x,
+ real y, real tmax,SplinePoint *oldend) {
+ Spline *new = chunkalloc(sizeof(Spline));
+ SplinePoint *end = chunkalloc(sizeof(SplinePoint));
+
+ if ( tmax==1 ) {
+ end->roundx = oldend->roundx; end->roundy = oldend->roundy; end->dontinterpolate = oldend->dontinterpolate;
+ x = oldend->me.x; y = oldend->me.y; /* Want it to compare exactly */
+ }
+ end->ttfindex = 0xfffe;
+ end->nextcpindex = 0xfffe;
+ end->me.x = end->nextcp.x = x;
+ end->me.y = end->nextcp.y = y;
+ end->nonextcp = true;
+
+ *new = *ttf;
+ new->from = start; start->next = new;
+ new->to = end; end->prev = new;
+ if ( new->splines[0].b==0 && new->splines[1].b==0 ) {
+ end->noprevcp = true;
+ end->prevcp.x = x; end->prevcp.y = y;
+ new->islinear = new->knownlinear = true;
+ } else {
+ end->prevcp.x = start->nextcp.x = ttf->splines[0].c/2+ttf->splines[0].d;
+ end->prevcp.y = start->nextcp.y = ttf->splines[1].c/2+ttf->splines[1].d;
+ start->nonextcp = end->noprevcp = false;
+ new->isquadratic = true;
+ }
+ new->order2 = true;
+return( end );
+}
+
+static int buildtestquads(Spline *ttf,real xmin,real ymin,real cx,real cy,
+ real x,real y,real tmin,real t,real err,Spline *ps, DBounds *psbb) {
+ real fudge, normal, para;
+ BasePoint segdir, cpdir;
+
+ /* test the control points are reasonable */
+ fudge = (psbb->maxx-psbb->minx) + (psbb->maxy-psbb->miny);
+ if ( cx<psbb->minx-fudge || cx>psbb->maxx+fudge )
+return( false );
+ if ( cy<psbb->miny-fudge || cy>psbb->maxy+fudge )
+return( false );
+
+ segdir.x = x-xmin; segdir.y = y-ymin;
+ cpdir.x = cx-xmin; cpdir.y = cy-ymin;
+ para = segdir.x*cpdir.x + segdir.y*cpdir.y;
+ if ( (normal = segdir.x*cpdir.y - segdir.y*cpdir.x)<0 )
+ normal=-normal;
+ if ( para<0 && -para >4*normal )
+return( false );
+ cpdir.x = x-cx; cpdir.y = y-cy;
+ para = segdir.x*cpdir.x + segdir.y*cpdir.y;
+ if ( (normal = segdir.x*cpdir.y - segdir.y*cpdir.x)<0 )
+ normal=-normal;
+ if ( para<0 && -para >4*normal )
+return( false );
+
+ ttf->splines[0].d = xmin;
+ ttf->splines[0].c = 2*(cx-xmin);
+ ttf->splines[0].b = xmin+x-2*cx;
+ ttf->splines[1].d = ymin;
+ ttf->splines[1].c = 2*(cy-ymin);
+ ttf->splines[1].b = ymin+y-2*cy;
+ if ( comparespline(ps,ttf,tmin,t,err) )
+return( true );
+
+return( false );
+}
+
+static SplinePoint *LinearSpline(Spline *ps,SplinePoint *start, real tmax) {
+ real x,y;
+ Spline *new = chunkalloc(sizeof(Spline));
+ SplinePoint *end = chunkalloc(sizeof(SplinePoint));
+
+ x = ((ps->splines[0].a*tmax+ps->splines[0].b)*tmax+ps->splines[0].c)*tmax+ps->splines[0].d;
+ y = ((ps->splines[1].a*tmax+ps->splines[1].b)*tmax+ps->splines[1].c)*tmax+ps->splines[1].d;
+ if ( tmax==1 ) {
+ SplinePoint *oldend = ps->to;
+ end->roundx = oldend->roundx; end->roundy = oldend->roundy; end->dontinterpolate = oldend->dontinterpolate;
+ x = oldend->me.x; y = oldend->me.y; /* Want it to compare exactly */
+ }
+ end->ttfindex = 0xfffe;
+ end->nextcpindex = 0xfffe;
+ end->me.x = end->nextcp.x = end->prevcp.x = x;
+ end->me.y = end->nextcp.y = end->prevcp.y = y;
+ end->nonextcp = end->noprevcp = start->nonextcp = true;
+ new->from = start; start->next = new;
+ new->to = end; end->prev = new;
+ new->splines[0].d = start->me.x;
+ new->splines[0].c = (x-start->me.x);
+ new->splines[1].d = start->me.y;
+ new->splines[1].c = (y-start->me.y);
+ new->order2 = true;
+ new->islinear = new->knownlinear = true;
+return( end );
+}
+
+static SplinePoint *_ttfapprox(Spline *ps,real tmin, real tmax, SplinePoint *start) {
+ real dx, dy, ddim, dt, t, err;
+ real x,y, xmin, ymin;
+ real dxdtmin, dydtmin, dxdt, dydt;
+ SplinePoint *sp;
+ real cx, cy;
+ Spline ttf;
+ int cnt = -1, forceit;
+ BasePoint end, rend, dend;
+ DBounds bb;
+
+ rend.x = ((ps->splines[0].a*tmax+ps->splines[0].b)*tmax+ps->splines[0].c)*tmax + ps->splines[0].d;
+ rend.y = ((ps->splines[1].a*tmax+ps->splines[1].b)*tmax+ps->splines[1].c)*tmax + ps->splines[1].d;
+ end.x = rint( rend.x );
+ end.y = rint( rend.y );
+ dend.x = (3*ps->splines[0].a*tmax+2*ps->splines[0].b)*tmax+ps->splines[0].c;
+ dend.y = (3*ps->splines[1].a*tmax+2*ps->splines[1].b)*tmax+ps->splines[1].c;
+ memset(&ttf,'\0',sizeof(ttf));
+
+ bb.minx = bb.maxx = ps->from->me.x;
+ if ( ps->from->nextcp.x > bb.maxx ) bb.maxx = ps->from->nextcp.x;
+ else if ( ps->from->nextcp.x < bb.minx ) bb.minx = ps->from->nextcp.x;
+ if ( ps->to->prevcp.x > bb.maxx ) bb.maxx = ps->to->prevcp.x;
+ else if ( ps->to->prevcp.x < bb.minx ) bb.minx = ps->to->prevcp.x;
+ if ( ps->to->me.x > bb.maxx ) bb.maxx = ps->to->me.x;
+ else if ( ps->to->me.x < bb.minx ) bb.minx = ps->to->me.x;
+ bb.miny = bb.maxy = ps->from->me.y;
+ if ( ps->from->nextcp.y > bb.maxy ) bb.maxy = ps->from->nextcp.y;
+ else if ( ps->from->nextcp.y < bb.miny ) bb.miny = ps->from->nextcp.y;
+ if ( ps->to->prevcp.y > bb.maxy ) bb.maxy = ps->to->prevcp.y;
+ else if ( ps->to->prevcp.y < bb.miny ) bb.miny = ps->to->prevcp.y;
+ if ( ps->to->me.y > bb.maxy ) bb.maxy = ps->to->me.y;
+ else if ( ps->to->me.y < bb.miny ) bb.miny = ps->to->me.y;
+
+ tail_recursion:
+ ++cnt;
+
+ xmin = start->me.x;
+ ymin = start->me.y;
+ dxdtmin = (3*ps->splines[0].a*tmin+2*ps->splines[0].b)*tmin + ps->splines[0].c;
+ dydtmin = (3*ps->splines[1].a*tmin+2*ps->splines[1].b)*tmin + ps->splines[1].c;
+
+ dx = ((ps->splines[0].a*tmax+ps->splines[0].b)*tmax+ps->splines[0].c)*tmax -
+ ((ps->splines[0].a*tmin+ps->splines[0].b)*tmin+ps->splines[0].c)*tmin ;
+ dy = ((ps->splines[1].a*tmax+ps->splines[1].b)*tmax+ps->splines[1].c)*tmax -
+ ((ps->splines[1].a*tmin+ps->splines[1].b)*tmin+ps->splines[1].c)*tmin ;
+ if ( dx<0 ) dx = -dx;
+ if ( dy<0 ) dy = -dy;
+ if ( dx>dy ) {
+ ddim = dx;
+ } else {
+ ddim = dy;
+ }
+ if (( err = ddim/3000 )<1 ) err = 1;
+
+ if ( ddim<2 ||
+ (dend.x==0 && rint(start->me.x)==end.x && dy<=10 && cnt!=0) ||
+ (dend.y==0 && rint(start->me.y)==end.y && dx<=10 && cnt!=0) ) {
+ if ( cnt==0 || start->noprevcp )
+return( LinearSpline(ps,start,tmax));
+ /* If the end point is very close to where we want to be, then just */
+ /* pretend it's right */
+ start->prev->splines[0].b += ps->to->me.x-start->me.x;
+ start->prev->splines[1].b += ps->to->me.y-start->me.y;
+ start->prevcp.x += rend.x-start->me.x;
+ start->prevcp.y += rend.y-start->me.y;
+ if ( start->prev!=NULL && !start->prev->from->nonextcp )
+ start->prev->from->nextcp = start->prevcp;
+ start->me = rend;
+return( start );
+ }
+
+ dt = (tmax-tmin)/ddim;
+ forceit = false;
+/* force_end: */
+ for ( t=tmax; t>tmin+dt/128; t-= dt ) { /* dt/128 is a hack to avoid rounding errors */
+ x = ((ps->splines[0].a*t+ps->splines[0].b)*t+ps->splines[0].c)*t+ps->splines[0].d;
+ y = ((ps->splines[1].a*t+ps->splines[1].b)*t+ps->splines[1].c)*t+ps->splines[1].d;
+ dxdt = (3*ps->splines[0].a*t+2*ps->splines[0].b)*t + ps->splines[0].c;
+ dydt = (3*ps->splines[1].a*t+2*ps->splines[1].b)*t + ps->splines[1].c;
+ /* if the slopes are parallel at the ends there can be no bezier quadratic */
+ /* (control point is where the splines intersect. But if they are */
+ /* parallel and colinear then there is a line between 'em */
+ if ( ( dxdtmin==0 && dxdt==0 ) || (dydtmin==0 && dydt==0) ||
+ ( dxdt!=0 && dxdtmin!=0 &&
+ RealNearish(dydt/dxdt,dydtmin/dxdtmin)) )
+ continue;
+
+ if ( dxdt==0 )
+ cx=x;
+ else if ( dxdtmin==0 )
+ cx=xmin;
+ else
+ cx = -(ymin-(dydtmin/dxdtmin)*xmin-y+(dydt/dxdt)*x)/(dydtmin/dxdtmin-dydt/dxdt);
+ if ( dydt==0 )
+ cy=y;
+ else if ( dydtmin==0 )
+ cy=ymin;
+ else
+ cy = -(xmin-(dxdtmin/dydtmin)*ymin-x+(dxdt/dydt)*y)/(dxdtmin/dydtmin-dxdt/dydt);
+ /* Make the quadratic spline from (xmin,ymin) through (cx,cy) to (x,y)*/
+ if ( forceit || buildtestquads(&ttf,xmin,ymin,cx,cy,x,y,tmin,t,err,ps,&bb)) {
+ sp = MakeQuadSpline(start,&ttf,x,y,t,ps->to);
+ forceit = false;
+ if ( t==tmax )
+return( sp );
+ tmin = t;
+ start = sp;
+ goto tail_recursion;
+ }
+ ttf.splines[0].d = xmin;
+ ttf.splines[0].c = x-xmin;
+ ttf.splines[0].b = 0;
+ ttf.splines[1].d = ymin;
+ ttf.splines[1].c = y-ymin;
+ ttf.splines[1].b = 0;
+ if ( comparespline(ps,&ttf,tmin,t,err) ) {
+ sp = LinearSpline(ps,start,t);
+ if ( t==tmax )
+return( sp );
+ tmin = t;
+ start = sp;
+ goto tail_recursion;
+ }
+ }
+ tmin += dt;
+ start = LinearSpline(ps,start,tmin);
+ goto tail_recursion;
+}
+
+static SplinePoint *__ttfApprox(Spline *ps,real tmin, real tmax, SplinePoint *start) {
+ extended inflect[2];
+ int i=0;
+ SplinePoint *end;
+ Spline *s, *next;
+
+ end = _ttfapprox(ps,tmin,tmax,start);
+ if ( ps->knownlinear )
+return( end );
+ for ( s=start->next; s!=NULL && !s->islinear; s=s->to->next );
+ if ( s==NULL )
+return( end );
+ for ( s=start->next; s!=NULL ; s=next ) {
+ next = s->to->next;
+ SplinePointFree(s->to);
+ SplineFree(s);
+ }
+/* Hmm. With my algorithem, checking for points of inflection actually makes */
+/* things worse. It uses more points and the splines don't join as nicely */
+/* However if we get a bad match (a line) in the normal approx, then check */
+/* Err... I was computing POI incorrectly. Above statement might not be correct*/
+ /* no points of inflection in quad splines */
+
+ i = Spline2DFindPointsOfInflection(ps, inflect);
+ if ( i==2 ) {
+ if ( RealNearish(inflect[0],inflect[1]) )
+ --i;
+ else if ( inflect[0]>inflect[1] ) {
+ real temp = inflect[0];
+ inflect[0] = inflect[1];
+ inflect[1] = temp;
+ }
+ }
+ if ( i!=0 ) {
+ start = _ttfapprox(ps,tmin,inflect[0],start);
+ tmin = inflect[0];
+ if ( i==2 ) {
+ start = _ttfapprox(ps,tmin,inflect[1],start);
+ tmin = inflect[1];
+ }
+ }
+return( _ttfapprox(ps,tmin,tmax,start));
+}
+
+#if !defined(FONTFORGE_CONFIG_NON_SYMMETRIC_QUADRATIC_CONVERSION)
+typedef struct qpoint {
+ BasePoint bp;
+ BasePoint cp;
+ bigreal t;
+} QPoint;
+
+static int comparedata(Spline *ps,QPoint *data,int qfirst,int qlast,
+ int round_to_int, int test_level ) {
+ Spline ttf;
+ int i;
+ bigreal err = round_to_int ? 1.5 : 1;
+
+ if ( qfirst==qlast ) /* happened (was a bug) */
+return( false );
+
+ err *= (test_level+1);
+
+ /* Control points diametrically opposed */
+ if ( (data[qlast-2].cp.x-ps->to->me.x)*(ps->to->prevcp.x-ps->to->me.x) +
+ (data[qlast-2].cp.y-ps->to->me.y)*(ps->to->prevcp.y-ps->to->me.y)<0 )
+return( false );
+ if ( (data[qfirst-1].cp.x-ps->from->me.x)*(ps->from->nextcp.x-ps->from->me.x) +
+ (data[qfirst-1].cp.y-ps->from->me.y)*(ps->from->nextcp.y-ps->from->me.y)<0 )
+return( false );
+
+ memset(&ttf,0,sizeof(ttf));
+ for ( i=qfirst; i<qlast; ++i ) {
+ ttf.splines[0].d = data[i-1].bp.x;
+ ttf.splines[0].c = 2*(data[i-1].cp.x-data[i-1].bp.x);
+ ttf.splines[0].b = data[i-1].bp.x+data[i].bp.x-2*data[i-1].cp.x;
+ ttf.splines[1].d = data[i-1].bp.y;
+ ttf.splines[1].c = 2*(data[i-1].cp.y-data[i-1].bp.y);
+ ttf.splines[1].b = data[i-1].bp.y+data[i].bp.y-2*data[i-1].cp.y;
+ if ( !comparespline(ps,&ttf,data[i-1].t,data[i].t,err) )
+return( false );
+ }
+return( true );
+}
+
+static SplinePoint *CvtDataToSplines(QPoint *data,int qfirst,int qlast,SplinePoint *start) {
+ SplinePoint *end;
+ int i;
+
+ for ( i=qfirst; i<qlast; ++i ) {
+ end = SplinePointCreate(data[i].bp.x,data[i].bp.y);
+ start->nextcp = end->prevcp = data[i-1].cp;
+ start->nonextcp = end->noprevcp = false;
+ if (( data[i-1].cp.x == data[i].bp.x && data[i-1].cp.y == data[i].bp.y ) ||
+ ( data[i-1].cp.x == start->me.x && data[i-1].cp.y == start->me.y ))
+ start->nonextcp = end->noprevcp = true;
+ SplineMake2(start,end);
+ start = end;
+ }
+return( start );
+}
+
+static int SplineWithWellBehavedControlPoints(Spline *ps) {
+ BasePoint splineunit;
+ bigreal splinelen, npos, ppos;
+
+ splineunit.x = ps->to->me.x - ps->from->me.x;
+ splineunit.y = ps->to->me.y - ps->from->me.y;
+ splinelen = sqrt(splineunit.x*splineunit.x + splineunit.y*splineunit.y);
+ if ( splinelen!=0 ) {
+ splineunit.x /= splinelen;
+ splineunit.y /= splinelen;
+ }
+
+ npos = (ps->from->nextcp.x-ps->from->me.x) * splineunit.x +
+ (ps->from->nextcp.y-ps->from->me.y) * splineunit.y;
+ ppos = (ps->to->prevcp.x-ps->from->me.x) * splineunit.x +
+ (ps->to->prevcp.y-ps->from->me.y) * splineunit.y;
+return( npos>=0 && /* npos<=ppos &&*/ ppos<=splinelen );
+}
+
+static int PrettyApprox(Spline *ps,bigreal tmin, bigreal tmax,
+ QPoint *data, int qcnt, int round_to_int, int test_level ) {
+ int ptcnt, q, i;
+ bigreal distance, dx, dy, tstart;
+ BasePoint end, mid, slopemin, slopemid, slopeend;
+ BasePoint splineunit, start;
+ bigreal splinelen, midpos, lastpos, lastpos2, cppos;
+ int do_good_spline_check;
+ QPoint data2[12];
+
+ if ( qcnt==-1 )
+return( -1 );
+
+ slopemin.x = (3*ps->splines[0].a*tmin+2*ps->splines[0].b)*tmin+ps->splines[0].c;
+ slopemin.y = (3*ps->splines[1].a*tmin+2*ps->splines[1].b)*tmin+ps->splines[1].c;
+ if ( slopemin.x==0 && slopemin.y==0 ) {
+ bigreal t = tmin + (tmax-tmin)/256;
+ /* If there is no control point for this end point, then the slope is */
+ /* 0/0 at the end point. Which isn't useful, it leads to a quadratic */
+ /* control point at the end point, but this one is real because it */
+ /* is used to interpolate the next point, but we get all confused */
+ /* because we don't expect a real cp to be on the base point. */
+ slopemin.x = (3*ps->splines[0].a*t+2*ps->splines[0].b)*t+ps->splines[0].c;
+ slopemin.y = (3*ps->splines[1].a*t+2*ps->splines[1].b)*t+ps->splines[1].c;
+ }
+
+ end.x = ((ps->splines[0].a*tmax+ps->splines[0].b)*tmax+ps->splines[0].c)*tmax+ps->splines[0].d;
+ end.y = ((ps->splines[1].a*tmax+ps->splines[1].b)*tmax+ps->splines[1].c)*tmax+ps->splines[1].d;
+ slopeend.x = (3*ps->splines[0].a*tmax+2*ps->splines[0].b)*tmax+ps->splines[0].c;
+ slopeend.y = (3*ps->splines[1].a*tmax+2*ps->splines[1].b)*tmax+ps->splines[1].c;
+ if ( slopemin.x==0 && slopemin.y==0 ) {
+ bigreal t = tmax - (tmax-tmin)/256;
+ /* Same problem as above, except at the other end */
+ slopeend.x = (3*ps->splines[0].a*t+2*ps->splines[0].b)*t+ps->splines[0].c;
+ slopeend.y = (3*ps->splines[1].a*t+2*ps->splines[1].b)*t+ps->splines[1].c;
+ }
+
+ start.x = data[qcnt-1].bp.x;
+ start.y = data[qcnt-1].bp.y;
+ splineunit.x = end.x - start.x;
+ splineunit.y = end.y - start.y;
+ splinelen = sqrt(splineunit.x*splineunit.x + splineunit.y*splineunit.y);
+ if ( splinelen!=0 ) {
+ splineunit.x /= splinelen;
+ splineunit.y /= splinelen;
+ }
+ do_good_spline_check = SplineWithWellBehavedControlPoints(ps);
+
+ if ( round_to_int && tmax!=1 ) {
+ end.x = rint( end.x );
+ end.y = rint( end.y );
+ }
+
+ dx = end.x-data[qcnt-1].bp.x; dy = end.y-data[qcnt-1].bp.y;
+ distance = dx*dx + dy*dy;
+
+ if ( distance<.3 ) {
+ /* This is meaningless in truetype, use a line */
+ data[qcnt-1].cp = data[qcnt-1].bp;
+ data[qcnt].bp = end;
+ data[qcnt].t = 1;
+return( qcnt+1 );
+ }
+
+ for ( ptcnt=0; ptcnt<10; ++ptcnt ) {
+ if ( ptcnt>1 && distance/(ptcnt*ptcnt)<16 )
+return( -1 ); /* Points too close for a good approx */
+ q = qcnt;
+ data2[ptcnt+1].bp = end;
+ lastpos=0; lastpos2 = splinelen;
+ for ( i=0; i<=ptcnt; ++i ) {
+ tstart = (tmin*(ptcnt-i) + tmax*(i+1))/(ptcnt+1);
+ mid.x = ((ps->splines[0].a*tstart+ps->splines[0].b)*tstart+ps->splines[0].c)*tstart+ps->splines[0].d;
+ mid.y = ((ps->splines[1].a*tstart+ps->splines[1].b)*tstart+ps->splines[1].c)*tstart+ps->splines[1].d;
+ if ( i==0 ) {
+ slopemid.x = (3*ps->splines[0].a*tstart+2*ps->splines[0].b)*tstart+ps->splines[0].c;
+ slopemid.y = (3*ps->splines[1].a*tstart+2*ps->splines[1].b)*tstart+ps->splines[1].c;
+ if ( slopemid.x==0 )
+ data[q-1].cp.x=mid.x;
+ else if ( slopemin.x==0 )
+ data[q-1].cp.x=data[q-1].bp.x;
+ else if ( RealNear(slopemin.y/slopemin.x,slopemid.y/slopemid.x) )
+ break;
+ else
+ data[q-1].cp.x = -(data[q-1].bp.y-(slopemin.y/slopemin.x)*data[q-1].bp.x-mid.y+(slopemid.y/slopemid.x)*mid.x)/(slopemin.y/slopemin.x-slopemid.y/slopemid.x);
+ if ( slopemid.y==0 )
+ data[q-1].cp.y=mid.y;
+ else if ( slopemin.y==0 )
+ data[q-1].cp.y=data[q-1].bp.y;
+ else if ( RealNear(slopemin.x/slopemin.y,slopemid.x/slopemid.y) )
+ break;
+ else
+ data[q-1].cp.y = -(data[q-1].bp.x-(slopemin.x/slopemin.y)*data[q-1].bp.y-mid.x+(slopemid.x/slopemid.y)*mid.y)/(slopemin.x/slopemin.y-slopemid.x/slopemid.y);
+ } else {
+ data[q-1].cp.x = 2*data[q-1].bp.x - data[q-2].cp.x;
+ data[q-1].cp.y = 2*data[q-1].bp.y - data[q-2].cp.y;
+ }
+
+ midpos = (mid.x-start.x)*splineunit.x + (mid.y-start.y)*splineunit.y;
+ cppos = (data[q-1].cp.x-start.x)*splineunit.x + (data[q-1].cp.y-start.y)*splineunit.y;
+
+ if ( ((do_good_spline_check || i!=0 ) && cppos<lastpos) || cppos>midpos ) {
+ i = 0; /* Means we failed */
+ break;
+ }
+ lastpos = midpos;
+
+ data[q].bp = mid;
+ data[q++].t = tstart;
+
+ tstart = (tmax*(ptcnt-i) + tmin*(i+1))/(ptcnt+1);
+ mid.x = ((ps->splines[0].a*tstart+ps->splines[0].b)*tstart+ps->splines[0].c)*tstart+ps->splines[0].d;
+ mid.y = ((ps->splines[1].a*tstart+ps->splines[1].b)*tstart+ps->splines[1].c)*tstart+ps->splines[1].d;
+ if ( i==0 ) {
+ slopemid.x = (3*ps->splines[0].a*tstart+2*ps->splines[0].b)*tstart+ps->splines[0].c;
+ slopemid.y = (3*ps->splines[1].a*tstart+2*ps->splines[1].b)*tstart+ps->splines[1].c;
+ if ( slopemid.x==0 )
+ data2[ptcnt-i].cp.x=mid.x;
+ else if ( slopeend.x==0 )
+ data2[ptcnt-i].cp.x=data2[ptcnt-i+1].bp.x;
+ else if ( RealNear(slopeend.y/slopeend.x,slopemid.y/slopemid.x) )
+ break;
+ else
+ data2[ptcnt-i].cp.x = -(data2[ptcnt-i+1].bp.y-(slopeend.y/slopeend.x)*data2[ptcnt-i+1].bp.x-mid.y+(slopemid.y/slopemid.x)*mid.x)/(slopeend.y/slopeend.x-slopemid.y/slopemid.x);
+ if ( slopemid.y==0 )
+ data2[ptcnt-i].cp.y=mid.y;
+ else if ( slopeend.y==0 )
+ data2[ptcnt-i].cp.y=data2[ptcnt-i+1].bp.y;
+ else if ( RealNear(slopeend.x/slopeend.y,slopemid.x/slopemid.y) )
+ break;
+ else
+ data2[ptcnt-i].cp.y = -(data2[ptcnt-i+1].bp.x-(slopeend.x/slopeend.y)*data2[ptcnt-i+1].bp.y-mid.x+(slopemid.x/slopemid.y)*mid.y)/(slopeend.x/slopeend.y-slopemid.x/slopemid.y);
+ } else {
+ data2[ptcnt-i].cp.x = 2*data2[ptcnt-i+1].bp.x - data2[ptcnt-i+1].cp.x;
+ data2[ptcnt-i].cp.y = 2*data2[ptcnt-i+1].bp.y - data2[ptcnt-i+1].cp.y;
+ }
+ data2[ptcnt-i].bp = mid;
+
+ midpos = (mid.x-start.x)*splineunit.x + (mid.y-start.y)*splineunit.y;
+ cppos = (data2[ptcnt-i].cp.x-start.x)*splineunit.x + (data2[ptcnt-i].cp.y-start.y)*splineunit.y;
+ if ( ((do_good_spline_check || i!=0 ) && cppos>lastpos2) || cppos<midpos ) {
+ i = 0; /* Means we failed */
+ break;
+ }
+ lastpos2 = midpos;
+
+ }
+ if ( i==0 )
+ continue;
+ if ( (data2[ptcnt+1].bp.x-data2[ptcnt].bp.x)*(data2[ptcnt].cp.x-data2[ptcnt].bp.x)<0 ||
+ (data2[ptcnt+1].bp.y-data2[ptcnt].bp.y)*(data2[ptcnt].cp.y-data2[ptcnt].bp.y)<0 ) {
+ /* data2 are bad ... don't use them */;
+ } else if ( (data[qcnt-1].bp.x-data[qcnt].bp.x)*(data[qcnt-1].cp.x-data[qcnt].bp.x)<0 ||
+ (data[qcnt-1].bp.y-data[qcnt].bp.y)*(data[qcnt-1].cp.y-data[qcnt].bp.y)<0 ) {
+ /* data are bad */;
+ for ( i=0; i<=ptcnt; ++i ) {
+ data[qcnt+i-1].cp = data2[i].cp;
+ data[qcnt+i-1].bp = data2[i].bp;
+ }
+ } else {
+ for ( i=0; i<=ptcnt; ++i ) {
+ if ( ptcnt!=0 ) {
+ data[qcnt+i-1].cp.x = (data[qcnt+i-1].cp.x*(ptcnt-i) + data2[i].cp.x*i)/ptcnt;
+ data[qcnt+i-1].cp.y = (data[qcnt+i-1].cp.y*(ptcnt-i) + data2[i].cp.y*i)/ptcnt;
+ }
+ }
+ }
+ if ( round_to_int ) {
+ for ( i=0; i<=ptcnt; ++i ) {
+ data[qcnt+i-1].cp.x = rint( data[qcnt+i-1].cp.x );
+ data[qcnt+i-1].cp.y = rint( data[qcnt+i-1].cp.y );
+ }
+ }
+ for ( i=0; i<ptcnt; ++i ) {
+ data[qcnt+i].bp.x = (data[qcnt+i].cp.x + data[qcnt+i-1].cp.x)/2;
+ data[qcnt+i].bp.y = (data[qcnt+i].cp.y + data[qcnt+i-1].cp.y)/2;
+ }
+ if ( comparedata(ps,data,qcnt,q,round_to_int,test_level))
+return( q );
+ }
+return( -1 );
+}
+#endif
+
+static SplinePoint *AlreadyQuadraticCheck(Spline *ps, SplinePoint *start) {
+ SplinePoint *sp;
+
+ if ( (RealNearish(ps->splines[0].a,0) && RealNearish(ps->splines[1].a,0)) ||
+ ((ps->splines[0].b!=0 && RealNearish(ps->splines[0].a/ps->splines[0].b,0)) &&
+ (ps->splines[1].b!=0 && RealNearish(ps->splines[1].a/ps->splines[1].b,0))) ) {
+ /* Already Quadratic, just need to find the control point */
+ /* Or linear, in which case we don't need to do much of anything */
+ Spline *spline;
+ sp = chunkalloc(sizeof(SplinePoint));
+ sp->me.x = ps->to->me.x; sp->me.y = ps->to->me.y;
+ sp->roundx = ps->to->roundx; sp->roundy = ps->to->roundy; sp->dontinterpolate = ps->to->dontinterpolate;
+ sp->ttfindex = 0xfffe;
+ sp->nextcpindex = 0xfffe;
+ sp->nonextcp = true;
+ spline = chunkalloc(sizeof(Spline));
+ spline->order2 = true;
+ spline->from = start;
+ spline->to = sp;
+ spline->splines[0] = ps->splines[0]; spline->splines[1] = ps->splines[1];
+ start->next = sp->prev = spline;
+ if ( ps->knownlinear ) {
+ spline->islinear = spline->knownlinear = true;
+ start->nonextcp = sp->noprevcp = true;
+ start->nextcp = start->me;
+ sp->prevcp = sp->me;
+ } else {
+ start->nonextcp = sp->noprevcp = false;
+ start->nextcp.x = sp->prevcp.x = (ps->splines[0].c+2*ps->splines[0].d)/2;
+ start->nextcp.y = sp->prevcp.y = (ps->splines[1].c+2*ps->splines[1].d)/2;
+ }
+return( sp );
+ }
+return( NULL );
+}
+
+static SplinePoint *ttfApprox(Spline *ps, SplinePoint *start) {
+#if !defined(FONTFORGE_CONFIG_NON_SYMMETRIC_QUADRATIC_CONVERSION)
+ extended magicpoints[6], last;
+ int cnt, i, j, qcnt, test_level;
+ QPoint data[8*10];
+ int round_to_int =
+ /* The end points are at integer points, or one coord is at half while */
+ /* the other is at an integer (ie. condition for ttf interpolated point)*/
+ ((ps->from->me.x==rint(ps->from->me.x) &&
+ ps->from->me.y==rint(ps->from->me.y)) ||
+ (ps->from->me.x==rint(ps->from->me.x) &&
+ ps->from->me.x==ps->from->nextcp.x &&
+ ps->from->me.y!=ps->from->nextcp.y &&
+ 2*ps->from->me.y==rint(2*ps->from->me.y)) ||
+ (ps->from->me.y==rint(ps->from->me.y) &&
+ ps->from->me.y==ps->from->nextcp.y &&
+ ps->from->me.x!=ps->from->nextcp.x &&
+ 2*ps->from->me.x==rint(2*ps->from->me.x)) ) &&
+ ((ps->to->me.x == rint(ps->to->me.x) &&
+ ps->to->me.y == rint(ps->to->me.y)) ||
+ (ps->to->me.x==rint(ps->to->me.x) &&
+ ps->to->me.x==ps->to->prevcp.x &&
+ ps->to->me.y!=ps->to->prevcp.y &&
+ 2*ps->to->me.y==rint(2*ps->to->me.y)) ||
+ (ps->to->me.y==rint(ps->to->me.y) &&
+ ps->to->me.y==ps->to->prevcp.y &&
+ ps->to->me.x!=ps->to->prevcp.x &&
+ 2*ps->to->me.x==rint(2*ps->to->me.x)) );
+#endif
+ SplinePoint *ret;
+/* Divide the spline up at extrema and points of inflection. The first */
+/* because ttf splines should have points at their extrema, the second */
+/* because quadratic splines can't have points of inflection. */
+/* Let's not do the first (extrema) AddExtrema does this better and we */
+/* don't want unneeded extrema. */
+/* And sometimes we don't want to look at the points of inflection either*/
+
+ if (( ret = AlreadyQuadraticCheck(ps,start))!=NULL )
+return( ret );
+
+#if !defined(FONTFORGE_CONFIG_NON_SYMMETRIC_QUADRATIC_CONVERSION)
+ qcnt = 1;
+ data[0].bp = ps->from->me;
+ data[0].t = 0;
+ qcnt = PrettyApprox(ps,0,1,data,qcnt,round_to_int,0);
+ if ( qcnt!=-1 )
+return( CvtDataToSplines(data,1,qcnt,start));
+
+ cnt = 0;
+ /* cnt = Spline2DFindExtrema(ps,magicpoints);*/
+
+ cnt += Spline2DFindPointsOfInflection(ps,magicpoints+cnt);
+
+ /* remove points outside range */
+ for ( i=0; i<cnt; ++i ) {
+ if ( magicpoints[i]<=0 || magicpoints[i]>=1 ) {
+ for ( j=i+1; j<cnt; ++j )
+ magicpoints[j-1] = magicpoints[j];
+ --cnt;
+ --i;
+ }
+ }
+ /* sort points */
+ for ( i=0; i<cnt; ++i ) for ( j=i+1; j<cnt; ++j ) {
+ if ( magicpoints[i]>magicpoints[j] ) {
+ bigreal temp = magicpoints[i];
+ magicpoints[i] = magicpoints[j];
+ magicpoints[j] = temp;
+ }
+ }
+ /* Remove duplicates */
+ for ( i=1; i<cnt; ++i ) {
+ while ( i<cnt && RealNear(magicpoints[i-1],magicpoints[i])) {
+ --cnt;
+ for ( j=i ; j<cnt; ++j )
+ magicpoints[j] = magicpoints[j+1];
+ magicpoints[cnt] = -1;
+ }
+ }
+
+ for ( test_level=0; test_level<3; ++test_level ) {
+ qcnt = 1;
+ last = 0;
+ for ( i=0; i<cnt; ++i ) {
+ qcnt = PrettyApprox(ps,last,magicpoints[i],data,qcnt,round_to_int,test_level);
+ last = magicpoints[i];
+ }
+ qcnt = PrettyApprox(ps,last,1,data,qcnt,round_to_int,test_level);
+ if ( qcnt!=-1 )
+ return( CvtDataToSplines(data,1,qcnt,start));
+ }
+#endif
+
+return( __ttfApprox(ps,0,1,start));
+}
+
+static void ttfCleanup(SplinePoint *from) {
+ SplinePoint *test, *next;
+
+ for ( test = from; test->next!=NULL; test = next ) {
+ next = test->next->to;
+ /* Too close together to be meaningful when output as ttf */
+ if ( rint(test->me.x) == rint(next->me.x) &&
+ rint(test->me.y) == rint(next->me.y) ) {
+ if ( next->next==NULL || next==from ) {
+ if ( test==from )
+ break;
+ next->prevcp = test->prevcp;
+ next->noprevcp = test->noprevcp;
+ next->prev = test->prev;
+ next->prev->to = next;
+ SplineFree(test->next);
+ SplinePointFree(test);
+ } else {
+ test->nextcp = next->nextcp;
+ test->nonextcp = next->nonextcp;
+ test->next = next->next;
+ test->next->from = test;
+ SplineFree(next->prev);
+ SplinePointFree(next);
+ next = test->next->to;
+ }
+ }
+ if ( next==from )
+ break;
+ }
+}
+
+SplineSet *SSttfApprox(SplineSet *ss) {
+ SplineSet *ret = chunkalloc(sizeof(SplineSet));
+ Spline *spline, *first;
+
+ ret->first = chunkalloc(sizeof(SplinePoint));
+ *ret->first = *ss->first;
+ if ( ret->first->hintmask != NULL ) {
+ ret->first->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(ret->first->hintmask,ss->first->hintmask,sizeof(HintMask));
+ }
+ ret->last = ret->first;
+
+ first = NULL;
+ for ( spline=ss->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ ret->last = ttfApprox(spline,ret->last);
+ ret->last->ptindex = spline->to->ptindex;
+ ret->last->ttfindex = spline->to->ttfindex;
+ ret->last->nextcpindex = spline->to->nextcpindex;
+ if ( spline->to->hintmask != NULL ) {
+ ret->last->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(ret->last->hintmask,spline->to->hintmask,sizeof(HintMask));
+ }
+ if ( first==NULL ) first = spline;
+ }
+ if ( ss->first==ss->last ) {
+ if ( ret->last!=ret->first ) {
+ ret->first->prevcp = ret->last->prevcp;
+ ret->first->noprevcp = ret->last->noprevcp;
+ ret->first->prev = ret->last->prev;
+ ret->last->prev->to = ret->first;
+ SplinePointFree(ret->last);
+ ret->last = ret->first;
+ }
+ }
+ ttfCleanup(ret->first);
+ SPLCategorizePoints(ret);
+return( ret );
+}
+
+SplineSet *SplineSetsTTFApprox(SplineSet *ss) {
+ SplineSet *head=NULL, *last, *cur;
+
+ while ( ss!=NULL ) {
+ cur = SSttfApprox(ss);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ ss = ss->next;
+ }
+return( head );
+}
+
+static void ImproveB3CPForQuadratic(real from,real *_ncp,real *_pcp,real to) {
+ real ncp = *_ncp, pcp = *_pcp;
+ real noff, poff;
+ real c,b, best;
+ int err, i, besti;
+ real offs[9];
+
+ if ( (noff=ncp/32768.0)<0 ) noff = -noff;
+ if ( (poff=pcp/32768.0)<0 ) poff = -poff;
+ if ( noff<1.0/32768.0 ) noff = 1.0/32768.0;
+ if ( poff<1.0/32768.0 ) poff = 1.0/32768.0;
+
+ c = 3*(ncp-from); b = 3*(pcp-ncp)-c; best = to-from-c-b;
+ offs[4] = best;
+ if ( best==0 )
+return;
+
+ for ( err=0; err<10; ++err, noff/=2.0, poff/=2.0 ) {
+ c = 3*(ncp-noff-from); b = 3*(pcp-poff-(ncp-noff))-c; offs[0] = to-from-c-b;
+ c = 3*(ncp-noff-from); b = 3*(pcp -(ncp-noff))-c; offs[1] = to-from-c-b;
+ c = 3*(ncp-noff-from); b = 3*(pcp+poff-(ncp-noff))-c; offs[2] = to-from-c-b;
+ c = 3*(ncp -from); b = 3*(pcp-poff-(ncp ))-c; offs[3] = to-from-c-b;
+ c = 3*(ncp -from); b = 3*(pcp+poff-(ncp ))-c; offs[5] = to-from-c-b;
+ c = 3*(ncp+noff-from); b = 3*(pcp-poff-(ncp+noff))-c; offs[6] = to-from-c-b;
+ c = 3*(ncp+noff-from); b = 3*(pcp -(ncp+noff))-c; offs[7] = to-from-c-b;
+ c = 3*(ncp+noff-from); b = 3*(pcp+poff-(ncp+noff))-c; offs[8] = to-from-c-b;
+ besti=4;
+ for ( i=0; i<9; ++i ) {
+ if ( offs[i]<0 ) offs[i]= - offs[i];
+ if ( offs[i]<best ) {
+ besti = i;
+ best = offs[i];
+ }
+ }
+ if ( besti!=4 ) {
+ if ( besti<3 ) ncp -= noff;
+ else if ( besti>=6 ) ncp += noff;
+ if ( besti%3==0 ) pcp -= poff;
+ else if ( besti%3==2 ) pcp += poff;
+ offs[4] = best;
+ if ( best==0 )
+ break;
+ }
+ }
+ *_ncp = ncp;
+ *_pcp = pcp;
+}
+
+SplineSet *SSPSApprox(SplineSet *ss) {
+ SplineSet *ret = chunkalloc(sizeof(SplineSet));
+ Spline *spline, *first;
+ SplinePoint *to;
+
+ ret->first = chunkalloc(sizeof(SplinePoint));
+ *ret->first = *ss->first;
+ if ( ret->first->hintmask != NULL ) {
+ ret->first->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(ret->first->hintmask,ss->first->hintmask,sizeof(HintMask));
+ }
+ ret->last = ret->first;
+
+ first = NULL;
+ for ( spline=ss->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ to = chunkalloc(sizeof(SplinePoint));
+ *to = *spline->to;
+ if ( to->hintmask != NULL ) {
+ to->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(to->hintmask,spline->to->hintmask,sizeof(HintMask));
+ }
+ if ( !spline->knownlinear ) {
+ ret->last->nextcp.x = ret->last->me.x + 2*(ret->last->nextcp.x-ret->last->me.x)/3;
+ ret->last->nextcp.y = ret->last->me.y + 2*(ret->last->nextcp.y-ret->last->me.y)/3;
+ to->prevcp.x = to->me.x + 2*(to->prevcp.x-to->me.x)/3;
+ to->prevcp.y = to->me.y + 2*(to->prevcp.y-to->me.y)/3;
+ ImproveB3CPForQuadratic(ret->last->me.x,&ret->last->nextcp.x,&to->prevcp.x,to->me.x);
+ ImproveB3CPForQuadratic(ret->last->me.y,&ret->last->nextcp.y,&to->prevcp.y,to->me.y);
+ }
+ SplineMake3(ret->last,to);
+ ret->last = to;
+ if ( first==NULL ) first = spline;
+ }
+ if ( ss->first==ss->last ) {
+ if ( ret->last!=ret->first ) {
+ ret->first->prevcp = ret->last->prevcp;
+ ret->first->noprevcp = ret->last->noprevcp;
+ ret->first->prev = ret->last->prev;
+ ret->last->prev->to = ret->first;
+ SplinePointFree(ret->last);
+ ret->last = ret->first;
+ }
+ }
+ ret->is_clip_path = ss->is_clip_path;
+return( ret );
+}
+
+SplineSet *SplineSetsPSApprox(SplineSet *ss) {
+ SplineSet *head=NULL, *last, *cur;
+
+ while ( ss!=NULL ) {
+ cur = SSPSApprox(ss);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ ss = ss->next;
+ }
+return( head );
+}
+
+
+void SCConvertLayerToOrder2(SplineChar *sc,int layer) {
+ SplineSet *new;
+
+ if ( sc==NULL )
+return;
+
+ new = SplineSetsTTFApprox(sc->layers[layer].splines);
+ SplinePointListsFree(sc->layers[layer].splines);
+ sc->layers[layer].splines = new;
+
+ sc->layers[layer].order2 = true;
+
+ MinimumDistancesFree(sc->md); sc->md = NULL;
+}
+
+void SCConvertToOrder2(SplineChar *sc) {
+ int layer;
+
+ if ( sc==NULL )
+return;
+
+ for ( layer=ly_back; layer<sc->layer_cnt; ++layer )
+ SCConvertLayerToOrder2(sc,layer);
+}
+
+static void SCConvertRefs(SplineChar *sc,int layer) {
+ RefChar *rf;
+
+ sc->ticked = true;
+ for ( rf=sc->layers[layer].refs; rf!=NULL; rf=rf->next ) {
+ if ( !rf->sc->ticked )
+ SCConvertRefs(rf->sc,layer);
+ SCReinstanciateRefChar(sc,rf,layer); /* Conversion is done by reinstanciating */
+ /* Since the base thing will have been converted, all we do is copy its data */
+ }
+}
+
+void SFConvertLayerToOrder2(SplineFont *_sf,int layer) {
+ int i, k;
+ SplineFont *sf;
+
+ if ( _sf->cidmaster!=NULL ) _sf=_sf->cidmaster;
+ k = 0;
+ do {
+ sf = _sf->subfonts==NULL ? _sf : _sf->subfonts[k];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ SCConvertLayerToOrder2(sf->glyphs[i],layer);
+ sf->glyphs[i]->ticked = false;
+ sf->glyphs[i]->changedsincelasthinted = false;
+ }
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL && !sf->glyphs[i]->ticked )
+ SCConvertRefs(sf->glyphs[i],layer);
+
+ if ( layer!=ly_back )
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ SCNumberPoints(sf->glyphs[i],layer);
+ ++k;
+ } while ( k<_sf->subfontcnt );
+ _sf->layers[layer].order2 = true;
+}
+
+void SFConvertGridToOrder2(SplineFont *_sf) {
+ int k;
+ SplineSet *new;
+ SplineFont *sf;
+
+ if ( _sf->cidmaster!=NULL ) _sf=_sf->cidmaster;
+ k = 0;
+ do {
+ sf = _sf->subfonts==NULL ? _sf : _sf->subfonts[k];
+
+ new = SplineSetsTTFApprox(sf->grid.splines);
+ SplinePointListsFree(sf->grid.splines);
+ sf->grid.splines = new;
+
+ sf->grid.order2 = true;
+ ++k;
+ } while ( k<_sf->subfontcnt );
+ _sf->grid.order2 = true;
+}
+
+void SFConvertToOrder2(SplineFont *_sf) {
+ int layer;
+
+ for ( layer=0; layer<_sf->layer_cnt; ++layer )
+ SFConvertLayerToOrder2(_sf,layer);
+ SFConvertGridToOrder2(_sf);
+}
+
+
+/* ************************************************************************** */
+
+void SplineRefigure2(Spline *spline) {
+ SplinePoint *from = spline->from, *to = spline->to;
+ Spline1D *xsp = &spline->splines[0], *ysp = &spline->splines[1];
+ Spline old;
+
+#ifdef DEBUG
+ if ( RealNear(from->me.x,to->me.x) && RealNear(from->me.y,to->me.y))
+ IError("Zero length spline created");
+#endif
+ if ( spline->acceptableextrema )
+ old = *spline;
+
+ if ( from->nonextcp || to->noprevcp ||
+ ( from->nextcp.x==from->me.x && from->nextcp.y == from->me.y && from->nextcpindex>=0xfffe ) ||
+ ( to->prevcp.x==to->me.x && to->prevcp.y == to->me.y && from->nextcpindex>=0xfffe )) {
+ from->nonextcp = to->noprevcp = true;
+ from->nextcp = from->me;
+ to->prevcp = to->me;
+ }
+
+ if ( from->nonextcp && to->noprevcp )
+ /* Ok */;
+ else if ( from->nonextcp || to->noprevcp || from->nextcp.x!=to->prevcp.x ||
+ from->nextcp.y!=to->prevcp.y ) {
+ if ( RealNear(from->nextcp.x,to->prevcp.x) &&
+ RealNear(from->nextcp.y,to->prevcp.y)) {
+ from->nextcp.x = to->prevcp.x = (from->nextcp.x+to->prevcp.x)/2;
+ from->nextcp.y = to->prevcp.y = (from->nextcp.y+to->prevcp.y)/2;
+ } else {
+ IError("Invalid 2nd order spline in SplineRefigure2" );
+#ifndef GWW_TEST
+ /* I don't want these to go away when I'm debugging. I want to */
+ /* know how I got them */
+ from->nextcp.x = to->prevcp.x = (from->nextcp.x+to->prevcp.x)/2;
+ from->nextcp.y = to->prevcp.y = (from->nextcp.y+to->prevcp.y)/2;
+#endif
+ }
+ }
+
+ xsp->d = from->me.x; ysp->d = from->me.y;
+ if ( from->nonextcp && to->noprevcp ) {
+ spline->islinear = true;
+ xsp->c = to->me.x-from->me.x;
+ ysp->c = to->me.y-from->me.y;
+ xsp->a = xsp->b = 0;
+ ysp->a = ysp->b = 0;
+ } else {
+ /* from p. 393 (Operator Details, curveto) PostScript Lang. Ref. Man. (Red book) */
+ xsp->c = 2*(from->nextcp.x-from->me.x);
+ ysp->c = 2*(from->nextcp.y-from->me.y);
+ xsp->b = to->me.x-from->me.x-xsp->c;
+ ysp->b = to->me.y-from->me.y-ysp->c;
+ xsp->a = 0;
+ ysp->a = 0;
+ if ( RealNear(xsp->c,0)) xsp->c=0;
+ if ( RealNear(ysp->c,0)) ysp->c=0;
+ if ( RealNear(xsp->b,0)) xsp->b=0;
+ if ( RealNear(ysp->b,0)) ysp->b=0;
+ spline->islinear = false;
+ if ( ysp->b==0 && xsp->b==0 )
+ spline->islinear = true; /* This seems extremely unlikely... */
+ }
+ if ( isnan(ysp->b) || isnan(xsp->b) )
+ IError("NaN value in spline creation");
+ LinearApproxFree(spline->approx);
+ spline->approx = NULL;
+ spline->knowncurved = false;
+ spline->knownlinear = spline->islinear;
+ SplineIsLinear(spline);
+ spline->isquadratic = !spline->knownlinear;
+ spline->order2 = true;
+
+ if ( spline->acceptableextrema ) {
+ /* I don't check "d", because changes to that reflect simple */
+ /* translations which will not affect the shape of the spline */
+ /* (I don't check "a" because it is always 0 in a quadratic spline) */
+ if ( !RealNear(old.splines[0].b,spline->splines[0].b) ||
+ !RealNear(old.splines[0].c,spline->splines[0].c) ||
+ !RealNear(old.splines[1].b,spline->splines[1].b) ||
+ !RealNear(old.splines[1].c,spline->splines[1].c) )
+ spline->acceptableextrema = false;
+ }
+}
+
+void SplineRefigure(Spline *spline) {
+ if ( spline==NULL )
+return;
+ if ( spline->order2 )
+ SplineRefigure2(spline);
+ else
+ SplineRefigure3(spline);
+}
+
+static int IsHV(Spline *spline, int isfrom) {
+ SplinePoint *sp;
+
+ if ( spline==NULL )
+return( false );
+
+ if ( !isfrom ) {
+ sp = spline->to;
+ if ( sp->noprevcp )
+return( false );
+ if ( sp->me.x == sp->prevcp.x )
+return( 2 ); /* Vertical */
+ else if ( sp->me.y == sp->prevcp.y )
+return( 1 ); /* Horizontal */
+ else
+return( 0 ); /* Neither */
+ } else {
+ sp = spline->from;
+ if ( sp->nonextcp )
+return( false );
+ if ( sp->me.x == sp->nextcp.x )
+return( 2 ); /* Vertical */
+ else if ( sp->me.y == sp->nextcp.y )
+return( 1 ); /* Horizontal */
+ else
+return( 0 ); /* Neither */
+ }
+}
+
+void SplineRefigureFixup(Spline *spline) {
+ SplinePoint *from, *to, *prev, *next;
+ BasePoint foff, toff, unit, new;
+ bigreal len;
+ enum pointtype fpt, tpt;
+ int done = false;
+ extern int snaptoint;
+
+ if ( !spline->order2 ) {
+ SplineRefigure3(spline);
+return;
+ }
+ from = spline->from; to = spline->to;
+ if ( from->pointtype==pt_hvcurve && to->pointtype==pt_hvcurve ) {
+ done = true;
+ if ( !IsHV(from->prev,0) && !IsHV(to->next,1) ) {
+ if ( to->me.x == from->me.x ) {
+ from->nextcp.x = to->prevcp.x = to->me.x;
+ from->nextcp.y = to->prevcp.y = (from->me.y+from->me.y)/2;
+ } else if ( to->me.y==from->me.y ) {
+ from->nextcp.y = to->prevcp.y = to->me.y;
+ from->nextcp.x = to->prevcp.x = (from->me.x+from->me.x)/2;
+ /* Assume they are drawing clockwise */
+ } else if (( to->me.x>from->me.x && to->me.y>=from->me.y ) ||
+ (to->me.x<from->me.x && to->me.y<=from->me.y )) {
+ from->nextcp.x = to->prevcp.x = from->me.x;
+ from->nextcp.y = to->prevcp.y = to->me.y;
+ } else {
+ from->nextcp.x = to->prevcp.x = to->me.x;
+ from->nextcp.y = to->prevcp.y = from->me.y;
+ }
+ } else if ( !IsHV(to->next,1)) {
+ if ( IsHV(from->prev,0)==1 ) {
+ from->nextcp.x = to->prevcp.x = to->me.x;
+ from->nextcp.y = to->prevcp.y = from->me.y;
+ } else {
+ from->nextcp.x = to->prevcp.x = from->me.x;
+ from->nextcp.y = to->prevcp.y = to->me.y;
+ }
+ } else if ( !IsHV(from->prev,0)) {
+ if ( IsHV(to->next,1)==1 ) {
+ from->nextcp.x = to->prevcp.x = from->me.x;
+ from->nextcp.y = to->prevcp.y = to->me.y;
+ } else {
+ from->nextcp.x = to->prevcp.x = to->me.x;
+ from->nextcp.y = to->prevcp.y = from->me.y;
+ }
+ } else {
+ if ( IsHV(from->prev,0)==1 && IsHV(to->next,1)==2 ) {
+ from->nextcp.x = to->prevcp.x = to->me.x;
+ from->nextcp.y = to->prevcp.y = from->me.y;
+ } else if ( IsHV(from->prev,0)==2 && IsHV(to->next,1)==1 ) {
+ from->nextcp.x = to->prevcp.x = from->me.x;
+ from->nextcp.y = to->prevcp.y = to->me.y;
+ } else
+ done = false;
+ }
+ if ( done )
+ to->noprevcp = from->nonextcp = false;
+ }
+
+ if ( !done ) {
+ unit.x = from->nextcp.x-from->me.x;
+ unit.y = from->nextcp.y-from->me.y;
+ len = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( len!=0 )
+ unit.x /= len; unit.y /= len;
+
+ if ( (fpt = from->pointtype)==pt_hvcurve ) fpt = pt_curve;
+ if ( (tpt = to->pointtype)==pt_hvcurve ) tpt = pt_curve;
+ if ( from->nextcpdef && to->prevcpdef ) switch ( fpt*3+tpt ) {
+ case pt_corner*3+pt_corner:
+ case pt_corner*3+pt_tangent:
+ case pt_tangent*3+pt_corner:
+ case pt_tangent*3+pt_tangent:
+ from->nonextcp = to->noprevcp = true;
+ from->nextcp = from->me;
+ to->prevcp = to->me;
+ break;
+ case pt_curve*3+pt_curve:
+ case pt_curve*3+pt_corner:
+ case pt_corner*3+pt_curve:
+ case pt_tangent*3+pt_curve:
+ case pt_curve*3+pt_tangent:
+ if ( from->prev!=NULL && (from->pointtype==pt_tangent || from->pointtype==pt_hvcurve)) {
+ prev = from->prev->from;
+ foff.x = prev->me.x;
+ foff.y = prev->me.y;
+ } else if ( from->prev!=NULL ) {
+ prev = from->prev->from;
+ foff.x = to->me.x-prev->me.x + from->me.x;
+ foff.y = to->me.y-prev->me.y + from->me.y;
+ } else {
+ foff.x = from->me.x + (to->me.x-from->me.x)-(to->me.y-from->me.y);
+ foff.y = from->me.y + (to->me.x-from->me.x)+(to->me.y-from->me.y);
+ prev = NULL;
+ }
+ if ( to->next!=NULL && (to->pointtype==pt_tangent || to->pointtype==pt_hvcurve)) {
+ next = to->next->to;
+ toff.x = next->me.x;
+ toff.y = next->me.y;
+ } else if ( to->next!=NULL ) {
+ next = to->next->to;
+ toff.x = next->me.x-from->me.x + to->me.x;
+ toff.y = next->me.y-from->me.y + to->me.y;
+ } else {
+ toff.x = to->me.x + (to->me.x-from->me.x)+(to->me.y-from->me.y);
+ toff.y = to->me.y - (to->me.x-from->me.x)+(to->me.y-from->me.y);
+ next = NULL;
+ }
+ if (( from->pointtype==pt_hvcurve && foff.x!=from->me.x && foff.y!=from->me.y ) ||
+ ( to->pointtype==pt_hvcurve && toff.x!=to->me.x && toff.y!=to->me.y )) {
+ if ( from->me.x == to->me.x ) {
+ if ( from->pointtype==pt_hvcurve )
+ foff.x = from->me.x;
+ if ( to->pointtype==pt_hvcurve )
+ toff.x = to->me.x;
+ } else if ( from->me.y == to->me.y ) {
+ if ( from->pointtype==pt_hvcurve )
+ foff.y = from->me.y;
+ if ( to->pointtype==pt_hvcurve )
+ toff.y = to->me.y;
+ } else {
+ if ( from->pointtype==pt_hvcurve && foff.x!=from->me.x && foff.y!=from->me.y ) {
+ if ( fabs(foff.x-from->me.x) > fabs(foff.y-from->me.y) )
+ foff.y = from->me.y;
+ else
+ foff.x = from->me.x;
+ }
+ if ( to->pointtype==pt_hvcurve && toff.x!=to->me.x && toff.y!=to->me.y ) {
+ if ( from->pointtype==pt_hvcurve ) {
+ if ( from->me.x==foff.x )
+ toff.y = to->me.y;
+ else
+ toff.x = to->me.x;
+ } else if ( fabs(toff.x-to->me.x) > fabs(toff.y-to->me.y) )
+ toff.y = to->me.y;
+ else
+ toff.x = to->me.x;
+ }
+ }
+ }
+ if ( IntersectLinesClip(&from->nextcp,&foff,&from->me,&toff,&to->me)) {
+ from->nonextcp = to->noprevcp = false;
+ to->prevcp = from->nextcp;
+ if ( (from->pointtype==pt_curve || from->pointtype==pt_hvcurve ) &&
+ !from->noprevcp && from->prev!=NULL ) {
+ prev = from->prev->from;
+ if ( IntersectLinesClip(&from->prevcp,&from->nextcp,&from->me,&prev->nextcp,&prev->me)) {
+ prev->nextcp = from->prevcp;
+ SplineRefigure2(from->prev);
+ }
+ }
+ if ( (to->pointtype==pt_curve || to->pointtype==pt_hvcurve) &&
+ !to->nonextcp && to->next!=NULL ) {
+ next = to->next->to;
+ if ( IntersectLinesClip(&to->nextcp,&to->prevcp,&to->me,&next->prevcp,&next->me)) {
+ next->prevcp = to->nextcp;
+ SplineRefigure(to->next);
+ }
+ }
+ }
+ break;
+ } else {
+ /* Can't set things arbetrarily here, but make sure they are consistant */
+ if ( (from->pointtype==pt_curve || from->pointtype==pt_hvcurve ) &&
+ !from->noprevcp && !from->nonextcp ) {
+ unit.x = from->nextcp.x-from->me.x;
+ unit.y = from->nextcp.y-from->me.y;
+ len = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( len!=0 ) {
+ unit.x /= len; unit.y /= len;
+ len = sqrt((from->prevcp.x-from->me.x)*(from->prevcp.x-from->me.x) + (from->prevcp.y-from->me.y)*(from->prevcp.y-from->me.y));
+ new.x = -len*unit.x + from->me.x; new.y = -len*unit.y + from->me.y;
+ if ( new.x-from->prevcp.x<-1 || new.x-from->prevcp.x>1 ||
+ new.y-from->prevcp.y<-1 || new.y-from->prevcp.y>1 ) {
+ prev = NULL;
+ if ( from->prev!=NULL && (prev = from->prev->from)!=NULL &&
+ IntersectLinesClip(&from->prevcp,&new,&from->me,&prev->nextcp,&prev->me)) {
+ prev->nextcp = from->prevcp;
+ SplineRefigure2(from->prev);
+ } else {
+ from->prevcp = new;
+ if ( prev!=NULL )
+ prev->nextcp = new;
+ }
+ }
+ }
+ } else if ( from->pointtype==pt_tangent ) {
+ if ( from->prev!=NULL ) {
+ prev = from->prev->from;
+ if ( !from->noprevcp && !prev->nonextcp &&
+ IntersectLinesClip(&from->prevcp,&to->me,&from->me,&prev->nextcp,&prev->me)) {
+ prev->nextcp = from->prevcp;
+ SplineRefigure2(from->prev);
+ }
+ if ( !from->nonextcp && !to->noprevcp &&
+ IntersectLinesClip(&from->nextcp,&prev->me,&from->me,&to->prevcp,&to->me))
+ to->prevcp = from->nextcp;
+ }
+ }
+ if ( (to->pointtype==pt_curve || to->pointtype==pt_hvcurve ) &&
+ !to->noprevcp && !to->nonextcp ) {
+ unit.x = to->prevcp.x-to->nextcp.x;
+ unit.y = to->prevcp.y-to->nextcp.y;
+ len = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( len!=0 ) {
+ unit.x /= len; unit.y /= len;
+ len = sqrt((to->nextcp.x-to->me.x)*(to->nextcp.x-to->me.x) + (to->nextcp.y-to->me.y)*(to->nextcp.y-to->me.y));
+ new.x = -len*unit.x + to->me.x; new.y = -len*unit.y + to->me.y;
+ if ( new.x-to->nextcp.x<-1 || new.x-to->nextcp.x>1 ||
+ new.y-to->nextcp.y<-1 || new.y-to->nextcp.y>1 ) {
+ if ( to->next!=NULL && (next = to->next->to)!=NULL &&
+ IntersectLinesClip(&to->nextcp,&new,&to->me,&next->prevcp,&next->me)) {
+ next->prevcp = to->nextcp;
+ SplineRefigure2(to->next);
+ } else {
+ to->nextcp = new;
+ if ( to->next!=NULL ) {
+ to->next->to->prevcp = new;
+ SplineRefigure(to->next);
+ }
+ }
+ }
+ }
+ } else if ( to->pointtype==pt_tangent ) {
+ if ( to->next!=NULL ) {
+ next = to->next->to;
+ if ( !to->nonextcp && !next->noprevcp &&
+ IntersectLinesClip(&to->nextcp,&from->me,&to->me,&next->prevcp,&next->me)) {
+ next->prevcp = to->nextcp;
+ SplineRefigure2(to->next);
+ }
+ if ( !from->nonextcp && !to->noprevcp &&
+ IntersectLinesClip(&from->nextcp,&next->me,&to->me,&from->nextcp,&from->me))
+ to->prevcp = from->nextcp;
+ }
+ }
+ }
+ if ( from->nonextcp && to->noprevcp )
+ /* Ok */;
+ else if ( from->nonextcp || to->noprevcp ) {
+ from->nonextcp = to->noprevcp = true;
+ } else if (( from->nextcp.x==from->me.x && from->nextcp.y==from->me.y ) ||
+ ( to->prevcp.x==to->me.x && to->prevcp.y==to->me.y ) ) {
+ from->nonextcp = to->noprevcp = true;
+ } else if ( from->nonextcp || to->noprevcp || from->nextcp.x!=to->prevcp.x ||
+ from->nextcp.y!=to->prevcp.y ) {
+ if ( !IntersectLinesClip(&from->nextcp,
+ (from->pointtype==pt_tangent && from->prev!=NULL)?&from->prev->from->me:&from->nextcp, &from->me,
+ (to->pointtype==pt_tangent && to->next!=NULL)?&to->next->to->me:&to->prevcp, &to->me)) {
+ from->nextcp.x = (from->me.x+to->me.x)/2;
+ from->nextcp.y = (from->me.y+to->me.y)/2;
+ }
+ to->prevcp = from->nextcp;
+ if (( from->nextcp.x==from->me.x && from->nextcp.y==from->me.y ) ||
+ ( to->prevcp.x==to->me.x && to->prevcp.y==to->me.y ) ) {
+ from->nonextcp = to->noprevcp = true;
+ from->nextcp = from->me;
+ to->prevcp = to->me;
+ }
+ }
+ }
+ if ( snaptoint && !from->nonextcp ) {
+ from->nextcp.x = to->prevcp.x = rint(from->nextcp.x);
+ from->nextcp.y = to->prevcp.y = rint(from->nextcp.y);
+ }
+ SplineRefigure2(spline);
+
+ /* Now in order2 splines it is possible to request combinations that are */
+ /* mathematically impossible -- two adjacent hv points often don't work */
+ if ( to->pointtype==pt_hvcurve &&
+ !(to->prevcp.x == to->me.x && to->prevcp.y != to->me.y ) &&
+ !(to->prevcp.y == to->me.y && to->prevcp.x != to->me.x ) )
+ to->pointtype = pt_curve;
+ if ( from->pointtype==pt_hvcurve &&
+ !(from->nextcp.x == from->me.x && from->nextcp.y != from->me.y ) &&
+ !(from->nextcp.y == from->me.y && from->nextcp.x != from->me.x ) )
+ from->pointtype = pt_curve;
+}
+
+Spline *SplineMake2(SplinePoint *from, SplinePoint *to) {
+ Spline *spline = chunkalloc(sizeof(Spline));
+
+ spline->from = from; spline->to = to;
+ from->next = to->prev = spline;
+ spline->order2 = true;
+ SplineRefigure2(spline);
+return( spline );
+}
+
+Spline *SplineMake(SplinePoint *from, SplinePoint *to, int order2) {
+ if (order2 > 0)
+return( SplineMake2(from,to));
+ else
+return( SplineMake3(from,to));
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splineoverlap.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splineoverlap.c
new file mode 100644
index 0000000000..1c1a430b52
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splineoverlap.c
@@ -0,0 +1,442 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "edgelist2.h"
+
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+/* First thing we do is divide each spline into a set of sub-splines each of */
+/* which is monotonic in both x and y (always increasing or decreasing) */
+/* Then we compare each monotonic spline with every other one and see if they*/
+/* intersect. If they do, split each up into sub-sub-segments and create an*/
+/* intersection point (note we need to be a little careful if an intersec- */
+/* tion happens at an end point. We don't need to create a intersection for */
+/* two adjacent splines, there isn't a real intersection... but if a third */
+/* spline crosses that point (or ends there) then all three (four) splines */
+/* need to be joined into an intersection point) */
+/* Nasty things happen if splines are coincident. They will almost never be */
+/* perfectly coincident and will keep crossing and recrossing as rounding */
+/* errors suggest one is before the other. Look for coincident splines and */
+/* treat the places they start and stop being coincident as intersections */
+/* then when we find needed splines below look for these guys and ignore */
+/* recrossings of splines which are close together */
+/* Figure out if each monotonic sub-spline is needed or not */
+/* (Note: It was tempting to split the bits up into real splines rather */
+/* than keeping them as sub-sections of the original. Unfortunately this */
+/* splitting introduced rounding errors which meant that we got more */
+/* intersections, which meant that splines could be both needed and un. */
+/* so I don't do that until later) */
+/* if the spline hasn't been tagged yet: */
+/* does the spline change greater in x or y? */
+/* draw a line parallel to the OTHER axis which hits our spline and doesn't*/
+/* hit any endpoints (or intersections, which are end points too now) */
+/* count the winding number (as we do this we can mark other splines as */
+/* needed or not) and figure out if our spline is needed */
+/* So run through the list of intersections */
+/* At an intersection there should be an even number of needed monos. */
+/* Use this as the basis of a new splineset, trace it around until */
+/* we get back to the start intersection (should happen) */
+/* (Note: We may need to reverse a monotonic sub-spline or two) */
+/* As we go, mark each monotonic as having been used */
+/* Keep doing this until all needed exits from all intersections have been */
+/* used. */
+/* The free up our temporary data structures, merge in any open splinesets */
+/* free the old closed splinesets */
+
+// Frank recommends using the following macro whenever making changes
+// to this code and capturing and diffing output in order to track changes
+// in errors and reports.
+// (The pointers tend to clutter the diff a bit.)
+// #define FF_OVERLAP_VERBOSE
+
+static char *glyphname=NULL;
+
+static void SOError(const char *format,...) {
+ va_list ap;
+ va_start(ap,format);
+ if ( glyphname==NULL )
+ fprintf(stderr, "Internal Error (overlap): " );
+ else
+ fprintf(stderr, "Internal Error (overlap) in %s: ", glyphname );
+ vfprintf(stderr,format,ap);
+ va_end(ap);
+}
+
+#ifdef FF_OVERLAP_VERBOSE
+#define ValidateMListTs_IF_VERBOSE(input) ValidateMListTs(input);
+#else
+#define ValidateMListTs_IF_VERBOSE(input)
+#endif
+
+static void Validate(Monotonic *ms, Intersection *ilist) {
+ MList *ml;
+ int mcnt;
+
+ while ( ilist!=NULL ) {
+ // For each listed intersection, verify that each connected monotonic
+ // starts or ends at the intersection (identified by pointer, not geography).
+ for ( mcnt=0, ml=ilist->monos; ml!=NULL; ml=ml->next ) {
+ if ( ml->m->isneeded ) ++mcnt;
+ if ( ml->m->start!=ilist && ml->m->end!=ilist )
+ SOError( "Intersection (%g,%g) not on a monotonic which should contain it.\n",
+ (double) ilist->inter.x, (double) ilist->inter.y );
+ }
+ if ( mcnt&1 )
+ SOError( "Odd number of needed monotonic sections at intersection. (%g,%g)\n",
+ (double) ilist->inter.x,(double) ilist->inter.y );
+ ilist = ilist->next;
+ }
+
+ while ( ms!=NULL ) {
+ if ( ms->prev == NULL )
+ SOError( "Open monotonic loop.\n" );
+ else if ( ms->prev->end!=ms->start )
+ SOError( "Mismatched intersection.\n (%g,%g)->(%g,%g) ends at (%g,%g) while (%g,%g)->(%g,%g) starts at (%g,%g)\n",
+ (double) ms->prev->s->from->me.x,(double) ms->prev->s->from->me.y,
+ (double) ms->prev->s->to->me.x,(double) ms->prev->s->to->me.y,
+ (double) (ms->prev->end!=NULL?ms->prev->end->inter.x:-999999), (double) (ms->prev->end!=NULL?ms->prev->end->inter.y:-999999),
+ (double) ms->s->from->me.x,(double) ms->s->from->me.y,
+ (double) ms->s->to->me.x,(double) ms->s->to->me.y,
+ (double) (ms->start!=NULL?ms->start->inter.x:-999999), (double) (ms->start!=NULL?ms->start->inter.y:-999999) );
+ ms = ms->linked;
+ }
+}
+
+static Monotonic *SplineToMonotonic(Spline *s,extended startt,extended endt,
+ Monotonic *last,int exclude) {
+ Monotonic *m;
+ BasePoint start, end;
+
+ if ( startt==0 )
+ start = s->from->me;
+ else {
+ start.x = ((s->splines[0].a*startt+s->splines[0].b)*startt+s->splines[0].c)*startt
+ + s->splines[0].d;
+ start.y = ((s->splines[1].a*startt+s->splines[1].b)*startt+s->splines[1].c)*startt
+ + s->splines[1].d;
+ }
+ if ( endt==1.0 )
+ end = s->to->me;
+ else {
+ end.x = ((s->splines[0].a*endt+s->splines[0].b)*endt+s->splines[0].c)*endt
+ + s->splines[0].d;
+ end.y = ((s->splines[1].a*endt+s->splines[1].b)*endt+s->splines[1].c)*endt
+ + s->splines[1].d;
+ }
+ if ( ( (real) (((start.x+end.x)/2)==start.x || (real) ((start.x+end.x)/2)==end.x) &&
+ (real) (((start.y+end.y)/2)==start.y || (real) ((start.y+end.y)/2)==end.y) ) ||
+ (endt <= startt) || Within4RoundingErrors(startt, endt)) {
+ /* The distance between the two extrema is so small */
+ /* as to be unobservable. In other words we'd end up with a zero*/
+ /* length spline */
+ if ( endt==1.0 && last!=NULL && last->s==s )
+ last->tend = endt;
+return( last );
+ }
+
+ m = chunkalloc(sizeof(Monotonic));
+ m->s = s;
+ m->tstart = startt;
+ m->tend = endt;
+#ifdef FF_RELATIONAL_GEOM
+ m->otstart = startt;
+ m->otend = endt;
+#endif
+ m->exclude = exclude;
+
+ if ( end.x>start.x ) {
+ m->xup = true;
+ m->b.minx = start.x;
+ m->b.maxx = end.x;
+ } else {
+ m->b.minx = end.x;
+ m->b.maxx = start.x;
+ }
+ if ( end.y>start.y ) {
+ m->yup = true;
+ m->b.miny = start.y;
+ m->b.maxy = end.y;
+ } else {
+ m->b.miny = end.y;
+ m->b.maxy = start.y;
+ }
+
+ if ( last!=NULL ) {
+ // Validate(last, NULL);
+ last->next = m;
+ last->linked = m;
+ m->prev = last;
+ // Validate(last, NULL);
+ }
+return( m );
+}
+
+
+static int BpSame(BasePoint *bp1, BasePoint *bp2) {
+ BasePoint mid;
+
+ mid.x = (bp1->x+bp2->x)/2; mid.y = (bp1->y+bp2->y)/2;
+ if ( (bp1->x==mid.x || bp2->x==mid.x) &&
+ (bp1->y==mid.y || bp2->y==mid.y))
+return( true );
+
+return( false );
+}
+
+static int SSRmNullSplines(SplineSet *spl) {
+ Spline *s, *first, *next;
+
+ first = NULL;
+ for ( s=spl->first->next ; s!=first; s=next ) {
+ next = s->to->next;
+ if ( ((s->splines[0].a>-.01 && s->splines[0].a<.01 &&
+ s->splines[0].b>-.01 && s->splines[0].b<.01 &&
+ s->splines[1].a>-.01 && s->splines[1].a<.01 &&
+ s->splines[1].b>-.01 && s->splines[1].b<.01) ||
+ /* That describes a null spline (a line between the same end-point) */
+ RealNear((s->from->nextcp.x-s->from->me.x)*(s->to->me.y-s->to->prevcp.y)-
+ (s->from->nextcp.y-s->from->me.y)*(s->to->me.x-s->to->prevcp.x),0)) &&
+ /* And the above describes a point with a spline between it */
+ /* and itself where the spline covers no area (the two cps */
+ /* point in the same direction) */
+ BpSame(&s->from->me,&s->to->me)) {
+ if ( next==s )
+return( true );
+ if ( next->from->selected ) s->from->selected = true;
+ s->from->next = next;
+ s->from->nextcp = next->from->nextcp;
+ s->from->nonextcp = next->from->nonextcp;
+ s->from->nextcpdef = next->from->nextcpdef;
+ SplinePointFree(next->from);
+ if ( spl->first==next->from )
+ spl->last = spl->first = s->from;
+ next->from = s->from;
+ SplineFree(s);
+ } else {
+ if ( first==NULL )
+ first = s;
+ }
+ }
+return( false );
+}
+
+static Monotonic *SSToMContour(SplineSet *spl, Monotonic *start,
+ Monotonic **end, enum overlap_type ot) {
+ extended ts[4];
+ Spline *first, *s;
+ Monotonic *head=NULL, *last=NULL;
+ int cnt, i, selected = false;
+ extended lastt;
+
+ if ( spl->first->prev==NULL )
+return( start ); /* Open contours have no interior, ignore 'em */
+ if ( spl->first->prev->from==spl->first &&
+ spl->first->noprevcp && spl->first->nonextcp )
+return( start ); /* Let's just remove single points */
+
+ if ( ot==over_rmselected || ot==over_intersel || ot==over_fisel ) {
+ if ( !selected )
+ return( start );
+ }
+
+ /* We blow up on zero length splines. And a zero length contour is nasty */
+ if ( SSRmNullSplines(spl))
+return( start );
+
+ first = NULL;
+ for ( s=spl->first->next; s!=first; s=s->to->next ) {
+ if ( first==NULL ) first = s;
+ cnt = Spline2DFindExtrema(s,ts);
+ lastt = 0;
+ for ( i=0; i<cnt; ++i ) {
+ last = SplineToMonotonic(s,lastt,ts[i],last,selected);
+ if ( head==NULL ) head = last;
+ lastt=ts[i];
+ }
+ if ( lastt!=1.0 ) {
+ last = SplineToMonotonic(s,lastt,1.0,last,selected);
+ if ( head==NULL ) head = last;
+ }
+ }
+ head->prev = last;
+ last->next = head;
+ if ( start==NULL )
+ start = head;
+ else
+ (*end)->linked = head;
+ *end = last;
+ Validate(start, NULL);
+return( start );
+}
+
+Monotonic *SSsToMContours(SplineSet *spl, enum overlap_type ot) {
+ Monotonic *head=NULL, *last = NULL;
+
+ while ( spl!=NULL ) {
+ if ( spl->first->prev!=NULL )
+ head = SSToMContour(spl,head,&last,ot);
+ spl = spl->next;
+ }
+return( head );
+}
+
+/* An IEEE double has 52 bits of precision. So one unit of rounding error will be */
+/* the number divided by 2^51 */
+# define BR_RE_Factor (1024.0*1024.0*1024.0*1024.0*1024.0*2.0)
+/* But that's not going to work near 0, so, since the t values we care about */
+/* are [0,1], let's use 1.0/D_RE_Factor */
+
+#ifdef FF_OVERLAP_VERBOSE
+#define FF_DUMP_MONOTONIC_IF_VERBOSE(m) DumpMonotonic(m);
+#else
+#define FF_DUMP_MONOTONIC_IF_VERBOSE(m)
+#endif
+
+static int mcmp(const void *_p1, const void *_p2) {
+ const Monotonic * const *mpt1 = _p1, * const *mpt2 = _p2;
+ if ( (*mpt1)->other>(*mpt2)->other )
+return( 1 );
+ else if ( (*mpt1)->other<(*mpt2)->other )
+return( -1 );
+
+return( 0 );
+}
+
+int CheckMonotonicClosed(struct monotonic *ms) {
+ struct monotonic * current;
+ if (ms == NULL) return 0;
+ current = ms->next;
+ while (current != ms && current != NULL) {
+ current = current->next;
+ }
+ if (current == NULL) return 0;
+ return 1;
+}
+
+int MonotonicFindAt(Monotonic *ms,int which, extended test, Monotonic **space ) {
+ /* Find all monotonic sections which intersect the line (x,y)[which] == test */
+ /* find the value of the other coord on that line */
+ /* Order them (by the other coord) */
+ /* then run along that line figuring out which monotonics are needed */
+ extended t;
+ Monotonic *m, *mm;
+ int i, j, k, cnt;
+ int nw = !which;
+
+ for ( m=ms, i=0; m!=NULL; m=m->linked ) {
+ if (CheckMonotonicClosed(m) == 0) continue; // Open monotonics break things.
+ if (( which==0 && test >= m->b.minx && test <= m->b.maxx ) ||
+ ( which==1 && test >= m->b.miny && test <= m->b.maxy )) {
+ /* Lines parallel to the direction we are testing just get in the */
+ /* way and don't add any useful info */
+ if ( m->s->knownlinear &&
+ (( which==1 && m->s->from->me.y==m->s->to->me.y ) ||
+ (which==0 && m->s->from->me.x==m->s->to->me.x)))
+ continue;
+ t = IterateSplineSolveFixup(&m->s->splines[which],m->tstart,m->tend,test);
+ if ( t==-1 ) {
+ if ( which==0 ) {
+ if (( test-m->b.minx > m->b.maxx-test && m->xup ) ||
+ ( test-m->b.minx < m->b.maxx-test && !m->xup ))
+ t = m->tstart;
+ else
+ t = m->tend;
+ } else {
+ if (( test-m->b.miny > m->b.maxy-test && m->yup ) ||
+ ( test-m->b.miny < m->b.maxy-test && !m->yup ))
+ t = m->tstart;
+ else
+ t = m->tend;
+ }
+ }
+ m->t = t;
+ if ( t==m->tend ) t -= (m->tend-m->tstart)/100;
+ else if ( t==m->tstart ) t += (m->tend-m->tstart)/100;
+ m->other = ((m->s->splines[nw].a*t+m->s->splines[nw].b)*t+
+ m->s->splines[nw].c)*t+m->s->splines[nw].d;
+ space[i++] = m;
+ }
+ }
+ cnt = i;
+
+ /* Things get a little tricky at end-points */
+ for ( i=0; i<cnt; ++i ) {
+ m = space[i];
+ if ( m->t==m->tend ) {
+ /* Ignore horizontal/vertical lines (as appropriate) */
+ for ( mm=m->next; mm!=m && mm !=NULL; mm=mm->next ) {
+ if ( !mm->s->knownlinear )
+ break;
+ if (( which==1 && mm->s->from->me.y!=m->s->to->me.y ) ||
+ (which==0 && mm->s->from->me.x!=m->s->to->me.x))
+ break;
+ }
+ } else if ( m->t==m->tstart ) {
+ for ( mm=m->prev; mm!=m && mm !=NULL; mm=mm->prev ) {
+ if ( !mm->s->knownlinear )
+ break;
+ if (( which==1 && mm->s->from->me.y!=m->s->to->me.y ) ||
+ (which==0 && mm->s->from->me.x!=m->s->to->me.x))
+ break;
+ }
+ } else
+ break;
+ /* If the next monotonic continues in the same direction, and we found*/
+ /* it too, then don't count both. They represent the same intersect */
+ /* If they are in oposite directions then they cancel each other out */
+ /* and that is correct */
+ if ( mm!=m && /* Should always be true */
+ (&mm->xup)[which]==(&m->xup)[which] ) {
+ for ( j=cnt-1; j>=0; --j )
+ if ( space[j]==mm )
+ break;
+ if ( j!=-1 ) {
+ /* remove mm */
+ for ( k=j+1; k<cnt; ++k )
+ space[k-1] = space[k];
+ --cnt;
+ if ( i>j ) --i;
+ }
+ }
+ }
+
+ space[cnt] = NULL; space[cnt+1] = NULL;
+ qsort(space,cnt,sizeof(Monotonic *),mcmp);
+return(cnt);
+}
+
+void FreeMonotonics(Monotonic *m) {
+ Monotonic *next;
+
+ while ( m!=NULL ) {
+ next = m->linked;
+ chunkfree(m,sizeof(*m));
+ m = next;
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinerefigure.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splinerefigure.c
new file mode 100644
index 0000000000..917b94ebd5
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinerefigure.c
@@ -0,0 +1,107 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+/* The slight errors introduced by the optimizer turn out to have nasty */
+/* side effects. An error on the order of 7e-8 in splines[1].b caused */
+/* the rasterizer to have kaniptions */
+void SplineRefigure3(Spline *spline) {
+ SplinePoint *from = spline->from, *to = spline->to;
+ Spline1D *xsp = &spline->splines[0], *ysp = &spline->splines[1];
+ Spline old;
+
+ spline->isquadratic = false;
+ if ( spline->acceptableextrema )
+ old = *spline;
+ xsp->d = from->me.x; ysp->d = from->me.y;
+ int nonextcp_effective = 0;
+ int noprevcp_effective = 0;
+ if ( from->nonextcp ) { from->nextcp = from->me; nonextcp_effective = true; }
+ else if ( from->nextcp.x==from->me.x && from->nextcp.y == from->me.y ) { nonextcp_effective = true; }
+ if ( to->noprevcp ) { to->prevcp = to->me; noprevcp_effective = true; }
+ else if ( to->prevcp.x==to->me.x && to->prevcp.y == to->me.y ) { noprevcp_effective = true; }
+ if ( nonextcp_effective && noprevcp_effective ) {
+ spline->islinear = true;
+ xsp->c = to->me.x-from->me.x;
+ ysp->c = to->me.y-from->me.y;
+ xsp->a = xsp->b = 0;
+ ysp->a = ysp->b = 0;
+ } else {
+ /* from p. 393 (Operator Details, curveto) PostScript Lang. Ref. Man. (Red book) */
+ xsp->c = 3*(from->nextcp.x-from->me.x);
+ ysp->c = 3*(from->nextcp.y-from->me.y);
+ xsp->b = 3*(to->prevcp.x-from->nextcp.x)-xsp->c;
+ ysp->b = 3*(to->prevcp.y-from->nextcp.y)-ysp->c;
+ xsp->a = to->me.x-from->me.x-xsp->c-xsp->b;
+ ysp->a = to->me.y-from->me.y-ysp->c-ysp->b;
+ if ( RealNear(xsp->c,0)) xsp->c=0;
+ if ( RealNear(ysp->c,0)) ysp->c=0;
+ if ( RealNear(xsp->b,0)) xsp->b=0;
+ if ( RealNear(ysp->b,0)) ysp->b=0;
+ if ( RealNear(xsp->a,0)) xsp->a=0;
+ if ( RealNear(ysp->a,0)) ysp->a=0;
+ if ( xsp->a!=0 && ( Within16RoundingErrors(xsp->a+from->me.x,from->me.x) ||
+ Within16RoundingErrors(xsp->a+to->me.x,to->me.x)))
+ xsp->a = 0;
+ if ( ysp->a!=0 && ( Within16RoundingErrors(ysp->a+from->me.y,from->me.y) ||
+ Within16RoundingErrors(ysp->a+to->me.y,to->me.y)))
+ ysp->a = 0;
+ SplineIsLinear(spline);
+ spline->islinear = false;
+ if ( ysp->a==0 && xsp->a==0 ) {
+ if ( ysp->b==0 && xsp->b==0 )
+ spline->islinear = true; /* This seems extremely unlikely... */
+ else
+ spline->isquadratic = true; /* Only likely if we read in a TTF */
+ }
+ }
+ if ( !isfinite(ysp->a) || !isfinite(xsp->a) || !isfinite(ysp->c) || !isfinite(xsp->c) || !isfinite(ysp->d) || !isfinite(xsp->d))
+ IError("NaN value in spline creation");
+ LinearApproxFree(spline->approx);
+ spline->approx = NULL;
+ spline->knowncurved = false;
+ spline->knownlinear = spline->islinear;
+ SplineIsLinear(spline);
+ spline->order2 = false;
+
+ if ( spline->acceptableextrema ) {
+ /* I don't check "d", because changes to that reflect simple */
+ /* translations which will not affect the shape of the spline */
+ if ( !RealNear(old.splines[0].a,spline->splines[0].a) ||
+ !RealNear(old.splines[0].b,spline->splines[0].b) ||
+ !RealNear(old.splines[0].c,spline->splines[0].c) ||
+ !RealNear(old.splines[1].a,spline->splines[1].a) ||
+ !RealNear(old.splines[1].b,spline->splines[1].b) ||
+ !RealNear(old.splines[1].c,spline->splines[1].c) )
+ spline->acceptableextrema = false;
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinesave.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splinesave.c
new file mode 100644
index 0000000000..38ef12534c
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinesave.c
@@ -0,0 +1,2065 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+#include "psfont.h"
+
+float GenerateHintWidthEqualityTolerance = 0.0;
+int autohint_before_generate = 1;
+
+/* Let's talk about references. */
+/* If we are doing Type1 output, then the obvious way of doing them is seac */
+/* but that's so limitting. It only works for exactly two characters both */
+/* of which are in Adobe's Standard Enc. Only translations allowed. Only */
+/* one reference may be translated and the width of the char must match */
+/* that of the non-translated reference */
+/* The first extension we can make is to allow a single character reference */
+/* by making the other character be a space */
+/* But if we want to do more than that we must use subrs. If we have two */
+/* refs in subrs then we can do translations by preceding the subr calls by */
+/* appropriate rmovetos. Actually the specs say that only one rmoveto should */
+/* precede a path, so that means we can't allow the subroutines to position */
+/* themselves, they must just assume that they are called with the current */
+/* position correct for the first point. But then we need to know where the */
+/* first point should be placed, so we allocate a BasePoint to hold that info*/
+/* and store it into the "keys" array (which the subrs don't use). Similarly */
+/* we need to know where the subr will leave us, so we actually allocate 2 */
+/* BasePoints, one containing the start point, one the end point */
+/* But that's still not good enough, hints are defined in such a way that */
+/* they are not relocateable. So our subrs can't include any hint definitions*/
+/* (or if they do then that subr can't be translated at all). So hints must */
+/* be set outside the subrs, and the subrs can't be for chars that need hint */
+/* substitution. Unless... The subr will never be relocated. */
+/* So we generate two types of reference subrs, one containing no hints, the*/
+/* other containing all the hints, stems and flexes. The first type may be */
+/* translated, the second cannot */
+/* Type2 doesn't allow any seacs */
+/* So everything must go in subrs. We have a slightly different problem here:*/
+/* hintmasks need to know exactly how many stem hints there are in the char */
+/* so we can't include any hintmask operators inside a subr (unless we */
+/* guarantee that all invocations of that subr are done with the same number */
+/* of hints in the character). This again means that no char with hint subs- */
+/* titutions may be put in a subr. UNLESS all the other references in a */
+/* refering character contain no hints */
+
+/* That's very complex. And it doesn't do a very good job. */
+/* Instead let's take all strings bounded by either moveto or hintmask operators */
+/* store these as potential subroutines. So a glyph becomes a sequence of */
+/* potential subroutine calls preceded by the glyph header (width, hint decl,*/
+/* counter declarations, etc.) and intersperced by hintmask/moveto operators */
+/* Each time we get a potential subr we hash it and see if we've used that */
+/* string before. If we have then we merge the two. Otherwise it's a new one.*/
+/* Then at the end we see what strings get used often enough to go into subrs */
+/* we create the subrs array from that. */
+/* Then each glyph. We insert the preamble. We check of the potential subroutine */
+/* became a real subroutine. If so we call it, else we insert the data inline*/
+/* Do the same for the next hintmask/moveto and potential subroutine... */
+
+/* Then, on top of that I tried generating some full glyph subroutines, and */
+/* to my surprise, it just made things worse. */
+
+struct potentialsubrs {
+ uint8 *data; /* the charstring of the subr */
+ int len; /* the length of the charstring */
+ int idx; /* initially index into psubrs array */
+ /* then index into subrs array or -1 if none */
+ int cnt; /* the usage count */
+ int fd; /* Which sub font is it in */
+ /* -1 => used in more than one */
+ int next;
+ int full_glyph_index; /* Into the glyphbits array */
+ /* for full references */
+ BasePoint *startstop; /* Again for full references */
+};
+
+struct bits {
+ uint8 *data;
+ int dlen;
+ int psub_index;
+};
+
+struct glyphbits {
+ SplineChar *sc;
+ int fd; /* Which subfont is it in */
+ int bcnt;
+ struct bits *bits;
+ uint8 wasseac;
+};
+
+#define HSH_SIZE 511
+/* In type2 charstrings we divide every character into bits where a bit is */
+/* bounded by a hintmask/moveto. Each of these is a potential subroutine and */
+/* is stored here */
+typedef struct glyphinfo {
+ struct potentialsubrs *psubrs;
+ int pcnt, pmax;
+ int hashed[HSH_SIZE];
+ struct glyphbits *gb, *active;
+ SplineFont *sf;
+ int layer;
+ int glyphcnt;
+ int subfontcnt;
+ int bcnt, bmax;
+ struct bits *bits; /* For current glyph */
+ const int *bygid;
+ int justbroken;
+ int instance_count;
+} GlyphInfo;
+
+struct mhlist {
+ uint8 mask[HntMax/8];
+ int subr;
+ struct mhlist *next;
+};
+
+struct hintdb {
+ uint8 mask[HntMax/8];
+ int cnt; /* number of hints */
+ struct mhlist *sublist;
+ struct pschars *subrs;
+ /*SplineChar *sc;*/
+ SplineChar **scs;
+ int instance_count;
+ unsigned int iscjk: 1; /* If cjk then don't do stem3 hints */
+ /* Will be done with counters instead */
+ /* actually, most of the time we can't use stem3s, only if those three*/
+ /* stems are always active and there are no other stems !(h/v)hasoverlap*/
+ unsigned int noconflicts: 1;
+ unsigned int startset: 1;
+ unsigned int skiphm: 1; /* Set when coming back to the start point of a contour. hintmask should be set the first time, not the second */
+ unsigned int donefirsthm: 1;
+ int cursub; /* Current subr number */
+ DBasePoint current;
+ GlyphInfo *gi;
+};
+
+static void GIContentsFree(GlyphInfo *gi,SplineChar *dummynotdef) {
+ int i,j;
+
+ if ( gi->glyphcnt>0 && gi->gb[0].sc == dummynotdef ) {
+ if ( dummynotdef->layers!=NULL ) {
+ SplinePointListsFree(dummynotdef->layers[gi->layer].splines);
+ dummynotdef->layers[gi->layer].splines = NULL;
+ }
+ StemInfosFree(dummynotdef->hstem);
+ StemInfosFree(dummynotdef->vstem);
+ dummynotdef->vstem = dummynotdef->hstem = NULL;
+ free(dummynotdef->layers);
+ dummynotdef->layers = NULL;
+ }
+
+ for ( i=0; i<gi->pcnt; ++i ) {
+ free(gi->psubrs[i].data);
+ free(gi->psubrs[i].startstop);
+ gi->psubrs[i].data = NULL;
+ gi->psubrs[i].startstop = NULL;
+ }
+ for ( i=0; i<gi->glyphcnt; ++i ) {
+ for ( j=0; j<gi->gb[i].bcnt; ++j )
+ free(gi->gb[i].bits[j].data);
+ free(gi->gb[i].bits);
+ gi->gb[i].bits = NULL;
+ gi->gb[i].bcnt = 0;
+ }
+
+ gi->pcnt = 0;
+ gi->bcnt = 0;
+ gi->justbroken = 0;
+}
+
+static void GIFree(GlyphInfo *gi,SplineChar *dummynotdef) {
+
+ GIContentsFree(gi,dummynotdef);
+
+ free(gi->gb);
+ free(gi->psubrs);
+ free(gi->bits);
+}
+
+static void StartNextSubroutine(GrowBuf *gb,struct hintdb *hdb) {
+ GlyphInfo *gi;
+
+ if ( hdb==NULL )
+return;
+ gi = hdb->gi;
+ if ( gi==NULL )
+return;
+ /* Store everything in the grow buf into the data/dlen of the next bit */
+ if ( gi->bcnt==-1 ) gi->bcnt = 0;
+ if ( gi->bcnt>=gi->bmax )
+ gi->bits = realloc(gi->bits,(gi->bmax+=20)*sizeof(struct bits));
+ gi->bits[gi->bcnt].dlen = gb->pt-gb->base;
+ gi->bits[gi->bcnt].data = malloc(gi->bits[gi->bcnt].dlen);
+ gi->bits[gi->bcnt].psub_index = -1;
+ memcpy(gi->bits[gi->bcnt].data,gb->base,gi->bits[gi->bcnt].dlen);
+ gb->pt = gb->base;
+ gi->justbroken = false;
+}
+
+static int hashfunc(uint8 *data, int len) {
+ uint8 *end = data+len;
+ unsigned int hash = 0, r;
+
+ while ( data<end ) {
+ r = (hash>>30)&3;
+ hash <<= 2;
+ hash = (hash|r)&0xffffffff;
+ hash ^= *data++;
+ }
+return( hash%HSH_SIZE );
+}
+
+static void BreakSubroutine(GrowBuf *gb,struct hintdb *hdb) {
+ GlyphInfo *gi;
+ struct potentialsubrs *ps;
+ int hash;
+ int pi;
+
+ if ( hdb==NULL )
+return;
+ gi = hdb->gi;
+ if ( gi==NULL )
+return;
+ /* The stuff before the first moveto in a glyph (the header that sets */
+ /* the width, sets up the hints, counters, etc.) can't go into a subr */
+ if ( gi->bcnt==-1 ) {
+ gi->bcnt=0;
+ gi->justbroken = true;
+return;
+ } else if ( gi->justbroken )
+return;
+ /* Otherwise stuff everything in the growbuffer into a subr */
+ hash = hashfunc(gb->base,gb->pt-gb->base);
+ ps = NULL;
+ for ( pi=gi->hashed[hash]; pi!=-1; pi=gi->psubrs[pi].next ) {
+ ps = &gi->psubrs[pi];
+ if ( ps->len==gb->pt-gb->base && memcmp(ps->data,gb->base,gb->pt-gb->base)==0 )
+ break;
+ }
+ if ( pi==-1 ) {
+ if ( gi->pcnt>=gi->pmax )
+ gi->psubrs = realloc(gi->psubrs,(gi->pmax+=gi->glyphcnt)*sizeof(struct potentialsubrs));
+ ps = &gi->psubrs[gi->pcnt];
+ memset(ps,0,sizeof(*ps)); /* set cnt to 0 */
+ ps->idx = gi->pcnt++;
+ ps->len = gb->pt-gb->base;
+ ps->data = malloc(ps->len);
+ memcpy(ps->data,gb->base,ps->len);
+ ps->next = gi->hashed[hash];
+ gi->hashed[hash] = ps->idx;
+ ps->fd = gi->active->fd;
+ ps->full_glyph_index = -1;
+ }
+ if ( ps->fd!=gi->active->fd )
+ ps->fd = -1; /* used in multiple cid sub-fonts */
+ gi->bits[gi->bcnt].psub_index = ps->idx;
+ ++ps->cnt;
+ gb->pt = gb->base;
+ ++gi->bcnt;
+ gi->justbroken = true;
+}
+
+static void MoveSubrsToChar(GlyphInfo *gi) {
+ struct glyphbits *active;
+
+ if ( gi==NULL )
+return;
+ active = gi->active;
+ active->bcnt = gi->bcnt;
+ active->bits = malloc(active->bcnt*sizeof(struct bits));
+ memcpy(active->bits,gi->bits,active->bcnt*sizeof(struct bits));
+ gi->bcnt = 0;
+}
+
+static int NumberHints(SplineChar *scs[MmMax], int instance_count) {
+ int i,j, cnt=-1;
+ StemInfo *s;
+
+ for ( j=0; j<instance_count; ++j ) {
+ for ( s=scs[j]->hstem, i=0; s!=NULL; s=s->next ) {
+ if ( i<HntMax )
+ s->hintnumber = i++;
+ else
+ s->hintnumber = -1;
+ }
+ for ( s=scs[j]->vstem; s!=NULL; s=s->next ) {
+ if ( i<HntMax )
+ s->hintnumber = i++;
+ else
+ s->hintnumber = -1;
+ }
+ if ( cnt==-1 )
+ cnt = i;
+ else if ( cnt!=i )
+ IError("MM font with different hint counts");
+ }
+return( cnt );
+}
+
+static void MarkTranslationRefs(SplineFont *sf,int layer) {
+ int i;
+ SplineChar *sc;
+ RefChar *r;
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL ) {
+ for ( r = sc->layers[layer].refs; r!=NULL; r=r->next )
+ r->justtranslated = (r->transform[0]==1 && r->transform[3]==1 &&
+ r->transform[1]==0 && r->transform[2]==0);
+ }
+}
+
+/* ************************************************************************** */
+/* ********************** Type1 PostScript CharStrings ********************** */
+/* ************************************************************************** */
+
+
+static void AddNumber(GrowBuf *gb, real pos, int round) {
+ int dodiv = 0;
+ int val;
+ unsigned char *str;
+
+ if ( gb->pt+8>=gb->end )
+ GrowBuffer(gb);
+
+ if ( !round && pos!=floor(pos) ) {
+ {
+ if ( rint(pos*64)/64 == pos ) {
+ pos *= 64;
+ dodiv = 64;
+ } else {
+ pos *= 1024;
+ dodiv = 1024;
+ }
+ }
+ }
+ pos = rint(pos);
+ if ( dodiv>0 && floor(pos)/dodiv == floor(pos/dodiv) ) {
+ pos = rint(pos/dodiv);
+ dodiv = 0;
+ }
+ val = pos;
+ str = gb->pt;
+
+ if ( pos>=-107 && pos<=107 )
+ *str++ = val+139;
+ else if ( pos>=108 && pos<=1131 ) {
+ val -= 108;
+ *str++ = (val>>8)+247;
+ *str++ = val&0xff;
+ } else if ( pos>=-1131 && pos<=-108 ) {
+ val = -val;
+ val -= 108;
+ *str++ = (val>>8)+251;
+ *str++ = val&0xff;
+ } else {
+ *str++ = '\377';
+ *str++ = (val>>24)&0xff;
+ *str++ = (val>>16)&0xff;
+ *str++ = (val>>8)&0xff;
+ *str++ = val&0xff;
+ }
+ if ( dodiv ) {
+ if ( dodiv<107 )
+ *str++ = dodiv+139;
+ else {
+ dodiv -= 108;
+ *str++ = (dodiv>>8)+247;
+ *str++ = dodiv&0xff;
+ }
+ *str++ = 12; /* div (byte1) */
+ *str++ = 12; /* div (byte2) */
+ }
+ gb->pt = str;
+}
+
+/* When doing a multiple master font we have multiple instances of the same data */
+/* which must all be added, and then a call made to the appropriate blend routine */
+/* This is complicated because all the data may not fit on the stack so we */
+/* may need to make multiple calls */
+static void AddData(GrowBuf *gb, bigreal data[MmMax][6], int instances, int num_coords,
+ int round) {
+ int allsame = true, alls[6];
+ int i,j, chunk,min,max,subr;
+
+ for ( j=0; j<num_coords; ++j ) {
+ alls[j] = true;
+ for ( i=1; i<instances; ++i ) {
+ if ( data[i][j]!=data[0][j] ) {
+ alls[j] = false;
+ allsame = false;
+ break;
+ }
+ }
+ }
+
+ if ( allsame ) { /* No need for blending */
+ /* Probably a normal font, but possible in an mm */
+ for ( j=0; j<num_coords; ++j )
+ AddNumber(gb,data[0][j],round);
+return;
+ }
+
+ chunk = 22/instances;
+ if ( chunk == 5 ) chunk = 4; /* No subroutine for 5 items */
+ min = 0;
+ while ( min<num_coords ) {
+ while ( min<num_coords && alls[min] ) {
+ AddNumber(gb,data[0][min],round);
+ ++min;
+ }
+ max = min+chunk;
+ if ( max>num_coords ) max = num_coords;
+ while ( max-1>min && alls[max-1] )
+ --max;
+ if ( max-min==5 ) max=min+4;
+ if ( min<max ) {
+ for ( j=min; j<max; ++j )
+ AddNumber(gb,data[0][j],round);
+ for ( j=min; j<max; ++j )
+ for ( i=1; i<instances; ++i )
+ AddNumber(gb,data[i][j]-data[0][j],round);
+ subr = (j-min) + 4;
+ if ( j-min==6 ) subr = 9;
+ AddNumber(gb,subr,round);
+ if ( gb->pt+1>=gb->end )
+ GrowBuffer(gb);
+ *gb->pt++ = 10; /* callsubr */
+ min = j;
+ }
+ }
+}
+
+int CvtPsStem3(GrowBuf *gb, SplineChar *scs[MmMax], int instance_count,
+ int ishstem, int round) {
+ StemInfo *h1, *h2, *h3;
+ StemInfo _h1, _h2, _h3;
+ bigreal data[MmMax][6];
+ int i;
+ real off;
+
+ for ( i=0; i<instance_count; ++i ) {
+ if ( (ishstem && scs[i]->hconflicts) || (!ishstem && scs[i]->vconflicts))
+return( false );
+ h1 = ishstem ? scs[i]->hstem : scs[i]->vstem;
+ if ( h1==NULL || (h2 = h1->next)==NULL || (h3=h2->next)==NULL )
+return( false );
+ if ( h3->next!=NULL )
+return( false );
+ off = ishstem ? 0 : scs[i]->lsidebearing;
+ if ( h1->width<0 ) {
+ _h1 = *h1;
+ _h1.start += _h1.width;
+ _h1.width = -_h1.width;
+ h1 = &_h1;
+ }
+ if ( h2->width<0 ) {
+ _h2 = *h2;
+ _h2.start += _h2.width;
+ _h2.width = -_h2.width;
+ h2 = &_h2;
+ }
+ if ( h3->width<0 ) {
+ _h3 = *h3;
+ _h3.start += _h3.width;
+ _h3.width = -_h3.width;
+ h3 = &_h3;
+ }
+
+ if ( h1->start>h2->start ) {
+ StemInfo *ht = h1; h1 = h2; h2 = ht;
+ }
+ if ( h1->start>h3->start ) {
+ StemInfo *ht = h1; h1 = h3; h3 = ht;
+ }
+ if ( h2->start>h3->start ) {
+ StemInfo *ht = h2; h2 = h3; h3 = ht;
+ }
+ if ( h1->width != h3->width )
+return( false );
+ if ( (h2->start+h2->width/2) - (h1->start+h1->width/2) !=
+ (h3->start+h3->width/2) - (h2->start+h2->width/2) )
+return( false );
+ data[i][0] = h1->start-off;
+ data[i][1] = h1->width;
+ data[i][2] = h2->start-off;
+ data[i][3] = h2->width;
+ data[i][4] = h3->start-off;
+ data[i][5] = h3->width;
+ }
+ if ( gb==NULL )
+return( true );
+ AddData(gb,data,instance_count,6,round);
+ if ( gb->pt+3>=gb->end )
+ GrowBuffer(gb);
+ *(gb->pt)++ = 12;
+ *(gb->pt)++ = ishstem?2:1; /* h/v stem3 */
+return( true );
+}
+
+static int _SCNeedsSubsPts(SplineChar *sc,int layer) {
+ RefChar *ref;
+
+ if ( sc->hstem==NULL && sc->vstem==NULL )
+return( false );
+
+ if ( sc->layers[layer].splines!=NULL )
+return( sc->layers[layer].splines->first->hintmask==NULL );
+
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next )
+ if ( ref->layers[0].splines!=NULL )
+return( ref->layers[0].splines->first->hintmask==NULL );
+
+return( false ); /* It's empty. that's easy. */
+}
+
+static int SCNeedsSubsPts(SplineChar *sc,enum fontformat format,int layer) {
+ if ( (format!=ff_mma && format!=ff_mmb) || sc->parent->mm==NULL ) {
+ if ( !sc->hconflicts && !sc->vconflicts )
+return( false ); /* No conflicts, no swap-over points needed */
+return( _SCNeedsSubsPts(sc,layer));
+ } else {
+ MMSet *mm = sc->parent->mm;
+ int i;
+ for ( i=0; i<mm->instance_count; ++i ) if ( sc->orig_pos<mm->instances[i]->glyphcnt ) {
+ if ( _SCNeedsSubsPts(mm->instances[i]->glyphs[sc->orig_pos],layer) )
+return( true );
+ }
+return( false );
+ }
+}
+
+#ifdef FONTFORGE_CONFIG_PS_REFS_GET_SUBRS
+static int AlwaysSeacable(SplineChar *sc,int flags) {
+ struct splinecharlist *d;
+ RefChar *r;
+
+ if ( sc->parent->cidmaster!=NULL ) /* Can't use seac in CID fonts, no encoding */
+return( false );
+ if ( flags&ps_flag_noseac )
+return( false );
+
+ for ( d=sc->dependents; d!=NULL; d = d->next ) {
+ if ( d->sc->layers[layer].splines!=NULL ) /* I won't deal with things with both splines and refs. */
+ continue; /* skip it */
+ for ( r=d->sc->layers[layer].refs; r!=NULL; r=r->next ) {
+ if ( !r->justtranslated )
+ break; /* Can't deal with it either way */
+ }
+ if ( r!=NULL ) /* Bad transform matrix */
+ continue; /* Can't handle either way, skip */
+
+ for ( r=d->sc->layers[layer].refs; r!=NULL; r=r->next ) {
+ if ( r->adobe_enc==-1 )
+return( false ); /* not seacable, but could go in subr */
+ }
+ r = d->sc->layers[layer].refs;
+ if ( r->next!=NULL && r->next->next!=NULL )
+return( false ); /* seac only takes 2 glyphs */
+ if ( r->next!=NULL &&
+ ((r->transform[4]!=0 || r->transform[5]!=0 || r->sc->width!=d->sc->width) &&
+ (r->next->transform[4]!=0 || r->next->transform[5]!=0 || r->next->sc->width!=d->sc->width)))
+return( false ); /* seac only allows one to be translated, and the untranslated one must have the right width */
+ if ( r->next==NULL &&
+ (r->transform[4]!=0 || r->transform[5]!=0 || r->sc->width!=d->sc->width))
+return( false );
+ }
+ /* Either always can be represented by seac, or sometimes by neither */
+return( true );
+}
+
+/* normally we can't put a character with hint conflicts into a subroutine */
+/* (because when we would have to invoke the hints within the subr and */
+/* hints are expressed as absolute positions, so if the char has been */
+/* translated we can't do the hints right). BUT if the character is not */
+/* translated, and if it has the right lbearing, then the hints in the */
+/* ref will match those in the character and we can use a subroutine for */
+/* both */
+/* If at least one ref fits our requirements then return true */
+/* The same reasoning applies to flex hints. There are absolute expressions */
+/* in them too. */
+static int SpecialCaseConflicts(SplineChar *sc) {
+ struct splinecharlist *d;
+ RefChar *r;
+ DBounds sb, db;
+
+ SplineCharFindBounds(sc,&sb);
+ for ( d=sc->dependents; d!=NULL; d = d->next ) {
+ SplineCharFindBounds(d->sc,&db);
+ if ( db.minx != sb.minx )
+ continue;
+ for ( r=d->sc->layers[layer].refs; r!=NULL; r=r->next )
+ if ( r->sc == sc && r->justtranslated &&
+ r->transform[4]==0 && r->transform[5]==0 )
+return( true );
+ }
+return( false );
+}
+
+static BasePoint *FigureStartStop(SplineChar *sc, GlyphInfo *gi ) {
+ int m, didfirst;
+ SplineChar *msc;
+ SplineSet *spl;
+ RefChar *r;
+ BasePoint *startstop;
+
+ /* We need to know the location of the first point on the */
+ /* first path (need to rmoveto it, and the location of the */
+ /* last point on the last path (will need to move from it */
+ /* for the next component) */
+
+ startstop = calloc(2*gi->instance_count,sizeof(BasePoint));
+ for ( m=0; m<gi->instance_count; ++m ) {
+ if ( gi->instance_count==1 || sc->parent->mm==NULL )
+ msc = sc;
+ else
+ msc = sc->parent->mm->instances[m]->glyphs[sc->orig_pos];
+ didfirst = false;
+ spl = msc->layers[layer].splines;
+ if ( spl!=NULL ) {
+ startstop[0] = spl->first->me;
+ didfirst = true;
+ while ( spl!=NULL ) {
+ /* Closepath does NOT set the current point */
+ /* Remember we reverse PostScript */
+ if ( spl->last==spl->first && spl->first->next!=NULL &&
+ spl->first->next->knownlinear )
+ startstop[1] = spl->first->next->to->me;
+ else
+ startstop[1] = spl->last->me;
+ spl = spl->next;
+ }
+ }
+ for ( r=msc->layers[layer].refs; r!=NULL; r=r->next ) {
+ spl = r->layers[0].splines;
+ if ( spl!=NULL ) {
+ if ( !didfirst )
+ startstop[0] = spl->first->me;
+ didfirst = true;
+ }
+ while ( spl!=NULL ) {
+ /* Closepath does NOT set the current point */
+ /* Remember we reverse PostScript */
+ if ( spl->last==spl->first && spl->first->next!=NULL &&
+ spl->first->next->knownlinear )
+ startstop[1] = spl->first->next->to->me;
+ else
+ startstop[1] = spl->last->me;
+ spl = spl->next;
+ }
+ }
+ }
+return( startstop );
+}
+#endif /* FONTFORGE_CONFIG_PS_REFS_GET_SUBRS */
+
+int SFOneWidth(SplineFont *sf) {
+ int width, i;
+
+ width = -2;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( SCWorthOutputting(sf->glyphs[i]) &&
+ (strcmp(sf->glyphs[i]->name,".notdef")!=0 || sf->glyphs[i]->layers[ly_fore].splines!=NULL)) {
+ /* Only trust the width of notdef if it's got some content */
+ /* (at least as far as fixed pitch determination goes) */
+ if ( width==-2 ) width = sf->glyphs[i]->width;
+ else if ( width!=sf->glyphs[i]->width ) {
+ width = -1;
+ break;
+ }
+ }
+return(width);
+}
+
+int CIDOneWidth(SplineFont *_sf) {
+ int width, i;
+ int k;
+ SplineFont *sf;
+
+ if ( _sf->cidmaster!=NULL ) _sf = _sf->cidmaster;
+ width = -2;
+ k=0;
+ do {
+ sf = _sf->subfonts==NULL? _sf : _sf->subfonts[k];
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( SCWorthOutputting(sf->glyphs[i]) &&
+ strcmp(sf->glyphs[i]->name,".null")!=0 &&
+ strcmp(sf->glyphs[i]->name,"nonmarkingreturn")!=0 &&
+ (strcmp(sf->glyphs[i]->name,".notdef")!=0 || sf->glyphs[i]->layers[ly_fore].splines!=NULL)) {
+ /* Only trust the width of notdef if it's got some content */
+ /* (at least as far as fixed pitch determination goes) */
+ if ( width==-2 ) width = sf->glyphs[i]->width;
+ else if ( width!=sf->glyphs[i]->width ) {
+ width = -1;
+ break;
+ }
+ }
+ ++k;
+ } while ( k<_sf->subfontcnt );
+return(width);
+}
+
+/* ************************************************************************** */
+/* ********************** Type2 PostScript CharStrings ********************** */
+/* ************************************************************************** */
+
+static real myround2(real pos, int round) {
+ if ( round )
+return( rint(pos));
+
+return( rint(65536*pos)/65536 );
+}
+
+static void AddNumber2(GrowBuf *gb, real pos, int round) {
+ int val, factor;
+ unsigned char *str;
+
+ if ( gb->pt+5>=gb->end )
+ GrowBuffer(gb);
+
+ pos = rint(65536*pos)/65536;
+ if ( round )
+ pos = rint(pos);
+
+ str = gb->pt;
+ if ( pos>32767.99 || pos<-32768 ) {
+ /* same logic for big ints and reals */
+ if ( pos>0x3fffffff || pos<-0x40000000 ) {
+ LogError( _("Number out of range: %g in type2 output (must be [-65536,65535])\n"),
+ pos );
+ if ( pos>0 ) pos = 0x3fffffff; else pos = -0x40000000;
+ }
+ for ( factor=2; factor<32768; factor<<=2 )
+ if ( pos/factor<32767.99 && pos/factor>-32768 )
+ break;
+ AddNumber2(gb,pos/factor,false);
+ AddNumber2(gb,factor,false);
+ if ( gb->pt+2>=gb->end )
+ GrowBuffer(gb);
+ *(gb->pt++) = 0x0c; /* Multiply operator */
+ *(gb->pt++) = 0x18;
+ } else if ( pos!=floor(pos )) {
+ val = pos*65536;
+ *str++ = '\377';
+ *str++ = (val>>24)&0xff;
+ *str++ = (val>>16)&0xff;
+ *str++ = (val>>8)&0xff;
+ *str++ = val&0xff;
+ } else {
+ val = rint(pos);
+ if ( pos>=-107 && pos<=107 )
+ *str++ = val+139;
+ else if ( pos>=108 && pos<=1131 ) {
+ val -= 108;
+ *str++ = (val>>8)+247;
+ *str++ = val&0xff;
+ } else if ( pos>=-1131 && pos<=-108 ) {
+ val = -val;
+ val -= 108;
+ *str++ = (val>>8)+251;
+ *str++ = val&0xff;
+ } else {
+ *str++ = 28;
+ *str++ = (val>>8)&0xff;
+ *str++ = val&0xff;
+ }
+ }
+ gb->pt = str;
+}
+
+static void AddMask2(GrowBuf *gb,uint8 mask[12],int cnt, int oper) {
+ int i;
+
+ if ( gb->pt+1+((cnt+7)>>3)>=gb->end )
+ GrowBuffer(gb);
+ *gb->pt++ = oper; /* hintmask,cntrmask */
+ for ( i=0; i< ((cnt+7)>>3); ++i )
+ *gb->pt++ = mask[i];
+}
+
+static void CounterHints2(GrowBuf *gb, SplineChar *sc, int hcnt) {
+ int i;
+
+ for ( i=0; i<sc->countermask_cnt; ++i )
+ AddMask2(gb,sc->countermasks[i],hcnt,20); /* cntrmask */
+}
+
+static int HintSetup2(GrowBuf *gb,struct hintdb *hdb, SplinePoint *to, int break_subr ) {
+
+ /* We might get a point with a hintmask in a glyph with no conflicts */
+ /* (ie. the initial point when we return to it at the end of the splineset*/
+ /* in that case hdb->cnt will be 0 and we should ignore it */
+ /* components in subroutines depend on not having any hintmasks */
+ if ( to->hintmask==NULL || hdb->cnt==0 || hdb->noconflicts || hdb->skiphm )
+return( false );
+
+ if ( memcmp(hdb->mask,*to->hintmask,(hdb->cnt+7)/8)==0 )
+return( false );
+
+ if ( break_subr )
+ BreakSubroutine(gb,hdb);
+
+ AddMask2(gb,*to->hintmask,hdb->cnt,19); /* hintmask */
+ memcpy(hdb->mask,*to->hintmask,sizeof(HintMask));
+ hdb->donefirsthm = true;
+ if ( break_subr )
+ StartNextSubroutine(gb,hdb);
+return( true );
+}
+
+static void moveto2(GrowBuf *gb,struct hintdb *hdb,SplinePoint *to, int round) {
+ BasePoint temp, *tom;
+
+ if ( gb->pt+18 >= gb->end )
+ GrowBuffer(gb);
+
+ BreakSubroutine(gb,hdb);
+ HintSetup2(gb,hdb,to,false);
+ tom = &to->me;
+ if ( round ) {
+ temp.x = rint(tom->x);
+ temp.y = rint(tom->y);
+ tom = &temp;
+ }
+ if ( hdb->current.x==tom->x ) {
+ AddNumber2(gb,tom->y-hdb->current.y,round);
+ *(gb->pt)++ = 4; /* v move to */
+ } else if ( hdb->current.y==tom->y ) {
+ AddNumber2(gb,tom->x-hdb->current.x,round);
+ *(gb->pt)++ = 22; /* h move to */
+ } else {
+ AddNumber2(gb,tom->x-hdb->current.x,round);
+ AddNumber2(gb,tom->y-hdb->current.y,round);
+ *(gb->pt)++ = 21; /* r move to */
+ }
+ hdb->current.x = rint(32768*tom->x)/32768;
+ hdb->current.y = rint(32768*tom->y)/32768;
+ StartNextSubroutine(gb,hdb);
+}
+
+static Spline *lineto2(GrowBuf *gb,struct hintdb *hdb,Spline *spline, Spline *done, int round) {
+ int cnt, hv, hvcnt;
+ Spline *test, *lastgood, *lasthvgood;
+ BasePoint temp1, temp2, *tom, *fromm;
+ int donehm;
+
+ lastgood = NULL;
+ for ( test=spline, cnt=0; test->knownlinear && cnt<15; ) {
+ ++cnt;
+ lastgood = test;
+ test = test->to->next;
+ /* it will be smaller to use a closepath operator so ignore the */
+ /* ultimate spline */
+ if ( test==done || test==NULL || test->to->next==done )
+ break;
+ }
+
+ HintSetup2(gb,hdb,spline->to,true);
+
+ hv = -1; hvcnt=1; lasthvgood = NULL;
+ if ( spline->from->me.x==spline->to->me.x )
+ hv = 1; /* Vertical */
+ else if ( spline->from->me.y==spline->to->me.y )
+ hv = 0; /* Horizontal */
+ donehm = true;
+ if ( hv!=-1 ) {
+ lasthvgood = spline; hvcnt = 1;
+ if ( cnt!=1 ) {
+ for ( test=spline->to->next; test!=NULL ; test = test->to->next ) {
+ fromm = &test->from->me;
+ if ( round ) {
+ temp2.x = rint(fromm->x);
+ temp2.y = rint(fromm->y);
+ fromm = &temp2;
+ }
+ tom = &test->to->me;
+ if ( round ) {
+ temp1.x = rint(tom->x);
+ temp1.y = rint(tom->y);
+ tom = &temp1;
+ }
+ if ( hv==1 && tom->y==fromm->y )
+ hv = 0;
+ else if ( hv==0 && tom->x==fromm->x )
+ hv = 1;
+ else
+ break;
+ lasthvgood = test;
+ ++hvcnt;
+ if ( test==lastgood )
+ break;
+ }
+ }
+ donehm = true;
+ if ( hvcnt==cnt || hvcnt>=2 ) {
+ /* It's more efficient to do some h/v linetos */
+ for ( test=spline; ; test = test->to->next ) {
+ if ( !donehm && test->to->hintmask!=NULL )
+ break;
+ donehm = false;
+ fromm = &test->from->me;
+ if ( round ) {
+ temp2.x = rint(fromm->x);
+ temp2.y = rint(fromm->y);
+ fromm = &temp2;
+ }
+ tom = &test->to->me;
+ if ( round ) {
+ temp1.x = rint(tom->x);
+ temp1.y = rint(tom->y);
+ tom = &temp1;
+ }
+ if ( fromm->x==tom->x )
+ AddNumber2(gb,tom->y-fromm->y,round);
+ else
+ AddNumber2(gb,tom->x-fromm->x,round);
+ hdb->current.x = rint(32768*tom->x)/32768;
+ hdb->current.y = rint(32768*tom->y)/32768;
+ if ( test==lasthvgood ) {
+ test = test->to->next;
+ break;
+ }
+ }
+ if ( gb->pt+1 >= gb->end )
+ GrowBuffer(gb);
+ *(gb->pt)++ = spline->from->me.x==spline->to->me.x? 7 : 6;
+return( test );
+ }
+ }
+
+ for ( test=spline; test!=NULL; test = test->to->next ) {
+ if ( !donehm && test->to->hintmask!=NULL )
+ break;
+ donehm = false;
+ fromm = &test->from->me;
+ if ( round ) {
+ temp2.x = rint(fromm->x);
+ temp2.y = rint(fromm->y);
+ fromm = &temp2;
+ }
+ tom = &test->to->me;
+ if ( round ) {
+ temp1.x = rint(tom->x);
+ temp1.y = rint(tom->y);
+ tom = &temp1;
+ }
+ AddNumber2(gb,tom->x-fromm->x,round);
+ AddNumber2(gb,tom->y-fromm->y,round);
+ hdb->current.x = rint(32768*tom->x)/32768;
+ hdb->current.y = rint(32768*tom->y)/32768;
+ if ( test==lastgood ) {
+ test = test->to->next;
+ break;
+ }
+ }
+ if ( gb->pt+1 >= gb->end )
+ GrowBuffer(gb);
+ *(gb->pt)++ = 5; /* r line to */
+return( test );
+}
+
+static Spline *curveto2(GrowBuf *gb,struct hintdb *hdb,Spline *spline, Spline *done, int round) {
+ int cnt=0, hv;
+ Spline *first;
+ DBasePoint start;
+ int donehm;
+
+ HintSetup2(gb,hdb,spline->to,true);
+
+ hv = -1;
+ if ( hdb->current.x==myround2(spline->from->nextcp.x,round) &&
+ myround2(spline->to->prevcp.y,round)==myround2(spline->to->me.y,round) )
+ hv = 1;
+ else if ( hdb->current.y==myround2(spline->from->nextcp.y,round) &&
+ myround2(spline->to->prevcp.x,round)==myround2(spline->to->me.x,round) )
+ hv = 0;
+ donehm = true;
+ if ( hv!=-1 ) {
+ first = spline; start = hdb->current;
+ while (
+ (hv==1 && hdb->current.x==myround2(spline->from->nextcp.x,round) &&
+ myround2(spline->to->prevcp.y,round)==myround2(spline->to->me.y,round) ) ||
+ (hv==0 && hdb->current.y==myround2(spline->from->nextcp.y,round) &&
+ myround2(spline->to->prevcp.x,round)==myround2(spline->to->me.x,round) ) ) {
+ if ( !donehm && spline->to->hintmask!=NULL )
+ break;
+ donehm = false;
+ if ( hv==1 ) {
+ AddNumber2(gb,myround2(spline->from->nextcp.y,round)-hdb->current.y,round);
+ AddNumber2(gb,myround2(spline->to->prevcp.x,round)-myround2(spline->from->nextcp.x,round),round);
+ AddNumber2(gb,myround2(spline->to->prevcp.y,round)-myround2(spline->from->nextcp.y,round),round);
+ AddNumber2(gb,myround2(spline->to->me.x,round)-myround2(spline->to->prevcp.x,round),round);
+ hv = 0;
+ } else {
+ AddNumber2(gb,myround2(spline->from->nextcp.x,round)-hdb->current.x,round);
+ AddNumber2(gb,myround2(spline->to->prevcp.x,round)-myround2(spline->from->nextcp.x,round),round);
+ AddNumber2(gb,myround2(spline->to->prevcp.y,round)-myround2(spline->from->nextcp.y,round),round);
+ AddNumber2(gb,myround2(spline->to->me.y,round)-myround2(spline->to->prevcp.y,round),round);
+ hv = 1;
+ }
+ hdb->current.x = myround2(spline->to->me.x,round);
+ hdb->current.y = myround2(spline->to->me.y,round);
+ ++cnt;
+ spline = spline->to->next;
+ if ( spline==done || spline==NULL || cnt>9 || spline->knownlinear )
+ break;
+ }
+ if ( gb->pt+1 >= gb->end )
+ GrowBuffer(gb);
+ *(gb->pt)++ = ( start.x==myround2(first->from->nextcp.x,round) && myround2(first->to->prevcp.y,round)==myround2(first->to->me.y,round) )?
+ 30:31; /* vhcurveto:hvcurveto */
+return( spline );
+ }
+ while ( cnt<6 ) {
+ if ( !donehm && spline->to->hintmask!=NULL )
+ break;
+ donehm = false;
+ hv = -1;
+ if ( hdb->current.x==myround2(spline->from->nextcp.x,round) &&
+ myround2(spline->to->prevcp.y,round)==myround2(spline->to->me.y,round) &&
+ spline->to->next!=NULL &&
+ myround2(spline->to->me.y,round)==myround2(spline->to->nextcp.y,round) &&
+ myround2(spline->to->next->to->prevcp.x,round)==myround2(spline->to->next->to->me.x,round) )
+ break;
+ else if ( hdb->current.y==myround2(spline->from->nextcp.y,round) &&
+ myround2(spline->to->prevcp.x,round)==myround2(spline->to->me.x,round) &&
+ spline->to->next!=NULL &&
+ myround2(spline->to->me.x,round)==myround2(spline->to->nextcp.x,round) &&
+ myround2(spline->to->next->to->prevcp.y,round)==myround2(spline->to->next->to->me.y,round) )
+ break;
+ AddNumber2(gb,myround2(spline->from->nextcp.x,round)-hdb->current.x,round);
+ AddNumber2(gb,myround2(spline->from->nextcp.y,round)-hdb->current.y,round);
+ AddNumber2(gb,myround2(spline->to->prevcp.x,round)-myround2(spline->from->nextcp.x,round),round);
+ AddNumber2(gb,myround2(spline->to->prevcp.y,round)-myround2(spline->from->nextcp.y,round),round);
+ AddNumber2(gb,myround2(spline->to->me.x,round)-myround2(spline->to->prevcp.x,round),round);
+ AddNumber2(gb,myround2(spline->to->me.y,round)-myround2(spline->to->prevcp.y,round),round);
+ hdb->current.x = myround2(spline->to->me.x,round);
+ hdb->current.y = myround2(spline->to->me.y,round);
+ ++cnt;
+ spline = spline->to->next;
+ if ( spline==done || spline==NULL || spline->knownlinear )
+ break;
+ }
+ if ( gb->pt+1 >= gb->end )
+ GrowBuffer(gb);
+ *(gb->pt)++ = 8; /* rrcurveto */
+return( spline );
+}
+
+static void flexto2(GrowBuf *gb,struct hintdb *hdb,Spline *pspline,int round) {
+ BasePoint *c0, *c1, *mid, *end, *nc0, *nc1;
+ Spline *nspline;
+
+ c0 = &pspline->from->nextcp;
+ c1 = &pspline->to->prevcp;
+ mid = &pspline->to->me;
+ nspline = pspline->to->next;
+ nc0 = &nspline->from->nextcp;
+ nc1 = &nspline->to->prevcp;
+ end = &nspline->to->me;
+
+ HintSetup2(gb,hdb,nspline->to,true);
+
+ if ( myround2(c0->y,round)==hdb->current.y && myround2(nc1->y,round)==hdb->current.y &&
+ myround2(end->y,round)==hdb->current.y &&
+ myround2(c1->y,round)==myround2(mid->y,round) && myround2(nc0->y,round)==myround2(mid->y,round) ) {
+ if ( gb->pt+7*6+2 >= gb->end )
+ GrowBuffer(gb);
+ AddNumber2(gb,myround2(c0->x,round)-hdb->current.x,round);
+ AddNumber2(gb,myround2(c1->x,round)-myround2(c0->x,round),round);
+ AddNumber2(gb,myround2(c1->y,round)-myround2(c0->y,round),round);
+ AddNumber2(gb,myround2(mid->x,round)-myround2(c1->x,round),round);
+ AddNumber2(gb,myround2(nc0->x,round)-myround2(mid->x,round),round);
+ AddNumber2(gb,myround2(nc1->x,round)-myround2(nc0->x,round),round);
+ AddNumber2(gb,myround2(end->x,round)-myround2(nc1->x,round),round);
+ *gb->pt++ = 12; *gb->pt++ = 34; /* hflex */
+ } else {
+ if ( gb->pt+11*6+2 >= gb->end )
+ GrowBuffer(gb);
+ AddNumber2(gb,myround2(c0->x,round)-hdb->current.x,round);
+ AddNumber2(gb,myround2(c0->y,round)-hdb->current.y,round);
+ AddNumber2(gb,myround2(c1->x,round)-myround2(c0->x,round),round);
+ AddNumber2(gb,myround2(c1->y,round)-myround2(c0->y,round),round);
+ AddNumber2(gb,myround2(mid->x,round)-myround2(c1->x,round),round);
+ AddNumber2(gb,myround2(mid->y,round)-myround2(c1->y,round),round);
+ AddNumber2(gb,myround2(nc0->x,round)-myround2(mid->x,round),round);
+ AddNumber2(gb,myround2(nc0->y,round)-myround2(mid->y,round),round);
+ AddNumber2(gb,myround2(nc1->x,round)-myround2(nc0->x,round),round);
+ AddNumber2(gb,myround2(nc1->y,round)-myround2(nc0->y,round),round);
+ if ( hdb->current.y==myround2(end->y,round) )
+ AddNumber2(gb,myround2(end->x,round)-myround2(nc1->x,round),round);
+ else
+ AddNumber2(gb,myround2(end->y,round)-myround2(nc1->y,round),round);
+ *gb->pt++ = 12; *gb->pt++ = 37; /* flex1 */
+ }
+
+ hdb->current.x = rint(32768*end->x)/32768;
+ hdb->current.y = rint(32768*end->y)/32768;
+}
+
+static void CvtPsSplineSet2(GrowBuf *gb, SplinePointList *spl,
+ struct hintdb *hdb, int is_order2,int round ) {
+ Spline *spline, *first;
+ SplinePointList temp, *freeme = NULL;
+ int unhinted = true;;
+
+ if ( is_order2 )
+ freeme = spl = SplineSetsPSApprox(spl);
+
+ for ( ; spl!=NULL; spl = spl->next ) {
+ first = NULL;
+ SplineSetReverse(spl);
+ /* PostScript and TrueType store their splines in in reverse */
+ /* orientations. Annoying. Oh well. I shall adopt TrueType and */
+ /* If I reverse the PS splinesets after reading them in, and then */
+ /* again when saving them out, all should be well */
+ if ( spl->first->flexy || spl->first->flexx ) {
+ /* can't handle a flex (mid) point as the first point. rotate the */
+ /* list by one, this is possible because only closed paths have */
+ /* points marked as flex, and because we can't have two flex mid- */
+ /* points in a row */
+ if ( spl->first->hintmask==NULL || spl->first->next->to->hintmask!=NULL ) {
+ /* But we can't rotate it if we expect it to provide us with */
+ /* a hintmask. */
+ temp = *spl;
+ temp.first = temp.last = spl->first->next->to;
+ spl = &temp;
+ }
+ if ( spl->first->flexy || spl->first->flexx ) {
+ /* If we couldn't rotate, or if we rotated to something that */
+ /* also is flexible, then just turn off flex. That's safe */
+ spl->first->flexx = spl->first->flexy = false;
+ }
+ }
+ if ( unhinted && hdb->cnt>0 && spl->first->hintmask!=NULL ) {
+ hdb->mask[0] = ~(*spl->first->hintmask)[0]; /* Make it different */
+ unhinted = false;
+ }
+ moveto2(gb,hdb,spl->first,round);
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; ) {
+ if ( first==NULL ) first = spline;
+ else if ( first->from==spline->to )
+ hdb->skiphm = true;
+ if ( spline->to->flexx || spline->to->flexy ) {
+ flexto2(gb,hdb,spline,round); /* does two adjacent splines */
+ spline = spline->to->next->to->next;
+ } else if ( spline->knownlinear && spline->to == spl->first )
+ /* In Type2 we don't even need a closepath to finish this off */
+ /* (which is good, because there isn't a close path) */
+ break;
+ else if ( spline->knownlinear )
+ spline = lineto2(gb,hdb,spline,first,round);
+ else
+ spline = curveto2(gb,hdb,spline,first,round);
+ }
+ hdb->skiphm = false;
+ /* No closepath oper in type2 fonts, it's implied */
+ SplineSetReverse(spl);
+ /* Of course, I have to Reverse again to get back to my convention after*/
+ /* saving */
+ }
+ SplinePointListsFree(freeme);
+}
+
+bool equalWithTolerence( real a, real b, real tolerence )
+{
+// printf("equalWithTolerence(1) a:%f b:%f tol:%f\n", a, b, tolerence );
+// printf("equalWithTolerence(2) a:%lf b:%lf tol:%lf\n", a, b, tolerence );
+
+ if( tolerence == 0.0 )
+ return a == b;
+
+ return( (b - tolerence < a)
+ && (b + tolerence > a ));
+}
+
+static void DumpHints(GrowBuf *gb,StemInfo *h,int oper,int midoper,int round) {
+ real last = 0, cur;
+ int cnt;
+
+ if ( h==NULL )
+return;
+ cnt = 0;
+ while ( h && h->hintnumber!=-1 ) {
+ /* Type2 hints do not support negative widths except in the case of */
+ /* ghost (now called edge) hints */
+ if ( cnt>24-2 ) { /* stack max = 48 numbers, => 24 hints, leave a bit of slop for the width */
+ if ( gb->pt+1>=gb->end )
+ GrowBuffer(gb);
+ *gb->pt++ = midoper;
+ cnt = 0;
+ }
+ cur = myround2(h->start,round) + myround2(h->width,round);
+ if ( h->width<0 ) {
+ AddNumber2(gb,cur-last,round);
+ AddNumber2(gb,-myround2(h->width,round),round);
+ cur -= myround2(h->width,round);
+ } else if ( h->ghost ) {
+ if ( equalWithTolerence( h->width, 20, GenerateHintWidthEqualityTolerance )) {
+ AddNumber2(gb,myround2(h->start,round)-last+20,round);
+ AddNumber2(gb,-20,round);
+ cur = myround2(h->start,round);
+ } else {
+ AddNumber2(gb,myround2(h->start+21,round)-last,round);
+ AddNumber2(gb,-21,round);
+ cur = myround2(h->start+21,round)-21;
+ }
+ } else {
+ AddNumber2(gb,myround2(h->start,round)-last,round);
+ AddNumber2(gb,myround2(h->width,round),round);
+ }
+ last = cur;
+ h = h->next;
+ ++cnt;
+ }
+ if ( oper!=-1 ) {
+ if ( gb->pt+1>=gb->end )
+ GrowBuffer(gb);
+ *gb->pt++ = oper;
+ }
+}
+
+static void DumpRefsHints(GrowBuf *gb, struct hintdb *hdb,RefChar *cur,StemInfo *h,StemInfo *v,
+ BasePoint *trans, int round,int layer) {
+ uint8 masks[12];
+ int cnt, sets=0;
+ StemInfo *rs;
+
+ /* trans has already been rounded (whole char is translated by an integral amount) */
+
+ /* If we have a subroutine containing conflicts, then its hints will match*/
+ /* ours exactly, and we can use its hintmasks directly */
+ if (( cur->sc->hconflicts || cur->sc->vconflicts ) &&
+ cur->sc->layers[layer].splines!=NULL &&
+ cur->sc->layers[layer].splines->first->hintmask!=NULL ) {
+ AddMask2(gb,*cur->sc->layers[layer].splines->first->hintmask,hdb->cnt,19); /* hintmask */
+ hdb->donefirsthm = true;
+ memcpy(hdb->mask,*cur->sc->layers[layer].splines->first->hintmask,sizeof(HintMask));
+return;
+ }
+
+ if ( h==NULL && v==NULL )
+ IError("hintmask invoked when there are no hints");
+ memset(masks,'\0',sizeof(masks));
+ cnt = 0;
+ while ( h!=NULL && h->hintnumber>=0 ) {
+ /* Horizontal stems are defined by vertical bounds */
+ real pos = (round ? rint(h->start) : h->start) - trans->y;
+ for ( rs = cur->sc->hstem; rs!=NULL; rs=rs->next ) {
+ real rpos = round ? rint(rs->start) : rs->start;
+ if ( rpos==pos && (round ? (rint(rs->width)==rint(h->width)) : (rs->width==h->width)) ) {
+ masks[h->hintnumber>>3] |= 0x80>>(h->hintnumber&7);
+ ++sets;
+ break;
+ } else if ( rpos>pos )
+ break;
+ }
+ h = h->next; ++cnt;
+ }
+ while ( v!=NULL && v->hintnumber>=0 ) {
+ real pos = (round ? rint(v->start) : v->start) - trans->x;
+ for ( rs = cur->sc->vstem; rs!=NULL; rs=rs->next ) {
+ real rpos = round ? rint(rs->start) : rs->start;
+ if ( rpos==pos && (round ? (rint(rs->width)==rint(v->width)) : (rs->width==v->width)) ) {
+ masks[v->hintnumber>>3] |= 0x80>>(v->hintnumber&7);
+ ++sets;
+ break;
+ } else if ( rpos>pos )
+ break;
+ }
+ v = v->next; ++cnt;
+ }
+ BreakSubroutine(gb,hdb);
+ hdb->donefirsthm = true;
+ /* if ( sets!=0 ) */ /* First ref will need a hintmask even if it has no hints (if there are conflicts) */
+ AddMask2(gb,masks,cnt,19); /* hintmask */
+}
+
+static void DummyHintmask(GrowBuf *gb,struct hintdb *hdb) {
+ HintMask hm;
+
+ memset(hm,0,sizeof(hm));
+ if ( hdb->cnt!=0 ) {
+ BreakSubroutine(gb,hdb);
+ hdb->donefirsthm = true;
+ AddMask2(gb,hm,hdb->cnt,19); /* hintmask */
+ }
+}
+
+static void SetTransformedHintMask(GrowBuf *gb,struct hintdb *hdb,
+ SplineChar *sc, RefChar *ref, BasePoint *trans, int round) {
+ HintMask hm;
+
+ if ( HintMaskFromTransformedRef(ref,trans,sc,&hm)!=NULL ) {
+ BreakSubroutine(gb,hdb);
+ hdb->donefirsthm = true;
+ AddMask2(gb,hm,hdb->cnt,19); /* hintmask */
+ } else if ( !hdb->donefirsthm )
+ DummyHintmask(gb,hdb);
+}
+
+static void ExpandRef2(GrowBuf *gb, SplineChar *sc, struct hintdb *hdb,
+ RefChar *r, BasePoint *trans,
+ struct pschars *subrs, int round,int layer) {
+ BasePoint *bpt;
+ BasePoint temp, rtrans;
+ GlyphInfo *gi;
+ /* The only refs I deal with here have no hint conflicts within them */
+
+ rtrans.x = r->transform[4]+trans->x;
+ rtrans.y = r->transform[5]+trans->y;
+ if ( round ) {
+ rtrans.x = rint(rtrans.x);
+ rtrans.y = rint(rtrans.y);
+ }
+
+ BreakSubroutine(gb,hdb);
+ if ( hdb->cnt>0 && !hdb->noconflicts )
+ DumpRefsHints(gb,hdb,r,sc->hstem,sc->vstem,&rtrans,round,layer);
+
+ /* Translate from end of last character to where this one should */
+ /* start (we must have one moveto operator to start off, none */
+ /* in the subr) */
+ bpt = hdb->gi->psubrs[r->sc->lsidebearing].startstop;
+ temp.x = bpt[0].x+rtrans.x;
+ temp.y = bpt[0].y+rtrans.y;
+ if ( hdb->current.x!=temp.x )
+ AddNumber2(gb,temp.x-hdb->current.x,round);
+ if ( hdb->current.y!=temp.y || hdb->current.x==temp.x )
+ AddNumber2(gb,temp.y-hdb->current.y,round);
+ if ( gb->pt+1>=gb->end )
+ GrowBuffer(gb);
+ *gb->pt++ = hdb->current.x==temp.x?4: /* vmoveto */
+ hdb->current.y==temp.y?22: /* hmoveto */
+ 21; /* rmoveto */
+ if ( r->sc->lsidebearing==0x7fff )
+ IError("Attempt to reference an unreferenceable glyph %s", r->sc->name );
+
+ gi = hdb->gi;
+ StartNextSubroutine(gb,hdb);
+ gi->bits[gi->bcnt].psub_index = r->sc->lsidebearing;
+ ++gi->bcnt;
+ gi->justbroken = true;
+ hdb->current.x = bpt[1].x+rtrans.x;
+ hdb->current.y = bpt[1].y+rtrans.y;
+}
+
+static void RSC2PS2(GrowBuf *gb, SplineChar *base,SplineChar *rsc,
+ struct hintdb *hdb, BasePoint *trans, struct pschars *subrs,
+ int flags, int layer ) {
+ BasePoint subtrans;
+ int stationary = trans->x==0 && trans->y==0;
+ RefChar *r, *unsafe=NULL;
+ int unsafecnt=0, allwithouthints=true;
+ int round = (flags&ps_flag_round)? true : false;
+ StemInfo *oldh, *oldv;
+ int hc, vc;
+ SplineSet *freeme, *temp;
+ int wasntconflicted = hdb->noconflicts;
+
+ if ( flags&ps_flag_nohints ) {
+ oldh = rsc->hstem; oldv = rsc->vstem;
+ hc = rsc->hconflicts; vc = rsc->vconflicts;
+ rsc->hstem = NULL; rsc->vstem = NULL;
+ rsc->hconflicts = false; rsc->vconflicts = false;
+ } else {
+ for ( r=rsc->layers[layer].refs; r!=NULL; r=r->next ) {
+ /* Ensure hintmask on refs are set correctly */
+ if (SCNeedsSubsPts(r->sc, ff_otf, layer))
+ SCFigureHintMasks(r->sc, layer);
+
+ if ( !r->justtranslated )
+ continue;
+ if ( r->sc->hconflicts || r->sc->vconflicts ) {
+ ++unsafecnt;
+ unsafe = r;
+ } else if ( r->sc->hstem!=NULL || r->sc->vstem!=NULL )
+ allwithouthints = false;
+ }
+ if ( !stationary )
+ allwithouthints = false;
+ if ( allwithouthints && unsafe!=NULL && hdb->cnt!=NumberHints(&unsafe->sc,1))
+ allwithouthints = false; /* There are other hints elsewhere in the base glyph */
+ }
+
+ if ( unsafe && allwithouthints ) {
+ if ( unsafe->sc->lsidebearing!=0x7fff ) {
+ ExpandRef2(gb,base,hdb,unsafe,trans,subrs,round,layer);
+ } else if ( unsafe->transform[4]==0 && unsafe->transform[5]==0 )
+ RSC2PS2(gb,base,unsafe->sc,hdb,trans,subrs,flags,layer);
+ else
+ unsafe = NULL;
+ } else
+ unsafe = NULL;
+
+ /* What is the hintmask state here? It should not matter */
+ freeme = NULL; temp = rsc->layers[layer].splines;
+ if ( base!=rsc )
+ temp = freeme = SPLCopyTranslatedHintMasks(temp,base,rsc,trans);
+ CvtPsSplineSet2(gb,temp,hdb,rsc->layers[layer].order2,round);
+ SplinePointListsFree(freeme);
+
+ for ( r = rsc->layers[layer].refs; r!=NULL; r = r->next ) if ( r!=unsafe ) {
+ if ( !r->justtranslated ) {
+ if ( !r->sc->hconflicts && !r->sc->vconflicts && !hdb->noconflicts &&
+ r->transform[1]==0 && r->transform[2]==0 &&
+ r->transform[0]>0 && r->transform[3]>0 )
+ SetTransformedHintMask(gb,hdb,base,r,trans,round);
+ if ( !hdb->donefirsthm )
+ DummyHintmask(gb,hdb);
+ temp = SPLCopyTransformedHintMasks(r,base,trans,layer);
+ CvtPsSplineSet2(gb,temp,hdb,rsc->layers[layer].order2,round);
+ SplinePointListsFree(temp);
+ } else if ( r->sc->lsidebearing!=0x7fff &&
+ ((flags&ps_flag_nohints) ||
+ (!r->sc->hconflicts && !r->sc->vconflicts)) ) {
+ ExpandRef2(gb,base,hdb,r,trans,subrs,round,layer);
+ } else {
+ subtrans.x = trans->x + r->transform[4];
+ subtrans.y = trans->y + r->transform[5];
+ if ( !hdb->noconflicts && !r->sc->hconflicts && !r->sc->vconflicts) {
+ SetTransformedHintMask(gb,hdb,base,r,trans,round);
+ hdb->noconflicts = true;
+ }
+ RSC2PS2(gb,base,r->sc,hdb,&subtrans,subrs,flags,layer);
+ hdb->noconflicts = wasntconflicted;
+ }
+ }
+
+ if ( flags&ps_flag_nohints ) {
+ rsc->hstem = oldh; rsc->vstem = oldv;
+ rsc->hconflicts = hc; rsc->vconflicts = vc;
+ }
+}
+
+static unsigned char *SplineChar2PS2(SplineChar *sc,int *len, int nomwid,
+ int defwid, struct pschars *subrs, int flags,
+ GlyphInfo *gi) {
+ GrowBuf gb;
+ unsigned char *ret;
+ struct hintdb hdb;
+ StemInfo *oldh, *oldv;
+ int hc, vc;
+ SplineChar *scs[MmMax];
+ int round = (flags&ps_flag_round)? true : false;
+ HintMask *hm = NULL;
+ BasePoint trans;
+
+ if ( autohint_before_generate && sc->changedsincelasthinted &&
+ !sc->manualhints && !(flags&ps_flag_nohints))
+ SplineCharAutoHint(sc,gi->layer,NULL);
+ if ( !(flags&ps_flag_nohints) && SCNeedsSubsPts(sc,ff_otf,gi->layer))
+ SCFigureHintMasks(sc,gi->layer);
+
+ if ( flags&ps_flag_nohints ) {
+ oldh = sc->hstem; oldv = sc->vstem;
+ hc = sc->hconflicts; vc = sc->vconflicts;
+ sc->hstem = NULL; sc->vstem = NULL;
+ sc->hconflicts = false; sc->vconflicts = false;
+ } else if ( sc->layers[gi->layer].splines!=NULL && !sc->vconflicts &&
+ !sc->hconflicts ) {
+ hm = sc->layers[gi->layer].splines->first->hintmask;
+ sc->layers[gi->layer].splines->first->hintmask = NULL;
+ }
+
+ memset(&gb,'\0',sizeof(gb));
+
+ GrowBuffer(&gb);
+
+ /* store the width on the stack */
+ if ( sc->width==defwid )
+ /* Don't need to do anything for the width */;
+ else
+ AddNumber2(&gb,sc->width-nomwid,round);
+
+ memset(&trans,'\0',sizeof(trans));
+ memset(&hdb,'\0',sizeof(hdb));
+ hdb.scs = scs;
+ hdb.gi = gi;
+ if ( gi!=NULL )
+ gi->bcnt = -1;
+ scs[0] = sc;
+ hdb.noconflicts = !sc->hconflicts && !sc->vconflicts;
+ hdb.cnt = NumberHints(hdb.scs,1);
+ DumpHints(&gb,sc->hstem,sc->hconflicts || sc->vconflicts?18:1,
+ sc->hconflicts || sc->vconflicts?18:1,round);
+ DumpHints(&gb,sc->vstem,sc->hconflicts || sc->vconflicts?-1:3,
+ sc->hconflicts || sc->vconflicts?23:3,round);
+ CounterHints2(&gb, sc, hdb.cnt );
+ RSC2PS2(&gb,sc,sc,&hdb,&trans,subrs,flags,gi->layer);
+
+ if ( gi->bcnt==-1 ) { /* If it's whitespace */
+ gi->bcnt = 0;
+ StartNextSubroutine(&gb,&hdb);
+ }
+ BreakSubroutine(&gb,&hdb);
+ MoveSubrsToChar(gi);
+ ret = NULL;
+
+ free(gb.base);
+ if ( flags&ps_flag_nohints ) {
+ sc->hstem = oldh; sc->vstem = oldv;
+ sc->hconflicts = hc; sc->vconflicts = vc;
+ } else if ( hm!=NULL )
+ sc->layers[gi->layer].splines->first->hintmask = hm;
+return( ret );
+}
+
+static SplinePoint *LineTo(SplinePoint *last, int x, int y) {
+ SplinePoint *sp = SplinePointCreate(x,y);
+ SplineMake3(last,sp);
+return( sp );
+}
+
+static void Type2NotDefSplines(SplineFont *sf,SplineChar *sc,int layer) {
+ /* I'd always assumed that Type2 notdefs would look like type1 notdefs */
+ /* but they don't, they look like truetype notdefs. And Ralf Stubner */
+ /* points out that the spec says they should. So make a box here */
+ int stem, ymax;
+ SplineSet *inner, *ss;
+ StemInfo *h, *hints;
+
+ stem = (sf->ascent+sf->descent)/20;
+ ymax = 2*sf->ascent/3;
+
+ ss = chunkalloc(sizeof(SplineSet));
+ ss->first = ss->last = SplinePointCreate(stem,0);
+ ss->last = LineTo(ss->last,stem,ymax);
+ ss->last = LineTo(ss->last,sc->width-stem,ymax);
+ ss->last = LineTo(ss->last,sc->width-stem,0);
+ SplineMake3(ss->last,ss->first);
+ ss->last = ss->first;
+
+ ss->next = inner = chunkalloc(sizeof(SplineSet));
+ inner->first = inner->last = SplinePointCreate(2*stem,stem);
+ inner->last = LineTo(inner->last,sc->width-2*stem,stem);
+ inner->last = LineTo(inner->last,sc->width-2*stem,ymax-stem);
+ inner->last = LineTo(inner->last,2*stem,ymax-stem);
+ SplineMake3(inner->last,inner->first);
+ inner->last = inner->first;
+
+ sc->layers[layer].splines = ss;
+
+ hints = chunkalloc(sizeof(StemInfo));
+ hints->start = stem;
+ hints->width = stem;
+ hints->next = h = chunkalloc(sizeof(StemInfo));
+ h->start = sc->width-2*stem;
+ h->width = stem;
+ sc->vstem = hints;
+
+ hints = chunkalloc(sizeof(StemInfo));
+ hints->start = 0;
+ hints->width = stem;
+ hints->next = h = chunkalloc(sizeof(StemInfo));
+ h->start = ymax-stem;
+ h->width = stem;
+ sc->hstem = hints;
+}
+
+#ifdef FONTFORGE_CONFIG_PS_REFS_GET_SUBRS
+/* This char has hint conflicts. Check to see if we can put it into a subr */
+/* in spite of that. If there is at least one dependent character which: */
+/* refers to us without translating us */
+/* and all its other refs contain no hints at all */
+static int Type2SpecialCase(SplineChar *sc) {
+ struct splinecharlist *d;
+ RefChar *r;
+
+ for ( d=sc->dependents; d!=NULL; d=d->next ) {
+ for ( r=d->sc->layers[layer].refs; r!=NULL; r = r->next ) {
+ if ( autohint_before_generate && r->sc!=NULL &&
+ r->sc->changedsincelasthinted && !r->sc->manualhints )
+ SplineCharAutoHint(r->sc,NULL);
+ if ( r->transform[0]!=1 || r->transform[1]!=0 ||
+ r->transform[2]!=0 || r->transform[3]!=1 )
+ break;
+ if ( r->sc!=sc && (r->sc->hstem!=NULL || r->sc->vstem!=NULL))
+ break;
+ if ( r->sc==sc && (r->transform[4]!=0 || r->transform[5]!=0))
+ break;
+ }
+ if ( r==NULL )
+return( true );
+ }
+return( false );
+}
+#endif /* FONTFORGE_CONFIG_PS_REFS_GET_SUBRS */
+
+/* Mark those glyphs which can live totally in subrs */
+static void SplineFont2FullSubrs2(int flags,GlyphInfo *gi) {
+ int i;
+ SplineChar *sc;
+#ifdef FONTFORGE_CONFIG_PS_REFS_GET_SUBRS
+ int cc;
+ RefChar *r;
+ struct potentialsubrs *ps;
+ SplineSet *spl;
+#endif /* FONTFORGE_CONFIG_PS_REFS_GET_SUBRS */
+
+ if ( !autohint_before_generate && !(flags&ps_flag_nohints))
+ SplineFontAutoHintRefs(gi->sf,gi->layer);
+
+ for ( i=0; i<gi->glyphcnt; ++i ) if ( (sc=gi->gb[i].sc)!=NULL )
+ sc->lsidebearing = 0x7fff;
+
+/* This code allows us to put whole glyphs into subroutines */
+/* I found slight improvements in space on some fonts, and large increases */
+/* in others. So I'm disabling it for now */
+#ifdef FONTFORGE_CONFIG_PS_REFS_GET_SUBRS
+ /* We don't allow refs to refs. It's too complex */
+ for ( i=0; i<gi->glyphcnt; ++i ) if ( (sc=gi->gb[i].sc)!=NULL ) {
+ if ( SCWorthOutputting(sc) &&
+ (( sc->layers[layer].refs==NULL && sc->dependents!=NULL &&
+ ( (!sc->hconflicts && !sc->vconflicts) ||
+ Type2SpecialCase(sc)) ) )) {
+ /* if the glyph is a single contour with no hintmasks then */
+ /* our single contour code will find it. If we do it here too */
+ /* we'll get a subr which points to another subr. Very dull and */
+ /* a waste of space */
+ cc = 0;
+ for ( spl=sc->layers[layer].splines; spl!=NULL; spl=spl->next )
+ ++cc;
+ for ( r= sc->layers[layer].refs; r!=NULL && cc<2 ; r=r->next ) {
+ for ( spl=r->layers[0].splines; spl!=NULL; spl=spl->next )
+ ++cc;
+ }
+ if ( cc<2 )
+ continue;
+ /* Put the */
+ /* character into a subr if it is referenced by other characters */
+ if ( gi->pcnt>=gi->pmax )
+ gi->psubrs = realloc(gi->psubrs,(gi->pmax+=gi->glyphcnt)*sizeof(struct potentialsubrs));
+ ps = &gi->psubrs[gi->pcnt];
+ memset(ps,0,sizeof(*ps)); /* set cnt to 0 */
+ ps->idx = gi->pcnt++;
+ ps->full_glyph_index = i;
+ sc->lsidebearing = gi->pcnt-1;
+ ps->startstop = FigureStartStop(sc,gi);
+ }
+ }
+#endif /* FONTFORGE_CONFIG_PS_REFS_GET_SUBRS */
+}
+
+struct pschars *SplineFont2ChrsSubrs2(SplineFont *sf, int nomwid, int defwid,
+ const int *bygid, int cnt, int flags, struct pschars **_subrs, int layer) {
+ struct pschars *subrs, *chrs;
+ int i,j,k,scnt;
+ SplineChar *sc;
+ GlyphInfo gi;
+ SplineChar dummynotdef;
+
+ if ( !autohint_before_generate && !(flags&ps_flag_nohints))
+ SplineFontAutoHintRefs(sf,layer);
+
+ memset(&gi,0,sizeof(gi));
+ memset(&gi.hashed,-1,sizeof(gi.hashed));
+ gi.instance_count = 1;
+ gi.sf = sf;
+ gi.layer = layer;
+ gi.glyphcnt = cnt;
+ gi.bygid = bygid;
+ gi.gb = calloc(cnt,sizeof(struct glyphbits));
+ gi.pmax = 3*cnt;
+ gi.psubrs = malloc(gi.pmax*sizeof(struct potentialsubrs));
+ for ( i=0; i<cnt; ++i ) {
+ int gid = bygid[i];
+ if ( i==0 && gid==-1 ) {
+ sc = &dummynotdef;
+ memset(sc,0,sizeof(dummynotdef));
+ dummynotdef.name = ".notdef";
+ dummynotdef.parent = sf;
+ dummynotdef.layer_cnt = sf->layer_cnt;
+ dummynotdef.layers = calloc(sf->layer_cnt,sizeof(Layer));
+ dummynotdef.width = SFOneWidth(sf);
+ if ( dummynotdef.width==-1 )
+ dummynotdef.width = (sf->ascent+sf->descent)/2;
+ Type2NotDefSplines(sf,&dummynotdef,layer);
+ } else if ( gid!=-1 )
+ sc = sf->glyphs[gid];
+ else
+ continue;
+ gi.gb[i].sc = sc;
+ if ( autohint_before_generate && sc!=NULL &&
+ sc->changedsincelasthinted && !sc->manualhints &&
+ !(flags&ps_flag_nohints))
+ SplineCharAutoHint(sc,layer,NULL);
+ sc->lsidebearing = 0x7fff;
+ }
+ MarkTranslationRefs(sf,layer);
+ SplineFont2FullSubrs2(flags,&gi);
+
+ for ( i=0; i<cnt; ++i ) {
+ if ( (sc = gi.gb[i].sc)==NULL )
+ continue;
+ gi.active = &gi.gb[i];
+ SplineChar2PS2(sc,NULL,nomwid,defwid,NULL,flags,&gi);
+ ff_progress_next();
+ }
+
+ for ( i=scnt=0; i<gi.pcnt; ++i ) {
+ /* A subroutine call takes somewhere between 2 and 4 bytes itself. */
+ /* and we must add a return statement to the end. We don't want to */
+ /* make things bigger */
+ /* if we have more than 65535 subrs a subr call can take 9 bytes */
+ if ( gi.psubrs[i].full_glyph_index!=-1 )
+ gi.psubrs[i].idx = scnt++;
+ else if ( gi.psubrs[i].cnt*gi.psubrs[i].len>(gi.psubrs[i].cnt*4)+gi.psubrs[i].len+1 )
+ gi.psubrs[i].idx = scnt++;
+ else
+ gi.psubrs[i].idx = -1;
+ }
+ subrs = calloc(1,sizeof(struct pschars));
+ subrs->cnt = scnt;
+ subrs->next = scnt;
+ subrs->lens = malloc(scnt*sizeof(int));
+ subrs->values = malloc(scnt*sizeof(unsigned char *));
+ subrs->bias = scnt<1240 ? 107 :
+ scnt<33900 ? 1131 : 32768;
+ for ( i=0; i<gi.pcnt; ++i ) {
+ if ( gi.psubrs[i].idx != -1 ) {
+ scnt = gi.psubrs[i].idx;
+ subrs->lens[scnt] = gi.psubrs[i].len+1;
+ subrs->values[scnt] = malloc(subrs->lens[scnt]);
+ memcpy(subrs->values[scnt],gi.psubrs[i].data,gi.psubrs[i].len);
+ subrs->values[scnt][gi.psubrs[i].len] = 11; /* Add a return to end of subr */
+ }
+ }
+
+ chrs = calloc(1,sizeof(struct pschars));
+ chrs->cnt = cnt;
+ chrs->next = cnt;
+ chrs->lens = malloc(cnt*sizeof(int));
+ chrs->values = malloc(cnt*sizeof(unsigned char *));
+ chrs->keys = malloc(cnt*sizeof(char *));
+ for ( i=0; i<cnt; ++i ) {
+ int len=0;
+ uint8 *vals;
+ struct glyphbits *gb = &gi.gb[i];
+ if ( gb->sc==NULL )
+ continue;
+ chrs->keys[i] = copy(gb->sc->name);
+ for ( k=0; k<2; ++k ) if ( k!=0 || gb->sc->lsidebearing!=0x7fff ) {
+ for ( j=0; j<gb->bcnt; ++j ) {
+ if ( k!=0 || j!=0 )
+ len += gb->bits[j].dlen;
+ if ( k==1 && gb->sc->lsidebearing!=0x7fff ) {
+ int si = gi.psubrs[ gb->sc->lsidebearing ].idx;
+ len += 1 + (si<=107 && si>=-107?1:si<=1131 && si>=-1131?2:si>=-32768 && si<32767?3:8);
+ break;
+ }
+ if ( gi.psubrs[ gb->bits[j].psub_index ].idx==-1 )
+ len += gi.psubrs[ gb->bits[j].psub_index ].len;
+ else {
+ int si = gi.psubrs[ gb->bits[j].psub_index ].idx - subrs->bias;
+ /* space for the number (subroutine index) */
+ if ( si>=-107 && si<=107 )
+ ++len;
+ else if ( si>=-1131 && si<=1131 )
+ len += 2;
+ else if ( si>=-32768 && si<=32767 )
+ len += 3;
+ else
+ len += 8;
+ /* space for the subroutine operator */
+ ++len;
+ }
+ }
+ if ( k==0 ) {
+ int si = gi.psubrs[ gb->sc->lsidebearing ].idx;
+ subrs->lens[si] = len+1;
+ vals = subrs->values[si] = malloc(len+2);
+ } else {
+ chrs->lens[i] = len+1;
+ vals = chrs->values[i] = malloc(len+2); /* space for endchar and a final NUL (which is really meaningless, but makes me feel better) */
+ }
+
+ len = 0;
+ for ( j=0; j<gb->bcnt; ++j ) {
+ int si;
+ if ( k!=0 || j!=0 ) {
+ memcpy(vals+len,gb->bits[j].data,gb->bits[j].dlen);
+ len += gb->bits[j].dlen;
+ }
+ si = 0x80000000;
+ if ( k==1 && gb->sc->lsidebearing!=0x7fff )
+ si = gi.psubrs[ gb->sc->lsidebearing ].idx - subrs->bias;
+ else if ( gi.psubrs[ gb->bits[j].psub_index ].idx==-1 ) {
+ memcpy(vals+len,gi.psubrs[ gb->bits[j].psub_index ].data,
+ gi.psubrs[ gb->bits[j].psub_index ].len);
+ len += gi.psubrs[ gb->bits[j].psub_index ].len;
+ } else
+ si = gi.psubrs[ gb->bits[j].psub_index ].idx - subrs->bias;
+ if ( si!=0x80000000 ) {
+ /* space for the number (subroutine index) */
+ if ( si>=-107 && si<=107 )
+ vals[len++] = si+139;
+ else if ( si>0 && si<=1131 ) {
+ si-=108;
+ vals[len++] = (si>>8)+247;
+ vals[len++] = si&0xff;
+ } else if ( si>=-1131 && si<0 ) {
+ si=(-si)-108;
+ vals[len++] = (si>>8)+251;
+ vals[len++] = si&0xff;
+ } else if ( si>=-32768 && si<=32767 ) {
+ vals[len++] = 28;
+ vals[len++] = (si>>8)&0xff;
+ vals[len++] = si&0xff;
+ } else {
+ /* store as fixed point, then multiply by 64. Takes 8 bytes */
+ si *= (65536/64);
+ vals[len++] = '\377';
+ vals[len++] = (si>>24)&0xff;
+ vals[len++] = (si>>16)&0xff;
+ vals[len++] = (si>>8)&0xff;
+ vals[len++] = si&0xff;
+ vals[len++] = 64 + 139;
+ vals[len++] = 0xc; vals[len++] = 0x18; /* Multiply */
+ }
+
+ /* space for the subroutine operator */
+ vals[len++] = 10;
+ }
+ if ( k==1 && gb->sc->lsidebearing!=0x7fff )
+ break;
+ }
+ if ( k==0 ) {
+ vals[len++] = 11; /* return */
+ vals[len] = '\0';
+ } else {
+ vals[len++] = 14; /* endchar */
+ vals[len] = '\0';
+ }
+ }
+ }
+
+ GIFree(&gi,&dummynotdef);
+ *_subrs = subrs;
+return( chrs );
+}
+
+struct pschars *CID2ChrsSubrs2(SplineFont *cidmaster,struct fd2data *fds,
+ int flags, struct pschars **_glbls, int layer) {
+ struct pschars *chrs, *glbls;
+ int i, j, cnt, cid, max, fd;
+ int *scnts;
+ SplineChar *sc;
+ SplineFont *sf = NULL;
+ /* In a cid-keyed font, cid 0 is defined to be .notdef so there are no */
+ /* special worries. If it is defined we use it. If it is not defined */
+ /* we add it. */
+ GlyphInfo gi;
+ SplineChar dummynotdef;
+
+ max = 0;
+ for ( i=0; i<cidmaster->subfontcnt; ++i ) {
+ if ( max<cidmaster->subfonts[i]->glyphcnt )
+ max = cidmaster->subfonts[i]->glyphcnt;
+ MarkTranslationRefs(cidmaster->subfonts[i],layer);
+ }
+ cnt = 1; /* for .notdef */
+ for ( cid = 1; cid<max; ++cid ) {
+ for ( i=0; i<cidmaster->subfontcnt; ++i ) {
+ sf = cidmaster->subfonts[i];
+ if ( cid<sf->glyphcnt && (sc=sf->glyphs[cid])!=NULL ) {
+ sc->ttf_glyph = -1;
+ sc->lsidebearing = 0x7fff;
+ if ( SCWorthOutputting(sc))
+ ++cnt;
+ break;
+ }
+ }
+ }
+
+ memset(&gi,0,sizeof(gi));
+ memset(&gi.hashed,-1,sizeof(gi.hashed));
+ gi.instance_count = 1;
+ gi.sf = sf;
+ gi.glyphcnt = cnt;
+ gi.bygid = NULL;
+ gi.gb = calloc(cnt,sizeof(struct glyphbits));
+ gi.pmax = 3*cnt;
+ gi.psubrs = malloc(gi.pmax*sizeof(struct potentialsubrs));
+ gi.layer = layer;
+
+ for ( cid = cnt = 0; cid<max; ++cid ) {
+ sf = NULL;
+ for ( i=0; i<cidmaster->subfontcnt; ++i ) {
+ sf = cidmaster->subfonts[i];
+ if ( cid<sf->glyphcnt && SCWorthOutputting(sf->glyphs[cid]) )
+ break;
+ }
+ if ( cid!=0 && i==cidmaster->subfontcnt ) {
+ sc=NULL;
+ } else if ( i==cidmaster->subfontcnt ) {
+ /* They didn't define CID 0 */
+ sc = &dummynotdef;
+ /* Place it in the final subfont (which is what sf points to) */
+ memset(sc,0,sizeof(dummynotdef));
+ dummynotdef.name = ".notdef";
+ dummynotdef.parent = sf;
+ dummynotdef.layer_cnt = layer+1;
+ dummynotdef.layers = calloc(layer+1,sizeof(Layer));
+ dummynotdef.width = SFOneWidth(sf);
+ if ( dummynotdef.width==-1 )
+ dummynotdef.width = (sf->ascent+sf->descent);
+ Type2NotDefSplines(sf,&dummynotdef,layer);
+ gi.gb[cnt].sc = sc;
+ gi.gb[cnt].fd = i = cidmaster->subfontcnt-1;
+ } else {
+ gi.gb[cnt].sc = sc = sf->glyphs[cid];
+ gi.gb[cnt].fd = i;
+ }
+ if ( sc!=NULL ) {
+ sc->lsidebearing = 0x7fff;
+ gi.active = &gi.gb[cnt];
+ sc->ttf_glyph = cnt++;
+ SplineChar2PS2(sc,NULL,fds[i].nomwid,fds[i].defwid,NULL,flags,&gi);
+ }
+ ff_progress_next();
+ }
+
+ scnts = calloc( cidmaster->subfontcnt+1,sizeof(int));
+ for ( i=0; i<gi.pcnt; ++i ) {
+ gi.psubrs[i].idx = -1;
+ if ( gi.psubrs[i].cnt*gi.psubrs[i].len>(gi.psubrs[i].cnt*4)+gi.psubrs[i].len+1 )
+ gi.psubrs[i].idx = scnts[gi.psubrs[i].fd+1]++;
+ }
+
+ glbls = calloc(1,sizeof(struct pschars));
+ glbls->cnt = scnts[0];
+ glbls->next = scnts[0];
+ glbls->lens = malloc(scnts[0]*sizeof(int));
+ glbls->values = malloc(scnts[0]*sizeof(unsigned char *));
+ glbls->bias = scnts[0]<1240 ? 107 :
+ scnts[0]<33900 ? 1131 : 32768;
+ for ( fd=0; fd<cidmaster->subfontcnt; ++fd ) {
+ fds[fd].subrs = calloc(1,sizeof(struct pschars));
+ fds[fd].subrs->cnt = scnts[fd+1];
+ fds[fd].subrs->next = scnts[fd+1];
+ fds[fd].subrs->lens = malloc(scnts[fd+1]*sizeof(int));
+ fds[fd].subrs->values = malloc(scnts[fd+1]*sizeof(unsigned char *));
+ fds[fd].subrs->bias = scnts[fd+1]<1240 ? 107 :
+ scnts[fd+1]<33900 ? 1131 : 32768;
+ }
+ free( scnts);
+
+ for ( i=0; i<gi.pcnt; ++i ) {
+ if ( gi.psubrs[i].idx != -1 ) {
+ struct pschars *subrs = gi.psubrs[i].fd==-1 ? glbls : fds[gi.psubrs[i].fd].subrs;
+ int scnt = gi.psubrs[i].idx;
+ subrs->lens[scnt] = gi.psubrs[i].len+1;
+ subrs->values[scnt] = malloc(subrs->lens[scnt]);
+ memcpy(subrs->values[scnt],gi.psubrs[i].data,gi.psubrs[i].len);
+ subrs->values[scnt][gi.psubrs[i].len] = 11; /* Add a return to end of subr */
+ }
+ }
+
+
+ chrs = calloc(1,sizeof(struct pschars));
+ chrs->cnt = cnt;
+ chrs->next = cnt;
+ chrs->lens = malloc(cnt*sizeof(int));
+ chrs->values = malloc(cnt*sizeof(unsigned char *));
+ chrs->keys = malloc(cnt*sizeof(char *));
+ for ( i=0; i<cnt; ++i ) {
+ int len=0;
+ struct glyphbits *gb = &gi.gb[i];
+ chrs->keys[i] = copy(gb->sc->name);
+ for ( j=0; j<gb->bcnt; ++j ) {
+ len += gb->bits[j].dlen;
+ if ( gi.psubrs[ gb->bits[j].psub_index ].idx==-1 )
+ len += gi.psubrs[ gb->bits[j].psub_index ].len;
+ else {
+ struct pschars *subrs = gi.psubrs[gb->bits[j].psub_index].fd==-1 ? glbls : fds[gi.psubrs[gb->bits[j].psub_index].fd].subrs;
+ int si = gi.psubrs[ gb->bits[j].psub_index ].idx - subrs->bias;
+ /* space for the number (subroutine index) */
+ if ( si>=-107 && si<=107 )
+ ++len;
+ else if ( si>=-1131 && si<=1131 )
+ len += 2;
+ else if ( si>=-32768 && si<=32767 )
+ len += 3;
+ else
+ len += 8;
+ /* space for the subroutine operator */
+ ++len;
+ }
+ }
+ chrs->lens[i] = len+1;
+ chrs->values[i] = malloc(len+2); /* space for endchar and a final NUL (which is really meaningless, but makes me feel better) */
+
+ len = 0;
+ for ( j=0; j<gb->bcnt; ++j ) {
+ memcpy(chrs->values[i]+len,gb->bits[j].data,gb->bits[j].dlen);
+ len += gb->bits[j].dlen;
+ if ( gi.psubrs[ gb->bits[j].psub_index ].idx==-1 ) {
+ memcpy(chrs->values[i]+len,gi.psubrs[ gb->bits[j].psub_index ].data,
+ gi.psubrs[ gb->bits[j].psub_index ].len);
+ len += gi.psubrs[ gb->bits[j].psub_index ].len;
+ } else {
+ struct pschars *subrs = gi.psubrs[gb->bits[j].psub_index].fd==-1 ? glbls : fds[gi.psubrs[gb->bits[j].psub_index].fd].subrs;
+ int si = gi.psubrs[ gb->bits[j].psub_index ].idx - subrs->bias;
+ /* space for the number (subroutine index) */
+ if ( si>=-107 && si<=107 )
+ chrs->values[i][len++] = si+139;
+ else if ( si>0 && si<=1131 ) {
+ si-=108;
+ chrs->values[i][len++] = (si>>8)+247;
+ chrs->values[i][len++] = si&0xff;
+ } else if ( si>=-1131 && si<0 ) {
+ si=(-si)-108;
+ chrs->values[i][len++] = (si>>8)+251;
+ chrs->values[i][len++] = si&0xff;
+ } else if ( si>=-32768 && si<=32767 ) {
+ chrs->values[i][len++] = 28;
+ chrs->values[i][len++] = (si>>8)&0xff;
+ chrs->values[i][len++] = si&0xff;
+ } else {
+ /* store as fixed point, then multiply by 64. Takes 8 bytes */
+ si *= (65536/64);
+ chrs->values[i][len++] = '\377';
+ chrs->values[i][len++] = (si>>24)&0xff;
+ chrs->values[i][len++] = (si>>16)&0xff;
+ chrs->values[i][len++] = (si>>8)&0xff;
+ chrs->values[i][len++] = si&0xff;
+ chrs->values[i][len++] = 64 + 139;
+ chrs->values[i][len++] = 0xc; chrs->values[i][len++] = 0x18; /* Multiply */
+ }
+ /* space for the subroutine operator */
+ if ( gi.psubrs[ gb->bits[j].psub_index ].fd==-1 ) {
+ chrs->values[i][len++] = 29;
+ } else
+ chrs->values[i][len++] = 10;
+ }
+ }
+ chrs->values[i][len++] = 14; /* endchar */
+ chrs->values[i][len] = '\0';
+ }
+ GIFree(&gi,&dummynotdef);
+ *_glbls = glbls;
+return( chrs );
+}
+
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splinesaveafm.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splinesaveafm.c
new file mode 100644
index 0000000000..6fc6de1ead
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splinesaveafm.c
@@ -0,0 +1,322 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h" /* For Error */
+
+
+/* ************************************************************************** */
+/* **************************** Reading OFM files *************************** */
+/* ************************************************************************** */
+
+#define ExtShort(off) (((ext+2*off)[0]<<8)|(ext+2*off)[1])
+
+/* ************************************************************************** */
+
+int SCDrawsSomething(SplineChar *sc) {
+ int layer,l;
+ RefChar *ref;
+
+ if ( sc==NULL )
+return( false );
+ for ( layer = 0; layer<sc->layer_cnt; ++layer ) if ( !sc->layers[layer].background ) {
+ if ( sc->layers[layer].splines!=NULL)
+return( true );
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next )
+ for ( l=0; l<ref->layer_cnt; ++l )
+ if ( ref->layers[l].splines!=NULL )
+return( true );
+ }
+return( false );
+}
+
+int SCWorthOutputting(SplineChar *sc) {
+return( sc!=NULL &&
+ ( SCDrawsSomething(sc) || sc->widthset || sc->anchor!=NULL ||
+#if HANYANG
+ sc->compositionunit ||
+#endif
+ sc->dependents!=NULL /*||
+ sc->width!=sc->parent->ascent+sc->parent->descent*/ ) );
+}
+
+void SFLigatureCleanup(SplineFont *sf) {
+ LigList *l, *next;
+ struct splinecharlist *scl, *sclnext;
+ int j;
+
+ if (sf->internal_temp)
+return;
+
+ for ( j=0; j<sf->glyphcnt; ++j ) if ( sf->glyphs[j]!=NULL ) {
+ for ( l = sf->glyphs[j]->ligofme; l!=NULL; l = next ) {
+ next = l->next;
+ for ( scl = l->components; scl!=NULL; scl = sclnext ) {
+ sclnext = scl->next;
+ chunkfree(scl,sizeof(struct splinecharlist));
+ }
+ if ( l->lig->temporary ) {
+ free(l->lig->u.lig.components);
+ chunkfree(l->lig,sizeof(PST));
+ }
+ free( l );
+ }
+ sf->glyphs[j]->ligofme = NULL;
+ }
+}
+
+void SFLigaturePrepare(SplineFont *sf) {
+ PST *lig;
+ LigList *ll;
+ int i,j,k,ch;
+ char *pt, *ligstart;
+ SplineChar *sc, *tsc;
+ struct splinecharlist *head, *last;
+ int ccnt, lcnt, lmax=20;
+ LigList **all = malloc(lmax*sizeof(LigList *));
+
+ /* First clear out any old stuff */
+ for ( j=0; j<sf->glyphcnt; ++j ) if ( sf->glyphs[j]!=NULL )
+ sf->glyphs[j]->ligofme = NULL;
+
+ /* Attach all the ligatures to the first character of their components */
+ /* Figure out what the components are, and if they all exist */
+ /* we're only interested in the lig if all components are worth outputting */
+ for ( i=0 ; i<sf->glyphcnt; ++i ) if ( SCWorthOutputting(sf->glyphs[i]) && sf->glyphs[i]->possub!=NULL ) {
+ for ( lig = sf->glyphs[i]->possub; lig!=NULL; lig=lig->next ) if ( lig->type==pst_ligature ) {
+ ligstart = lig->u.lig.components;
+ last = head = NULL; sc = NULL;
+ for ( pt = ligstart; *pt!='\0'; ) {
+ char *start = pt;
+ for ( ; *pt!='\0' && *pt!=' '; ++pt );
+ ch = *pt; *pt = '\0';
+ tsc = SFGetChar(sf,-1,start);
+ *pt = ch;
+ if ( tsc!=NULL ) {
+ if ( !SCWorthOutputting(tsc)) {
+ sc = NULL;
+ break;
+ }
+ if ( sc==NULL ) {
+ sc = tsc;
+ ccnt = 1;
+ } else {
+ struct splinecharlist *cur = chunkalloc(sizeof(struct splinecharlist));
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ cur->sc = tsc;
+ cur->next = NULL;
+ ++ccnt;
+ }
+ } else {
+ sc = NULL;
+ break;
+ }
+ while ( *pt==' ' ) ++pt;
+ }
+ if ( sc!=NULL ) {
+ ll = malloc(sizeof(LigList));
+ ll->lig = lig;
+ ll->next = sc->ligofme;
+ ll->first = sc;
+ ll->components = head;
+ ll->ccnt = ccnt;
+ sc->ligofme = ll;
+ } else {
+ while ( head!=NULL ) {
+ last = head->next;
+ chunkfree(head,sizeof(*head));
+ head = last;
+ }
+ }
+ }
+ }
+ for ( i=0 ; i<sf->glyphcnt; ++i ) if ( (sc=sf->glyphs[i])!=NULL && sc->ligofme!=NULL ) {
+ for ( ll=sc->ligofme, lcnt=0; ll!=NULL; ll=ll->next, ++lcnt );
+ /* Finally, order the list so that the longest ligatures are first */
+ if ( lcnt>1 ) {
+ if ( lcnt>=lmax )
+ all = realloc(all,(lmax=lcnt+30)*sizeof(LigList *));
+ for ( ll=sc->ligofme, k=0; ll!=NULL; ll=ll->next, ++k )
+ all[k] = ll;
+ for ( k=0; k<lcnt-1; ++k ) for ( j=k+1; j<lcnt; ++j )
+ if ( all[k]->ccnt<all[j]->ccnt ) {
+ ll = all[k];
+ all[k] = all[j];
+ all[j] = ll;
+ }
+ sc->ligofme = all[0];
+ for ( k=0; k<lcnt-1; ++k )
+ all[k]->next = all[k+1];
+ all[k]->next = NULL;
+ }
+ }
+ free( all );
+}
+
+void SFKernCleanup(SplineFont *sf,int isv) {
+ int i;
+ KernPair *kp, *p, *n;
+ OTLookup *otl, *otlp, *otln;
+
+ if (sf->internal_temp)
+return;
+
+ if ( (!isv && sf->kerns==NULL) || (isv && sf->vkerns==NULL) ) /* can't have gotten messed up */
+return;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ for ( kp = isv ? sf->glyphs[i]->vkerns : sf->glyphs[i]->kerns, p=NULL; kp!=NULL; kp = n ) {
+ n = kp->next;
+ if ( kp->kcid!=0 ) {
+ if ( p!=NULL )
+ p->next = n;
+ else if ( isv )
+ sf->glyphs[i]->vkerns = n;
+ else
+ sf->glyphs[i]->kerns = n;
+ chunkfree(kp,sizeof(*kp));
+ } else
+ p = kp;
+ }
+ }
+ for ( otl=sf->gpos_lookups, otlp = NULL; otl!=NULL; otl = otln ) {
+ otln = otl->next;
+ if ( otl->temporary_kern ) {
+ if ( otlp!=NULL )
+ otlp->next = otln;
+ else
+ sf->gpos_lookups = otln;
+ OTLookupFree(otl);
+ } else
+ otlp = otl;
+ }
+}
+
+static void KCSfree(SplineChar ***scs,int cnt) {
+ int i;
+ for ( i=1; i<cnt; ++i )
+ free( scs[i]);
+ free(scs);
+}
+
+static SplineChar ***KernClassToSC(SplineFont *sf, char **classnames, int cnt) {
+ SplineChar ***scs, *sc;
+ int i,j;
+ char *pt, *end, ch;
+
+ scs = malloc(cnt*sizeof(SplineChar **));
+ for ( i=1; i<cnt; ++i ) {
+ for ( pt=classnames[i]-1, j=0; pt!=NULL; pt=strchr(pt+1,' ') )
+ ++j;
+ scs[i] = malloc((j+1)*sizeof(SplineChar *));
+ for ( pt=classnames[i], j=0; *pt!='\0'; pt=end+1 ) {
+ end = strchr(pt,' ');
+ if ( end==NULL )
+ end = pt+strlen(pt);
+ ch = *end;
+ *end = '\0';
+ sc = SFGetChar(sf,-1,pt);
+ if ( sc!=NULL )
+ scs[i][j++] = sc;
+ if ( ch=='\0' )
+ break;
+ *end = ch;
+ }
+ scs[i][j] = NULL;
+ }
+return( scs );
+}
+
+static void AddTempKP(SplineChar *first,SplineChar *second,
+ int16 offset, struct lookup_subtable *sub,uint16 kcid,int isv) {
+ KernPair *kp;
+
+ for ( kp=first->kerns; kp!=NULL; kp=kp->next )
+ if ( kp->sc == second )
+ break;
+ if ( kp==NULL ) {
+ kp = chunkalloc(sizeof(KernPair));
+ kp->sc = second;
+ kp->off = offset;
+ kp->subtable = sub;
+ kp->kcid = kcid;
+ if ( isv ) {
+ kp->next = first->vkerns;
+ first->vkerns = kp;
+ } else {
+ kp->next = first->kerns;
+ first->kerns = kp;
+ }
+ }
+}
+
+void SFKernClassTempDecompose(SplineFont *sf,int isv) {
+ KernClass *kc, *head= isv ? sf->vkerns : sf->kerns;
+ KernPair *kp;
+ SplineChar ***first, ***last;
+ int i, j, k, l;
+ OTLookup *otl;
+
+ /* Make sure the temporary field is cleaned up. Otherwise we may lose kerning data */
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ for ( kp = isv ? sf->glyphs[i]->vkerns : sf->glyphs[i]->kerns; kp!=NULL; kp = kp->next ) {
+ kp->kcid = false;
+ }
+ }
+ for ( kc = head, i=0; kc!=NULL; kc = kc->next )
+ kc->kcid = ++i;
+ for ( kc = head; kc!=NULL; kc = kc->next ) {
+
+ otl = chunkalloc(sizeof(OTLookup));
+ otl->next = sf->gpos_lookups;
+ sf->gpos_lookups = otl;
+ otl->lookup_type = gpos_pair;
+ otl->lookup_flags = kc->subtable->lookup->lookup_flags;
+ otl->features = FeatureListCopy(kc->subtable->lookup->features);
+ otl->lookup_name = copy(_("<Temporary kerning>"));
+ otl->temporary_kern = otl->store_in_afm = true;
+ otl->subtables = chunkalloc(sizeof(struct lookup_subtable));
+ otl->subtables->lookup = otl;
+ otl->subtables->per_glyph_pst_or_kern = true;
+ otl->subtables->subtable_name = copy(_("<Temporary kerning>"));
+
+ first = KernClassToSC(sf,kc->firsts,kc->first_cnt);
+ last = KernClassToSC(sf,kc->seconds,kc->second_cnt);
+ for ( i=1; i<kc->first_cnt; ++i ) for ( j=1; j<kc->second_cnt; ++j ) {
+ if ( kc->offsets[i*kc->second_cnt+j]!=0 ) {
+ for ( k=0; first[i][k]!=NULL; ++k )
+ for ( l=0; last[j][l]!=NULL; ++l )
+ AddTempKP(first[i][k],last[j][l],
+ kc->offsets[i*kc->second_cnt+j],
+ otl->subtables,kc->kcid,isv);
+ }
+ }
+ KCSfree(first,kc->first_cnt);
+ KCSfree(last,kc->second_cnt);
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil.c
new file mode 100644
index 0000000000..4f96e87a30
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil.c
@@ -0,0 +1,3579 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include "encoding.h"
+#include <math.h>
+
+#ifdef HAVE_IEEEFP_H
+# include <ieeefp.h> /* Solaris defines isnan in ieeefp rather than math.h */
+#endif
+
+#include "sfd1.h" // This has the extended SplineFont type SplineFont1 for old file versions.
+#ifdef FF_UTHASH_GLIF_NAMES
+# include "glif_name_hash.h"
+#endif
+
+
+/*#define DEBUG 1*/
+
+typedef struct quartic {
+ bigreal a,b,c,d,e;
+} Quartic;
+
+/* In an attempt to make allocation more efficient I just keep preallocated */
+/* lists of certain common sizes. It doesn't seem to make much difference */
+/* when allocating stuff, but does when freeing. If the extra complexity */
+/* is bad then put: */
+/* #define chunkalloc(size) calloc(1,size) */
+/* #define chunkfree(item,size) free(item) */
+/* into splinefont.h after (or instead of) the definition of chunkalloc()*/
+
+#define ALLOC_CHUNK 100 /* Number of small chunks to malloc at a time */
+#ifndef FONTFORGE_CONFIG_USE_DOUBLE
+# define CHUNK_MAX 100 /* Maximum size (in chunk units) that we are prepared to allocate */
+ /* The size of our data structures */
+#else
+# define CHUNK_MAX 129
+#endif
+# define CHUNK_UNIT sizeof(void *) /* will vary with the word size of */
+ /* the machine. if pointers are 64 bits*/
+ /* we may need twice as much space as for 32 bits */
+
+#ifdef FLAG
+#undef FLAG
+#define FLAG 0xbadcafe
+#endif
+
+#ifdef CHUNKDEBUG
+static int chunkdebug = 0; /* When this is set we never free anything, insuring that each chunk is unique */
+#endif
+
+#if ALLOC_CHUNK>1
+struct chunk { struct chunk *next; };
+struct chunk2 { struct chunk2 *next; int flag; };
+#endif
+
+#if defined(FLAG) && ALLOC_CHUNK>1
+void chunktest(void) {
+ int i;
+ struct chunk2 *c;
+
+ for ( i=2; i<CHUNK_MAX; ++i )
+ for ( c=(struct chunk2 *) chunklists[i]; c!=NULL; c=c->next )
+ if ( c->flag!=FLAG ) {
+ fprintf( stderr, "Chunk memory list has been corrupted\n" );
+ abort();
+ }
+}
+#endif
+
+void LineListFree(LineList *ll) {
+ LineList *next;
+
+ while ( ll!=NULL ) {
+ next = ll->next;
+ chunkfree(ll,sizeof(LineList));
+ ll = next;
+ }
+}
+
+void LinearApproxFree(LinearApprox *la) {
+ LinearApprox *next;
+
+ while ( la!=NULL ) {
+ next = la->next;
+ LineListFree(la->lines);
+ chunkfree(la,sizeof(LinearApprox));
+ la = next;
+ }
+}
+
+void SplineFree(Spline *spline) {
+ LinearApproxFree(spline->approx);
+ chunkfree(spline,sizeof(Spline));
+}
+
+SplinePoint *SplinePointCreate(real x, real y) {
+ SplinePoint *sp;
+ if ( (sp=chunkalloc(sizeof(SplinePoint)))!=NULL ) {
+ sp->me.x = x; sp->me.y = y;
+ sp->nextcp = sp->prevcp = sp->me;
+ sp->nonextcp = sp->noprevcp = true;
+ sp->nextcpdef = sp->prevcpdef = false;
+ sp->ttfindex = sp->nextcpindex = 0xfffe;
+ sp->name = NULL;
+ }
+ return( sp );
+}
+
+Spline *SplineMake3(SplinePoint *from, SplinePoint *to) {
+ Spline *spline = chunkalloc(sizeof(Spline));
+
+ spline->from = from; spline->to = to;
+ from->next = to->prev = spline;
+ SplineRefigure3(spline);
+return( spline );
+}
+
+void SplinePointFree(SplinePoint *sp) {
+ chunkfree(sp->hintmask,sizeof(HintMask));
+ free(sp->name);
+ chunkfree(sp,sizeof(SplinePoint));
+}
+
+void SplinePointsFree(SplinePointList *spl) {
+ Spline *first, *spline, *next;
+ int nonext;
+
+ if ( spl==NULL )
+ return;
+ if ( spl->first!=NULL ) {
+ nonext = spl->first->next==NULL; // If there is no spline, we set a flag.
+ first = NULL;
+ // We start on the first spline if it exists.
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline = next ) {
+ next = spline->to->next; // Cache the location of the next spline.
+ SplinePointFree(spline->to); // Free the destination point.
+ SplineFree(spline); // Free the spline.
+ if ( first==NULL ) first = spline; // We want to avoid repeating the circuit.
+ }
+ // If the path is open or has no splines, free the starting point.
+ if ( spl->last!=spl->first || nonext )
+ SplinePointFree(spl->first);
+ }
+}
+
+void SplinePointListFree(SplinePointList *spl) {
+
+ if ( spl==NULL ) return;
+ SplinePointsFree(spl);
+ free(spl->spiros);
+ free(spl->contour_name);
+ chunkfree(spl,sizeof(SplinePointList));
+}
+
+void SplinePointListsFree(SplinePointList *spl) {
+ SplinePointList *next;
+
+ while ( spl!=NULL ) {
+ next = spl->next;
+ SplinePointListFree(spl);
+ spl = next;
+ }
+}
+
+void SplineSetSpirosClear(SplineSet *spl) {
+ free(spl->spiros);
+ spl->spiros = NULL;
+ spl->spiro_cnt = spl->spiro_max = 0;
+}
+
+
+void RefCharFree(RefChar *ref) {
+ int i;
+
+ if ( ref==NULL )
+return;
+ for ( i=0; i<ref->layer_cnt; ++i ) {
+ SplinePointListsFree(ref->layers[i].splines);
+ GradientFree(ref->layers[i].fill_brush.gradient);
+ GradientFree(ref->layers[i].stroke_pen.brush.gradient);
+ PatternFree(ref->layers[i].fill_brush.pattern);
+ PatternFree(ref->layers[i].stroke_pen.brush.pattern);
+ }
+ free(ref->layers);
+ chunkfree(ref,sizeof(RefChar));
+}
+
+RefChar *RefCharCreate(void) {
+ RefChar *ref = chunkalloc(sizeof(RefChar));
+ ref->layer_cnt = 1;
+ ref->layers = calloc(1,sizeof(struct reflayer));
+ ref->layers[0].fill_brush.opacity = ref->layers[0].stroke_pen.brush.opacity = 1.0;
+ ref->layers[0].fill_brush.col = ref->layers[0].stroke_pen.brush.col = COLOR_INHERITED;
+ ref->layers[0].stroke_pen.width = WIDTH_INHERITED;
+ ref->layers[0].stroke_pen.linecap = lc_inherited;
+ ref->layers[0].stroke_pen.linejoin = lj_inherited;
+ ref->layers[0].dofill = true;
+ ref->round_translation_to_grid = true;
+return( ref );
+}
+
+void RefCharsFree(RefChar *ref) {
+ RefChar *rnext;
+
+ while ( ref!=NULL ) {
+ rnext = ref->next;
+ RefCharFree(ref);
+ ref = rnext;
+ }
+}
+
+typedef struct spline1 {
+ Spline1D sp;
+ real s0, s1;
+ real c0, c1;
+} Spline1;
+
+static void FigureSpline1(Spline1 *sp1,bigreal t0, bigreal t1, Spline1D *sp ) {
+ bigreal s = (t1-t0);
+ if ( sp->a==0 && sp->b==0 ) {
+ sp1->sp.d = sp->d + t0*sp->c;
+ sp1->sp.c = s*sp->c;
+ sp1->sp.b = sp1->sp.a = 0;
+ } else {
+ sp1->sp.d = sp->d + t0*(sp->c + t0*(sp->b + t0*sp->a));
+ sp1->sp.c = s*(sp->c + t0*(2*sp->b + 3*sp->a*t0));
+ sp1->sp.b = s*s*(sp->b+3*sp->a*t0);
+ sp1->sp.a = s*s*s*sp->a;
+ }
+ sp1->c0 = sp1->sp.c/3 + sp1->sp.d;
+ sp1->c1 = sp1->c0 + (sp1->sp.b+sp1->sp.c)/3;
+}
+
+static void SplineFindBounds(const Spline *sp, DBounds *bounds) {
+ real t, b2_fourac, v;
+ real min, max;
+ const Spline1D *sp1;
+ int i;
+
+ /* first try the end points */
+ for ( i=0; i<2; ++i ) {
+ sp1 = &sp->splines[i];
+ if ( i==0 ) {
+ if ( sp->to->me.x<bounds->minx ) bounds->minx = sp->to->me.x;
+ if ( sp->to->me.x>bounds->maxx ) bounds->maxx = sp->to->me.x;
+ min = bounds->minx; max = bounds->maxx;
+ } else {
+ if ( sp->to->me.y<bounds->miny ) bounds->miny = sp->to->me.y;
+ if ( sp->to->me.y>bounds->maxy ) bounds->maxy = sp->to->me.y;
+ min = bounds->miny; max = bounds->maxy;
+ }
+
+ /* then try the extrema of the spline (assuming they are between t=(0,1) */
+ /* (I don't bother fixing up for tiny rounding errors here. they don't matter */
+ /* But we could call CheckExtremaForSingleBitErrors */
+ if ( sp1->a!=0 ) {
+ b2_fourac = 4*sp1->b*sp1->b - 12*sp1->a*sp1->c;
+ if ( b2_fourac>=0 ) {
+ b2_fourac = sqrt(b2_fourac);
+ t = (-2*sp1->b + b2_fourac) / (6*sp1->a);
+ if ( t>0 && t<1 ) {
+ v = ((sp1->a*t+sp1->b)*t+sp1->c)*t + sp1->d;
+ if ( v<min ) min = v;
+ if ( v>max ) max = v;
+ }
+ t = (-2*sp1->b - b2_fourac) / (6*sp1->a);
+ if ( t>0 && t<1 ) {
+ v = ((sp1->a*t+sp1->b)*t+sp1->c)*t + sp1->d;
+ if ( v<min ) min = v;
+ if ( v>max ) max = v;
+ }
+ }
+ } else if ( sp1->b!=0 ) {
+ t = -sp1->c/(2.0*sp1->b);
+ if ( t>0 && t<1 ) {
+ v = (sp1->b*t+sp1->c)*t + sp1->d;
+ if ( v<min ) min = v;
+ if ( v>max ) max = v;
+ }
+ }
+ if ( i==0 ) {
+ bounds->minx = min; bounds->maxx = max;
+ } else {
+ bounds->miny = min; bounds->maxy = max;
+ }
+ }
+}
+
+static void _SplineSetFindBounds(const SplinePointList *spl, DBounds *bounds) {
+ Spline *spline, *first;
+ /* Ignore contours consisting of a single point (used for hinting, anchors */
+ /* for mark to base, etc. */
+
+ for ( ; spl!=NULL; spl = spl->next ) if ( spl->first->next!=NULL && spl->first->next->to != spl->first ) {
+ first = NULL;
+ if ( bounds->minx==0 && bounds->maxx==0 && bounds->miny==0 && bounds->maxy == 0 ) {
+ bounds->minx = bounds->maxx = spl->first->me.x;
+ bounds->miny = bounds->maxy = spl->first->me.y;
+ } else {
+ if ( spl->first->me.x<bounds->minx ) bounds->minx = spl->first->me.x;
+ if ( spl->first->me.x>bounds->maxx ) bounds->maxx = spl->first->me.x;
+ if ( spl->first->me.y<bounds->miny ) bounds->miny = spl->first->me.y;
+ if ( spl->first->me.y>bounds->maxy ) bounds->maxy = spl->first->me.y;
+ }
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ SplineFindBounds(spline,bounds);
+ if ( first==NULL ) first = spline;
+ }
+ }
+}
+
+static void _SplineSetFindClippedBounds(const SplinePointList *spl, DBounds *bounds,DBounds *clipb) {
+ Spline *spline, *first;
+ /* Ignore contours consisting of a single point (used for hinting, anchors */
+ /* for mark to base, etc. */
+
+ for ( ; spl!=NULL; spl = spl->next ) if ( spl->first->next!=NULL && spl->first->next->to != spl->first ) {
+ first = NULL;
+ if ( !spl->is_clip_path ) {
+ if ( bounds->minx==0 && bounds->maxx==0 && bounds->miny==0 && bounds->maxy == 0 ) {
+ bounds->minx = bounds->maxx = spl->first->me.x;
+ bounds->miny = bounds->maxy = spl->first->me.y;
+ } else {
+ if ( spl->first->me.x<bounds->minx ) bounds->minx = spl->first->me.x;
+ if ( spl->first->me.x>bounds->maxx ) bounds->maxx = spl->first->me.x;
+ if ( spl->first->me.y<bounds->miny ) bounds->miny = spl->first->me.y;
+ if ( spl->first->me.y>bounds->maxy ) bounds->maxy = spl->first->me.y;
+ }
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ SplineFindBounds(spline,bounds);
+ if ( first==NULL ) first = spline;
+ }
+ } else {
+ if ( clipb->minx==0 && clipb->maxx==0 && clipb->miny==0 && clipb->maxy == 0 ) {
+ clipb->minx = clipb->maxx = spl->first->me.x;
+ clipb->miny = clipb->maxy = spl->first->me.y;
+ } else {
+ if ( spl->first->me.x<clipb->minx ) clipb->minx = spl->first->me.x;
+ if ( spl->first->me.x>clipb->maxx ) clipb->maxx = spl->first->me.x;
+ if ( spl->first->me.y<clipb->miny ) clipb->miny = spl->first->me.y;
+ if ( spl->first->me.y>clipb->maxy ) clipb->maxy = spl->first->me.y;
+ }
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ SplineFindBounds(spline,clipb);
+ if ( first==NULL ) first = spline;
+ }
+ }
+ }
+}
+
+static void _SplineCharLayerFindBounds(SplineChar *sc,int layer, DBounds *bounds) {
+ RefChar *rf;
+ real e;
+ DBounds b, clipb;
+
+ for ( rf=sc->layers[layer].refs; rf!=NULL; rf = rf->next ) {
+ if ( bounds->minx==0 && bounds->maxx==0 && bounds->miny==0 && bounds->maxy == 0 )
+ *bounds = rf->bb;
+ else if ( rf->bb.minx!=0 || rf->bb.maxx != 0 || rf->bb.maxy != 0 || rf->bb.miny!=0 ) {
+ if ( rf->bb.minx < bounds->minx ) bounds->minx = rf->bb.minx;
+ if ( rf->bb.miny < bounds->miny ) bounds->miny = rf->bb.miny;
+ if ( rf->bb.maxx > bounds->maxx ) bounds->maxx = rf->bb.maxx;
+ if ( rf->bb.maxy > bounds->maxy ) bounds->maxy = rf->bb.maxy;
+ }
+ }
+ memset(&b,0,sizeof(b));
+ memset(&clipb,0,sizeof(clipb));
+ _SplineSetFindClippedBounds(sc->layers[layer].splines,&b,&clipb);
+ if ( sc->layers[layer].dostroke ) {
+ if ( sc->layers[layer].stroke_pen.width!=WIDTH_INHERITED )
+ e = sc->layers[layer].stroke_pen.width*sc->layers[layer].stroke_pen.trans[0];
+ else
+ e = sc->layers[layer].stroke_pen.trans[0];
+ b.minx -= e; b.maxx += e;
+ b.miny -= e; b.maxy += e;
+ }
+ if ( clipb.minx!=0 || clipb.miny!=0 || clipb.maxx!=0 || clipb.maxy!=0 ) {
+ if ( b.minx<clipb.minx ) b.minx = clipb.minx;
+ if ( b.miny<clipb.miny ) b.miny = clipb.miny;
+ if ( b.maxx>clipb.maxx ) b.maxx = clipb.maxx;
+ if ( b.maxy>clipb.maxy ) b.maxy = clipb.maxy;
+ }
+ if ( bounds->minx==0 && bounds->maxx==0 && bounds->miny==0 && bounds->maxy == 0 )
+ *bounds = b;
+ else if ( b.minx!=0 || b.maxx != 0 || b.maxy != 0 || b.miny!=0 ) {
+ if ( b.minx < bounds->minx ) bounds->minx = b.minx;
+ if ( b.miny < bounds->miny ) bounds->miny = b.miny;
+ if ( b.maxx > bounds->maxx ) bounds->maxx = b.maxx;
+ if ( b.maxy > bounds->maxy ) bounds->maxy = b.maxy;
+ }
+
+ if ( sc->parent!=NULL && sc->parent->strokedfont &&
+ (bounds->minx!=bounds->maxx || bounds->miny!=bounds->maxy)) {
+ real sw = sc->parent->strokewidth;
+ bounds->minx -= sw; bounds->miny -= sw;
+ bounds->maxx += sw; bounds->maxy += sw;
+ }
+}
+
+void SplineCharLayerFindBounds(SplineChar *sc,int layer,DBounds *bounds) {
+
+ if ( sc->parent!=NULL && sc->parent->multilayer ) {
+ SplineCharFindBounds(sc,bounds);
+return;
+ }
+
+ /* a char with no splines (ie. a space) must have an lbearing of 0 */
+ bounds->minx = bounds->maxx = 0;
+ bounds->miny = bounds->maxy = 0;
+
+ _SplineCharLayerFindBounds(sc,layer,bounds);
+}
+
+void SplineCharFindBounds(SplineChar *sc,DBounds *bounds) {
+ int i;
+ int first,last;
+
+ /* a char with no splines (ie. a space) must have an lbearing of 0 */
+ bounds->minx = bounds->maxx = 0;
+ bounds->miny = bounds->maxy = 0;
+
+ first = last = ly_fore;
+ if ( sc->parent!=NULL && sc->parent->multilayer )
+ last = sc->layer_cnt-1;
+ for ( i=first; i<=last; ++i )
+ _SplineCharLayerFindBounds(sc,i,bounds);
+}
+
+void SplineFontLayerFindBounds(SplineFont *sf,int layer,DBounds *bounds) {
+ int i, k, first, last;
+
+ if ( sf->multilayer ) {
+ SplineFontFindBounds(sf,bounds);
+return;
+ }
+
+ bounds->minx = bounds->maxx = 0;
+ bounds->miny = bounds->maxy = 0;
+
+ for ( i = 0; i<sf->glyphcnt; ++i ) {
+ SplineChar *sc = sf->glyphs[i];
+ if ( sc!=NULL ) {
+ first = last = ly_fore;
+ if ( sc->parent != NULL && sc->parent->multilayer )
+ last = sc->layer_cnt-1;
+ for ( k=first; k<=last; ++k )
+ _SplineCharLayerFindBounds(sc,k,bounds);
+ }
+ }
+}
+
+void SplineFontFindBounds(SplineFont *sf,DBounds *bounds) {
+ int i, k, first, last;
+
+ bounds->minx = bounds->maxx = 0;
+ bounds->miny = bounds->maxy = 0;
+
+ for ( i = 0; i<sf->glyphcnt; ++i ) {
+ SplineChar *sc = sf->glyphs[i];
+ if ( sc!=NULL ) {
+ first = last = ly_fore;
+ if ( sf->multilayer )
+ last = sc->layer_cnt-1;
+ for ( k=first; k<=last; ++k )
+ _SplineCharLayerFindBounds(sc,k,bounds);
+ }
+ }
+}
+
+void CIDLayerFindBounds(SplineFont *cidmaster,int layer,DBounds *bounds) {
+ SplineFont *sf;
+ int i;
+ DBounds b;
+ real factor;
+
+ if ( cidmaster->cidmaster )
+ cidmaster = cidmaster->cidmaster;
+ if ( cidmaster->subfonts==NULL ) {
+ SplineFontLayerFindBounds(cidmaster,layer,bounds);
+return;
+ }
+
+ sf = cidmaster->subfonts[0];
+ SplineFontLayerFindBounds(sf,layer,bounds);
+ factor = 1000.0/(sf->ascent+sf->descent);
+ bounds->maxx *= factor; bounds->minx *= factor; bounds->miny *= factor; bounds->maxy *= factor;
+ for ( i=1; i<cidmaster->subfontcnt; ++i ) {
+ sf = cidmaster->subfonts[i];
+ SplineFontLayerFindBounds(sf,layer,&b);
+ factor = 1000.0/(sf->ascent+sf->descent);
+ b.maxx *= factor; b.minx *= factor; b.miny *= factor; b.maxy *= factor;
+ if ( b.maxx>bounds->maxx ) bounds->maxx = b.maxx;
+ if ( b.maxy>bounds->maxy ) bounds->maxy = b.maxy;
+ if ( b.miny<bounds->miny ) bounds->miny = b.miny;
+ if ( b.minx<bounds->minx ) bounds->minx = b.minx;
+ }
+}
+
+static void _SplineSetFindTop(SplineSet *ss,BasePoint *top) {
+ SplinePoint *sp;
+
+ for ( ; ss!=NULL; ss=ss->next ) {
+ for ( sp=ss->first; ; ) {
+ if ( sp->me.y > top->y ) *top = sp->me;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+}
+
+void SplineSetQuickBounds(SplineSet *ss,DBounds *b) {
+ SplinePoint *sp;
+
+ b->minx = b->miny = 1e10;
+ b->maxx = b->maxy = -1e10;
+ for ( ; ss!=NULL; ss=ss->next ) {
+ for ( sp=ss->first; ; ) {
+ if ( sp->me.y < b->miny ) b->miny = sp->me.y;
+ if ( sp->me.x < b->minx ) b->minx = sp->me.x;
+ if ( sp->me.y > b->maxy ) b->maxy = sp->me.y;
+ if ( sp->me.x > b->maxx ) b->maxx = sp->me.x;
+ // Frank added the control points to the calculation since,
+ // according to Adam Twardoch,
+ // the OpenType values that rely upon this function
+ // expect control points to be included.
+ if ( !sp->noprevcp ) {
+ if ( sp->prevcp.y < b->miny ) b->miny = sp->prevcp.y;
+ if ( sp->prevcp.x < b->minx ) b->minx = sp->prevcp.x;
+ if ( sp->prevcp.y > b->maxy ) b->maxy = sp->prevcp.y;
+ if ( sp->prevcp.x > b->maxx ) b->maxx = sp->prevcp.x;
+ }
+ if ( !sp->nonextcp ) {
+ if ( sp->nextcp.y < b->miny ) b->miny = sp->nextcp.y;
+ if ( sp->nextcp.x < b->minx ) b->minx = sp->nextcp.x;
+ if ( sp->nextcp.y > b->maxy ) b->maxy = sp->nextcp.y;
+ if ( sp->nextcp.x > b->maxx ) b->maxx = sp->nextcp.x;
+ }
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+ if ( b->minx>65536 ) b->minx = 0;
+ if ( b->miny>65536 ) b->miny = 0;
+ if ( b->maxx<-65536 ) b->maxx = 0;
+ if ( b->maxy<-65536 ) b->maxy = 0;
+}
+
+void SplineCharQuickBounds(SplineChar *sc, DBounds *b) {
+ RefChar *ref;
+ int i,first, last;
+ DBounds temp;
+ real e;
+
+ b->minx = b->miny = 1e10;
+ b->maxx = b->maxy = -1e10;
+ first = last = ly_fore;
+ if ( sc->parent!=NULL && sc->parent->multilayer )
+ last = sc->layer_cnt-1;
+ for ( i=first; i<=last; ++i ) {
+ SplineSetQuickBounds(sc->layers[i].splines,&temp);
+ if ( sc->layers[i].dostroke && sc->layers[i].splines!=NULL ) {
+ if ( sc->layers[i].stroke_pen.width!=WIDTH_INHERITED )
+ e = sc->layers[i].stroke_pen.width*sc->layers[i].stroke_pen.trans[0];
+ else
+ e = sc->layers[i].stroke_pen.trans[0];
+ temp.minx -= e; temp.maxx += e;
+ temp.miny -= e; temp.maxy += e;
+ }
+ if ( temp.minx!=0 || temp.maxx != 0 || temp.maxy != 0 || temp.miny!=0 ) {
+ if ( temp.minx < b->minx ) b->minx = temp.minx;
+ if ( temp.miny < b->miny ) b->miny = temp.miny;
+ if ( temp.maxx > b->maxx ) b->maxx = temp.maxx;
+ if ( temp.maxy > b->maxy ) b->maxy = temp.maxy;
+ }
+ for ( ref = sc->layers[i].refs; ref!=NULL; ref = ref->next ) {
+ /*SplineSetQuickBounds(ref->layers[0].splines,&temp);*/
+ if ( b->minx==0 && b->maxx==0 && b->miny==0 && b->maxy == 0 )
+ *b = ref->bb;
+ else if ( ref->bb.minx!=0 || ref->bb.maxx != 0 || ref->bb.maxy != 0 || ref->bb.miny!=0 ) {
+ if ( ref->bb.minx < b->minx ) b->minx = ref->bb.minx;
+ if ( ref->bb.miny < b->miny ) b->miny = ref->bb.miny;
+ if ( ref->bb.maxx > b->maxx ) b->maxx = ref->bb.maxx;
+ if ( ref->bb.maxy > b->maxy ) b->maxy = ref->bb.maxy;
+ }
+ }
+ }
+ if ( sc->parent!=NULL && sc->parent->strokedfont &&
+ (b->minx!=b->maxx || b->miny!=b->maxy)) {
+ real sw = sc->parent->strokewidth;
+ b->minx -= sw; b->miny -= sw;
+ b->maxx += sw; b->maxy += sw;
+ }
+ if ( b->minx>1e9 )
+ memset(b,0,sizeof(*b));
+}
+
+void SplineCharLayerQuickBounds(SplineChar *sc,int layer,DBounds *bounds) {
+ RefChar *ref;
+ DBounds temp;
+
+ if ( sc->parent!=NULL && sc->parent->multilayer ) {
+ SplineCharQuickBounds(sc,bounds);
+return;
+ }
+
+ bounds->minx = bounds->miny = 1e10;
+ bounds->maxx = bounds->maxy = -1e10;
+
+ SplineSetQuickBounds(sc->layers[layer].splines,bounds);
+
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref = ref->next ) {
+ SplineSetQuickBounds(ref->layers[0].splines,&temp);
+ if ( bounds->minx==0 && bounds->maxx==0 && bounds->miny==0 && bounds->maxy == 0 )
+ *bounds = temp;
+ else if ( temp.minx!=0 || temp.maxx != 0 || temp.maxy != 0 || temp.miny!=0 ) {
+ if ( temp.minx < bounds->minx ) bounds->minx = temp.minx;
+ if ( temp.miny < bounds->miny ) bounds->miny = temp.miny;
+ if ( temp.maxx > bounds->maxx ) bounds->maxx = temp.maxx;
+ if ( temp.maxy > bounds->maxy ) bounds->maxy = temp.maxy;
+ }
+ }
+ /* a char with no splines (ie. a space) must have an lbearing of 0 */
+ if ( bounds->minx>1e9 )
+ memset(bounds,0,sizeof(*bounds));
+}
+
+void SplinePointCategorize(SplinePoint *sp) {
+ int oldpointtype = sp->pointtype;
+
+ sp->pointtype = pt_corner;
+ if ( sp->next==NULL && sp->prev==NULL )
+ ;
+ else if ( (sp->next!=NULL && sp->next->to->me.x==sp->me.x && sp->next->to->me.y==sp->me.y) ||
+ (sp->prev!=NULL && sp->prev->from->me.x==sp->me.x && sp->prev->from->me.y==sp->me.y ))
+ ;
+ else if ( sp->next==NULL ) {
+ sp->pointtype = sp->noprevcp ? pt_corner : pt_curve;
+ } else if ( sp->prev==NULL ) {
+ sp->pointtype = sp->nonextcp ? pt_corner : pt_curve;
+ } else if ( sp->nonextcp && sp->noprevcp ) {
+ ;
+ } else {
+ BasePoint ndir, ncdir, ncunit, pdir, pcdir, pcunit;
+ bigreal nlen, nclen, plen, pclen;
+ bigreal cross, bounds;
+
+ ncdir.x = sp->nextcp.x - sp->me.x; ncdir.y = sp->nextcp.y - sp->me.y;
+ pcdir.x = sp->prevcp.x - sp->me.x; pcdir.y = sp->prevcp.y - sp->me.y;
+ ndir.x = ndir.y = pdir.x = pdir.y = 0;
+ if ( sp->next!=NULL ) {
+ ndir.x = sp->next->to->me.x - sp->me.x; ndir.y = sp->next->to->me.y - sp->me.y;
+ }
+ if ( sp->prev!=NULL ) {
+ pdir.x = sp->prev->from->me.x - sp->me.x; pdir.y = sp->prev->from->me.y - sp->me.y;
+ }
+ nclen = sqrt(ncdir.x*ncdir.x + ncdir.y*ncdir.y);
+ pclen = sqrt(pcdir.x*pcdir.x + pcdir.y*pcdir.y);
+ nlen = sqrt(ndir.x*ndir.x + ndir.y*ndir.y);
+ plen = sqrt(pdir.x*pdir.x + pdir.y*pdir.y);
+ ncunit = ncdir; pcunit = pcdir;
+ if ( nclen!=0 ) { ncunit.x /= nclen; ncunit.y /= nclen; }
+ if ( pclen!=0 ) { pcunit.x /= pclen; pcunit.y /= pclen; }
+ if ( nlen!=0 ) { ndir.x /= nlen; ndir.y /= nlen; }
+ if ( plen!=0 ) { pdir.x /= plen; pdir.y /= plen; }
+
+ /* find out which side has the shorter control vector. Cross that vector */
+ /* with the normal of the unit vector on the other side. If the */
+ /* result is less than 1 em-unit then we've got colinear control points */
+ /* (within the resolution of the integer grid) */
+ /* Not quite... they could point in the same direction */
+ if ( oldpointtype==pt_curve )
+ bounds = 4.0;
+ else
+ bounds = 1.0;
+ if ( nclen!=0 && pclen!=0 &&
+ ((nclen>=pclen && (cross = pcdir.x*ncunit.y - pcdir.y*ncunit.x)<bounds && cross>-bounds ) ||
+ (pclen>nclen && (cross = ncdir.x*pcunit.y - ncdir.y*pcunit.x)<bounds && cross>-bounds )) &&
+ ncdir.x*pcdir.x + ncdir.y*pcdir.y < 0 )
+ sp->pointtype = pt_curve;
+ /* Cross product of control point with unit vector normal to line in */
+ /* opposite direction should be less than an em-unit for a tangent */
+ else if (( nclen==0 && pclen!=0 && (cross = pcdir.x*ndir.y-pcdir.y*ndir.x)<bounds && cross>-bounds ) ||
+ ( pclen==0 && nclen!=0 && (cross = ncdir.x*pdir.y-ncdir.y*pdir.x)<bounds && cross>-bounds ))
+ sp->pointtype = pt_tangent;
+
+ /* If a point started out hv, and could still be hv, them make it so */
+ /* but don't make hv points de novo, Alexey doesn't like change */
+ /* (this only works because hv isn't a default setting, so if it's */
+ /* there it was done intentionally) */
+ if ( sp->pointtype == pt_curve && oldpointtype == pt_hvcurve &&
+ ((sp->nextcp.x==sp->me.x && sp->prevcp.x==sp->me.x && sp->nextcp.y!=sp->me.y) ||
+ (sp->nextcp.y==sp->me.y && sp->prevcp.y==sp->me.y && sp->nextcp.x!=sp->me.x)))
+ sp->pointtype = pt_hvcurve;
+ }
+}
+
+void SPLCategorizePoints(SplinePointList *spl) {
+ Spline *spline, *first, *last=NULL;
+
+ for ( ; spl!=NULL; spl = spl->next ) {
+ first = NULL;
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ SplinePointCategorize(spline->from);
+ last = spline;
+ if ( first==NULL ) first = spline;
+ }
+ if ( spline==NULL && last!=NULL )
+ SplinePointCategorize(last->to);
+ }
+}
+
+SplinePointList *SplinePointListCopy1(const SplinePointList *spl) {
+ SplinePointList *cur;
+ const SplinePoint *pt; SplinePoint *cpt;
+ Spline *spline;
+
+ cur = chunkalloc(sizeof(SplinePointList));
+ cur->is_clip_path = spl->is_clip_path;
+ cur->spiro_cnt = cur->spiro_max = 0;
+ cur->spiros = 0;
+ if (spl->contour_name != NULL) cur->contour_name = copy(spl->contour_name);
+ for ( pt=spl->first; ; ) {
+ cpt = SplinePointCreate( 0, 0 );
+ *cpt = *pt;
+ if ( pt->hintmask!=NULL ) {
+ cpt->hintmask = chunkalloc(sizeof(HintMask));
+ memcpy(cpt->hintmask,pt->hintmask,sizeof(HintMask));
+ }
+ if ( pt->name!=NULL ) {
+ cpt->name = copy(pt->name);
+ }
+ cpt->next = cpt->prev = NULL;
+ if ( cur->first==NULL ) {
+ cur->first = cur->last = cpt;
+ cur->start_offset = 0;
+ } else {
+ spline = chunkalloc(sizeof(Spline));
+ *spline = *pt->prev;
+ spline->from = cur->last;
+ cur->last->next = spline;
+ cpt->prev = spline;
+ spline->to = cpt;
+ spline->approx = NULL;
+ cur->last = cpt;
+ }
+ if ( pt->next==NULL )
+ break;
+ pt = pt->next->to;
+ if ( pt==spl->first )
+ break;
+ }
+ if ( spl->first->prev!=NULL ) {
+ cpt = cur->first;
+ spline = chunkalloc(sizeof(Spline));
+ *spline = *pt->prev;
+ spline->from = cur->last;
+ cur->last->next = spline;
+ cpt->prev = spline;
+ spline->to = cpt;
+ spline->approx = NULL;
+ cur->last = cpt;
+ }
+ if ( spl->spiro_cnt!=0 ) {
+ cur->spiro_cnt = cur->spiro_max = spl->spiro_cnt;
+ cur->spiros = malloc(cur->spiro_cnt*sizeof(spiro_cp));
+ memcpy(cur->spiros,spl->spiros,cur->spiro_cnt*sizeof(spiro_cp));
+ }
+return( cur );
+}
+
+SplinePointList *SplinePointListCopy(const SplinePointList *base) {
+ SplinePointList *head=NULL, *last=NULL, *cur;
+
+ for ( ; base!=NULL; base = base->next ) {
+ cur = SplinePointListCopy1(base);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+return( head );
+}
+
+void BpTransform(BasePoint *to, BasePoint *from, real transform[6]) {
+ BasePoint p;
+ p.x = transform[0]*from->x + transform[2]*from->y + transform[4];
+ p.y = transform[1]*from->x + transform[3]*from->y + transform[5];
+ to->x = rint(1024*p.x)/1024;
+ to->y = rint(1024*p.y)/1024;
+}
+
+static void TransformPointExtended(SplinePoint *sp, real transform[6], enum transformPointMask tpmask )
+{
+ /**
+ * If we are to transform selected BCP instead of their base splinepoint
+ * then lets do that.
+ */
+ if( tpmask & tpmask_operateOnSelectedBCP
+ && (sp->nextcpselected || sp->prevcpselected ))
+ {
+ if( sp->nextcpselected )
+ {
+ int order2 = sp->next ? sp->next->order2 : 0;
+ BpTransform(&sp->nextcp,&sp->nextcp,transform);
+ SPTouchControl( sp, &sp->nextcp, order2 );
+ }
+ else if( sp->prevcpselected )
+ {
+ int order2 = sp->next ? sp->next->order2 : 0;
+ BpTransform(&sp->prevcp,&sp->prevcp,transform);
+ SPTouchControl( sp, &sp->prevcp, order2 );
+ }
+ }
+ else
+ {
+ /**
+ * Transform the base splinepoints.
+ */
+ BpTransform(&sp->me,&sp->me,transform);
+
+ if ( !sp->nonextcp )
+ {
+ BpTransform(&sp->nextcp,&sp->nextcp,transform);
+ }
+ else
+ {
+ sp->nextcp = sp->me;
+ }
+
+ if ( !sp->noprevcp )
+ {
+ BpTransform(&sp->prevcp,&sp->prevcp,transform);
+ }
+ else
+ {
+ sp->prevcp = sp->me;
+ }
+ }
+
+
+
+ if ( sp->pointtype == pt_hvcurve )
+ {
+ if(
+ ((sp->nextcp.x==sp->me.x && sp->prevcp.x==sp->me.x && sp->nextcp.y!=sp->me.y) ||
+ (sp->nextcp.y==sp->me.y && sp->prevcp.y==sp->me.y && sp->nextcp.x!=sp->me.x)))
+ {
+ /* Do Nothing */;
+ }
+ else
+ {
+ sp->pointtype = pt_curve;
+ }
+ }
+}
+
+static void TransformPoint(SplinePoint *sp, real transform[6])
+{
+ TransformPointExtended( sp, transform, 0 );
+}
+
+static void TransformSpiro(spiro_cp *cp, real transform[6]) {
+ bigreal x;
+
+ x = transform[0]*cp->x + transform[2]*cp->y + transform[4];
+ cp->y = transform[1]*cp->x + transform[3]*cp->y + transform[5];
+ cp->x = x;
+}
+
+static void TransformPTsInterpolateCPs(BasePoint *fromorig,Spline *spline,
+ BasePoint *toorig,real transform[6] ) {
+ BasePoint totrans, temp;
+ bigreal fraction;
+
+ /* Normally the "from" point will already have been translated, and the "to" */
+ /* point will need to be. But if we have a closed contour then on the */
+ /* last spline both from and to will have been transform. We can detect */
+ /* this because toorig will be different from &spline->to->me */
+ if ( spline->to->selected && toorig==&spline->to->me )
+ BpTransform(&totrans,&spline->to->me,transform);
+ else
+ totrans = spline->to->me;
+
+ /* None of the control points will have been transformed yet */
+ if ( fromorig->x!=toorig->x ) {
+ fraction = (spline->from->nextcp.x-fromorig->x)/( toorig->x-fromorig->x );
+ spline->from->nextcp.x = spline->from->me.x + fraction*( totrans.x-spline->from->me.x );
+ fraction = (spline->to->prevcp.x-fromorig->x)/( toorig->x-fromorig->x );
+ spline->to->prevcp.x = spline->from->me.x + fraction*( totrans.x-spline->from->me.x );
+ } else {
+ BpTransform(&temp,&spline->from->nextcp,transform);
+ spline->from->nextcp.x = temp.x;
+ BpTransform(&temp,&spline->to->prevcp,transform);
+ spline->to->prevcp.x = temp.x;
+ }
+ if ( fromorig->y!=toorig->y ) {
+ fraction = (spline->from->nextcp.y-fromorig->y)/( toorig->y-fromorig->y );
+ spline->from->nextcp.y = spline->from->me.y + fraction*( totrans.y-spline->from->me.y );
+ fraction = (spline->to->prevcp.y-fromorig->y)/( toorig->y-fromorig->y );
+ spline->to->prevcp.y = spline->from->me.y + fraction*( totrans.y-spline->from->me.y );
+ } else {
+ BpTransform(&temp,&spline->from->nextcp,transform);
+ spline->from->nextcp.y = temp.y;
+ BpTransform(&temp,&spline->to->prevcp,transform);
+ spline->to->prevcp.y = temp.y;
+ }
+
+ if ( spline->to->selected )
+ spline->to->me = totrans;
+}
+
+
+SplinePointList *SplinePointListTransformExtended(SplinePointList *base, real transform[6],
+ enum transformPointType tpt, enum transformPointMask tpmask ) {
+ Spline *spline, *first;
+ SplinePointList *spl;
+ SplinePoint *spt, *pfirst;
+ int allsel, anysel, alldone=true;
+ BasePoint lastpointorig, firstpointorig, orig;
+
+ for ( spl = base; spl!=NULL; spl = spl->next ) {
+ pfirst = NULL; first = NULL;
+ allsel = true; anysel=false;
+ if ( tpt==tpt_OnlySelectedInterpCPs && spl->first->next!=NULL && !spl->first->next->order2 ) {
+ lastpointorig = firstpointorig = spl->first->me;
+ printf("SplinePointListTransformExtended() spl->first->selected %d\n", spl->first->selected );
+ if ( spl->first->selected ) {
+ anysel = true;
+ BpTransform(&spl->first->me,&spl->first->me,transform);
+ } else
+ allsel = false;
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ if ( first==NULL ) first = spline;
+ orig = spline->to->me;
+ if ( spline->from->selected || spline->to->selected )
+ {
+ TransformPTsInterpolateCPs( &lastpointorig, spline,
+ spl->first==spline->to? &firstpointorig : &spline->to->me,
+ transform );
+ }
+ lastpointorig = orig;
+ if ( spline->to->selected ) anysel = true; else allsel = false;
+ }
+
+ } else {
+ for ( spt = spl->first ; spt!=pfirst; spt = spt->next->to ) {
+ if ( pfirst==NULL ) pfirst = spt;
+ if ( tpt==tpt_AllPoints || spt->selected ) {
+ TransformPointExtended(spt,transform,tpmask);
+ if ( tpt!=tpt_AllPoints ) {
+ if ( spt->next!=NULL && spt->next->order2 && !spt->next->to->selected && spt->next->to->ttfindex==0xffff ) {
+ SplinePoint *to = spt->next->to;
+ to->prevcp = spt->nextcp;
+ to->me.x = (to->prevcp.x+to->nextcp.x)/2;
+ to->me.y = (to->prevcp.y+to->nextcp.y)/2;
+ }
+ if ( spt->prev!=NULL && spt->prev->order2 && !spt->prev->from->selected && spt->prev->from->ttfindex==0xffff ) {
+ SplinePoint *from = spt->prev->from;
+ from->nextcp = spt->prevcp;
+ from->me.x = (from->prevcp.x+from->nextcp.x)/2;
+ from->me.y = (from->prevcp.y+from->nextcp.y)/2;
+ }
+ }
+ anysel = true;
+ } else
+ allsel = alldone = false;
+ if ( spt->next==NULL )
+ break;
+ }
+ }
+ if ( !anysel ) /* This splineset had no selected points it's unchanged */
+ continue;
+
+ /* If we changed all the points, then transform the spiro version too */
+ /* otherwise if we just changed some points, throw away the spiro */
+ if ( allsel ) {
+ int i;
+ for ( i=0; i<spl->spiro_cnt-1; ++i )
+ TransformSpiro(&spl->spiros[i], transform);
+ } else
+ SplineSetSpirosClear(spl);
+
+ /* if we changed all the points then the control points are right */
+ /* otherwise those near the edges may be wonky, fix 'em up */
+ /* Figuring out where the edges of the selection are is difficult */
+ /* so let's just tweak all points, it shouldn't matter */
+ /* It does matter. Let's tweak all default points */
+ if( !(tpmask & tpmask_dontFixControlPoints))
+ {
+ if ( tpt!=tpt_AllPoints && !allsel && spl->first->next!=NULL && !spl->first->next->order2 )
+ {
+ pfirst = NULL;
+ for ( spt = spl->first ; spt!=pfirst; spt = spt->next->to )
+ {
+ if ( pfirst==NULL ) pfirst = spt;
+ if ( spt->selected && spt->prev!=NULL && !spt->prev->from->selected &&
+ spt->prev->from->pointtype == pt_tangent )
+ SplineCharTangentPrevCP(spt->prev->from);
+ if ( spt->selected && spt->next!=NULL && !spt->next->to->selected &&
+ spt->next->to->pointtype == pt_tangent )
+ SplineCharTangentNextCP(spt->next->to);
+ if ( spt->prev!=NULL && spt->prevcpdef && tpt==tpt_OnlySelected )
+ SplineCharDefaultPrevCP(spt);
+ if ( spt->next==NULL )
+ break;
+ if ( spt->nextcpdef && tpt==tpt_OnlySelected )
+ SplineCharDefaultNextCP(spt);
+ }
+ }
+ }
+ first = NULL;
+ for ( spline = spl->first->next; spline!=NULL && spline!=first; spline=spline->to->next ) {
+ if ( !alldone ) SplineRefigureFixup(spline); else SplineRefigure(spline);
+ if ( first==NULL ) first = spline;
+ }
+ }
+return( base );
+}
+
+SplinePointList *SplinePointListTransform( SplinePointList *base, real transform[6],
+ enum transformPointType tpt )
+{
+ enum transformPointMask tpmask = 0;
+ return SplinePointListTransformExtended( base, transform, tpt, tpmask );
+}
+
+HintMask *HintMaskFromTransformedRef(RefChar *ref,BasePoint *trans,
+ SplineChar *basesc,HintMask *hm) {
+ StemInfo *st, *st2;
+ int hst_cnt, bcnt;
+ real start, width;
+ int i;
+
+ if ( ref->transform[1]!=0 || ref->transform[2]!=0 )
+return(NULL);
+
+ memset(hm,0,sizeof(HintMask));
+ for ( st = ref->sc->hstem; st!=NULL; st=st->next ) {
+ start = st->start*ref->transform[3] + ref->transform[5] + trans->y;
+ width = st->width*ref->transform[3];
+ for ( st2=basesc->hstem,bcnt=0; st2!=NULL; st2=st2->next, bcnt++ )
+ if ( st2->start == start && st2->width == width )
+ break;
+ if ( st2!=NULL )
+ (*hm)[bcnt>>3] |= (0x80>>(bcnt&7));
+ }
+ for ( st2=basesc->hstem,hst_cnt=0; st2!=NULL; st2=st2->next, hst_cnt++ );
+
+ for ( st = ref->sc->vstem; st!=NULL; st=st->next ) {
+ start = st->start*ref->transform[0] + ref->transform[4] + trans->x;
+ width = st->width*ref->transform[0];
+ for ( st2=basesc->vstem,bcnt=hst_cnt; st2!=NULL; st2=st2->next, bcnt++ )
+ if ( st2->start == start && st2->width == width )
+ break;
+ if ( st2!=NULL )
+ (*hm)[bcnt>>3] |= (0x80>>(bcnt&7));
+ }
+ for ( i=0; i<HntMax/8; ++i )
+ if ( (*hm)[i]!=0 )
+return( hm );
+
+return( NULL );
+}
+
+static HintMask *HintMaskTransform(HintMask *oldhm,real transform[6],
+ SplineChar *basesc,SplineChar *subsc) {
+ HintMask *newhm;
+ StemInfo *st, *st2;
+ int cnt, hst_cnt, bcnt;
+ real start, width;
+
+ if ( transform[1]!=0 || transform[2]!=0 )
+return( NULL );
+
+ newhm = chunkalloc(sizeof(HintMask));
+ for ( st = subsc->hstem,cnt = 0; st!=NULL; st=st->next, cnt++ ) {
+ if ( (*oldhm)[cnt>>3]&(0x80>>(cnt&7)) ) {
+ start = st->start*transform[3] + transform[5];
+ width = st->width*transform[3];
+ for ( st2=basesc->hstem,bcnt=0; st2!=NULL; st2=st2->next, bcnt++ )
+ if ( st2->start == start && st2->width == width )
+ break;
+ if ( st2!=NULL )
+ (*newhm)[bcnt>>3] |= (0x80>>(bcnt&7));
+ }
+ }
+ for ( st2=basesc->hstem,hst_cnt=0; st2!=NULL; st2=st2->next, hst_cnt++ );
+
+ for ( st = subsc->vstem; st!=NULL; st=st->next, cnt++ ) {
+ if ( (*oldhm)[cnt>>3]&(0x80>>(cnt&7)) ) {
+ start = st->start*transform[0] + transform[4];
+ width = st->width*transform[0];
+ for ( st2=basesc->vstem,bcnt=hst_cnt; st2!=NULL; st2=st2->next, bcnt++ )
+ if ( st2->start == start && st2->width == width )
+ break;
+ if ( st2!=NULL )
+ (*newhm)[bcnt>>3] |= (0x80>>(bcnt&7));
+ }
+ }
+return( newhm );
+}
+
+SplinePointList *SPLCopyTranslatedHintMasks(SplinePointList *base,
+ SplineChar *basesc, SplineChar *subsc, BasePoint *trans ) {
+ SplinePointList *spl, *spl2, *head;
+ SplinePoint *spt, *spt2, *pfirst;
+ real transform[6];
+ Spline *s, *first;
+
+ head = SplinePointListCopy(base);
+
+ transform[0] = transform[3] = 1; transform[1] = transform[2] = 0;
+ transform[4] = trans->x; transform[5] = trans->y;
+
+ for ( spl = head, spl2=base; spl!=NULL; spl = spl->next, spl2 = spl2->next ) {
+ pfirst = NULL;
+ for ( spt = spl->first, spt2 = spl2->first ; spt!=pfirst; spt = spt->next->to, spt2 = spt2->next->to ) {
+ if ( pfirst==NULL ) pfirst = spt;
+ TransformPoint(spt,transform);
+ if ( spt2->hintmask ) {
+ chunkfree(spt->hintmask,sizeof(HintMask));
+ spt->hintmask = HintMaskTransform(spt2->hintmask,transform,basesc,subsc);
+ }
+ if ( spt->next==NULL )
+ break;
+ }
+ first = NULL;
+ for ( s = spl->first->next; s!=NULL && s!=first; s=s->to->next ) {
+ SplineRefigure(s);
+ if ( first==NULL ) first = s;
+ }
+ }
+return( head );
+}
+
+static SplinePointList *_SPLCopyTransformedHintMasks(SplineChar *subsc,int layer,
+ real transform[6], SplineChar *basesc ) {
+ SplinePointList *spl, *spl2, *head, *last=NULL, *cur, *base;
+ SplinePoint *spt, *spt2, *pfirst;
+ Spline *s, *first;
+ real trans[6];
+ RefChar *rf;
+
+ base = subsc->layers[layer].splines;
+ head = SplinePointListCopy(base);
+ if ( head!=NULL )
+ for ( last = head; last->next!=NULL; last=last->next );
+
+ for ( spl = head, spl2=base; spl!=NULL; spl = spl->next, spl2=spl2->next ) {
+ pfirst = NULL;
+ for ( spt = spl->first, spt2 = spl2->first ; spt!=pfirst; spt = spt->next->to, spt2 = spt2->next->to ) {
+ if ( pfirst==NULL ) pfirst = spt;
+ TransformPoint(spt,transform);
+ if ( spt2->hintmask ) {
+ chunkfree(spt->hintmask,sizeof(HintMask));
+ spt->hintmask = HintMaskTransform(spt2->hintmask,transform,basesc,subsc);
+ }
+ if ( spt->next==NULL )
+ break;
+ }
+ first = NULL;
+ for ( s = spl->first->next; s!=NULL && s!=first; s=s->to->next ) {
+ SplineRefigure(s);
+ if ( first==NULL ) first = s;
+ }
+ }
+ for ( rf=subsc->layers[layer].refs; rf!=NULL; rf=rf->next ) {
+ trans[0] = rf->transform[0]*transform[0] +
+ rf->transform[1]*transform[2];
+ trans[1] = rf->transform[0]*transform[1] +
+ rf->transform[1]*transform[3];
+ trans[2] = rf->transform[2]*transform[0] +
+ rf->transform[3]*transform[2];
+ trans[3] = rf->transform[2]*transform[1] +
+ rf->transform[3]*transform[3];
+ trans[4] = rf->transform[4]*transform[0] +
+ rf->transform[5]*transform[2] +
+ transform[4];
+ trans[5] = rf->transform[4]*transform[1] +
+ rf->transform[5]*transform[3] +
+ transform[5];
+ cur = _SPLCopyTransformedHintMasks(rf->sc,layer,trans,basesc);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ if ( cur!=NULL ) {
+ while ( cur->next!=NULL ) cur = cur->next;
+ last = cur;
+ }
+ }
+return( head );
+}
+
+SplinePointList *SPLCopyTransformedHintMasks(RefChar *r,
+ SplineChar *basesc, BasePoint *trans,int layer ) {
+ real transform[6];
+
+ memcpy(transform,r->transform,sizeof(transform));
+ transform[4] += trans->x; transform[5] += trans->y;
+return( _SPLCopyTransformedHintMasks(r->sc,layer,transform,basesc));
+}
+
+void SCMakeDependent(SplineChar *dependent,SplineChar *base) {
+ struct splinecharlist *dlist;
+
+ if ( dependent->searcherdummy )
+return;
+
+ for ( dlist=base->dependents; dlist!=NULL && dlist->sc!=dependent; dlist = dlist->next);
+ if ( dlist==NULL ) {
+ dlist = chunkalloc(sizeof(struct splinecharlist));
+ dlist->sc = dependent;
+ dlist->next = base->dependents;
+ base->dependents = dlist;
+ }
+}
+
+static void LayerToRefLayer(struct reflayer *rl,Layer *layer, real transform[6]) {
+ BrushCopy(&rl->fill_brush, &layer->fill_brush,transform);
+ PenCopy(&rl->stroke_pen, &layer->stroke_pen,transform);
+ rl->dofill = layer->dofill;
+ rl->dostroke = layer->dostroke;
+ rl->fillfirst = layer->fillfirst;
+}
+
+int RefLayerFindBaseLayerIndex(RefChar *rf, int layer) {
+ // Note that most of the logic below is copied and lightly modified from SCReinstanciateRefChar.
+ SplineChar *rsc = rf->sc;
+ int i = 0, j = 0, cnt = 0;
+ RefChar *subref;
+ for ( i=ly_fore; i<rsc->layer_cnt; ++i ) {
+ if ( rsc->layers[i].splines!=NULL) {
+ if (cnt == layer) return i;
+ ++cnt;
+ }
+ for ( subref=rsc->layers[i].refs; subref!=NULL; subref=subref->next ) {
+ for ( j=0; j<subref->layer_cnt; ++j ) if ( subref->layers[j].splines!=NULL ) {
+ if (cnt == layer) return i;
+ ++cnt;
+ }
+ }
+ }
+ return -1;
+}
+
+void RefCharFindBounds(RefChar *rf) {
+ int i;
+ SplineChar *rsc = rf->sc;
+ real extra=0,e;
+
+ memset(&rf->bb,'\0',sizeof(rf->bb));
+ rf->top.y = -1e10;
+ for ( i=0; i<rf->layer_cnt; ++i ) {
+ _SplineSetFindBounds(rf->layers[i].splines,&rf->bb);
+ _SplineSetFindTop(rf->layers[i].splines,&rf->top);
+ int baselayer = RefLayerFindBaseLayerIndex(rf, i);
+ if ( baselayer >= 0 && rsc->layers[baselayer].dostroke ) {
+ if ( rf->layers[i].stroke_pen.width!=WIDTH_INHERITED )
+ e = rf->layers[i].stroke_pen.width*rf->layers[i].stroke_pen.trans[0];
+ else
+ e = rf->layers[i].stroke_pen.trans[0];
+ if ( e>extra ) extra = e;
+ }
+ }
+ if ( rf->top.y < -65536 ) rf->top.y = rf->top.x = 0;
+ rf->bb.minx -= extra; rf->bb.miny -= extra;
+ rf->bb.maxx += extra; rf->bb.maxy += extra;
+}
+
+void SCReinstanciateRefChar(SplineChar *sc,RefChar *rf,int layer) {
+ SplinePointList *new, *last;
+ RefChar *refs;
+ int i,j;
+ SplineChar *rsc = rf->sc;
+ real extra=0,e;
+
+ for ( i=0; i<rf->layer_cnt; ++i ) {
+ SplinePointListsFree(rf->layers[i].splines);
+ GradientFree(rf->layers[i].fill_brush.gradient);
+ PatternFree(rf->layers[i].fill_brush.pattern);
+ GradientFree(rf->layers[i].stroke_pen.brush.gradient);
+ PatternFree(rf->layers[i].stroke_pen.brush.pattern);
+ }
+ free( rf->layers );
+ rf->layers = NULL;
+ rf->layer_cnt = 0;
+ if ( rsc==NULL )
+return;
+ /* Can be called before sc->parent is set, but only when reading a ttf */
+ /* file which won't be multilayer */
+ if ( sc->parent!=NULL && sc->parent->multilayer ) {
+ int cnt = 0;
+ RefChar *subref;
+ for ( i=ly_fore; i<rsc->layer_cnt; ++i ) {
+ if ( rsc->layers[i].splines!=NULL)
+ ++cnt;
+ for ( subref=rsc->layers[i].refs; subref!=NULL; subref=subref->next )
+ cnt += subref->layer_cnt;
+ }
+
+ rf->layer_cnt = cnt;
+ rf->layers = calloc(cnt,sizeof(struct reflayer));
+ cnt = 0;
+ for ( i=ly_fore; i<rsc->layer_cnt; ++i ) {
+ if ( rsc->layers[i].splines!=NULL ) {
+ rf->layers[cnt].splines =
+ SplinePointListTransform(
+ SplinePointListCopy(rsc->layers[i].splines),rf->transform,tpt_AllPoints);
+ LayerToRefLayer(&rf->layers[cnt],&rsc->layers[i],rf->transform);
+ ++cnt;
+ }
+ for ( subref=rsc->layers[i].refs; subref!=NULL; subref=subref->next ) {
+ for ( j=0; j<subref->layer_cnt; ++j ) if ( subref->layers[j].splines!=NULL ) {
+ rf->layers[cnt] = subref->layers[j];
+ rf->layers[cnt].splines =
+ SplinePointListTransform(
+ SplinePointListCopy(subref->layers[j].splines),rf->transform,tpt_AllPoints);
+ ++cnt;
+ }
+ }
+ }
+
+ memset(&rf->bb,'\0',sizeof(rf->bb));
+ rf->top.y = -1e10;
+ for ( i=0; i<rf->layer_cnt; ++i ) {
+ _SplineSetFindBounds(rf->layers[i].splines,&rf->bb);
+ _SplineSetFindTop(rf->layers[i].splines,&rf->top);
+ int baselayer = RefLayerFindBaseLayerIndex(rf, i);
+ if ( baselayer >= 0 && rsc->layers[baselayer].dostroke ) {
+ if ( rf->layers[i].stroke_pen.width!=WIDTH_INHERITED )
+ e = rf->layers[i].stroke_pen.width*rf->layers[i].stroke_pen.trans[0];
+ else
+ e = rf->layers[i].stroke_pen.trans[0];
+ if ( e>extra ) extra = e;
+ }
+ }
+ if ( rf->top.y < -65536 ) rf->top.y = rf->top.x = 0;
+ rf->bb.minx -= extra; rf->bb.miny -= extra;
+ rf->bb.maxx += extra; rf->bb.maxy += extra;
+ } else {
+ if ( rf->layer_cnt>0 ) {
+ SplinePointListsFree(rf->layers[0].splines);
+ rf->layers[0].splines = NULL;
+ }
+ rf->layers = calloc(1,sizeof(struct reflayer));
+ rf->layer_cnt = 1;
+ rf->layers[0].dofill = true;
+ new = SplinePointListTransform(SplinePointListCopy(rf->sc->layers[layer].splines),rf->transform,tpt_AllPoints);
+ rf->layers[0].splines = new;
+ last = NULL;
+ if ( new!=NULL )
+ for ( last = new; last->next!=NULL; last = last->next );
+ for ( refs = rf->sc->layers[layer].refs; refs!=NULL; refs = refs->next ) {
+ new = SplinePointListTransform(SplinePointListCopy(refs->layers[0].splines),rf->transform,tpt_AllPoints);
+ if ( last!=NULL )
+ last->next = new;
+ else
+ rf->layers[0].splines = new;
+ if ( new!=NULL )
+ for ( last = new; last->next!=NULL; last = last->next );
+ }
+ }
+ RefCharFindBounds(rf);
+}
+
+/* This returns all real solutions, even those out of bounds */
+/* I use -999999 as an error flag, since we're really only interested in */
+/* solns near 0 and 1 that should be ok. -1 is perhaps a little too close */
+/* Sigh. When solutions are near 0, the rounding errors are appalling. */
+int _CubicSolve(const Spline1D *sp,bigreal sought, extended ts[3]) {
+ extended d, xN, yN, delta2, temp, delta, h, t2, t3, theta;
+ extended sa=sp->a, sb=sp->b, sc=sp->c, sd=sp->d-sought;
+ int i=0;
+
+ ts[0] = ts[1] = ts[2] = -999999;
+ if ( sd==0 && sa!=0 ) {
+ /* one of the roots is 0, the other two are the soln of a quadratic */
+ ts[0] = 0;
+ if ( sc==0 ) {
+ ts[1] = -sb/(extended) sa; /* two zero roots */
+ } else {
+ temp = sb*(extended) sb-4*(extended) sa*sc;
+ if ( RealNear(temp,0))
+ ts[1] = -sb/(2*(extended) sa);
+ else if ( temp>=0 ) {
+ temp = sqrt(temp);
+ ts[1] = (-sb+temp)/(2*(extended) sa);
+ ts[2] = (-sb-temp)/(2*(extended) sa);
+ }
+ }
+ } else if ( sa!=0 ) {
+ /* http://www.m-a.org.uk/eb/mg/mg077ch.pdf */
+ /* this nifty solution to the cubic neatly avoids complex arithmatic */
+ xN = -sb/(3*(extended) sa);
+ yN = ((sa*xN + sb)*xN+sc)*xN + sd;
+
+ delta2 = (sb*(extended) sb-3*(extended) sa*sc)/(9*(extended) sa*sa);
+ /*if ( RealWithin(delta2,0,.00000001) ) delta2 = 0;*/
+
+ /* the descriminant is yN^2-h^2, but delta might be <0 so avoid using h */
+ d = yN*yN - 4*sa*sa*delta2*delta2*delta2;
+ if ( ((yN>.01 || yN<-.01) && RealNear(d/yN,0)) || ((yN<=.01 && yN>=-.01) && RealNear(d,0)) )
+ d = 0;
+ if ( d>0 ) {
+ temp = sqrt(d);
+ t2 = (-yN-temp)/(2*sa);
+ t2 = (t2==0) ? 0 : (t2<0) ? -pow(-t2,1./3.) : pow(t2,1./3.);
+ t3 = (-yN+temp)/(2*sa);
+ t3 = t3==0 ? 0 : (t3<0) ? -pow(-t3,1./3.) : pow(t3,1./3.);
+ ts[0] = xN + t2 + t3;
+ } else if ( d<0 ) {
+ if ( delta2>=0 ) {
+ delta = sqrt(delta2);
+ h = 2*sa*delta2*delta;
+ temp = -yN/h;
+ if ( temp>=-1.0001 && temp<=1.0001 ) {
+ if ( temp<-1 ) temp = -1; else if ( temp>1 ) temp = 1;
+ theta = acos(temp)/3;
+ ts[i++] = xN+2*delta*cos(theta);
+ ts[i++] = xN+2*delta*cos(2.0943951+theta); /* 2*pi/3 */
+ ts[i++] = xN+2*delta*cos(4.1887902+theta); /* 4*pi/3 */
+ }
+ }
+ } else if ( /* d==0 && */ delta2!=0 ) {
+ delta = yN/(2*sa);
+ delta = delta==0 ? 0 : delta>0 ? pow(delta,1./3.) : -pow(-delta,1./3.);
+ ts[i++] = xN + delta; /* this root twice, but that's irrelevant to me */
+ ts[i++] = xN - 2*delta;
+ } else if ( /* d==0 && */ delta2==0 ) {
+ if ( xN>=-0.0001 && xN<=1.0001 ) ts[0] = xN;
+ }
+ } else if ( sb!=0 ) {
+ extended d = sc*(extended) sc-4*(extended) sb*sd;
+ if ( d<0 && RealNear(d,0)) d=0;
+ if ( d<0 )
+return(false); /* All roots imaginary */
+ d = sqrt(d);
+ ts[0] = (-sc-d)/(2*(extended) sb);
+ ts[1] = (-sc+d)/(2*(extended) sb);
+ } else if ( sc!=0 ) {
+ ts[0] = -sd/(extended) sc;
+ } else {
+ /* If it's a point then either everything is a solution, or nothing */
+ }
+return( ts[0]!=-999999 );
+}
+
+int CubicSolve(const Spline1D *sp,bigreal sought, extended ts[3]) {
+ extended t;
+ extended ts2[3];
+ int i,j;
+ /* This routine gives us all solutions between [0,1] with -1 as an error flag */
+ /* http://mathforum.org/dr.math/faq/faq.cubic.equations.html */
+
+ ts[0] = ts[1] = ts[2] = -1;
+ if ( !_CubicSolve(sp,sought,ts2)) {
+return( false );
+ }
+
+ for ( i=j=0; i<3; ++i ) {
+ if ( ts2[i]>-.0001 && ts2[i]<1.0001 ) {
+ if ( ts2[i]<0 ) ts[j++] = 0;
+ else if ( ts2[i]>1 ) ts[j++] = 1;
+ else
+ ts[j++] = ts2[i];
+ }
+ }
+ if ( j==0 )
+return( false );
+
+ if ( ts[0]>ts[2] && ts[2]!=-1 ) {
+ t = ts[0]; ts[0] = ts[2]; ts[2] = t;
+ }
+ if ( ts[0]>ts[1] && ts[1]!=-1 ) {
+ t = ts[0]; ts[0] = ts[1]; ts[1] = t;
+ }
+ if ( ts[1]>ts[2] && ts[2]!=-1 ) {
+ t = ts[1]; ts[1] = ts[2]; ts[2] = t;
+ }
+return( true );
+}
+
+/* An IEEE double has 52 bits of precision. So one unit of rounding error will be */
+/* the number divided by 2^51 */
+# define D_RE_Factor (1024.0*1024.0*1024.0*1024.0*1024.0*2.0)
+/* But that's not going to work near 0, so, since the t values we care about */
+/* are [0,1], let's use 1.0/D_RE_Factor */
+
+extended IterateSplineSolve(const Spline1D *sp, extended tmin, extended tmax,
+ extended sought) {
+ extended t, low, high, test;
+ Spline1D temp;
+ /* Now the closed form CubicSolver can have rounding errors so if we know */
+ /* the spline to be monotonic, an iterative approach is more accurate */
+
+ if ( tmin>tmax ) {
+ t=tmin; tmin=tmax; tmax=t;
+ }
+
+ temp = *sp;
+ temp.d -= sought;
+
+ if ( temp.a==0 && temp.b==0 && temp.c!=0 ) {
+ t = -temp.d/(extended) temp.c;
+ if ( t<tmin || t>tmax )
+return( -1 );
+return( t );
+ }
+
+ low = ((temp.a*tmin+temp.b)*tmin+temp.c)*tmin+temp.d;
+ high = ((temp.a*tmax+temp.b)*tmax+temp.c)*tmax+temp.d;
+ if ( low==0 )
+return(tmin);
+ if ( high==0 )
+return(tmax);
+ if (( low<0 && high>0 ) ||
+ ( low>0 && high<0 )) {
+
+ for (;;) {
+ t = (tmax+tmin)/2;
+ if ( t==tmax || t==tmin )
+return( t );
+ test = ((temp.a*t+temp.b)*t+temp.c)*t+temp.d;
+ if ( test==0 ) /* someone complained that this test relied on exact arithmetic. In fact this test will almost never be hit, the real exit test is the line above, when tmin/tmax are so close that there is no space between them in the floating representation */
+return( t );
+ if ( (low<0 && test<0) || (low>0 && test>0) )
+ tmin=t;
+ else
+ tmax = t;
+ }
+ } else if ( low<.0001 && low>-.0001 )
+return( tmin ); /* Rounding errors */
+ else if ( high<.0001 && high>-.0001 )
+return( tmax );
+
+return( -1 );
+}
+
+extended IterateSplineSolveFixup(const Spline1D *sp, extended tmin, extended tmax,
+ extended sought) {
+ // Search between tmin and tmax for a t-value at which the spline outputs sought.
+ extended t;
+ bigreal factor;
+ extended val, valp, valm;
+
+ if ( tmin>tmax ) {
+ t=tmin; tmin=tmax; tmax=t;
+ }
+
+ t = IterateSplineSolve(sp,tmin,tmax,sought);
+
+ if ( t==-1 )
+return( -1 );
+
+ if ((val = (((sp->a*t+sp->b)*t+sp->c)*t+sp->d) - sought)<0 )
+ val=-val;
+ if ( val!=0 ) {
+ for ( factor=1024.0*1024.0*1024.0*1024.0*1024.0; factor>.5; factor/=2.0 ) {
+ extended tp = t + (factor*t)/D_RE_Factor;
+ extended tm = t - (factor*t)/D_RE_Factor;
+ if ( tp>tmax ) tp=tmax;
+ if ( tm<tmin ) tm=tmin;
+ if ( (valp = (((sp->a*tp+sp->b)*tp+sp->c)*tp+sp->d) - sought)<0 )
+ valp = -valp;
+ if ( (valm = (((sp->a*tm+sp->b)*tm+sp->c)*tm+sp->d) - sought)<0 )
+ valm = -valm;
+ if ( valp<val && valp<valm ) {
+ t = tp;
+ val = valp;
+ } else if ( valm<val ) {
+ t = tm;
+ val = valm;
+ }
+ }
+ }
+ if ( t==0 && !Within16RoundingErrors(sought,sought+val))
+return( -1 );
+ /* if t!=0 then we we get the chance of far worse rounding errors */
+ else if ( t==tmax || t==tmin ) {
+ if ( Within16RoundingErrors(sought,sought+val) ||
+ Within16RoundingErrors(sp->a,sp->a+val) ||
+ Within16RoundingErrors(sp->b,sp->b+val) ||
+ Within16RoundingErrors(sp->c,sp->c+val) ||
+ Within16RoundingErrors(sp->c,sp->c+val) ||
+ Within16RoundingErrors(sp->d,sp->d+val))
+return( t );
+ else
+return( -1 );
+ }
+
+ if ( t>=tmin && t<=tmax )
+return( t );
+
+ /* I don't think this can happen... */
+return( -1 );
+}
+
+double CheckExtremaForSingleBitErrors(const Spline1D *sp, double t, double othert) {
+ double u1, um1;
+ double slope, slope1, slopem1;
+ int err;
+ double diff, factor;
+
+ if ( t<0 || t>1 )
+return( t );
+
+ factor = t*0x40000/D_RE_Factor;
+ if ( (diff = t-othert)<0 ) diff= -diff;
+ if ( factor>diff/4 && diff!=0 ) /* This little check is to insure we don't skip beyond the well of this extremum into the next */
+ factor = diff/4;
+
+ slope = (3*(double) sp->a*t+2*sp->b)*t+sp->c;
+ if ( slope<0 ) slope = -slope;
+
+ for ( err = 0x40000; err!=0; err>>=1 ) {
+ u1 = t+factor;
+ slope1 = (3*(double) sp->a*u1+2*sp->b)*u1+sp->c;
+ if ( slope1<0 ) slope1 = -slope1;
+
+ um1 = t-factor;
+ slopem1 = (3*(double) sp->a*um1+2*sp->b)*um1+sp->c;
+ if ( slopem1<0 ) slopem1 = -slopem1;
+
+ if ( slope1<slope && slope1<=slopem1 && u1<=1.0 ) {
+ t = u1;
+ } else if ( slopem1<slope && slopem1<=slope1 && um1>=0.0 ) {
+ t = um1;
+ }
+ factor /= 2.0;
+ }
+ /* that seems as good as it gets */
+
+return( t );
+}
+
+void SplineFindExtrema(const Spline1D *sp, extended *_t1, extended *_t2 ) {
+ extended t1= -1, t2= -1;
+ extended b2_fourac;
+
+ /* Find the extreme points on the curve */
+ /* Set to -1 if there are none or if they are outside the range [0,1] */
+ /* Order them so that t1<t2 */
+ /* If only one valid extremum it will be t1 */
+ /* (Does not check the end points unless they have derivative==0) */
+ /* (Does not check to see if d/dt==0 points are inflection points (rather than extrema) */
+ if ( sp->a!=0 ) {
+ /* cubic, possibly 2 extrema (possibly none) */
+ b2_fourac = 4*(extended) sp->b*sp->b - 12*(extended) sp->a*sp->c;
+ if ( b2_fourac>=0 ) {
+ b2_fourac = sqrt(b2_fourac);
+ t1 = (-2*sp->b - b2_fourac) / (6*sp->a);
+ t2 = (-2*sp->b + b2_fourac) / (6*sp->a);
+ t1 = CheckExtremaForSingleBitErrors(sp,t1,t2);
+ t2 = CheckExtremaForSingleBitErrors(sp,t2,t1);
+ if ( t1>t2 ) { extended temp = t1; t1 = t2; t2 = temp; }
+ else if ( t1==t2 ) t2 = -1;
+ if ( RealNear(t1,0)) t1=0; else if ( RealNear(t1,1)) t1=1;
+ if ( RealNear(t2,0)) t2=0; else if ( RealNear(t2,1)) t2=1;
+ if ( t2<=0 || t2>=1 ) t2 = -1;
+ if ( t1<=0 || t1>=1 ) { t1 = t2; t2 = -1; }
+ }
+ } else if ( sp->b!=0 ) {
+ /* Quadratic, at most one extremum */
+ t1 = -sp->c/(2.0*(extended) sp->b);
+ if ( t1<=0 || t1>=1 ) t1 = -1;
+ } else /*if ( sp->c!=0 )*/ {
+ /* linear, no extrema */
+ }
+ *_t1 = t1; *_t2 = t2;
+}
+
+bigreal SplineCurvature(Spline *s, bigreal t) {
+ /* Kappa = (x'y'' - y'x'') / (x'^2 + y'^2)^(3/2) */
+ bigreal dxdt, dydt, d2xdt2, d2ydt2, denom, numer;
+
+ if ( s==NULL )
+return( CURVATURE_ERROR );
+
+ dxdt = (3*s->splines[0].a*t+2*s->splines[0].b)*t+s->splines[0].c;
+ dydt = (3*s->splines[1].a*t+2*s->splines[1].b)*t+s->splines[1].c;
+ d2xdt2 = 6*s->splines[0].a*t + 2*s->splines[0].b;
+ d2ydt2 = 6*s->splines[1].a*t + 2*s->splines[1].b;
+ denom = pow( dxdt*dxdt + dydt*dydt, 3.0/2.0 );
+ numer = dxdt*d2ydt2 - dydt*d2xdt2;
+
+ if ( numer==0 )
+return( 0 );
+ if ( denom==0 )
+return( CURVATURE_ERROR );
+
+return( numer/denom );
+}
+
+int Spline2DFindExtrema(const Spline *sp, extended extrema[4] ) {
+ int i,j;
+ BasePoint last, cur, mid;
+
+ /* If the control points are at the end-points then this (1D) spline is */
+ /* basically a line. But rounding errors can give us very faint extrema */
+ /* if we look for them */
+ if ( !Spline1DCantExtremeX(sp) )
+ SplineFindExtrema(&sp->splines[0],&extrema[0],&extrema[1]);
+ else
+ extrema[0] = extrema[1] = -1;
+ if ( !Spline1DCantExtremeY(sp) )
+ SplineFindExtrema(&sp->splines[1],&extrema[2],&extrema[3]);
+ else
+ extrema[2] = extrema[3] = -1;
+
+ for ( i=0; i<3; ++i ) for ( j=i+1; j<4; ++j ) {
+ if ( (extrema[i]==-1 && extrema[j]!=-1) || (extrema[i]>extrema[j] && extrema[j]!=-1) ) {
+ extended temp = extrema[i];
+ extrema[i] = extrema[j];
+ extrema[j] = temp;
+ }
+ }
+ for ( i=j=0; i<3 && extrema[i]!=-1; ++i ) {
+ if ( extrema[i]==extrema[i+1] ) {
+ for ( j=i+1; j<3; ++j )
+ extrema[j] = extrema[j+1];
+ extrema[3] = -1;
+ }
+ }
+
+ /* Extrema which are too close together are not interesting */
+ last = sp->from->me;
+ for ( i=0; i<4 && extrema[i]!=-1; ++i ) {
+ cur.x = ((sp->splines[0].a*extrema[i]+sp->splines[0].b)*extrema[i]+
+ sp->splines[0].c)*extrema[i]+sp->splines[0].d;
+ cur.y = ((sp->splines[1].a*extrema[i]+sp->splines[1].b)*extrema[i]+
+ sp->splines[1].c)*extrema[i]+sp->splines[1].d;
+ mid.x = (last.x+cur.x)/2; mid.y = (last.y+cur.y)/2;
+ if ( (mid.x==last.x || mid.x==cur.x) &&
+ (mid.y==last.y || mid.y==cur.y)) {
+ for ( j=i; j<3; ++j )
+ extrema[j] = extrema[j+1];
+ extrema[3] = -1;
+ --i;
+ } else
+ last = cur;
+ }
+ if ( extrema[0]!=-1 ) {
+ mid.x = (last.x+sp->to->me.x)/2; mid.y = (last.y+sp->to->me.y)/2;
+ if ( (mid.x==last.x || mid.x==cur.x) &&
+ (mid.y==last.y || mid.y==cur.y))
+ extrema[i-1] = -1;
+ }
+ for ( i=0; i<4 && extrema[i]!=-1; ++i );
+ if ( i!=0 ) {
+ cur = sp->to->me;
+ mid.x = (last.x+cur.x)/2; mid.y = (last.y+cur.y)/2;
+ if ( (mid.x==last.x || mid.x==cur.x) &&
+ (mid.y==last.y || mid.y==cur.y))
+ extrema[--i] = -1;
+ }
+
+return( i );
+}
+
+int Spline2DFindPointsOfInflection(const Spline *sp, extended poi[2] ) {
+ int cnt=0;
+ extended a, b, c, b2_fourac, t;
+ /* A POI happens when d2 y/dx2 is zero. This is not the same as d2y/dt2 / d2x/dt2 */
+ /* d2 y/dx^2 = d/dt ( dy/dt / dx/dt ) / dx/dt */
+ /* = ( (dx/dt) * d2 y/dt2 - ((dy/dt) * d2 x/dt2) )/ (dx/dt)^3 */
+ /* (3ax*t^2+2bx*t+cx) * (6ay*t+2by) - (3ay*t^2+2by*t+cy) * (6ax*t+2bx) == 0 */
+ /* (3ax*t^2+2bx*t+cx) * (3ay*t+by) - (3ay*t^2+2by*t+cy) * (3ax*t+bx) == 0 */
+ /* 9*ax*ay*t^3 + (3ax*by+6bx*ay)*t^2 + (2bx*by+3cx*ay)*t + cx*by */
+ /* -(9*ax*ay*t^3 + (3ay*bx+6by*ax)*t^2 + (2by*bx+3cy*ax)*t + cy*bx)==0 */
+ /* 3*(ax*by-ay*bx)*t^2 + 3*(cx*ay-cy*ax)*t+ (cx*by-cy*bx) == 0 */
+
+ a = 3*((extended) sp->splines[1].a*sp->splines[0].b-(extended) sp->splines[0].a*sp->splines[1].b);
+ b = 3*((extended) sp->splines[0].c*sp->splines[1].a - (extended) sp->splines[1].c*sp->splines[0].a);
+ c = (extended) sp->splines[0].c*sp->splines[1].b-(extended) sp->splines[1].c*sp->splines[0].b;
+ if ( !RealNear(a,0) ) {
+ b2_fourac = b*b - 4*a*c;
+ poi[0] = poi[1] = -1;
+ if ( b2_fourac<0 )
+return( 0 );
+ b2_fourac = sqrt( b2_fourac );
+ t = (-b+b2_fourac)/(2*a);
+ if ( t>=0 && t<=1.0 )
+ poi[cnt++] = t;
+ t = (-b-b2_fourac)/(2*a);
+ if ( t>=0 && t<=1.0 ) {
+ if ( cnt==1 && poi[0]>t ) {
+ poi[1] = poi[0];
+ poi[0] = t;
+ ++cnt;
+ } else
+ poi[cnt++] = t;
+ }
+ } else if ( !RealNear(b,0) ) {
+ t = -c/b;
+ if ( t>=0 && t<=1.0 )
+ poi[cnt++] = t;
+ }
+ if ( cnt<2 )
+ poi[cnt] = -1;
+
+return( cnt );
+}
+
+/* Ok, if the above routine finds an extremum that less than 1 unit */
+/* from an endpoint or another extremum, then many things are */
+/* just going to skip over it, and other things will be confused by this */
+/* so just remove it. It should be so close the difference won't matter */
+void SplineRemoveExtremaTooClose(Spline1D *sp, extended *_t1, extended *_t2 ) {
+ extended last, test;
+ extended t1= *_t1, t2 = *_t2;
+
+ if ( t1>t2 && t2!=-1 ) {
+ t1 = t2;
+ t2 = *_t1;
+ }
+ last = sp->d;
+ if ( t1!=-1 ) {
+ test = ((sp->a*t1+sp->b)*t1+sp->c)*t1+sp->d;
+ if ( (test-last)*(test-last)<1 )
+ t1 = -1;
+ else
+ last = test;
+ }
+ if ( t2!=-1 ) {
+ test = ((sp->a*t2+sp->b)*t2+sp->c)*t2+sp->d;
+ if ( (test-last)*(test-last)<1 )
+ t2 = -1;
+ else
+ last = test;
+ }
+ test = sp->a+sp->b+sp->c+sp->d;
+ if ( (test-last)*(test-last)<1 ) {
+ if ( t2!=-1 )
+ t2 = -1;
+ else if ( t1!=-1 )
+ t1 = -1;
+ else {
+ /* Well we should just remove the whole spline? */
+ ;
+ }
+ }
+ *_t1 = t1; *_t2 = t2;
+}
+
+int IntersectLines(BasePoint *inter,
+ BasePoint *line1_1, BasePoint *line1_2,
+ BasePoint *line2_1, BasePoint *line2_2) {
+ // A lot of functions call this with the same address as an input and the output.
+ // In order to avoid unexpected behavior, we delay writing to the output until the end.
+ bigreal s1, s2;
+ BasePoint _output;
+ BasePoint * output = &_output;
+ if ( line1_1->x == line1_2->x ) {
+ // Line 1 is vertical.
+ output->x = line1_1->x;
+ if ( line2_1->x == line2_2->x ) {
+ // Line 2 is vertical.
+ if ( line2_1->x!=line1_1->x )
+ return( false ); /* Parallel vertical lines */
+ output->y = (line1_1->y+line2_1->y)/2;
+ } else {
+ output->y = line2_1->y + (output->x-line2_1->x) * (line2_2->y - line2_1->y)/(line2_2->x - line2_1->x);
+ }
+ *inter = *output;
+ return( true );
+ } else if ( line2_1->x == line2_2->x ) {
+ // Line 2 is vertical, but we know that line 1 is not.
+ output->x = line2_1->x;
+ output->y = line1_1->y + (output->x-line1_1->x) * (line1_2->y - line1_1->y)/(line1_2->x - line1_1->x);
+ *inter = *output;
+ return( true );
+ } else {
+ // Both lines are oblique.
+ s1 = (line1_2->y - line1_1->y)/(line1_2->x - line1_1->x);
+ s2 = (line2_2->y - line2_1->y)/(line2_2->x - line2_1->x);
+ if ( RealNear(s1,s2)) {
+ if ( !RealNear(line1_1->y + (line2_1->x-line1_1->x) * s1,line2_1->y))
+ return( false );
+ output->x = (line1_2->x+line2_2->x)/2;
+ output->y = (line1_2->y+line2_2->y)/2;
+ } else {
+ output->x = (s1*line1_1->x - s2*line2_1->x - line1_1->y + line2_1->y)/(s1-s2);
+ output->y = line1_1->y + (output->x-line1_1->x) * s1;
+ }
+ *inter = *output;
+ return( true );
+ }
+}
+
+int IntersectLinesClip(BasePoint *inter,
+ BasePoint *line1_1, BasePoint *line1_2,
+ BasePoint *line2_1, BasePoint *line2_2) {
+ BasePoint old = *inter, unit;
+ bigreal len, val;
+
+ if ( !IntersectLines(inter,line1_1,line1_2,line2_1,line2_2))
+return( false );
+ else {
+ unit.x = line2_2->x-line1_2->x;
+ unit.y = line2_2->y-line1_2->y;
+ len = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( len==0 )
+return( false );
+ else {
+ unit.x /= len; unit.y /= len;
+ val = unit.x*(inter->x-line1_2->x) + unit.y*(inter->y-line1_2->y);
+ if ( val<=0 || val>=len ) {
+ *inter = old;
+return( false );
+ }
+ }
+ }
+return( true );
+}
+
+static int AddPoint(extended x,extended y,extended t,extended s,BasePoint *pts,
+ extended t1s[3],extended t2s[3], int soln) {
+ int i;
+
+ for ( i=0; i<soln; ++i )
+ if ( x==pts[i].x && y==pts[i].y )
+return( soln );
+ if ( soln>=9 )
+ IError( "Too many solutions!\n" );
+ t1s[soln] = t;
+ t2s[soln] = s;
+ pts[soln].x = x;
+ pts[soln].y = y;
+return( soln+1 );
+}
+
+static void IterateSolve(const Spline1D *sp,extended ts[3]) {
+ /* The closed form solution has too many rounding errors for my taste... */
+ int i,j;
+
+ ts[0] = ts[1] = ts[2] = -1;
+
+ if ( sp->a!=0 ) {
+ extended e[4];
+ e[0] = 0; e[1] = e[2] = e[3] = 1.0;
+ SplineFindExtrema(sp,&e[1],&e[2]);
+ if ( e[1]==-1 ) e[1] = 1;
+ if ( e[2]==-1 ) e[2] = 1;
+ for ( i=j=0; i<3; ++i ) {
+ ts[j] = IterateSplineSolve(sp,e[i],e[i+1],0);
+ if ( ts[j]!=-1 ) ++j;
+ if ( e[i+1]==1.0 )
+ break;
+ }
+ } else if ( sp->b!=0 ) {
+ extended b2_4ac = sp->c*(extended) sp->c - 4*sp->b*(extended) sp->d;
+ if ( b2_4ac>=0 ) {
+ b2_4ac = sqrt(b2_4ac);
+ ts[0] = (-sp->c-b2_4ac)/(2*sp->b);
+ ts[1] = (-sp->c+b2_4ac)/(2*sp->b);
+ if ( ts[0]>ts[1] ) { bigreal t = ts[0]; ts[0] = ts[1]; ts[1] = t; }
+ }
+ } else if ( sp->c!=0 ) {
+ ts[0] = -sp->d/(extended) sp->c;
+ } else {
+ /* No solutions, or all solutions */
+ ;
+ }
+
+ for ( i=j=0; i<3; ++i )
+ if ( ts[i]>=0 && ts[i]<=1 )
+ ts[j++] = ts[i];
+ for ( i=0; i<j-1; ++i )
+ if ( ts[i]+.0000001>ts[i+1]) {
+ ts[i] = (ts[i]+ts[i+1])/2;
+ --j;
+ for ( ++i; i<j; ++i )
+ ts[i] = ts[i+1];
+ }
+ if ( j!=0 ) {
+ if ( ts[0]!=0 ) {
+ extended d0 = sp->d;
+ extended dt = ((sp->a*ts[0]+sp->b)*ts[0]+sp->c)*ts[0]+sp->d;
+ if ( d0<0 ) d0=-d0;
+ if ( dt<0 ) dt=-dt;
+ if ( d0<dt )
+ ts[0] = 0;
+ }
+ if ( ts[j-1]!=1.0 ) {
+ extended d1 = sp->a+(extended) sp->b+sp->c+sp->d;
+ extended dt = ((sp->a*ts[j-1]+sp->b)*ts[j-1]+sp->c)*ts[j-1]+sp->d;
+ if ( d1<0 ) d1=-d1;
+ if ( dt<0 ) dt=-dt;
+ if ( d1<dt )
+ ts[j-1] = 1;
+ }
+ }
+ for ( ; j<3; ++j )
+ ts[j] = -1;
+}
+
+static extended ISolveWithin(const Spline *spline,int major,
+ extended val,extended tlow, extended thigh) {
+ Spline1D temp;
+ extended ts[3];
+ const Spline1D *sp = &spline->splines[major];
+ int i;
+
+ /* Calculation for t=1 can yield rounding errors. Insist on the endpoints */
+ /* (the Spline1D is not a perfectly accurate description of the spline, */
+ /* but the control points are right -- at least that's my defn.) */
+ if ( tlow==0 && val==(&spline->from->me.x)[major] )
+return( 0 );
+ if ( thigh==1.0 && val==(&spline->to->me.x)[major] )
+return( 1.0 );
+
+ temp = *sp;
+ temp.d -= val;
+ IterateSolve(&temp,ts);
+ if ( tlow<thigh ) {
+ for ( i=0; i<3; ++i )
+ if ( ts[i]>=tlow && ts[i]<=thigh )
+return( ts[i] );
+ for ( i=0; i<3; ++i ) {
+ if ( ts[i]>=tlow-1./1024. && ts[i]<=tlow )
+return( tlow );
+ if ( ts[i]>=thigh && ts[i]<=thigh+1./1024 )
+return( thigh );
+ }
+ } else {
+ for ( i=0; i<3; ++i )
+ if ( ts[i]>=thigh && ts[i]<=tlow )
+return( ts[i] );
+ for ( i=0; i<3; ++i ) {
+ if ( ts[i]>=thigh-1./1024. && ts[i]<=thigh )
+return( thigh );
+ if ( ts[i]>=tlow && ts[i]<=tlow+1./1024 )
+return( tlow );
+ }
+ }
+return( -1 );
+}
+
+static int ICAddInter(int cnt,BasePoint *foundpos,extended *foundt1,extended *foundt2,
+ const Spline *s1,const Spline *s2,extended t1,extended t2, int maxcnt) {
+
+ if ( cnt>=maxcnt )
+return( cnt );
+
+ foundt1[cnt] = t1;
+ foundt2[cnt] = t2;
+ foundpos[cnt].x = ((s1->splines[0].a*t1+s1->splines[0].b)*t1+
+ s1->splines[0].c)*t1+s1->splines[0].d;
+ foundpos[cnt].y = ((s1->splines[1].a*t1+s1->splines[1].b)*t1+
+ s1->splines[1].c)*t1+s1->splines[1].d;
+return( cnt+1 );
+}
+
+static int ICBinarySearch(int cnt,BasePoint *foundpos,extended *foundt1,extended *foundt2,
+ int other,
+ const Spline *s1,const Spline *s2,extended t1low,extended t1high,extended t2low,extended t2high,
+ int maxcnt) {
+ int major;
+ extended t1, t2;
+ extended o1o, o2o, o1n, o2n, m;
+
+ major = !other;
+ o1o = ((s1->splines[other].a*t1low+s1->splines[other].b)*t1low+
+ s1->splines[other].c)*t1low+s1->splines[other].d;
+ o2o = ((s2->splines[other].a*t2low+s2->splines[other].b)*t2low+
+ s2->splines[other].c)*t2low+s2->splines[other].d;
+ for (;;) {
+ t1 = (t1low+t1high)/2;
+ m = ((s1->splines[major].a*t1+s1->splines[major].b)*t1+
+ s1->splines[major].c)*t1+s1->splines[major].d;
+ t2 = ISolveWithin(s2,major,m,t2low,t2high);
+ if ( t2==-1 )
+return( cnt );
+
+ o1n = ((s1->splines[other].a*t1+s1->splines[other].b)*t1+
+ s1->splines[other].c)*t1+s1->splines[other].d;
+ o2n = ((s2->splines[other].a*t2+s2->splines[other].b)*t2+
+ s2->splines[other].c)*t2+s2->splines[other].d;
+ if (( o1n-o2n<.001 && o1n-o2n>-.001) ||
+ (t1-t1low<.0001 && t1-t1low>-.0001))
+return( ICAddInter(cnt,foundpos,foundt1,foundt2,s1,s2,t1,t2,maxcnt));
+ if ( (o1o>o2o && o1n<o2n) || (o1o<o2o && o1n>o2n)) {
+ t1high = t1;
+ t2high = t2;
+ } else {
+ t1low = t1;
+ t2low = t2;
+ }
+ }
+}
+
+static int CubicsIntersect(const Spline *s1,extended lowt1,extended hight1,BasePoint *min1,BasePoint *max1,
+ const Spline *s2,extended lowt2,extended hight2,BasePoint *min2,BasePoint *max2,
+ BasePoint *foundpos,extended *foundt1,extended *foundt2,
+ int maxcnt) {
+ int major, other;
+ BasePoint max, min;
+ extended t1max, t1min, t2max, t2min, t1, t2, t1diff, oldt2;
+ extended o1o, o2o, o1n, o2n, m;
+ int cnt=0;
+
+ if ( (min.x = min1->x)<min2->x ) min.x = min2->x;
+ if ( (min.y = min1->y)<min2->y ) min.y = min2->y;
+ if ( (max.x = max1->x)>max2->x ) max.x = max2->x;
+ if ( (max.y = max1->y)>max2->y ) max.y = max2->y;
+ if ( max.x<min.x || max.y<min.y )
+return( 0 );
+ if ( max.x-min.x > max.y-min.y )
+ major = 0;
+ else
+ major = 1;
+ other = 1-major;
+
+ t1max = ISolveWithin(s1,major,(&max.x)[major],lowt1,hight1);
+ t1min = ISolveWithin(s1,major,(&min.x)[major],lowt1,hight1);
+ t2max = ISolveWithin(s2,major,(&max.x)[major],lowt2,hight2);
+ t2min = ISolveWithin(s2,major,(&min.x)[major],lowt2,hight2);
+ if ( t1max==-1 || t1min==-1 || t2max==-1 || t2min==-1 )
+return( 0 );
+ t1diff = (t1max-t1min)/64.0;
+ if (RealNear(t1diff,0))
+return( 0 );
+
+ t1 = t1min; t2 = t2min;
+ o1o = t1==0 ? (&s1->from->me.x)[other] :
+ t1==1.0 ? (&s1->to->me.x)[other] :
+ ((s1->splines[other].a*t1+s1->splines[other].b)*t1+
+ s1->splines[other].c)*t1+s1->splines[other].d;
+ o2o = t2==0 ? (&s2->from->me.x)[other] :
+ t2==1.0 ? (&s2->to->me.x)[other] :
+ ((s2->splines[other].a*t2+s2->splines[other].b)*t2+
+ s2->splines[other].c)*t2+s2->splines[other].d;
+ if ( o1o==o2o )
+ cnt = ICAddInter(cnt,foundpos,foundt1,foundt2,s1,s2,t1,t2,maxcnt);
+ for (;;) {
+ if ( cnt>=maxcnt )
+ break;
+ t1 += t1diff;
+ if (( t1max>t1min && t1>t1max ) || (t1max<t1min && t1<t1max) || cnt>3 )
+ break;
+ m = t1==0 ? (&s1->from->me.x)[major] :
+ t1==1.0 ? (&s1->to->me.x)[major] :
+ ((s1->splines[major].a*t1+s1->splines[major].b)*t1+
+ s1->splines[major].c)*t1+s1->splines[major].d;
+ oldt2 = t2;
+ t2 = ISolveWithin(s2,major,m,lowt2,hight2);
+ if ( t2==-1 )
+ continue;
+
+ o1n = t1==0 ? (&s1->from->me.x)[other] :
+ t1==1.0 ? (&s1->to->me.x)[other] :
+ ((s1->splines[other].a*t1+s1->splines[other].b)*t1+
+ s1->splines[other].c)*t1+s1->splines[other].d;
+ o2n = t2==0 ? (&s2->from->me.x)[other] :
+ t2==1.0 ? (&s2->to->me.x)[other] :
+ ((s2->splines[other].a*t2+s2->splines[other].b)*t2+
+ s2->splines[other].c)*t2+s2->splines[other].d;
+ if ( o1n==o2n )
+ cnt = ICAddInter(cnt,foundpos,foundt1,foundt2,s1,s2,t1,t2,maxcnt);
+ if ( (o1o>o2o && o1n<o2n) || (o1o<o2o && o1n>o2n))
+ cnt = ICBinarySearch(cnt,foundpos,foundt1,foundt2,other,
+ s1,s2,t1-t1diff,t1,oldt2,t2,maxcnt);
+ o1o = o1n; o2o = o2n;
+ }
+return( cnt );
+}
+
+static int Closer(const Spline *s1,const Spline *s2,extended t1,extended t2,extended t1p,extended t2p) {
+ bigreal x1 = ((s1->splines[0].a*t1+s1->splines[0].b)*t1+s1->splines[0].c)*t1+s1->splines[0].d;
+ bigreal y1 = ((s1->splines[1].a*t1+s1->splines[1].b)*t1+s1->splines[1].c)*t1+s1->splines[1].d;
+ bigreal x2 = ((s2->splines[0].a*t2+s2->splines[0].b)*t2+s2->splines[0].c)*t2+s2->splines[0].d;
+ bigreal y2 = ((s2->splines[1].a*t2+s2->splines[1].b)*t2+s2->splines[1].c)*t2+s2->splines[1].d;
+ bigreal diff = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
+ bigreal x1p = ((s1->splines[0].a*t1p+s1->splines[0].b)*t1p+s1->splines[0].c)*t1p+s1->splines[0].d;
+ bigreal y1p = ((s1->splines[1].a*t1p+s1->splines[1].b)*t1p+s1->splines[1].c)*t1p+s1->splines[1].d;
+ bigreal x2p = ((s2->splines[0].a*t2p+s2->splines[0].b)*t2p+s2->splines[0].c)*t2p+s2->splines[0].d;
+ bigreal y2p = ((s2->splines[1].a*t2p+s2->splines[1].b)*t2p+s2->splines[1].c)*t2p+s2->splines[1].d;
+ bigreal diffp = (x1p-x2p)*(x1p-x2p) + (y1p-y2p)*(y1p-y2p);
+
+ if ( diff<diffp )
+return( false );
+
+return( true );
+}
+
+/* returns 0=>no intersection, 1=>at least one, location in pts, t1s, t2s */
+/* -1 => We couldn't figure it out in a closed form, have to do a numerical */
+/* approximation */
+int SplinesIntersect(const Spline *s1, const Spline *s2, BasePoint pts[9],
+ extended t1s[10], extended t2s[10]) { /* One extra for a trailing -1 */
+ BasePoint min1, max1, min2, max2;
+ int soln = 0;
+ extended x,y,t, ac0, ac1;
+ int i,j,found;
+ Spline1D spline;
+ extended tempts[4]; /* 3 solns for cubics, 4 for quartics */
+ extended extrema1[6], extrema2[6];
+ int ecnt1, ecnt2;
+
+ t1s[0] = t1s[1] = t1s[2] = t1s[3] = -1;
+ t2s[0] = t2s[1] = t2s[2] = t2s[3] = -1;
+
+ if ( s1==s2 && !s1->knownlinear && !s1->isquadratic )
+ /* Special case see if it doubles back on itself anywhere */;
+ else if ( s1==s2 )
+return( 0 ); /* Linear and quadratics can't double back, can't self-intersect */
+ else if ( s1->splines[0].a == s2->splines[0].a &&
+ s1->splines[0].b == s2->splines[0].b &&
+ s1->splines[0].c == s2->splines[0].c &&
+ s1->splines[0].d == s2->splines[0].d &&
+ s1->splines[1].a == s2->splines[1].a &&
+ s1->splines[1].b == s2->splines[1].b &&
+ s1->splines[1].c == s2->splines[1].c &&
+ s1->splines[1].d == s2->splines[1].d )
+return( -1 ); /* Same spline. Intersects everywhere */
+
+ /* Ignore splines which are just a point */
+ if ( s1->knownlinear && s1->splines[0].c==0 && s1->splines[1].c==0 )
+return( 0 );
+ if ( s2->knownlinear && s2->splines[0].c==0 && s2->splines[1].c==0 )
+return( 0 );
+
+ if ( s1->knownlinear )
+ /* Do Nothing */;
+ else if ( s2->knownlinear || (!s1->isquadratic && s2->isquadratic)) {
+ const Spline *stemp = s1;
+ extended *ts = t1s;
+ t1s = t2s; t2s = ts;
+ s1 = s2; s2 = stemp;
+ }
+
+ min1 = s1->from->me; max1 = min1;
+ min2 = s2->from->me; max2 = min2;
+ if ( s1->from->nextcp.x>max1.x ) max1.x = s1->from->nextcp.x;
+ else if ( s1->from->nextcp.x<min1.x ) min1.x = s1->from->nextcp.x;
+ if ( s1->from->nextcp.y>max1.y ) max1.y = s1->from->nextcp.y;
+ else if ( s1->from->nextcp.y<min1.y ) min1.y = s1->from->nextcp.y;
+ if ( s1->to->prevcp.x>max1.x ) max1.x = s1->to->prevcp.x;
+ else if ( s1->to->prevcp.x<min1.x ) min1.x = s1->to->prevcp.x;
+ if ( s1->to->prevcp.y>max1.y ) max1.y = s1->to->prevcp.y;
+ else if ( s1->to->prevcp.y<min1.y ) min1.y = s1->to->prevcp.y;
+ if ( s1->to->me.x>max1.x ) max1.x = s1->to->me.x;
+ else if ( s1->to->me.x<min1.x ) min1.x = s1->to->me.x;
+ if ( s1->to->me.y>max1.y ) max1.y = s1->to->me.y;
+ else if ( s1->to->me.y<min1.y ) min1.y = s1->to->me.y;
+
+ if ( s2->from->nextcp.x>max2.x ) max2.x = s2->from->nextcp.x;
+ else if ( s2->from->nextcp.x<min2.x ) min2.x = s2->from->nextcp.x;
+ if ( s2->from->nextcp.y>max2.y ) max2.y = s2->from->nextcp.y;
+ else if ( s2->from->nextcp.y<min2.y ) min2.y = s2->from->nextcp.y;
+ if ( s2->to->prevcp.x>max2.x ) max2.x = s2->to->prevcp.x;
+ else if ( s2->to->prevcp.x<min2.x ) min2.x = s2->to->prevcp.x;
+ if ( s2->to->prevcp.y>max2.y ) max2.y = s2->to->prevcp.y;
+ else if ( s2->to->prevcp.y<min2.y ) min2.y = s2->to->prevcp.y;
+ if ( s2->to->me.x>max2.x ) max2.x = s2->to->me.x;
+ else if ( s2->to->me.x<min2.x ) min2.x = s2->to->me.x;
+ if ( s2->to->me.y>max2.y ) max2.y = s2->to->me.y;
+ else if ( s2->to->me.y<min2.y ) min2.y = s2->to->me.y;
+ if ( min1.x>max2.x || min2.x>max1.x || min1.y>max2.y || min2.y>max1.y )
+return( false ); /* no intersection of bounding boxes */
+
+ if ( s1->knownlinear ) {
+ spline.d = s1->splines[1].c*((bigreal) s2->splines[0].d-(bigreal) s1->splines[0].d)-
+ s1->splines[0].c*((bigreal) s2->splines[1].d-(bigreal) s1->splines[1].d);
+ spline.c = s1->splines[1].c*(bigreal) s2->splines[0].c - s1->splines[0].c*(bigreal) s2->splines[1].c;
+ spline.b = s1->splines[1].c*(bigreal) s2->splines[0].b - s1->splines[0].c*(bigreal) s2->splines[1].b;
+ spline.a = s1->splines[1].c*(bigreal) s2->splines[0].a - s1->splines[0].c*(bigreal) s2->splines[1].a;
+ IterateSolve(&spline,tempts);
+ if ( tempts[0]==-1 )
+return( false );
+ for ( i = 0; i<3 && tempts[i]!=-1; ++i ) {
+ x = ((s2->splines[0].a*tempts[i]+s2->splines[0].b)*tempts[i]+
+ s2->splines[0].c)*tempts[i]+s2->splines[0].d;
+ y = ((s2->splines[1].a*tempts[i]+s2->splines[1].b)*tempts[i]+
+ s2->splines[1].c)*tempts[i]+s2->splines[1].d;
+ if ( s1->splines[0].c==0 )
+ x = s1->splines[0].d;
+ if ( s1->splines[1].c==0 )
+ y = s1->splines[1].d;
+ if ( (ac0 = s1->splines[0].c)<0 ) ac0 = -ac0;
+ if ( (ac1 = s1->splines[1].c)<0 ) ac1 = -ac1;
+ if ( ac0>ac1 )
+ t = (x-s1->splines[0].d)/s1->splines[0].c;
+ else
+ t = (y-s1->splines[1].d)/s1->splines[1].c;
+ if ( tempts[i]>.99996 && Closer(s1,s2,t,tempts[i],t,1)) {
+ tempts[i] = 1;
+ x = s2->to->me.x; y = s2->to->me.y;
+ } else if ( tempts[i]<.00001 && Closer(s1,s2,t,tempts[i],t,0)) {
+ tempts[i] = 0;
+ x = s2->from->me.x; y = s2->from->me.y;
+ }
+ /* I know we just did this, but we might have changed x,y so redo */
+ if ( ac0>ac1 )
+ t = (x-s1->splines[0].d)/s1->splines[0].c;
+ else
+ t = (y-s1->splines[1].d)/s1->splines[1].c;
+ if ( t>.99996 && t<1.001 && Closer(s1,s2,t,tempts[i],1,tempts[i])) {
+ t = 1;
+ x = s1->to->me.x; y = s1->to->me.y;
+ } else if ( t<.00001 && t>-.001 && Closer(s1,s2,t,tempts[i],0,tempts[i])) {
+ t = 0;
+ x = s1->from->me.x; y = s1->from->me.y;
+ }
+ if ( t<-.001 || t>1.001 || x<min1.x-.01 || y<min1.y-.01 || x>max1.x+.01 || y>max1.y+.01 )
+ continue;
+ if ( t<=0 ) {t=0; x=s1->from->me.x; y = s1->from->me.y; }
+ else if ( t>=1 ) { t=1; x=s1->to->me.x; y = s1->to->me.y; }
+ if ( s1->from->me.x==s1->to->me.x ) /* Avoid rounding errors */
+ x = s1->from->me.x; /* on hor/vert lines */
+ else if ( s1->from->me.y==s1->to->me.y )
+ y = s1->from->me.y;
+ if ( s2->knownlinear ) {
+ if ( s2->from->me.x==s2->to->me.x )
+ x = s2->from->me.x;
+ else if ( s2->from->me.y==s2->to->me.y )
+ y = s2->from->me.y;
+ }
+ soln = AddPoint(x,y,t,tempts[i],pts,t1s,t2s,soln);
+ }
+return( soln!=0 );
+ }
+ /* if one of the splines is quadratic then we can get an expression */
+ /* relating c*t+d to poly(s^3), and substituting this back we get */
+ /* a poly of degree 6 in s which could be solved iteratively */
+ /* however mixed quadratics and cubics are unlikely */
+
+ /* but if both splines are degree 3, the t is expressed as the sqrt of */
+ /* a third degree poly, which must be substituted into a cubic, and */
+ /* then squared to get rid of the sqrts leaving us with an ?18? degree */
+ /* poly. Ick. */
+
+ /* So let's do it the hard way... we break the splines into little bits */
+ /* where they are monotonic in both dimensions, then check these for */
+ /* possible intersections */
+ extrema1[0] = extrema2[0] = 0;
+ ecnt1 = Spline2DFindExtrema(s1,extrema1+1);
+ ecnt2 = Spline2DFindExtrema(s2,extrema2+1);
+ extrema1[++ecnt1] = 1.0;
+ extrema2[++ecnt2] = 1.0;
+ found=0;
+ for ( i=0; i<ecnt1; ++i ) {
+ min1.x = ((s1->splines[0].a*extrema1[i]+s1->splines[0].b)*extrema1[i]+
+ s1->splines[0].c)*extrema1[i]+s1->splines[0].d;
+ min1.y = ((s1->splines[1].a*extrema1[i]+s1->splines[1].b)*extrema1[i]+
+ s1->splines[1].c)*extrema1[i]+s1->splines[1].d;
+ max1.x = ((s1->splines[0].a*extrema1[i+1]+s1->splines[0].b)*extrema1[i+1]+
+ s1->splines[0].c)*extrema1[i+1]+s1->splines[0].d;
+ max1.y = ((s1->splines[1].a*extrema1[i+1]+s1->splines[1].b)*extrema1[i+1]+
+ s1->splines[1].c)*extrema1[i+1]+s1->splines[1].d;
+ if ( max1.x<min1.x ) { extended temp = max1.x; max1.x = min1.x; min1.x = temp; }
+ if ( max1.y<min1.y ) { extended temp = max1.y; max1.y = min1.y; min1.y = temp; }
+ for ( j=(s1==s2)?i+1:0; j<ecnt2; ++j ) {
+ min2.x = ((s2->splines[0].a*extrema2[j]+s2->splines[0].b)*extrema2[j]+
+ s2->splines[0].c)*extrema2[j]+s2->splines[0].d;
+ min2.y = ((s2->splines[1].a*extrema2[j]+s2->splines[1].b)*extrema2[j]+
+ s2->splines[1].c)*extrema2[j]+s2->splines[1].d;
+ max2.x = ((s2->splines[0].a*extrema2[j+1]+s2->splines[0].b)*extrema2[j+1]+
+ s2->splines[0].c)*extrema2[j+1]+s2->splines[0].d;
+ max2.y = ((s2->splines[1].a*extrema2[j+1]+s2->splines[1].b)*extrema2[j+1]+
+ s2->splines[1].c)*extrema2[j+1]+s2->splines[1].d;
+ if ( max2.x<min2.x ) { extended temp = max2.x; max2.x = min2.x; min2.x = temp; }
+ if ( max2.y<min2.y ) { extended temp = max2.y; max2.y = min2.y; min2.y = temp; }
+ if ( min1.x>max2.x || min2.x>max1.x || min1.y>max2.y || min2.y>max1.y )
+ /* No possible intersection */;
+ else if ( s1!=s2 )
+ found += CubicsIntersect(s1,extrema1[i],extrema1[i+1],&min1,&max1,
+ s2,extrema2[j],extrema2[j+1],&min2,&max2,
+ &pts[found],&t1s[found],&t2s[found],9-found);
+ else {
+ int k,l;
+ int cnt = CubicsIntersect(s1,extrema1[i],extrema1[i+1],&min1,&max1,
+ s2,extrema2[j],extrema2[j+1],&min2,&max2,
+ &pts[found],&t1s[found],&t2s[found],9-found);
+ for ( k=0; k<cnt; ++k ) {
+ if ( RealNear(t1s[found+k],t2s[found+k]) ) {
+ for ( l=k+1; l<cnt; ++l ) {
+ pts[found+l-1] = pts[found+l];
+ t1s[found+l-1] = t1s[found+l];
+ t2s[found+l-1] = t2s[found+l];
+ }
+ --cnt; --k;
+ }
+ }
+ found += cnt;
+ }
+ if ( found>=8 ) {
+ /* If the splines are colinear then we might get an unbounded */
+ /* number of intersections */
+ break;
+ }
+ }
+ }
+ t1s[found] = t2s[found] = -1;
+return( found!=0 );
+}
+
+void StemInfoFree(StemInfo *h) {
+ HintInstance *hi, *n;
+
+ for ( hi=h->where; hi!=NULL; hi=n ) {
+ n = hi->next;
+ chunkfree(hi,sizeof(HintInstance));
+ }
+ chunkfree(h,sizeof(StemInfo));
+}
+
+void StemInfosFree(StemInfo *h) {
+ StemInfo *hnext;
+ HintInstance *hi, *n;
+
+ for ( ; h!=NULL; h = hnext ) {
+ for ( hi=h->where; hi!=NULL; hi=n ) {
+ n = hi->next;
+ chunkfree(hi,sizeof(HintInstance));
+ }
+ hnext = h->next;
+ chunkfree(h,sizeof(StemInfo));
+ }
+}
+
+void DStemInfoFree(DStemInfo *h) {
+ HintInstance *hi, *n;
+
+ for ( hi=h->where; hi!=NULL; hi=n ) {
+ n = hi->next;
+ chunkfree(hi,sizeof(HintInstance));
+ }
+ chunkfree(h,sizeof(DStemInfo));
+}
+
+void DStemInfosFree(DStemInfo *h) {
+ DStemInfo *hnext;
+ HintInstance *hi, *n;
+
+ for ( ; h!=NULL; h = hnext ) {
+ for ( hi=h->where; hi!=NULL; hi=n ) {
+ n = hi->next;
+ chunkfree(hi,sizeof(HintInstance));
+ }
+ hnext = h->next;
+ chunkfree(h,sizeof(DStemInfo));
+ }
+}
+
+void KernPairsFree(KernPair *kp) {
+ KernPair *knext;
+ for ( ; kp!=NULL; kp = knext ) {
+ knext = kp->next;
+ if ( kp->adjust!=NULL ) {
+ free(kp->adjust->corrections);
+ chunkfree(kp->adjust,sizeof(DeviceTable));
+ }
+ chunkfree(kp,sizeof(KernPair));
+ }
+}
+
+void AnchorPointsFree(AnchorPoint *ap) {
+ AnchorPoint *anext;
+ for ( ; ap!=NULL; ap = anext ) {
+ anext = ap->next;
+ free(ap->xadjust.corrections);
+ free(ap->yadjust.corrections);
+ chunkfree(ap,sizeof(AnchorPoint));
+ }
+}
+
+void ValDevFree(ValDevTab *adjust) {
+ if ( adjust==NULL )
+return;
+ free( adjust->xadjust.corrections );
+ free( adjust->yadjust.corrections );
+ free( adjust->xadv.corrections );
+ free( adjust->yadv.corrections );
+ chunkfree(adjust,sizeof(ValDevTab));
+}
+
+void DeviceTableFree(DeviceTable *dt) {
+
+ if ( dt==NULL )
+return;
+
+ free(dt->corrections);
+ chunkfree(dt,sizeof(DeviceTable));
+}
+
+void PSTFree(PST *pst) {
+ PST *pnext;
+ for ( ; pst!=NULL; pst = pnext ) {
+ pnext = pst->next;
+ if ( pst->type==pst_lcaret )
+ free(pst->u.lcaret.carets);
+ else if ( pst->type==pst_pair ) {
+ free(pst->u.pair.paired);
+ ValDevFree(pst->u.pair.vr[0].adjust);
+ ValDevFree(pst->u.pair.vr[1].adjust);
+ chunkfree(pst->u.pair.vr,sizeof(struct vr [2]));
+ } else if ( pst->type!=pst_position ) {
+ free(pst->u.subs.variant);
+ } else if ( pst->type==pst_position ) {
+ ValDevFree(pst->u.pos.adjust);
+ }
+ chunkfree(pst,sizeof(PST));
+ }
+}
+
+void FPSTRuleContentsFree(struct fpst_rule *r, enum fpossub_format format) {
+ int j;
+
+ switch ( format ) {
+ case pst_glyphs:
+ free(r->u.glyph.names);
+ free(r->u.glyph.back);
+ free(r->u.glyph.fore);
+ break;
+ case pst_class:
+ free(r->u.class.nclasses);
+ free(r->u.class.bclasses);
+ free(r->u.class.fclasses);
+ break;
+ case pst_reversecoverage:
+ free(r->u.rcoverage.replacements);
+ case pst_coverage:
+ for ( j=0 ; j<r->u.coverage.ncnt ; ++j )
+ free(r->u.coverage.ncovers[j]);
+ free(r->u.coverage.ncovers);
+ for ( j=0 ; j<r->u.coverage.bcnt ; ++j )
+ free(r->u.coverage.bcovers[j]);
+ free(r->u.coverage.bcovers);
+ for ( j=0 ; j<r->u.coverage.fcnt ; ++j )
+ free(r->u.coverage.fcovers[j]);
+ free(r->u.coverage.fcovers);
+ break;
+ default:;
+ }
+ free(r->lookups);
+}
+
+void FPSTClassesFree(FPST *fpst) {
+ int i;
+
+ for ( i=0; i<fpst->nccnt; ++i ) {
+ free(fpst->nclass[i]);
+ free(fpst->nclassnames[i]);
+ }
+ for ( i=0; i<fpst->bccnt; ++i ) {
+ free(fpst->bclass[i]);
+ free(fpst->bclassnames[i]);
+ }
+ for ( i=0; i<fpst->fccnt; ++i ) {
+ free(fpst->fclass[i]);
+ free(fpst->fclassnames[i]);
+ }
+ free(fpst->nclass); free(fpst->bclass); free(fpst->fclass);
+ free(fpst->nclassnames); free(fpst->bclassnames); free(fpst->fclassnames);
+
+ fpst->nccnt = fpst->bccnt = fpst->fccnt = 0;
+ fpst->nclass = fpst->bclass = fpst->fclass = NULL;
+ fpst->nclassnames = fpst->bclassnames = fpst->fclassnames = NULL;
+}
+
+void FPSTFree(FPST *fpst) {
+ FPST *next;
+ int i;
+
+ while ( fpst!=NULL ) {
+ next = fpst->next;
+ FPSTClassesFree(fpst);
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ FPSTRuleContentsFree( &fpst->rules[i],fpst->format );
+ }
+ free(fpst->rules);
+ chunkfree(fpst,sizeof(FPST));
+ fpst = next;
+ }
+}
+
+void MinimumDistancesFree(MinimumDistance *md) {
+ MinimumDistance *next;
+
+ while ( md!=NULL ) {
+ next = md->next;
+ chunkfree(md,sizeof(MinimumDistance));
+ md = next;
+ }
+}
+
+void TTFLangNamesFree(struct ttflangname *l) {
+ struct ttflangname *next;
+ int i;
+
+ while ( l!=NULL ) {
+ next = l->next;
+ for ( i=0; i<ttf_namemax; ++i )
+ free(l->names[i]);
+ chunkfree(l,sizeof(*l));
+ l = next;
+ }
+}
+
+void AltUniFree(struct altuni *altuni) {
+ struct altuni *next;
+
+ while ( altuni ) {
+ next = altuni->next;
+ chunkfree(altuni,sizeof(struct altuni));
+ altuni = next;
+ }
+}
+
+void LayerDefault(Layer *layer) {
+ memset(layer,0,sizeof(Layer));
+ layer->fill_brush.opacity = layer->stroke_pen.brush.opacity = 1.0;
+ layer->fill_brush.col = layer->stroke_pen.brush.col = COLOR_INHERITED;
+ layer->stroke_pen.width = 10;
+ layer->stroke_pen.linecap = lc_round;
+ layer->stroke_pen.linejoin = lj_round;
+ layer->dofill = true;
+ layer->fillfirst = true;
+ layer->stroke_pen.trans[0] = layer->stroke_pen.trans[3] = 1.0;
+ layer->stroke_pen.trans[1] = layer->stroke_pen.trans[2] = 0.0;
+ /* Dashes default to an unbroken line */
+}
+
+SplineChar *SplineCharCreate(int layer_cnt) {
+ SplineChar *sc = chunkalloc(sizeof(SplineChar));
+ int i;
+
+ sc->color = COLOR_DEFAULT;
+ sc->orig_pos = 0xffff;
+ sc->unicodeenc = -1;
+ sc->layer_cnt = layer_cnt;
+ sc->layers = calloc(layer_cnt,sizeof(Layer));
+ for ( i=0; i<layer_cnt; ++i )
+ LayerDefault(&sc->layers[i]);
+ sc->tex_height = sc->tex_depth = sc->italic_correction = sc->top_accent_horiz =
+ TEX_UNDEF;
+return( sc );
+}
+
+SplineChar *SFSplineCharCreate(SplineFont *sf) {
+ SplineChar *sc = SplineCharCreate(sf==NULL?2:sf->layer_cnt);
+ int i;
+
+ if ( sf==NULL ) {
+ sc->layers[ly_back].background = true;
+ sc->layers[ly_fore].background = false;
+ } else {
+ for ( i=0; i<sf->layer_cnt; ++i ) {
+ sc->layers[i].background = sf->layers[i].background;
+ sc->layers[i].order2 = sf->layers[i].order2;
+ }
+ sc->parent = sf;
+ }
+return( sc );
+}
+
+void GlyphVariantsFree(struct glyphvariants *gv) {
+ int i;
+
+ if ( gv==NULL )
+return;
+ free(gv->variants);
+ DeviceTableFree(gv->italic_adjusts);
+ for ( i=0; i<gv->part_cnt; ++i )
+ free( gv->parts[i].component );
+ free(gv->parts);
+ chunkfree(gv,sizeof(*gv));
+}
+
+void MathKernVContentsFree(struct mathkernvertex *mk) {
+ int i;
+ for ( i=0; i<mk->cnt; ++i ) {
+ DeviceTableFree(mk->mkd[i].height_adjusts);
+ DeviceTableFree(mk->mkd[i].kern_adjusts);
+ }
+ free(mk->mkd);
+}
+
+void MathKernFree(struct mathkern *mk) {
+ int i;
+
+ if ( mk==NULL )
+return;
+ for ( i=0; i<4; ++i )
+ MathKernVContentsFree( &(&mk->top_right)[i] );
+ chunkfree(mk,sizeof(*mk));
+}
+
+void SplineCharListsFree(struct splinecharlist *dlist) {
+ struct splinecharlist *dnext;
+ for ( ; dlist!=NULL; dlist = dnext ) {
+ dnext = dlist->next;
+ chunkfree(dlist,sizeof(struct splinecharlist));
+ }
+}
+
+struct pattern *PatternCopy(struct pattern *old, real transform[6]) {
+ struct pattern *pat;
+
+ if ( old==NULL )
+return( NULL );
+
+ pat = chunkalloc(sizeof(struct pattern));
+
+ *pat = *old;
+ pat->pattern = copy( old->pattern );
+ if ( transform!=NULL )
+ MatMultiply(pat->transform,transform,pat->transform);
+return( pat );
+}
+
+void PatternFree(struct pattern *pat) {
+ if ( pat==NULL )
+return;
+ free(pat->pattern);
+ chunkfree(pat,sizeof(struct pattern));
+}
+
+struct gradient *GradientCopy(struct gradient *old,real transform[6]) {
+ struct gradient *grad;
+
+ if ( old==NULL )
+return( NULL );
+
+ grad = chunkalloc(sizeof(struct gradient));
+
+ *grad = *old;
+ grad->grad_stops = malloc(old->stop_cnt*sizeof(struct grad_stops));
+ memcpy(grad->grad_stops,old->grad_stops,old->stop_cnt*sizeof(struct grad_stops));
+ if ( transform!=NULL ) {
+ BpTransform(&grad->start,&grad->start,transform);
+ BpTransform(&grad->stop,&grad->stop,transform);
+ }
+return( grad );
+}
+
+void GradientFree(struct gradient *grad) {
+ if ( grad==NULL )
+return;
+ free(grad->grad_stops);
+ chunkfree(grad,sizeof(struct gradient));
+}
+
+void BrushCopy(struct brush *into, struct brush *from, real transform[6]) {
+ *into = *from;
+ into->gradient = GradientCopy(from->gradient,transform);
+ into->pattern = PatternCopy(from->pattern,transform);
+}
+
+void PenCopy(struct pen *into, struct pen *from,real transform[6]) {
+ *into = *from;
+ into->brush.gradient = GradientCopy(from->brush.gradient,transform);
+ into->brush.pattern = PatternCopy(from->brush.pattern,transform);
+}
+
+void LayerFreeContents(SplineChar *sc,int layer) {
+ SplinePointListsFree(sc->layers[layer].splines);
+ GradientFree(sc->layers[layer].fill_brush.gradient);
+ PatternFree(sc->layers[layer].fill_brush.pattern);
+ GradientFree(sc->layers[layer].stroke_pen.brush.gradient);
+ PatternFree(sc->layers[layer].stroke_pen.brush.pattern);
+ RefCharsFree(sc->layers[layer].refs);
+ /* image garbage collection????!!!! */
+}
+
+void SplineCharFreeContents(SplineChar *sc) {
+ int i;
+
+ if ( sc==NULL )
+return;
+ if (sc->name != NULL) free(sc->name);
+ if (sc->comment != NULL) free(sc->comment);
+ for ( i=0; i<sc->layer_cnt; ++i ) {
+#if defined(_NO_PYTHON)
+ if (sc->layers[i].python_persistent != NULL) free( sc->layers[i].python_persistent ); /* It's a string of pickled data which we leave as a string */
+#else
+ PyFF_FreeSCLayer(sc, i);
+#endif
+ LayerFreeContents(sc,i);
+ }
+ StemInfosFree(sc->hstem);
+ StemInfosFree(sc->vstem);
+ DStemInfosFree(sc->dstem);
+ MinimumDistancesFree(sc->md);
+ KernPairsFree(sc->kerns);
+ KernPairsFree(sc->vkerns);
+ AnchorPointsFree(sc->anchor);
+ SplineCharListsFree(sc->dependents);
+ PSTFree(sc->possub);
+ if (sc->ttf_instrs != NULL) free(sc->ttf_instrs);
+ if (sc->countermasks != NULL) free(sc->countermasks);
+ if (sc->layers != NULL) free(sc->layers);
+ AltUniFree(sc->altuni);
+ GlyphVariantsFree(sc->horiz_variants);
+ GlyphVariantsFree(sc->vert_variants);
+ DeviceTableFree(sc->italic_adjusts);
+ DeviceTableFree(sc->top_accent_adjusts);
+ MathKernFree(sc->mathkern);
+ if (sc->glif_name != NULL) { free(sc->glif_name); sc->glif_name = NULL; }
+}
+
+void SplineCharFree(SplineChar *sc) {
+
+ if ( sc==NULL )
+return;
+ SplineCharFreeContents(sc);
+ chunkfree(sc,sizeof(SplineChar));
+}
+
+void AnchorClassesFree(AnchorClass *an) {
+ AnchorClass *anext;
+ for ( ; an!=NULL; an = anext ) {
+ anext = an->next;
+ free(an->name);
+ chunkfree(an,sizeof(AnchorClass));
+ }
+}
+
+void TtfTablesFree(struct ttf_table *tab) {
+ struct ttf_table *next;
+
+ for ( ; tab!=NULL; tab = next ) {
+ next = tab->next;
+ free(tab->data);
+ chunkfree(tab,sizeof(struct ttf_table));
+ }
+}
+
+void ScriptLangListFree(struct scriptlanglist *sl) {
+ struct scriptlanglist *next;
+
+ while ( sl!=NULL ) {
+ next = sl->next;
+ free(sl->morelangs);
+ chunkfree(sl,sizeof(*sl));
+ sl = next;
+ }
+}
+
+void FeatureScriptLangListFree(FeatureScriptLangList *fl) {
+ FeatureScriptLangList *next;
+
+ while ( fl!=NULL ) {
+ next = fl->next;
+ ScriptLangListFree(fl->scripts);
+ chunkfree(fl,sizeof(*fl));
+ fl = next;
+ }
+}
+
+void OTLookupFree(OTLookup *lookup) {
+ struct lookup_subtable *st, *stnext;
+
+ free(lookup->lookup_name);
+ FeatureScriptLangListFree(lookup->features);
+ for ( st=lookup->subtables; st!=NULL; st=stnext ) {
+ stnext = st->next;
+ free(st->subtable_name);
+ free(st->suffix);
+ chunkfree(st,sizeof(struct lookup_subtable));
+ }
+ chunkfree( lookup,sizeof(OTLookup) );
+}
+
+void OTLookupListFree(OTLookup *lookup ) {
+ OTLookup *next;
+
+ for ( ; lookup!=NULL; lookup = next ) {
+ next = lookup->next;
+ OTLookupFree(lookup);
+ }
+}
+
+void KernClassFreeContents(KernClass *kc) {
+ int i;
+ for ( i=1; i<kc->first_cnt; ++i )
+ free(kc->firsts[i]);
+ for ( i=1; i<kc->second_cnt; ++i )
+ free(kc->seconds[i]);
+ free(kc->firsts);
+ free(kc->seconds);
+ free(kc->offsets);
+ for ( i=kc->first_cnt*kc->second_cnt-1; i>=0 ; --i )
+ free(kc->adjusts[i].corrections);
+ free(kc->adjusts);
+ if (kc->firsts_flags) free(kc->firsts_flags);
+ if (kc->seconds_flags) free(kc->seconds_flags);
+ if (kc->offsets_flags) free(kc->offsets_flags);
+ if (kc->firsts_names) {
+ for ( i=kc->first_cnt-1; i>=0 ; --i )
+ free(kc->firsts_names[i]);
+ free(kc->firsts_names);
+ }
+ if (kc->seconds_names) {
+ for ( i=kc->second_cnt-1; i>=0 ; --i )
+ free(kc->seconds_names[i]);
+ free(kc->seconds_names);
+ }
+}
+
+void KernClassClearSpecialContents(KernClass *kc) {
+ // This frees and zeros special data not handled by the FontForge GUI,
+ // most of which comes from U. F. O..
+ int i;
+ if (kc->firsts_flags) { free(kc->firsts_flags); kc->firsts_flags = NULL; }
+ if (kc->seconds_flags) { free(kc->seconds_flags); kc->seconds_flags = NULL; }
+ if (kc->offsets_flags) { free(kc->offsets_flags); kc->offsets_flags = NULL; }
+ if (kc->firsts_names) {
+ for ( i=kc->first_cnt-1; i>=0 ; --i )
+ free(kc->firsts_names[i]);
+ free(kc->firsts_names);
+ kc->firsts_names = NULL;
+ }
+ if (kc->seconds_names) {
+ for ( i=kc->second_cnt-1; i>=0 ; --i )
+ free(kc->seconds_names[i]);
+ free(kc->seconds_names);
+ kc->seconds_names = NULL;
+ }
+}
+
+void KernClassListFree(KernClass *kc) {
+ KernClass *n;
+
+ while ( kc ) {
+ KernClassFreeContents(kc);
+ n = kc->next;
+ chunkfree(kc,sizeof(KernClass));
+ kc = n;
+ }
+}
+
+void KernClassListClearSpecialContents(KernClass *kc) {
+ KernClass *n;
+
+ while ( kc ) {
+ KernClassClearSpecialContents(kc);
+ n = kc->next;
+ kc = n;
+ }
+}
+
+void MacNameListFree(struct macname *mn) {
+ struct macname *next;
+
+ while ( mn!=NULL ) {
+ next = mn->next;
+ free(mn->name);
+ chunkfree(mn,sizeof(struct macname));
+ mn = next;
+ }
+}
+
+void MacSettingListFree(struct macsetting *ms) {
+ struct macsetting *next;
+
+ while ( ms!=NULL ) {
+ next = ms->next;
+ MacNameListFree(ms->setname);
+ chunkfree(ms,sizeof(struct macsetting));
+ ms = next;
+ }
+}
+
+void MacFeatListFree(MacFeat *mf) {
+ MacFeat *next;
+
+ while ( mf!=NULL ) {
+ next = mf->next;
+ MacNameListFree(mf->featname);
+ MacSettingListFree(mf->settings);
+ chunkfree(mf,sizeof(MacFeat));
+ mf = next;
+ }
+}
+
+void ASMFree(ASM *sm) {
+ ASM *next;
+ int i;
+
+ while ( sm!=NULL ) {
+ next = sm->next;
+ if ( sm->type==asm_insert ) {
+ for ( i=0; i<sm->class_cnt*sm->state_cnt; ++i ) {
+ free( sm->state[i].u.insert.mark_ins );
+ free( sm->state[i].u.insert.cur_ins );
+ }
+ } else if ( sm->type==asm_kern ) {
+ for ( i=0; i<sm->class_cnt*sm->state_cnt; ++i ) {
+ free( sm->state[i].u.kern.kerns );
+ }
+ }
+ for ( i=4; i<sm->class_cnt; ++i )
+ free(sm->classes[i]);
+ free(sm->state);
+ free(sm->classes);
+ chunkfree(sm,sizeof(ASM));
+ sm = next;
+ }
+}
+
+void OtfNameListFree(struct otfname *on) {
+ struct otfname *on_next;
+
+ for ( ; on!=NULL; on = on_next ) {
+ on_next = on->next;
+ free(on->name);
+ chunkfree(on,sizeof(*on));
+ }
+}
+
+void OtfFeatNameListFree(struct otffeatname *fn) {
+ struct otffeatname *fn_next;
+
+ for ( ; fn!=NULL; fn = fn_next ) {
+ fn_next = fn->next;
+ OtfNameListFree(fn->names);
+ chunkfree(fn,sizeof(*fn));
+ }
+}
+
+EncMap *EncMapNew(int enccount,int backmax,Encoding *enc) {
+/* NOTE: 'enccount' and 'backmax' can sometimes be different map sizes */
+ EncMap *map;
+
+ /* Ensure all memory available, otherwise cleanup and exit as NULL */
+ if ( (map=chunkalloc(sizeof(EncMap)))!=NULL ) {
+ if ( (map->map=malloc(enccount*sizeof(int32)))!=NULL ) {
+ if ( (map->backmap=malloc(backmax*sizeof(int32)))!=NULL ) {
+ map->enccount = map->encmax = enccount;
+ map->backmax = backmax;
+ memset(map->map,-1,enccount*sizeof(int32));
+ memset(map->backmap,-1,backmax*sizeof(int32));
+ map->enc = enc;
+ return( map );
+ }
+ free(map->map);
+ }
+ free(map);
+ }
+ return( NULL );
+}
+
+EncMap *EncMap1to1(int enccount) {
+/* Used for CID fonts where CID is same as orig_pos */
+/* NOTE: map-enc point to a global variable custom. */
+/* TODO: avoid global custom and use passed pointer */
+ EncMap *map;
+ int i;
+
+ if ( (map=EncMapNew(enccount,enccount,&custom))!=NULL ) {
+ for ( i=0; i<enccount; ++i )
+ map->map[i] = map->backmap[i] = i;
+ }
+ return( map );
+}
+
+void EncMapFree(EncMap *map) {
+ if ( map==NULL )
+return;
+
+ if ( map->enc->is_temporary )
+ EncodingFree(map->enc);
+ free(map->map);
+ free(map->backmap);
+ free(map->remap);
+ chunkfree(map,sizeof(EncMap));
+}
+
+void MarkClassFree(int cnt,char **classes,char **names) {
+ int i;
+
+ for ( i=1; i<cnt; ++i ) {
+ free( classes[i] );
+ free( names[i] );
+ }
+ free( classes );
+ free( names );
+}
+
+void MarkSetFree(int cnt,char **classes,char **names) {
+ int i;
+
+ for ( i=0; i<cnt; ++i ) {
+ free( classes[i] );
+ free( names[i] );
+ }
+ free( classes );
+ free( names );
+}
+
+struct baselangextent *BaseLangCopy(struct baselangextent *extent) {
+ struct baselangextent *head, *last, *cur;
+
+ last = head = NULL;
+ for ( ; extent!=NULL; extent = extent->next ) {
+ cur = chunkalloc(sizeof(struct baselangextent));
+ *cur = *extent;
+ cur->features = BaseLangCopy(cur->features);
+ if ( head==NULL )
+ head = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+return( head );
+}
+
+void BaseLangFree(struct baselangextent *extent) {
+ struct baselangextent *next;
+
+ while ( extent!=NULL ) {
+ next = extent->next;
+ BaseLangFree(extent->features);
+ chunkfree(extent,sizeof(struct baselangextent));
+ extent = next;
+ }
+}
+
+void BaseScriptFree(struct basescript *bs) {
+ struct basescript *next;
+
+ while ( bs!=NULL ) {
+ next = bs->next;
+ if ( bs->baseline_pos )
+ free(bs->baseline_pos);
+ BaseLangFree(bs->langs);
+ chunkfree(bs,sizeof(struct basescript));
+ bs = next;
+ }
+}
+
+void BaseFree(struct Base *base) {
+ if ( base==NULL )
+return;
+
+ free(base->baseline_tags);
+ BaseScriptFree(base->scripts);
+ chunkfree(base,sizeof(struct Base));
+}
+
+void JstfLangFree(struct jstf_lang *jl) {
+ struct jstf_lang *next;
+ int i;
+
+ while ( jl!=NULL ) {
+ next = jl->next;
+ for ( i=0; i<jl->cnt; ++i ) {
+ struct jstf_prio *jp = &jl->prios[i];
+ free(jp->enableShrink);
+ free(jp->disableShrink);
+ free(jp->maxShrink);
+ free(jp->enableExtend);
+ free(jp->disableExtend);
+ free(jp->maxExtend);
+ }
+ free(jl->prios);
+ chunkfree(jl,sizeof(*jl));
+ jl = next;
+ }
+}
+
+void JustifyFree(Justify *just) {
+ Justify *next;
+
+ while ( just!=NULL ) {
+ next = just->next;
+ free(just->extenders);
+ JstfLangFree(just->langs);
+ chunkfree(just,sizeof(*just));
+ just = next;
+ }
+}
+
+void SplineFontFree(SplineFont *sf) {
+ int i;
+
+ if ( sf==NULL )
+return;
+ if ( sf->mm!=NULL ) {
+ MMSetFree(sf->mm);
+return;
+ }
+ if ( sf->sfd_version>0 && sf->sfd_version<2 ) {
+ // Free special data.
+ SplineFont1* oldsf = (SplineFont1*)sf;
+ // First the script language lists.
+ if (oldsf->script_lang != NULL) {
+ int scripti;
+ for (scripti = 0; oldsf->script_lang[scripti] != NULL; scripti ++) {
+ int scriptj;
+ for (scriptj = 0; oldsf->script_lang[scripti][scriptj].script != 0; scriptj ++) {
+ if (oldsf->script_lang[scripti][scriptj].langs != NULL) free(oldsf->script_lang[scripti][scriptj].langs);
+ }
+ free(oldsf->script_lang[scripti]); oldsf->script_lang[scripti] = NULL;
+ }
+ free(oldsf->script_lang); oldsf->script_lang = NULL;
+ }
+ // Then the table orderings.
+ {
+ struct table_ordering *ord = oldsf->orders;
+ while (ord != NULL) {
+ struct table_ordering *ordtofree = ord;
+ if (ord->ordered_features != NULL) free(ord->ordered_features);
+ ord = ord->next;
+ chunkfree(ordtofree, sizeof(struct table_ordering));
+ }
+ oldsf->orders = NULL;
+ }
+ }
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ SplineCharFree(sf->glyphs[i]);
+ free(sf->glyphs);
+ free(sf->fontname);
+ free(sf->fullname);
+ free(sf->familyname);
+ free(sf->weight);
+ free(sf->copyright);
+ free(sf->comments);
+ free(sf->filename);
+ free(sf->origname);
+ free(sf->autosavename);
+ free(sf->version);
+ free(sf->xuid);
+ free(sf->cidregistry);
+ free(sf->ordering);
+ if (sf->map != 0)
+ EncMapFree(sf->map);
+ if (sf->MATH)
+ free(sf->MATH);
+ if ( sf->styleMapFamilyName && sf->styleMapFamilyName[0]!='\0' ) { free(sf->styleMapFamilyName); sf->styleMapFamilyName = NULL; }
+ MacFeatListFree(sf->features);
+ /* We don't free the EncMap. That field is only a temporary pointer. Let the FontViewBase free it, that's where it really lives */
+ // TODO: But that doesn't always get freed. The statement below causes double-frees, so we need to come up with better conditions.
+ #if 0
+ if (sf->cidmaster == NULL || sf->cidmaster == sf)
+ if (sf->map != NULL) { free(sf->map); sf->map = NULL; }
+ #endif // 0
+ SplinePointListsFree(sf->grid.splines);
+ AnchorClassesFree(sf->anchor);
+ TtfTablesFree(sf->ttf_tables);
+ TtfTablesFree(sf->ttf_tab_saved);
+ PSDictFree(sf->private);
+ TTFLangNamesFree(sf->names);
+ for ( i=0; i<sf->subfontcnt; ++i )
+ SplineFontFree(sf->subfonts[i]);
+ free(sf->subfonts);
+ GlyphHashFree(sf);
+ OTLookupListFree(sf->gpos_lookups);
+ OTLookupListFree(sf->gsub_lookups);
+ KernClassListFree(sf->kerns);
+ KernClassListFree(sf->vkerns);
+ FPSTFree(sf->possub);
+ ASMFree(sf->sm);
+ OtfNameListFree(sf->fontstyle_name);
+ OtfFeatNameListFree(sf->feat_names);
+ MarkClassFree(sf->mark_class_cnt,sf->mark_classes,sf->mark_class_names);
+ MarkSetFree(sf->mark_set_cnt,sf->mark_sets,sf->mark_set_names);
+ GlyphGroupsFree(sf->groups);
+ GlyphGroupKernsFree(sf->groupkerns);
+ GlyphGroupKernsFree(sf->groupvkerns);
+ free( sf->gasp );
+#if defined(_NO_PYTHON)
+ free( sf->python_persistent ); /* It's a string of pickled data which we leave as a string */
+#else
+ PyFF_FreeSF(sf);
+#endif
+ BaseFree(sf->horiz_base);
+ BaseFree(sf->vert_base);
+ JustifyFree(sf->justify);
+ if (sf->layers != NULL) {
+ int layer;
+ for (layer = 0; layer < sf->layer_cnt; layer ++) {
+ if (sf->layers[layer].name != NULL) {
+ free(sf->layers[layer].name);
+ sf->layers[layer].name = NULL;
+ }
+ if (sf->layers[layer].ufo_path != NULL) {
+ free(sf->layers[layer].ufo_path);
+ sf->layers[layer].ufo_path = NULL;
+ }
+ }
+ free(sf->layers); sf->layers = NULL;
+ }
+ free(sf);
+}
+
+void SplineFontClearSpecial(SplineFont *sf) {
+ int i;
+
+ if ( sf==NULL )
+return;
+ if ( sf->mm!=NULL ) {
+ MMSetClearSpecial(sf->mm);
+return;
+ }
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ struct splinechar *sc = sf->glyphs[i];
+ if (sc->glif_name != NULL) { free(sc->glif_name); sc->glif_name = NULL; }
+ }
+ for ( i=0; i<sf->subfontcnt; ++i )
+ SplineFontClearSpecial(sf->subfonts[i]);
+ KernClassListClearSpecialContents(sf->kerns);
+ KernClassListClearSpecialContents(sf->vkerns);
+ if (sf->groups) { GlyphGroupsFree(sf->groups); sf->groups = NULL; }
+ if (sf->groupkerns) { GlyphGroupKernsFree(sf->groupkerns); sf->groupkerns = NULL; }
+ if (sf->groupvkerns) { GlyphGroupKernsFree(sf->groupvkerns); sf->groupvkerns = NULL; }
+ if (sf->python_persistent) {
+#if defined(_NO_PYTHON)
+ free( sf->python_persistent ); /* It's a string of pickled data which we leave as a string */
+#else
+ PyFF_FreeSF(sf);
+#endif
+ sf->python_persistent = NULL;
+ }
+ if (sf->layers != NULL) {
+ int layer;
+ for (layer = 0; layer < sf->layer_cnt; layer ++) {
+ if (sf->layers[layer].ufo_path != NULL) {
+ free(sf->layers[layer].ufo_path);
+ sf->layers[layer].ufo_path = NULL;
+ }
+ }
+ }
+}
+
+#if 0
+// These are in splinefont.h.
+#define GROUP_NAME_KERNING_UFO 1
+#define GROUP_NAME_KERNING_FEATURE 2
+#define GROUP_NAME_VERTICAL 4 // Otherwise horizontal.
+#define GROUP_NAME_RIGHT 8 // Otherwise left (or above).
+#endif // 0
+
+
+void GlyphGroupFree(struct ff_glyphclasses* group) {
+ if (group->classname != NULL) free(group->classname);
+ if (group->glyphs != NULL) free(group->glyphs);
+ free(group);
+}
+
+void GlyphGroupsFree(struct ff_glyphclasses* root) {
+ struct ff_glyphclasses* current = root;
+ struct ff_glyphclasses* next;
+ while (current != NULL) {
+ next = current->next;
+ GlyphGroupFree(current);
+ current = next;
+ }
+}
+
+void GlyphGroupKernFree(struct ff_rawoffsets* groupkern) {
+ if (groupkern->left != NULL) free(groupkern->left);
+ if (groupkern->right != NULL) free(groupkern->right);
+ free(groupkern);
+}
+
+void GlyphGroupKernsFree(struct ff_rawoffsets* root) {
+ struct ff_rawoffsets* current = root;
+ struct ff_rawoffsets* next;
+ while (current != NULL) {
+ next = current->next;
+ GlyphGroupKernFree(current);
+ current = next;
+ }
+}
+
+
+#ifdef FF_UTHASH_GLIF_NAMES
+int HashKerningClassNamesFlex(SplineFont *sf, struct glif_name_index * class_name_hash, int capitalize) {
+ struct kernclass *current_kernclass;
+ int isv;
+ int isr;
+ int i;
+ int absolute_index = 0; // This gives us a unique index for each kerning class.
+ // First we catch the existing names.
+ absolute_index = 0;
+ for (isv = 0; isv < 2; isv++)
+ for (current_kernclass = (isv ? sf->vkerns : sf->kerns); current_kernclass != NULL; current_kernclass = current_kernclass->next)
+ for (isr = 0; isr < 2; isr++) if ( (isr ? current_kernclass->seconds_names : current_kernclass->firsts_names) != NULL ) {
+ for ( i=0; i < (isr ? current_kernclass->second_cnt : current_kernclass->first_cnt); ++i )
+ if ( (isr ? current_kernclass->seconds_names[i] : current_kernclass->firsts_names[i]) != NULL ) {
+ // Add it to the hash table with its index.
+ if (capitalize) {
+ char * cap_name = upper_case(isr ? current_kernclass->seconds_names[i] : current_kernclass->firsts_names[i]);
+ glif_name_track_new(class_name_hash, absolute_index + i, cap_name);
+ free(cap_name); cap_name = NULL;
+ } else {
+ glif_name_track_new(class_name_hash, absolute_index + i, (isr ? current_kernclass->seconds_names[i] : current_kernclass->firsts_names[i]));
+ }
+ }
+ absolute_index +=i;
+ }
+ return absolute_index;
+}
+int HashKerningClassNames(SplineFont *sf, struct glif_name_index * class_name_hash) {
+ return HashKerningClassNamesFlex(sf, class_name_hash, 0);
+}
+int HashKerningClassNamesCaps(SplineFont *sf, struct glif_name_index * class_name_hash) {
+ return HashKerningClassNamesFlex(sf, class_name_hash, 1);
+}
+#endif
+
+void MMSetFreeContents(MMSet *mm) {
+ int i;
+
+ free(mm->instances);
+
+ free(mm->positions);
+ free(mm->defweights);
+
+ for ( i=0; i<mm->axis_count; ++i ) {
+ free(mm->axes[i]);
+ free(mm->axismaps[i].blends);
+ free(mm->axismaps[i].designs);
+ MacNameListFree(mm->axismaps[i].axisnames);
+ }
+ free(mm->axismaps);
+ free(mm->cdv);
+ free(mm->ndv);
+ for ( i=0; i<mm->named_instance_count; ++i ) {
+ free(mm->named_instances[i].coords);
+ MacNameListFree(mm->named_instances[i].names);
+ }
+ free(mm->named_instances);
+}
+
+void MMSetFree(MMSet *mm) {
+ int i;
+
+ for ( i=0; i<mm->instance_count; ++i ) {
+ mm->instances[i]->mm = NULL;
+ mm->instances[i]->map = NULL;
+ SplineFontFree(mm->instances[i]);
+ }
+ mm->normal->mm = NULL;
+ SplineFontFree(mm->normal); /* EncMap gets freed here */
+ MMSetFreeContents(mm);
+
+ chunkfree(mm,sizeof(*mm));
+}
+
+void MMSetClearSpecial(MMSet *mm) {
+ int i;
+
+ for ( i=0; i<mm->instance_count; ++i ) {
+ SplineFontClearSpecial(mm->instances[i]);
+ }
+ SplineFontClearSpecial(mm->normal);
+}
+
+SplinePoint *SplineBisect(Spline *spline, extended t) {
+ Spline1 xstart, xend;
+ Spline1 ystart, yend;
+ Spline *spline1, *spline2;
+ SplinePoint *mid;
+ SplinePoint *old0, *old1;
+ Spline1D *xsp = &spline->splines[0], *ysp = &spline->splines[1];
+ int order2 = spline->order2;
+
+#ifdef DEBUG
+ if ( t<=1e-3 || t>=1-1e-3 )
+ IError("Bisection to create a zero length spline");
+#endif
+ xstart.s0 = xsp->d; ystart.s0 = ysp->d;
+ xend.s1 = (extended) xsp->a+xsp->b+xsp->c+xsp->d;
+ yend.s1 = (extended) ysp->a+ysp->b+ysp->c+ysp->d;
+ xstart.s1 = xend.s0 = ((xsp->a*t+xsp->b)*t+xsp->c)*t + xsp->d;
+ ystart.s1 = yend.s0 = ((ysp->a*t+ysp->b)*t+ysp->c)*t + ysp->d;
+ FigureSpline1(&xstart,0,t,xsp);
+ FigureSpline1(&xend,t,1,xsp);
+ FigureSpline1(&ystart,0,t,ysp);
+ FigureSpline1(&yend,t,1,ysp);
+
+ mid = chunkalloc(sizeof(SplinePoint));
+ mid->me.x = xstart.s1; mid->me.y = ystart.s1;
+ if ( order2 ) {
+ mid->nextcp.x = xend.sp.d + xend.sp.c/2;
+ mid->nextcp.y = yend.sp.d + yend.sp.c/2;
+ mid->prevcp.x = xstart.sp.d + xstart.sp.c/2;
+ mid->prevcp.y = ystart.sp.d + ystart.sp.c/2;
+ } else {
+ mid->nextcp.x = xend.c0; mid->nextcp.y = yend.c0;
+ mid->prevcp.x = xstart.c1; mid->prevcp.y = ystart.c1;
+ }
+ if ( mid->me.x==mid->nextcp.x && mid->me.y==mid->nextcp.y )
+ mid->nonextcp = true;
+ if ( mid->me.x==mid->prevcp.x && mid->me.y==mid->prevcp.y )
+ mid->noprevcp = true;
+
+ old0 = spline->from; old1 = spline->to;
+ if ( order2 ) {
+ old0->nextcp = mid->prevcp;
+ old1->prevcp = mid->nextcp;
+ } else {
+ old0->nextcp.x = xstart.c0; old0->nextcp.y = ystart.c0;
+ old1->prevcp.x = xend.c1; old1->prevcp.y = yend.c1;
+ }
+ old0->nonextcp = (old0->nextcp.x==old0->me.x && old0->nextcp.y==old0->me.y);
+ old1->noprevcp = (old1->prevcp.x==old1->me.x && old1->prevcp.y==old1->me.y);
+ old0->nextcpdef = false;
+ old1->prevcpdef = false;
+ SplineFree(spline);
+
+ spline1 = chunkalloc(sizeof(Spline));
+ spline1->splines[0] = xstart.sp; spline1->splines[1] = ystart.sp;
+ spline1->from = old0;
+ spline1->to = mid;
+ spline1->order2 = order2;
+ old0->next = spline1;
+ mid->prev = spline1;
+ if ( SplineIsLinear(spline1)) {
+ spline1->islinear = spline1->from->nonextcp = spline1->to->noprevcp = true;
+ spline1->from->nextcp = spline1->from->me;
+ spline1->to->prevcp = spline1->to->me;
+ }
+ SplineRefigure(spline1);
+
+ spline2 = chunkalloc(sizeof(Spline));
+ spline2->splines[0] = xend.sp; spline2->splines[1] = xend.sp;
+ spline2->from = mid;
+ spline2->to = old1;
+ spline2->order2 = order2;
+ mid->next = spline2;
+ old1->prev = spline2;
+ if ( SplineIsLinear(spline2)) {
+ spline2->islinear = spline2->from->nonextcp = spline2->to->noprevcp = true;
+ spline2->from->nextcp = spline2->from->me;
+ spline2->to->prevcp = spline2->to->me;
+ }
+ SplineRefigure(spline2);
+return( mid );
+}
+
+void GrowBuffer(GrowBuf *gb) {
+ if ( gb->base==NULL ) {
+ gb->base = gb->pt = malloc(200);
+ gb->end = gb->base + 200;
+ } else {
+ int len = (gb->end-gb->base) + 400;
+ int off = gb->pt-gb->base;
+ gb->base = realloc(gb->base,len);
+ gb->end = gb->base + len;
+ gb->pt = gb->base+off;
+ }
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil2.c b/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil2.c
new file mode 100644
index 0000000000..2f18829852
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/splineutil2.c
@@ -0,0 +1,1518 @@
+/* -*- coding: utf-8 -*- */
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+#include <time.h>
+
+int new_em_size = 1000;
+int new_fonts_are_order2 = false;
+int loaded_fonts_same_as_new = false;
+int default_fv_row_count = 4;
+int default_fv_col_count = 16;
+int default_fv_font_size = 48;
+int default_fv_antialias=true;
+int default_fv_bbsized=false;
+int snaptoint=0;
+
+/*#define DEBUG 1*/
+
+#if defined( FONTFORGE_CONFIG_USE_DOUBLE )
+# define RE_NearZero .00000001
+# define RE_Factor (1024.0*1024.0*1024.0*1024.0*1024.0*2.0) /* 52 bits => divide by 2^51 */
+#else
+# define RE_NearZero .00001
+# define RE_Factor (1024.0*1024.0*4.0) /* 23 bits => divide by 2^22 */
+#endif
+
+int Within4RoundingErrors(bigreal v1, bigreal v2) {
+ bigreal temp=v1*v2;
+ bigreal re;
+
+ if ( temp<0 ) /* Ok, if the two values are on different sides of 0 there */
+return( false ); /* is no way they can be within a rounding error of each other */
+ else if ( temp==0 ) {
+ if ( v1==0 )
+return( v2<RE_NearZero && v2>-RE_NearZero );
+ else
+return( v1<RE_NearZero && v1>-RE_NearZero );
+ } else if ( v1>0 ) {
+ if ( v1>v2 ) { /* Rounding error from the biggest absolute value */
+ re = v1/ (RE_Factor/4);
+return( v1-v2 < re );
+ } else {
+ re = v2/ (RE_Factor/4);
+return( v2-v1 < re );
+ }
+ } else {
+ if ( v1<v2 ) {
+ re = v1/ (RE_Factor/4); /* This will be a negative number */
+return( v1-v2 > re );
+ } else {
+ re = v2/ (RE_Factor/4);
+return( v2-v1 > re );
+ }
+ }
+}
+
+int Within16RoundingErrors(bigreal v1, bigreal v2) {
+ bigreal temp=v1*v2;
+ bigreal re;
+
+ if ( temp<0 ) /* Ok, if the two values are on different sides of 0 there */
+return( false ); /* is no way they can be within a rounding error of each other */
+ else if ( temp==0 ) {
+ if ( v1==0 )
+return( v2<RE_NearZero && v2>-RE_NearZero );
+ else
+return( v1<RE_NearZero && v1>-RE_NearZero );
+ } else if ( v1>0 ) {
+ if ( v1>v2 ) { /* Rounding error from the biggest absolute value */
+ re = v1/ (RE_Factor/16);
+return( v1-v2 < re );
+ } else {
+ re = v2/ (RE_Factor/16);
+return( v2-v1 < re );
+ }
+ } else {
+ if ( v1<v2 ) {
+ re = v1/ (RE_Factor/16); /* This will be a negative number */
+return( v1-v2 > re );
+ } else {
+ re = v2/ (RE_Factor/16);
+return( v2-v1 > re );
+ }
+ }
+}
+
+int RealNear(real a,real b) {
+ real d;
+
+#ifdef FONTFORGE_CONFIG_USE_DOUBLE
+ if ( a==0 )
+return( b>-1e-8 && b<1e-8 );
+ if ( b==0 )
+return( a>-1e-8 && a<1e-8 );
+
+ d = a/(1024*1024.);
+#else /* For floats */
+ if ( a==0 )
+return( b>-1e-5 && b<1e-5 );
+ if ( b==0 )
+return( a>-1e-5 && a<1e-5 );
+
+ d = a/(1024*64.);
+#endif
+ a-=b;
+ if ( d<0 )
+return( a>d && a<-d );
+ else
+return( a>-d && a<d );
+}
+
+int RealNearish(real a,real b) {
+
+ a-=b;
+return( a<.001 && a>-.001 );
+}
+
+int RealApprox(real a,real b) {
+
+ if ( a==0 ) {
+ if ( b<.0001 && b>-.0001 )
+return( true );
+ } else if ( b==0 ) {
+ if ( a<.0001 && a>-.0001 )
+return( true );
+ } else {
+ a /= b;
+ if ( a>=.95 && a<=1.05 )
+return( true );
+ }
+return( false );
+}
+
+int RealWithin(real a,real b,real fudge) {
+
+return( b>=a-fudge && b<=a+fudge );
+}
+
+static int MinMaxWithin(Spline *spline) {
+ extended dx, dy;
+ int which;
+ extended t1, t2;
+ extended w;
+ /* We know that this "spline" is basically one dimensional. As long as its*/
+ /* extrema are between the start and end points on that line then we can */
+ /* treat it as a line. If the extrema are way outside the line segment */
+ /* then it's a line that backtracks on itself */
+
+ if ( (dx = spline->to->me.x - spline->from->me.x)<0 ) dx = -dx;
+ if ( (dy = spline->to->me.y - spline->from->me.y)<0 ) dy = -dy;
+ which = dx<dy;
+ SplineFindExtrema(&spline->splines[which],&t1,&t2);
+ if ( t1==-1 )
+return( true );
+ w = ((spline->splines[which].a*t1 + spline->splines[which].b)*t1
+ + spline->splines[which].c)*t1 + spline->splines[which].d;
+ if ( RealNear(w, (&spline->to->me.x)[which]) || RealNear(w, (&spline->from->me.x)[which]) )
+ /* Close enough */;
+ else if ( (w<(&spline->to->me.x)[which] && w<(&spline->from->me.x)[which]) ||
+ (w>(&spline->to->me.x)[which] && w>(&spline->from->me.x)[which]) )
+return( false ); /* Outside */
+
+ w = ((spline->splines[which].a*t2 + spline->splines[which].b)*t2
+ + spline->splines[which].c)*t2 + spline->splines[which].d;
+ if ( RealNear(w, (&spline->to->me.x)[which]) || RealNear(w, (&spline->from->me.x)[which]) )
+ /* Close enough */;
+ else if ( (w<(&spline->to->me.x)[which] && w<(&spline->from->me.x)[which]) ||
+ (w>(&spline->to->me.x)[which] && w>(&spline->from->me.x)[which]) )
+return( false ); /* Outside */
+
+return( true );
+}
+
+int SplineIsLinear(Spline *spline) {
+ bigreal t1,t2, t3,t4;
+ int ret;
+
+ if ( spline->knownlinear )
+return( true );
+ if ( spline->knowncurved )
+return( false );
+
+ if ( spline->splines[0].a==0 && spline->splines[0].b==0 &&
+ spline->splines[1].a==0 && spline->splines[1].b==0 )
+return( true );
+
+ /* Something is linear if the control points lie on the line between the */
+ /* two base points */
+
+ /* Vertical lines */
+ if ( RealNear(spline->from->me.x,spline->to->me.x) ) {
+ ret = RealNear(spline->from->me.x,spline->from->nextcp.x) &&
+ RealNear(spline->from->me.x,spline->to->prevcp.x);
+ if ( ! ((spline->from->nextcp.y >= spline->from->me.y &&
+ spline->from->nextcp.y <= spline->to->me.y &&
+ spline->to->prevcp.y >= spline->from->me.y &&
+ spline->to->prevcp.y <= spline->to->me.y ) ||
+ (spline->from->nextcp.y <= spline->from->me.y &&
+ spline->from->nextcp.y >= spline->to->me.y &&
+ spline->to->prevcp.y <= spline->from->me.y &&
+ spline->to->prevcp.y >= spline->to->me.y )) )
+ ret = MinMaxWithin(spline);
+ /* Horizontal lines */
+ } else if ( RealNear(spline->from->me.y,spline->to->me.y) ) {
+ ret = RealNear(spline->from->me.y,spline->from->nextcp.y) &&
+ RealNear(spline->from->me.y,spline->to->prevcp.y);
+ if ( ! ((spline->from->nextcp.x >= spline->from->me.x &&
+ spline->from->nextcp.x <= spline->to->me.x &&
+ spline->to->prevcp.x >= spline->from->me.x &&
+ spline->to->prevcp.x <= spline->to->me.x) ||
+ (spline->from->nextcp.x <= spline->from->me.x &&
+ spline->from->nextcp.x >= spline->to->me.x &&
+ spline->to->prevcp.x <= spline->from->me.x &&
+ spline->to->prevcp.x >= spline->to->me.x)) )
+ ret = MinMaxWithin(spline);
+ } else {
+ ret = true;
+ t1 = (spline->from->nextcp.y-spline->from->me.y)/(spline->to->me.y-spline->from->me.y);
+ t2 = (spline->from->nextcp.x-spline->from->me.x)/(spline->to->me.x-spline->from->me.x);
+ t3 = (spline->to->me.y-spline->to->prevcp.y)/(spline->to->me.y-spline->from->me.y);
+ t4 = (spline->to->me.x-spline->to->prevcp.x)/(spline->to->me.x-spline->from->me.x);
+ ret = (Within16RoundingErrors(t1,t2) || (RealApprox(t1,0) && RealApprox(t2,0))) &&
+ (Within16RoundingErrors(t3,t4) || (RealApprox(t3,0) && RealApprox(t4,0)));
+ if ( ret ) {
+ if ( t1<0 || t2<0 || t3<0 || t4<0 ||
+ t1>1 || t2>1 || t3>1 || t4>1 )
+ ret = MinMaxWithin(spline);
+ }
+ }
+ spline->knowncurved = !ret;
+ spline->knownlinear = ret;
+ if ( ret ) {
+ /* A few places that if the spline is knownlinear then its splines[?] */
+ /* are linear. So give the linear version and not that suggested by */
+ /* the control points */
+ spline->splines[0].a = spline->splines[0].b = 0;
+ spline->splines[0].d = spline->from->me.x;
+ spline->splines[0].c = spline->to->me.x-spline->from->me.x;
+ spline->splines[1].a = spline->splines[1].b = 0;
+ spline->splines[1].d = spline->from->me.y;
+ spline->splines[1].c = spline->to->me.y-spline->from->me.y;
+ }
+return( ret );
+}
+
+/* This routine should almost never be called now. It uses a flawed algorithm */
+/* which won't produce the best results. It gets called only when the better */
+/* approach doesn't work (singular matrices, etc.) */
+/* Old comment, back when I was confused... */
+/* Least squares tells us that:
+ | S(xi*ti^3) | | S(ti^6) S(ti^5) S(ti^4) S(ti^3) | | a |
+ | S(xi*ti^2) | = | S(ti^5) S(ti^4) S(ti^3) S(ti^2) | * | b |
+ | S(xi*ti) | | S(ti^4) S(ti^3) S(ti^2) S(ti) | | c |
+ | S(xi) | | S(ti^3) S(ti^2) S(ti) n | | d |
+ and the definition of a spline tells us:
+ | x1 | = | 1 1 1 1 | * (a b c d)
+ | x0 | = | 0 0 0 1 | * (a b c d)
+So we're a bit over specified. Let's use the last two lines of least squares
+and the 2 from the spline defn. So d==x0. Now we've got three unknowns
+and only three equations...
+
+For order2 splines we've got
+ | S(xi*ti^2) | | S(ti^4) S(ti^3) S(ti^2) | | b |
+ | S(xi*ti) | = | S(ti^3) S(ti^2) S(ti) | * | c |
+ | S(xi) | | S(ti^2) S(ti) n | | d |
+ and the definition of a spline tells us:
+ | x1 | = | 1 1 1 | * (b c d)
+ | x0 | = | 0 0 1 | * (b c d)
+=>
+ d = x0
+ b+c = x1-x0
+ S(ti^2)*b + S(ti)*c = S(xi)-n*x0
+ S(ti^2)*b + S(ti)*(x1-x0-b) = S(xi)-n*x0
+ [ S(ti^2)-S(ti) ]*b = S(xi)-S(ti)*(x1-x0) - n*x0
+*/
+
+static int GoodCurve(SplinePoint *sp, int check_prev ) {
+ bigreal dx, dy, lenx, leny;
+
+ if ( sp->pointtype!=pt_curve && sp->pointtype!=pt_hvcurve )
+return( false );
+ if ( check_prev ) {
+ dx = sp->me.x - sp->prevcp.x;
+ dy = sp->me.y - sp->prevcp.y;
+ } else {
+ dx = sp->me.x - sp->nextcp.x;
+ dy = sp->me.y - sp->nextcp.y;
+ }
+ /* If the cp is very close to the base point the point might as well be a corner */
+ if ( dx<0 ) dx = -dx;
+ if ( dy<0 ) dy = -dy;
+ if ( dx+dy<1 )
+return( false );
+
+ if ( check_prev ) {
+ if ( sp->prev==NULL )
+return( true );
+ lenx = sp->me.x - sp->prev->from->me.x;
+ leny = sp->me.y - sp->prev->from->me.y;
+ } else {
+ if ( sp->next==NULL )
+return( true );
+ lenx = sp->me.x - sp->next->to->me.x;
+ leny = sp->me.y - sp->next->to->me.y;
+ }
+ if ( lenx<0 ) lenx = -lenx;
+ if ( leny<0 ) leny = -leny;
+ if ( 50*(dx+dy) < lenx+leny )
+return( false );
+
+return( true );
+}
+
+/* pf == point from (start point) */
+/* Δf == slope from (cp(from) - from) */
+/* pt == point to (end point, t==1) */
+/* Δt == slope to (cp(to) - to) */
+
+/* A spline from pf to pt with slope vectors rf*Δf, rt*Δt is: */
+/* p(t) = pf + [ 3*rf*Δf ]*t + 3*[pt-pf+rt*Δt-2*rf*Δf] *t^2 + */
+/* [2*pf-2*pt+3*rf*Δf-3*rt*Δt]*t^3 */
+
+/* So I want */
+/* d Σ (p(t(i))-p(i))^2/ d rf == 0 */
+/* d Σ (p(t(i))-p(i))^2/ d rt == 0 */
+/* now... */
+/* d Σ (p(t(i))-p(i))^2/ d rf == 0 */
+/* => Σ 3*t*Δf*(1-2*t+t^2)*
+ * [pf-pi+ 3*(pt-pf)*t^2 + 2*(pf-pt)*t^3] +
+ * 3*[t - 2*t^2 + t^3]*Δf*rf +
+ * 3*[t^2-t^3]*Δt*rt */
+/* and... */
+/* d Σ (p(t(i))-p(i))^2/ d rt == 0 */
+/* => Σ 3*t^2*Δt*(1-t)*
+ * [pf-pi+ 3*(pt-pf)*t^2 + 2*(pf-pt)*t^3] +
+ * 3*[t - 2*t^2 + t^3]*Δf*rf +
+ * 3*[t^2-t^3]*Δt*rt */
+
+/* Now for a long time I looked at that and saw four equations and two unknowns*/
+/* That was I was trying to solve for x and y separately, and that doesn't work. */
+/* There are really just two equations and each sums over both x and y components */
+
+/* Old comment: */
+/* I used to do a least squares aproach adding two more to the above set of equations */
+/* which held the slopes constant. But that didn't work very well. So instead*/
+/* Then I tried doing the approximation, and then forcing the control points */
+/* to be in line (witht the original slopes), getting a better approximation */
+/* to "t" for each data point and then calculating an error array, approximating*/
+/* it, and using that to fix up the final result */
+/* Then I tried checking various possible cp lengths in the desired directions*/
+/* finding the best one or two, and doing a 2D binary search using that as a */
+/* starting point. */
+/* And sometimes a least squares approach will give us the right answer, so */
+/* try that too. */
+/* This still isn't as good as I'd like it... But I haven't been able to */
+/* improve it further yet */
+
+bigreal SplineLength(Spline *spline) {
+ /* I ignore the constant term. It's just an unneeded addition */
+ bigreal len, t;
+ bigreal lastx = 0, lasty = 0;
+ bigreal curx, cury;
+
+ len = 0;
+ for ( t=1.0/128; t<=1.0001 ; t+=1.0/128 ) {
+ curx = ((spline->splines[0].a*t+spline->splines[0].b)*t+spline->splines[0].c)*t;
+ cury = ((spline->splines[1].a*t+spline->splines[1].b)*t+spline->splines[1].c)*t;
+ len += sqrt( (curx-lastx)*(curx-lastx) + (cury-lasty)*(cury-lasty) );
+ lastx = curx; lasty = cury;
+ }
+return( len );
+}
+
+int SPInterpolate(const SplinePoint *sp) {
+ /* Using truetype rules, can we interpolate this point? */
+return( !sp->dontinterpolate && !sp->nonextcp && !sp->noprevcp &&
+ !sp->roundx && !sp->roundy &&
+ (RealWithin(sp->me.x,(sp->nextcp.x+sp->prevcp.x)/2,.1) &&
+ RealWithin(sp->me.y,(sp->nextcp.y+sp->prevcp.y)/2,.1)) );
+}
+
+int SpIsExtremum(SplinePoint *sp) {
+ BasePoint *ncp, *pcp;
+ BasePoint *nncp, *ppcp;
+ if ( sp->next==NULL || sp->prev==NULL )
+return( true );
+ nncp = &sp->next->to->me;
+ if ( !sp->nonextcp ) {
+ ncp = &sp->nextcp;
+ if ( !sp->next->to->noprevcp )
+ nncp = &sp->next->to->prevcp;
+ } else if ( !sp->next->to->noprevcp )
+ ncp = &sp->next->to->prevcp;
+ else
+ ncp = nncp;
+ ppcp = &sp->prev->from->me;
+ if ( !sp->noprevcp ) {
+ pcp = &sp->prevcp;
+ if ( !sp->prev->from->nonextcp )
+ ppcp = &sp->prev->from->nextcp;
+ } else if ( !sp->prev->from->nonextcp )
+ pcp = &sp->prev->from->nextcp;
+ else
+ pcp = ppcp;
+ if ((( ncp->x<sp->me.x || (ncp->x==sp->me.x && nncp->x<sp->me.x)) &&
+ (pcp->x<sp->me.x || (pcp->x==sp->me.x && ppcp->x<sp->me.x))) ||
+ ((ncp->x>sp->me.x || (ncp->x==sp->me.x && nncp->x>sp->me.x)) &&
+ (pcp->x>sp->me.x || (pcp->x==sp->me.x && ppcp->x>sp->me.x))) ||
+ (( ncp->y<sp->me.y || (ncp->y==sp->me.y && nncp->y<sp->me.y)) &&
+ (pcp->y<sp->me.y || (pcp->y==sp->me.y && ppcp->y<sp->me.y))) ||
+ ((ncp->y>sp->me.y || (ncp->y==sp->me.y && nncp->y>sp->me.y)) &&
+ (pcp->y>sp->me.y || (pcp->y==sp->me.y && ppcp->y>sp->me.y))))
+return( true );
+
+ /* These aren't true points of extrema, but they probably should be treated */
+ /* as if they were */
+ if ( !sp->nonextcp && !sp->noprevcp &&
+ ((sp->me.x==sp->nextcp.x && sp->me.x==sp->prevcp.x) ||
+ (sp->me.y==sp->nextcp.y && sp->me.y==sp->prevcp.y)) )
+return( true );
+
+return( false );
+}
+
+/* An extremum is very close to the end-point. So close that we don't want */
+/* to add a new point. Instead try moving the control points around */
+/* Options: */
+/* o if the control point is very close to the base point then remove it */
+/* o if the slope at the endpoint is in the opposite direction from */
+/* what we expect, then subtract off the components we don't like */
+/* o make the slope at the end point horizontal/vertical */
+static int ForceEndPointExtrema(Spline *s,int isto) {
+ SplinePoint *end;
+ BasePoint *cp, to, unitslope, othercpunit, myslope;
+ bigreal xdiff, ydiff, mylen, cplen, mydot, cpdot, len;
+ /* To get here we know that the extremum is extremely close to the end */
+ /* point, and adjusting the slope at the end-point may be all we need */
+ /* to do. We won't need to adjust it by much, because it is so close. */
+
+ if ( isto ) {
+ end = s->to; cp = &end->prevcp;
+ othercpunit.x = s->from->nextcp.x - s->from->me.x;
+ othercpunit.y = s->from->nextcp.y - s->from->me.y;
+ } else {
+ end = s->from; cp = &end->nextcp;
+ othercpunit.x = s->to->prevcp.x-s->to->me.x;
+ othercpunit.y = s->to->prevcp.y-s->to->me.y;
+ }
+ cplen = othercpunit.x*othercpunit.x + othercpunit.y*othercpunit.y;
+ cplen = sqrt(cplen);
+ myslope.x = cp->x - end->me.x;
+ myslope.y = cp->y - end->me.y;
+ mylen = sqrt(myslope.x*myslope.x + myslope.y*myslope.y);
+
+ unitslope.x = s->to->me.x - s->from->me.x;
+ unitslope.y = s->to->me.y - s->from->me.y;
+ len = unitslope.x*unitslope.x + unitslope.y*unitslope.y;
+ if ( len==0 )
+return( -1 );
+ len = sqrt(len);
+ if ( mylen<30*len && mylen<cplen && mylen<1 ) {
+ if ( isto ) {
+ s->to->noprevcp = true;
+ s->to->prevcp = s->to->me;
+ } else {
+ s->from->nonextcp = true;
+ s->from->nextcp = s->from->me;
+ }
+ end->pointtype = pt_corner;
+ SplineRefigure(s);
+return( true ); /* We changed the slope */
+ }
+ unitslope.x /= len; unitslope.y /= len;
+
+ mydot = myslope.x*unitslope.y - myslope.y*unitslope.x;
+ cpdot = othercpunit.x*unitslope.y - othercpunit.y*unitslope.y;
+ if ( mydot*cpdot<0 && mylen<cplen ) {
+ /* The two control points are in opposite directions with respect to */
+ /* the main spline, and ours isn't very big, so make it point along */
+ /* the spline */
+ end->pointtype = pt_corner;
+ if ( isto ) {
+ s->to->prevcp.x = s->to->me.x - mydot*unitslope.x;
+ s->to->prevcp.y = s->to->me.y - mydot*unitslope.y;
+ } else {
+ s->from->nextcp.x = s->from->me.x + mydot*unitslope.x;
+ s->from->nextcp.y = s->from->me.y + mydot*unitslope.y;
+ }
+ SplineRefigure(s);
+return( true ); /* We changed the slope */
+ }
+
+ if ( (xdiff = cp->x - end->me.x)<0 ) xdiff = -xdiff;
+ if ( (ydiff = cp->y - end->me.y)<0 ) ydiff = -ydiff;
+
+ to = *cp;
+ if ( xdiff<ydiff/10.0 && xdiff>0 ) {
+ to.x = end->me.x;
+ end->pointtype = pt_corner;
+ SPAdjustControl(end,cp,&to,s->order2);
+return( true ); /* We changed the slope */
+ } else if ( ydiff<xdiff/10 && ydiff>0 ) {
+ to.y = end->me.y;
+ end->pointtype = pt_corner;
+ SPAdjustControl(end,cp,&to,s->order2);
+return( true ); /* We changed the slope */
+ }
+
+return( -1 ); /* Didn't do anything */
+}
+
+int Spline1DCantExtremeX(const Spline *s) {
+ /* Sometimes we get rounding errors when converting from control points */
+ /* to spline coordinates. These rounding errors can give us false */
+ /* extrema. So do a sanity check to make sure it is possible to get */
+ /* any extrema before actually looking for them */
+
+ if ( s->from->me.x>=s->from->nextcp.x &&
+ s->from->nextcp.x>=s->to->prevcp.x &&
+ s->to->prevcp.x>=s->to->me.x )
+return( true );
+ if ( s->from->me.x<=s->from->nextcp.x &&
+ s->from->nextcp.x<=s->to->prevcp.x &&
+ s->to->prevcp.x<=s->to->me.x )
+return( true );
+
+return( false );
+}
+
+int Spline1DCantExtremeY(const Spline *s) {
+ /* Sometimes we get rounding errors when converting from control points */
+ /* to spline coordinates. These rounding errors can give us false */
+ /* extrema. So do a sanity check to make sure it is possible to get */
+ /* any extrema before actually looking for them */
+
+ if ( s->from->me.y>=s->from->nextcp.y &&
+ s->from->nextcp.y>=s->to->prevcp.y &&
+ s->to->prevcp.y>=s->to->me.y )
+return( true );
+ if ( s->from->me.y<=s->from->nextcp.y &&
+ s->from->nextcp.y<=s->to->prevcp.y &&
+ s->to->prevcp.y<=s->to->me.y )
+return( true );
+
+return( false );
+}
+
+Spline *SplineAddExtrema(Spline *s,int always,real lenbound, real offsetbound,
+ DBounds *b) {
+ /* First find the extrema, if any */
+ bigreal t[4], min;
+ uint8 rmfrom[4], rmto[4];
+ int p, i,j, p_s, mini, restart, forced;
+ SplinePoint *sp;
+ real len;
+
+ if ( !always ) {
+ real xlen, ylen;
+ xlen = (s->from->me.x-s->to->me.x);
+ ylen = (s->from->me.y-s->to->me.y);
+ len = xlen*xlen + ylen*ylen;
+ lenbound *= lenbound;
+ if ( len < lenbound ) {
+ len = SplineLength(s);
+ len *= len;
+ }
+ }
+
+ memset(rmfrom,0,sizeof(rmfrom));
+ memset(rmto,0,sizeof(rmto));
+
+ for (;;) {
+ if ( s->knownlinear )
+return(s);
+ p = 0;
+ if ( Spline1DCantExtremeX(s) ) {
+ /* If the control points are at the end-points then this (1D) spline is */
+ /* basically a line. But rounding errors can give us very faint extrema */
+ /* if we look for them */
+ } else if ( s->splines[0].a!=0 ) {
+ bigreal d = 4*s->splines[0].b*s->splines[0].b-4*3*s->splines[0].a*s->splines[0].c;
+ if ( d>0 ) {
+ extended t1, t2;
+ d = sqrt(d);
+ t1 = (-2*s->splines[0].b+d)/(2*3*s->splines[0].a);
+ t2 = (-2*s->splines[0].b-d)/(2*3*s->splines[0].a);
+ t[p++] = CheckExtremaForSingleBitErrors(&s->splines[0],t1,t2);
+ t[p++] = CheckExtremaForSingleBitErrors(&s->splines[0],t2,t1);
+ }
+ } else if ( s->splines[0].b!=0 )
+ t[p++] = -s->splines[0].c/(2*s->splines[0].b);
+ if ( !always ) {
+ /* Generally we are only interested in extrema on long splines, or */
+ /* extrema which are extrema for the entire contour, not just this */
+ /* spline */
+ /* Also extrema which are very close to one of the end-points can */
+ /* be ignored. */
+ /* No they can't. But we need to remove the original point in this*/
+ /* case */
+ for ( i=0; i<p; ++i ) {
+ real x = ((s->splines[0].a*t[i]+s->splines[0].b)*t[i]+s->splines[0].c)*t[i]+s->splines[0].d;
+ real y = ((s->splines[1].a*t[i]+s->splines[1].b)*t[i]+s->splines[1].c)*t[i]+s->splines[1].d;
+ int close_from = ( x-s->from->me.x<offsetbound && x-s->from->me.x>-offsetbound) &&
+ ( y-s->from->me.y<10*offsetbound && y-s->from->me.y>-10*offsetbound );
+ int close_to = ( x-s->to->me.x<offsetbound && x-s->to->me.x>-offsetbound) &&
+ ( y-s->to->me.y<10*offsetbound && y-s->to->me.y>-10*offsetbound );
+ int remove_from = close_from && GoodCurve(s->from,true) && !SpIsExtremum(s->from);
+ int remove_to = close_to && GoodCurve(s->to,false) && !SpIsExtremum(s->to);
+ if (( x>b->minx && x<b->maxx && len<lenbound ) ||
+ (close_from && !remove_from) || (close_to && !remove_to) ) {
+ --p;
+ for ( j=i; j<p; ++j )
+ t[j] = t[j+1];
+ --i;
+ } else {
+ rmfrom[i] = remove_from;
+ rmto[i] = remove_to;
+ }
+ }
+ }
+
+ p_s = p;
+ if ( Spline1DCantExtremeY(s) ) {
+ /* If the control points are at the end-points then this (1D) spline is */
+ /* basically a line. But rounding errors can give us very faint extrema */
+ /* if we look for them */
+ } else if ( s->splines[1].a!=0 ) {
+ bigreal d = 4*s->splines[1].b*s->splines[1].b-4*3*s->splines[1].a*s->splines[1].c;
+ if ( d>0 ) {
+ extended t1,t2;
+ d = sqrt(d);
+ t1 = (-2*s->splines[1].b+d)/(2*3*s->splines[1].a);
+ t2 = (-2*s->splines[1].b-d)/(2*3*s->splines[1].a);
+ t[p++] = CheckExtremaForSingleBitErrors(&s->splines[1],t1,t2);
+ t[p++] = CheckExtremaForSingleBitErrors(&s->splines[1],t2,t1);
+ }
+ } else if ( s->splines[1].b!=0 )
+ t[p++] = -s->splines[1].c/(2*s->splines[1].b);
+ if ( !always ) {
+ for ( i=p_s; i<p; ++i ) {
+ real x = ((s->splines[0].a*t[i]+s->splines[0].b)*t[i]+s->splines[0].c)*t[i]+s->splines[0].d;
+ real y = ((s->splines[1].a*t[i]+s->splines[1].b)*t[i]+s->splines[1].c)*t[i]+s->splines[1].d;
+ int close_from =( y-s->from->me.y<offsetbound && y-s->from->me.y>-offsetbound ) &&
+ ( x-s->from->me.x<offsetbound && x-s->from->me.x>-offsetbound);
+ int close_to = ( y-s->to->me.y<offsetbound && y-s->to->me.y>-offsetbound ) &&
+ ( x-s->to->me.x<offsetbound && x-s->to->me.x>-offsetbound);
+ int remove_from = close_from && GoodCurve(s->from,true) && !SpIsExtremum(s->from);
+ int remove_to = close_to && GoodCurve(s->to,false) && !SpIsExtremum(s->to);
+ if (( y>b->miny && y<b->maxy && len<lenbound ) ||
+ (close_from && !remove_from) || (close_to && !remove_to) ) {
+ --p;
+ for ( j=i; j<p; ++j )
+ t[j] = t[j+1];
+ --i;
+ } else {
+ rmfrom[i] = remove_from;
+ rmto[i] = remove_to;
+ }
+ }
+ }
+
+ /* Throw out any t values which are not between 0 and 1 */
+ /* (we do a little fudging near the endpoints so we don't get confused */
+ /* by rounding errors) */
+ restart = false;
+ for ( i=0; i<p; ++i ) {
+ if ( t[i]>0 && t[i]<.05 ) {
+ BasePoint test;
+ /* Expand stroke gets very confused on zero-length splines so */
+ /* don't let that happen */
+ test.x = ((s->splines[0].a*t[i]+s->splines[0].b)*t[i]+s->splines[0].c)*t[i]+s->splines[0].d - s->from->me.x;
+ test.y = ((s->splines[1].a*t[i]+s->splines[1].b)*t[i]+s->splines[1].c)*t[i]+s->splines[1].d - s->from->me.y;
+ if (( test.x*test.x + test.y*test.y<1e-7 ) && ( test.x*test.x + test.y*test.y>0.0 )) {
+ if ( (forced = ForceEndPointExtrema(s,0))>=0 ) {
+ if ( forced && s->from->prev!=NULL )
+ SplineAddExtrema(s->from->prev,always,lenbound,offsetbound,b);
+ restart = true;
+ break;
+ }
+ }
+ }
+ if ( t[i]<1 && t[i]>.95 ) {
+ BasePoint test;
+ test.x = ((s->splines[0].a*t[i]+s->splines[0].b)*t[i]+s->splines[0].c)*t[i]+s->splines[0].d - s->to->me.x;
+ test.y = ((s->splines[1].a*t[i]+s->splines[1].b)*t[i]+s->splines[1].c)*t[i]+s->splines[1].d - s->to->me.y;
+ if (( test.x*test.x + test.y*test.y < 1e-7 ) && ( test.x*test.x + test.y*test.y>0.0 )) {
+ if ( ForceEndPointExtrema(s,1)>=0 ) {
+ /* don't need to fix up next, because splinesetaddextrema will do that soon */
+ restart = true;
+ break;
+ }
+ }
+ }
+
+ if ( t[i]<=0 || t[i]>=1.0 ) {
+ --p;
+ for ( j=i; j<p; ++j ) {
+ t[j] = t[j+1];
+ rmfrom[j] = rmfrom[j+1];
+ rmto[j] = rmto[j+1];
+ }
+ --i;
+ }
+ }
+ if ( restart )
+ continue;
+
+ if ( p==0 )
+return(s);
+
+ /* Find the smallest of all the interesting points */
+ min = t[0]; mini = 0;
+ for ( i=1; i<p; ++i ) {
+ if ( t[i]<min ) {
+ min=t[i];
+ mini = i;
+ }
+ }
+ sp = SplineBisect(s,min);
+/* On the mac we get rounding errors in the bisect routine */
+ { bigreal dx, dy;
+ if ( (dx = sp->me.x - sp->prevcp.x)<0 ) dx=-dx;
+ if ( (dy = sp->me.y - sp->prevcp.y)<0 ) dy=-dy;
+ if ( dx!=0 && dy!=0 ) {
+ if ( dx<dy )
+ sp->prevcp.x = sp->me.x;
+ else
+ sp->prevcp.y = sp->me.y;
+ }
+ if ( (dx = sp->me.x - sp->nextcp.x)<0 ) dx=-dx;
+ if ( (dy = sp->me.y - sp->nextcp.y)<0 ) dy=-dy;
+ if ( dx!=0 && dy!=0 ) {
+ if ( dx<dy )
+ sp->nextcp.x = sp->me.x;
+ else
+ sp->nextcp.y = sp->me.y;
+ }
+ }
+
+ if ( rmfrom[mini] ) sp->prev->from->ticked = true;
+ if ( rmto[mini] ) sp->next->to->ticked = true;
+ s = sp->next;
+ if ( p==1 )
+return( s );
+ /* Don't try to use any other computed t values, it is easier to */
+ /* recompute them than to try and figure out what they map to on the */
+ /* new spline */
+ }
+}
+
+SplineFont *SplineFontEmpty(void) {
+ extern int default_fv_row_count, default_fv_col_count;
+ time_t now;
+ SplineFont *sf;
+
+ sf = calloc(1,sizeof(SplineFont));
+ sf->pfminfo.fstype = -1;
+ sf->pfminfo.stylemap = -1;
+ sf->top_enc = -1;
+ sf->map = NULL;
+ sf->macstyle = -1;
+ sf->desired_row_cnt = default_fv_row_count; sf->desired_col_cnt = default_fv_col_count;
+ sf->display_antialias = default_fv_antialias;
+ sf->display_bbsized = default_fv_bbsized;
+ sf->display_size = -default_fv_font_size;
+ sf->display_layer = ly_fore;
+ sf->sfntRevision = sfntRevisionUnset;
+ sf->woffMajor = woffUnset;
+ sf->woffMinor = woffUnset;
+ sf->pfminfo.winascent_add = sf->pfminfo.windescent_add = true;
+ sf->pfminfo.hheadascent_add = sf->pfminfo.hheaddescent_add = true;
+ sf->pfminfo.typoascent_add = sf->pfminfo.typodescent_add = true;
+ if ( TTFFoundry!=NULL )
+ strncpy(sf->pfminfo.os2_vendor,TTFFoundry,4);
+ else
+ memcpy(sf->pfminfo.os2_vendor,"PfEd",4);
+ sf->for_new_glyphs = DefaultNameListForNewFonts();
+ time(&now);
+ sf->creationtime = sf->modificationtime = now;
+
+ sf->layer_cnt = 2;
+ sf->layers = calloc(2,sizeof(LayerInfo));
+ sf->layers[ly_back].name = copy(_("Back"));
+ sf->layers[ly_back].background = true;
+ sf->layers[ly_fore].name = copy(_("Fore"));
+ sf->layers[ly_fore].background = false;
+ sf->grid.background = true;
+
+return( sf );
+}
+
+static void SFChangeXUID(SplineFont *sf, int random) {
+ char *pt, *new, *npt;
+ int val;
+
+ if ( sf->xuid==NULL )
+return;
+ pt = strrchr(sf->xuid,' ');
+ if ( pt==NULL )
+ pt = strchr(sf->xuid,'[');
+ if ( pt==NULL )
+ pt = sf->xuid;
+ else
+ ++pt;
+ if ( random )
+ val = rand()&0xffffff;
+ else {
+ val = strtol(pt,NULL,10);
+ val = (val+1)&0xffffff;
+ }
+
+ new = malloc(pt-sf->xuid+12);
+ strncpy(new,sf->xuid,pt-sf->xuid);
+ npt = new + (pt-sf->xuid);
+ if ( npt==new ) *npt++ = '[';
+ sprintf(npt, "%d]", val );
+ free(sf->xuid); sf->xuid = new;
+ sf->changed = true;
+ sf->changed_since_xuidchanged = false;
+}
+
+void SFIncrementXUID(SplineFont *sf) {
+ SFChangeXUID(sf,false);
+}
+
+void SplineCharTangentNextCP(SplinePoint *sp) {
+ bigreal len;
+ BasePoint *bp, unit;
+ extern int snaptoint;
+
+ if ( sp->prev==NULL )
+return;
+ bp = &sp->prev->from->me;
+
+ unit.y = sp->me.y-bp->y; unit.x = sp->me.x-bp->x;
+ len = sqrt( unit.x*unit.x + unit.y*unit.y );
+ if ( len!=0 ) {
+ unit.x /= len;
+ unit.y /= len;
+ }
+ len = sqrt((sp->nextcp.y-sp->me.y)*(sp->nextcp.y-sp->me.y) + (sp->nextcp.x-sp->me.x)*(sp->nextcp.x-sp->me.x));
+ sp->nextcp.x = sp->me.x + len*unit.x;
+ sp->nextcp.y = sp->me.y + len*unit.y;
+ if ( snaptoint ) {
+ sp->nextcp.x = rint(sp->nextcp.x);
+ sp->nextcp.y = rint(sp->nextcp.y);
+ } else {
+ sp->nextcp.x = rint(sp->nextcp.x*1024)/1024;
+ sp->nextcp.y = rint(sp->nextcp.y*1024)/1024;
+ }
+ if ( sp->next!=NULL && sp->next->order2 )
+ sp->next->to->prevcp = sp->nextcp;
+}
+
+void SplineCharTangentPrevCP(SplinePoint *sp) {
+ bigreal len;
+ BasePoint *bp, unit;
+ extern int snaptoint;
+
+ if ( sp->next==NULL )
+return;
+ bp = &sp->next->to->me;
+
+ unit.y = sp->me.y-bp->y; unit.x = sp->me.x-bp->x;
+ len = sqrt( unit.x*unit.x + unit.y*unit.y );
+ if ( len!=0 ) {
+ unit.x /= len;
+ unit.y /= len;
+ }
+ len = sqrt((sp->prevcp.y-sp->me.y)*(sp->prevcp.y-sp->me.y) + (sp->prevcp.x-sp->me.x)*(sp->prevcp.x-sp->me.x));
+ sp->prevcp.x = sp->me.x + len*unit.x;
+ sp->prevcp.y = sp->me.y + len*unit.y;
+ if ( snaptoint ) {
+ sp->prevcp.x = rint(sp->prevcp.x);
+ sp->prevcp.y = rint(sp->prevcp.y);
+ } else {
+ sp->prevcp.x = rint(sp->prevcp.x*1024)/1024;
+ sp->prevcp.y = rint(sp->prevcp.y*1024)/1024;
+ }
+ if ( sp->prev!=NULL && sp->prev->order2 )
+ sp->prev->from->nextcp = sp->prevcp;
+}
+
+void BP_HVForce(BasePoint *vector) {
+ /* Force vector to be horizontal/vertical */
+ bigreal dx, dy, len;
+
+ if ( (dx= vector->x)<0 ) dx = -dx;
+ if ( (dy= vector->y)<0 ) dy = -dy;
+ if ( dx==0 || dy==0 )
+return;
+ len = sqrt(dx*dx + dy*dy);
+ if ( dx>dy ) {
+ vector->x = vector->x<0 ? -len : len;
+ vector->y = 0;
+ } else {
+ vector->y = vector->y<0 ? -len : len;
+ vector->x = 0;
+ }
+}
+
+#define NICE_PROPORTION .39
+void SplineCharDefaultNextCP(SplinePoint *base) {
+ SplinePoint *prev=NULL, *next;
+ bigreal len, plen, ulen;
+ BasePoint unit;
+ extern int snaptoint;
+
+ if ( base->next==NULL )
+return;
+ if ( base->next->order2 ) {
+ SplineRefigureFixup(base->next);
+return;
+ }
+ if ( !base->nextcpdef ) {
+ if ( base->pointtype==pt_tangent )
+ SplineCharTangentNextCP(base);
+return;
+ }
+ next = base->next->to;
+ if ( base->prev!=NULL )
+ prev = base->prev->from;
+
+ len = NICE_PROPORTION * sqrt((base->me.x-next->me.x)*(base->me.x-next->me.x) +
+ (base->me.y-next->me.y)*(base->me.y-next->me.y));
+ unit.x = next->me.x - base->me.x;
+ unit.y = next->me.y - base->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ base->nonextcp = false;
+
+ if ( base->pointtype == pt_curve || base->pointtype == pt_hvcurve ) {
+ if ( prev!=NULL && (base->prevcpdef || base->noprevcp)) {
+ unit.x = next->me.x - prev->me.x;
+ unit.y = next->me.y - prev->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ if ( base->pointtype == pt_hvcurve )
+ BP_HVForce(&unit);
+ plen = sqrt((base->prevcp.x-base->me.x)*(base->prevcp.x-base->me.x) +
+ (base->prevcp.y-base->me.y)*(base->prevcp.y-base->me.y));
+ base->prevcp.x = base->me.x - plen*unit.x;
+ base->prevcp.y = base->me.y - plen*unit.y;
+ if ( snaptoint ) {
+ base->prevcp.x = rint(base->prevcp.x);
+ base->prevcp.y = rint(base->prevcp.y);
+ }
+ SplineRefigureFixup(base->prev);
+ } else if ( prev!=NULL ) {
+ /* The prev control point is fixed. So we've got to use the same */
+ /* angle it uses */
+ unit.x = base->me.x-base->prevcp.x;
+ unit.y = base->me.y-base->prevcp.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ } else {
+ base->prevcp = base->me;
+ base->noprevcp = true;
+ base->prevcpdef = true;
+ }
+ if ( base->pointtype == pt_hvcurve )
+ BP_HVForce(&unit);
+ } else if ( base->pointtype == pt_corner ) {
+ if ( next->pointtype != pt_curve && next->pointtype != pt_hvcurve ) {
+ base->nonextcp = true;
+ }
+ } else /* tangent */ {
+ if ( next->pointtype != pt_curve ) {
+ base->nonextcp = true;
+ } else {
+ if ( prev!=NULL ) {
+ if ( !base->noprevcp ) {
+ plen = sqrt((base->prevcp.x-base->me.x)*(base->prevcp.x-base->me.x) +
+ (base->prevcp.y-base->me.y)*(base->prevcp.y-base->me.y));
+ base->prevcp.x = base->me.x - plen*unit.x;
+ base->prevcp.y = base->me.y - plen*unit.y;
+ SplineRefigureFixup(base->prev);
+ }
+ unit.x = base->me.x-prev->me.x;
+ unit.y = base->me.y-prev->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ }
+ }
+ }
+ if ( base->nonextcp )
+ base->nextcp = base->me;
+ else {
+ base->nextcp.x = base->me.x + len*unit.x;
+ base->nextcp.y = base->me.y + len*unit.y;
+ if ( snaptoint ) {
+ base->nextcp.x = rint(base->nextcp.x);
+ base->nextcp.y = rint(base->nextcp.y);
+ } else {
+ base->nextcp.x = rint(base->nextcp.x*1024)/1024;
+ base->nextcp.y = rint(base->nextcp.y*1024)/1024;
+ }
+ if ( base->next != NULL )
+ SplineRefigureFixup(base->next);
+ }
+}
+
+void SplineCharDefaultPrevCP(SplinePoint *base) {
+ SplinePoint *next=NULL, *prev;
+ bigreal len, nlen, ulen;
+ BasePoint unit;
+ extern int snaptoint;
+
+ if ( base->prev==NULL )
+return;
+ if ( base->prev->order2 ) {
+ SplineRefigureFixup(base->prev);
+return;
+ }
+ if ( !base->prevcpdef ) {
+ if ( base->pointtype==pt_tangent )
+ SplineCharTangentPrevCP(base);
+return;
+ }
+ prev = base->prev->from;
+ if ( base->next!=NULL )
+ next = base->next->to;
+
+ len = NICE_PROPORTION * sqrt((base->me.x-prev->me.x)*(base->me.x-prev->me.x) +
+ (base->me.y-prev->me.y)*(base->me.y-prev->me.y));
+ unit.x = prev->me.x - base->me.x;
+ unit.y = prev->me.y - base->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ base->noprevcp = false;
+
+ if ( base->pointtype == pt_curve || base->pointtype == pt_hvcurve ) {
+ if ( next!=NULL && (base->nextcpdef || base->nonextcp)) {
+ unit.x = prev->me.x - next->me.x;
+ unit.y = prev->me.y - next->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ if ( base->pointtype == pt_hvcurve )
+ BP_HVForce(&unit);
+ nlen = sqrt((base->nextcp.x-base->me.x)*(base->nextcp.x-base->me.x) +
+ (base->nextcp.y-base->me.y)*(base->nextcp.y-base->me.y));
+ base->nextcp.x = base->me.x - nlen*unit.x;
+ base->nextcp.y = base->me.y - nlen*unit.y;
+ if ( snaptoint ) {
+ base->nextcp.x = rint(base->nextcp.x);
+ base->nextcp.y = rint(base->nextcp.y);
+ }
+ SplineRefigureFixup(base->next);
+ } else if ( next!=NULL ) {
+ /* The next control point is fixed. So we got to use the same */
+ /* angle it uses */
+ unit.x = base->me.x-base->nextcp.x;
+ unit.y = base->me.y-base->nextcp.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ } else {
+ base->nextcp = base->me;
+ base->nonextcp = true;
+ base->nextcpdef = true;
+ }
+ if ( base->pointtype == pt_hvcurve )
+ BP_HVForce(&unit);
+ } else if ( base->pointtype == pt_corner ) {
+ if ( prev->pointtype != pt_curve && prev->pointtype != pt_hvcurve ) {
+ base->noprevcp = true;
+ }
+ } else /* tangent */ {
+ if ( prev->pointtype != pt_curve ) {
+ base->noprevcp = true;
+ } else {
+ if ( next!=NULL ) {
+ if ( !base->nonextcp ) {
+ nlen = sqrt((base->nextcp.x-base->me.x)*(base->nextcp.x-base->me.x) +
+ (base->nextcp.y-base->me.y)*(base->nextcp.y-base->me.y));
+ base->nextcp.x = base->me.x - nlen*unit.x;
+ base->nextcp.y = base->me.y - nlen*unit.y;
+ SplineRefigureFixup(base->next);
+ }
+ unit.x = base->me.x-next->me.x;
+ unit.y = base->me.y-next->me.y;
+ ulen = sqrt(unit.x*unit.x + unit.y*unit.y);
+ if ( ulen!=0 )
+ unit.x /= ulen, unit.y /= ulen;
+ }
+ }
+ }
+ if ( base->noprevcp )
+ base->prevcp = base->me;
+ else {
+ base->prevcp.x = base->me.x + len*unit.x;
+ base->prevcp.y = base->me.y + len*unit.y;
+ if ( snaptoint ) {
+ base->prevcp.x = rint(base->prevcp.x);
+ base->prevcp.y = rint(base->prevcp.y);
+ } else {
+ base->prevcp.x = rint(base->prevcp.x*1024)/1024;
+ base->prevcp.y = rint(base->prevcp.y*1024)/1024;
+ }
+ if ( base->prev!=NULL )
+ SplineRefigureFixup(base->prev);
+ }
+}
+
+void SPTouchControl(SplinePoint *sp,BasePoint *which, int order2)
+{
+ BasePoint to = *which;
+ SPAdjustControl( sp, which, &to, order2 );
+}
+
+void SPAdjustControl(SplinePoint *sp,BasePoint *cp, BasePoint *to,int order2) {
+ BasePoint *othercp = cp==&sp->nextcp?&sp->prevcp:&sp->nextcp;
+ int refig = false, otherchanged = false;
+
+ if ( sp->ttfindex==0xffff && order2 ) {
+ /* If the point itself is implied, then it's the control points that */
+ /* are fixed. Moving a CP should move the implied point so that it */
+ /* continues to be in the right place */
+ sp->me.x = (to->x+othercp->x)/2;
+ sp->me.y = (to->y+othercp->y)/2;
+ *cp = *to;
+ refig = true;
+ } else if ( sp->pointtype==pt_corner ) {
+ *cp = *to;
+ } else if ( sp->pointtype==pt_curve || sp->pointtype==pt_hvcurve ) {
+ if ( sp->pointtype==pt_hvcurve ) {
+ BasePoint diff;
+ diff.x = to->x - sp->me.x;
+ diff.y = to->y - sp->me.y;
+ BP_HVForce(&diff);
+ cp->x = sp->me.x + diff.x;
+ cp->y = sp->me.y + diff.y;
+ } else {
+ *cp = *to;
+ }
+ if (( cp->x!=sp->me.x || cp->y!=sp->me.y ) &&
+ (!order2 ||
+ (cp==&sp->nextcp && sp->next!=NULL && sp->next->to->ttfindex==0xffff) ||
+ (cp==&sp->prevcp && sp->prev!=NULL && sp->prev->from->ttfindex==0xffff)) ) {
+ bigreal len1, len2;
+ len1 = sqrt((cp->x-sp->me.x)*(cp->x-sp->me.x) +
+ (cp->y-sp->me.y)*(cp->y-sp->me.y));
+ len2 = sqrt((othercp->x-sp->me.x)*(othercp->x-sp->me.x) +
+ (othercp->y-sp->me.y)*(othercp->y-sp->me.y));
+ len2 /= len1;
+ othercp->x = len2 * (sp->me.x-cp->x) + sp->me.x;
+ othercp->y = len2 * (sp->me.y-cp->y) + sp->me.y;
+ otherchanged = true;
+ if ( sp->next!=NULL && othercp==&sp->nextcp ) {
+ if ( order2 ) sp->next->to->prevcp = *othercp;
+ SplineRefigure(sp->next);
+ } else if ( sp->prev!=NULL && othercp==&sp->prevcp ) {
+ if ( order2 ) sp->prev->from->nextcp = *othercp;
+ SplineRefigure(sp->prev);
+ }
+ }
+ if ( cp==&sp->nextcp ) sp->prevcpdef = false;
+ else sp->nextcpdef = false;
+ } else {
+ BasePoint *bp;
+ if ( cp==&sp->prevcp && sp->next!=NULL )
+ bp = &sp->next->to->me;
+ else if ( cp==&sp->nextcp && sp->prev!=NULL )
+ bp = &sp->prev->from->me;
+ else
+ bp = NULL;
+ if ( bp!=NULL ) {
+ real angle = atan2(bp->y-sp->me.y,bp->x-sp->me.x);
+ real len = sqrt((bp->x-sp->me.x)*(bp->x-sp->me.x) + (bp->y-sp->me.y)*(bp->y-sp->me.y));
+ real dotprod =
+ ((to->x-sp->me.x)*(bp->x-sp->me.x) +
+ (to->y-sp->me.y)*(bp->y-sp->me.y));
+ if ( len!=0 ) {
+ dotprod /= len;
+ if ( dotprod>0 ) dotprod = 0;
+ cp->x = sp->me.x + dotprod*cos(angle);
+ cp->y = sp->me.y + dotprod*sin(angle);
+ }
+ }
+ }
+
+ if ( order2 ) {
+ if ( (cp==&sp->nextcp || otherchanged) && sp->next!=NULL ) {
+ SplinePoint *osp = sp->next->to;
+ if ( osp->ttfindex==0xffff ) {
+ osp->prevcp = sp->nextcp;
+ osp->me.x = (osp->prevcp.x+osp->nextcp.x)/2;
+ osp->me.y = (osp->prevcp.y+osp->nextcp.y)/2;
+ SplineRefigure(osp->next);
+ }
+ }
+ if ( (cp==&sp->prevcp || otherchanged) && sp->prev!=NULL ) {
+ SplinePoint *osp = sp->prev->from;
+ if ( osp->ttfindex==0xffff ) {
+ osp->nextcp = sp->prevcp;
+ osp->me.x = (osp->prevcp.x+osp->nextcp.x)/2;
+ osp->me.y = (osp->prevcp.y+osp->nextcp.y)/2;
+ SplineRefigure(osp->prev);
+ }
+ }
+ }
+
+ if ( cp->x==sp->me.x && cp->y==sp->me.y ) {
+ if ( cp==&sp->nextcp ) sp->nonextcp = true;
+ else sp->noprevcp = true;
+ } else {
+ if ( cp==&sp->nextcp ) sp->nonextcp = false;
+ else sp->noprevcp = false;
+ }
+ if ( cp==&sp->nextcp ) sp->nextcpdef = false;
+ else sp->prevcpdef = false;
+
+ if ( sp->next!=NULL && cp==&sp->nextcp ) {
+ if ( order2 && !sp->nonextcp ) {
+ sp->next->to->prevcp = *cp;
+ sp->next->to->noprevcp = false;
+ }
+ SplineRefigureFixup(sp->next);
+ }
+ if ( sp->prev!=NULL && cp==&sp->prevcp ) {
+ if ( order2 && !sp->noprevcp ) {
+ sp->prev->from->nextcp = *cp;
+ sp->prev->from->nonextcp = false;
+ }
+ SplineRefigureFixup(sp->prev);
+ }
+ if ( refig ) {
+ SplineRefigure(sp->prev);
+ SplineRefigure(sp->next);
+ }
+}
+
+SplineSet *SplineSetReverse(SplineSet *spl) {
+ Spline *spline, *first, *next;
+ BasePoint tp;
+ SplinePoint *temp;
+ int flag;
+ int i;
+ /* reverse the splineset so that what was the start point becomes the end */
+ /* and vice versa. This entails reversing every individual spline, and */
+ /* each point */
+
+ first = NULL;
+ spline = spl->first->next;
+ if ( spline==NULL )
+return( spl ); /* Only one point, reversal is meaningless */
+
+ tp = spline->from->nextcp;
+ spline->from->nextcp = spline->from->prevcp;
+ spline->from->prevcp = tp;
+ flag = spline->from->nonextcp;
+ spline->from->nonextcp = spline->from->noprevcp;
+ spline->from->noprevcp = flag;
+ flag = spline->from->nextcpdef;
+ spline->from->nextcpdef = spline->from->prevcpdef;
+ spline->from->prevcpdef = flag;
+
+ for ( ; spline!=NULL && spline!=first; spline=next ) {
+ next = spline->to->next;
+
+ if ( spline->to!=spl->first ) { /* On a closed spline don't want to reverse the first point twice */
+ tp = spline->to->nextcp;
+ spline->to->nextcp = spline->to->prevcp;
+ spline->to->prevcp = tp;
+ flag = spline->to->nonextcp;
+ spline->to->nonextcp = spline->to->noprevcp;
+ spline->to->noprevcp = flag;
+ flag = spline->to->nextcpdef;
+ spline->to->nextcpdef = spline->to->prevcpdef;
+ spline->to->prevcpdef = flag;
+ }
+
+ temp = spline->to;
+ spline->to = spline->from;
+ spline->from = temp;
+ spline->from->next = spline;
+ spline->to->prev = spline;
+ SplineRefigure(spline);
+ if ( first==NULL ) first = spline;
+ }
+
+ if ( spl->first!=spl->last ) {
+ temp = spl->first;
+ spl->first = spl->last;
+ spl->start_offset = 0;
+ spl->last = temp;
+ spl->first->prev = NULL;
+ spl->last->next = NULL;
+ }
+
+ if ( spl->spiro_cnt>2 ) {
+ for ( i=(spl->spiro_cnt-1)/2-1; i>=0; --i ) {
+ spiro_cp temp_cp = spl->spiros[i];
+ spl->spiros[i] = spl->spiros[spl->spiro_cnt-2-i];
+ spl->spiros[spl->spiro_cnt-2-i] = temp_cp;
+ }
+ if ( (spl->spiros[spl->spiro_cnt-2].ty&0x7f)==SPIRO_OPEN_CONTOUR ) {
+ spl->spiros[spl->spiro_cnt-2].ty = (spl->spiros[0].ty&0x7f) | (spl->spiros[spl->spiro_cnt-2].ty&0x80);
+ spl->spiros[0].ty = SPIRO_OPEN_CONTOUR | (spl->spiros[0].ty&0x80);
+ }
+ for ( i=spl->spiro_cnt-2; i>=0; --i ) {
+ if ( (spl->spiros[i].ty&0x7f) == SPIRO_LEFT )
+ spl->spiros[i].ty = SPIRO_RIGHT | (spl->spiros[i].ty&0x80);
+ else if ( (spl->spiros[i].ty&0x7f) == SPIRO_RIGHT )
+ spl->spiros[i].ty = SPIRO_LEFT | (spl->spiros[i].ty&0x80);
+ }
+ }
+return( spl );
+}
+
+#include "edgelist.h"
+
+int SplinePointListIsClockwise(const SplineSet *spl) {
+ EIList el;
+ EI *active=NULL, *apt, *pr, *e;
+ int i, winding,change,waschange, cnt;
+ SplineChar dummy;
+ SplineSet *next;
+ Layer layers[2];
+ int cw_cnt=0, ccw_cnt=0;
+
+ memset(&el,'\0',sizeof(el));
+ memset(&dummy,'\0',sizeof(dummy));
+ memset(layers,0,sizeof(layers));
+ el.layer = ly_fore;
+ dummy.layers = layers;
+ dummy.layer_cnt = 2;
+ dummy.layers[ly_fore].splines = (SplineSet *) spl;
+ dummy.name = "Clockwise Test";
+ next = spl->next; ((SplineSet *) spl)->next = NULL;
+ ELFindEdges(&dummy,&el);
+ if ( el.coordmax[1]-el.coordmin[1] > 1.e6 ) {
+ LogError( _("Warning: Unreasonably big splines. They will be ignored.\n") );
+ ((SplineSet *) spl)->next = next;
+return( -1 );
+ }
+ el.major = 1;
+ ELOrder(&el,el.major);
+
+ waschange = false;
+ for ( i=0; i<el.cnt ; ++i ) {
+ active = EIActiveEdgesRefigure(&el,active,i,1,&change);
+ for ( apt=active, cnt=0; apt!=NULL; apt = apt->aenext , ++cnt );
+ if ( el.ordered[i]!=NULL || el.ends[i] || cnt&1 ||
+ waschange || change ||
+ (i!=el.cnt-1 && (el.ends[i+1] || el.ordered[i+1])) ) {
+ waschange = change;
+ continue; /* Just too hard to get the edges sorted when we are at a start vertex */
+ }
+ waschange = change;
+ for ( apt=active; apt!=NULL; apt = e) {
+ if ( EISkipExtremum(apt,i+el.low,1)) {
+ e = apt->aenext->aenext;
+ continue;
+ }
+ if ( apt->up )
+ ++cw_cnt;
+ else
+ ++ccw_cnt;
+ if ( cw_cnt!=0 && ccw_cnt!=0 ) {
+ ((SplineSet *) spl)->next = next;
+return( -1 );
+ }
+ winding = apt->up?1:-1;
+ for ( pr=apt, e=apt->aenext; e!=NULL && winding!=0; pr=e, e=e->aenext ) {
+ if ( EISkipExtremum(e,i+el.low,1)) {
+ e = e->aenext;
+ continue;
+ }
+ if ( pr->up!=e->up ) {
+ if ( (winding<=0 && !e->up) || (winding>0 && e->up )) {
+/* return( -1 );*/ /* This is an erroneous condition... but I don't think*/
+ /* it can actually happen with a single contour. I */
+ /* think it is more likely this means a rounding error*/
+ /* and a problem in my algorithm */
+ fprintf( stderr, "SplinePointListIsClockwise: Found error\n" );
+ }
+ winding += (e->up?1:-1);
+ } else if ( EISameLine(pr,e,i+el.low,1) )
+ /* This just continues the line and doesn't change count */;
+ else {
+ if ( (winding<=0 && !e->up) || (winding>0 && e->up )) {
+ fprintf( stderr, "SplinePointListIsClockwise: Found error\n" );
+/*return( -1 );*/
+ }
+ winding += (e->up?1:-1);
+ }
+ }
+ }
+ }
+ free(el.ordered);
+ free(el.ends);
+ ElFreeEI(&el);
+ ((SplineSet *) spl)->next = next;
+
+ if ( cw_cnt!=0 )
+return( true );
+ else if ( ccw_cnt!=0 )
+return( false );
+
+return( -1 );
+}
+
+/* Since this function now deals with 4 arbitrarily selected points, */
+/* it has to try to combine them by different ways in order to see */
+/* if they actually can specify a diagonal stem. The reordered points */
+/* are placed back to array passed to the function.*/
+int PointsDiagonalable( SplineFont *sf,BasePoint **bp,BasePoint *unit ) {
+ BasePoint *line1[2], *line2[2], *temp, *base;
+ BasePoint unit1, unit2;
+ int i, j, k;
+ bigreal dist_error_diag, len1, len2, width, dot;
+ bigreal off1, off2;
+
+ for ( i=0; i<4; i++ ) {
+ if ( bp[i] == NULL )
+return( false );
+ }
+
+ dist_error_diag = 0.0065 * ( sf->ascent + sf->descent );
+ /* Assume that the first point passed to the function is the starting */
+ /* point of the first of two vectors. Then try all possible combinations */
+ /* (there are 3), ensure the vectors are consistantly ordered, and */
+ /* check if they are parallel.*/
+ base = bp[0];
+ for ( i=1; i<4; i++ ) {
+ line1[0] = base; line1[1] = bp[i];
+
+ k=0;
+ for ( j=1; j<4; j++ ) {
+ if ( j != i )
+ line2[k++] = bp[j];
+ }
+ unit1.x = line1[1]->x - line1[0]->x;
+ unit1.y = line1[1]->y - line1[0]->y;
+ unit2.x = line2[1]->x - line2[0]->x;
+ unit2.y = line2[1]->y - line2[0]->y;
+ /* No horizontal, vertical edges */
+ if ( unit1.x == 0 || unit1.y == 0 || unit2.x == 0 || unit2.y == 0 )
+ continue;
+ len1 = sqrt( pow( unit1.x,2 ) + pow( unit1.y,2 ));
+ len2 = sqrt( pow( unit2.x,2 ) + pow( unit2.y,2 ));
+ unit1.x /= len1; unit1.y /= len1;
+ unit2.x /= len2; unit2.y /= len2;
+ dot = unit1.x * unit2.y - unit1.y * unit2.x;
+ /* Units parallel */
+ if ( dot <= -.05 || dot >= .05 )
+ continue;
+ /* Ensure vectors point by such a way that the angle is between 90 and 270 degrees */
+ if ( unit1.x < 0 ) {
+ temp = line1[0]; line1[0] = line1[1]; line1[1] = temp;
+ unit1.x = -unit1.x; unit1.y = -unit1.y;
+ }
+ if ( unit2.x < 0 ) {
+ temp = line2[0]; line2[0] = line2[1]; line2[1] = temp;
+ unit2.x = -unit2.x; unit2.y = -unit2.y;
+ }
+ off1 = ( line1[1]->x - line1[0]->x ) * unit2.y -
+ ( line1[1]->y - line1[0]->y ) * unit2.x;
+ off2 = ( line2[1]->x - line2[0]->x ) * unit1.y -
+ ( line2[1]->y - line2[0]->y ) * unit1.x;
+ if ( len1 > len2 && fabs( off2 ) < 2*dist_error_diag ) *unit = unit1;
+ else if ( fabs( off1 ) < 2*dist_error_diag ) *unit = unit2;
+ else
+ continue;
+ width = ( line2[0]->x - line1[0]->x ) * unit->y -
+ ( line2[0]->y - line1[0]->y ) * unit->x;
+ /* Make sure this is a real line, rather than just two */
+ /* short spline segments which occasionally have happened to be */
+ /* parallel. This is necessary to correctly handle things which may */
+ /* be "diagonalable" in 2 different directions (like slash in some */
+ /* designs). */
+ if ( fabs( width ) > len1 || fabs( width ) > len2 )
+ continue;
+ /* Make sure line2 is further right than line1 */
+ if ( width < 0 ) {
+ temp = line1[0]; line1[0] = line2[0]; line2[0] = temp;
+ temp = line1[1]; line1[1] = line2[1]; line2[1] = temp;
+ }
+ bp[0] = line1[0];
+ bp[1] = line2[0];
+ bp[2] = line1[1];
+ bp[3] = line2[1];
+return( true );
+ }
+return( false );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/start.c b/dviware/dvisvgm/libs/ff-woff/fontforge/start.c
new file mode 100644
index 0000000000..2127d5c761
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/start.c
@@ -0,0 +1,53 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+
+#ifdef __Mac
+# include <stdlib.h> /* getenv,setenv */
+#endif
+
+#include "psfont.h"
+
+int32 unicode_from_adobestd[256];
+
+static void initadobeenc(void) {
+ int i,j;
+
+ for ( i=0; i<0x100; ++i ) {
+ if ( strcmp(AdobeStandardEncoding[i],".notdef")==0 )
+ unicode_from_adobestd[i] = 0xfffd;
+ else {
+ j = UniFromName(AdobeStandardEncoding[i],ui_none,&custom);
+ if ( j==-1 ) j = 0xfffd;
+ unicode_from_adobestd[i] = j;
+ }
+ }
+}
+
+void InitSimpleStuff(void) {
+ initadobeenc();
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.c b/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.c
new file mode 100644
index 0000000000..bdded86c22
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.c
@@ -0,0 +1,6068 @@
+/* Copyright (C) 2005-2012 by George Williams and Alexey Kryukov */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "edgelist2.h"
+#include "stemdb.h"
+
+#include <math.h>
+#include <utype.h>
+
+#define GLYPH_DATA_DEBUG 0
+#define PI 3.14159265358979323846264338327
+
+/* A diagonal end is like the top or bottom of a slash. Should we add a vertical stem at the end? */
+/* A diagonal corner is like the bottom of circumflex. Should we add a horizontal stem? */
+int hint_diagonal_ends = 0,
+ hint_diagonal_intersections = 0,
+ hint_bounding_boxes = 1,
+ detect_diagonal_stems = 0;
+
+float stem_slope_error = .05061454830783555773, /* 2.9 degrees */
+ stub_slope_error = .317649923862967983; /* 18.2 degrees */
+
+static double dist_error_hv = 3.5;
+static double dist_error_diag = 5.5;
+/* It's easy to get horizontal/vertical lines aligned properly */
+/* it is more difficult to get diagonal ones done */
+/* The "A" glyph in Apple's Times.dfont(Roman) is off by 6 in one spot */
+static double dist_error_curve = 22;
+/* The maximum possible distance between the edge of an active zone for */
+/* a curved spline segment and the spline itself */
+
+struct st {
+ Spline *s;
+ double st, lt;
+};
+
+static int GetBlueFuzz(SplineFont *sf) {
+ char *str, *end;
+
+ if ( sf == NULL || sf->private == NULL ||
+ (str=PSDictHasEntry( sf->private,"BlueFuzz" )) == NULL || !isdigit( str[0] ))
+return 1;
+return strtod( str, &end );
+}
+
+static int IsUnitHV( BasePoint *unit,int strict ) {
+ double angle = atan2( unit->y,unit->x );
+ double deviation = ( strict ) ? stem_slope_error : stub_slope_error;
+
+ if ( fabs( angle ) >= PI/2 - deviation && fabs( angle ) <= PI/2 + deviation )
+return( 2 );
+ else if ( fabs( angle ) <= deviation || fabs( angle ) >= PI - deviation )
+return( 1 );
+
+return( 0 );
+}
+
+static int UnitCloserToHV( BasePoint *u1,BasePoint *u2 ) {
+ double adiff1, adiff2;
+
+ adiff1 = fabs( atan2( u1->y,u1->x ));
+ adiff2 = fabs( atan2( u2->y,u2->x ));
+
+ if ( adiff1 > PI*.25 && adiff1 < PI*.75 )
+ adiff1 = fabs( adiff1 - PI*.5 );
+ else if ( adiff1 >= PI*.75 )
+ adiff1 = PI - adiff1;
+
+ if ( adiff2 > PI*.25 && adiff2 < PI*.75 )
+ adiff2 = fabs( adiff2 - PI*.5 );
+ else if ( adiff2 >= PI*.75 )
+ adiff2 = PI - adiff2;
+
+ if ( adiff1 < adiff2 )
+return( 1 );
+ else if ( adiff1 > adiff2 )
+return( -1 );
+ else
+return( 0 );
+}
+
+static double GetUnitAngle( BasePoint *u1,BasePoint *u2 ) {
+ double dx, dy;
+
+ dy = u1->x*u2->y - u1->y*u2->x;
+ dx = u1->x*u2->x + u1->y*u2->y;
+return( atan2( dy,dx ));
+}
+
+static int UnitsOrthogonal( BasePoint *u1,BasePoint *u2,int strict ) {
+ double angle, deviation = ( strict ) ? stem_slope_error : stub_slope_error;
+
+ angle = GetUnitAngle( u1,u2 );
+
+return( fabs( angle ) >= PI/2 - deviation && fabs( angle ) <= PI/2 + deviation );
+}
+
+int UnitsParallel( BasePoint *u1,BasePoint *u2,int strict ) {
+ double angle, deviation = ( strict ) ? stem_slope_error : stub_slope_error;
+
+ angle = GetUnitAngle( u1,u2 );
+
+return( fabs( angle ) <= deviation || fabs( angle ) >= PI - deviation );
+}
+
+static int IsInflectionPoint( struct glyphdata *gd,struct pointdata *pd ) {
+ SplinePoint *sp = pd->sp;
+ double CURVATURE_THRESHOLD = 1e-9;
+ struct spline *prev, *next;
+ double in, out;
+
+ if ( sp->prev == NULL || sp->next == NULL || !pd->colinear )
+return( false );
+
+ /* point of a single-point contour can't be an inflection point. */
+ if ( sp->prev->from == sp )
+return( false );
+
+ prev = sp->prev;
+ in = 0;
+ while ( prev != NULL && fabs(in) < CURVATURE_THRESHOLD ) {
+ in = SplineCurvature( prev,1 );
+ if ( fabs( in ) < CURVATURE_THRESHOLD ) in = SplineCurvature( prev, 0 );
+ if ( fabs( in ) < CURVATURE_THRESHOLD ) prev = prev->from->prev;
+ if ( gd->points[prev->to->ptindex].colinear )
+ break;
+ }
+
+ next = sp->next;
+ out = 0;
+ while ( next != NULL && fabs( out ) < CURVATURE_THRESHOLD ) {
+ out = SplineCurvature( next,0 );
+ if ( fabs( out ) < CURVATURE_THRESHOLD ) out = SplineCurvature( next, 1 );
+ if ( fabs( out ) < CURVATURE_THRESHOLD ) next = next->to->next;
+ if ( gd->points[next->from->ptindex].colinear )
+ break;
+ }
+
+ if ( in==0 || out==0 || ( prev != sp->prev && next != sp->next ))
+return( false );
+
+ in/=fabs(in);
+ out/=fabs(out);
+
+return ( in*out < 0 );
+}
+
+static int SplineFigureOpticalSlope(Spline *s,int start_at_from,BasePoint *dir) {
+ /* Sometimes splines have tiny control points, and to the eye the slope */
+ /* of the spline has nothing to do with that specified by the cps. */
+ /* So see if the spline is straightish and figure the slope based on */
+ /* some average direction */
+ /* dir is a input output parameter. */
+ /* it should be initialized to the unit vector determined by the appropriate cp */
+ /* if the function returns true, it will be set to a unit vector in the average direction */
+ BasePoint pos, *base, average_dir, normal;
+ double t, len, incr, off;
+ double dx, dy, ax, ay, d, a;
+
+ /* The vector is already nearly vertical/horizontal, no need to modify*/
+ if ( IsUnitHV( dir,true ))
+return( false );
+
+ if ( start_at_from ) {
+ incr = -.1;
+ base = &s->from->me;
+ } else {
+ incr = .1;
+ base = &s->to->me;
+ }
+
+ t = .5-incr;
+ memset(&average_dir,0,sizeof(average_dir));
+ while ( t>0 && t<1.0 ) {
+ pos.x = ((s->splines[0].a*t+s->splines[0].b)*t+s->splines[0].c)*t+s->splines[0].d;
+ pos.y = ((s->splines[1].a*t+s->splines[1].b)*t+s->splines[1].c)*t+s->splines[1].d;
+
+ average_dir.x += (pos.x-base->x); average_dir.y += (pos.y-base->y);
+ t += incr;
+ }
+
+ len = sqrt( pow( average_dir.x,2 ) + pow( average_dir.y,2 ));
+ if ( len==0 )
+return( false );
+ average_dir.x /= len; average_dir.y /= len;
+ normal.x = average_dir.y; normal.y = - average_dir.x;
+
+ t = .5-incr;
+ while ( t>0 && t<1.0 ) {
+ pos.x = ((s->splines[0].a*t+s->splines[0].b)*t+s->splines[0].c)*t+s->splines[0].d;
+ pos.y = ((s->splines[1].a*t+s->splines[1].b)*t+s->splines[1].c)*t+s->splines[1].d;
+ off = (pos.x-base->x)*normal.x + (pos.y-base->y)*normal.y;
+ if ( off<-dist_error_hv || off>dist_error_hv )
+return( false );
+ t += incr;
+ }
+
+ if ( UnitsParallel( dir,&normal,true )) {
+ /* prefer the direction which is closer to horizontal/vertical */
+ if ( (dx=dir->x)<0 ) dx = -dx;
+ if ( (dy=dir->y)<0 ) dy = -dy;
+ d = (dx<dy) ? dx : dy;
+ if ( (ax=average_dir.x)<0 ) ax = -ax;
+ if ( (ay=average_dir.y)<0 ) ay = -ay;
+ a = (ax<ay) ? ax : ay;
+ if ( d<a )
+return( false );
+ }
+
+ *dir = average_dir;
+return( true );
+}
+
+static int IsSplinePeak( struct glyphdata *gd,struct pointdata *pd,int outer,int is_x,int flags );
+
+static void PointInit( struct glyphdata *gd,SplinePoint *sp, SplineSet *ss ) {
+ struct pointdata *pd, *prevpd=NULL, *nextpd=NULL;
+ double len, same;
+ int hv;
+
+ if ( sp->ptindex >= gd->pcnt )
+return;
+ pd = &gd->points[sp->ptindex];
+ pd->sp = sp;
+ pd->ss = ss;
+ pd->x_extr = pd->y_extr = 0;
+ pd->base = sp->me;
+ pd->ttfindex = sp->ttfindex;
+ pd->nextcnt = pd->prevcnt = 0;
+ pd->nextstems = pd->prevstems = NULL;
+ pd->next_is_l = pd->prev_is_l = NULL;
+
+ if ( !sp->nonextcp && gd->order2 && sp->nextcpindex < gd->realcnt ) {
+
+ nextpd = &gd->points[sp->nextcpindex];
+ nextpd->ss = ss;
+ nextpd->x_extr = nextpd->y_extr = 0;
+ nextpd->base = sp->nextcp;
+ nextpd->ttfindex = sp->nextcpindex;
+ }
+ if ( !sp->noprevcp && gd->order2 && sp->prev != NULL &&
+ sp->prev->from->nextcpindex < gd->realcnt ) {
+
+ nextpd = &gd->points[sp->prev->from->nextcpindex];
+ nextpd->ss = ss;
+ nextpd->x_extr = nextpd->y_extr = 0;
+ nextpd->base = sp->prevcp;
+ nextpd->ttfindex = sp->prev->from->nextcpindex;
+ }
+
+ if ( sp->next==NULL ) {
+ pd->nextunit.x = ss->first->me.x - sp->me.x;
+ pd->nextunit.y = ss->first->me.y - sp->me.y;
+ pd->nextlinear = true;
+ } else if ( sp->next->knownlinear ) {
+ pd->nextunit.x = sp->next->to->me.x - sp->me.x;
+ pd->nextunit.y = sp->next->to->me.y - sp->me.y;
+ pd->nextlinear = true;
+ } else if ( sp->nonextcp ) {
+ pd->nextunit.x = sp->next->to->prevcp.x - sp->me.x;
+ pd->nextunit.y = sp->next->to->prevcp.y - sp->me.y;
+ } else {
+ pd->nextunit.x = sp->nextcp.x - sp->me.x;
+ pd->nextunit.y = sp->nextcp.y - sp->me.y;
+ }
+ len = sqrt( pow( pd->nextunit.x,2 ) + pow( pd->nextunit.y,2 ));
+ if ( len==0 )
+ pd->nextzero = true;
+ else {
+ pd->nextlen = len;
+ pd->nextunit.x /= len;
+ pd->nextunit.y /= len;
+ if ( sp->next!=NULL && !sp->next->knownlinear )
+ SplineFigureOpticalSlope(sp->next,true,&pd->nextunit);
+ hv = IsUnitHV( &pd->nextunit,true );
+ if ( hv == 2 ) {
+ pd->nextunit.x = 0; pd->nextunit.y = pd->nextunit.y>0 ? 1 : -1;
+ } else if ( hv == 1 ) {
+ pd->nextunit.y = 0; pd->nextunit.x = pd->nextunit.x>0 ? 1 : -1;
+ }
+ if ( pd->nextunit.y==0 ) pd->next_hor = true;
+ else if ( pd->nextunit.x==0 ) pd->next_ver = true;
+
+ if ( nextpd != NULL ) {
+ nextpd->prevunit.x = -pd->nextunit.x;
+ nextpd->prevunit.y = -pd->nextunit.y;
+ }
+ }
+
+ if ( sp->prev==NULL ) {
+ pd->prevunit.x = ss->last->me.x - sp->me.x;
+ pd->prevunit.y = ss->last->me.y - sp->me.y;
+ pd->prevlinear = true;
+ } else if ( sp->prev->knownlinear ) {
+ pd->prevunit.x = sp->prev->from->me.x - sp->me.x;
+ pd->prevunit.y = sp->prev->from->me.y - sp->me.y;
+ pd->prevlinear = true;
+ } else if ( sp->noprevcp ) {
+ pd->prevunit.x = sp->prev->from->nextcp.x - sp->me.x;
+ pd->prevunit.y = sp->prev->from->nextcp.y - sp->me.y;
+ } else {
+ pd->prevunit.x = sp->prevcp.x - sp->me.x;
+ pd->prevunit.y = sp->prevcp.y - sp->me.y;
+ }
+ len = sqrt( pow( pd->prevunit.x,2 ) + pow( pd->prevunit.y,2 ));
+ if ( len==0 )
+ pd->prevzero = true;
+ else {
+ pd->prevlen = len;
+ pd->prevunit.x /= len;
+ pd->prevunit.y /= len;
+ if ( sp->prev!=NULL && !sp->prev->knownlinear )
+ SplineFigureOpticalSlope(sp->prev,false,&pd->prevunit);
+ hv = IsUnitHV( &pd->prevunit,true );
+ if ( hv == 2 ) {
+ pd->prevunit.x = 0; pd->prevunit.y = pd->prevunit.y>0 ? 1 : -1;
+ } else if ( hv == 1 ) {
+ pd->prevunit.y = 0; pd->prevunit.x = pd->prevunit.x>0 ? 1 : -1;
+ }
+ if ( pd->prevunit.y==0 ) pd->prev_hor = true;
+ else if ( pd->prevunit.x==0 ) pd->prev_ver = true;
+
+ if ( prevpd != NULL ) {
+ prevpd->nextunit.x = -pd->prevunit.x;
+ prevpd->nextunit.y = -pd->prevunit.y;
+ }
+ }
+ {
+ same = pd->prevunit.x*pd->nextunit.x + pd->prevunit.y*pd->nextunit.y;
+ if ( same<-.95 )
+ pd->colinear = true;
+ }
+ if (( pd->prev_hor || pd->next_hor ) && pd->colinear ) {
+ if ( IsSplinePeak( gd,pd,false,false,1 )) pd->y_extr = 1;
+ else if ( IsSplinePeak( gd,pd,true,false,1 )) pd->y_extr = 2;
+ } else if (( pd->prev_ver || pd->next_ver ) && pd->colinear ) {
+ if ( IsSplinePeak( gd,pd,true,true,1 )) pd->x_extr = 1;
+ else if ( IsSplinePeak( gd,pd,false,true,1 )) pd->x_extr = 2;
+ } else {
+ if (( pd->nextunit.y < 0 && pd->prevunit.y < 0 ) || ( pd->nextunit.y > 0 && pd->prevunit.y > 0 )) {
+ if ( IsSplinePeak( gd,pd,false,false,2 )) pd->y_corner = 1;
+ else if ( IsSplinePeak( gd,pd,true,false,2 )) pd->y_corner = 2;
+ }
+ if (( pd->nextunit.x < 0 && pd->prevunit.x < 0 ) || ( pd->nextunit.x > 0 && pd->prevunit.x > 0 )) {
+ if ( IsSplinePeak( gd,pd,true,true,2 )) pd->x_corner = 1;
+ else if ( IsSplinePeak( gd,pd,false,true,2 )) pd->x_corner = 2;
+ }
+ }
+ if ( hint_diagonal_intersections ) {
+ if (( pd->y_corner || pd->y_extr ) &&
+ RealNear( pd->nextunit.x,-pd->prevunit.x ) &&
+ RealNear( pd->nextunit.y,pd->prevunit.y ) && !pd->nextzero)
+ pd->symetrical_h = true;
+ else if (( pd->x_corner || pd->x_extr ) &&
+ RealNear( pd->nextunit.y,-pd->prevunit.y ) &&
+ RealNear( pd->nextunit.x,pd->prevunit.x ) && !pd->nextzero)
+ pd->symetrical_v = true;
+ }
+}
+
+static int BBoxIntersectsLine(Spline *s,Spline *line) {
+ double t,x,y;
+ DBounds b;
+
+ b.minx = b.maxx = s->from->me.x;
+ b.miny = b.maxy = s->from->me.y;
+ if ( s->to->me.x<b.minx ) b.minx = s->to->me.x;
+ else if ( s->to->me.x>b.maxx ) b.maxx = s->to->me.x;
+ if ( s->to->me.y<b.miny ) b.miny = s->to->me.y;
+ else if ( s->to->me.y>b.maxy ) b.maxy = s->to->me.y;
+ if ( s->to->prevcp.x<b.minx ) b.minx = s->to->prevcp.x;
+ else if ( s->to->prevcp.x>b.maxx ) b.maxx = s->to->prevcp.x;
+ if ( s->to->prevcp.y<b.miny ) b.miny = s->to->prevcp.y;
+ else if ( s->to->prevcp.y>b.maxy ) b.maxy = s->to->prevcp.y;
+ if ( s->from->nextcp.x<b.minx ) b.minx = s->from->nextcp.x;
+ else if ( s->from->nextcp.x>b.maxx ) b.maxx = s->from->nextcp.x;
+ if ( s->from->nextcp.y<b.miny ) b.miny = s->from->nextcp.y;
+ else if ( s->from->nextcp.y>b.maxy ) b.maxy = s->from->nextcp.y;
+
+ if ( line->splines[0].c!=0 ) {
+ t = (b.minx-line->splines[0].d)/line->splines[0].c;
+ y = line->splines[1].c*t+line->splines[1].d;
+ if ( y>=b.miny && y<=b.maxy )
+return( true );
+ t = (b.maxx-line->splines[0].d)/line->splines[0].c;
+ y = line->splines[1].c*t+line->splines[1].d;
+ if ( y>=b.miny && y<=b.maxy )
+return( true );
+ }
+ if ( line->splines[1].c!=0 ) {
+ t = (b.miny-line->splines[1].d)/line->splines[1].c;
+ x = line->splines[0].c*t+line->splines[0].d;
+ if ( x>=b.minx && x<=b.maxx )
+return( true );
+ t = (b.maxy-line->splines[1].d)/line->splines[1].c;
+ x = line->splines[0].c*t+line->splines[0].d;
+ if ( x>=b.minx && x<=b.maxx )
+return( true );
+ }
+return( false );
+}
+
+static int stcmp(const void *_p1, const void *_p2) {
+ const struct st *stpt1 = _p1, *stpt2 = _p2;
+ if ( stpt1->lt>stpt2->lt )
+return( 1 );
+ else if ( stpt1->lt<stpt2->lt )
+return( -1 );
+
+return( 0 );
+}
+
+static int line_pt_cmp( const void *_p1, const void *_p2 ) {
+ struct pointdata * const *pd1 = _p1, * const *pd2 = _p2;
+ struct linedata *line;
+ double ppos1=0,ppos2=0;
+
+ if ( (*pd1)->prevline != NULL &&
+ ( (*pd1)->prevline == (*pd2)->prevline || (*pd1)->prevline == (*pd2)->nextline ))
+ line = (*pd1)->prevline;
+ else if ( (*pd1)->nextline != NULL &&
+ ( (*pd1)->nextline == (*pd2)->prevline || (*pd1)->nextline == (*pd2)->nextline ))
+ line = (*pd1)->nextline;
+ else
+return( 0 );
+
+ ppos1 = ( (*pd1)->sp->me.x - line->online.x ) * line->unit.x +
+ ( (*pd1)->sp->me.y - line->online.y ) * line->unit.y;
+ ppos2 = ( (*pd2)->sp->me.x - line->online.x ) * line->unit.x +
+ ( (*pd2)->sp->me.y - line->online.y ) * line->unit.y;
+
+ if ( ppos1>ppos2 )
+return( 1 );
+ else if ( ppos1<ppos2 )
+return( -1 );
+ else
+return( 0 );
+}
+
+static int segment_cmp(const void *_s1, const void *_s2) {
+ const struct segment *s1 = _s1, *s2 = _s2;
+ if ( s1->start<s2->start )
+return( -1 );
+ else if ( s1->start>s2->start )
+return( 1 );
+
+return( 0 );
+}
+
+static int proj_cmp(const void *_p1, const void *_p2) {
+ struct pointdata * const *p1 = _p1, * const *p2 = _p2;
+ if ( (*p1)->projection<(*p2)->projection )
+return( -1 );
+ else if ( (*p1)->projection>(*p2)->projection )
+return( 1 );
+
+return( 0 );
+}
+
+static void AssignStemToPoint( struct pointdata *pd,struct stemdata *stem,int is_next, int left ) {
+ struct stemdata ***stems;
+ int i, *stemcnt, **is_l;
+
+ stems = ( is_next ) ? &pd->nextstems : &pd->prevstems;
+ stemcnt = ( is_next ) ? &pd->nextcnt : &pd->prevcnt;
+ is_l = ( is_next ) ? &pd->next_is_l : &pd->prev_is_l;
+ for ( i=0; i<*stemcnt; i++ ) {
+ if ((*stems)[i] == stem )
+return;
+ }
+
+ *stems = realloc( *stems,( *stemcnt+1 )*sizeof( struct stemdata *));
+ *is_l = realloc( *is_l, ( *stemcnt+1 )*sizeof( int ));
+ (*stems)[*stemcnt] = stem;
+ (*is_l )[*stemcnt] = left;
+ (*stemcnt)++;
+}
+
+int IsStemAssignedToPoint( struct pointdata *pd,struct stemdata *stem,int is_next ) {
+ struct stemdata **stems;
+ int i, stemcnt;
+
+ stems = ( is_next ) ? pd->nextstems : pd->prevstems;
+ stemcnt = ( is_next ) ? pd->nextcnt : pd->prevcnt;
+
+ for ( i=0; i<stemcnt; i++ ) {
+ if ( stems[i] == stem )
+return( i );
+ }
+return( -1 );
+}
+
+static int GetValidPointDataIndex( struct glyphdata *gd,SplinePoint *sp,
+ struct stemdata *stem ) {
+
+ struct pointdata *tpd;
+
+ if ( sp == NULL )
+return( -1 );
+ if ( sp->ttfindex < gd->realcnt )
+return( sp->ttfindex );
+ if ( !sp->nonextcp && sp->nextcpindex < gd->realcnt ) {
+ tpd = &gd->points[sp->nextcpindex];
+ if ( IsStemAssignedToPoint( tpd,stem,false ) != -1 )
+return( sp->nextcpindex );
+ }
+ if ( !sp->noprevcp && sp->prev != NULL &&
+ sp->prev->from->nextcpindex < gd->realcnt ) {
+ tpd = &gd->points[sp->prev->from->nextcpindex];
+ if ( IsStemAssignedToPoint( tpd,stem,true ) != -1 )
+return( sp->prev->from->nextcpindex );
+ }
+return( -1 );
+}
+
+static int LineType(struct st *st,int i, int cnt,Spline *line) {
+ SplinePoint *sp;
+ BasePoint nextcp, prevcp, here;
+ double dn, dp;
+
+ if ( st[i].st>.01 && st[i].st<.99 )
+return( 0 ); /* Not near an end-point, just a normal line */
+ if ( i+1>=cnt )
+return( 0 ); /* No following spline */
+ if ( st[i+1].st>.01 && st[i+1].st<.99 )
+return( 0 ); /* Following spline not near an end-point, can't */
+ /* match to this one, just a normal line */
+ if ( st[i].st<.5 && st[i+1].st>.5 ) {
+ if ( st[i+1].s->to->next!=st[i].s )
+return( 0 );
+ sp = st[i].s->from;
+ } else if ( st[i].st>.5 && st[i+1].st<.5 ) {
+ if ( st[i].s->to->next!=st[i+1].s )
+return( 0 );
+ sp = st[i].s->to;
+ } else
+return( 0 );
+
+ if ( !sp->nonextcp )
+ nextcp = sp->nextcp;
+ else
+ nextcp = sp->next->to->me;
+ if ( !sp->noprevcp )
+ prevcp = sp->prevcp;
+ else
+ prevcp = sp->prev->from->me;
+ here.x = line->splines[0].c*(st[i].st+st[i+1].st)/2 + line->splines[0].d;
+ here.y = line->splines[1].c*(st[i].st+st[i+1].st)/2 + line->splines[1].d;
+
+ nextcp.x -= here.x; nextcp.y -= here.y;
+ prevcp.x -= here.x; prevcp.y -= here.y;
+
+ dn = nextcp.x*line->splines[1].c - nextcp.y*line->splines[0].c;
+ dp = prevcp.x*line->splines[1].c - prevcp.y*line->splines[0].c;
+ if ( dn*dp<0 ) /* splines away move on opposite sides of the line */
+return( 1 ); /* Treat this line and the next as one */
+ /* We assume that a rounding error gave us one erroneous intersection (or we went directly through the endpoint) */
+ else
+return( 2 ); /* Ignore both this line and the next */
+ /* Intersects both in a normal fashion */
+}
+
+static int MonotonicOrder(Spline **sspace,Spline *line,struct st *stspace) {
+ Spline *s;
+ int i,j,k,cnt;
+ BasePoint pts[9];
+ extended lts[10], sts[10];
+
+ for ( i=j=0; (s=sspace[j])!=NULL; ++j ) {
+ if ( BBoxIntersectsLine(s,line) ) {
+ /* Lines parallel to the direction we are testing just get in the */
+ /* way and don't add any useful info */
+ if ( s->islinear &&
+ RealNear(line->splines[0].c*s->splines[1].c,
+ line->splines[1].c*s->splines[0].c))
+ continue;
+ if ( SplinesIntersect(line,s,pts,lts,sts)<=0 )
+ continue;
+ for ( k=0; sts[k]!=-1; ++k ) {
+ if ( sts[k]>=0 && sts[k]<=1 ) {
+ stspace[i].s = s;
+ stspace[i].lt = lts[k];
+ stspace[i++].st = sts[k];
+ }
+ }
+ }
+ }
+ stspace[i].s = NULL;
+ cnt = i;
+ qsort(stspace,cnt,sizeof(struct st),stcmp);
+return( cnt );
+}
+
+static Spline *MonotonicFindAlong(Spline *line,struct st *stspace,int cnt,
+ Spline *findme, double *other_t) {
+ Spline *s;
+ int i;
+ int eo; /* I do horizontal/vertical by winding number */
+ /* But figuring winding number with respect to a */
+ /* diagonal line is hard. So I use even-odd */
+ /* instead. */
+
+ eo = 0;
+ for ( i=0; i<cnt; ++i ) {
+ s = stspace[i].s;
+ if ( s==findme ) {
+ if ( (eo&1) && i>0 ) {
+ *other_t = stspace[i-1].st;
+return( stspace[i-1].s );
+ } else if ( !(eo&1) && i+1<cnt ) {
+ *other_t = stspace[i+1].st;
+return( stspace[i+1].s );
+ }
+ fprintf( stderr, "MonotonicFindAlong: Ran out of intersections.\n" );
+return( NULL );
+ }
+ if ( i+1<cnt && stspace[i+1].s==findme )
+ ++eo;
+ else switch ( LineType(stspace,i,cnt,line) ) {
+ case 0: /* Normal spline */
+ ++eo;
+ break;
+ case 1: /* Intersects at end-point & next entry is other side */
+ ++eo; /* And the two sides continue in approximately the */
+ ++i; /* same direction */
+ break;
+ case 2: /* Intersects at end-point & next entry is other side */
+ ++i; /* And the two sides go in opposite directions */
+ break;
+ default:
+ break;
+}
+ }
+ fprintf( stderr, "MonotonicFindAlong: Never found our spline.\n" );
+return( NULL );
+}
+
+static int MonotonicFindStemBounds(Spline *line,struct st *stspace,int cnt,
+ double fudge,struct stemdata *stem ) {
+ int i,j;
+ int eo; /* I do horizontal/vertical by winding number */
+ /* But figuring winding number with respect to a */
+ /* diagonal line is hard. So I use even-odd */
+ /* instead. */
+ double pos, npos;
+ double lmin = ( stem->lmin < -fudge ) ? stem->lmin : -fudge;
+ double lmax = ( stem->lmax > fudge ) ? stem->lmax : fudge;
+ double rmin = ( stem->rmin < -fudge ) ? stem->rmin : -fudge;
+ double rmax = ( stem->rmax > fudge ) ? stem->rmax : fudge;
+ lmin -= .0001; lmax += .0001; rmin -= .0001; rmax += .0001;
+
+ eo = 0;
+ for ( i=0; i<cnt; ++i ) {
+ pos = (line->splines[0].c*stspace[i].lt + line->splines[0].d - stem->left.x)*stem->l_to_r.x +
+ (line->splines[1].c*stspace[i].lt + line->splines[1].d - stem->left.y)*stem->l_to_r.y;
+ npos = 1e4;
+ if ( i+1<cnt )
+ npos = (line->splines[0].c*stspace[i+1].lt + line->splines[0].d - stem->left.x)*stem->l_to_r.x +
+ (line->splines[1].c*stspace[i+1].lt + line->splines[1].d - stem->left.y)*stem->l_to_r.y;
+
+ if ( pos>=lmin && pos<=lmax ) {
+ if ( (eo&1) && i>0 )
+ j = i-1;
+ else if ( !(eo&1) && i+1<cnt )
+ j = i+1;
+ else
+return( false );
+ pos = (line->splines[0].c*stspace[j].lt + line->splines[0].d - stem->right.x)*stem->l_to_r.x +
+ (line->splines[1].c*stspace[j].lt + line->splines[1].d - stem->right.y)*stem->l_to_r.y;
+ if ( pos >= rmin && pos <= rmax )
+return( true );
+ }
+ if ( i+1 < cnt && npos >= lmin && npos <= lmax )
+ ++eo;
+ else switch ( LineType(stspace,i,cnt,line) ) {
+ case 0: /* Normal spline */
+ ++eo;
+ break;
+ case 1: /* Intersects at end-point & next entry is other side */
+ ++eo; /* And the two sides continue in approximately the */
+ ++i; /* same direction */
+ break;
+ case 2: /* Intersects at end-point & next entry is other side */
+ ++i; /* And the two sides go in opposite directions */
+ break;
+ default:
+ break;
+ }
+ }
+return( false );
+}
+
+static int MatchWinding(struct monotonic ** space,int i,int nw,int winding,int which,int idx) {
+ struct monotonic *m;
+ int j,cnt=0;
+
+ if (( nw<0 && winding>0 ) || (nw>0 && winding<0)) {
+ winding = nw;
+ for ( j=i-1; j>=0; --j ) {
+ m = space[j];
+ winding += ((&m->xup)[which] ? 1 : -1 );
+ if ( winding==0 ) {
+ if ( cnt == idx )
+return( j );
+ cnt++;
+ }
+ }
+ } else {
+ winding = nw;
+ for ( j=i+1; space[j]!=NULL; ++j ) {
+ m = space[j];
+ winding += ((&m->xup)[which] ? 1 : -1 );
+ if ( winding==0 ) {
+ if ( cnt == idx )
+return( j );
+ cnt++;
+ }
+ }
+ }
+return( -1 );
+}
+
+static int FindMatchingHVEdge( struct glyphdata *gd,struct pointdata *pd,
+ int is_next,Spline **edges,double *other_t,double *dist ) {
+
+ double test, t, start, end;
+ int which;
+ Spline *s;
+ Monotonic *m;
+ int winding, nw, i, j, ret=0;
+ struct monotonic **space;
+ BasePoint *dir, d, hv;
+
+ /* Things are difficult if we go exactly through the point. Move off */
+ /* to the side a tiny bit and hope that doesn't matter */
+ if ( is_next==2 ) {
+ /* Consider the case of the bottom of the circumflex (or a chevron) */
+ /* Think of it as a flattend breve. It is symetrical and we want to */
+ /* note the vertical distance between the two points that define */
+ /* the bottom, so treat them as a funky stem */
+ /* \ \ / / */
+ /* \ \ / / */
+ /* \ \ / / */
+ /* \ + / */
+ /* \ / */
+ /* + */
+ hv.x = pd->symetrical_h ? 1.0 : 0.0;
+ hv.y = pd->symetrical_v ? 1.0 : 0.0;
+ dir = &hv;
+ t = .001;
+ s = pd->sp->next; /* Could just as easily be prev */
+ } else if ( is_next ) {
+ s = pd->sp->next;
+ t = .001;
+ dir = &pd->nextunit;
+ } else {
+ s = pd->sp->prev;
+ t = .999;
+ dir = &pd->prevunit;
+ }
+ if (( d.x = dir->x )<0 ) d.x = -d.x;
+ if (( d.y = dir->y )<0 ) d.y = -d.y;
+ which = d.x<d.y; /* closer to vertical */
+
+ if ( s==NULL ) /* Somehow we got an open contour? */
+return( 0 );
+
+ test = ((s->splines[which].a*t+s->splines[which].b)*t+s->splines[which].c)*t+s->splines[which].d;
+ MonotonicFindAt(gd->ms,which,test,space = gd->space);
+
+ winding = 0;
+ for ( i=0; space[i]!=NULL; ++i ) {
+ m = space[i];
+ nw = ((&m->xup)[which] ? 1 : -1 );
+ if ( m->s == s && t>=m->tstart && t<=m->tend ) {
+ start = m->other;
+ break;
+ }
+ winding += nw;
+ }
+ if ( space[i]==NULL ) {
+ fprintf( stderr, "FindMatchinHVEdge didn't\n" );
+return( 0 );
+ }
+
+ j = MatchWinding(space,i,nw,winding,which,0);
+ if ( j!=-1 ) {
+ other_t[0] = space[j]->t;
+ end = space[j]->other;
+ dist[0] = end - start;
+ if ( dist[0] < 0 ) dist[0] = -dist[0];
+ edges[0] = space[j]->s;
+ ret++;
+ }
+ if ( ret > 0 && is_next != 2 && ( pd->x_extr == 1 || pd->y_extr == 1 )) {
+ j = MatchWinding(space,i,nw,winding,which,1);
+ if ( j!=-1 ) {
+ other_t[ret] = space[j]->t;
+ end = space[j]->other;
+ dist[ret] = end - start;
+ if ( dist[ret] < 0 ) dist[ret] = -dist[ret];
+ edges[ret] = space[j]->s;
+ ret++;
+ }
+ }
+return( ret );
+}
+
+static BasePoint PerturbAlongSpline( Spline *s,BasePoint *bp,double t ) {
+ BasePoint perturbed;
+
+ for (;;) {
+ perturbed.x = ((s->splines[0].a*t+s->splines[0].b)*t+s->splines[0].c)*t+s->splines[0].d;
+ perturbed.y = ((s->splines[1].a*t+s->splines[1].b)*t+s->splines[1].c)*t+s->splines[1].d;
+ if ( !RealWithin( perturbed.x,bp->x,.01 ) || !RealWithin( perturbed.y,bp->y,.01 ))
+ break;
+ if ( t<.5 ) {
+ t *= 2;
+ if ( t>.5 )
+ break;
+ } else {
+ t = 1- 2*(1-t);
+ if ( t<.5 )
+ break;
+ }
+ }
+return( perturbed );
+}
+
+static void MakeVirtualLine(struct glyphdata *gd,BasePoint *perturbed,
+ BasePoint *dir,Spline *myline,SplinePoint *end1, SplinePoint *end2) {
+
+ BasePoint norm, absnorm;
+ SplineSet *spl;
+ Spline *s, *first;
+ double t1, t2;
+ int i, cnt;
+
+ if ( gd->stspace==NULL ) {
+ for ( i=0; i<2; ++i ) {
+ cnt = 0;
+ for ( spl=gd->sc->layers[gd->layer].splines; spl!=NULL; spl=spl->next ) {
+ first = NULL;
+ if ( spl->first->prev!=NULL ) {
+ for ( s=spl->first->next; s!=first; s=s->to->next ) {
+ if ( first==NULL ) first = s;
+ if ( i )
+ gd->sspace[cnt] = s;
+ ++cnt;
+ }
+ }
+ }
+ if ( !i ) {
+ gd->scnt = cnt;
+ gd->sspace = malloc((cnt+1)*sizeof(Spline *));
+ } else
+ gd->sspace[cnt] = NULL;
+ }
+ gd->stspace = malloc((3*cnt+2)*sizeof(struct st));
+ SplineCharFindBounds(gd->sc,&gd->size);
+ gd->size.minx -= 10; gd->size.miny -= 10;
+ gd->size.maxx += 10; gd->size.maxy += 10;
+ }
+
+ norm.x = -dir->y;
+ norm.y = dir->x;
+ absnorm = norm;
+ if ( absnorm.x<0 ) absnorm.x = -absnorm.x;
+ if ( absnorm.y<0 ) absnorm.y = -absnorm.y;
+
+ memset(myline,0,sizeof(*myline));
+ memset(end1,0,sizeof(*end1));
+ memset(end2,0,sizeof(*end2));
+ myline->knownlinear = myline->islinear = true;
+
+ if ( absnorm.x > absnorm.y ) {
+ /* Greater change in x than in y */
+ t1 = (gd->size.minx-perturbed->x)/norm.x;
+ t2 = (gd->size.maxx-perturbed->x)/norm.x;
+ myline->splines[0].d = gd->size.minx;
+ myline->splines[0].c = gd->size.maxx-gd->size.minx;
+ myline->splines[1].d = perturbed->y+t1*norm.y;
+ myline->splines[1].c = (t2-t1)*norm.y;
+ } else {
+ t1 = (gd->size.miny-perturbed->y)/norm.y;
+ t2 = (gd->size.maxy-perturbed->y)/norm.y;
+ myline->splines[1].d = gd->size.miny;
+ myline->splines[1].c = gd->size.maxy-gd->size.miny;
+ myline->splines[0].d = perturbed->x+t1*norm.x;
+ myline->splines[0].c = (t2-t1)*norm.x;
+ }
+ end1->me.x = myline->splines[0].d;
+ end2->me.x = myline->splines[0].d + myline->splines[0].c;
+ end1->me.y = myline->splines[1].d;
+ end2->me.y = myline->splines[1].d + myline->splines[1].c;
+ end1->nextcp = end1->prevcp = end1->me;
+ end2->nextcp = end2->prevcp = end2->me;
+ end1->nonextcp = end1->noprevcp = end2->nonextcp = end2->noprevcp = true;
+ end1->next = myline; end2->prev = myline;
+ myline->from = end1; myline->to = end2;
+}
+
+static int FindMatchingEdge( struct glyphdata *gd, struct pointdata *pd,
+ int is_next,Spline **edges ) {
+
+ BasePoint *dir, vert, perturbed, diff;
+ Spline myline;
+ SplinePoint end1, end2;
+ double *other_t = is_next==2 ? &pd->both_e_t : is_next ? pd->next_e_t : pd->prev_e_t;
+ double *dist = is_next ? pd->next_dist : pd->prev_dist;
+ double t ;
+ Spline *s;
+ int cnt;
+
+ dist[0] = 0; dist[1] = 0;
+ if (( is_next && ( pd->next_hor || pd->next_ver )) ||
+ ( !is_next && ( pd->prev_hor || pd->prev_ver )) ||
+ is_next == 2 )
+return( FindMatchingHVEdge(gd,pd,is_next,edges,other_t,dist));
+
+ if ( is_next ) {
+ dir = &pd->nextunit;
+ t = .001;
+ s = pd->sp->next;
+ } else {
+ dir = &pd->prevunit;
+ t = .999;
+ s = pd->sp->prev;
+ }
+ /* For spline segments which have slope close enough to the font's italic */
+ /* slant look for an opposite edge along the horizontal direction, rather */
+ /* than along the normal for the point's next/previous unit. This allows */
+ /* us e. g. to detect serifs in italic fonts */
+ if ( gd->has_slant ) {
+ if ( UnitsParallel( dir,&gd->slant_unit,true )) {
+ vert.x = 0; vert.y = 1;
+ dir = &vert;
+ }
+ }
+
+ if ( s==NULL || ( gd->only_hv && !IsUnitHV( dir,false )))
+return( 0 );
+
+ diff.x = s->to->me.x-s->from->me.x; diff.y = s->to->me.y-s->from->me.y;
+ if ( diff.x<.03 && diff.x>-.03 && diff.y<.03 && diff.y>-.03 )
+return( 0 );
+
+ /* Don't base the line on the current point, we run into rounding errors */
+ /* where lines that should intersect it don't. Instead perturb it a tiny*/
+ /* bit in the direction along the spline */
+ perturbed = PerturbAlongSpline( s,&pd->sp->me,t );
+
+ MakeVirtualLine(gd,&perturbed,dir,&myline,&end1,&end2);
+ /* prev_e_t = next_e_t = both_e_t =. This is where these guys are set */
+ cnt = MonotonicOrder(gd->sspace,&myline,gd->stspace);
+ edges[0] = MonotonicFindAlong(&myline,gd->stspace,cnt,s,other_t);
+return( edges[0] != NULL );
+}
+
+static int StillStem(struct glyphdata *gd,double fudge,BasePoint *pos,struct stemdata *stem ) {
+ Spline myline;
+ SplinePoint end1, end2;
+ int cnt, ret;
+
+ MakeVirtualLine( gd,pos,&stem->unit,&myline,&end1,&end2 );
+ cnt = MonotonicOrder( gd->sspace,&myline,gd->stspace );
+ ret = MonotonicFindStemBounds( &myline,gd->stspace,cnt,fudge,stem );
+return( ret );
+}
+
+static int CornerCorrectSide( struct pointdata *pd,int x_dir,int is_l ) {
+ int corner = ( x_dir ) ? pd->x_corner : pd->y_corner;
+ int start = (( x_dir && is_l ) || ( !x_dir && !is_l ));
+ double unit_p, unit_n;
+
+ unit_p = (&pd->prevunit.x)[!x_dir];
+ unit_n = (&pd->nextunit.x)[!x_dir];
+return( ( start && (
+ ( corner == 1 && unit_p > 0 && unit_n > 0 ) ||
+ ( corner == 2 && unit_p < 0 && unit_n < 0 ))) ||
+ ( !start && (
+ ( corner == 1 && unit_p < 0 && unit_n < 0 ) ||
+ ( corner == 2 && unit_p > 0 && unit_n > 0 ))));
+}
+
+static int IsCorrectSide( struct glyphdata *gd,struct pointdata *pd,
+ int is_next,int is_l,BasePoint *dir ) {
+
+ Spline *sbase, myline;
+ SplinePoint *sp = pd->sp, end1, end2;
+ BasePoint perturbed;
+ int i, hv, is_x, ret = false, winding = 0, cnt, eo;
+ double t, test;
+ struct monotonic **space, *m;
+
+ hv = IsUnitHV( dir,true );
+ if (( hv == 2 && pd->x_corner ) || ( hv == 1 && pd->y_corner ))
+return( CornerCorrectSide( pd,( hv == 2 ),is_l ));
+
+ sbase = ( is_next ) ? sp->next : sp->prev;
+ t = ( is_next ) ? 0.001 : 0.999;
+ perturbed = PerturbAlongSpline( sbase,&sp->me,t );
+
+ if ( hv ) {
+ is_x = ( hv == 2 );
+ test = ( is_x ) ? perturbed.y : perturbed.x;
+ MonotonicFindAt( gd->ms,is_x,test,space = gd->space );
+ for ( i=0; space[i]!=NULL; ++i ) {
+ m = space[i];
+ winding = ((&m->xup)[is_x] ? 1 : -1 );
+ if ( m->s == sbase )
+ break;
+ }
+ if ( space[i]!=NULL )
+ ret = (( is_l && winding == 1 ) || ( !is_l && winding == -1 ));
+ } else {
+ MakeVirtualLine( gd,&perturbed,dir,&myline,&end1,&end2 );
+ cnt = MonotonicOrder( gd->sspace,&myline,gd->stspace );
+ eo = -1;
+ is_x = fabs( dir->y ) > fabs( dir->x );
+ /* If a diagonal stem is more vertical than horizontal, then our */
+ /* virtual line will go from left to right. It will first intersect */
+ /* the left side of the stem, if the stem also points north-east. */
+ /* In any other case the virtual line will first intersect the right */
+ /* side. */
+ i = ( is_x && dir->y > 0 ) ? 0 : cnt-1;
+ while ( i >= 0 && i <= cnt-1 ) {
+ eo = ( eo != 1 ) ? 1 : 0;
+ if ( gd->stspace[i].s == sbase )
+ break;
+ if ( is_x && dir->y > 0 ) i++;
+ else i--;
+ }
+ ret = ( is_l == eo );
+ }
+return( ret );
+}
+
+/* In TrueType I want to make sure that everything on a diagonal line remains */
+/* on the same line. Hence we compute the line. Also we are interested in */
+/* points that are on the intersection of two lines */
+static struct linedata *BuildLine(struct glyphdata *gd,struct pointdata *pd,int is_next ) {
+ int i;
+ BasePoint *dir, *base, *start, *end;
+ struct pointdata **pspace = gd->pspace, *pd2;
+ int pcnt=0, is_l, hv;
+ double dist_error;
+ struct linedata *line;
+ double off, firstoff, lastoff, lmin=0, lmax=0;
+
+ dir = is_next ? &pd->nextunit : &pd->prevunit;
+ is_l = IsCorrectSide( gd,pd,is_next,true,dir );
+ dist_error = ( IsUnitHV( dir,true )) ? dist_error_hv : dist_error_diag ; /* Diagonals are harder to align */
+ if ( dir->x==0 && dir->y==0 )
+return( NULL );
+ base = &pd->sp->me;
+
+ for ( i= (pd - gd->points)+1; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd2 = &gd->points[i];
+ off = ( pd2->sp->me.x - base->x )*dir->y -
+ ( pd2->sp->me.y - base->y )*dir->x;
+ if ( off <= lmax - 2*dist_error || off >= lmin + 2*dist_error )
+ continue;
+ if ( off < 0 && off < lmin ) lmin = off;
+ else if ( off > 0 && off > lmax ) lmax = off;
+
+ if ((( UnitsParallel( dir,&pd2->nextunit,true ) && pd2->nextline==NULL ) &&
+ IsCorrectSide( gd,pd2,true,is_l,dir )) ||
+ (( UnitsParallel( dir,&pd2->prevunit,true ) && pd2->prevline==NULL ) &&
+ IsCorrectSide( gd,pd2,false,is_l,dir )))
+ pspace[pcnt++] = pd2;
+ }
+
+ if ( pcnt==0 )
+return( NULL );
+ if ( pcnt==1 ) {
+ /* if the line consists of just these two points, only count it as */
+ /* a true line if the two immediately follow each other */
+ if (( pd->sp->next->to != pspace[0]->sp || !pd->sp->next->knownlinear ) &&
+ ( pd->sp->prev->from != pspace[0]->sp || !pd->sp->prev->knownlinear ))
+return( NULL );
+ }
+
+ line = &gd->lines[gd->linecnt++];
+ line->pcnt = pcnt+1;
+ line->points = malloc((pcnt+1)*sizeof(struct pointdata *));
+ line->points[0] = pd;
+ line->unit = *dir;
+ line->is_left = is_l;
+ if ( dir->x < 0 || dir->y == -1 ) {
+ line->unit.x = -line->unit.x;
+ line->unit.y = -line->unit.y;
+ }
+ line->online = *base;
+ if ( is_next ) {
+ pd->nextline = line;
+ if ( pd->colinear ) pd->prevline = line;
+ } else {
+ pd->prevline = line;
+ if ( pd->colinear ) pd->nextline = line;
+ }
+ for ( i=0; i<pcnt; ++i ) {
+ if ( UnitsParallel( dir,&pspace[i]->nextunit,true ) && pspace[i]->nextline==NULL ) {
+ pspace[i]->nextline = line;
+ if ( pspace[i]->colinear )
+ pspace[i]->prevline = line;
+ }
+ if ( UnitsParallel( dir,&pspace[i]->prevunit,true ) && pspace[i]->prevline==NULL ) {
+ pspace[i]->prevline = line;
+ if ( pspace[i]->colinear )
+ pspace[i]->nextline = line;
+ }
+ line->points[i+1] = pspace[i];
+ }
+ qsort( line->points,line->pcnt,sizeof( struct pointdata * ),line_pt_cmp );
+ start = &line->points[0]->sp->me;
+ end = &line->points[pcnt]->sp->me;
+ /* Now recalculate the line unit vector basing on its starting and */
+ /* terminal points */
+ line->unit.x = ( end->x - start->x );
+ line->unit.y = ( end->y - start->y );
+ line->length = sqrt( pow( line->unit.x,2 ) + pow( line->unit.y,2 ));
+ line->unit.x /= line->length;
+ line->unit.y /= line->length;
+ hv = IsUnitHV( &line->unit,true );
+ if ( hv == 2 ) {
+ line->unit.x = 0; line->unit.y = 1;
+ } else if ( hv == 1 ) {
+ line->unit.x = 1; line->unit.y = 0;
+ } else if ( gd->has_slant && UnitsParallel( &line->unit,&gd->slant_unit,true )) {
+ firstoff = ( start->x - base->x )*gd->slant_unit.y -
+ ( start->y - base->y )*gd->slant_unit.x;
+ lastoff = ( end->x - base->x )*gd->slant_unit.y -
+ ( end->y - base->y )*gd->slant_unit.x;
+ if ( fabs( firstoff ) < 2*dist_error && fabs( lastoff ) < 2*dist_error )
+ line->unit = gd->slant_unit;
+ }
+return( line );
+}
+
+static BasePoint MiddleUnit( BasePoint *unit1, BasePoint *unit2 ) {
+ BasePoint u1, u2, ret;
+ double hyp;
+ int hv;
+
+ u1 = *unit1; u2 = *unit2;
+ if ( u1.x*u2.x + u1.y*u2.y < 0 ) {
+ u2.x = -u2.x; u2.y = -u2.y;
+ }
+ ret.x = ( u1.x + u2.x )/2;
+ ret.y = ( u1.y + u2.y )/2;
+ hyp = sqrt( pow( ret.x,2 ) + pow( ret.y,2 ));
+ ret.x /= hyp;
+ ret.y /= hyp;
+
+ hv = IsUnitHV( &ret,true );
+ if ( hv ) {
+ ret.x = ( hv == 1 ) ? 1 : 0;
+ ret.y = ( hv == 1 ) ? 0 : 1;
+ }
+return( ret );
+}
+
+static uint8 IsStubOrIntersection( struct glyphdata *gd, BasePoint *dir1,
+ struct pointdata *pd1, struct pointdata *pd2, int is_next1, int is_next2 ) {
+ int i;
+ int exc=0;
+ double dist, off, ext, norm1, norm2, opp, angle;
+ double mid_err = ( stem_slope_error + stub_slope_error )/2;
+ SplinePoint *sp1, *sp2, *nsp;
+ BasePoint hvdir, *dir2, *odir1, *odir2;
+ struct pointdata *npd;
+ struct linedata *line;
+
+ sp1 = pd1->sp; sp2 = pd2->sp;
+ dir2 = ( is_next2 ) ? &pd2->nextunit : &pd2->prevunit;
+ hvdir.x = ( int ) rint( dir1->x );
+ hvdir.y = ( int ) rint( dir1->y );
+
+ line = is_next2 ? pd2->nextline : pd2->prevline;
+ if ( !IsUnitHV( dir2,true ) && line != NULL )
+ dir2 = &line->unit;
+
+ odir1 = ( is_next1 ) ? &pd1->prevunit : &pd1->nextunit;
+ odir2 = ( is_next2 ) ? &pd2->prevunit : &pd2->nextunit;
+
+ angle = fabs( GetUnitAngle( dir1,dir2 ));
+ if ( angle > (double)stub_slope_error*1.5 && angle < PI - (double)stub_slope_error*1.5 )
+return( 0 );
+
+ /* First check if it is a slightly slanted line or a curve which joins */
+ /* a straight line under an angle close to 90 degrees. There are many */
+ /* glyphs where circles or curved features are intersected by or */
+ /* connected to vertical or horizontal straight stems (the most obvious */
+ /* cases are Greek Psi and Cyrillic Yu), and usually it is highly desired to */
+ /* mark such an intersection with a hint */
+ norm1 = ( sp1->me.x - sp2->me.x ) * odir2->x +
+ ( sp1->me.y - sp2->me.y ) * odir2->y;
+ norm2 = ( sp2->me.x - sp1->me.x ) * odir1->x +
+ ( sp2->me.y - sp1->me.y ) * odir1->y;
+ /* if this is a real stub or intersection, then vectors on both sides */
+ /* of out going-to-be stem should point in the same direction. So */
+ /* the following value should be positive */
+ opp = dir1->x * dir2->x + dir1->y * dir2->y;
+ if (( angle <= mid_err || angle >= PI - mid_err ) &&
+ opp > 0 && norm1 < 0 && norm2 < 0 && UnitsParallel( odir1,odir2,true ) &&
+ ( UnitsOrthogonal( dir1,odir1,false ) || UnitsOrthogonal( dir2,odir1,false )))
+return( 2 );
+ if (( angle <= mid_err || angle >= PI - mid_err ) &&
+ opp > 0 && (( norm1 < 0 && pd1->colinear &&
+ IsUnitHV( dir1,true ) && UnitsOrthogonal( dir1,odir2,false )) ||
+ ( norm2 < 0 && pd2->colinear &&
+ IsUnitHV( dir2,true ) && UnitsOrthogonal( dir2,odir1,false ))))
+return( 4 );
+
+ /* Now check if our 2 points form a serif termination or a feature stub */
+ /* The check is pretty dumb: it returns 'true' if all the following */
+ /* conditions are met: */
+ /* - both the points belong to the same contour; */
+ /* - there are no more than 3 other points between them; */
+ /* - anyone of those intermediate points is positioned by such a way */
+ /* that it falls inside the stem formed by our 2 base point and */
+ /* the vector we are checking and its distance from the first point */
+ /* along that vector is not larger than the stem width; */
+ /* - none of the intermediate points is parallel to the vector direction */
+ /* (otherwise we should have checked against that point instead) */
+ if ( !UnitsParallel( dir1,&hvdir,false ))
+return( 0 );
+
+ dist = ( sp1->me.x - sp2->me.x ) * dir1->y -
+ ( sp1->me.y - sp2->me.y ) * dir1->x;
+ nsp = sp1;
+
+ for ( i=0; i<4; i++ ) {
+ if (( is_next1 && nsp->prev == NULL ) || ( !is_next1 && nsp->next == NULL ))
+return( 0 );
+
+ nsp = ( is_next1 ) ? nsp->prev->from : nsp->next->to;
+ if ( ( i>0 && nsp == sp1 ) || nsp == sp2 )
+ break;
+
+ npd = &gd->points[nsp->ptindex];
+ if (UnitsParallel( &npd->nextunit,&hvdir,false ) ||
+ UnitsParallel( &npd->prevunit,&hvdir,false ))
+ break;
+
+ ext = ( sp1->me.x - nsp->me.x ) * hvdir.x +
+ ( sp1->me.y - nsp->me.y ) * hvdir.y;
+ if ( ext < 0 ) ext = -ext;
+ if (( dist > 0 && ext > dist ) || ( dist < 0 && ext < dist ))
+ break;
+
+ off = ( sp1->me.x - nsp->me.x ) * hvdir.y -
+ ( sp1->me.y - nsp->me.y ) * hvdir.x;
+ if (( dist > 0 && ( off <= 0 || off >= dist )) ||
+ ( dist < 0 && ( off >= 0 || off <= dist )))
+ exc++;
+ }
+
+ if ( nsp == sp2 && exc == 0 )
+return( 1 );
+
+return( 0 );
+}
+
+/* We normalize all stem unit vectors so that they point between 90 and 270 */
+/* degrees, as this range is optimal for sorting diagonal stems. This means */
+/* that vertical stems will normally point top to bottom, but for diagonal */
+/* stems (even if their angle is actually very close to vertical) the opposite */
+/* direction is also possible. Sometimes we "normalize" such stems converting */
+/* them to vertical. In such a case we have to swap their edges too. */
+static void SwapEdges( struct glyphdata *gd,struct stemdata *stem ) {
+ BasePoint tpos;
+ struct pointdata *tpd;
+ struct linedata *tl;
+ struct stem_chunk *chunk;
+ double toff;
+ int i, j, temp;
+
+ tpos = stem->left; stem->left = stem->right; stem->right = tpos;
+ toff = stem->lmin; stem->lmin = stem->rmax; stem->rmax = toff;
+ toff = stem->rmin; stem->rmin = stem->lmax; stem->lmax = toff;
+ tl = stem->leftline; stem->leftline = stem->rightline; stem->rightline = tl;
+
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ tpd = chunk->l; chunk->l = chunk->r; chunk->r = tpd;
+ temp = chunk->lpotential; chunk->lpotential = chunk->rpotential; chunk->rpotential = temp;
+ temp = chunk->lnext; chunk->lnext = chunk->rnext; chunk->rnext = temp;
+ temp = chunk->ltick; chunk->ltick = chunk->rtick; chunk->rtick = temp;
+
+ tpd = chunk->l;
+ if ( tpd != NULL ) {
+ for ( j=0; j<tpd->nextcnt; j++ )
+ if ( tpd->nextstems[j] == stem )
+ tpd->next_is_l[j] = true;
+ for ( j=0; j<tpd->prevcnt; j++ )
+ if ( tpd->prevstems[j] == stem )
+ tpd->prev_is_l[j] = true;
+ }
+
+ tpd = chunk->r;
+ if ( tpd != NULL ) {
+ for ( j=0; j<tpd->nextcnt; j++ )
+ if ( tpd->nextstems[j] == stem )
+ tpd->next_is_l[j] = false;
+ for ( j=0; j<tpd->prevcnt; j++ )
+ if ( tpd->prevstems[j] == stem )
+ tpd->prev_is_l[j] = false;
+ }
+ }
+
+ /* In case of a quadratic contour invert assignments to stem sides */
+ /* also for off-curve points */
+ if ( gd->order2 ) {
+ for ( i=0; i<gd->realcnt; i++ ) if ( gd->points[i].sp == NULL ) {
+ tpd = &gd->points[i];
+ for ( j=0; j<tpd->nextcnt; j++ )
+ if ( tpd->nextstems[j] == stem )
+ tpd->next_is_l[j] = !tpd->next_is_l[j];
+ for ( j=0; j<tpd->prevcnt; j++ )
+ if ( tpd->prevstems[j] == stem )
+ tpd->prev_is_l[j] = !tpd->prev_is_l[j];
+ }
+ }
+}
+
+static int StemFitsHV( struct stemdata *stem,int is_x,uint8 mask ) {
+ int i,cnt;
+ double loff,roff;
+ double lmin=0,lmax=0,rmin=0,rmax=0;
+ struct stem_chunk *chunk;
+
+ cnt = stem->chunk_cnt;
+
+ for ( i=0 ; i<stem->chunk_cnt; i++ ) {
+ if( stem->chunks[i].stub & mask )
+ break;
+ }
+ if ( i == stem->chunk_cnt )
+return( false );
+ if ( stem->chunk_cnt == 1 )
+return( true );
+
+ for ( i=0;i<cnt;i++ ) {
+ chunk = &stem->chunks[i];
+
+ if ( chunk->l != NULL ) {
+ loff = ( chunk->l->sp->me.x - stem->left.x ) * !is_x -
+ ( chunk->l->sp->me.y - stem->left.y ) * is_x;
+ if ( loff < lmin ) lmin = loff;
+ else if ( loff > lmax ) lmax = loff;
+ }
+ if ( chunk->r != NULL ) {
+ roff = ( chunk->r->sp->me.x - stem->right.x ) * !is_x -
+ ( chunk->r->sp->me.y - stem->right.y ) * is_x;
+ if ( roff < rmin ) rmin = roff;
+ else if ( roff > rmax ) rmax = roff;
+ }
+ }
+ if ((( lmax - lmin ) < 2*dist_error_hv ) && (( rmax - rmin ) < 2*dist_error_hv ))
+return( true );
+return( false );
+}
+
+static int LineFitsHV( struct linedata *line ) {
+ int i,cnt,is_x,hv;
+ double off,min=0,max=0;
+ struct pointdata *pd;
+
+ cnt = line->pcnt;
+ hv = IsUnitHV( &line->unit,true );
+ if ( hv )
+return( true );
+
+ hv = IsUnitHV( &line->unit,false );
+ if ( !hv )
+return( false );
+
+ is_x = ( hv == 1 ) ? 1 : 0;
+ for ( i=0;i<cnt;i++ ) {
+ pd = line->points[i];
+
+ off = ( pd->base.x - line->online.x ) * !is_x -
+ ( pd->base.y - line->online.y ) * is_x;
+ if ( off < min ) min = off;
+ else if ( off > max ) max = off;
+ }
+ if (( max - min ) < 2*dist_error_hv )
+return( true );
+return( false );
+}
+
+static int OnStem( struct stemdata *stem,BasePoint *test,int left ) {
+ double dist_error, off;
+ BasePoint *dir = &stem->unit;
+ double max=0, min=0;
+
+ /* Diagonals are harder to align */
+ dist_error = IsUnitHV( dir,true ) ? dist_error_hv : dist_error_diag;
+ if ( !stem->positioned ) dist_error = dist_error * 2;
+ if ( dist_error > stem->width/2 ) dist_error = stem->width/2;
+ if ( left ) {
+ off = (test->x - stem->left.x)*dir->y - (test->y - stem->left.y)*dir->x;
+ max = stem->lmax; min = stem->lmin;
+ } else {
+ off = (test->x - stem->right.x)*dir->y - (test->y - stem->right.y)*dir->x;
+ max = stem->rmax; min = stem->rmin;
+ }
+
+ if ( off > ( max - dist_error ) && off < ( min + dist_error ) )
+return( true );
+
+return( false );
+}
+
+static int BothOnStem( struct stemdata *stem,BasePoint *test1,BasePoint *test2,
+ int force_hv,int strict,int cove ) {
+ double dist_error, off1, off2;
+ BasePoint dir = stem->unit;
+ int hv, hv_strict;
+ double lmax=0, lmin=0, rmax=0, rmin=0;
+
+ hv = ( force_hv ) ? IsUnitHV( &dir,false ) : IsUnitHV( &dir,true );
+ hv_strict = ( force_hv ) ? IsUnitHV( &dir,true ) : hv;
+ if ( force_hv ) {
+ if ( force_hv != hv )
+return( false );
+ if ( !hv_strict && !StemFitsHV( stem,( hv == 1 ),7 ))
+return( false );
+ if ( !hv_strict ) {
+ dir.x = ( force_hv == 2 ) ? 0 : 1;
+ dir.y = ( force_hv == 2 ) ? 1 : 0;
+ }
+ }
+ /* Diagonals are harder to align */
+ dist_error = ( hv ) ? dist_error_hv : dist_error_diag;
+ if ( !strict ) {
+ dist_error = dist_error * 2;
+ lmax = stem->lmax; lmin = stem->lmin;
+ rmax = stem->rmax; rmin = stem->rmin;
+ }
+ if ( dist_error > stem->width/2 ) dist_error = stem->width/2;
+
+ off1 = (test1->x-stem->left.x)*dir.y - (test1->y-stem->left.y)*dir.x;
+ off2 = (test2->x-stem->right.x)*dir.y - (test2->y-stem->right.y)*dir.x;
+ if (off1 > ( lmax - dist_error ) && off1 < ( lmin + dist_error ) &&
+ off2 > ( rmax - dist_error ) && off2 < ( rmin + dist_error )) {
+ /* For some reasons in my patch from Feb 24 2008 I prohibited snapping */
+ /* to stems point pairs which together form a bend, if at least */
+ /* one point from the pair doesn't have exactly the same position as */
+ /* the stem edge. Unfortunately I don't remember why I did this, but */
+ /* this behavior has at least one obviously negative effect: it */
+ /* prevents building a stem from chunks which describe an ark */
+ /* intersected by some straight lines, even if the intersections lie */
+ /* closely enough to the ark extremum. So don't apply this test */
+ /* at least if the force_hv flag is on (which means either the */
+ /* chunk or the stem itself is not exactly horizontal/vertical) */
+ if ( !cove || force_hv || off1 == 0 || off2 == 0 )
+return( true );
+ }
+
+ off2 = (test2->x-stem->left.x)*dir.y - (test2->y-stem->left.y)*dir.x;
+ off1 = (test1->x-stem->right.x)*dir.y - (test1->y-stem->right.y)*dir.x;
+ if (off2 > ( lmax - dist_error ) && off2 < ( lmin + dist_error ) &&
+ off1 > ( rmax - dist_error ) && off1 < ( rmin + dist_error )) {
+ if ( !cove || force_hv || off1 == 0 || off2 == 0 )
+return( true );
+ }
+
+return( false );
+}
+
+static int RecalcStemOffsets( struct stemdata *stem,BasePoint *dir,int left,int right ) {
+ double off, err;
+ double lmin=0, lmax=0, rmin=0, rmax=0;
+ struct stem_chunk *chunk;
+ int i;
+
+ if ( !left && !right )
+return( false );
+ err = ( IsUnitHV( dir,true )) ? dist_error_hv : dist_error_diag;
+
+ if ( stem->chunk_cnt > 1 ) for ( i=0; i<stem->chunk_cnt; i++ ) {
+ chunk = &stem->chunks[i];
+ if ( left && chunk->l != NULL ) {
+ off = ( chunk->l->sp->me.x - stem->left.x )*dir->y -
+ ( chunk->l->sp->me.y - stem->left.y )*dir->x;
+ if ( off < lmin ) lmin = off;
+ else if ( off > lmax ) lmax = off;
+ }
+ if ( right && chunk->r != NULL ) {
+ off = ( chunk->r->sp->me.x - stem->right.x )*dir->y +
+ ( chunk->r->sp->me.y - stem->right.y )*dir->x;
+ if ( off < rmin ) rmin = off;
+ else if ( off > rmax ) rmax = off;
+ }
+ }
+ if ( lmax - lmin < 2*err && rmax - rmin < 2*err ) {
+ stem->lmin = lmin; stem->lmax = lmax;
+ stem->rmin = rmin; stem->rmax = rmax;
+return( true );
+ }
+return( false );
+}
+
+static void SetStemUnit( struct stemdata *stem,BasePoint dir ) {
+ double width;
+
+ width = ( stem->right.x - stem->left.x ) * dir.y -
+ ( stem->right.y - stem->left.y ) * dir.x;
+ if ( width < 0 ) {
+ width = -width;
+ dir.x = -dir.x;
+ dir.y = -dir.y;
+ }
+ stem->unit = dir;
+ stem->width = width;
+
+ /* Guess at which normal we want */
+ stem->l_to_r.x = dir.y; stem->l_to_r.y = -dir.x;
+ /* If we guessed wrong, use the other */
+ if (( stem->right.x-stem->left.x )*stem->l_to_r.x +
+ ( stem->right.y-stem->left.y )*stem->l_to_r.y < 0 ) {
+ stem->l_to_r.x = -stem->l_to_r.x;
+ stem->l_to_r.y = -stem->l_to_r.y;
+ }
+
+ /* Recalculate left/right offsets relatively to new vectors */
+ RecalcStemOffsets( stem,&dir,true,true );
+}
+
+static struct stem_chunk *AddToStem( struct glyphdata *gd,struct stemdata *stem,
+ struct pointdata *pd1,struct pointdata *pd2,int is_next1, int is_next2, int cheat ) {
+
+ int is_potential1 = false, is_potential2 = true;
+ struct stem_chunk *chunk=NULL;
+ BasePoint *dir = &stem->unit;
+ BasePoint *test;
+ int lincr = 1, rincr = 1;
+ double off, dist_error;
+ double loff = 0, roff = 0;
+ double min = 0, max = 0;
+ int i, in, ip, cpidx;
+ struct pointdata *pd, *npd, *ppd;
+
+ if ( cheat || stem->positioned ) is_potential2 = false;
+ /* Diagonals are harder to align */
+ dist_error = IsUnitHV( dir,true ) ? 2*dist_error_hv : 2*dist_error_diag;
+ if ( dist_error > stem->width/2 ) dist_error = stem->width/2;
+ max = stem->lmax;
+ min = stem->lmin;
+
+ /* The following swaps "left" and "right" points in case we have */
+ /* started checking relatively to a wrong edge */
+ if ( pd1 != NULL ) {
+ test = &pd1->base;
+ off = ( test->x - stem->left.x )*dir->y -
+ ( test->y - stem->left.y )*dir->x;
+ if (( !stem->ghost &&
+ ( off < ( max - dist_error ) || off > ( min + dist_error ))) ||
+ ( RealNear( stem->unit.x, 1) && stem->ghost && stem->width == 21 ) ||
+ ( RealNear( stem->unit.x,0 ) && stem->ghost && stem->width == 20 )) {
+ pd = pd1; pd1 = pd2; pd2 = pd;
+ in = is_next1; is_next1 = is_next2; is_next2 = in;
+ ip = is_potential1; is_potential1 = is_potential2; is_potential2 = ip;
+ }
+ }
+
+ if ( pd1 == NULL ) lincr = 0;
+ if ( pd2 == NULL ) rincr = 0;
+ /* Now run through existing stem chunks and see if the chunk we are */
+ /* going to add doesn't duplicate an existing one.*/
+ for ( i=stem->chunk_cnt-1; i>=0; --i ) {
+ chunk = &stem->chunks[i];
+ if ( chunk->l == pd1 ) lincr = 0;
+ if ( chunk->r == pd2 ) rincr = 0;
+
+ if (( chunk->l == pd1 || pd1 == NULL ) && ( chunk->r == pd2 || pd2 == NULL )) {
+ if ( !is_potential1 ) chunk->lpotential = false;
+ if ( !is_potential2 ) chunk->rpotential = false;
+ break;
+ } else if (( chunk->l == pd1 && chunk->r == NULL ) || ( chunk->r == pd2 && chunk->l == NULL )) {
+ if ( chunk->l == NULL ) {
+ chunk->l = pd1;
+ chunk->lpotential = is_potential1;
+ chunk->lnext = is_next1;
+ chunk->ltick = lincr;
+ } else if ( chunk->r == NULL ) {
+ chunk->r = pd2;
+ chunk->rpotential = is_potential2;
+ chunk->rnext = is_next2;
+ chunk->rtick = rincr;
+ }
+ break;
+ }
+ }
+
+ if ( i<0 ) {
+ stem->chunks = realloc(stem->chunks,(stem->chunk_cnt+1)*sizeof(struct stem_chunk));
+ chunk = &stem->chunks[stem->chunk_cnt++];
+ chunk->parent = stem;
+
+ chunk->l = pd1; chunk->lpotential = is_potential1;
+ chunk->r = pd2; chunk->rpotential = is_potential2;
+ chunk->ltick = lincr; chunk->rtick = rincr;
+
+ chunk->lnext = is_next1;
+ chunk->rnext = is_next2;
+ chunk->stemcheat = cheat;
+ chunk->stub = chunk->is_ball = false;
+ chunk->l_e_idx = chunk->r_e_idx = 0;
+ }
+
+ if ( pd1!=NULL ) {
+ loff = ( pd1->base.x - stem->left.x ) * stem->l_to_r.x +
+ ( pd1->base.y - stem->left.y ) * stem->l_to_r.y;
+ if ( is_next1==1 || is_next1==2 || pd1->colinear ) {
+ AssignStemToPoint( pd1,stem,true,true );
+ /* For quadratic layers assign the stem not only to */
+ /* spline points, but to their control points as well */
+ /* (this may be important for TTF instructions */
+ if ( gd->order2 && !pd1->sp->nonextcp && pd1->sp->nextcpindex < gd->realcnt ) {
+ cpidx = pd1->sp->nextcpindex;
+ npd = &gd->points[cpidx];
+ if ( OnStem( stem,&npd->base,true ))
+ AssignStemToPoint( npd,stem,false,true );
+ }
+ }
+ if ( is_next1==0 || is_next1==2 || pd1->colinear ) {
+ AssignStemToPoint( pd1,stem,false,true );
+ if ( gd->order2 && !pd1->sp->noprevcp && pd1->sp->prev != NULL &&
+ pd1->sp->prev->from->nextcpindex < gd->realcnt ) {
+ cpidx = pd1->sp->prev->from->nextcpindex;
+ ppd = &gd->points[cpidx];
+ if ( OnStem( stem,&ppd->base,true ))
+ AssignStemToPoint( ppd,stem,true,true );
+ }
+ }
+ }
+ if ( pd2!=NULL ) {
+ roff = ( pd2->base.x - stem->right.x ) * stem->l_to_r.x +
+ ( pd2->base.y - stem->right.y ) * stem->l_to_r.y;
+ if ( is_next2==1 || is_next2==2 || pd2->colinear ) {
+ AssignStemToPoint( pd2,stem,true,false );
+ if ( gd->order2 && !pd2->sp->nonextcp && pd2->sp->nextcpindex < gd->realcnt ) {
+ cpidx = pd2->sp->nextcpindex;
+ npd = &gd->points[cpidx];
+ if ( OnStem( stem,&npd->base,false ))
+ AssignStemToPoint( npd,stem,false,false );
+ }
+ }
+ if ( is_next2==0 || is_next2==2 || pd2->colinear ) {
+ AssignStemToPoint( pd2,stem,false,false );
+ if ( gd->order2 && !pd2->sp->noprevcp && pd2->sp->prev != NULL &&
+ pd2->sp->prev->from->nextcpindex < gd->realcnt ) {
+ cpidx = pd2->sp->prev->from->nextcpindex;
+ ppd = &gd->points[cpidx];
+ if ( OnStem( stem,&ppd->base,false ))
+ AssignStemToPoint( ppd,stem,true,false );
+ }
+ }
+ }
+ if ( loff < stem->lmin ) stem->lmin = loff;
+ else if ( loff > stem->lmax ) stem->lmax = loff;
+ if ( roff < stem->rmin ) stem->rmin = roff;
+ else if ( roff > stem->rmax ) stem->rmax = roff;
+ stem->lpcnt += lincr; stem->rpcnt += rincr;
+return( chunk );
+}
+
+static struct stemdata *FindStem( struct glyphdata *gd,struct pointdata *pd,
+ struct pointdata *pd2,BasePoint *dir,int is_next2,int de ) {
+
+ int i, cove, test_left, hv, stemcnt;
+ struct stemdata *stem;
+ BasePoint newdir;
+
+ stemcnt = ( is_next2 ) ? pd2->nextcnt : pd2->prevcnt;
+
+ for ( i=0; i<stemcnt; i++ ) {
+ stem = ( is_next2 ) ? pd2->nextstems[i] : pd2->prevstems[i];
+ test_left = ( is_next2 ) ? !pd2->next_is_l[i] : !pd2->prev_is_l[i];
+
+ if (UnitsParallel( &stem->unit,dir,true ) &&
+ OnStem( stem,&pd->sp->me,test_left ))
+return( stem );
+ }
+
+ cove = ( dir->x == 0 && pd->x_extr + pd2->x_extr == 3 ) ||
+ ( dir->y == 0 && pd->y_extr + pd2->y_extr == 3 );
+
+ /* First pass to check for strict matches */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ /* Ghost hints and BBox hits are usually generated after all other */
+ /* hint types, but we can get them here in case we are generating */
+ /* glyph data for a predefined hint layout. In this case they should */
+ /* be excluded from the following tests */
+ if ( stem->ghost || stem->bbox )
+ continue;
+
+ if ( UnitsParallel( &stem->unit,dir,true ) &&
+ BothOnStem( stem,&pd->sp->me,&pd2->sp->me,false,true,cove )) {
+ return( stem );
+ }
+ }
+ /* One more pass. At this stage larger deviations are allowed */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->ghost || stem->bbox )
+ continue;
+
+ if ( UnitsParallel( &stem->unit,dir,true ) &&
+ BothOnStem( stem,&pd->sp->me,&pd2->sp->me,false,false,cove )) {
+return( stem );
+ }
+ }
+ if ( de )
+return( NULL );
+
+ hv = IsUnitHV( dir,false );
+ if ( !hv )
+return( NULL );
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->ghost || stem->bbox )
+ continue;
+ if ( hv && BothOnStem( stem,&pd->base,&pd2->base,hv,false,cove )) {
+ newdir.x = ( hv == 2 ) ? 0 : 1;
+ newdir.y = ( hv == 2 ) ? 1 : 0;
+ if ( hv == 2 && stem->unit.y < 0 )
+ SwapEdges( gd,stem );
+ if ( stem->unit.x != newdir.x )
+ SetStemUnit( stem,newdir );
+return( stem );
+ }
+ }
+return( NULL );
+}
+
+static struct stemdata *NewStem( struct glyphdata *gd,BasePoint *dir,
+ BasePoint *pos1, BasePoint *pos2 ) {
+
+ struct stemdata * stem = &gd->stems[gd->stemcnt++];
+ double width;
+
+ stem->unit = *dir;
+ if ( dir->x < 0 || dir->y == -1 ) {
+ stem->unit.x = -stem->unit.x;
+ stem->unit.y = -stem->unit.y;
+ }
+ width = ( pos2->x - pos1->x ) * stem->unit.y -
+ ( pos2->y - pos1->y ) * stem->unit.x;
+ if ( width > 0 ) {
+ stem->left = *pos1;
+ stem->right = *pos2;
+ stem->width = width;
+ } else {
+ stem->left = *pos2;
+ stem->right = *pos1;
+ stem->width = -width;
+ }
+ /* Guess at which normal we want */
+ stem->l_to_r.x = dir->y; stem->l_to_r.y = -dir->x;
+ /* If we guessed wrong, use the other */
+ if (( stem->right.x-stem->left.x )*stem->l_to_r.x +
+ ( stem->right.y-stem->left.y )*stem->l_to_r.y < 0 ) {
+ stem->l_to_r.x = -stem->l_to_r.x;
+ stem->l_to_r.y = -stem->l_to_r.y;
+ }
+ stem->leftidx = stem->rightidx = -1;
+ stem->leftline = stem->rightline = NULL;
+ stem->lmin = stem->lmax = 0;
+ stem->rmin = stem->rmax = 0;
+ stem->ldone = stem->rdone = false;
+ stem->lpcnt = stem->rpcnt = 0;
+ stem->chunks = NULL;
+ stem->chunk_cnt = 0;
+ stem->ghost = stem->bbox = false;
+ stem->positioned = false;
+ stem->blue = -1;
+return( stem );
+}
+
+static int ParallelToDir( struct pointdata *pd,int checknext,BasePoint *dir,
+ BasePoint *opposite,SplinePoint *basesp,uint8 is_stub ) {
+
+ BasePoint n, o, *base = &basesp->me;
+ SplinePoint *sp;
+ double angle, mid_err = ( stem_slope_error + stub_slope_error )/2;
+
+ sp = pd->sp;
+ n = ( checknext ) ? pd->nextunit : pd->prevunit;
+
+ angle = fabs( GetUnitAngle( dir,&n ));
+ if (( !is_stub && angle > stem_slope_error && angle < PI - stem_slope_error ) ||
+ ( is_stub & 1 && angle > stub_slope_error*1.5 && angle < PI - stub_slope_error*1.5 ) ||
+ ( is_stub & 6 && angle > mid_err && angle < PI - mid_err ))
+return( false );
+
+ /* Now sp must be on the same side of the spline as opposite */
+ o.x = opposite->x-base->x; o.y = opposite->y-base->y;
+ n.x = sp->me.x-base->x; n.y = sp->me.y-base->y;
+ if ( ( o.x*dir->y - o.y*dir->x )*( n.x*dir->y - n.y*dir->x ) < 0 )
+return( false );
+
+return( true );
+}
+
+static int NearlyParallel( BasePoint *dir,Spline *other, double t ) {
+ BasePoint odir;
+ double olen;
+
+ odir.x = (3*other->splines[0].a*t+2*other->splines[0].b)*t+other->splines[0].c;
+ odir.y = (3*other->splines[1].a*t+2*other->splines[1].b)*t+other->splines[1].c;
+ olen = sqrt( pow( odir.x,2 ) + pow( odir.y,2 ));
+ if ( olen==0 )
+return( false );
+ odir.x /= olen; odir.y /= olen;
+return( UnitsParallel( dir,&odir,false ));
+}
+
+static double NormalDist( BasePoint *to, BasePoint *from, BasePoint *perp ) {
+ double len = (to->x-from->x)*perp->y - (to->y-from->y)*perp->x;
+ if ( len<0 ) len = -len;
+return( len );
+}
+
+static struct stemdata *FindOrMakeHVStem( struct glyphdata *gd,
+ struct pointdata *pd,struct pointdata *pd2,int is_h,int require_existing ) {
+ int i,cove = false;
+ struct stemdata *stem;
+ BasePoint dir;
+
+ dir.x = ( is_h ) ? 1 : 0;
+ dir.y = ( is_h ) ? 0 : 1;
+ if ( pd2 != NULL )
+ cove = ( dir.x == 0 && pd->x_extr + pd2->x_extr == 3 ) ||
+ ( dir.y == 0 && pd->y_extr + pd2->y_extr == 3 );
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( IsUnitHV( &stem->unit,true ) &&
+ ( pd2 != NULL && BothOnStem( stem,&pd->sp->me,&pd2->sp->me,false,false,cove )))
+ break;
+ }
+ if ( i==gd->stemcnt ) stem=NULL;
+
+ if ( stem == NULL && pd2 != NULL && !require_existing )
+ stem = NewStem( gd,&dir,&pd->sp->me,&pd2->sp->me );
+return( stem );
+}
+
+static int IsDiagonalEnd( struct glyphdata *gd,
+ struct pointdata *pd1,struct pointdata *pd2,int is_next,int require_existing ) {
+ /* suppose we have something like */
+ /* *--* */
+ /* \ \ */
+ /* \ \ */
+ /* Then let's create a vertical stem between the two points */
+ /* (and a horizontal stem if the thing is rotated 90 degrees) */
+ double width, length1, length2, dist1, dist2;
+ BasePoint *pt1, *pt2, *dir1, *dir2, *prevdir1, *prevdir2;
+ SplinePoint *prevsp1, *prevsp2;
+ struct pointdata *prevpd1, *prevpd2;
+ int hv;
+
+ if ( pd1->colinear || pd2->colinear )
+return( false );
+ pt1 = &pd1->sp->me; pt2 = &pd2->sp->me;
+ /* Both key points of a diagonal end stem should have nearly the same */
+ /* coordinate by x or y (otherwise we can't determine by which axis */
+ /* it should be hinted) */
+ if ( pt1->x >= pt2->x - dist_error_hv && pt1->x <= pt2->x + dist_error_hv ) {
+ width = pd1->sp->me.y - pd2->sp->me.y;
+ hv = 1;
+ } else if ( pt1->y >= pt2->y - dist_error_hv && pt1->y <= pt2->y + dist_error_hv ) {
+ width = pd1->sp->me.x - pd2->sp->me.x;
+ hv = 2;
+ } else
+return( false );
+
+ dir1 = ( is_next ) ? &pd1->nextunit : &pd1->prevunit;
+ dir2 = ( is_next ) ? &pd2->prevunit : &pd2->nextunit;
+ if ( IsUnitHV( dir1,true )) /* Must be diagonal */
+return( false );
+ prevsp1 = ( is_next ) ? pd1->sp->next->to : pd1->sp->prev->from;
+ prevsp2 = ( is_next ) ? pd2->sp->prev->from : pd2->sp->next->to;
+ prevpd1 = &gd->points[prevsp1->ptindex];
+ prevpd2 = &gd->points[prevsp2->ptindex];
+ prevdir1 = ( is_next ) ? &prevpd1->prevunit : &prevpd1->nextunit;
+ prevdir2 = ( is_next ) ? &prevpd2->nextunit : &prevpd2->prevunit;
+ /* Ensure we have got a real diagonal, i. e. its sides are parallel */
+ if ( !UnitsParallel( dir1,dir2,true ) || !UnitsParallel( prevdir1,prevdir2,true ))
+return( false );
+
+ /* Diagonal width should be smaller than its length */
+ length1 = pow(( prevsp1->me.x - pt1->x ),2 ) + pow(( prevsp1->me.y - pt1->y ),2 );
+ length2 = pow(( prevsp2->me.x - pt2->x ),2 ) + pow(( prevsp2->me.y - pt2->y ),2 );
+ if ( length2 < length1 ) length1 = length2;
+ if ( pow( width,2 ) > length1 )
+return( false );
+
+ /* Finally exclude too short diagonals where the distance between key */
+ /* points of one edge at the direction orthogonal to the unit vector */
+ /* of the stem we are about to add is smaller than normal HV stem */
+ /* fudge. Such diagonals may be later turned into HV stems, and we will */
+ /* result into getting two coincident hints */
+ dist1 = ( hv == 1 ) ? prevsp1->me.y - pt1->y : prevsp1->me.x - pt1->x;
+ dist2 = ( hv == 1 ) ? prevsp2->me.y - pt2->y : prevsp2->me.x - pt2->x;
+ if ( dist1 < 0 ) dist1 = -dist1;
+ if ( dist2 < 0 ) dist2 = -dist2;
+ if ( dist1 < 2*dist_error_hv && dist2 < 2*dist_error_hv )
+return( false );
+
+return( hv );
+}
+
+static struct stemdata *TestStem( struct glyphdata *gd,struct pointdata *pd,
+ BasePoint *dir,SplinePoint *match,int is_next,int is_next2,int require_existing,uint8 is_stub,int eidx ) {
+ struct pointdata *pd2;
+ struct stemdata *stem, *destem;
+ struct stem_chunk *chunk;
+ struct linedata *otherline;
+ double width;
+ struct linedata *line, *line2;
+ BasePoint *mdir, middle;
+ int de=false, hv, l_changed;
+
+ width = ( match->me.x - pd->sp->me.x )*dir->y -
+ ( match->me.y - pd->sp->me.y )*dir->x;
+ if ( width < 0 ) width = -width;
+ if ( width < .5 )
+return( NULL ); /* Zero width stems aren't interesting */
+ if (( is_next && pd->sp->next->to==match ) || ( !is_next && pd->sp->prev->from==match ))
+return( NULL ); /* Don't want a stem between two splines that intersect */
+
+ pd2 = &gd->points[match->ptindex];
+
+ line = is_next ? pd->nextline : pd->prevline;
+ mdir = is_next2 ? &pd2->nextunit : &pd2->prevunit;
+ line2 = is_next2 ? pd2->nextline : pd2->prevline;
+ if ( !IsUnitHV( mdir,true ) && line2 != NULL )
+ mdir = &line2->unit;
+ if ( mdir->x==0 && mdir->y==0 )
+return( NULL ); /* cannot determine the opposite point's direction */
+
+ if ( !UnitsParallel( mdir,dir,true ) && !is_stub )
+return( NULL ); /* Cannot make a stem if edges are not parallel (unless it is a serif) */
+
+ if ( is_stub & 1 && !IsUnitHV( dir,true )) {
+ /* For serifs we prefer the vector which is closer to horizontal/vertical */
+ middle = MiddleUnit( dir,mdir );
+ if ( UnitCloserToHV( &middle,dir ) == 1 && UnitCloserToHV( &middle,mdir ) == 1 )
+ dir = &middle;
+ else if ( UnitCloserToHV( mdir,dir ) == 1 )
+ dir = mdir;
+ if ( !IsUnitHV( dir,true ) &&
+ ( hint_diagonal_ends || require_existing ))
+ de = IsDiagonalEnd( gd,pd,pd2,is_next,require_existing );
+ }
+
+ stem = FindStem( gd,pd,pd2,dir,is_next2,de );
+ destem = NULL;
+ if ( de )
+ destem = FindOrMakeHVStem( gd,pd,pd2,( de == 1 ),require_existing );
+
+ if ( stem == NULL && !require_existing )
+ stem = NewStem( gd,dir,&pd->sp->me,&match->me );
+ if ( stem != NULL ) {
+ chunk = AddToStem( gd,stem,pd,pd2,is_next,is_next2,false );
+ if ( chunk != NULL ) {
+ chunk->stub = is_stub;
+ chunk->l_e_idx = chunk->r_e_idx = eidx;
+ }
+
+ if ( chunk != NULL && gd->linecnt > 0 ) {
+ hv = IsUnitHV( &stem->unit,true );
+ /* For HV stems allow assigning a line to a stem edge only */
+ /* if that line also has an exactly HV vector */
+ if ( line != NULL && (( !hv &&
+ UnitsParallel( &stem->unit,&line->unit,true ) &&
+ RecalcStemOffsets( stem,&line->unit,true,true )) ||
+ ( hv && line->unit.x == stem->unit.x && line->unit.y == stem->unit.y ))) {
+
+ otherline = NULL; l_changed = false;
+ if (( stem->leftline == NULL ||
+ stem->leftline->length < line->length ) && chunk->l == pd ) {
+
+ stem->leftline = line;
+ l_changed = true;
+ otherline = stem->rightline;
+ } else if (( stem->rightline == NULL ||
+ stem->rightline->length < line->length ) && chunk->r == pd ) {
+
+ stem->rightline = line;
+ l_changed = true;
+ otherline = stem->leftline;
+ }
+ /* If lines are attached to both sides of a diagonal stem, */
+ /* then prefer the longer line */
+ if ( !hv && l_changed && !stem->positioned &&
+ ( otherline == NULL || ( otherline->length < line->length )))
+ SetStemUnit( stem,line->unit );
+ }
+ if ( line2 != NULL && (( !hv &&
+ UnitsParallel( &stem->unit,&line2->unit,true ) &&
+ RecalcStemOffsets( stem,&line2->unit,true,true )) ||
+ ( hv && line2->unit.x == stem->unit.x && line2->unit.y == stem->unit.y ))) {
+
+ otherline = NULL; l_changed = false;
+ if (( stem->leftline == NULL ||
+ stem->leftline->length < line2->length ) && chunk->l == pd2 ) {
+
+ stem->leftline = line2;
+ l_changed = true;
+ otherline = stem->rightline;
+ } else if (( stem->rightline == NULL ||
+ stem->rightline->length < line2->length ) && chunk->r == pd2 ) {
+
+ stem->rightline = line2;
+ l_changed = true;
+ otherline = stem->leftline;
+ }
+ if ( !hv && l_changed && !stem->positioned &&
+ ( otherline == NULL || ( otherline->length < line2->length )))
+ SetStemUnit( stem,line2->unit );
+ }
+ }
+ }
+
+ if ( destem != NULL )
+ AddToStem( gd,destem,pd,pd2,is_next,!is_next,1 );
+return( stem );
+}
+
+static double FindSameSlope(Spline *s,BasePoint *dir,double close_to) {
+ double a, b, c, desc;
+ double t1, t2;
+ double d1, d2;
+
+ if ( s==NULL )
+return( -1e4 );
+
+ a = dir->x*s->splines[1].a*3 - dir->y*s->splines[0].a*3;
+ b = dir->x*s->splines[1].b*2 - dir->y*s->splines[0].b*2;
+ c = dir->x*s->splines[1].c - dir->y*s->splines[0].c ;
+ if ( a!=0 ) {
+ desc = b*b - 4*a*c;
+ if ( desc<0 )
+return( -1e4 );
+ desc = sqrt(desc);
+ t1 = (-b+desc)/(2*a);
+ t2 = (-b-desc)/(2*a);
+ if ( (d1=t1-close_to)<0 ) d1 = -d1;
+ if ( (d2=t2-close_to)<0 ) d2 = -d2;
+ if ( d2<d1 && t2>=-.001 && t2<=1.001 )
+ t1 = t2;
+ } else if ( b!=0 )
+ t1 = -c/b;
+ else
+return( -1e4 );
+
+return( t1 );
+}
+
+/* This function is used when generating stem data for preexisting */
+/* stem hints. If we already know the desired hint position, then we */
+/* can safely assign to this hint any points which meet other conditions */
+/* but have no corresponding position at the opposite edge. */
+static int HalfStemNoOpposite( struct glyphdata *gd,struct pointdata *pd,
+ struct stemdata *stem,BasePoint *dir,int is_next ) {
+ int i, ret=0, allowleft, allowright, hv, corner;
+ struct stemdata *tstem;
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ tstem = &gd->stems[i];
+ if ( tstem->bbox || !tstem->positioned || tstem == stem )
+ continue;
+ allowleft = ( !tstem->ghost || tstem->width == 20 );
+ allowright = ( !tstem->ghost || tstem->width == 21 );
+ hv = IsUnitHV( &tstem->unit,true );
+ corner = (( pd->x_corner && hv == 2 ) || ( pd->y_corner && hv == 1 ));
+
+ if ( UnitsParallel( &tstem->unit,dir,true ) || tstem->ghost || corner ) {
+ if ( OnStem( tstem,&pd->sp->me,true ) && allowleft ) {
+ if ( IsCorrectSide( gd,pd,is_next,true,&tstem->unit )) {
+ AddToStem( gd,tstem,pd,NULL,is_next,false,false );
+ ret++;
+ }
+ } else if ( OnStem( tstem,&pd->sp->me,false ) && allowright ) {
+ if ( IsCorrectSide( gd,pd,is_next,false,&tstem->unit )) {
+ AddToStem( gd,tstem,NULL,pd,false,is_next,false );
+ ret++;
+ }
+ }
+ }
+ }
+return( ret );
+}
+
+static struct stemdata *HalfStem( struct glyphdata *gd,struct pointdata *pd,
+ BasePoint *dir,Spline *other,double other_t,int is_next,int eidx ) {
+ /* Find the spot on other where the slope is the same as dir */
+ double t1;
+ double width;
+ BasePoint match;
+ struct stemdata *stem = NULL, *tstem;
+ struct pointdata *pd2 = NULL, *tpd;
+ int i;
+
+ t1 = FindSameSlope( other,dir,other_t );
+ if ( t1==-1e4 )
+return( NULL );
+ if ( t1<0 && other->from->prev!=NULL && gd->points[other->from->ptindex].colinear ) {
+ other = other->from->prev;
+ t1 = FindSameSlope(other,dir,1.0);
+ } else if ( t1>1 && other->to->next!=NULL && gd->points[other->to->ptindex].colinear ) {
+ other = other->to->next;
+ t1 = FindSameSlope(other,dir,0.0);
+ }
+
+ if ( t1<-.001 || t1>1.001 )
+return( NULL );
+
+ /* Ok. the opposite edge has the right slope at t1 */
+ /* Now see if we can make a one sided stem out of these two */
+ match.x = ((other->splines[0].a*t1+other->splines[0].b)*t1+other->splines[0].c)*t1+other->splines[0].d;
+ match.y = ((other->splines[1].a*t1+other->splines[1].b)*t1+other->splines[1].c)*t1+other->splines[1].d;
+
+ width = (match.x-pd->sp->me.x)*dir->y - (match.y-pd->sp->me.y)*dir->x;
+ /* offset = (match.x-pd->sp->me.x)*dir->x + (match.y-pd->sp->me.y)*dir->y;*/
+ if ( width<.5 && width>-.5 )
+return( NULL ); /* Zero width stems aren't interesting */
+
+ if ( isnan(t1))
+ IError( "NaN value in HalfStem" );
+
+ if ( is_next ) {
+ pd->nextedges[eidx] = other;
+ pd->next_e_t[eidx] = t1;
+ } else {
+ pd->prevedges[eidx] = other;
+ pd->prev_e_t[eidx] = t1;
+ }
+
+ /* In my experience the only case where this function may be useful */
+ /* is when it occasionally finds a real spline point which for some */
+ /* reasons has been neglected by other tests and yet forms a valid */
+ /* pair for the first point. So run through points and see if we */
+ /* have actually got just a position on spline midway between to points, */
+ /* or it is a normal point allowing to make a normal stem chunk */
+ for ( i=0; i<gd->pcnt; ++i ) {
+ tpd = &gd->points[i];
+ if ( tpd->sp != NULL && tpd->sp->me.x == match.x && tpd->sp->me.y == match.y ) {
+ pd2 = tpd;
+ break;
+ }
+ }
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ tstem = &gd->stems[i];
+ if ( UnitsParallel( &tstem->unit,dir,true ) &&
+ BothOnStem( tstem,&pd->base,&match,false,false,false )) {
+ stem = tstem;
+ break;
+ }
+ }
+ if ( stem == NULL )
+ stem = NewStem(gd,dir,&pd->sp->me,&match);
+
+ AddToStem( gd,stem,pd,pd2,is_next,false,false );
+return( stem );
+}
+
+static int ConnectsAcross( struct glyphdata *gd,SplinePoint *sp,
+ int is_next,Spline *findme,int eidx ) {
+ struct pointdata *pd = &gd->points[sp->ptindex];
+ Spline *other, *test;
+ BasePoint dir;
+
+ other = ( is_next ) ? pd->nextedges[eidx] : pd->prevedges[eidx];
+
+ if ( other==findme )
+return( true );
+ if ( other==NULL )
+return( false );
+
+ dir.x = ( is_next ) ? -pd->nextunit.x : pd->prevunit.x;
+ dir.y = ( is_next ) ? -pd->nextunit.y : pd->prevunit.y;
+ test = other->to->next;
+ while ( test!=NULL && test != other &&
+ gd->points[test->from->ptindex].nextunit.x * dir.x +
+ gd->points[test->from->ptindex].nextunit.y * dir.y > 0 ) {
+ if ( test==findme )
+return( true );
+ test = test->to->next;
+ }
+
+ dir.x = ( is_next ) ? pd->nextunit.x : -pd->prevunit.x;
+ dir.y = ( is_next ) ? pd->nextunit.y : -pd->prevunit.y;
+ test = other->from->prev;
+ while ( test!=NULL && test != other &&
+ gd->points[test->to->ptindex].prevunit.x * dir.x +
+ gd->points[test->to->ptindex].prevunit.y * dir.y > 0 ) {
+ if ( test==findme )
+return( true );
+ test = test->from->prev;
+ }
+return( false );
+}
+
+static int ConnectsAcrossToStem( struct glyphdata *gd,struct pointdata *pd,
+ int is_next,struct stemdata *target,int is_l,int eidx ) {
+
+ Spline *other, *test;
+ BasePoint dir;
+ struct pointdata *tpd;
+ int ecnt, stemidx;
+
+ ecnt = ( is_next ) ? pd->next_e_cnt : pd->prev_e_cnt;
+ if ( ecnt < eidx + 1 )
+return( false );
+ other = ( is_next ) ? pd->nextedges[eidx] : pd->prevedges[eidx];
+
+ test = other;
+ dir.x = ( is_next ) ? pd->nextunit.x : -pd->prevunit.x;
+ dir.y = ( is_next ) ? pd->nextunit.y : -pd->prevunit.y;
+ do {
+ tpd = &gd->points[test->to->ptindex];
+ stemidx = IsStemAssignedToPoint( tpd,target,false );
+ if ( stemidx != -1 && tpd->prev_is_l[stemidx] == !is_l &&
+ IsSplinePeak( gd,tpd,rint( target->unit.y ),rint( target->unit.y ),7 ))
+return( true );
+
+ test = test->to->next;
+ } while ( test!=NULL && test != other && stemidx == -1 &&
+ ( tpd->prevunit.x * dir.x + tpd->prevunit.y * dir.y >= 0 ));
+
+ test = other;
+ dir.x = ( is_next ) ? -pd->nextunit.x : pd->prevunit.x;
+ dir.y = ( is_next ) ? -pd->nextunit.y : pd->prevunit.y;
+ do {
+ tpd = &gd->points[test->from->ptindex];
+ stemidx = IsStemAssignedToPoint( tpd,target,true );
+ if ( stemidx != -1 && tpd->next_is_l[stemidx] == !is_l &&
+ IsSplinePeak( gd,tpd,rint( target->unit.y ),rint( target->unit.y ),7 ))
+return( true );
+
+ test = test->from->prev;
+ } while ( test!=NULL && test != other && stemidx == -1 &&
+ ( tpd->nextunit.x * dir.x + tpd->nextunit.y * dir.y >= 0 ));
+return( false );
+}
+
+static double RecalcT( Spline *base,SplinePoint *from, SplinePoint *to, double curt ) {
+ double baselen, fromlen, tolen, ret;
+ Spline *cur;
+
+ baselen = SplineLength( base );
+ fromlen = baselen * curt;
+ tolen = baselen * ( 1 - curt );
+
+ cur = base->from->prev;
+ while ( cur != NULL && cur->to != from ) {
+ fromlen += SplineLength( cur );
+ cur = cur->from->prev;
+ }
+ cur = base->to->next;
+ while ( cur!= NULL && cur->from != to ) {
+ tolen += SplineLength( cur );
+ cur = cur->to->next;
+ }
+ ret = fromlen/( fromlen + tolen );
+return( ret );
+}
+
+static int BuildStem( struct glyphdata *gd,struct pointdata *pd,int is_next,
+ int require_existing,int has_existing,int eidx ) {
+ BasePoint *dir;
+ Spline *other, *cur;
+ double t;
+ double tod, fromd, dist;
+ SplinePoint *testpt, *topt, *frompt;
+ struct linedata *line;
+ struct pointdata *testpd, *topd, *frompd;
+ int tp, fp, t_needs_recalc=false, ret=0;
+ uint8 tstub=0, fstub=0;
+ BasePoint opposite;
+ struct stemdata *stem=NULL;
+
+ if ( is_next ) {
+ dir = &pd->nextunit;
+ other = pd->nextedges[eidx];
+ cur = pd->sp->next;
+ t = pd->next_e_t[eidx];
+ dist = pd->next_dist[eidx];
+ } else {
+ dir = &pd->prevunit;
+ other = pd->prevedges[eidx];
+ cur = pd->sp->prev;
+ t = pd->prev_e_t[eidx];
+ dist = pd->prev_dist[eidx];
+ }
+ topt = other->to; frompt = other->from;
+ topd = &gd->points[topt->ptindex];
+ frompd = &gd->points[frompt->ptindex];
+
+ line = is_next ? pd->nextline : pd->prevline;
+ if ( !IsUnitHV( dir,true ) && line != NULL)
+ dir = &line->unit;
+
+ if ( other==NULL )
+return( 0 );
+
+ opposite.x = ((other->splines[0].a*t+other->splines[0].b)*t+other->splines[0].c)*t+other->splines[0].d;
+ opposite.y = ((other->splines[1].a*t+other->splines[1].b)*t+other->splines[1].c)*t+other->splines[1].d;
+
+ if ( eidx == 0 ) tstub = IsStubOrIntersection( gd,dir,pd,topd,is_next,false );
+ if ( eidx == 0 ) fstub = IsStubOrIntersection( gd,dir,pd,frompd,is_next,true );
+ tp = ParallelToDir( topd,false,dir,&opposite,pd->sp,tstub );
+ fp = ParallelToDir( frompd,true,dir,&opposite,pd->sp,fstub );
+
+ /* if none of the opposite points is parallel to the needed vector, then */
+ /* give it one more chance by skipping those points and looking at the next */
+ /* and previous one. This can be useful in situations where the opposite */
+ /* edge cannot be correctly detected just because there are too many points */
+ /* on the spline (which is a very common situation for poorly designed */
+ /* fonts or fonts with quadratic splines). */
+ /* But do that only for colinear spline segments and ensure that there are */
+ /* no bends between two splines. */
+ if ( !tp && ( !fp || t > 0.5 ) &&
+ topd->colinear && &other->to->next != NULL ) {
+ testpt = topt->next->to;
+ testpd = &gd->points[testpt->ptindex];
+ BasePoint *initdir = &topd->prevunit;
+ while ( !tp && topd->colinear && pd->sp != testpt && other->from != testpt && (
+ testpd->prevunit.x * initdir->x +
+ testpd->prevunit.y * initdir->y > 0 )) {
+
+ topt = testpt; topd = testpd;
+ tp = ParallelToDir( topd,false,dir,&opposite,pd->sp,false );
+ testpt = topt->next->to;
+ testpd = &gd->points[testpt->ptindex];
+ }
+ if ( tp ) t_needs_recalc = true;
+ }
+ if ( !fp && ( !fp || t < 0.5 ) &&
+ frompd->colinear && &other->from->prev != NULL ) {
+ testpt = frompt->prev->from;
+ testpd = &gd->points[testpt->ptindex];
+ BasePoint *initdir = &frompd->prevunit;
+ while ( !fp && frompd->colinear && pd->sp != testpt && other->to != testpt && (
+ testpd->prevunit.x * initdir->x +
+ testpd->prevunit.y * initdir->y > 0 )) {
+
+ frompt = testpt; frompd = testpd;
+ fp = ParallelToDir( frompd,true,dir,&opposite,pd->sp,false );
+ testpt = frompt->prev->from;
+ testpd = &gd->points[testpt->ptindex];
+ }
+ if ( fp ) t_needs_recalc = true;
+ }
+ if ( t_needs_recalc )
+ t = RecalcT( other,frompt,topt,t );
+ if ( !tp && !fp ) {
+ if ( has_existing )
+ ret = HalfStemNoOpposite( gd,pd,NULL,dir,is_next );
+return( ret );
+ }
+
+ /* We have several conflicting metrics for getting the "better" stem */
+ /* Generally we prefer the stem with the smaller width (but not always. See tilde) */
+ /* Generally we prefer the stem formed by the point closer to the intersection */
+ tod = (1-t)*NormalDist( &topt->me,&pd->sp->me,dir );
+ fromd = t*NormalDist( &frompt->me,&pd->sp->me,dir );
+
+ if ( tp && (( tod<fromd ) ||
+ ( !fp && ( tod<2*fromd || dist < topd->prev_dist[eidx] ||
+ ConnectsAcross( gd,frompt,true,cur,eidx ) || NearlyParallel( dir,other,t ))))) {
+ stem = TestStem( gd,pd,dir,topt,is_next,false,require_existing,tstub,eidx );
+ }
+ if ( stem == NULL && fp && (( fromd<tod ) ||
+ ( !tp && ( fromd<2*tod || dist < frompd->next_dist[eidx] ||
+ ConnectsAcross( gd,topt,false,cur,eidx ) || NearlyParallel( dir,other,t ))))) {
+ stem = TestStem( gd,pd,dir,frompt,is_next,true,require_existing,fstub,eidx );
+ }
+ if ( eidx == 0 && stem == NULL && !require_existing && cur!=NULL &&
+ !other->knownlinear && !cur->knownlinear )
+ stem = HalfStem( gd,pd,dir,other,t,is_next,eidx );
+ if ( stem != NULL ) ret = 1;
+ if ( has_existing )
+ ret += HalfStemNoOpposite( gd,pd,stem,dir,is_next );
+return( ret );
+}
+
+static void AssignLinePointsToStems( struct glyphdata *gd ) {
+ struct pointdata *pd;
+ struct stemdata *stem;
+ struct linedata *line;
+ struct stem_chunk *chunk;
+ int i, j, stem_hv, line_hv, needs_hv=false;
+
+ for ( i=0; i<gd->stemcnt; ++i ) if ( !gd->stems[i].toobig ) {
+ stem = &gd->stems[i];
+ stem_hv = IsUnitHV( &stem->unit,true );
+ needs_hv = ( stem_hv || ( stem->chunk_cnt == 1 &&
+ stem->chunks[0].stub && IsUnitHV( &stem->unit,false )));
+
+ if ( stem->leftline != NULL ) {
+ line = stem->leftline;
+ line_hv = ( needs_hv && LineFitsHV( line ));
+
+ if ( needs_hv && !line_hv )
+ stem->leftline = NULL;
+ else {
+ for ( j=0; j<line->pcnt; j++ ) {
+ pd = line->points[j];
+ if ( pd->prevline == line && OnStem( stem,&pd->base,true ) &&
+ IsStemAssignedToPoint( pd,stem,false ) == -1) {
+ chunk = AddToStem( gd,stem,pd,NULL,false,false,false );
+ chunk->lpotential = true;
+ } if ( pd->nextline == line && OnStem( stem,&pd->base,true ) &&
+ IsStemAssignedToPoint( pd,stem,true ) == -1 ) {
+ chunk = AddToStem( gd,stem,pd,NULL,true,false,false );
+ chunk->lpotential = true;
+ }
+ }
+ }
+ }
+ if ( stem->rightline != NULL ) {
+ line = stem->rightline;
+ line_hv = ( needs_hv && LineFitsHV( line ));
+
+ if ( needs_hv && !line_hv )
+ stem->rightline = NULL;
+ else {
+ for ( j=0; j<line->pcnt; j++ ) {
+ pd = line->points[j];
+ if ( pd->prevline == line && OnStem( stem,&pd->base,false ) &&
+ IsStemAssignedToPoint( pd,stem,false ) == -1 ) {
+ chunk = AddToStem( gd,stem,NULL,pd,false,false,false );
+ chunk->rpotential = true;
+ } if ( pd->nextline == line && OnStem( stem,&pd->base,false ) &&
+ IsStemAssignedToPoint( pd,stem,true ) == -1 ) {
+ chunk = AddToStem( gd,stem,NULL,pd,false,true,false );
+ chunk->rpotential = true;
+ }
+ }
+ }
+ }
+ }
+}
+
+static struct stemdata *DiagonalCornerStem( struct glyphdata *gd,
+ struct pointdata *pd,int require_existing ) {
+ Spline *other = pd->bothedge;
+ struct pointdata *pfrom = NULL, *pto = NULL, *pd2 = NULL;
+ double width, length;
+ struct stemdata *stem;
+
+ pfrom = &gd->points[other->from->ptindex];
+ pto = &gd->points[other->to->ptindex];
+ if ( pd->symetrical_h && pto->symetrical_h && pd->both_e_t>.9 )
+ pd2 = pto;
+ else if ( pd->symetrical_h && pfrom->symetrical_h && pd->both_e_t<.1 )
+ pd2 = pfrom;
+ else if ( pd->symetrical_v && pto->symetrical_v && pd->both_e_t>.9 )
+ pd2 = pto;
+ else if ( pd->symetrical_v && pfrom->symetrical_v && pd->both_e_t<.1 )
+ pd2 = pfrom;
+ else if ( pd->symetrical_h && other->islinear && other->splines[1].c==0 ) {
+ pd2 = pfrom;
+ } else if ( pd->symetrical_v && other->islinear && other->splines[0].c==0 ) {
+ pd2 = pfrom;
+ } else
+return( NULL );
+
+ if ( pd->symetrical_v )
+ width = (pd->sp->me.x-pd2->sp->me.x);
+ else
+ width = (pd->sp->me.y-pd2->sp->me.y);
+ length = (pd->sp->next->to->me.x-pd->sp->me.x)*(pd->sp->next->to->me.x-pd->sp->me.x) +
+ (pd->sp->next->to->me.y-pd->sp->me.y)*(pd->sp->next->to->me.y-pd->sp->me.y);
+ if ( width*width>length )
+return( NULL );
+
+ stem = FindOrMakeHVStem(gd,pd,pd2,pd->symetrical_h,require_existing);
+return( stem );
+}
+
+static int chunk_cmp( const void *_p1, const void *_p2 ) {
+ const struct stem_chunk *ch1 = _p1, *ch2 = _p2;
+
+ struct stemdata *stem;
+ double loff1=0,roff1=0,loff2=0,roff2=0;
+
+ stem = ch1->parent;
+ if ( stem==NULL )
+return( 0 );
+
+ if ( ch1->l != NULL )
+ loff1 = ( ch1->l->sp->me.x - stem->left.x ) * stem->unit.x +
+ ( ch1->l->sp->me.y - stem->left.y ) * stem->unit.y;
+ if ( ch1->r != NULL )
+ roff1 = ( ch1->r->sp->me.x - stem->right.x ) * stem->unit.x +
+ ( ch1->r->sp->me.y - stem->right.y ) * stem->unit.y;
+ if ( ch2->l != NULL )
+ loff2 = ( ch2->l->sp->me.x - stem->left.x ) * stem->unit.x +
+ ( ch2->l->sp->me.y - stem->left.y ) * stem->unit.y;
+ if ( ch2->r != NULL )
+ roff2 = ( ch2->r->sp->me.x - stem->right.x ) * stem->unit.x +
+ ( ch2->r->sp->me.y - stem->right.y ) * stem->unit.y;
+
+ if ( loff1>loff2 )
+return( 1 );
+ else if ( loff1<loff2 )
+return( -1 );
+ else {
+ if ( roff1>roff2 )
+return( 1 );
+ else if ( roff1<roff2 )
+return( -1 );
+ else
+return( 0 );
+ }
+}
+
+static int stem_cmp( const void *_p1, const void *_p2 ) {
+ struct stemdata * const *st1 = _p1, * const *st2 = _p2;
+ double start1, end1, start2, end2;
+
+ if ( fabs( (*st1)->unit.x ) > fabs( (*st1)->unit.y )) {
+ start1 = (*st1)->right.y; end1 = (*st1)->left.y;
+ start2 = (*st2)->right.y; end2 = (*st2)->left.y;
+ } else {
+ start1 = (*st1)->left.x; end1 = (*st1)->right.x;
+ start2 = (*st2)->left.x; end2 = (*st2)->right.x;
+ }
+
+ if ( start1 > start2 )
+return( 1 );
+ else if ( start1 < start2 )
+return( -1 );
+ else {
+ if ( end1 > end2 )
+return( 1 );
+ else if ( end1 < end2 )
+return( -1 );
+ else
+return( 0 );
+ }
+}
+
+static void FixupT( struct pointdata *pd,int stemidx,int isnext, int eidx ) {
+ /* When we calculated "next/prev_e_t" we deliberately did not use pd1->me */
+ /* (because things get hard at intersections) so our t is only an approx-*/
+ /* imation. We can do a lot better now */
+ Spline *s;
+ Spline myline;
+ SplinePoint end1, end2;
+ double width,t,sign, len, dot;
+ BasePoint pts[9];
+ extended lts[10], sts[10];
+ BasePoint diff;
+ struct stemdata *stem ;
+
+ if ( pd == NULL || stemidx == -1 )
+return;
+ stem = ( isnext ) ? pd->nextstems[stemidx] : pd->prevstems[stemidx];
+ width = ( stem->right.x - stem->left.x )*stem->unit.y -
+ ( stem->right.y-stem->left.y )*stem->unit.x;
+ s = ( isnext ) ? pd->nextedges[eidx] : pd->prevedges[eidx];
+ if ( s==NULL )
+return;
+ diff.x = s->to->me.x-s->from->me.x;
+ diff.y = s->to->me.y-s->from->me.y;
+ if ( diff.x<.001 && diff.x>-.001 && diff.y<.001 && diff.y>-.001 )
+return; /* Zero length splines give us NaNs */
+ len = sqrt( pow( diff.x,2 ) + pow( diff.y,2 ));
+ dot = ( diff.x*stem->unit.x + diff.y*stem->unit.y )/len;
+ if ( dot < .0004 && dot > -.0004 )
+return; /* It's orthogonal to our stem */
+
+ if (( stem->unit.x==1 || stem->unit.x==-1 ) && s->knownlinear )
+ t = (pd->sp->me.x-s->from->me.x)/(s->to->me.x-s->from->me.x);
+ else if (( stem->unit.y==1 || stem->unit.y==-1 ) && s->knownlinear )
+ t = (pd->sp->me.y-s->from->me.y)/(s->to->me.y-s->from->me.y);
+ else {
+ memset(&myline,0,sizeof(myline));
+ memset(&end1,0,sizeof(end1));
+ memset(&end2,0,sizeof(end2));
+ sign = (( isnext && pd->next_is_l[stemidx] ) || ( !isnext && pd->prev_is_l[stemidx] )) ? 1 : -1;
+ myline.knownlinear = myline.islinear = true;
+ end1.me = pd->sp->me;
+ end2.me.x = pd->sp->me.x+1.1*sign*width*stem->l_to_r.x;
+ end2.me.y = pd->sp->me.y+1.1*sign*width*stem->l_to_r.y;
+ end1.nextcp = end1.prevcp = end1.me;
+ end2.nextcp = end2.prevcp = end2.me;
+ end1.nonextcp = end1.noprevcp = end2.nonextcp = end2.noprevcp = true;
+ end1.next = &myline; end2.prev = &myline;
+ myline.from = &end1; myline.to = &end2;
+ myline.splines[0].d = end1.me.x;
+ myline.splines[0].c = end2.me.x-end1.me.x;
+ myline.splines[1].d = end1.me.y;
+ myline.splines[1].c = end2.me.y-end1.me.y;
+ if ( SplinesIntersect(&myline,s,pts,lts,sts)<=0 )
+return;
+ t = sts[0];
+ }
+ if ( isnan(t))
+ IError( "NaN value in FixupT" );
+ if ( isnext )
+ pd->next_e_t[eidx] = t;
+ else
+ pd->prev_e_t[eidx] = t;
+}
+
+/* flags: 1 -- accept curved extrema, 2 -- accept angles, */
+/* 4 -- analyze segments (not just single points) */
+static int IsSplinePeak( struct glyphdata *gd,struct pointdata *pd,
+ int outer,int is_x,int flags ) {
+
+ double base, next, prev, nextctl, prevctl, unit_p, unit_n;
+ Spline *s, *snext, *sprev;
+ struct monotonic **space, *m;
+ int wprev, wnext, i, desired;
+ SplinePoint *sp = pd->sp;
+
+ base = ((real *) &sp->me.x)[!is_x];
+ nextctl = sp->nonextcp ? base : ((real *) &sp->nextcp.x)[!is_x];
+ prevctl = sp->noprevcp ? base : ((real *) &sp->prevcp.x)[!is_x];
+ next = prev = base;
+ snext = sp->next; sprev = sp->prev;
+
+ if ( snext->to == NULL || sprev->from == NULL )
+return( false );
+ if (!( flags & 2) && ( sp->nonextcp || sp->noprevcp ))
+return( false );
+ else if (!( flags & 1 ) && ( pd->colinear ))
+return( false );
+
+ if ( flags & 4 ) {
+ while ( snext->to->next != NULL && snext->to != sp && next == base ) {
+ next = ((real *) &snext->to->me.x)[!is_x];
+ snext = snext->to->next;
+ }
+
+ while ( sprev->from->prev != NULL && sprev->from != sp && prev == base ) {
+ prev = ((real *) &sprev->from->me.x)[!is_x];
+ sprev = sprev->from->prev;
+ }
+ } else {
+ next = ((real *) &snext->to->me.x)[!is_x];
+ prev = ((real *) &sprev->from->me.x)[!is_x];
+ }
+
+ if ( prev<base && next<base && nextctl<=base && prevctl<=base )
+ desired = ( outer ) ? -1 : 1;
+ else if ( prev>base && next>base && prevctl>=base && nextctl>=base )
+ desired = ( outer ) ? 1 : -1;
+ else
+return( false );
+
+ MonotonicFindAt( gd->ms,is_x,((real *) &sp->me.x)[is_x],space = gd->space );
+ wprev = wnext = 0;
+ for ( i=0; space[i]!=NULL; ++i ) {
+ m = space[i];
+ s = m->s;
+
+ if ( s->from == sp )
+ wnext = ((&m->xup)[is_x] ? 1 : -1 );
+ else if ( s->to == sp )
+ wprev = ((&m->xup)[is_x] ? 1 : -1 );
+ }
+
+ if ( wnext != 0 && wprev != 0 && wnext != wprev ) {
+ unit_p = (&pd->prevunit.x)[!is_x];
+ unit_n = (&pd->nextunit.x)[!is_x];
+ if ( unit_p < unit_n && (
+ ( outer && wprev == 1 ) || ( !outer && wprev == -1 )))
+return( desired );
+ else if ( unit_p > unit_n && (
+ ( outer && wnext == 1 ) || ( !outer && wnext == -1 )))
+return( desired );
+ } else {
+ if ( wnext == desired || wprev == desired )
+return( desired );
+ }
+
+return( false );
+}
+
+static struct pointdata *FindClosestOpposite(
+ struct stemdata *stem,struct stem_chunk **chunk,SplinePoint *sp,int *next ) {
+
+ struct pointdata *pd, *ret=NULL;
+ struct stem_chunk *testchunk;
+ double test, proj=1e4;
+ int i, is_l;
+
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ testchunk = &stem->chunks[i];
+ pd = NULL;
+ if ( testchunk->l != NULL && testchunk->l->sp==sp ) {
+ pd = testchunk->r;
+ is_l = false;
+ } else if ( testchunk->r != NULL && testchunk->r->sp==sp ) {
+ pd = testchunk->l;
+ is_l = true;
+ }
+
+ if ( pd != NULL ) {
+ test = ( pd->sp->me.x-sp->me.x ) * stem->unit.x +
+ ( pd->sp->me.y-sp->me.y ) * stem->unit.y;
+ if ( test < 0 ) test = -test;
+ if ( test < proj ) {
+ ret = pd;
+ proj = test;
+ *chunk = testchunk;
+ }
+ }
+ }
+ if ( ret != NULL )
+ *next = ( is_l ) ? (*chunk)->lnext : (*chunk)->rnext;
+return( ret );
+}
+
+static int ValueChunk( struct glyphdata *gd,struct vchunk *vchunks,
+ int chcnt,int idx,int l_base ) {
+
+ int peak1=0, peak2=0, val=0;
+ int i, is_x, base_next, opp_next;
+ struct pointdata *base, *opp, *frompd, *topd;
+ struct stem_chunk *chunk = vchunks[idx].chunk, *tchunk;
+ struct stemdata *stem = chunk->parent;
+ double norm, dist;
+ Spline *sbase, *sopp, *other;
+
+ /* If a stem was already present before generating glyph data, */
+ /* then it should always be preferred in case of a conflict */
+ if ( stem->positioned || chunk->stemcheat ) val++;
+
+ if ( l_base ) {
+ base = chunk->l; opp = chunk->r;
+ base_next = chunk->lnext; opp_next = chunk->rnext;
+ } else {
+ base = chunk->r; opp = chunk->l;
+ base_next = chunk->rnext; opp_next = chunk->lnext;
+ }
+ sbase = ( base_next ) ? base->sp->next : base->sp->prev;
+ sopp = ( opp_next ) ? opp->sp->next : opp->sp->prev;
+ other = ( opp_next ) ? opp->nextedges[0] : opp->prevedges[0];
+
+ /* If there are 2 conflicting chunks belonging to different stems but */
+ /* based on the same point, then we have to decide which stem is "better" */
+ /* for that point. We compare stems (or rather chunks) by assigning a */
+ /* value to each of them and then prefer the stem whose value is positive. */
+ /* A chunk gets a +1 value bonus in the following cases: */
+ /* - The stem is vertical/horizontal and splines are curved in the same */
+ /* direction at both sides of the chunk; */
+ /* - A stem has both its width and the distance between the opposite points */
+ /* smaller than another stem; */
+ /* - The common side of two stems is a straight line formed by two points */
+ /* and the opposite point can be projected to line segment between those */
+ /* two points. */
+ if ( IsUnitHV( &stem->unit,true ) && !sbase->knownlinear ) {
+ is_x = (int) rint( stem->unit.y );
+ peak1 = ( is_x ) ? base->x_extr : base->y_extr;
+ peak2 = ( is_x ) ? opp->x_extr : opp->y_extr;
+
+ dist = ( base->base.x - opp->base.x )*stem->unit.x +
+ ( base->base.y - opp->base.y )*stem->unit.y;
+
+ /* Are there any stems attached to the same base point which */
+ /* are narrower than the distance between two points forming the */
+ /* given chunk? */
+ for ( i=0; i<chcnt; i++ ) {
+ tchunk = vchunks[i].chunk;
+ if ( tchunk == NULL || tchunk == chunk || chunk->l == NULL || chunk->r == NULL )
+ continue;
+ norm = tchunk->parent->width;
+ if ( norm < fabs( dist ))
+ break;
+ }
+
+ /* If both points are curved in the same direction, then check also */
+ /* the "line of sight" between those points (if there are interventing */
+ /* splines, then it is not a real feature bend)*/
+ if ( i == chcnt && peak1 + peak2 == 3 && ConnectsAcross( gd,base->sp,opp_next,sopp,0 ))
+ val++;
+ }
+
+ frompd = &gd->points[sbase->from->ptindex];
+ topd = &gd->points[sbase->to->ptindex];
+
+ if (IsStemAssignedToPoint( frompd,stem,true ) != -1 &&
+ IsStemAssignedToPoint( topd,stem,false ) != -1 )
+ if ( other == sbase ) val++;
+
+ dist = vchunks[idx].dist;
+ for ( i=0; i<chcnt; i++ ) {
+ tchunk = vchunks[i].chunk;
+ if ( tchunk == NULL || tchunk == chunk ||
+ ( vchunks[idx].parallel && !vchunks[i].parallel ))
+ continue;
+ if ( vchunks[i].dist <= dist || tchunk->parent->width <= stem->width )
+ break;
+ }
+ if ( i==chcnt ) val++;
+
+ /* If just one of the checked chunks has both its sides parallel */
+ /* to the stem direction, then we consider it is always worth to be output. */
+ /* This check was introduced to avoid situations where a stem marking */
+ /* a feature termination can be preferred to another stem which controls */
+ /* the main part of the same feature */
+ if ( vchunks[idx].parallel ) {
+ for ( i=0; i<chcnt; i++ ) {
+ if ( vchunks[i].chunk == NULL || vchunks[i].chunk == chunk )
+ continue;
+ if ( vchunks[i].parallel )
+ break;
+ }
+ if ( i == chcnt ) val++;
+ }
+
+return( val );
+}
+
+static void CheckPotential( struct glyphdata *gd,struct pointdata *pd,int is_next ) {
+ int i, j, is_l, next1, stemcnt, val;
+ int val_cnt=0;
+ BasePoint *lunit, *runit;
+ struct stemdata **stems;
+ struct vchunk *vchunks;
+ struct stem_chunk *cur;
+
+ stemcnt = ( is_next ) ? pd->nextcnt : pd->prevcnt;
+ stems = ( is_next ) ? pd->nextstems : pd->prevstems;
+ vchunks = calloc( stemcnt,sizeof( VChunk ));
+
+ for ( i=0; i<stemcnt; i++ ) {
+ is_l = ( is_next ) ? pd->next_is_l[i] : pd->prev_is_l[i];
+ FindClosestOpposite( stems[i],&vchunks[i].chunk,pd->sp,&next1 );
+ if ( vchunks[i].chunk == NULL )
+ continue;
+ cur = vchunks[i].chunk;
+ if ( vchunks[i].value > 0 ) val_cnt++;
+ vchunks[i].dist = pow( cur->l->base.x - cur->r->base.x,2 ) +
+ pow( cur->l->base.y - cur->r->base.y,2 );
+ lunit = ( cur->lnext ) ? &cur->l->nextunit : &cur->l->prevunit;
+ runit = ( cur->rnext ) ? &cur->r->nextunit : &cur->r->prevunit;
+ vchunks[i].parallel = UnitsParallel( lunit,&stems[i]->unit,2 ) &&
+ UnitsParallel( runit,&stems[i]->unit,2 );
+ }
+
+ for ( i=0; i<stemcnt; i++ ) if ( vchunks[i].chunk != NULL ) {
+ vchunks[i].value = ValueChunk( gd,vchunks,stemcnt,i,is_l );
+ if ( vchunks[i].value ) val_cnt++;
+ }
+
+ /* If we was unable to figure out any reasons for which at least */
+ /* one of the checked chunks should really be output, then keep */
+ /* all the 'potential' flags as they are and do nothing */
+ if ( val_cnt > 0 ) {
+ for ( i=0; i<stemcnt; i++ ) if ( vchunks[i].chunk != NULL ) {
+ is_l = ( is_next ) ? pd->next_is_l[i] : pd->prev_is_l[i];
+ val = vchunks[i].value;
+ for ( j=0; j<stems[i]->chunk_cnt; j++ ) {
+ cur = &stems[i]->chunks[j];
+ if ( is_l && cur->l == pd ) {
+ if ( val > 0 ) cur->lpotential = false;
+ else cur->lpotential = true;
+ } else if ( !is_l && cur->r == pd ) {
+ if ( val > 0 ) cur->rpotential = false;
+ else cur->rpotential = true;
+ }
+ }
+ }
+ }
+ free( vchunks );
+}
+
+static int StemIsActiveAt( struct glyphdata *gd,struct stemdata *stem,double stempos ) {
+ BasePoint pos,cpos,mpos;
+ int which;
+ double test;
+ double lmin, lmax, rmin, rmax, loff, roff, minoff, maxoff;
+ struct monotonic **space, *m;
+ int winding, nw, closest, i, j;
+
+ pos.x = stem->left.x + stempos*stem->unit.x;
+ pos.y = stem->left.y + stempos*stem->unit.y;
+
+ if ( IsUnitHV( &stem->unit,true )) {
+ which = stem->unit.x==0;
+ MonotonicFindAt(gd->ms,which,((real *) &pos.x)[which],space = gd->space);
+ test = ((real *) &pos.x)[!which];
+
+ lmin = ( stem->lmax - 2*dist_error_hv < -dist_error_hv ) ?
+ stem->lmax - 2*dist_error_hv : -dist_error_hv;
+ lmax = ( stem->lmin + 2*dist_error_hv > dist_error_hv ) ?
+ stem->lmin + 2*dist_error_hv : dist_error_hv;
+ rmin = ( stem->rmax - 2*dist_error_hv < -dist_error_hv ) ?
+ stem->rmax - 2*dist_error_hv : -dist_error_hv;
+ rmax = ( stem->rmin + 2*dist_error_hv > dist_error_hv ) ?
+ stem->rmin + 2*dist_error_hv : dist_error_hv;
+ minoff = test + ( lmin * stem->unit.y - lmax * stem->unit.x );
+ maxoff = test + ( lmax * stem->unit.y - lmin * stem->unit.x );
+
+ winding = 0; closest = -1;
+ for ( i=0; space[i]!=NULL; ++i ) {
+ m = space[i];
+ nw = ((&m->xup)[which] ? 1 : -1 );
+ if ( m->other >= minoff && m->other <= maxoff && nw == 1 ) {
+ closest = i;
+ break;
+ } else if ( m->other > maxoff )
+ break;
+ winding += nw;
+ }
+ if ( closest < 0 )
+return( false );
+
+ cpos.x = ( which ) ? m->other : pos.x ;
+ cpos.y = ( which ) ? pos.y : m->other ;
+ loff = ( cpos.x - stem->left.x ) * stem->unit.y -
+ ( cpos.y - stem->left.y ) * stem->unit.x;
+ if ( loff > lmax || loff < lmin )
+return( false );
+
+ j = MatchWinding(space,i,nw,winding,which,0);
+ if ( j==-1 )
+return( false );
+ m = space[j];
+
+ mpos.x = ( which ) ? m->other : pos.x ;
+ mpos.y = ( which ) ? pos.y : m->other ;
+ roff = ( mpos.x - stem->right.x ) * stem->unit.y -
+ ( mpos.y - stem->right.y ) * stem->unit.x;
+ if ( roff >= rmin && roff <= rmax )
+return( true );
+return( false );
+ } else {
+return( StillStem( gd,dist_error_diag,&pos,stem ));
+ }
+}
+
+/* This function is used to check the distance between a hint's edge */
+/* and a spline and determine the extet where this hint can be */
+/* considered "active". */
+static int WalkSpline( struct glyphdata *gd, struct pointdata *pd,int gonext,
+ struct stemdata *stem,int is_l,int force_ac,BasePoint *res ) {
+
+ int i, curved;
+ double off, dist, min, max;
+ double incr, err;
+ double t, ratio, width;
+ Spline *s;
+ BasePoint *base, *nunit, pos, good;
+ SplinePoint *sp, *nsp;
+ struct pointdata *npd;
+
+ err = ( IsUnitHV( &stem->unit,true )) ? dist_error_hv : dist_error_diag;
+ width = stem->width;
+ ratio = gd->emsize/( 6 * width );
+ if ( err > width/2) err = width/2;
+
+ sp = pd->sp;
+ base = ( is_l ) ? &stem->left : &stem->right;
+ min = ( is_l ) ? stem->lmax - 2*err : stem->rmax - 2*err;
+ max = ( is_l ) ? stem->lmin + 2*err : stem->rmin + 2*err;
+
+ s = ( gonext ) ? sp->next : sp->prev;
+ nsp = ( gonext ) ? s->to : s->from;
+ npd = &gd->points[nsp->ptindex];
+ nunit = ( gonext ) ? &npd->prevunit : &npd->nextunit;
+ good = sp->me;
+
+ off = ( nsp->me.x - base->x )*stem->l_to_r.x +
+ ( nsp->me.y - base->y )*stem->l_to_r.y;
+ /* Some splines have tiny control points and are almost flat */
+ /* think of them as lines then rather than treating them as curves */
+ /* figure out how long they remain within a few orthoganal units of */
+ /* the point */
+ /* We used to check the distance between a control point and a spline */
+ /* and consider the segment "flat" if this distance is smaller than */
+ /* the normal allowed "error" value. However this method doesn't produce */
+ /* consistent results if the spline is not long enough (as usual for */
+ /* fonts with quadratic splines). So now we consider a spline "flat" */
+ /* only if it never deviates too far from the hint's edge and both */
+ /* its terminal points are snappable to the same hint */
+ curved = ( IsStemAssignedToPoint( npd,stem,gonext ) == -1 &&
+ ( off < min || off > max || !UnitsParallel( &stem->unit,nunit,true )));
+
+ /* If a spline does deviate from the edge too far to consider it flat, */
+ /* then we calculate the extent where the spline and the edge are still */
+ /* close enough to consider the hint active at this zone. If the hint is */
+ /* still active at the end of the spline, we can check some subsequent splines */
+ /* too. This method produces better effect than any "magic" manipulations */
+ /* with control point coordinates, because it takes into account just the */
+ /* spline configuration rather than point positions */
+ if ( curved ) {
+ max = err = dist_error_curve;
+ min = -dist_error_curve;
+ /* The following statement forces our code to detect an active zone */
+ /* even if all checks actually fail. This makes sense for stems */
+ /* marking arks and bends */
+ if ( force_ac )
+ good = ( gonext ) ? sp->nextcp : sp->prevcp;
+ /* If a spline is closer to the opposite stem edge than to the current edge, then we */
+ /* can no longer consider the stem active at this point */
+ if ( err > width/2 ) err = width/2;
+
+ t = ( gonext ) ? 0.9999 : 0.0001;
+ for ( ; ; s = ( gonext ) ? s->to->next : s->from->prev ) {
+ pos.x = ((s->splines[0].a*t+s->splines[0].b)*t+s->splines[0].c)*t+s->splines[0].d;
+ pos.y = ((s->splines[1].a*t+s->splines[1].b)*t+s->splines[1].c)*t+s->splines[1].d;
+ off = ( pos.x - base->x )*stem->l_to_r.x +
+ ( pos.y - base->y )*stem->l_to_r.y;
+ dist = ( pos.x - sp->me.x )*stem->unit.x +
+ ( pos.y - sp->me.y )*stem->unit.y;
+ nsp = ( gonext ) ? s->to : s->from;
+ npd = &gd->points[nsp->ptindex];
+ if (fabs( off ) < max && fabs( dist ) <= ( width + width * ratio ) &&
+ nsp != sp && npd->colinear && !npd->x_extr && !npd->y_extr &&
+ StillStem( gd,err,&pos,stem ))
+ good = pos;
+ else
+ break;
+ }
+ }
+ t = .5;
+ incr = ( gonext ) ? .25 : -.25;
+ for ( i=0; i<6; ++i ) {
+ pos.x = ((s->splines[0].a*t+s->splines[0].b)*t+s->splines[0].c)*t+s->splines[0].d;
+ pos.y = ((s->splines[1].a*t+s->splines[1].b)*t+s->splines[1].c)*t+s->splines[1].d;
+ off = ( pos.x - base->x )*stem->l_to_r.x +
+ ( pos.y - base->y )*stem->l_to_r.y;
+ dist = ( pos.x - sp->me.x )*stem->unit.x +
+ ( pos.y - sp->me.y )*stem->unit.y;
+ /* Don't check StillStem for non-curved segments, as they are subject */
+ /* to further projection-related tests anyway */
+ if ( off > min && off < max && ( !curved ||
+ ( fabs( dist ) < ( width + width * ratio ) &&
+ StillStem( gd,err,&pos,stem )))) {
+
+ good = pos;
+ t += incr;
+ } else
+ t -= incr;
+ incr/=2;
+ }
+ *res = good;
+return( curved );
+}
+
+static int AdjustForImperfectSlopeMatch( SplinePoint *sp,BasePoint *pos,
+ BasePoint *newpos,struct stemdata *stem,int is_l ) {
+
+ double poff, err, min, max;
+ BasePoint *base;
+
+ base = ( is_l ) ? &stem->left : &stem->right;
+ err = ( IsUnitHV( &stem->unit,true )) ? dist_error_hv : dist_error_diag;
+ min = ( is_l ) ? stem->lmax - 2*err : stem->rmax - 2*err;
+ max = ( is_l ) ? stem->lmin + 2*err : stem->rmin + 2*err;
+
+ /* Possible if the stem unit has been attached to a line. It is */
+ /* hard to prevent this */
+ if ( min > max ) {
+ min = stem->lmin; max = stem->lmax;
+ }
+
+ poff = ( pos->x - base->x )*stem->l_to_r.x +
+ ( pos->y - base->y )*stem->l_to_r.y;
+ if ( poff > min && poff < max ) {
+ *newpos = *pos;
+return( false );
+ } else if ( poff <= min )
+ err = fabs( min );
+ else if ( poff >= max )
+ err = fabs( max );
+
+ newpos->x = sp->me.x + err*( pos->x - sp->me.x )/fabs( poff );
+ newpos->y = sp->me.y + err*( pos->y - sp->me.y )/fabs( poff );
+return( true );
+}
+
+static int AddLineSegment( struct stemdata *stem,struct segment *space,int cnt,
+ int is_l,struct pointdata *pd,int base_next,struct glyphdata *gd ) {
+
+ double s, e, t, dot;
+ BasePoint stemp, etemp;
+ BasePoint *start, *end, *par_unit;
+ int same_dir, corner = 0, par;
+ int scurved = false, ecurved = false, c, hv;
+ SplinePoint *sp, *psp, *nsp;
+ double b;
+ uint8 extr;
+
+ if ( pd==NULL || (sp = pd->sp)==NULL || sp->ticked ||
+ sp->next==NULL || sp->prev==NULL )
+return( cnt );
+ end = &sp->me;
+ start = &sp->me;
+ par_unit = ( base_next ) ? &pd->nextunit : &pd->prevunit;
+ /* Do the spline and the stem unit point in the same direction ? */
+ dot = ( stem->unit.x * par_unit->x ) +
+ ( stem->unit.y * par_unit->y );
+ same_dir = (( dot > 0 && base_next ) || ( dot < 0 && !base_next ));
+ if ( stem->unit.x == 1 ) corner = pd->y_corner;
+ else if ( stem->unit.y == 1 ) corner = pd->x_corner;
+
+ dot = ( stem->unit.x * pd->nextunit.x ) +
+ ( stem->unit.y * pd->nextunit.y );
+ /* We used to apply normal checks only if the point's unit vector pointing */
+ /* in the direction we are going to check is nearly parallel to the stem unit. */
+ /* But this is not the best method, because a spline, "parallel" to our */
+ /* stem, may actually have filled space at a wrong side. On the other hand, */
+ /* sometimes it makes sense to calculate active space even for splines */
+ /* connected to our base point under an angle which is too large to consider */
+ /* the direction "parallel". So now we check the units' direction first */
+ /* and then (just for straight splines) also their parallelity. */
+ if (( dot > 0 && same_dir ) || ( dot < 0 && !same_dir )) {
+ /* If the segment sp-start doesn't have exactly the right slope, then */
+ /* we can only use that bit of it which is less than a standard error */
+ par = UnitsParallel( &stem->unit,&pd->nextunit,0 );
+ if ( !sp->next->knownlinear ) {
+ ecurved = WalkSpline( gd,pd,true,stem,is_l,par,&etemp );
+ /* Can merge, but treat as curved relatively to projections */
+ if ( !ecurved ) ecurved = 2;
+ end = &etemp;
+ } else if ( par || corner ) {
+ nsp = sp->next->to;
+ ecurved = AdjustForImperfectSlopeMatch( sp,&nsp->me,&etemp,stem,is_l );
+ end = &etemp;
+ }
+ }
+ dot = ( stem->unit.x * pd->prevunit.x ) +
+ ( stem->unit.y * pd->prevunit.y );
+ if (( dot < 0 && same_dir ) || ( dot > 0 && !same_dir )) {
+ par = UnitsParallel( &stem->unit,&pd->prevunit,0 );
+ if ( !sp->prev->knownlinear ) {
+ scurved = WalkSpline( gd,pd,false,stem,is_l,par,&stemp );
+ if ( !scurved ) scurved = 2;
+ start = &stemp;
+ } else if ( par || corner ) {
+ psp = sp->prev->from;
+ scurved = AdjustForImperfectSlopeMatch( sp,&psp->me,&stemp,stem,is_l );
+ start = &stemp;
+ }
+ }
+ sp->ticked = true;
+
+ s = (start->x-stem->left.x)*stem->unit.x +
+ (start->y-stem->left.y)*stem->unit.y;
+ e = ( end->x-stem->left.x)*stem->unit.x +
+ ( end->y-stem->left.y)*stem->unit.y;
+ b = (sp->me.x-stem->left.x)*stem->unit.x +
+ (sp->me.y-stem->left.y)*stem->unit.y;
+
+ if ( s == e )
+return( cnt );
+ if ( s > e ) {
+ t = s; c = scurved;
+ s = e; e = t;
+ scurved = ecurved; ecurved = c;
+ }
+ space[cnt].start = s;
+ space[cnt].end = e;
+ space[cnt].sbase = space[cnt].ebase = b;
+ space[cnt].scurved = scurved;
+ space[cnt].ecurved = ecurved;
+
+ hv = IsUnitHV( &stem->unit,true );
+ if ( hv ) {
+ /* For vertical/horizontal stems we assign a special meaning to */
+ /* the 'curved' field. It will be non-zero if the key point of */
+ /* this segment is positioned on a prominent curve: */
+ /* 1 if the inner side of that curve is inside of the contour */
+ /* and 2 otherwise. */
+ /* Later, if we get a pair of "inner" and "outer" curves, then */
+ /* we are probably dealing with a feature's bend which should be */
+ /* necessarily marked with a hint. Checks we apply for this type */
+ /* of curved segments should be less strict than in other cases. */
+ extr = ( hv == 1 ) ? pd->y_extr : pd->x_extr;
+ space[cnt].curved = extr;
+ } else {
+ /* For diagonal stems we consider a segment "curved" if both its */
+ /* start and end are curved. Curved segments usually cannot be */
+ /* merged (unless scurved or ecurved is equal to 2) and are not */
+ /* checked for "projections". */
+ space[cnt].curved = scurved && ecurved;
+ }
+return( cnt+1 );
+}
+
+static int InActive(double projection,struct segment *segments, int cnt) {
+ int i;
+
+ for ( i=0; i<cnt; ++i ) {
+ if ( projection>=segments[i].start && projection<=segments[i].end )
+return( true );
+ }
+return( false );
+}
+
+static int MergeSegments(struct segment *space, int cnt) {
+ int i,j;
+ double middle;
+
+ for ( i=j=0; i<cnt; ++i, ++j ) {
+ if ( i!=j )
+ space[j] = space[i];
+ while ( i+1<cnt && space[i+1].start<space[j].end ) {
+ if ( space[i+1].end >= space[j].end ) {
+
+ /* If there are 2 overlapping segments and neither the */
+ /* end of the first segment nor the start of the second */
+ /* one are curved we can merge them. Otherwise we have */
+ /* to preserve them both, but modify their start/end properties */
+ /* so that the overlap is removed */
+ if ( space[j].ecurved != 1 && space[i+1].scurved != 1 ) {
+ space[j].end = space[i+1].end;
+ space[j].ebase = space[i+1].ebase;
+ space[j].ecurved = space[i+1].ecurved;
+ space[j].curved = false;
+ } else if ( space[j].ecurved != 1 && space[i+1].scurved == 1 ) {
+ space[i+1].start = space[j].end;
+ --i;
+ } else if ( space[j].ecurved == 1 && space[i+1].scurved != 1 ) {
+ space[j].end = space[i+1].start;
+ --i;
+ } else {
+ middle = (space[j].end + space[i+1].start)/2;
+ space[j].end = space[i+1].start = middle;
+ --i;
+ }
+ }
+ ++i;
+ }
+ }
+return( j );
+}
+
+static int MergeSegmentsFinal( struct segment *space, int cnt ) {
+ int i,j;
+
+ for ( i=j=0; i<cnt; ++i, ++j ) {
+ if ( i!=j )
+ space[j] = space[i];
+ while ( i+1<cnt && space[i+1].start<=space[j].end ) {
+ if ( space[i+1].end>space[j].end ) {
+ space[j].end = space[i+1].end;
+ space[j].ebase = space[i+1].ebase;
+ space[j].ecurved = space[i+1].ecurved;
+ space[j].curved = false;
+ }
+ ++i;
+ }
+ }
+return( j );
+}
+
+static void FigureStemActive( struct glyphdata *gd, struct stemdata *stem ) {
+ int i, j, pcnt=0;
+ struct pointdata *pd, **pspace = gd->pspace;
+ struct stem_chunk *chunk;
+ struct segment *lspace = gd->lspace, *rspace = gd->rspace;
+ struct segment *bothspace = gd->bothspace, *activespace = gd->activespace;
+ int lcnt, rcnt, bcnt, bpos, acnt, cove, startset, endset;
+ double middle, width, len, clen, gap, lseg, rseg;
+ double err, lmin, rmax, loff, roff, last, s, e, sbase, ebase;
+ double proj, proj2, proj3, orig_proj, ptemp;
+
+ width = stem->width;
+
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL )
+ gd->points[i].sp->ticked = false;
+
+ lcnt = rcnt = 0;
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ if ( chunk->stemcheat )
+ continue;
+ lcnt = AddLineSegment( stem,lspace,lcnt,true ,chunk->l,chunk->lnext,gd );
+ rcnt = AddLineSegment( stem,rspace,rcnt,false,chunk->r,chunk->rnext,gd );
+ }
+ bcnt = 0;
+ if ( lcnt!=0 && rcnt!=0 ) {
+ /* For curved segments we can extend left and right active segments */
+ /* a bit to ensure that they do overlap and thus can be marked with an */
+ /* active zone */
+ if ( rcnt == lcnt && stem->chunk_cnt == lcnt ) {
+ for ( i=0; i<lcnt; i++ ) {
+ /* If it's a feature bend, then our tests should be more liberal */
+ cove = (( rspace[i].curved + lspace[i].curved ) == 3 );
+ gap = 0;
+ if ( lspace[i].start>rspace[i].end && lspace[i].scurved && rspace[i].ecurved )
+ gap = lspace[i].start-rspace[i].end;
+ else if ( rspace[i].start>lspace[i].end && rspace[i].scurved && lspace[i].ecurved )
+ gap = rspace[i].start-lspace[i].end;
+ else if ( !cove )
+ continue;
+
+ lseg = lspace[i].end - lspace[i].start;
+ rseg = rspace[i].end - rspace[i].start;
+ if (( cove && gap < (lseg > rseg ? lseg : rseg )) ||
+ ( gap < ( lseg + rseg )/2 && !stem->chunks[i].stub )) {
+ if ( lspace[i].ebase<rspace[i].start )
+ rspace[i].start = lspace[i].ebase;
+ else if ( lspace[i].sbase>rspace[i].end )
+ rspace[i].end = lspace[i].sbase;
+ if ( rspace[i].ebase<lspace[i].start )
+ lspace[i].start = rspace[i].ebase;
+ else if ( rspace[i].sbase>lspace[i].end )
+ lspace[i].end = rspace[i].sbase;
+ }
+ }
+ }
+ qsort(lspace,lcnt,sizeof(struct segment),segment_cmp);
+ qsort(rspace,rcnt,sizeof(struct segment),segment_cmp);
+ lcnt = MergeSegments( lspace,lcnt );
+ rcnt = MergeSegments( rspace,rcnt );
+ for ( i=j=bcnt=0; i<lcnt && j<rcnt; ++i ) {
+ while ( j<rcnt && rspace[j].end<=lspace[i].start )
+ ++j;
+ while ( j<rcnt && rspace[j].start<=lspace[i].end ) {
+ cove = (( rspace[j].curved + lspace[i].curved ) == 3 );
+
+ s = ( rspace[j].start > lspace[i].start ) ?
+ rspace[j].start : lspace[i].start;
+ e = ( rspace[j].end < lspace[i].end ) ?
+ rspace[j].end : lspace[i].end;
+ sbase = ( rspace[j].start > lspace[i].start ) ?
+ lspace[i].sbase : rspace[j].sbase;
+ ebase = ( rspace[j].end < lspace[i].end ) ?
+ lspace[i].ebase : rspace[j].ebase;
+
+ middle = ( lspace[i].start + rspace[j].start )/2;
+ bothspace[bcnt].start = ( cove && middle < s ) ? middle : s;
+ if ( rspace[j].start > lspace[i].start )
+ bothspace[bcnt].scurved = ( rspace[j].scurved || sbase < s ) ?
+ rspace[j].scurved : lspace[i].scurved;
+ else
+ bothspace[bcnt].scurved = ( lspace[i].scurved || sbase < s ) ?
+ lspace[i].scurved : rspace[j].scurved;
+
+ middle = ( lspace[i].end + rspace[j].end )/2;
+ bothspace[bcnt].end = ( cove && middle > e ) ? middle : e;
+ if ( rspace[j].end < lspace[i].end )
+ bothspace[bcnt].ecurved = ( rspace[j].ecurved || ebase > e ) ?
+ rspace[j].ecurved : lspace[i].ecurved;
+ else
+ bothspace[bcnt].ecurved = ( lspace[i].ecurved || ebase > e ) ?
+ lspace[i].ecurved : rspace[j].ecurved;
+
+ sbase = ( rspace[j].sbase > lspace[i].sbase ) ?
+ rspace[j].sbase : lspace[i].sbase;
+ ebase = ( rspace[j].ebase < lspace[i].ebase ) ?
+ rspace[j].ebase : lspace[i].ebase;
+ if ( sbase > bothspace[bcnt].end )
+ sbase = ebase = bothspace[bcnt].end;
+ else if ( ebase < bothspace[bcnt].start )
+ sbase = ebase = bothspace[bcnt].start;
+ else if ( ebase < sbase )
+ ebase = sbase = ( ebase + sbase )/2;
+ bothspace[bcnt].sbase = sbase;
+ bothspace[bcnt].ebase = ebase;
+
+ bothspace[bcnt++].curved = rspace[j].curved || lspace[i].curved;
+
+ if ( rspace[j].end>lspace[i].end )
+ break;
+ ++j;
+ }
+ }
+ }
+#if GLYPH_DATA_DEBUG
+ fprintf( stderr, "Active zones for stem l=%.2f,%.2f r=%.2f,%.2f dir=%.2f,%.2f:\n",
+ stem->left.x,stem->left.y,stem->right.x,stem->right.y,stem->unit.x,stem->unit.y );
+ for ( i=0; i<lcnt; i++ ) {
+ fprintf( stderr, "\tleft space curved=%d\n",lspace[i].curved );
+ fprintf( stderr, "\t\tstart=%.2f,base=%.2f,curved=%d\n",
+ lspace[i].start,lspace[i].sbase,lspace[i].scurved );
+ fprintf( stderr, "\t\tend=%.2f,base=%.2f,curved=%d\n",
+ lspace[i].end,lspace[i].ebase,lspace[i].ecurved );
+ }
+ for ( i=0; i<rcnt; i++ ) {
+ fprintf( stderr, "\tright space curved=%d\n",rspace[i].curved );
+ fprintf( stderr, "\t\tstart=%.2f,base=%.2f,curved=%d\n",
+ rspace[i].start,rspace[i].sbase,rspace[i].scurved );
+ fprintf( stderr, "\t\tend=%.2f,base=%.2f,curved=%d\n",
+ rspace[i].end,rspace[i].ebase,rspace[i].ecurved );
+ }
+ for ( i=0; i<bcnt; i++ ) {
+ fprintf( stderr, "\tboth space\n" );
+ fprintf( stderr, "\t\tstart=%.2f,base=%.2f,curved=%d\n",
+ bothspace[i].start,bothspace[i].sbase,bothspace[i].scurved );
+ fprintf( stderr, "\t\tend=%.2f,base=%.2f,curved=%d\n",
+ bothspace[i].end,bothspace[i].ebase,bothspace[i].ecurved );
+ }
+ fprintf( stderr,"\n" );
+#endif
+
+ err = ( stem->unit.x == 0 || stem->unit.y == 0 ) ?
+ dist_error_hv : dist_error_diag;
+ lmin = ( stem->lmin < -err ) ? stem->lmin : -err;
+ rmax = ( stem->rmax > err ) ? stem->rmax : err;
+ acnt = 0;
+ if ( bcnt!=0 ) {
+ for ( i=0; i<gd->pcnt; ++i ) if ( (pd = &gd->points[i])->sp!=NULL ) {
+ /* Let's say we have a stem. And then inside that stem we have */
+ /* another rectangle. So our first stem isn't really a stem any */
+ /* more (because we hit another edge first), yet it's still reasonable*/
+ /* to align the original stem */
+ /* Now suppose the rectangle is rotated a bit so we can't make */
+ /* a stem from it. What do we do here? */
+ loff = ( pd->sp->me.x - stem->left.x ) * stem->unit.y -
+ ( pd->sp->me.y - stem->left.y ) * stem->unit.x;
+ roff = ( pd->sp->me.x - stem->right.x ) * stem->unit.y -
+ ( pd->sp->me.y - stem->right.y ) * stem->unit.x;
+
+ if ( loff >= lmin && roff <= rmax ) {
+ pd->projection = (pd->sp->me.x - stem->left.x)*stem->unit.x +
+ (pd->sp->me.y - stem->left.y)*stem->unit.y;
+ if ( InActive(pd->projection,bothspace,bcnt) )
+ pspace[pcnt++] = pd;
+ }
+ }
+ qsort(pspace,pcnt,sizeof(struct pointdata *),proj_cmp);
+
+ bpos = i = 0;
+ while ( bpos<bcnt ) {
+ if ( bothspace[bpos].curved || pcnt==0 ) {
+ activespace[acnt++] = bothspace[bpos++];
+ } else {
+ last = bothspace[bpos].start;
+ startset = false; endset = false;
+
+ if ( bothspace[bpos].scurved ||
+ StemIsActiveAt( gd,stem,bothspace[bpos].start+0.0015 )) {
+
+ activespace[acnt].scurved = bothspace[bpos].scurved;
+ activespace[acnt].start = bothspace[bpos].start;
+ startset = true;
+ }
+
+ /* If the stem is preceded by a curved segment, then skip */
+ /* the first point position and start from the next one. */
+ /* (Otherwise StemIsActiveAt() may consider the stem is */
+ /* "inactive" at the fragment between the start of the active */
+ /* space and the first point actually belonging to this stem) */
+ if ( bothspace[bpos].scurved ) {
+ while ( pcnt>i && pspace[i]->projection < bothspace[bpos].sbase ) i++;
+
+ if ( pcnt > i && pspace[i]->projection >= bothspace[bpos].sbase ) {
+ last = activespace[acnt].end = pspace[i]->projection;
+ activespace[acnt].ecurved = false;
+ activespace[acnt].curved = false;
+ endset=true;
+ }
+ }
+
+ while ( i<pcnt && (
+ ( !bothspace[bpos].ecurved && pspace[i]->projection<bothspace[bpos].end ) ||
+ ( bothspace[bpos].ecurved && pspace[i]->projection<=bothspace[bpos].ebase ))) {
+ if ( last==activespace[acnt].start && pspace[i]->projection >= last ) {
+
+ if ( !StemIsActiveAt( gd,stem,last+(( 1.001*pspace[i]->projection-last )/2.001 ))) {
+ last = activespace[acnt].start = pspace[i]->projection;
+ activespace[acnt].scurved = false;
+ startset = true; endset = false;
+ } else {
+ last = activespace[acnt].end = pspace[i]->projection;
+ activespace[acnt].ecurved = false;
+ activespace[acnt].curved = false;
+ endset = true;
+ }
+ } else if (( last==activespace[acnt].end || !startset )
+ && pspace[i]->projection >= last) {
+
+ if ( !StemIsActiveAt( gd,stem,last+(( 1.001*pspace[i]->projection-last )/2.001 )) ||
+ !startset ) {
+
+ if ( startset ) acnt++;
+ last = activespace[acnt].start = pspace[i]->projection;
+ activespace[acnt].scurved = false;
+ startset = true; endset = false;
+ } else {
+ last = activespace[acnt].end = pspace[i]->projection;
+ activespace[acnt].ecurved = false;
+ activespace[acnt].curved = false;
+ endset = true;
+ }
+ }
+ ++i;
+ }
+
+ if (( bothspace[bpos].ecurved ||
+ StemIsActiveAt( gd,stem,bothspace[bpos].end-0.0015 )) &&
+ startset ) {
+
+ activespace[acnt].end = bothspace[bpos].end;
+ activespace[acnt].ecurved = bothspace[bpos].ecurved;
+ activespace[acnt].curved = bothspace[bpos].curved;
+ endset = true;
+ }
+ ++bpos;
+ if ( endset ) ++acnt;
+ }
+ }
+ }
+
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ /* stemcheat 1 -- diagonal edge stem;
+ * 2 -- diagonal corner stem with a sharp top;
+ * 3 -- diagonal corner stem with a flat top;
+ * 4 -- bounding box hint */
+ if ( chunk->stemcheat==3 && chunk->l!=NULL && chunk->r!=NULL &&
+ i+1<stem->chunk_cnt &&
+ stem->chunks[i+1].stemcheat==3 &&
+ ( chunk->l==stem->chunks[i+1].l ||
+ chunk->r==stem->chunks[i+1].r )) {
+
+ SplinePoint *sp = chunk->l==stem->chunks[i+1].l ?
+ chunk->l->sp : chunk->r->sp;
+ proj = (sp->me.x - stem->left.x) *stem->unit.x +
+ (sp->me.y - stem->left.y) *stem->unit.y;
+
+ SplinePoint *sp2 = chunk->l==stem->chunks[i+1].l ?
+ chunk->r->sp : chunk->l->sp;
+ SplinePoint *sp3 = chunk->l==stem->chunks[i+1].l ?
+ stem->chunks[i+1].r->sp : stem->chunks[i+1].l->sp;
+ proj2 = (sp2->me.x - stem->left.x) *stem->unit.x +
+ (sp2->me.y - stem->left.y) *stem->unit.y;
+ proj3 = (sp3->me.x - stem->left.x) *stem->unit.x +
+ (sp3->me.y - stem->left.y) *stem->unit.y;
+
+ if ( proj2>proj3 ) {
+ ptemp = proj2; proj2 = proj3; proj3 = ptemp;
+ }
+
+ if ( (proj3-proj2) < width ) {
+ activespace[acnt ].curved = true;
+ proj2 -= width/2;
+ proj3 += width/2;
+ } else {
+ activespace[acnt ].curved = false;
+ }
+
+ activespace[acnt].start = proj2;
+ activespace[acnt].end = proj3;
+ activespace[acnt].sbase = activespace[acnt].ebase = proj;
+ acnt++;
+ ++i;
+ } else if ( chunk->stemcheat && chunk->l!=NULL && chunk->r!=NULL ) {
+ SplinePoint *sp = chunk->l->sp;
+ proj = ( sp->me.x - stem->left.x ) * stem->unit.x +
+ ( sp->me.y - stem->left.y ) * stem->unit.y;
+ orig_proj = proj;
+ SplinePoint *other = chunk->lnext ? sp->next->to : sp->prev->from;
+ len = (other->me.x - sp->me.x) * stem->unit.x +
+ (other->me.y - sp->me.y) * stem->unit.y;
+ if ( chunk->stemcheat == 2 )
+ proj -= width/2;
+ else if ( len<0 )
+ proj -= width;
+ activespace[acnt].curved = true;
+ activespace[acnt].start = proj;
+ activespace[acnt].end = proj+width;
+ activespace[acnt].sbase = activespace[acnt].ebase = orig_proj;
+ acnt++;
+ }
+ }
+
+ if ( acnt!=0 ) {
+ stem->activecnt = MergeSegmentsFinal( activespace,acnt );
+ stem->active = malloc(acnt*sizeof(struct segment));
+ memcpy(stem->active,activespace,acnt*sizeof(struct segment));
+ }
+
+ len = clen = 0;
+ for ( i=0; i<acnt; ++i ) {
+ if ( stem->active[i].curved )
+ clen += stem->active[i].end-stem->active[i].start;
+ else
+ len += stem->active[i].end-stem->active[i].start;
+ }
+ stem->len = len; stem->clen = len+clen;
+}
+
+static void GDStemsFixupIntersects(struct glyphdata *gd) {
+ int i, j, stemidx;
+ struct stemdata *stem;
+ struct stem_chunk *chunk;
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ for ( j=0; j<stem->chunk_cnt; ++j ) {
+ chunk = &stem->chunks[j];
+ if ( chunk->l!=NULL ) {
+ stemidx = IsStemAssignedToPoint( chunk->l,stem,true );
+ FixupT( chunk->l,stemidx,true,chunk->l_e_idx );
+ stemidx = IsStemAssignedToPoint( chunk->l,stem,false );
+ FixupT( chunk->l,stemidx,false,chunk->l_e_idx );
+ }
+ if ( chunk->r!=NULL ) {
+ stemidx = IsStemAssignedToPoint( chunk->r,stem,true );
+ FixupT( chunk->r,stemidx,true,chunk->r_e_idx );
+ stemidx = IsStemAssignedToPoint( chunk->r,stem,false );
+ FixupT( chunk->r,stemidx,false,chunk->r_e_idx );
+ }
+ }
+ }
+}
+
+static int StemsWouldConflict( struct stemdata *stem1,struct stemdata *stem2 ) {
+ double loff, roff, s1, s2, e1, e2;
+ int acnt1, acnt2;
+
+ if ( stem1 == stem2 || !UnitsParallel( &stem1->unit,&stem2->unit,true ))
+return( false );
+
+ loff = ( stem2->left.x - stem1->left.x ) * stem1->unit.y -
+ ( stem2->left.y - stem1->left.y ) * stem1->unit.x;
+ roff = ( stem2->right.x - stem1->right.x ) * stem1->unit.y -
+ ( stem2->right.y - stem1->right.y ) * stem1->unit.x;
+ loff = fabs( loff ); roff = fabs( roff );
+ if ( loff > stem1->width || roff > stem1->width )
+return( false );
+
+ acnt1 = stem1->activecnt;
+ acnt2 = stem2->activecnt;
+ if ( acnt1 == 0 || acnt2 == 0 )
+return( false );
+ s1 = stem1->active[0].start; e1 = stem1->active[acnt1-1].end;
+ s2 = stem2->active[0].start; e2 = stem2->active[acnt2-1].end;
+
+ loff = ( stem2->left.x - stem1->left.x ) * stem1->unit.x +
+ ( stem2->left.y - stem1->left.y ) * stem1->unit.y;
+ if (( s2+loff >= s1 && s2+loff <= e1 ) || ( e2+loff >= s1 && e2+loff <= e1 ) ||
+ ( s2+loff <= s1 && e2+loff >= e1 ) || ( e2+loff <= s1 && s2+loff >= e1 ))
+return( true );
+
+return( false );
+}
+
+/* Convert diagonal stems generated for stubs and intersections to horizontal */
+/* or vertical, if they have just one chunk. This should be done before calculating */
+/* active zones, as they are calculated against each stem's unit vector */
+static void GDNormalizeStubs( struct glyphdata *gd ) {
+ int i, j, hv;
+ struct stemdata *stem;
+ struct stem_chunk *chunk;
+ BasePoint newdir;
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->positioned )
+ continue;
+
+ if ( !IsUnitHV( &stem->unit,true )) {
+ hv = IsUnitHV( &stem->unit,false );
+ if ( hv && StemFitsHV( stem,( hv == 1 ),3 )) {
+ if ( hv == 2 && stem->unit.y < 0 )
+ SwapEdges( gd,stem );
+
+ newdir.x = fabs( rint( stem->unit.x ));
+ newdir.y = fabs( rint( stem->unit.y ));
+ SetStemUnit( stem,newdir );
+
+ for ( j=0; j<stem->chunk_cnt && stem->leftidx == -1 && stem->rightidx == -1; j++ ) {
+ chunk = &stem->chunks[j];
+
+ if ( stem->leftidx == -1 && chunk->l != NULL )
+ stem->leftidx = GetValidPointDataIndex( gd,chunk->l->sp,stem );
+ if ( stem->rightidx == -1 && chunk->r != NULL )
+ stem->rightidx = GetValidPointDataIndex( gd,chunk->r->sp,stem );
+ }
+ }
+ }
+ }
+}
+
+static void GDFindUnlikelyStems( struct glyphdata *gd ) {
+ double width, minl, ratio;
+ int i, j, k, stem_cnt, ls_cnt, rs_cnt, ltick, rtick;
+ struct pointdata *lpd, *rpd;
+ Spline *ls, *rs;
+ SplinePoint *lsp, *rsp;
+ BasePoint *lunit, *runit, *slunit, *srunit, *sunit;
+ struct stemdata *stem, *stem1, *tstem;
+ struct stemdata **tstems, **lstems, **rstems;
+ struct stem_chunk *chunk;
+
+ GDStemsFixupIntersects( gd );
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+
+ /* If stem had been already present in the spline char before we */
+ /* started generating glyph data, then it should never be */
+ /* considered "too big" */
+ if ( stem->positioned )
+ continue;
+
+ /* If a stem has straight edges, and it is wider than tall */
+ /* then it is unlikely to be a real stem */
+ width = stem->width;
+ ratio = IsUnitHV( &stem->unit,true ) ? gd->emsize/( 6 * width ) : -0.25;
+ stem->toobig = ( stem->clen + stem->clen * ratio < width );
+ }
+
+ /* One more check for curved stems. If a stem has just one active */
+ /* segment, this segment is curved and the stem has no conflicts, */
+ /* then select the active segment length which allows us to consider */
+ /* this stem suitable for PS output by such a way, that stems connecting */
+ /* the opposite sides of a circle are always accepted */
+ for ( i=0; i<gd->stemcnt; ++i ) if ( gd->stems[i].toobig ) {
+ stem = &gd->stems[i];
+ width = stem->width;
+
+ if ( IsUnitHV( &stem->unit,true ) && stem->activecnt == 1 &&
+ stem->active[0].curved && width/2 > dist_error_curve ) {
+
+ for ( j=0; j<gd->stemcnt; ++j) {
+ stem1 = &gd->stems[j];
+
+ if ( !stem1->toobig && StemsWouldConflict( stem,stem1 ))
+ break;
+ }
+
+ if ( j == gd->stemcnt ) {
+ minl = sqrt( pow( width/2,2 ) - pow( width/2 - dist_error_curve,2 ));
+ if ( stem->clen >= minl ) stem->toobig = false;
+ }
+ }
+ }
+
+ /* And finally a check for stubs and feature terminations. We don't */
+ /* want such things to be controlled by any special hints, if there */
+ /* is already a hint controlling the middle of the same feature */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->positioned )
+ continue;
+
+ if ( stem->chunk_cnt == 1 && stem->chunks[0].stub & 3 ) {
+ chunk = &stem->chunks[0];
+ slunit = chunk->lnext ? &chunk->l->nextunit : &chunk->l->prevunit;
+ srunit = chunk->rnext ? &chunk->r->nextunit : &chunk->r->prevunit;
+
+ /* This test is valid only for features which are not exactly horizontal/ */
+ /* vertical. But we can't check this using the stem unit, as it may have */
+ /* already beeen reset to HV. So we use the units of this stem's base points */
+ /* instead. */
+ if ( IsUnitHV( slunit,true ) && IsUnitHV( srunit,true ))
+ continue;
+ if ( UnitCloserToHV( srunit,slunit ) > 0 ) sunit = srunit;
+ else sunit = slunit;
+
+ lpd = chunk->l; lsp = lpd->sp; lstems = tstems = NULL;
+ ls_cnt = 0;
+ do {
+ stem_cnt = (( chunk->lnext && lpd == chunk->l ) ||
+ ( !chunk->lnext && lpd != chunk->l )) ? lpd->nextcnt : lpd->prevcnt;
+ for ( j=0; j<stem_cnt; j++ ) {
+ tstems= (( chunk->lnext && lpd == chunk->l ) ||
+ ( !chunk->lnext && lpd != chunk->l )) ? lpd->nextstems : lpd->prevstems;
+ tstem = tstems[j];
+ if ( tstem != stem ) {
+ lstems = tstems;
+ ls_cnt = stem_cnt;
+ break;
+ }
+ }
+ if( lstems != NULL )
+ break;
+ ls = ( chunk->lnext ) ? lsp->next : lsp->prev;
+ if ( ls == NULL )
+ break;
+ lsp = ( chunk->lnext ) ? ls->to : ls->from;
+ lpd = &gd->points[lsp->ptindex];
+ lunit = ( chunk->lnext ) ? &lpd->prevunit : &lpd->nextunit;
+ } while ( lpd != chunk->l && lpd != chunk->r &&
+ UnitsParallel( lunit,sunit,false ));
+
+ rpd = chunk->r; rsp = rpd->sp; rstems = tstems = NULL;
+ rs_cnt = 0;
+ do {
+ stem_cnt = (( chunk->rnext && rpd == chunk->r ) ||
+ ( !chunk->rnext && rpd != chunk->r )) ? rpd->nextcnt : rpd->prevcnt;
+ for ( j=0; j<stem_cnt; j++ ) {
+ tstems= (( chunk->rnext && rpd == chunk->r ) ||
+ ( !chunk->rnext && rpd != chunk->r )) ? rpd->nextstems : rpd->prevstems;
+ tstem = tstems[j];
+ if ( tstem != stem ) {
+ rstems = tstems;
+ rs_cnt = stem_cnt;
+ break;
+ }
+ }
+ if( rstems != NULL )
+ break;
+ rs = ( chunk->rnext ) ? rsp->next : rsp->prev;
+ if ( rs == NULL )
+ break;
+ rsp = ( chunk->rnext ) ? rs->to : rs->from;
+ rpd = &gd->points[rsp->ptindex];
+ runit = ( chunk->rnext ) ? &rpd->prevunit : &rpd->nextunit;
+ } while ( rpd != chunk->r && rpd != chunk->l &&
+ UnitsParallel( runit,sunit,false ));
+
+ if ( lstems != NULL && rstems !=NULL ) {
+ for ( j=0; j<ls_cnt && !stem->toobig; j++ ) {
+ for ( k=0; k<rs_cnt && !stem->toobig; k++ ) {
+ if ( lstems[j] == rstems[k] && IsUnitHV( &lstems[j]->unit,true )) {
+ stem->toobig = true;
+ }
+ }
+ }
+ }
+ }
+
+ /* One more check for intersections between a curved segment and a */
+ /* straight feature. Imagine a curve intersected by two bars, like in a Euro */
+ /* glyph. Very probably we will get two chunks, one controlling the uppest */
+ /* two points of intersection, and another the lowest two, and most probably */
+ /* these two chunks will get merged into a single stem (so this stem will */
+ /* even get an exactly vertical vector). Yet we don't need this stem because */
+ /* there is already a stem controlling the middle of the curve (between two */
+ /* bars).*/
+ else if ( stem->chunk_cnt == 2 &&
+ (( stem->chunks[0].stub & 7 && stem->chunks[1].stub & 6 ) ||
+ ( stem->chunks[0].stub & 6 && stem->chunks[1].stub & 7 ))) {
+ for ( j=0; j<gd->stemcnt; ++j) {
+ stem1 = &gd->stems[j];
+ if ( !stem1->toobig && StemsWouldConflict( stem,stem1 ))
+ break;
+ }
+
+ if ( j < gd->stemcnt )
+ stem->toobig = true;
+ }
+ }
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( IsUnitHV( &stem->unit,true ))
+ continue;
+
+ /* If a diagonal stem doesn't have at least 2 points assigned to */
+ /* each edge, then we probably can't instruct it. However we don't */
+ /* disable stems which have just one point on each side, if those */
+ /* points are inflection points, as such stems may be useful for */
+ /* metafont routines */
+ if ( stem->lpcnt < 2 || stem->rpcnt < 2 ) {
+ lpd = rpd = NULL;
+ for ( j=0; j<stem->chunk_cnt && lpd == NULL && rpd == NULL; j++ ) {
+ chunk = &stem->chunks[j];
+ if ( chunk->l != NULL ) lpd = chunk->l;
+ if ( chunk->r != NULL ) rpd = chunk->r;
+ }
+ if (lpd == NULL || rpd == NULL ||
+ !IsInflectionPoint( gd,lpd ) || !IsInflectionPoint( gd,rpd ) || stem->clen < stem->width )
+ stem->toobig = 2;
+ } else if ( stem->activecnt >= stem->chunk_cnt )
+ stem->toobig = 2;
+ }
+
+ /* When using preexisting stem data, occasionally we can get two slightly */
+ /* different stems (one predefined, another recently detected) with nearly */
+ /* parallel vectors, sharing some points at both sides. Attempting to instruct */
+ /* them both would lead to very odd effects. So we must disable one */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( !stem->positioned || IsUnitHV( &stem->unit,true ))
+ continue;
+
+ for ( j=0; j<gd->stemcnt; ++j ) {
+ tstem = &gd->stems[j];
+ if ( tstem == stem || tstem->toobig || !UnitsParallel( &stem->unit,&tstem->unit,false ))
+ continue;
+
+ ltick = false; rtick = false;
+ for ( k=0; k<stem->chunk_cnt && ( !ltick || !rtick ); k++ ) {
+ chunk = &stem->chunks[k];
+
+ if ( chunk->l != NULL &&
+ IsStemAssignedToPoint( chunk->l,stem ,chunk->lnext ) != -1 &&
+ IsStemAssignedToPoint( chunk->l,tstem,chunk->lnext ) != -1 )
+ ltick = true;
+ if ( chunk->r != NULL &&
+ IsStemAssignedToPoint( chunk->r,stem ,chunk->rnext ) != -1 &&
+ IsStemAssignedToPoint( chunk->r,tstem,chunk->rnext ) != -1 )
+ rtick = true;
+ }
+ if ( ltick && rtick ) tstem->toobig = 2;
+ }
+ }
+}
+
+static int StemPointOnDiag( struct glyphdata *gd,struct stemdata *stem,
+ struct pointdata *pd ) {
+
+ struct stemdata *tstem;
+ int i, is_next, stemcnt;
+
+ if ( gd->only_hv || pd->colinear )
+return( false );
+
+ is_next = IsStemAssignedToPoint( pd,stem,false ) != -1;
+ stemcnt = ( is_next ) ? pd->nextcnt : pd->prevcnt;
+
+ for ( i=0; i<stemcnt; i++ ) {
+ tstem = ( is_next ) ? pd->nextstems[i] : pd->prevstems[i];
+ if ( !IsUnitHV( &tstem->unit,true ) &&
+ tstem->lpcnt >= 2 && tstem->rpcnt >=2 )
+return( true );
+ }
+return( false );
+}
+
+static void FindRefPointsExisting( struct glyphdata *gd,struct stemdata *stem ) {
+ int i;
+ int pos, lbase, rbase, is_x;
+ struct stem_chunk *chunk;
+ struct pointdata *pd;
+
+ is_x = (int) rint( stem->unit.y );
+ lbase = ((real *) &stem->left.x)[!is_x];
+ rbase = ((real *) &stem->right.x)[!is_x];
+
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+
+ if ( chunk->ltick ) {
+ pd = chunk->l;
+ pos = ((real *) &pd->sp->me.x)[!is_x];
+ if ( pos == lbase ) {
+ pd->value++;
+ if ( pd->sp->ptindex < gd->realcnt )
+ pd->value++;
+ if ( StemPointOnDiag( gd,stem,pd ))
+ pd->value++;
+ }
+ }
+
+ if ( chunk->rtick ) {
+ pd = chunk->r;
+ pos = ((real *) &pd->sp->me.x)[!is_x];
+ if ( pos == rbase ) {
+ pd->value++;
+ if ( pd->sp->ptindex < gd->realcnt )
+ pd->value++;
+ if ( StemPointOnDiag( gd,stem,pd ))
+ pd->value++;
+ }
+ }
+ }
+}
+
+static void FindRefPointsNew( struct glyphdata *gd,struct stemdata *stem ) {
+ int i, j;
+ int pos, lpos, rpos, testpos, is_x;
+ int lval, rval;
+ struct stem_chunk *chunk;
+ struct pointdata *lmost1, *lmost2, *rmost1, *rmost2;
+ double llen, prevllen, rlen, prevrlen;
+ SplinePoint *sp, *tsp;
+ uint8 *lextr, *rextr;
+
+ is_x = (int) rint( stem->unit.y );
+ lpos = ((real *) &stem->left.x)[!is_x];
+ rpos = ((real *) &stem->right.x)[!is_x];
+
+ lmost1 = rmost1 = lmost2 = rmost2 = NULL;
+ llen = prevllen = rlen = prevrlen = 0;
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+
+ if ( chunk->ltick ) {
+ sp = chunk->l->sp;
+ pos = ((real *) &sp->me.x)[!is_x];
+ lval = 0;
+ for ( j=0; j<i; j++ ) if ( stem->chunks[j].ltick ) {
+ tsp = stem->chunks[j].l->sp;
+ testpos = ((real *) &tsp->me.x)[!is_x];
+ if ( pos == testpos ) {
+ lval = stem->chunks[j].l->value;
+ stem->chunks[j].l->value++;
+ /* An additional bonus for points which form together */
+ /* a longer stem segment */
+ if ( sp->next->to == tsp || sp->prev->from == tsp ) {
+ llen = fabs(( sp->me.x - tsp->me.x )*stem->unit.x +
+ ( sp->me.y - tsp->me.y )*stem->unit.y );
+ if ( llen > prevllen ) {
+ lmost1 = stem->chunks[j].l;
+ lmost2 = chunk->l;
+ prevllen = llen;
+ }
+ }
+ }
+ }
+ chunk->l->value = lval+1;
+
+ if ( lval == 0 &&
+ ( stem->lmin - ( pos - lpos ) > -dist_error_hv ) &&
+ ( stem->lmax - ( pos - lpos ) < dist_error_hv ))
+ chunk->l->value++;
+ }
+
+ if ( chunk->rtick ) {
+ sp = chunk->r->sp;
+ pos = ((real *) &sp->me.x)[!is_x];
+ rval = 0;
+ for ( j=0; j<i; j++ ) if ( stem->chunks[j].rtick ) {
+ tsp = stem->chunks[j].r->sp;
+ testpos = ((real *) &tsp->me.x)[!is_x];
+ if ( pos == testpos ) {
+ rval = stem->chunks[j].r->value;
+ stem->chunks[j].r->value++;
+ if ( sp->next->to == tsp || sp->prev->from == tsp ) {
+ rlen = fabs(( sp->me.x - tsp->me.x )*stem->unit.x +
+ ( sp->me.y - tsp->me.y )*stem->unit.y );
+ if ( rlen > prevrlen ) {
+ rmost1 = stem->chunks[j].r;
+ rmost2 = chunk->r;
+ prevrlen = rlen;
+ }
+ }
+ }
+ }
+ chunk->r->value = rval+1;
+
+ if ( rval == 0 &&
+ ( stem->rmin - ( pos - rpos ) > -dist_error_hv ) &&
+ ( stem->rmax - ( pos - rpos ) < dist_error_hv ))
+ chunk->r->value++;
+ }
+ }
+ if ( lmost1 != NULL && lmost2 != NULL ) {
+ lmost1->value++; lmost2->value++;
+ }
+ if ( rmost1 != NULL && rmost2 != NULL ) {
+ rmost1->value++; rmost2->value++;
+ }
+
+ /* Extrema points get an additional value bonus. This should */
+ /* prevent us from preferring wrong points for stems controlling */
+ /* curved segments */
+ /* Third pass to assign bonuses to extrema points (especially */
+ /* to those extrema which are opposed to another extremum point) */
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ if ( chunk->ltick ) {
+ lextr = ( is_x ) ? &chunk->l->x_extr : &chunk->l->y_extr;
+ if ( *lextr ) chunk->l->value++;
+ }
+ if ( chunk->rtick ) {
+ rextr = ( is_x ) ? &chunk->r->x_extr : &chunk->r->y_extr;
+ if ( *rextr ) chunk->r->value++;
+ }
+
+ if ( chunk->ltick && chunk->rtick ) {
+ lextr = ( is_x ) ? &chunk->l->x_extr : &chunk->l->y_extr;
+ rextr = ( is_x ) ? &chunk->r->x_extr : &chunk->r->y_extr;
+ if ( *lextr && *rextr ) {
+ chunk->l->value++;
+ chunk->r->value++;
+ }
+ }
+ }
+}
+
+static void NormalizeStem( struct glyphdata *gd,struct stemdata *stem ) {
+ int i;
+ int lval, rval, val, lset, rset, best;
+ double loff=0, roff=0;
+ BasePoint lold, rold;
+ SplinePoint *lbest, *rbest;
+ struct stem_chunk *chunk;
+
+ /* First sort the stem chunks by their coordinates */
+ if ( IsUnitHV( &stem->unit,true )) {
+ qsort( stem->chunks,stem->chunk_cnt,sizeof( struct stem_chunk ),chunk_cmp );
+
+ /* For HV stems we have to check all chunks once more in order */
+ /* to figure out "left" and "right" positions most typical */
+ /* for this stem. We perform this by assigning a value to */
+ /* left and right side of this chunk. */
+
+ /* First pass to determine some point properties necessary */
+ /* for subsequent operations */
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ if ( chunk->ltick )
+ /* reset the point's "value" to zero */
+ chunk->l->value = 0;
+ if ( chunk->rtick )
+ chunk->r->value = 0;
+ }
+
+ /* Second pass to check which positions relative to stem edges are */
+ /* most common for this stem. Each position which repeats */
+ /* more than once gets a plus 1 value bonus */
+ if ( stem->positioned ) FindRefPointsExisting( gd,stem );
+ else FindRefPointsNew( gd,stem );
+
+ best = -1; val = 0;
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ lval = ( chunk->l != NULL ) ? chunk->l->value : 0;
+ rval = ( chunk->r != NULL ) ? chunk->r->value : 0;
+ if ((( chunk->l != NULL && chunk->l->value > 0 &&
+ GetValidPointDataIndex( gd,chunk->l->sp,stem ) != -1 ) ||
+ ( stem->ghost && stem->width == 21 )) &&
+ (( chunk->r != NULL && chunk->r->value > 0 &&
+ GetValidPointDataIndex( gd,chunk->r->sp,stem ) != -1 ) ||
+ ( stem->ghost && stem->width == 20 )) && lval + rval > val ) {
+
+ best = i;
+ val = lval + rval;
+ }
+ }
+ if ( best > -1 ) {
+ if ( !stem->ghost || stem->width == 20 ) {
+ lold = stem->left;
+ lbest = stem->chunks[best].l->sp;
+ stem->left = lbest->me;
+ stem->leftidx = GetValidPointDataIndex( gd,lbest,stem );
+
+ /* Now assign "left" and "right" properties of the stem */
+ /* to point coordinates taken from the most "typical" chunk */
+ /* of this stem. We also have to recalculate stem width and */
+ /* left/right offset values */
+ loff = ( stem->left.x - lold.x ) * stem->unit.y -
+ ( stem->left.y - lold.y ) * stem->unit.x;
+ stem->lmin -= loff; stem->lmax -= loff;
+ }
+ if ( !stem->ghost || stem->width == 21 ) {
+ rold = stem->right;
+ rbest = stem->chunks[best].r->sp;
+ stem->right = rbest->me;
+ stem->rightidx = GetValidPointDataIndex( gd,rbest,stem );
+ roff = ( stem->right.x - rold.x ) * stem->unit.y -
+ ( stem->right.y - rold.y ) * stem->unit.x;
+ stem->rmin -= roff; stem->rmax -= roff;
+ }
+ if ( !stem->ghost )
+ stem->width = ( stem->right.x - stem->left.x ) * stem->unit.y -
+ ( stem->right.y - stem->left.y ) * stem->unit.x;
+ } else {
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ if ( chunk->l != NULL && ( !stem->ghost || stem->width == 20 )) {
+ stem->leftidx = GetValidPointDataIndex( gd,chunk->l->sp,stem );
+ }
+ if ( chunk->r != NULL && ( !stem->ghost || stem->width == 21 )) {
+ stem->rightidx = GetValidPointDataIndex( gd,chunk->r->sp,stem );
+ }
+ }
+ }
+ } else {
+ qsort( stem->chunks,stem->chunk_cnt,sizeof( struct stem_chunk ),chunk_cmp );
+ lset = false; rset = false;
+ /* Search for a pair of points whose vectors are really parallel. */
+ /* This check is necessary because a diagonal stem can start from */
+ /* a feature termination, and our checks for such terminations */
+ /* are more "liberal" than in other cases. However we don't want */
+ /* considering such a pair of points basic for this stem */
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ BasePoint *lu, *ru;
+ if ( chunk->l != NULL && chunk->r != NULL ) {
+ lu = chunk->lnext ? &chunk->l->nextunit : &chunk->l->prevunit;
+ ru = chunk->rnext ? &chunk->r->nextunit : &chunk->r->prevunit;
+ if ( UnitsParallel( lu,ru,true )) {
+ loff = ( chunk->l->sp->me.x - stem->left.x )*stem->l_to_r.x +
+ ( chunk->l->sp->me.y - stem->left.y )*stem->l_to_r.y;
+ roff = ( chunk->r->sp->me.x - stem->right.x )*stem->l_to_r.x +
+ ( chunk->r->sp->me.y - stem->right.y )*stem->l_to_r.y;
+ stem->left = chunk->l->sp->me;
+ stem->right = chunk->r->sp->me;
+ RecalcStemOffsets( stem,&stem->unit,loff != 0,roff != 0 );
+ break;
+ }
+ }
+ }
+ /* If the above check fails, just select the first point (relatively) */
+ /* to the stem direction both at the left and the right edge */
+ if ( i == stem->chunk_cnt ) for ( i=0; i<stem->chunk_cnt; ++i ) {
+ chunk = &stem->chunks[i];
+ if ( !lset && chunk->l != NULL ) {
+ loff = ( chunk->l->sp->me.x - stem->left.x )*stem->l_to_r.x +
+ ( chunk->l->sp->me.y - stem->left.y )*stem->l_to_r.y;
+ stem->left = chunk->l->sp->me;
+ lset = true;
+ }
+ if ( !rset && chunk->r != NULL ) {
+ roff = ( chunk->r->sp->me.x - stem->right.x )*stem->l_to_r.x +
+ ( chunk->r->sp->me.y - stem->right.y )*stem->l_to_r.y;
+ stem->right = chunk->r->sp->me;
+ rset = true;
+ }
+ if ( lset && rset ) {
+ RecalcStemOffsets( stem,&stem->unit,loff != 0,roff != 0 );
+ break;
+ }
+ }
+ }
+}
+
+static void AssignPointsToBBoxHint( struct glyphdata *gd,DBounds *bounds,
+ struct stemdata *stem,int is_v ) {
+
+ double min, max, test, left, right;
+ double dist, prevdist;
+ int i, j;
+ int lcnt=0, rcnt=0, closest;
+ BasePoint dir;
+ SplinePoint **lpoints, **rpoints;
+ struct pointdata *pd, *pd1, *pd2;
+
+ lpoints = calloc( gd->pcnt,sizeof( SplinePoint *));
+ rpoints = calloc( gd->pcnt,sizeof( SplinePoint *));
+ dir.x = !is_v; dir.y = is_v;
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd = &gd->points[i];
+ min = ( is_v ) ? bounds->minx : bounds->miny;
+ max = ( is_v ) ? bounds->maxx : bounds->maxy;
+ test = ( is_v ) ? pd->base.x : pd->base.y;
+ if ( test >= min && test < min + dist_error_hv && (
+ IsCorrectSide( gd,pd,true,is_v,&dir ) || IsCorrectSide( gd,pd,false,is_v,&dir )))
+ lpoints[lcnt++] = pd->sp;
+ else if ( test > max - dist_error_hv && test <= max && (
+ IsCorrectSide( gd,pd,true,!is_v,&dir ) || IsCorrectSide( gd,pd,false,!is_v,&dir )))
+ rpoints[rcnt++] = pd->sp;
+ }
+ if ( lcnt > 0 && rcnt > 0 ) {
+ if ( stem == NULL ) {
+ stem = NewStem( gd,&dir,&lpoints[0]->me,&rpoints[0]->me );
+ stem->bbox = true;
+ stem->len = stem->width;
+ stem->leftidx = GetValidPointDataIndex( gd,lpoints[0],stem );
+ stem->rightidx = GetValidPointDataIndex( gd,rpoints[0],stem );
+ }
+ for ( i=0; i<lcnt; ++i ) {
+ closest = -1;
+ dist = 1e4; prevdist = 1e4;
+ for ( j=0; j<rcnt; ++j ) {
+ left = ( is_v ) ? lpoints[i]->me.y : lpoints[i]->me.x;
+ right = ( is_v ) ? rpoints[j]->me.y : rpoints[j]->me.x;
+ dist = fabs( left - right );
+ if ( dist < prevdist ) {
+ closest = j;
+ prevdist = dist;
+ }
+ }
+ pd1 = &gd->points[lpoints[i]->ptindex];
+ pd2 = &gd->points[rpoints[closest]->ptindex];
+ AddToStem( gd,stem,pd1,pd2,false,true,4 );
+ }
+ qsort( stem->chunks,stem->chunk_cnt,sizeof( struct stem_chunk ),chunk_cmp );
+ }
+ free( lpoints );
+ free( rpoints );
+}
+
+static void CheckForBoundingBoxHints( struct glyphdata *gd ) {
+ /* Adobe seems to add hints at the bounding boxes of glyphs with no hints */
+ int i, hv;
+ int hcnt=0, vcnt=0;
+ double cw, ch;
+ struct stemdata *stem, *hstem=NULL,*vstem=NULL;
+ DBounds bounds;
+
+ SplineCharFindBounds( gd->sc,&bounds );
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ hv = IsUnitHV( &stem->unit,true );
+ if ( !hv )
+ continue;
+ if ( stem->toobig ) {
+ if ( stem->left.x == bounds.minx && stem->right.x == bounds.maxx )
+ vstem = stem;
+ else if ( stem->right.y == bounds.miny && stem->left.y == bounds.maxy )
+ hstem = stem;
+ continue;
+ }
+ if ( hv == 1 ) {
+ if ( stem->bbox ) hstem = stem;
+ else ++hcnt;
+ } else if ( hv == 2 ) {
+ if ( stem->bbox ) vstem = stem;
+ else ++vcnt;
+ }
+ }
+ if ( hcnt!=0 && vcnt!=0 &&
+ ( hstem == NULL || !hstem->positioned ) &&
+ ( vstem == NULL || !vstem->positioned ))
+return;
+
+ ch = bounds.maxy - bounds.miny;
+ cw = bounds.maxx - bounds.minx;
+
+ if ( ch > 0 && (( hstem != NULL && hstem->positioned ) ||
+ ( hcnt == 0 && ch < gd->emsize/3 ))) {
+ if ( hstem != NULL && hstem->toobig ) hstem->toobig = false;
+ AssignPointsToBBoxHint( gd,&bounds,hstem,false );
+ if ( hstem != NULL ) NormalizeStem( gd,hstem );
+ }
+ if ( cw > 0 && (( vstem != NULL && vstem->positioned ) ||
+ ( vcnt == 0 && cw < gd->emsize/3 ))) {
+ if ( vstem != NULL && vstem->toobig ) vstem->toobig = false;
+ AssignPointsToBBoxHint( gd,&bounds,vstem,true );
+ if ( vstem != NULL ) NormalizeStem( gd,vstem );
+ }
+}
+
+static struct stemdata *FindOrMakeGhostStem( struct glyphdata *gd,
+ SplinePoint *sp,int blue,double width ) {
+ int i, j, hasl, hasr;
+ struct stemdata *stem=NULL, *tstem;
+ struct stem_chunk *chunk;
+ BasePoint dir,left,right;
+ double min, max;
+
+ dir.x = 1; dir.y = 0;
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ tstem = &gd->stems[i];
+ if ( tstem->blue == blue && tstem->ghost && tstem->width == width ) {
+ stem = tstem;
+ break;
+ /* If the stem controlling this blue zone is not for a ghost hint, */
+ /* then we check if it has both left and right points, to ensure that */
+ /* we don't occasionally assign an additional point to a stem which */
+ /* has already been rejected in favor of another stem */
+ } else if ( tstem->blue == blue && !tstem->ghost && !tstem->toobig ) {
+ min = ( width == 20 ) ? tstem->left.y - tstem->lmin - 2*dist_error_hv :
+ tstem->right.y - tstem->rmin - 2*dist_error_hv;
+ max = ( width == 20 ) ? tstem->left.y - tstem->lmax + 2*dist_error_hv :
+ tstem->right.y - tstem->rmax + 2*dist_error_hv;
+
+ if ( sp->me.y <= min || sp->me.y >= max )
+ continue;
+
+ hasl = false; hasr = false; j = 0;
+ while ( j < tstem->chunk_cnt && ( !hasl || !hasr )) {
+ chunk = &tstem->chunks[j];
+ if ( chunk->l != NULL && !chunk->lpotential )
+ hasl = true;
+ if ( chunk->r != NULL && !chunk->rpotential )
+ hasr = true;
+ j++;
+ }
+ if ( hasl && hasr ) {
+ stem = tstem;
+ break;
+ }
+ }
+ }
+
+ if ( stem == NULL ) {
+ left.x = right.x = sp->me.x;
+ left.y = ( width == 21 ) ? sp->me.y + 21 : sp->me.y;
+ right.y = ( width == 21 ) ? sp->me.y : sp->me.y - 20;
+
+ stem = NewStem( gd,&dir,&left,&right );
+ stem->ghost = true;
+ stem->width = width;
+ stem->blue = blue;
+ }
+return( stem );
+}
+
+static int AddGhostSegment( struct pointdata *pd,int cnt,double base,struct segment *space ) {
+ double s, e, temp, pos, spos, epos;
+ SplinePoint *sp, *nsp, *nsp2, *psp, *psp2;
+
+ sp = nsp = psp = pd->sp;
+ pos = pd->sp->me.y;
+
+ /* First check if there are points on the same line lying further */
+ /* in the desired direction */
+ if (( sp->next != NULL ) && ( sp->next->to->me.y == pos ))
+ nsp = sp->next->to;
+ if (( sp->prev != NULL ) && ( sp->prev->from->me.y == pos ))
+ psp = sp->prev->from;
+
+ if ( psp != sp ) {
+ s = psp->me.x;
+ } else if ( psp->noprevcp ) {
+ psp2 = psp->prev->from;
+ if ( psp2->me.y != psp->me.y ) {
+ s = ( psp->me.x - psp2->me.x )/( psp->me.y - psp2->me.y )*20.0;
+ if ( s < 0 ) s = -s;
+ if ( psp2->me.x<psp->me.x )
+ s = ( psp->me.x-psp2->me.x < s ) ? psp2->me.x : psp->me.x-s;
+ else
+ s = ( psp2->me.x-psp->me.x < s ) ? psp2->me.x : psp->me.x+s;
+ } else
+ s = psp->me.x;
+ } else {
+ s = ( pd->sp->me.x + psp->prevcp.x )/2;
+ }
+
+ if ( nsp != sp ) {
+ e = nsp->me.x;
+ } else if ( nsp->nonextcp ) {
+ nsp2 = nsp->next->to;
+ if ( nsp2->me.y != nsp->me.y ) {
+ e = ( nsp->me.x - nsp2->me.x )/( nsp->me.y - nsp2->me.y )*20.0;
+ if ( e < 0 ) e = -e;
+ if ( nsp2->me.x<nsp->me.x )
+ e = ( nsp->me.x-nsp2->me.x < e ) ? nsp2->me.x : nsp->me.x-e;
+ else
+ e = ( nsp2->me.x-nsp->me.x < e ) ? nsp2->me.x : nsp->me.x+e;
+ } else
+ e = nsp->me.x;
+ } else {
+ e = ( pd->sp->me.x + nsp->nextcp.x )/2;
+ }
+
+ spos = psp->me.x; epos = nsp->me.x;
+ if ( s>e ) {
+ temp = s; s = e; e = temp;
+ temp = spos; spos = epos; epos = temp;
+ }
+
+ space[cnt].start = s - base;
+ space[cnt].end = e - base;
+ space[cnt].sbase = spos - base;
+ space[cnt].ebase = epos - base;
+ space[cnt].ecurved = space[cnt].scurved = space[cnt].curved = ( false );
+
+ return( cnt+1 );
+}
+
+static void FigureGhostActive( struct glyphdata *gd,struct stemdata *stem ) {
+ int acnt, i;
+ real len = 0;
+ struct segment *activespace = gd->activespace;
+ struct pointdata *valid;
+
+ if ( !stem->ghost )
+return;
+
+ acnt = 0;
+ for ( i=0; i<stem->chunk_cnt; ++i ) {
+ valid = ( stem->chunks[i].l != NULL) ?
+ stem->chunks[i].l : stem->chunks[i].r;
+ acnt = AddGhostSegment( valid,acnt,stem->left.x,activespace );
+ }
+ qsort(activespace,acnt,sizeof(struct segment),segment_cmp);
+ acnt = MergeSegments( activespace,acnt );
+ stem->activecnt = acnt;
+ if ( acnt!=0 ) {
+ stem->active = malloc(acnt*sizeof(struct segment));
+ memcpy( stem->active,activespace,acnt*sizeof( struct segment ));
+ }
+
+ for ( i=0; i<acnt; ++i ) {
+ len += stem->active[i].end-stem->active[i].start;
+ }
+ stem->clen = stem->len = len;
+}
+
+static void CheckForGhostHints( struct glyphdata *gd ) {
+ /* PostScript doesn't allow a hint to stretch from one alignment zone to */
+ /* another. (Alignment zones are the things in bluevalues). */
+ /* Oops, I got this wrong. PS doesn't allow a hint to start in a bottom */
+ /* zone and stretch to a top zone. Everything in OtherBlues is a bottom */
+ /* zone. The baseline entry in BlueValues is also a bottom zone. Every- */
+ /* thing else in BlueValues is a top-zone. */
+ /* This means */
+ /* that we can't define a horizontal stem hint which stretches from */
+ /* the baseline to the top of a capital I, or the x-height of lower i */
+ /* If we find any such hints we must remove them, and replace them with */
+ /* ghost hints. The bottom hint has height -21, and the top -20 */
+ BlueData *bd = &gd->bd;
+ struct stemdata *stem;
+ struct pointdata *pd;
+ real base;
+ int i, j, leftfound, rightfound, has_h, peak, fuzz;
+
+ fuzz = gd->fuzz;
+
+ /* look for any stems stretching from one zone to another and remove them */
+ /* (I used to turn them into ghost hints here, but that didn't work (for */
+ /* example on "E" where we don't need any ghosts from the big stem because*/
+ /* the narrow stems provide the hints that PS needs */
+ /* However, there are counter-examples. in Garamond-Pro the "T" character */
+ /* has a horizontal stem at the top which stretches between two adjacent */
+ /* bluezones. Removing it is wrong. Um... Thanks Adobe */
+ /* I misunderstood. Both of these were top-zones */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( IsUnitHV( &stem->unit,true ) != 1)
+ continue;
+
+ leftfound = rightfound = -1;
+ for ( j=0; j<bd->bluecnt; ++j ) {
+ if ( stem->left.y>=bd->blues[j][0]-fuzz && stem->left.y<=bd->blues[j][1]+fuzz )
+ leftfound = j;
+ else if ( stem->right.y>=bd->blues[j][0]-fuzz && stem->right.y<=bd->blues[j][1]+fuzz )
+ rightfound = j;
+ }
+ /* Assign value 2 to indicate this stem should be ignored also for TTF instrs */
+ if ( leftfound !=-1 && rightfound !=-1 &&
+ ( stem->left.y > 0 && stem->right.y <= 0 ))
+ stem->toobig = 2;
+ /* Otherwise mark the stem as controlling a specific blue zone */
+ else if ( leftfound != -1 && ( rightfound == -1 || stem->left.y > 0 ))
+ stem->blue = leftfound;
+ else if ( rightfound != -1 && ( leftfound == -1 || stem->right.y <= 0 ))
+ stem->blue = rightfound;
+ }
+
+ /* Now look and see if we can find any edges which lie in */
+ /* these zones. Edges which are not currently in hints */
+ /* Use the winding number to determine top or bottom */
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ has_h = false;
+ for ( j=0; j<gd->points[i].prevcnt; j++ ) {
+ stem = gd->points[i].prevstems[j];
+ if ( !stem->toobig && IsUnitHV( &stem->unit,true ) == 1 ) {
+ has_h = true;
+ break;
+ }
+ }
+ for ( j=0; j<gd->points[i].nextcnt; j++ ) {
+ stem = gd->points[i].nextstems[j];
+ if ( !stem->toobig && IsUnitHV( &stem->unit,true ) == 1 ) {
+ has_h = true;
+ break;
+ }
+ }
+ if ( has_h )
+ continue;
+
+ pd = &gd->points[i];
+ base = pd->sp->me.y;
+ for ( j=0; j<bd->bluecnt; ++j ) {
+ if ( base>=bd->blues[j][0]-fuzz && base<=bd->blues[j][1]+fuzz ) {
+ peak = IsSplinePeak( gd,pd,false,false,7 );
+ if ( peak > 0 ) {
+ stem = FindOrMakeGhostStem( gd,pd->sp,j,20 );
+ AddToStem( gd,stem,pd,NULL,2,false,false );
+ } else if ( peak < 0 ) {
+ stem = FindOrMakeGhostStem( gd,pd->sp,j,21 );
+ AddToStem( gd,stem,NULL,pd,2,false,false );
+ }
+ }
+ }
+ }
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( !stem->ghost )
+ continue;
+ NormalizeStem( gd,stem );
+ FigureGhostActive( gd,stem );
+ }
+}
+
+static void MarkDStemCorner( struct glyphdata *gd,struct pointdata *pd ) {
+ int x_dir = pd->x_corner;
+ int hv, is_l, i, peak, has_stem = false;
+ struct stemdata *stem;
+ BasePoint left,right,unit;
+
+ for ( i=0; i<pd->prevcnt && !has_stem; i++ ) {
+ stem = pd->prevstems[i];
+ hv = IsUnitHV( &stem->unit,true );
+ if ( !stem->toobig && (
+ ( x_dir && hv == 1 ) ||
+ ( !x_dir && hv == 2 )))
+ has_stem = true;
+ }
+ for ( i=0; i<pd->nextcnt && !has_stem; i++ ) {
+ stem = pd->nextstems[i];
+ hv = IsUnitHV( &stem->unit,true );
+ if ( !stem->toobig && (
+ ( x_dir && hv == 1 ) ||
+ ( !x_dir && hv == 2 )))
+ has_stem = true;
+ }
+ if ( has_stem )
+return;
+
+ peak = IsSplinePeak( gd,pd,x_dir,x_dir,2 );
+ unit.x = !x_dir; unit.y = x_dir;
+
+ if ( peak > 0 ) {
+ left.x = x_dir ? pd->sp->me.x + 21 : pd->sp->me.x;
+ right.x = x_dir ? pd->sp->me.x : pd->sp->me.x;
+ left.y = x_dir ? pd->sp->me.y : pd->sp->me.y;
+ right.y = x_dir ? pd->sp->me.y : pd->sp->me.y - 20;
+
+ } else if ( peak < 0 ) {
+ left.x = x_dir ? pd->sp->me.x : pd->sp->me.x;
+ right.x = x_dir ? pd->sp->me.x - 20 : pd->sp->me.x;
+ left.y = x_dir ? pd->sp->me.y : pd->sp->me.y + 21;
+ right.y = x_dir ? pd->sp->me.y : pd->sp->me.y;
+ }
+ is_l = IsCorrectSide( gd,pd,true,true,&unit );
+ for ( i=0; i<gd->stemcnt; i++ ) {
+ stem = &gd->stems[i];
+ if (!stem->toobig && UnitsParallel( &unit,&stem->unit,true ) &&
+ OnStem( stem,&pd->sp->me,is_l ))
+ break;
+ }
+ if ( i == gd->stemcnt ) {
+ stem = NewStem( gd,&unit,&left,&right );
+ stem->ghost = 2;
+ }
+ AddToStem( gd,stem,pd,NULL,2,false,false );
+}
+
+static void MarkDStemCorners( struct glyphdata *gd ) {
+ struct stemdata *stem;
+ struct stem_chunk *schunk, *echunk;
+ int i;
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->toobig || IsUnitHV( &stem->unit,true ))
+ continue;
+
+ schunk = &stem->chunks[0];
+ echunk = &stem->chunks[stem->chunk_cnt - 1];
+
+ if ( schunk->l != NULL && schunk->r != NULL &&
+ fabs( schunk->l->base.x - schunk->r->base.x ) > dist_error_hv &&
+ fabs( schunk->l->base.y - schunk->r->base.y ) > dist_error_hv && (
+ ( schunk->l->x_corner == 1 && schunk->r->y_corner == 1 ) ||
+ ( schunk->l->y_corner == 1 && schunk->r->x_corner == 1 ))) {
+ MarkDStemCorner( gd,schunk->l );
+ MarkDStemCorner( gd,schunk->r );
+ }
+ if ( echunk->l != NULL && echunk->r != NULL &&
+ fabs( echunk->l->base.x - echunk->r->base.x ) > dist_error_hv &&
+ fabs( echunk->l->base.y - echunk->r->base.y ) > dist_error_hv && (
+ ( echunk->l->x_corner == 1 && echunk->r->y_corner == 1 ) ||
+ ( echunk->l->y_corner == 1 && echunk->r->x_corner == 1 ))) {
+ MarkDStemCorner( gd,echunk->l );
+ MarkDStemCorner( gd,echunk->r );
+ }
+ }
+}
+
+#if GLYPH_DATA_DEBUG
+static void DumpGlyphData( struct glyphdata *gd ) {
+ int i, j;
+ struct stemdata *stem;
+ struct linedata *line;
+ struct stem_chunk *chunk;
+
+ if ( gd->linecnt > 0 )
+ fprintf( stderr, "\nDumping line data for %s\n",gd->sc->name );
+ for ( i=0; i<gd->linecnt; ++i ) {
+ line = &gd->lines[i];
+ fprintf( stderr, "line vector=%.4f,%.4f base=%.2f,%.2f length=%.4f\n",
+ line->unit.x,line->unit.y,line->online.x,line->online.y,line->length );
+ for( j=0; j<line->pcnt;++j ) {
+ fprintf( stderr, "\tpoint num=%d, x=%.2f, y=%.2f, prev=%d, next=%d\n",
+ line->points[j]->sp->ttfindex, line->points[j]->sp->me.x,
+ line->points[j]->sp->me.y,
+ line->points[j]->prevline==line, line->points[j]->nextline==line );
+ }
+ fprintf( stderr, "\n" );
+ }
+
+ if ( gd->stemcnt > 0 )
+ fprintf( stderr, "\nDumping stem data for %s\n",gd->sc->name );
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ fprintf( stderr, "stem l=%.2f,%.2f idx=%d r=%.2f,%.2f idx=%d vector=%.4f,%.4f\n\twidth=%.2f chunk_cnt=%d len=%.4f clen=%.4f ghost=%d blue=%d toobig=%d\n\tlmin=%.2f,lmax=%.2f,rmin=%.2f,rmax=%.2f,lpcnt=%d,rpcnt=%d\n",
+ stem->left.x,stem->left.y,stem->leftidx,
+ stem->right.x,stem->right.y,stem->rightidx,
+ stem->unit.x,stem->unit.y,stem->width,
+ stem->chunk_cnt,stem->len,stem->clen,stem->ghost,stem->blue,stem->toobig,
+ stem->lmin,stem->lmax,stem->rmin,stem->rmax,stem->lpcnt,stem->rpcnt );
+ for ( j=0; j<stem->chunk_cnt; ++j ) {
+ chunk = &stem->chunks[j];
+ if ( chunk->l!=NULL && chunk->r!=NULL )
+ fprintf (stderr, "\tchunk l=%.2f,%.2f potential=%d r=%.2f,%.2f potential=%d stub=%d\n",
+ chunk->l->sp->me.x, chunk->l->sp->me.y, chunk->lpotential,
+ chunk->r->sp->me.x, chunk->r->sp->me.y, chunk->rpotential, chunk->stub );
+ else if ( chunk->l!=NULL )
+ fprintf (stderr, "\tchunk l=%.2f,%.2f potential=%d\n",
+ chunk->l->sp->me.x, chunk->l->sp->me.y, chunk->lpotential);
+ else if ( chunk->r!=NULL )
+ fprintf (stderr, "\tchunk r=%.2f,%.2f potential=%d\n",
+ chunk->r->sp->me.x, chunk->r->sp->me.y, chunk->rpotential);
+ }
+ fprintf( stderr, "\n" );
+ }
+
+ if ( gd->hbundle != NULL || gd->vbundle != NULL )
+ fprintf( stderr, "\nDumping HV stem bundles for %s\n",gd->sc->name );
+ if ( gd->hbundle != NULL ) for ( i=0; i<gd->hbundle->cnt; i++ ) {
+ stem = gd->hbundle->stemlist[i];
+ fprintf( stderr, "H stem l=%.2f,%.2f r=%.2f,%.2f slave=%d\n",
+ stem->left.x,stem->left.y,stem->right.x,stem->right.y,stem->master!=NULL );
+ if ( stem->dep_cnt > 0 ) for ( j=0; j<stem->dep_cnt; j++ ) {
+ fprintf( stderr, "\tslave l=%.2f,%.2f r=%.2f,%.2f mode=%c left=%d\n",
+ stem->dependent[j].stem->left.x,stem->dependent[j].stem->left.y,
+ stem->dependent[j].stem->right.x,stem->dependent[j].stem->right.y,
+ stem->dependent[j].dep_type,stem->dependent[j].lbase );
+ }
+ if ( stem->serif_cnt > 0 ) for ( j=0; j<stem->serif_cnt; j++ ) {
+ fprintf( stderr, "\tserif l=%.2f,%.2f r=%.2f,%.2f ball=%d left=%d\n",
+ stem->serifs[j].stem->left.x,stem->serifs[j].stem->left.y,
+ stem->serifs[j].stem->right.x,stem->serifs[j].stem->right.y,
+ stem->serifs[j].is_ball,stem->serifs[j].lbase );
+ }
+ }
+ fprintf( stderr, "\n" );
+ if ( gd->vbundle != NULL ) for ( i=0; i<gd->vbundle->cnt; i++ ) {
+ stem = gd->vbundle->stemlist[i];
+ fprintf( stderr, "V stem l=%.2f,%.2f r=%.2f,%.2f slave=%d\n",
+ stem->left.x,stem->left.y,stem->right.x,stem->right.y,stem->master!=NULL );
+ if ( stem->dep_cnt > 0 ) for ( j=0; j<stem->dep_cnt; j++ ) {
+ fprintf( stderr, "\tslave l=%.2f,%.2f r=%.2f,%.2f mode=%c left=%d\n",
+ stem->dependent[j].stem->left.x,stem->dependent[j].stem->left.y,
+ stem->dependent[j].stem->right.x,stem->dependent[j].stem->right.y,
+ stem->dependent[j].dep_type,stem->dependent[j].lbase );
+ }
+ if ( stem->serif_cnt > 0 ) for ( j=0; j<stem->serif_cnt; j++ ) {
+ fprintf( stderr, "\tserif l=%.2f,%.2f r=%.2f,%.2f ball=%d left=%d\n",
+ stem->serifs[j].stem->left.x,stem->serifs[j].stem->left.y,
+ stem->serifs[j].stem->right.x,stem->serifs[j].stem->right.y,
+ stem->serifs[j].is_ball,stem->serifs[j].lbase );
+ }
+ if ( stem->prev_c_m != NULL ) {
+ fprintf( stderr,"\tprev counter master: l=%.2f r=%.2f\n",
+ stem->prev_c_m->left.x,stem->prev_c_m->right.x );
+ }
+ if ( stem->next_c_m != NULL ) {
+ fprintf( stderr,"\tnext counter master: l=%.2f r=%.2f\n",
+ stem->next_c_m->left.x,stem->next_c_m->right.x );
+ }
+ }
+ fprintf( stderr, "\n" );
+
+ if ( gd->ibundle != NULL ) for ( i=0; i<gd->ibundle->cnt; i++ ) {
+ stem = gd->ibundle->stemlist[i];
+ fprintf( stderr, "I stem l=%.2f,%.2f r=%.2f,%.2f slave=%d\n",
+ stem->left.x,stem->left.y,stem->right.x,stem->right.y,stem->master!=NULL );
+ if ( stem->dep_cnt > 0 ) for ( j=0; j<stem->dep_cnt; j++ ) {
+ fprintf( stderr, "\tslave l=%.2f,%.2f r=%.2f,%.2f mode=%c left=%d\n",
+ stem->dependent[j].stem->left.x,stem->dependent[j].stem->left.y,
+ stem->dependent[j].stem->right.x,stem->dependent[j].stem->right.y,
+ stem->dependent[j].dep_type,stem->dependent[j].lbase );
+ }
+ if ( stem->serif_cnt > 0 ) for ( j=0; j<stem->serif_cnt; j++ ) {
+ fprintf( stderr, "\tserif l=%.2f,%.2f r=%.2f,%.2f ball=%d left=%d\n",
+ stem->serifs[j].stem->left.x,stem->serifs[j].stem->left.y,
+ stem->serifs[j].stem->right.x,stem->serifs[j].stem->right.y,
+ stem->serifs[j].is_ball,stem->serifs[j].lbase );
+ }
+ }
+ fprintf( stderr, "\n" );
+}
+#endif
+
+static void AssignPointsToStems( struct glyphdata *gd,int startnum,DBounds *bounds ) {
+ int i;
+ struct pointdata *pd;
+ struct stemdata *stem = NULL;
+ BasePoint dir;
+
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd = &gd->points[i];
+ if ( pd->prev_e_cnt > 0 )
+ BuildStem( gd,pd,false,true,true,0 );
+ else
+ HalfStemNoOpposite( gd,pd,stem,&pd->prevunit,false );
+
+ if ( pd->next_e_cnt > 0 )
+ BuildStem( gd,pd,true,true,true,0 );
+ else
+ HalfStemNoOpposite( gd,pd,stem,&pd->nextunit,true );
+
+ if ( pd->x_corner ) {
+ if ( pd->bothedge!=NULL )
+ stem = DiagonalCornerStem( gd,pd,true );
+ dir.x = 0; dir.y = 1;
+ HalfStemNoOpposite( gd,pd,stem,&dir,2 );
+ } else if ( pd->y_corner ) {
+ if ( pd->bothedge!=NULL )
+ stem = DiagonalCornerStem( gd,pd,true );
+ dir.x = 1; dir.y = 0;
+ HalfStemNoOpposite( gd,pd,stem,&dir,2 );
+ }
+ }
+ gd->lspace = malloc(gd->pcnt*sizeof(struct segment));
+ gd->rspace = malloc(gd->pcnt*sizeof(struct segment));
+ gd->bothspace = malloc(3*gd->pcnt*sizeof(struct segment));
+ gd->activespace = malloc(3*gd->pcnt*sizeof(struct segment));
+#if GLYPH_DATA_DEBUG
+ fprintf( stderr,"Going to calculate stem active zones for %s\n",gd->sc->name );
+#endif
+ for ( i=startnum; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ NormalizeStem( gd,stem );
+ if ( gd->stems[i].ghost )
+ FigureGhostActive( gd,stem );
+ else if ( gd->stems[i].bbox )
+ AssignPointsToBBoxHint( gd,bounds,stem,( stem->unit.y == 1 ));
+ else
+ FigureStemActive( gd,&gd->stems[i] );
+ }
+#if GLYPH_DATA_DEBUG
+ DumpGlyphData( gd );
+#endif
+
+ free(gd->lspace); gd->lspace = NULL;
+ free(gd->rspace); gd->rspace = NULL;
+ free(gd->bothspace); gd->bothspace = NULL;
+ free(gd->activespace); gd->activespace = NULL;
+}
+
+static void _DStemInfoToStemData( struct glyphdata *gd,DStemInfo *dsi,int *startcnt ) {
+ struct stemdata *stem;
+
+ if ( gd->stems == NULL ) {
+ gd->stems = calloc( 2*gd->pcnt,sizeof( struct stemdata ));
+ gd->stemcnt = 0;
+ }
+ *startcnt = gd->stemcnt;
+ while ( dsi != NULL ) {
+ stem = NewStem( gd,&dsi->unit,&dsi->left,&dsi->right );
+ stem->positioned = true;
+ dsi = dsi->next;
+ }
+}
+
+struct glyphdata *DStemInfoToStemData( struct glyphdata *gd,DStemInfo *dsi ) {
+ int startcnt;
+
+ if ( dsi == NULL )
+return( gd );
+
+ _DStemInfoToStemData( gd,dsi,&startcnt );
+ AssignPointsToStems( gd,startcnt,NULL );
+return( gd );
+}
+
+static void _StemInfoToStemData( struct glyphdata *gd,StemInfo *si,DBounds *bounds,int is_v,int *startcnt ) {
+ struct stemdata *stem;
+ BasePoint dir,left,right;
+
+ dir.x = !is_v; dir.y = is_v;
+ if ( gd->stems == NULL ) {
+ gd->stems = calloc( 2*gd->pcnt,sizeof( struct stemdata ));
+ gd->stemcnt = 0;
+ }
+ *startcnt = gd->stemcnt;
+
+ while ( si != NULL ) {
+ left.x = ( is_v ) ? si->start : 0;
+ left.y = ( is_v ) ? 0 : si->start + si->width;
+ right.x = ( is_v ) ? si->start + si->width : 0;
+ right.y = ( is_v ) ? 0 : si->start;
+ stem = NewStem( gd,&dir,&left,&right );
+ stem->ghost = si->ghost;
+ if (( is_v &&
+ left.x >= bounds->minx && left.x < bounds->minx + dist_error_hv &&
+ right.x > bounds->maxx - dist_error_hv && right.x <= bounds->maxx ) ||
+ ( !is_v &&
+ right.y >= bounds->miny && right.y < bounds->miny + dist_error_hv &&
+ left.y > bounds->maxy - dist_error_hv && left.y <= bounds->maxy ))
+ stem->bbox = true;
+ stem->positioned = true;
+ si = si->next;
+ }
+}
+
+struct glyphdata *StemInfoToStemData( struct glyphdata *gd,StemInfo *si,int is_v ) {
+ DBounds bounds;
+ int startcnt;
+
+ if ( si == NULL )
+return( gd );
+
+ SplineCharFindBounds( gd->sc,&bounds );
+ _StemInfoToStemData( gd,si,&bounds,is_v,&startcnt );
+
+ AssignPointsToStems( gd,startcnt,&bounds );
+return( gd );
+}
+
+static int ValidConflictingStem( struct stemdata *stem1,struct stemdata *stem2 ) {
+ int x_dir = fabs( stem1->unit.y ) > fabs( stem1->unit.x );
+ double s1, e1, s2, e2, temp;
+
+ s1 = (&stem1->left.x)[!x_dir] -
+ ((&stem1->left.x)[x_dir] * (&stem1->unit.x)[!x_dir] )/(&stem1->unit.x)[x_dir];
+ e1 = (&stem1->right.x)[!x_dir] -
+ ((&stem1->right.x)[x_dir] * (&stem1->unit.x)[!x_dir] )/(&stem1->unit.x)[x_dir];
+ s2 = (&stem2->left.x)[!x_dir] -
+ ((&stem2->left.x)[x_dir] * (&stem2->unit.x)[!x_dir] )/(&stem2->unit.x)[x_dir];
+ e2 = (&stem2->right.x)[!x_dir] -
+ ((&stem2->right.x)[x_dir] * (&stem2->unit.x)[!x_dir] )/(&stem2->unit.x)[x_dir];
+
+ if ( s1 > e1 ) {
+ temp = s1; s1 = e1; e1 = temp;
+ }
+ if ( s2 > e2 ) {
+ temp = s2; s2 = e2; e2 = temp;
+ }
+ /* If stems don't overlap, then there is no conflict here */
+ if ( s2 >= e1 || s1 >= e2 )
+return( false );
+
+ /* Stems which have no points assigned cannot be valid masters for */
+ /* other stems (however there is a notable exception for ghost hints) */
+ if (( stem1->lpcnt > 0 || stem1->rpcnt > 0 ) &&
+ stem2->lpcnt == 0 && stem2->rpcnt == 0 && !stem2->ghost )
+return( false );
+
+ /* Bounding box stems are always preferred */
+ if ( stem1->bbox && !stem2->bbox )
+return( false );
+
+ /* Stems associated with blue zones always preferred to any other stems */
+ if ( stem1->blue >=0 && stem2->blue < 0 )
+return( false );
+ /* Don't attempt to handle together stems, linked to different zones */
+ if ( stem1->blue >=0 && stem2->blue >= 0 && stem1->blue != stem2->blue )
+return( false );
+ /* If both stems are associated with a blue zone, but one of them is for */
+ /* a ghost hint, then that stem is preferred */
+ if ( stem1->ghost && !stem2->ghost )
+return( false );
+
+return( true );
+}
+
+static int HasDependentStem( struct stemdata *master,struct stemdata *slave ) {
+ int i;
+ struct stemdata *tstem;
+
+ if ( slave->master != NULL && master->dep_cnt > 0 ) {
+ for ( i=0; i<master->dep_cnt; i++ ) {
+ tstem = master->dependent[i].stem;
+ if ( tstem == slave || HasDependentStem( tstem,slave ))
+return( true );
+ }
+ }
+return( false );
+}
+
+static int PreferEndDep( struct stemdata *stem,
+ struct stemdata *smaster,struct stemdata *emaster,char s_type,char e_type ) {
+
+ int hv = IsUnitHV( &stem->unit,true );
+ double sdist, edist;
+
+ if ( !hv )
+return( false );
+
+ if (( s_type == 'a' && e_type != 'a' ) || ( s_type == 'm' && e_type == 'i' ))
+return( false );
+ else if (( e_type == 'a' && s_type != 'a' ) || ( e_type == 'm' && s_type == 'i' ))
+return( true );
+
+ if ( s_type == 'm' && s_type == e_type ) {
+ sdist = ( hv==1 ) ?
+ fabs( smaster->right.y - stem->right.y ) :
+ fabs( smaster->left.x - stem->left.x );
+ edist = ( hv==1 ) ?
+ fabs( emaster->left.y - stem->left.y ) :
+ fabs( emaster->right.x - stem->right.x );
+return( edist < sdist );
+ } else
+return( emaster->clen > smaster->clen );
+}
+
+static void LookForMasterHVStem( struct stemdata *stem,BlueData *bd ) {
+ struct stemdata *tstem, *smaster=NULL, *emaster=NULL;
+ struct stembundle *bundle = stem->bundle;
+ double start, end, tstart, tend;
+ double ssdist, sedist, esdist, eedist;
+ double smin, smax, emin, emax, tsmin, tsmax, temin, temax;
+ int is_x, i, link_to_s, stype, etype, allow_s, allow_e;
+
+ is_x = ( bundle->unit.x == 1 );
+ if ( is_x ) {
+ start = stem->right.y; end = stem->left.y;
+ smin = start - stem->rmin - 2*dist_error_hv;
+ smax = start - stem->rmax + 2*dist_error_hv;
+ emin = end - stem->lmin - 2*dist_error_hv;
+ emax = end - stem->lmax + 2* dist_error_hv;
+ } else {
+ start = stem->left.x; end = stem->right.x;
+ smin = start + stem->lmax - 2*dist_error_hv;
+ smax = start + stem->lmin + 2*dist_error_hv;
+ emin = end + stem->rmax - 2*dist_error_hv;
+ emax = end + stem->rmin + 2*dist_error_hv;
+ }
+ start = ( is_x ) ? stem->right.y : stem->left.x;
+ end = ( is_x ) ? stem->left.y : stem->right.x;
+ stype = etype = '\0';
+
+ for ( i=0; i<bundle->cnt; i++ ) {
+ tstem = bundle->stemlist[i];
+ if ( is_x ) {
+ tstart = tstem->right.y; tend = tstem->left.y;
+ tsmin = tstart - tstem->rmin - 2*dist_error_hv;
+ tsmax = tstart - tstem->rmax + 2*dist_error_hv;
+ temin = tend - tstem->lmin - 2*dist_error_hv;
+ temax = tend - tstem->lmax + 2* dist_error_hv;
+ } else {
+ tstart = tstem->left.x; tend = tstem->right.x;
+ tsmin = tstart + tstem->lmax - 2*dist_error_hv;
+ tsmax = tstart + tstem->lmin + 2*dist_error_hv;
+ temin = tend + tstem->rmax - 2*dist_error_hv;
+ temax = tend + tstem->rmin + 2*dist_error_hv;
+ }
+ tstart = ( is_x ) ? tstem->right.y : tstem->left.x;
+ tend = ( is_x ) ? tstem->left.y : tstem->right.x;
+
+ /* In this loop we are looking if the given stem has conflicts with */
+ /* other stems and if anyone of those conflicting stems should */
+ /* take precedence over it */
+ if ( stem == tstem || tend < start || tstart > end ||
+ !ValidConflictingStem( stem,tstem ) || HasDependentStem( stem,tstem ))
+ continue;
+ /* Usually in case of conflicts we prefer the stem with longer active */
+ /* zones. However a stem linked to a blue zone is always preferred to */
+ /* a stem which is not, and ghost hints are preferred to any other */
+ /* stems */
+ if ( stem->clen > tstem->clen && ValidConflictingStem( tstem,stem ))
+ continue;
+
+ stem->confl_cnt++;
+
+ /* If the master stem is for a ghost hint or both the stems are */
+ /* linked to the same blue zone, then we can link only to the edge */
+ /* which fall into the blue zone */
+ allow_s = ( !tstem->ghost || tstem->width == 21 ) &&
+ ( stem->blue == -1 || stem->blue != tstem->blue || bd->blues[stem->blue][0] < 0 );
+ allow_e = ( !tstem->ghost || tstem->width == 20 ) &&
+ ( stem->blue == -1 || stem->blue != tstem->blue || bd->blues[stem->blue][0] > 0 );
+
+ /* Assume there are two stems which have (almost) coincident left edges. */
+ /* The hinting technique for this case is to merge all points found on */
+ /* those coincident edges together, position them, and then link to the */
+ /* opposite edges. */
+ /* However we don't allow merging if both stems can be snapped to a blue */
+ /* zone, unless their edges are _exactly_ coincident, as shifting features */
+ /* relatively to each other instead of snapping them to the same zone would */
+ /* obviously be wrong */
+ if ( allow_s && tstart > smin && tstart < smax && start > tsmin && start < tsmax &&
+ ( stem->blue == -1 || RealNear( tstart,start ))) {
+
+ if ( smaster == NULL || stype != 'a' || smaster->clen < tstem->clen ) {
+ smaster = tstem;
+ stype = 'a';
+ }
+ /* The same case for right edges */
+ } else if ( allow_e && tend > emin && tend < emax && end > temin && end < temax &&
+ ( stem->blue == -1 || RealNear( tend,end ))) {
+
+ if ( emaster == NULL || etype != 'a' || emaster->clen < tstem->clen ) {
+ emaster = tstem;
+ etype = 'a';
+ }
+
+ /* Nested stems. I first planned to handle them by positioning the */
+ /* narrower stem first, and then linking its edges to the opposed edges */
+ /* of the nesting stem. But this works well only in those cases where */
+ /* maintaining the dependent stem width is not important. So now the */
+ /* situations where a narrower or a wider stem can be preferred */
+ /* (because it has longer active zones) are equally possible. In the */
+ /* first case I link to the master stem just one edge of the secondary */
+ /* stem, just like with overlapping stems */
+ } else if ( tstart > start && tend < end ) {
+ if ( allow_s && ( smaster == NULL || stype == 'i' ||
+ ( stype == 'm' && smaster->clen < tstem->clen ))) {
+
+ smaster = tstem;
+ stype = 'm';
+ }
+ if ( allow_e && ( emaster == NULL || etype == 'i' ||
+ ( etype == 'm' && emaster->clen < tstem->clen ))) {
+
+ emaster = tstem;
+ etype = 'm';
+ }
+ /* However if we have to prefer the nesting stem, we do as with */
+ /* overlapping stems which require interpolations, i. e. interpolate */
+ /* one edge and link to another */
+ } else if ( tstart < start && tend > end ) {
+ link_to_s = ( allow_s && ( start - tstart < tend - end ));
+ if ( link_to_s && ( smaster == NULL ||
+ ( stype == 'i' && smaster->clen < tstem->clen ))) {
+ smaster = tstem;
+ stype = 'i';
+ } else if ( !link_to_s && ( emaster == NULL ||
+ ( etype == 'i' && emaster->clen < tstem->clen ))) {
+ emaster = tstem;
+ etype = 'i';
+ }
+ /* Overlapping stems. Here we first check all 4 distances between */
+ /* 4 stem edges. If the closest distance is between left or right */
+ /* edges, then the normal technique (in TrueType) is linking them */
+ /* with MDRP without maintaining a minimum distance. Otherwise */
+ /* we interpolate an edge of the "slave" stem between already */
+ /* positioned edges of the "master" stem, and then gridfit it */
+ } else if (( tstart < start && start < tend && tend < end ) ||
+ ( start < tstart && tstart < end && end < tend )) {
+
+ ssdist = fabs( start - tstart );
+ sedist = fabs( start - tend );
+ esdist = fabs( end - tstart );
+ eedist = fabs( end - tend );
+
+ if ( allow_s && ( !allow_e ||
+ ( stem->width < tstem->width/3 && ssdist < eedist ) ||
+ ( ssdist <= eedist && ssdist <= sedist && ssdist <= esdist )) &&
+ ( smaster == NULL || ( stype == 'i' ||
+ ( stype == 'm' && smaster->clen < tstem->clen )))) {
+
+ smaster = tstem;
+ stype = 'm';
+ } else if ( allow_e && ( !allow_s ||
+ ( stem->width < tstem->width/3 && eedist < ssdist ) ||
+ ( eedist <= ssdist && eedist <= sedist && eedist <= esdist )) &&
+ ( emaster == NULL || ( etype == 'i' ||
+ ( etype == 'm' && emaster->clen < tstem->clen )))) {
+
+ emaster = tstem;
+ etype = 'm';
+ } else if ( allow_s && allow_e && ( smaster == NULL ||
+ ( stype == 'i' && smaster->clen < tstem->clen )) &&
+ sedist <= esdist && sedist <= ssdist && sedist <= eedist ) {
+
+ smaster = tstem;
+ stype = 'i';
+ } else if ( allow_s && allow_e && ( emaster == NULL ||
+ ( etype == 'i' && emaster->clen < tstem->clen )) &&
+ esdist <= sedist && esdist <= ssdist && esdist <= eedist ) {
+
+ emaster = tstem;
+ etype = 'i';
+ }
+ }
+ }
+ if ( smaster != NULL && emaster != NULL ) {
+ if ( PreferEndDep( stem,smaster,emaster,stype,etype ))
+ smaster = NULL;
+ else
+ emaster = NULL;
+ }
+
+ if ( smaster != NULL ) {
+ stem->master = smaster;
+ if ( smaster->dependent == NULL )
+ smaster->dependent = calloc( bundle->cnt*2,sizeof( struct dependent_stem ));
+ smaster->dependent[smaster->dep_cnt].stem = stem;
+ smaster->dependent[smaster->dep_cnt].dep_type = stype;
+ smaster->dependent[smaster->dep_cnt++].lbase = !is_x;
+ } else if ( emaster != NULL ) {
+ stem->master = emaster;
+ if ( emaster->dependent == NULL )
+ emaster->dependent = calloc( bundle->cnt*2,sizeof( struct dependent_stem ));
+ emaster->dependent[emaster->dep_cnt ].stem = stem;
+ emaster->dependent[emaster->dep_cnt ].dep_type = etype;
+ emaster->dependent[emaster->dep_cnt++].lbase = is_x;
+ }
+}
+
+/* If a stem has been considered depending from another stem which in */
+/* its turn has its own "master", and the first stem doesn't conflict */
+/* with the "master" of the stem it overlaps (or any other stems), then */
+/* this dependency is unneeded and processing it in the autoinstructor */
+/* can even lead to undesired effects. Unfortunately we can't prevent */
+/* detecting such dependecies in LookForMasterHVStem(), because we */
+/* need to know the whole stem hierarchy first. So look for undesired */
+/* dependencies and clean them now */
+static void ClearUnneededDeps( struct stemdata *stem ) {
+ struct stemdata *master;
+ int i, j;
+
+ if ( stem->confl_cnt == 1 &&
+ ( master = stem->master ) != NULL && master->master != NULL ) {
+
+ stem->master = NULL;
+ for ( i=j=0; i<master->dep_cnt; i++ ) {
+ if ( j<i )
+ memcpy( &master->dependent[i-1],&master->dependent[i],
+ sizeof( struct dependent_stem ));
+ if ( master->dependent[i].stem != stem ) j++;
+ }
+ (master->dep_cnt)--;
+ }
+}
+
+static void GDBundleStems( struct glyphdata *gd, int maxtoobig, int needs_deps ) {
+ struct stemdata *stem, *tstem;
+ int i, j, k, hv, hasl, hasr, stem_cnt;
+ struct pointdata *lpd, *rpd;
+ double dmove;
+ DBounds bounds;
+
+ /* Some checks for undesired stems which we couldn't do earlier */
+
+ /* First filter out HV stems which have only "potential" points */
+ /* on their left or right edge. Such stems aren't supposed to be */
+ /* used for PS hinting, so we mark them as "too big" */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ hasl = false; hasr = false;
+
+ if ( IsUnitHV( &stem->unit,true ) &&
+ !stem->toobig && !stem->ghost && !stem->positioned ) {
+ for ( j=0; j<stem->chunk_cnt && ( !hasl || !hasr ); ++j ) {
+ if ( stem->chunks[j].l!=NULL && !stem->chunks[j].lpotential )
+ hasl = true;
+ if ( stem->chunks[j].r!=NULL && !stem->chunks[j].rpotential )
+ hasr = true;
+ }
+ if ( !hasl || !hasr )
+ stem->toobig = true;
+ }
+ }
+
+ /* Filter out HV stems which have both their edges controlled by */
+ /* other, narrower HV stems */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ hv = IsUnitHV( &stem->unit,true );
+
+ if ( IsUnitHV( &stem->unit,true )) {
+ hasl = hasr = false;
+ for ( j=0; j<stem->chunk_cnt; ++j ) {
+ lpd = stem->chunks[j].l;
+ rpd = stem->chunks[j].r;
+ if ( lpd != NULL ) {
+ stem_cnt = ( stem->chunks[j].lnext ) ? lpd->nextcnt : lpd->prevcnt;
+ for ( k=0; k<stem_cnt; k++ ) {
+ tstem = ( stem->chunks[j].lnext ) ?
+ lpd->nextstems[k] : lpd->prevstems[k];
+ /* Used to test tstem->toobig <= stem->toobig, but got into troubles with */
+ /* a weird terminal stem preventing a ball terminal from being properly detected, */
+ /* because both the stems initially have toobig == 1. */
+ /* See the "f" from Heuristica-Italic */
+ if ( tstem != stem &&
+ !tstem->toobig && tstem->positioned >= stem->positioned &&
+ tstem->width < stem->width && hv == IsUnitHV( &tstem->unit,true )) {
+ hasl = true;
+ break;
+ }
+ }
+ }
+ if ( rpd != NULL ) {
+ stem_cnt = ( stem->chunks[j].rnext ) ? rpd->nextcnt : rpd->prevcnt;
+ for ( k=0; k<stem_cnt; k++ ) {
+ tstem = ( stem->chunks[j].rnext ) ?
+ rpd->nextstems[k] : rpd->prevstems[k];
+ if ( tstem != stem &&
+ !tstem->toobig && tstem->positioned >= stem->positioned &&
+ tstem->width < stem->width && hv == IsUnitHV( &tstem->unit,true )) {
+ hasr = true;
+ break;
+ }
+ }
+ }
+ if ( hasl && hasr ) {
+ stem->toobig = 2;
+ break;
+ }
+ }
+ }
+ }
+
+ gd->hbundle = calloc( 1,sizeof( struct stembundle ));
+ gd->hbundle->stemlist = calloc( gd->stemcnt,sizeof( struct stemdata *));
+ gd->hbundle->unit.x = 1; gd->hbundle->unit.y = 0;
+ gd->hbundle->l_to_r.x = 0; gd->hbundle->l_to_r.y = -1;
+
+ gd->vbundle = calloc( 1,sizeof( struct stembundle ));
+ gd->vbundle->stemlist = calloc( gd->stemcnt,sizeof( struct stemdata *));
+ gd->vbundle->unit.x = 0; gd->vbundle->unit.y = 1;
+ gd->vbundle->l_to_r.x = 1; gd->vbundle->l_to_r.y = 0;
+
+ if ( gd->has_slant && !gd->only_hv ) {
+ SplineCharFindBounds( gd->sc,&bounds );
+
+ gd->ibundle = calloc( 1,sizeof( struct stembundle ));
+ gd->ibundle->stemlist = calloc( gd->stemcnt,sizeof( struct stemdata *));
+ gd->ibundle->unit.x = gd->slant_unit.x;
+ gd->ibundle->unit.y = gd->slant_unit.y;
+ gd->ibundle->l_to_r.x = -gd->ibundle->unit.y;
+ gd->ibundle->l_to_r.y = gd->ibundle->unit.x;
+ }
+
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->toobig > maxtoobig )
+ continue;
+ hv = IsUnitHV( &stem->unit,true );
+
+ if ( hv == 1 ) {
+ gd->hbundle->stemlist[(gd->hbundle->cnt)++] = stem;
+ stem->bundle = gd->hbundle;
+ } else if ( hv == 2 ) {
+ gd->vbundle->stemlist[(gd->vbundle->cnt)++] = stem;
+ stem->bundle = gd->vbundle;
+ } else if ( gd->has_slant && !gd->only_hv &&
+ RealNear( stem->unit.x,gd->slant_unit.x ) &&
+ RealNear( stem->unit.y,gd->slant_unit.y )) {
+
+ /* Move base point coordinates to the baseline to simplify */
+ /* stem ordering and positioning relatively to each other */
+ stem->left.x -= (( stem->left.y - bounds.miny ) * stem->unit.x )/stem->unit.y;
+ stem->right.x -= (( stem->right.y - bounds.miny ) * stem->unit.x )/stem->unit.y;
+ dmove = ( stem->left.y - bounds.miny ) / stem->unit.y;
+ stem->left.y = stem->right.y = bounds.miny;
+ for ( j=0; j<stem->activecnt; j++ ) {
+ stem->active[j].start += dmove;
+ stem->active[j].end += dmove;
+ }
+
+ gd->ibundle->stemlist[(gd->ibundle->cnt)++] = stem;
+ stem->bundle = gd->ibundle;
+ stem->italic = true;
+ }
+ }
+ qsort( gd->hbundle->stemlist,gd->hbundle->cnt,sizeof( struct stemdata *),stem_cmp );
+ qsort( gd->vbundle->stemlist,gd->vbundle->cnt,sizeof( struct stemdata *),stem_cmp );
+ if ( gd->has_slant && !gd->only_hv )
+ qsort( gd->ibundle->stemlist,gd->ibundle->cnt,sizeof( struct stemdata *),stem_cmp );
+
+ if ( !needs_deps )
+return;
+ for ( i=0; i<gd->hbundle->cnt; i++ )
+ LookForMasterHVStem( gd->hbundle->stemlist[i],&gd->bd );
+ for ( i=0; i<gd->hbundle->cnt; i++ )
+ ClearUnneededDeps( gd->hbundle->stemlist[i] );
+ for ( i=0; i<gd->vbundle->cnt; i++ )
+ LookForMasterHVStem( gd->vbundle->stemlist[i],&gd->bd );
+ for ( i=0; i<gd->vbundle->cnt; i++ )
+ ClearUnneededDeps( gd->vbundle->stemlist[i] );
+}
+
+static void AddSerifOrBall( struct glyphdata *gd,
+ struct stemdata *master,struct stemdata *slave,int lbase,int is_ball ) {
+
+ struct dependent_serif *tserif;
+ struct pointdata *spd;
+ double width, min, max;
+ int i, j, scnt, next;
+
+ if ( lbase ) {
+ width = fabs(
+ ( slave->right.x - master->left.x ) * master->unit.y -
+ ( slave->right.y - master->left.y ) * master->unit.x );
+ max = width + slave->rmin + 2*dist_error_hv;
+ min = width + slave->rmax - 2*dist_error_hv;
+ } else {
+ width = fabs(
+ ( master->right.x - slave->left.x ) * master->unit.y -
+ ( master->right.y - slave->left.y ) * master->unit.x );
+ max = width - slave->lmax + 2*dist_error_hv;
+ min = width - slave->lmin - 2*dist_error_hv;
+ }
+
+ scnt = master->serif_cnt;
+ for ( i=0; i<scnt; i++ ) {
+ tserif = &master->serifs[i];
+ if ( tserif->stem == slave && tserif->lbase == lbase )
+ break;
+ else if ( tserif->width > min && tserif->width < max && tserif->lbase == lbase ) {
+ for ( j=0; j<slave->chunk_cnt; j++ ) {
+ spd = ( lbase ) ? slave->chunks[j].r : slave->chunks[j].l;
+ next = ( lbase ) ? slave->chunks[j].rnext : slave->chunks[j].lnext;
+ if ( spd != NULL && IsStemAssignedToPoint( spd,tserif->stem,next ) == -1 )
+ AddToStem( gd,tserif->stem,spd,NULL,next,false,false );
+ }
+ break;
+ }
+ }
+ if ( i<master->serif_cnt )
+return;
+
+ master->serifs = realloc(
+ master->serifs,( scnt+1 )*sizeof( struct dependent_serif ));
+ master->serifs[scnt].stem = slave;
+ master->serifs[scnt].width = width;
+ master->serifs[scnt].lbase = lbase;
+ master->serifs[scnt].is_ball = is_ball;
+ master->serif_cnt++;
+
+ /* Mark the dependent stem as related with a bundle, although it */
+ /* is not listed in that bundle itself */
+ slave->bundle = master->bundle;
+}
+
+static int IsBall( struct glyphdata *gd,
+ struct pointdata *pd,struct stemdata *master,int lbase ) {
+
+ double max, min, dot, coord;
+ BasePoint *lbp, *rbp, *dir;
+ Spline *test;
+ struct pointdata *nbase, *pbase, *tpd;
+ struct stem_chunk *chunk;
+ int i, is_x, peak_passed;
+
+ if ( pd == NULL || ( pd->x_extr != 1 && pd->y_extr != 1 ))
+return( false );
+
+ is_x = ( IsUnitHV( &master->unit,true ) == 1 );
+ lbp = ( lbase ) ? &master->left : &pd->base;
+ rbp = ( lbase ) ? &pd->base : &master->right;
+ min = ( is_x ) ? rbp->y : lbp->x;
+ max = ( is_x ) ? lbp->y : rbp->x;
+
+ peak_passed = false;
+ nbase = pbase = NULL;
+ test = pd->sp->next;
+ dir = &pd->nextunit;
+
+ if ( test != NULL ) do {
+ tpd = &gd->points[test->to->ptindex];
+ if ( IsStemAssignedToPoint( tpd,master,true ) != -1 ) {
+ nbase = tpd;
+ break;
+ }
+ coord = ( is_x ) ? tpd->base.y : tpd->base.x;
+ dot = tpd->nextunit.x * dir->x + tpd->nextunit.y * dir->y;
+ if ( dot == 0 && !peak_passed ) {
+ dir = &tpd->nextunit;
+ dot = 1.0;
+ peak_passed = true;
+ }
+ test = test->to->next;
+ } while ( test != NULL && test != pd->sp->next && dot > 0 &&
+ coord >= min && coord <= max );
+
+ peak_passed = false;
+ test = pd->sp->prev;
+ dir = &pd->prevunit;
+ if ( test != NULL ) do {
+ tpd = &gd->points[test->from->ptindex];
+ if ( IsStemAssignedToPoint( tpd,master,false ) != -1 ) {
+ pbase = tpd;
+ break;
+ }
+ coord = ( is_x ) ? tpd->base.y : tpd->base.x;
+ dot = tpd->prevunit.x * dir->x + tpd->prevunit.y * dir->y;
+ if ( dot == 0 && !peak_passed ) {
+ dir = &tpd->prevunit;
+ dot = 1.0;
+ peak_passed = true;
+ }
+ test = test->from->prev;
+ } while ( test != NULL && test != pd->sp->prev && dot > 0 &&
+ coord >= min && coord <= max );
+
+ if ( nbase != NULL && pbase != NULL ) {
+ for ( i=0; i<master->chunk_cnt; i++ ) {
+ chunk = &master->chunks[i];
+ if (( chunk->l == nbase && chunk->r == pbase ) ||
+ ( chunk->l == pbase && chunk->r == nbase ))
+return( true );
+ }
+ }
+return( false );
+}
+
+static void GetSerifData( struct glyphdata *gd,struct stemdata *stem ) {
+ int i, j, is_x, stem_cnt;
+ int snext, enext, eidx, allow_s, allow_e, s_ball, e_ball;
+ struct stem_chunk *chunk;
+ struct stemdata *tstem, *smaster=NULL, *emaster=NULL;
+ struct pointdata *spd, *epd;
+ struct stembundle *bundle;
+ double start, end, tstart, tend, smend, emstart;
+
+ is_x = ( IsUnitHV( &stem->unit,true ) == 1 );
+ bundle = ( is_x ) ? gd->hbundle : gd->vbundle;
+ start = ( is_x ) ? stem->right.y : stem->left.x;
+ end = ( is_x ) ? stem->left.y : stem->right.x;
+
+ allow_s = allow_e = true;
+ s_ball = e_ball = 0;
+ for ( i=0; i<stem->chunk_cnt && ( allow_s == true || allow_e == true ); i++ ) {
+ chunk = &stem->chunks[i];
+ spd = ( is_x ) ? chunk->r : chunk->l;
+ snext = ( is_x ) ? chunk->rnext : chunk->lnext;
+ epd = ( is_x ) ? chunk->l : chunk->r;
+ enext = ( is_x ) ? chunk->lnext : chunk->rnext;
+
+ if ( spd != NULL && allow_e ) {
+ stem_cnt = ( snext ) ? spd->nextcnt : spd->prevcnt;
+ for ( j=0; j<stem_cnt; j++ ) {
+ tstem = ( snext ) ? spd->nextstems[j] : spd->prevstems[j];
+ if (RealNear( tstem->unit.x,stem->unit.x ) && RealNear( tstem->unit.y,stem->unit.y ) &&
+ !tstem->toobig ) {
+ chunk->is_ball = e_ball = IsBall( gd,epd,tstem,!is_x );
+ if ( e_ball ) {
+ chunk->ball_m = tstem;
+ emaster = tstem;
+ emstart = ( is_x ) ? tstem->right.y : tstem->left.x;
+ }
+ allow_s = false;
+ }
+ }
+
+ }
+ if ( epd != NULL && allow_s ) {
+ stem_cnt = ( enext ) ? epd->nextcnt : epd->prevcnt;
+ for ( j=0; j<stem_cnt; j++ ) {
+ tstem = ( enext ) ? epd->nextstems[j] : epd->prevstems[j];
+ if (tstem->unit.x == stem->unit.x && tstem->unit.y == stem->unit.y &&
+ !tstem->toobig ) {
+ chunk->is_ball = s_ball = IsBall( gd,spd,tstem,is_x );
+ if ( s_ball ) {
+ chunk->ball_m = tstem;
+ smaster = tstem;
+ smend = ( is_x ) ? tstem->left.y : tstem->right.x;
+ }
+ allow_e = false;
+ }
+ }
+
+ }
+ }
+
+ for ( i=0; i<bundle->cnt; i++ ) {
+ tstem = bundle->stemlist[i];
+ if (tstem->unit.x != stem->unit.x || tstem->unit.y != stem->unit.y ||
+ tstem->toobig || tstem->width >= stem->width )
+ continue;
+
+ tstart = ( is_x ) ? tstem->right.y : tstem->left.x;
+ tend = ( is_x ) ? tstem->left.y : tstem->right.x;
+
+ if ( tstart >= start && tend <= end ) {
+ if ( allow_s && tstart > start ) {
+ for ( j=0; j<tstem->chunk_cnt && smaster != tstem; j++ ) {
+ if ( is_x ) {
+ spd = tstem->chunks[j].l;
+ snext = tstem->chunks[j].lnext;
+ eidx = tstem->chunks[j].l_e_idx;
+ } else {
+ spd = tstem->chunks[j].r;
+ snext = tstem->chunks[j].rnext;
+ eidx = tstem->chunks[j].r_e_idx;
+ }
+ if ( spd != NULL && ConnectsAcrossToStem( gd,spd,snext,stem,is_x,eidx ) &&
+ ( smaster == NULL || smend - start > tend - start )) {
+ smaster = tstem;
+ smend = tend;
+ }
+ }
+ }
+ if ( allow_e && tend < end ) {
+ for ( j=0; j<tstem->chunk_cnt && emaster != tstem; j++ ) {
+ if ( is_x ) {
+ epd = tstem->chunks[j].r;
+ enext = tstem->chunks[j].rnext;
+ eidx = tstem->chunks[j].r_e_idx;
+ } else {
+ epd = tstem->chunks[j].l;
+ enext = tstem->chunks[j].lnext;
+ eidx = tstem->chunks[j].l_e_idx;
+ }
+ if ( epd != NULL && ConnectsAcrossToStem( gd,epd,enext,stem,!is_x,eidx ) &&
+ ( emaster == NULL || end - emstart > end - tstart )) {
+ emaster = tstem;
+ emstart = tstart;
+ }
+ }
+ }
+ }
+ }
+ if ( smaster != NULL )
+ AddSerifOrBall( gd,smaster,stem,is_x,s_ball );
+ if ( emaster != NULL )
+ AddSerifOrBall( gd,emaster,stem,!is_x,e_ball );
+}
+
+static double ActiveOverlap( struct stemdata *stem1,struct stemdata *stem2 ) {
+ int is_x, i, j = 0;
+ double base1, base2, s1, e1, s2, e2, s, e, len = 0;
+
+ is_x = ( IsUnitHV( &stem1->unit,true ) == 2 );
+ base1 = ( &stem1->left.x )[is_x];
+ base2 = ( &stem2->left.x )[is_x];
+
+ for ( i=0; i<stem1->activecnt; i++ ) {
+ s1 = base1 + stem1->active[i].start;
+ e1 = base1 + stem1->active[i].end;
+ for ( ; j<stem2->activecnt; j++ ) {
+ s2 = base2 + stem2->active[j].start;
+ e2 = base2 + stem2->active[j].end;
+ if ( s2 > e1 )
+ break;
+
+ if ( e2 < s1 )
+ continue;
+
+ s = s2 < s1 ? s1 : s2;
+ e = e2 > e1 ? e1 : e2;
+ if ( e<s )
+ continue; /* Shouldn't happen */
+ len += e - s;
+ }
+ }
+return( len );
+}
+
+static int StemPairsSimilar( struct stemdata *s1, struct stemdata *s2,
+ struct stemdata *ts1, struct stemdata *ts2 ) {
+
+ int normal, reversed, ret = 0;
+ double olen1, olen2;
+
+ /* Stem widths in the second pair should be nearly the same as */
+ /* stem widths in the first pair */
+ normal = ( ts1->width >= s1->width - dist_error_hv &&
+ ts1->width <= s1->width + dist_error_hv &&
+ ts2->width >= s2->width - dist_error_hv &&
+ ts2->width <= s2->width + dist_error_hv );
+ reversed = (ts1->width >= s2->width - dist_error_hv &&
+ ts1->width <= s2->width + dist_error_hv &&
+ ts2->width >= s1->width - dist_error_hv &&
+ ts2->width <= s1->width + dist_error_hv );
+
+ if ( !normal && !reversed )
+return( false );
+
+ if ( normal ) {
+ olen1 = ActiveOverlap( s1, ts1 );
+ olen2 = ActiveOverlap( s2, ts2 );
+ ret = olen1 > s1->clen/3 && olen1 > ts1->clen/3 &&
+ olen2 > s2->clen/3 && olen2 > ts2->clen/3;
+ } else if ( reversed ) {
+ olen1 = ActiveOverlap( s1, ts2 );
+ olen2 = ActiveOverlap( s2, ts1 );
+ ret = olen1 > s1->clen/3 && olen1 > ts2->clen/3 &&
+ olen2 > s2->clen/3 && olen2 > ts1->clen/3;
+ }
+return( ret );
+}
+
+static void FindCounterGroups( struct glyphdata *gd,int is_v ) {
+ struct stembundle *bundle = is_v ? gd->vbundle : gd->hbundle;
+ struct stemdata *curm, *prevm, *cur, *prev;
+ int i, j;
+ double mdist, dist;
+
+ prevm = NULL;
+ for ( i=0; i<bundle->cnt; i++ ) {
+ curm = prev = bundle->stemlist[i];
+ if ( curm->master != NULL )
+ continue;
+ if ( prevm == NULL || curm->prev_c_m != NULL ) {
+ prevm = curm;
+ continue;
+ }
+ mdist = is_v ? curm->left.x - prevm->right.x : curm->right.y - prevm->left.y;
+ for ( j=i+1; j<bundle->cnt; j++ ) {
+ cur = bundle->stemlist[j];
+ if ( cur->master != NULL )
+ continue;
+ if ( cur->prev_c_m != NULL ) {
+ prev = cur;
+ continue;
+ }
+
+ dist = is_v ? cur->left.x - prev->right.x : cur->right.y - prev->left.y;
+ if ( mdist > dist - dist_error_hv && mdist < dist + dist_error_hv &&
+ StemPairsSimilar( prevm,curm,prev,cur )) {
+ prev->next_c_m = prevm;
+ cur->prev_c_m = curm;
+ }
+ prev = cur;
+ }
+ prevm = curm;
+ }
+}
+
+/* Normally we use the DetectDiagonalStems flag (set via the Preferences dialog) to determine */
+/* if diagonal stems should be generated. However, sometimes it makes sense to reduce the */
+/* processing time, deliberately turning the diagonal stem detection off: in particular we */
+/* don't need any diagonal stems if we only want to assign points to some preexisting HV */
+/* hints. For thisreason the only_hv argument still can be passed to this function. */
+struct glyphdata *GlyphDataInit( SplineChar *sc,int layer,double em_size,int only_hv ) {
+ struct glyphdata *gd;
+ struct pointdata *pd;
+ int i;
+ SplineSet *ss;
+ SplinePoint *sp;
+ Monotonic *m;
+ int cnt;
+ double iangle;
+
+ if ( layer<0 || layer>=sc->layer_cnt )
+ return( NULL );
+
+ /* We only hint one layer at a time */
+ /* We shan't try to hint references yet */
+ if ( sc->layers[layer].splines==NULL )
+return( NULL );
+
+ gd = calloc( 1,sizeof( struct glyphdata ));
+ gd->only_hv = only_hv;
+ gd->layer = layer;
+
+ gd->sc = sc;
+ gd->sf = sc->parent;
+ gd->emsize = em_size;
+ gd->order2 = ( sc->parent != NULL ) ? sc->parent->layers[layer].order2 : false;
+ gd->fuzz = GetBlueFuzz( sc->parent );
+
+ dist_error_hv = .0035*gd->emsize;
+ dist_error_diag = .0065*gd->emsize;
+ dist_error_curve = .022*gd->emsize;
+
+ if ( sc->parent != NULL && sc->parent->italicangle ) {
+ iangle = ( 90 + sc->parent->italicangle );
+ gd->has_slant = true;
+ gd->slant_unit.x = cos( iangle * ( PI/180 ));
+ gd->slant_unit.y = sin( iangle * ( PI/180 ));
+ } else {
+ gd->has_slant = false;
+ gd->slant_unit.x = 0; gd->slant_unit.y = 1;
+ }
+
+ /* SSToMContours can clean up the splinesets (remove 0 length splines) */
+ /* so it must be called BEFORE everything else (even though logically */
+ /* that doesn't make much sense). Otherwise we might have a pointer */
+ /* to something since freed */
+ gd->ms = SSsToMContours(sc->layers[layer].splines,over_remove); /* second argument is meaningless here */
+
+ gd->realcnt = gd->pcnt = SCNumberPoints( sc, layer );
+ for ( i=0, ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next, ++i );
+ gd->ccnt = i;
+ gd->contourends = malloc((i+1)*sizeof(int));
+ for ( i=0, ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next, ++i ) {
+ SplinePoint *last;
+ if ( ss->first->prev!=NULL )
+ last = ss->first->prev->from;
+ else
+ last = ss->last;
+ if ( last->ttfindex==0xffff )
+ gd->contourends[i] = last->nextcpindex;
+ else
+ gd->contourends[i] = last->ttfindex;
+ }
+ gd->contourends[i] = -1;
+
+ /* Create temporary point numbers for the implied points. We need this */
+ /* for metafont if nothing else */
+ for ( ss= sc->layers[layer].splines; ss!=NULL; ss = ss->next ) {
+ for ( sp = ss->first; ; ) {
+ if ( sp->ttfindex < gd->realcnt )
+ sp->ptindex = sp->ttfindex;
+ else if ( sp->ttfindex == 0xffff )
+ sp->ptindex = gd->pcnt++;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+ gd->norefpcnt = gd->pcnt;
+ /* And for 0xfffe points such as those used in glyphs with order2 glyphs */
+ /* with references. */
+ for ( ss = sc->layers[layer].splines; ss!=NULL; ss = ss->next ) {
+ for ( sp = ss->first; ; ) {
+ if ( sp->ttfindex == 0xfffe )
+ sp->ptindex = gd->pcnt++;
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+ gd->pspace = malloc( gd->pcnt*sizeof( struct pointdata *));
+
+ /*gd->ms = SSsToMContours(sc->layers[layer].splines,over_remove);*/ /* second argument is meaningless here */
+ for ( m=gd->ms, cnt=0; m!=NULL; m=m->linked, ++cnt );
+ gd->space = malloc((cnt+2)*sizeof(Monotonic*));
+ gd->mcnt = cnt;
+
+ gd->points = calloc(gd->pcnt,sizeof(struct pointdata));
+ for ( ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next ) if ( ss->first->prev!=NULL ) {
+ for ( sp=ss->first; ; ) {
+ PointInit( gd,sp,ss );
+ if ( sp->next==NULL )
+ break;
+ sp = sp->next->to;
+ if ( sp==ss->first )
+ break;
+ }
+ }
+
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd = &gd->points[i];
+ if ( !pd->nextzero )
+ pd->next_e_cnt = FindMatchingEdge(gd,pd,true,pd->nextedges);
+ if ( !pd->prevzero )
+ pd->prev_e_cnt = FindMatchingEdge(gd,pd,false,pd->prevedges);
+ if (( pd->symetrical_h || pd->symetrical_v ) && ( pd->x_corner || pd->y_corner))
+ FindMatchingEdge(gd,pd,2,&pd->bothedge);
+ }
+
+return( gd );
+}
+
+struct glyphdata *GlyphDataBuild( SplineChar *sc,int layer, BlueData *bd,int use_existing ) {
+ struct glyphdata *gd;
+ struct pointdata *pd;
+ struct stemdata *stem;
+ BasePoint dir;
+ struct stem_chunk *chunk;
+ int i, j, only_hv, startcnt, stemcnt, ecnt, hv, has_h, has_v;
+ double em_size;
+ DBounds bounds;
+
+ only_hv = ( !detect_diagonal_stems && ( !use_existing || sc->dstem == NULL ));
+ em_size = ( sc->parent != NULL ) ? sc->parent->ascent + sc->parent->descent : 1000;
+
+ gd = GlyphDataInit( sc,layer,em_size,only_hv );
+ if ( gd == NULL )
+return( gd );
+ /* Get the alignment zones */
+ if ( bd == NULL )
+ QuickBlues( gd->sf,gd->layer,&gd->bd );
+ else
+ memcpy( &gd->bd,bd,sizeof( BlueData ));
+
+ /* There will never be more lines than there are points (counting next/prev as separate) */
+ gd->lines = malloc( 2*gd->pcnt*sizeof( struct linedata ));
+ gd->linecnt = 0;
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd = &gd->points[i];
+ if (( !gd->only_hv || pd->next_hor || pd->next_ver ) && pd->nextline==NULL ) {
+ pd->nextline = BuildLine(gd,pd,true);
+ if ( pd->colinear )
+ pd->prevline = pd->nextline;
+ }
+ if (( !gd->only_hv || pd->prev_hor || pd->prev_ver ) && pd->prevline==NULL ) {
+ pd->prevline = BuildLine(gd,pd,false);
+ if ( pd->colinear && pd->nextline == NULL )
+ pd->nextline = pd->prevline;
+ }
+ }
+
+ /* There will never be more stems than there are points (counting next/prev as separate) */
+ gd->stems = calloc( 2*gd->pcnt,sizeof( struct stemdata ));
+ gd->stemcnt = 0; /* None used so far */
+
+ if ( use_existing ) {
+ SplineCharFindBounds( gd->sc,&bounds );
+ if ( sc->vstem != NULL )
+ _StemInfoToStemData( gd,sc->vstem,&bounds,true,&startcnt );
+ if ( sc->hstem != NULL )
+ _StemInfoToStemData( gd,sc->hstem,&bounds,false,&startcnt );
+ if ( sc->dstem != NULL )
+ _DStemInfoToStemData( gd,sc->dstem,&startcnt );
+ }
+
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp!=NULL ) {
+ pd = &gd->points[i];
+ if ( pd->prev_e_cnt > 0 ) {
+ ecnt = BuildStem( gd,pd,false,false,use_existing,0 );
+ if ( ecnt == 0 && pd->prev_e_cnt > 1 )
+ BuildStem( gd,pd,false,false,false,1 );
+ }
+ if ( pd->next_e_cnt > 0 ) {
+ ecnt = BuildStem( gd,pd,true,false,use_existing,0 );
+ if ( ecnt == 0 && pd->next_e_cnt > 1 )
+ BuildStem( gd,pd,true,false,false,1 );
+ }
+ if ( pd->bothedge!=NULL ) {
+ DiagonalCornerStem( gd,pd,false );
+ }
+
+ /* Snap corner extrema to preexisting hints if they have not */
+ /* already been. This is currently done only when preparing */
+ /* glyph data for the autoinstructor */
+ if ( use_existing && ( pd->x_corner || pd->y_corner )) {
+ has_h = has_v = false;
+ for ( j=0; j<pd->prevcnt && (( pd->x_corner && !has_v ) || ( pd->y_corner && !has_h )); j++ ) {
+ hv = IsUnitHV( &pd->prevstems[j]->unit,true );
+ if ( hv == 1 ) has_h = true;
+ else if ( hv == 2 ) has_v = true;
+ }
+ for ( j=0; j<pd->nextcnt && (( pd->x_corner && !has_v ) || ( pd->y_corner && !has_h )); j++ ) {
+ hv = IsUnitHV( &pd->nextstems[j]->unit,true );
+ if ( hv == 1 ) has_h = true;
+ else if ( hv == 2 ) has_v = true;
+ }
+ if ( pd->x_corner && !has_v ) {
+ dir.x = 0; dir.y = 1;
+ HalfStemNoOpposite( gd,pd,NULL,&dir,2 );
+ } else if ( pd->y_corner && !has_h ) {
+ dir.x = 1; dir.y = 0;
+ HalfStemNoOpposite( gd,pd,NULL,&dir,2 );
+ }
+ }
+ }
+ AssignLinePointsToStems( gd );
+
+ /* Normalize stems before calculating active zones (as otherwise */
+ /* we don't know exact positions of stem edges */
+ for ( i=0; i<gd->stemcnt; ++i )
+ NormalizeStem( gd,&gd->stems[i] );
+ GDNormalizeStubs( gd );
+
+ /* Figure out active zones at the first order (as they are needed to */
+ /* determine which stems are undesired and they don't depend from */
+ /* the "potential" state of left/right points in chunks */
+ gd->lspace = malloc(gd->pcnt*sizeof(struct segment));
+ gd->rspace = malloc(gd->pcnt*sizeof(struct segment));
+ gd->bothspace = malloc(3*gd->pcnt*sizeof(struct segment));
+ gd->activespace = malloc(3*gd->pcnt*sizeof(struct segment));
+#if GLYPH_DATA_DEBUG
+ fprintf( stderr,"Going to calculate stem active zones for %s\n",gd->sc->name );
+#endif
+ for ( i=0; i<gd->stemcnt; ++i )
+ FigureStemActive( gd,&gd->stems[i] );
+
+ /* Check this before resolving stem conflicts, as otherwise we can */
+ /* occasionally prefer a stem which should be excluded from the list */
+ /* for some other reasons */
+ GDFindUnlikelyStems( gd );
+
+ /* we were cautious about assigning points to stems, go back now and see */
+ /* if there are any low-quality matches which remain unassigned, and if */
+ /* so then assign them to the stem they almost fit on. */
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ for ( j=0; j<stem->chunk_cnt; ++j ) {
+ chunk = &stem->chunks[j];
+ if ( chunk->l!=NULL && chunk->lpotential ) {
+ stemcnt = ( chunk->lnext ) ? chunk->l->nextcnt : chunk->l->prevcnt;
+ if ( stemcnt == 1 ) chunk->lpotential = false;
+ }
+ if ( chunk->r!=NULL && chunk->rpotential ) {
+ stemcnt = ( chunk->rnext ) ? chunk->r->nextcnt : chunk->r->prevcnt;
+ if ( stemcnt == 1 ) chunk->rpotential = false;
+ }
+ }
+ }
+ /* If there are multiple stems, find the one which is closest to this point */
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp != NULL ) {
+ pd = &gd->points[i];
+ if ( pd->prevcnt > 1 ) CheckPotential( gd,pd,false );
+ if ( pd->nextcnt > 1 ) CheckPotential( gd,pd,true );
+ }
+
+ if ( hint_bounding_boxes )
+ CheckForBoundingBoxHints( gd );
+ CheckForGhostHints( gd );
+ if ( use_existing )
+ MarkDStemCorners( gd );
+
+ GDBundleStems( gd,0,use_existing );
+ if ( use_existing ) {
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ stem = &gd->stems[i];
+ if ( stem->toobig == 1 && IsUnitHV( &stem->unit,true ))
+ GetSerifData( gd,stem );
+ }
+ FindCounterGroups( gd,true );
+ }
+
+#if GLYPH_DATA_DEBUG
+ DumpGlyphData( gd );
+#endif
+ free(gd->lspace); gd->lspace = NULL;
+ free(gd->rspace); gd->rspace = NULL;
+ free(gd->bothspace); gd->bothspace = NULL;
+ free(gd->activespace); gd->activespace = NULL;
+
+return( gd );
+}
+
+void GlyphDataFree(struct glyphdata *gd) {
+ int i;
+ if ( gd == NULL )
+return;
+
+ FreeMonotonics( gd->ms ); gd->ms = NULL;
+ free( gd->space ); gd->space = NULL;
+ free( gd->sspace ); gd->sspace = NULL;
+ free( gd->stspace ); gd->stspace = NULL;
+ free( gd->pspace ); gd->pspace = NULL;
+
+ /* Clean up temporary point numbers */
+ for ( i=0; i<gd->pcnt; ++i ) if ( gd->points[i].sp != NULL )
+ gd->points[i].sp->ptindex = 0;
+
+ if ( gd->hbundle != NULL ) {
+ free( gd->hbundle->stemlist );
+ free( gd->hbundle );
+ }
+ if ( gd->vbundle != NULL ) {
+ free( gd->vbundle->stemlist );
+ free( gd->vbundle );
+ }
+ if ( gd->ibundle != NULL ) {
+ free( gd->ibundle->stemlist );
+ free( gd->ibundle );
+ }
+
+ for ( i=0; i<gd->linecnt; ++i )
+ free( gd->lines[i].points );
+ for ( i=0; i<gd->stemcnt; ++i ) {
+ free( gd->stems[i].chunks );
+ free( gd->stems[i].dependent );
+ free( gd->stems[i].serifs );
+ free( gd->stems[i].active );
+ }
+ for ( i=0; i<gd->pcnt; ++i ) {
+ free( gd->points[i].nextstems );
+ free( gd->points[i].next_is_l );
+ free( gd->points[i].prevstems );
+ free( gd->points[i].prev_is_l );
+ }
+ free( gd->lines );
+ free( gd->stems );
+ free( gd->contourends );
+ free( gd->points );
+ free( gd );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.h b/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.h
new file mode 100644
index 0000000000..8e47572411
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/stemdb.h
@@ -0,0 +1,214 @@
+/* Copyright (C) 2005-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _STEMDB_H_
+# define _STEMDB_H_
+
+# include "fontforge.h"
+
+struct segment {
+ double start, end, sbase, ebase;
+ int curved, scurved, ecurved;
+};
+
+typedef struct glyphdata {
+ SplineFont *sf;
+ BlueData bd;
+ int fuzz;
+ SplineChar *sc;
+ int layer;
+ int emsize;
+ int order2;
+ int has_slant;
+ BasePoint slant_unit;
+ int ccnt;
+ int *contourends;
+ int realcnt; /* Includes control points, excludes implied points */
+ int norefpcnt; /* Does not include points in glyphs with references */
+ int pcnt; /* Includes control points, includes implied points */
+ struct pointdata *points; /* Entries corresponding to control points are empty */
+ int stemcnt;
+ struct stemdata *stems;
+ int linecnt;
+ struct linedata *lines;
+ struct stembundle *hbundle;
+ struct stembundle *vbundle;
+ struct stembundle *ibundle;
+
+ /* Temporary values, quickly freed */
+ int mcnt;
+ struct monotonic *ms;
+ struct monotonic **space;
+ int scnt;
+ Spline **sspace;
+ struct st *stspace;
+ DBounds size;
+ struct pointdata **pspace;
+ struct segment *lspace, *rspace, *bothspace, *activespace;
+
+ int only_hv;
+} GlyphData;
+
+typedef struct pointdata {
+ SplinePoint *sp;
+ SplineSet *ss;
+ int ttfindex; /* normally same as sp->ttfindex, but needed for offcurve points */
+ BasePoint base; /* normally same as sp->me, but needed for offcurve points */
+ BasePoint nextunit, prevunit; /* unit vectors pointing in the next/prev directions */
+ struct linedata *nextline, *prevline; /* any other points lying on approximately the same line */
+ Spline *nextedges[2], *prevedges[2]; /* There should always be a matching spline, which may end up as part of a stem, and may not */
+ Spline *bothedge;
+ double next_e_t[2], prev_e_t[2]; /* Location on other edge where our normal hits it */
+ double both_e_t;
+ int next_e_cnt, prev_e_cnt;
+ double next_dist[2], prev_dist[2]; /* Distance from the point to the matching edge */
+ struct stemdata **nextstems, **prevstems;
+ int *next_is_l, *prev_is_l;
+ int nextcnt, prevcnt;
+ double nextlen, prevlen;
+ int value; /* Temporary value, used to compare points assigned to the same edge and determine which one can be used as a reference point*/
+ unsigned int nextlinear: 1;
+ unsigned int nextzero: 1;
+ unsigned int prevlinear: 1;
+ unsigned int prevzero: 1;
+ unsigned int colinear: 1;
+ unsigned int symetrical_h: 1; /* Are next & prev symetrical? */
+ unsigned int symetrical_v: 1; /* Are next & prev symetrical? */
+ unsigned int next_hor: 1;
+ unsigned int next_ver: 1;
+ unsigned int prev_hor: 1;
+ unsigned int prev_ver: 1;
+ unsigned int ticked: 1;
+ uint8 touched, affected;
+ uint8 x_extr, y_extr;
+ uint8 x_corner, y_corner;
+ BasePoint newpos;
+ BasePoint newnext, newprev;
+ BasePoint posdir; /* If point has been positioned in 1 direction, this is that direction */
+ double projection; /* temporary value */
+} PointData;
+
+typedef struct linedata {
+ BasePoint unit;
+ BasePoint online;
+ uint8 is_left;
+ int pcnt;
+ double length;
+ struct pointdata **points;
+} LineData;
+
+struct stem_chunk {
+ struct stemdata *parent;
+ struct pointdata *l;
+ struct pointdata *r;
+ uint8 lpotential, rpotential;
+ uint8 lnext, rnext; /* are we using the next/prev side of the left/right points */
+ uint8 ltick, rtick;
+ uint8 stub;
+ uint8 stemcheat; /* It's not a real stem, but it's something we'd like PostScript to hint for us */
+ uint8 is_ball; /* Specifies if this chunk marks the opposite sides of a ball terminal (useful for TTF instructions) */
+ struct stemdata *ball_m;
+ int l_e_idx, r_e_idx; /* Which of the opposed edges assigned to the left and right points corresponds to this chunk */
+};
+
+struct dependent_stem {
+ struct stemdata *stem;
+ uint8 lbase;
+ char dep_type; /* can be 'a' (align), 'i' (interpolate), 'm' (move) or 's' (serif) */
+};
+
+struct dependent_serif {
+ struct stemdata *stem;
+ double width; /* The distance from an edge of the main stem to the opposite edge of the serif stem */
+ uint8 lbase;
+ uint8 is_ball;
+};
+
+typedef struct stemdata {
+ BasePoint unit; /* Unit vector pointing in direction of stem */
+ BasePoint l_to_r; /* Unit vector pointing from left to right (across stem) */
+ BasePoint left; /* a point on one side of the stem (not necissarily left, even for vertical stems) */
+ BasePoint right; /* and one on the other */
+ BasePoint newunit; /* Unit vector after repositioning (e. g. in Metafont routines) */
+ BasePoint newleft, newright;/* Left and right edges after repositioning */
+ int leftidx, rightidx; /* TTF indices of the left and right key points */
+ struct pointdata *keypts[4];/* Uppest and lowest points on left and right edges. Used for positioning diagonal stems */
+ double lmin, lmax, rmin, rmax;
+ double width;
+ int chunk_cnt; /* number of separate point-pairs on this stem */
+ struct stem_chunk *chunks;
+ int activecnt;
+ struct segment *active;
+ uint8 toobig; /* Stem is fatter than tall, unlikely to be a real stem */
+ uint8 positioned;
+ uint8 ticked;
+ uint8 ghost;
+ uint8 bbox;
+ uint8 ldone, rdone;
+ uint8 italic;
+ int blue; /* Blue zone a ghost hint is attached to */
+ double len, clen; /* Length of linear segments. clen adds "length" of curved bits */
+ struct stembundle *bundle;
+ int lpcnt, rpcnt; /* Count of points assigned to left and right edges of this stem */
+ struct linedata *leftline, *rightline;
+ struct stemdata *master, *next_c_m, *prev_c_m;
+ int confl_cnt;
+ int dep_cnt;
+ int serif_cnt;
+ struct dependent_stem *dependent; /* Lists other stems dependent from the given stem */
+ struct dependent_serif *serifs; /* Lists serifs and other elements protruding from the base stem */
+} StemData;
+
+typedef struct vchunk {
+ struct stem_chunk *chunk;
+ double dist;
+ int parallel;
+ int value;
+} VChunk;
+
+struct stembounds {
+ struct stembounds *next;
+ struct stemdata *stem;
+ double tstart, tend;
+ uint8 isr;
+};
+
+typedef struct stembundle {
+ BasePoint unit; /* All these stems are parallel, pointing in unit direction */
+ BasePoint l_to_r; /* Axis along which these stems are ordered (normal to unit) */
+ BasePoint bp; /* Base point for measuring by l_to_r (stem->lpos,rpos) */
+ int cnt; /* Number of stems in the bundle */
+ struct stemdata **stemlist;
+} StemBundle;
+
+extern struct glyphdata *GlyphDataBuild(SplineChar *sc, int layer, BlueData *bd, int use_existing);
+extern struct glyphdata *GlyphDataInit(SplineChar *sc, int layer, double em_size, int only_hv);
+extern struct glyphdata *StemInfoToStemData( struct glyphdata *gd,StemInfo *si,int is_v );
+extern struct glyphdata *DStemInfoToStemData( struct glyphdata *gd,DStemInfo *dsi );
+extern int IsStemAssignedToPoint( struct pointdata *pd,struct stemdata *stem,int is_next );
+extern void GlyphDataFree(struct glyphdata *gd);
+
+#endif /* _STEMDB_H_ */
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tables.h b/dviware/dvisvgm/libs/ff-woff/fontforge/tables.h
new file mode 100644
index 0000000000..4933835e6d
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tables.h
@@ -0,0 +1,4 @@
+/* Declarations for data tables */
+
+extern const int amspua[], cns14pua[];
+extern const char (*SaveTablesPref[]);
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp b/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp
new file mode 100644
index 0000000000..a3ef480662
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tmpfile2.cpp
@@ -0,0 +1,75 @@
+/* This file is part of ff-woff, a reduced version of the FontForge library.
+* It provides the function tmpfile2() with the functionality of tmpfile() but
+* works on POSIX and Windows systems.
+* License: Revised BSD license used by FontForge
+* https://github.com/fontforge/fontforge/blob/master/LICENSE
+* (C) 2017-2019 Martin Gieseking <martin.gieseking@uos.de> */
+
+#include <cstdio>
+#include <cstdlib>
+#include <exception>
+#include <iostream>
+#include <string>
+
+#if _WIN32
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <windows.h>
+#ifdef _MSC_VER
+#include <io.h>
+#endif
+#endif
+
+using namespace std;
+
+class TmpFileException : public exception {
+ public:
+ TmpFileException (const char *msg) : _message(msg) {}
+ const char* what () const noexcept override {return _message.c_str();}
+
+ private:
+ string _message;
+};
+
+
+static inline void tmpfile_error (const char *msg) {
+#if defined(_MSC_VER) || defined(__MINGW32__)
+ // Visual C++ and MinGW support exception handling
+ // between extern "C" and C++ functions.
+ throw TmpFileException(msg);
+#else
+ cerr << msg << endl;
+ exit(EXIT_FAILURE);
+#endif
+}
+
+
+/* Creates a temporary binary file in the system's temp folder and returns
+* its file pointer. The file is automatically removed when closing it.
+* If the temp file can't be created for some reason, the function calls
+* exit() or throws a TmpFileException (depending on OS and compiler). */
+extern "C" FILE* tmpfile2 () {
+#ifndef _WIN32
+ if (FILE *fp = std::tmpfile())
+ return fp;
+#else
+ char tmpdir[MAX_PATH+1];
+ DWORD len = GetTempPath(MAX_PATH+1, tmpdir);
+ if (len > 0) {
+ if (len >= MAX_PATH-14)
+ tmpfile_error("path to temp folder too long");
+ char fname[MAX_PATH];
+ if (GetTempFileName(tmpdir, "tmp", 0, fname)) {
+ int fd = _open(fname, _O_CREAT | _O_TEMPORARY | _O_RDWR | _O_BINARY, _S_IREAD | _S_IWRITE);
+ if (fd >= 0) {
+ if (FILE *fp = _fdopen(fd, "w+b"))
+ return fp;
+ int saved_errno = errno;
+ _close(fd);
+ errno = saved_errno;
+ }
+ }
+ }
+#endif
+ tmpfile_error("failed to create temporary file");
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tottf.c b/dviware/dvisvgm/libs/ff-woff/fontforge/tottf.c
new file mode 100644
index 0000000000..57c61c0cc2
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tottf.c
@@ -0,0 +1,6757 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+#include <time.h>
+#include <utype.h>
+
+#ifdef __CygWin
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
+#endif
+
+#include "ttf.h"
+
+char *TTFFoundry=NULL;
+
+/* This file produces a ttf file given a splinefont. */
+
+/* ************************************************************************** */
+
+/* Required tables:
+ cmap encoding
+ head header data
+ hhea horizontal metrics header data
+ hmtx horizontal metrics (widths, lsidebearing)
+ maxp various maxima in the font
+ name various names associated with the font
+ post postscript names and other stuff
+Required by windows but not mac
+ OS/2 bleah.
+Required for TrueType
+ loca pointers to the glyphs
+ glyf character shapes
+Required for OpenType (PostScript)
+ CFF A complete postscript CFF font here with all its internal tables
+Required for bitmaps
+ bdat/EBDT bitmap data
+ bloc/EBLC pointers to bitmaps
+ bhed for apple bitmap only fonts, replaces head
+Optional for bitmaps
+ EBSC bitmap scaling table (used in windows "bitmap-only" fonts)
+"Advanced Typograpy"
+ Apple
+ feat (mapping between morx features and 'name' names)
+ kern (if data are present)
+ lcar (ligature caret, if data present)
+ morx (substitutions, if data present)
+ prop (glyph properties, if data present)
+ opbd (optical bounds, if data present)
+ OpenType
+ GPOS (opentype, if kern,anchor data are present)
+ GSUB (opentype, if ligature (other subs) data are present)
+ GDEF (opentype, if anchor data are present)
+MATH
+ MATH (MS proposal, if math data present)
+Apple variation tables (for distortable (multiple master type) fonts)
+ fvar (font variations)
+ gvar (glyph variations)
+ cvar (cvt variations)
+ avar (axis variations)
+additional tables
+ cvt for hinting
+ gasp to control when things should be hinted
+ fpgm for hinting (currently only copied and dumped verbatim)
+ prep for hinting (currently only copied and dumped verbatim)
+FontForge
+ PfEd My own table
+TeX
+ TeX TeX specific info (stuff that used to live in tfm files)
+*/
+
+const char *ttfstandardnames[258] = {
+".notdef",
+".null",
+"nonmarkingreturn",
+"space",
+"exclam",
+"quotedbl",
+"numbersign",
+"dollar",
+"percent",
+"ampersand",
+"quotesingle",
+"parenleft",
+"parenright",
+"asterisk",
+"plus",
+"comma",
+"hyphen",
+"period",
+"slash",
+"zero",
+"one",
+"two",
+"three",
+"four",
+"five",
+"six",
+"seven",
+"eight",
+"nine",
+"colon",
+"semicolon",
+"less",
+"equal",
+"greater",
+"question",
+"at",
+"A",
+"B",
+"C",
+"D",
+"E",
+"F",
+"G",
+"H",
+"I",
+"J",
+"K",
+"L",
+"M",
+"N",
+"O",
+"P",
+"Q",
+"R",
+"S",
+"T",
+"U",
+"V",
+"W",
+"X",
+"Y",
+"Z",
+"bracketleft",
+"backslash",
+"bracketright",
+"asciicircum",
+"underscore",
+"grave",
+"a",
+"b",
+"c",
+"d",
+"e",
+"f",
+"g",
+"h",
+"i",
+"j",
+"k",
+"l",
+"m",
+"n",
+"o",
+"p",
+"q",
+"r",
+"s",
+"t",
+"u",
+"v",
+"w",
+"x",
+"y",
+"z",
+"braceleft",
+"bar",
+"braceright",
+"asciitilde",
+"Adieresis",
+"Aring",
+"Ccedilla",
+"Eacute",
+"Ntilde",
+"Odieresis",
+"Udieresis",
+"aacute",
+"agrave",
+"acircumflex",
+"adieresis",
+"atilde",
+"aring",
+"ccedilla",
+"eacute",
+"egrave",
+"ecircumflex",
+"edieresis",
+"iacute",
+"igrave",
+"icircumflex",
+"idieresis",
+"ntilde",
+"oacute",
+"ograve",
+"ocircumflex",
+"odieresis",
+"otilde",
+"uacute",
+"ugrave",
+"ucircumflex",
+"udieresis",
+"dagger",
+"degree",
+"cent",
+"sterling",
+"section",
+"bullet",
+"paragraph",
+"germandbls",
+"registered",
+"copyright",
+"trademark",
+"acute",
+"dieresis",
+"notequal",
+"AE",
+"Oslash",
+"infinity",
+"plusminus",
+"lessequal",
+"greaterequal",
+"yen",
+"mu",
+"partialdiff",
+"summation",
+"product",
+"pi",
+"integral",
+"ordfeminine",
+"ordmasculine",
+"Omega",
+"ae",
+"oslash",
+"questiondown",
+"exclamdown",
+"logicalnot",
+"radical",
+"florin",
+"approxequal",
+"Delta",
+"guillemotleft",
+"guillemotright",
+"ellipsis",
+"nonbreakingspace",
+"Agrave",
+"Atilde",
+"Otilde",
+"OE",
+"oe",
+"endash",
+"emdash",
+"quotedblleft",
+"quotedblright",
+"quoteleft",
+"quoteright",
+"divide",
+"lozenge",
+"ydieresis",
+"Ydieresis",
+"fraction",
+"currency",
+"guilsinglleft",
+"guilsinglright",
+"fi",
+"fl",
+"daggerdbl",
+"periodcentered",
+"quotesinglbase",
+"quotedblbase",
+"perthousand",
+"Acircumflex",
+"Ecircumflex",
+"Aacute",
+"Edieresis",
+"Egrave",
+"Iacute",
+"Icircumflex",
+"Idieresis",
+"Igrave",
+"Oacute",
+"Ocircumflex",
+"apple",
+"Ograve",
+"Uacute",
+"Ucircumflex",
+"Ugrave",
+"dotlessi",
+"circumflex",
+"tilde",
+"macron",
+"breve",
+"dotaccent",
+"ring",
+"cedilla",
+"hungarumlaut",
+"ogonek",
+"caron",
+"Lslash",
+"lslash",
+"Scaron",
+"scaron",
+"Zcaron",
+"zcaron",
+"brokenbar",
+"Eth",
+"eth",
+"Yacute",
+"yacute",
+"Thorn",
+"thorn",
+"minus",
+"multiply",
+"onesuperior",
+"twosuperior",
+"threesuperior",
+"onehalf",
+"onequarter",
+"threequarters",
+"franc",
+"Gbreve",
+"gbreve",
+"Idotaccent",
+"Scedilla",
+"scedilla",
+"Cacute",
+"cacute",
+"Ccaron",
+"ccaron",
+"dcroat"
+};
+/* Relates Unicode blocks as in
+ http://unicode.org/Public/UNIDATA/Blocks.txt
+ to bit positions in the OpenType standard Unicode Character Range
+ field 'ulUnicodeRange'.
+ Note that the OpenType standard specifies bits for a subset
+ of the Unicode blocks.
+ */
+static int uniranges[][3] = {
+ { 0x20, 0x7e, 0 }, /* Basic Latin */
+ { 0xa0, 0xff, 1 }, /* Latin-1 Supplement */
+ { 0x100, 0x17f, 2 }, /* Latin Extended-A */
+ { 0x180, 0x24f, 3 }, /* Latin Extended-B */
+ { 0x250, 0x2af, 4 }, /* IPA Extensions */
+ { 0x2b0, 0x2ff, 5 }, /* Spacing Modifier Letters */
+ { 0x300, 0x36f, 6 }, /* Combining Diacritical Marks */
+ { 0x370, 0x3ff, 7 }, /* Greek and Coptic */
+ { 0x400, 0x52f, 9 }, /* Cyrillic / Cyrillic Supplement */
+ { 0x530, 0x58f, 10 }, /* Armenian */
+ { 0x590, 0x5ff, 11 }, /* Hebrew */
+ { 0x600, 0x6ff, 13 }, /* Arabic */
+ { 0x700, 0x74f, 71 }, /* Syriac */
+ { 0x750, 0x77f, 13 }, /* Arabic Supplement */
+ { 0x780, 0x7bf, 72 }, /* Thaana */
+ { 0x7c0, 0x7ff, 14 }, /* N'Ko */
+ /* { 0x800, 0x83f, ? }, Samaritan */
+ /* { 0x840, 0x85f, ? }, Mandaic */
+ { 0x900, 0x97f, 15 }, /* Devanagari */
+ { 0x980, 0x9ff, 16 }, /* Bengali */
+ { 0xa00, 0xa7f, 17 }, /* Gurmukhi */
+ { 0xa80, 0xaff, 18 }, /* Gujarati */
+ { 0xb00, 0xb7f, 19 }, /* Oriya */
+ { 0xb80, 0xbff, 20 }, /* Tamil */
+ { 0xc00, 0xc7f, 21 }, /* Telugu */
+ { 0xc80, 0xcff, 22 }, /* Kannada */
+ { 0xd00, 0xd7f, 23 }, /* Malayalam */
+ { 0xd80, 0xdff, 73 }, /* Sinhala */
+ { 0xe00, 0xe7f, 24 }, /* Thai */
+ { 0xe80, 0xeff, 25 }, /* Lao */
+ { 0xf00, 0xfbf, 70 }, /* Tibetan */
+ { 0x1000, 0x109f, 74 }, /* Myanmar */
+ { 0x10a0, 0x10ff, 26 }, /* Georgian */
+ { 0x1100, 0x11ff, 28 }, /* Hangul Jamo */
+ { 0x1200, 0x137f, 75 }, /* Ethiopic */
+ { 0x1380, 0x139f, 75 }, /* Ethiopic Supplement */
+ { 0x13a0, 0x13ff, 76 }, /* Cherokee */
+ { 0x1400, 0x167f, 77 }, /* Unified Canadian Aboriginal Symbols */
+ { 0x1680, 0x169f, 78 }, /* Ogham */
+ { 0x16a0, 0x16ff, 79 }, /* Runic */
+ { 0x1700, 0x1714, 84 }, /* Tagalog */
+ { 0x1720, 0x1736, 84 }, /* Harunoo */
+ { 0x1740, 0x1753, 84 }, /* Buhid */
+ { 0x1750, 0x1773, 84 }, /* Tagbanwa */
+ { 0x1780, 0x17ff, 80 }, /* Khmer */
+ { 0x1800, 0x18af, 81 }, /* Mongolian */
+ { 0x18B0, 0x18f5, 77 }, /* Unified Canadian Aboriginal Symbols Extended */
+ { 0x1900, 0x194f, 93 }, /* Limbu */
+ { 0x1950, 0x197f, 94 }, /* Tai Le */
+ { 0x1980, 0x19DF, 95 }, /* New Tai Lue */
+ { 0x19e0, 0x19ff, 80 }, /* Khmer Symbols */
+ { 0x1A00, 0x1A1F, 96 }, /* Buginese */
+ { 0x1B00, 0x1B7f, 27 }, /* Balinese */
+ { 0x1B80, 0x1BB9, 112 }, /* Sudanese */
+ /*{ 0x1bc0, 0x1bff, ? }, Batak */
+ { 0x1C00, 0x1C4F, 113 }, /* Lepcha */
+ { 0x1C50, 0x1C7F, 114 }, /* Ol Chiki */
+ /*{ 0x1cd0, 0x1cff, ? }, Vedic Extensions */
+ { 0x1d00, 0x1dbf, 4 }, /* Phonetic Extensions & Supplement */
+ { 0x1d80, 0x1dff, 6 }, /* Combining Diacritical Marks Supplement */
+ { 0x1e00, 0x1eff, 29 }, /* Latin Extended Additional */
+ { 0x1f00, 0x1fff, 30 }, /* Greek Extended */
+ { 0x2000, 0x206f, 31 }, /* General Punctuation */
+ { 0x2070, 0x209f, 32 }, /* Superscripts and Subscripts */
+ { 0x20a0, 0x20cf, 33 }, /* Currency Symbols */
+ { 0x20d0, 0x20ff, 34 }, /* Combining Marks for Symbols */
+ { 0x2100, 0x214f, 35 }, /* Letterlike Symbols */
+ { 0x2150, 0x218f, 36 }, /* Number Forms */
+ { 0x2190, 0x21ff, 37 }, /* Arrows */
+ { 0x2200, 0x22ff, 38 }, /* Mathematical Operators */
+ { 0x2300, 0x237f, 39 }, /* Miscellaneous Technical */
+ { 0x2400, 0x243f, 40 }, /* Control Pictures */
+ { 0x2440, 0x245f, 41 }, /* Optical Character Recognition */
+ { 0x2460, 0x24ff, 42 }, /* Enclosed Alphanumerics */
+ { 0x2500, 0x257f, 43 }, /* Box Drawing */
+ { 0x2580, 0x259f, 44 }, /* Block Elements */
+ { 0x25a0, 0x25ff, 45 }, /* Geometric Shapes */
+ { 0x2600, 0x267f, 46 }, /* Miscellaneous Symbols */
+ { 0x2700, 0x27bf, 47 }, /* Dingbats */
+ { 0x27c0, 0x27ef, 38 }, /* Miscellaneous Mathematical Symbols-A */
+ { 0x27f0, 0x27ff, 37 }, /* Supplementary Arrows-A */
+ { 0x2800, 0x28ff, 82 }, /* Braille Patterns */
+ { 0x2900, 0x297f, 37 }, /* Supplementary Arrows-B */
+ { 0x2980, 0x2aff, 38 }, /* Miscellaneous Mathematical Symbols-B /
+ Supplemental Mathematical Operators */
+ { 0x2b00, 0x2bff, 37 }, /* Miscellaneous Symbols and Arrows */
+ { 0x2C00, 0x2C5E, 97 }, /* Glagolitic */
+ { 0x2c60, 0x2c7f, 29 }, /* Latin Extended-C */
+ { 0x2c80, 0x2cff, 8 }, /* Coptic */
+ { 0x2D00, 0x2D25, 26 }, /* Georgian Supplement */
+ { 0x2D30, 0x2D6F, 98 }, /* Tifinagh */
+ { 0x2d80, 0x2ddf, 75 }, /* Ethiopic Extended */
+ { 0x2de0, 0x2dff, 9 }, /* Cyrillic Extended-A */
+ { 0x2e00, 0x2e7f, 31 }, /* Supplemental Punctuation */
+ { 0x2e80, 0x2fff, 59 }, /* CJK Radicals Supplement / Kangxi Radicals /
+ Ideographic Description Characters */
+ { 0x3000, 0x303f, 48 }, /* CJK Symbols and Punctuation */
+ { 0x3040, 0x309f, 49 }, /* Hiragana */
+ { 0x30a0, 0x30ff, 50 }, /* Katakana */
+ { 0x3100, 0x312f, 51 }, /* Bopomofo */
+ { 0x3130, 0x318f, 52 }, /* Hangul Compatibility Jamo */
+ { 0x3190, 0x319f, 59 }, /* Kanbun */
+ { 0x31a0, 0x31bf, 51 }, /* Bopomofo Extended */
+ { 0x31f0, 0x31ff, 50 }, /* Katakana Phonetic Extensions */
+ { 0x3200, 0x32ff, 54 }, /* Enclosed CJK Letters and Months */
+ { 0x3300, 0x33ff, 55 }, /* CJK compatability */
+ { 0x3400, 0x4dbf, 59 }, /* CJK Unified Ideographs Extension A */
+ { 0x4dc0, 0x4dff, 99 }, /* Yijing Hexagram Symbols */
+ { 0x4e00, 0x9fff, 59 }, /* CJK Unified Ideographs */
+ { 0xa000, 0xa4cf, 81 }, /* Yi Syllables / Yi Radicals */
+ /*{ 0xA4d0, 0xA4ff, ? }, Lisu */
+ { 0xA500, 0xA62b, 12 }, /* Vai */
+ { 0xa640, 0xa69f, 9 }, /* Cyrillic Extended-B */
+ /*{ 0xa6a0, 0xa6ff, ? }, Bamum */
+ { 0xa700, 0xa71f, 5 }, /* Modifier Tone Letters */
+ { 0xa720, 0xa7ff, 29 }, /* Latin Extended-D */
+ { 0xA800, 0xA82F, 100 }, /* Syloti Nagri */
+ /*{ 0xa830, 0xa83f, ? }, Common Indic Number Forms */
+ { 0xa840, 0xa87f, 53 }, /* Phags-pa */
+ { 0xA880, 0xA8D9, 115 }, /* Saurashtra */
+ /*{ 0xA8E0, 0xA8FF, ? }, Devanagari Extended */
+ { 0xA900, 0xA92F, 116 }, /* Kayah Li */
+ { 0xA930, 0xA95F, 117 }, /* Rejang */
+ /*{ 0xA960, 0xA97F, 28? }, Hangul Jamo Extended-A */
+ /*{ 0xA980, 0xA9DF, ? }, Javanese */
+ { 0xAA00, 0xAA5F, 118 }, /* Cham */
+ /*{ 0xAA60, 0xAA7F, 74? }, Myanmar Extended-A */
+ /*{ 0xAA80, 0xAADF, ? }, Tai Viet */
+ /*{ 0xab00, 0xab2f, 75? }, Ethiopic Extended-A */
+ /*{ 0xabc0, 0xabff, ? }, Meetei Mayek */
+ { 0xac00, 0xd7af, 56 }, /* Hangul Syllables */
+ { 0xd800, 0xdfff, 57 }, /* Non-Plane 0 */
+ { 0xe000, 0xf8ff, 60 }, /* Private Use Area */
+
+ { 0xf900, 0xfaff, 61 }, /* CJK Compatibility Ideographs */
+ /* 12 ideographs in The IBM 32 Compatibility Additions are CJK unified
+ ideographs despite their names: see The Unicode Standard 4.0, p.475 */
+ { 0xfa0e, 0xfa0f, 59 },
+ { 0xfa10, 0xfa10, 61 },
+ { 0xfa11, 0xfa11, 59 },
+ { 0xfa12, 0xfa12, 61 },
+ { 0xfa13, 0xfa14, 59 },
+ { 0xfa15, 0xfa1e, 61 },
+ { 0xfa1f, 0xfa1f, 59 },
+ { 0xfa20, 0xfa20, 61 },
+ { 0xfa21, 0xfa21, 59 },
+ { 0xfa22, 0xfa22, 61 },
+ { 0xfa23, 0xfa24, 59 },
+ { 0xfa25, 0xfa26, 61 },
+ { 0xfa27, 0xfa29, 59 },
+ { 0xfa2a, 0xfaff, 61 }, /* CJK Compatibility Ideographs */
+
+ { 0xfb00, 0xfb4f, 62 }, /* Alphabetic Presentation Forms */
+ { 0xfb50, 0xfdff, 63 }, /* Arabic Presentation Forms-A */
+ { 0xfe00, 0xfe0f, 91 }, /* Variation Selectors */
+ { 0xfe20, 0xfe2f, 64 }, /* Combining Half Marks */
+ { 0xfe30, 0xfe4f, 65 }, /* CJK Compatibility Forms */
+ { 0xfe50, 0xfe6f, 66 }, /* Small Form Variants */
+ { 0xfe70, 0xfeef, 67 }, /* Arabic Presentation Forms-B */
+ { 0xff00, 0xffef, 68 }, /* Halfwidth and Fullwidth Forms */
+ { 0xfff0, 0xffff, 69 }, /* Specials */
+
+ { 0x10000, 0x1007f, 101 }, /* Linear B Syllabary */
+ { 0x10080, 0x100ff, 101 }, /* Linear B Ideograms */
+ { 0x10100, 0x1013f, 101 }, /* Aegean Numbers */
+ { 0x10140, 0x1018F, 102 }, /* Ancient Greek Numbers */
+ { 0x10190, 0x101CF, 119 }, /* Ancient Symbols */
+ { 0x101D0, 0x101FF, 120 }, /* Phaistos Disc */
+ { 0x102A0, 0x102D0, 121 }, /* Carian */
+ { 0x10280, 0x1029C, 121 }, /* Lycian */
+ { 0x10300, 0x1032f, 85 }, /* Old Italic */
+ { 0x10330, 0x1034f, 86 }, /* Gothic */
+ { 0x10380, 0x1039F, 103 }, /* Ugaritic */
+ { 0x103A0, 0x103D6, 104 }, /* Old Persian */
+ { 0x10400, 0x1044f, 87 }, /* Deseret */
+ { 0x10450, 0x1047f, 105 }, /* Shavian */
+ { 0x10480, 0x104af, 106 }, /* Osmanya */
+ { 0x10800, 0x1083f, 107 }, /* Cypriot Syllabary */
+ /*{ 0x10840, 0x1085f, ? }, Imperial Aramaic */
+ { 0x10900, 0x1091f, 58 }, /* Phoenician */
+ { 0x10920, 0x10939, 121 }, /* Lydian */
+ { 0x10A00, 0x10A5F, 108 }, /* Kharoshthi */
+ /*{ 0x10A60, 0x10A7F, ? }, Old South Arabian */
+ /*{ 0x10B00, 0x10B3F, ? }, Avestan */
+ /*{ 0x10B40, 0x10B5F, ? }, Inscriptional Parthian */
+ /*{ 0x10B60, 0x10B7F, ? }, Inscriptional Pahlavi */
+ /*{ 0x10C00, 0x10C4F, ? }, Old Turkic */
+ /*{ 0x10E60, 0x10E7F, ? }, Rumi Numeral Symbols */
+ /*{ 0x11000, 0x1107F, ? }, Brahmi */
+ /*{ 0x11000, 0x1107F, ? }, Kaithi */
+ { 0x12000, 0x1247F, 110 }, /* Cuneiform; Numbers & Punctuation */
+ /*{ 0x13000, 0x1342F, ? }, Egyptian Hieroglyphs */
+ /*{ 0x16800, 0x16A3F, ? }, Bamum Supplement */
+ /*{ 0x1B000, 0x1B0FF, ? }, Kana Supplement */
+ { 0x1d000, 0x1d1ff, 88 }, /* Byzantine Musical Symbols / Musical Symbols */
+ /*{ 0x1D200, 0x1D24F, ? }, Ancient Greek Musical Notation */
+ { 0x1d300, 0x1d35f, 109 }, /* Tai Xuan Jing Symbols */
+ { 0x1D360, 0x1D37F, 111 }, /* Counting Rod Numerals */
+ { 0x1d400, 0x1d7ff, 89 }, /* Mathematical Alphanumeric Symbols */
+ { 0x1F000, 0x1F02B, 122 }, /* Mahjong Tiles */
+ { 0x1F030, 0x1F093, 122 }, /* Dominos */
+ /*{ 0x1F0A0, 0x1F0FF, ? }, Playing Cards */
+ /*{ 0x1F100, 0x1F1FF, ? }, Enclosed Alphanumeric Supplement */
+ /*{ 0x1F200, 0x1F2FF, ? }, Enclosed Ideographic Supplement */
+ /*{ 0x1F300, 0x1F5FF, ? }, Miscellaneous Symbols And Pictographs */
+ /*{ 0x1F600, 0x1F64F, ? }, Emoticons */
+ /*{ 0x1F680, 0x1F6FF, ? }, Transport And Map Symbols */
+ /*{ 0x1F700, 0x1F77F, ? }, Alchemical Symbols */
+ { 0x20000, 0x2a6df, 59 }, /* CJK Unified Ideographs Extension B */
+ /*{ 0x2A700, 0x2B73F, 59? }, CJK Unified Ideographs Extension C */
+ /*{ 0x2B740, 0x2B81F, 59? }, CJK Unified Ideographs Extension D */
+ { 0x2f800, 0x2fa1f, 61 }, /* CJK Compatibility Ideographs Supplement */
+ { 0xe0000, 0xe007f, 92 }, /* Tags */
+ { 0xe0100, 0xe01ef, 91 }, /* Variation Selectors Supplement */
+ { 0xf0000, 0xffffd, 90 }, /* Supplementary Private Use Area-A */
+ { 0x100000, 0x10fffd, 90 }, /* Supplementary Private Use Area-B */
+};
+
+static int32 getuint32(FILE *ttf) {
+ int ch1 = getc(ttf);
+ int ch2 = getc(ttf);
+ int ch3 = getc(ttf);
+ int ch4 = getc(ttf);
+ if ( ch4==EOF )
+return( EOF );
+return( (ch1<<24)|(ch2<<16)|(ch3<<8)|ch4 );
+}
+
+static int short_too_long_warned = 0;
+
+void putshort(FILE *file,int sval) {
+ if ( sval<-32768 || sval>65535 )
+ if (!short_too_long_warned) {
+ IError(_("Attempt to output %d into a 16-bit field. It will be truncated and the file may not be useful."), sval );
+ short_too_long_warned = 1;
+ }
+ putc((sval>>8)&0xff,file);
+ putc(sval&0xff,file);
+}
+
+static void putu24(FILE *file,int val) {
+ putc((val>>16)&0xff,file);
+ putc((val>>8)&0xff,file);
+ putc(val&0xff,file);
+}
+
+void putlong(FILE *file,int val) {
+ putc((val>>24)&0xff,file);
+ putc((val>>16)&0xff,file);
+ putc((val>>8)&0xff,file);
+ putc(val&0xff,file);
+}
+#define dumpabsoffset putlong
+
+static void dumpoffset(FILE *file,int offsize,int val) {
+ if ( offsize==1 )
+ putc(val,file);
+ else if ( offsize==2 )
+ putshort(file,val);
+ else if ( offsize==3 ) {
+ putc((val>>16)&0xff,file);
+ putc((val>>8)&0xff,file);
+ putc(val&0xff,file);
+ } else
+ putlong(file,val);
+}
+
+static void put2d14(FILE *file,real dval) {
+ int val;
+ int mant;
+
+ val = floor(dval);
+ mant = floor(16384.*(dval-val));
+ val = (val<<14) | mant;
+ putshort(file,val);
+}
+
+void putfixed(FILE *file,real dval) {
+ int val;
+ int mant;
+
+ val = floor(dval);
+ mant = floor(65536.*(dval-val));
+ val = (val<<16) | mant;
+ putlong(file,val);
+}
+
+int ttfcopyfile(FILE *ttf, FILE *other, int pos, const char *tab_name) {
+ int ch;
+ int ret = 1;
+
+ if ( ferror(ttf) || ferror(other)) {
+ IError("Disk error of some nature. Perhaps no space on device?\nGenerated font will be unusable" );
+ } else if ( pos!=ftell(ttf)) {
+ IError("File Offset wrong for ttf table (%s), %d expected %d", tab_name, ftell(ttf), pos );
+ }
+ rewind(other);
+ while (( ch = getc(other))!=EOF )
+ putc(ch,ttf);
+ if ( ferror(other)) ret = 0;
+ if ( fclose(other)) ret = 0;
+return( ret );
+}
+
+static void FigureFullMetricsEnd(SplineFont *sf,struct glyphinfo *gi, int istt ) {
+ /* We can reduce the size of the width array by removing a run at the end */
+ /* of the same width. So start at the end, find the width of the last */
+ /* character we'll output, then run backwards as long as we've got the */
+ /* same width */
+ /* (do same thing for vertical metrics too */
+ int i, lasti, lastv, lastdefault = istt ? 3 : 1;
+ int width, vwidth;
+
+ lasti = lastv = gi->gcnt-1;
+ for ( i=gi->gcnt-1; i>lastdefault && gi->bygid[i]==-1; --i );
+ if ( i>=lastdefault ) {
+ width = sf->glyphs[gi->bygid[i]]->width;
+ vwidth = sf->glyphs[gi->bygid[i]]->vwidth;
+ lasti = lastv = i;
+ for ( i=lasti-1; i>=lastdefault; --i ) {
+ if ( SCWorthOutputting(sf->glyphs[gi->bygid[i]]) ) {
+ if ( sf->glyphs[gi->bygid[i]]->width!=width )
+ break;
+ else
+ lasti = i;
+ }
+ }
+ gi->lasthwidth = lasti;
+ if ( sf->hasvmetrics ) {
+ for ( i=lastv-1; i>=lastdefault; --i ) {
+ if ( SCWorthOutputting(sf->glyphs[gi->bygid[i]]) ) {
+ if ( sf->glyphs[gi->bygid[i]]->vwidth!=vwidth )
+ break;
+ else
+ lastv = i;
+ }
+ }
+ gi->lastvwidth = lastv;
+ }
+ } else {
+ gi->lasthwidth = 0;
+ gi->lastvwidth = 0;
+ }
+}
+
+static void dumpghstruct(struct glyphinfo *gi,struct glyphhead *gh) {
+
+ putshort(gi->glyphs,gh->numContours);
+ putshort(gi->glyphs,gh->xmin);
+ putshort(gi->glyphs,gh->ymin);
+ putshort(gi->glyphs,gh->xmax);
+ putshort(gi->glyphs,gh->ymax);
+ if ( gh->xmin<gi->xmin ) gi->xmin = gh->xmin;
+ if ( gh->ymin<gi->ymin ) gi->ymin = gh->ymin;
+ if ( gh->xmax>gi->xmax ) gi->xmax = gh->xmax;
+ if ( gh->ymax>gi->ymax ) gi->ymax = gh->ymax;
+}
+
+static void ttfdumpmetrics(SplineChar *sc,struct glyphinfo *gi,DBounds *b) {
+ int width=sc->width;
+ int vwidth=sc->vwidth;
+
+ if ( width<0 ) width=0;
+ if ( vwidth<0 ) vwidth=0;
+
+ if ( sc->ttf_glyph<=gi->lasthwidth )
+ putshort(gi->hmtx,width);
+ putshort(gi->hmtx,b->minx);
+ if ( sc->parent->hasvmetrics ) {
+ if ( sc->ttf_glyph<=gi->lastvwidth )
+ putshort(gi->vmtx,vwidth);
+ putshort(gi->vmtx, sc->parent->ascent - b->maxy);
+ }
+ if ( sc->ttf_glyph==gi->lasthwidth )
+ gi->hfullcnt = sc->ttf_glyph+1;
+ if ( sc->ttf_glyph==gi->lastvwidth )
+ gi->vfullcnt = sc->ttf_glyph+1;
+}
+
+static SplineSet *SCttfApprox(SplineChar *sc,int layer) {
+ SplineSet *head=NULL, *last, *ss, *tss;
+ RefChar *ref;
+
+ for ( ss=sc->layers[layer].splines; ss!=NULL; ss=ss->next ) {
+ tss = sc->layers[layer].order2 ? SplinePointListCopy1(ss) : SSttfApprox(ss);
+ if ( head==NULL ) head = tss;
+ else last->next = tss;
+ last = tss;
+ }
+ for ( ref=sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ for ( ss=ref->layers[0].splines; ss!=NULL; ss=ss->next ) {
+ tss = sc->layers[layer].order2 ? SplinePointListCopy1(ss) : SSttfApprox(ss);
+ if ( head==NULL ) head = tss;
+ else last->next = tss;
+ last = tss;
+ }
+ }
+return( head );
+}
+
+#define _On_Curve 1
+#define _X_Short 2
+#define _Y_Short 4
+#define _Repeat 8
+#define _X_Same 0x10
+#define _Y_Same 0x20
+
+int SSAddPoints(SplineSet *ss,int ptcnt,BasePoint *bp, char *flags) {
+ SplinePoint *sp, *first, *nextsp;
+ int startcnt = ptcnt;
+
+ if ( ss->first->prev!=NULL &&
+ ss->first->prev->from->nextcpindex==startcnt ) {
+ if ( flags!=NULL ) flags[ptcnt] = 0;
+ bp[ptcnt].x = rint(ss->first->prevcp.x);
+ bp[ptcnt++].y = rint(ss->first->prevcp.y);
+ } else if ( ss->first->ttfindex!=ptcnt && ss->first->ttfindex!=0xfffe )
+ IError("Unexpected point count in SSAddPoints" );
+
+ first = NULL;
+ for ( sp=ss->first; sp!=first ; ) {
+ if ( sp->ttfindex!=0xffff ) {
+ if ( flags!=NULL ) flags[ptcnt] = _On_Curve;
+ bp[ptcnt].x = rint(sp->me.x);
+ bp[ptcnt].y = rint(sp->me.y);
+ sp->ttfindex = ptcnt++;
+ } else if ( !SPInterpolate( sp ) ) {
+ /* If an on curve point is midway between two off curve points*/
+ /* it may be omitted and will be interpolated on read in */
+ if ( flags!=NULL ) flags[ptcnt] = _On_Curve;
+ bp[ptcnt].x = rint(sp->me.x);
+ bp[ptcnt].y = rint(sp->me.y);
+ sp->ttfindex = ptcnt++;
+ }
+ nextsp = sp->next!=NULL ? sp->next->to : NULL;
+ if ( sp->nextcpindex == startcnt )
+ /* This control point is actually our first point, not our last */
+ break;
+ if ( (sp->nextcpindex !=0xffff && sp->nextcpindex!=0xfffe ) ||
+ !sp->nonextcp ) {
+ if ( flags!=NULL ) flags[ptcnt] = 0;
+ bp[ptcnt].x = rint(sp->nextcp.x);
+ bp[ptcnt++].y = rint(sp->nextcp.y);
+ }
+ if ( nextsp==NULL )
+ break;
+ if ( first==NULL ) first = sp;
+ sp = nextsp;
+ }
+return( ptcnt );
+}
+
+static void dumppointarrays(struct glyphinfo *gi,BasePoint *bp, char *fs, int pc) {
+ BasePoint last;
+ int i,flags;
+ int lastflag, flagcnt;
+
+ if ( gi->maxp->maxPoints<pc )
+ gi->maxp->maxPoints = pc;
+
+ /* flags */
+ last.x = last.y = 0;
+ lastflag = -1; flagcnt = 0;
+ for ( i=0; i<pc; ++i ) {
+ flags = 0;
+ if ( fs==NULL || fs[i] )
+ flags = _On_Curve; /* points are on curve */
+ if ( last.x==bp[i].x )
+ flags |= _X_Same;
+ else if ( bp[i].x-last.x>-256 && bp[i].x-last.x<255 ) {
+ flags |= _X_Short;
+ if ( bp[i].x>=last.x )
+ flags |= _X_Same; /* In this context it means positive */
+ }
+ if ( last.y==bp[i].y )
+ flags |= _Y_Same;
+ else if ( bp[i].y-last.y>-256 && bp[i].y-last.y<255 ) {
+ flags |= _Y_Short;
+ if ( bp[i].y>=last.y )
+ flags |= _Y_Same; /* In this context it means positive */
+ }
+ last = bp[i];
+ if ( lastflag==-1 ) {
+ lastflag = flags;
+ flagcnt = 0;
+ } else if ( flags!=lastflag ) {
+ if ( flagcnt!=0 )
+ lastflag |= _Repeat;
+ putc(lastflag,gi->glyphs);
+ if ( flagcnt!=0 )
+ putc(flagcnt,gi->glyphs);
+ lastflag = flags;
+ flagcnt = 0;
+ } else {
+ if ( ++flagcnt == 255 ) {
+ putc(lastflag|_Repeat,gi->glyphs);
+ putc(255,gi->glyphs);
+ lastflag = -1;
+ flagcnt = 0;
+ }
+ }
+ }
+ if ( lastflag!=-1 ) {
+ if ( flagcnt!=0 )
+ lastflag |= _Repeat;
+ putc(lastflag,gi->glyphs);
+ if ( flagcnt!=0 )
+ putc(flagcnt,gi->glyphs);
+ }
+
+ /* xcoords */
+ last.x = 0;
+ for ( i=0; i<pc; ++i ) {
+ if ( last.x==bp[i].x )
+ /* Do Nothing */;
+ else if ( bp[i].x-last.x>-256 && bp[i].x-last.x<255 ) {
+ if ( bp[i].x>=last.x )
+ putc(bp[i].x-last.x,gi->glyphs);
+ else
+ putc(last.x-bp[i].x,gi->glyphs);
+ } else
+ putshort(gi->glyphs,bp[i].x-last.x);
+ last.x = bp[i].x;
+ }
+ /* ycoords */
+ last.y = 0;
+ for ( i=0; i<pc; ++i ) {
+ if ( last.y==bp[i].y )
+ /* Do Nothing */;
+ else if ( bp[i].y-last.y>-256 && bp[i].y-last.y<255 ) {
+ if ( bp[i].y>=last.y )
+ putc(bp[i].y-last.y,gi->glyphs);
+ else
+ putc(last.y-bp[i].y,gi->glyphs);
+ } else
+ putshort(gi->glyphs,bp[i].y-last.y);
+ last.y = bp[i].y;
+ }
+ if ( ftell(gi->glyphs)&1 ) /* Pad the file so that the next glyph */
+ putc('\0',gi->glyphs); /* on a word boundary */
+}
+
+static void dumpinstrs(struct glyphinfo *gi,uint8 *instrs,int cnt) {
+ int i;
+
+ if ( (gi->flags&ttf_flag_nohints) ) {
+ putshort(gi->glyphs,0);
+return;
+ }
+ /* Do we ever want to call AutoHint and AutoInst here? I think not. */
+
+ if ( gi->maxp->maxglyphInstr<cnt ) gi->maxp->maxglyphInstr=cnt;
+ putshort(gi->glyphs,cnt);
+ for ( i=0; i<cnt; ++i )
+ putc( instrs[i],gi->glyphs );
+}
+
+static void dumpmissingglyph(SplineFont *sf,struct glyphinfo *gi,int fixedwidth) {
+ /* Or .notdef */
+ struct glyphhead gh;
+ BasePoint bp[10];
+ uint8 instrs[50];
+ int stemcvt, stem;
+ char *stempt;
+
+ stem = 0;
+ if ( sf->private!=NULL && (stempt=PSDictHasEntry(sf->private,"StdVW"))!=NULL )
+ stem = strtod(stempt,NULL);
+ else if ( sf->private!=NULL && (stempt=PSDictHasEntry(sf->private,"StdHW"))!=NULL )
+ stem = strtod(stempt,NULL);
+ if ( stem<=0 )
+ stem = (sf->ascent+sf->descent)/30;
+
+ gi->pointcounts[gi->next_glyph] = 8;
+ gi->loca[gi->next_glyph++] = ftell(gi->glyphs);
+ gi->maxp->maxContours = 2;
+
+ gh.numContours = 2;
+ gh.ymin = 0;
+ gh.ymax = 2*(sf->ascent+sf->descent)/3;
+ gh.xmax = 5*stem+(sf->ascent+sf->descent)/10;
+ gh.xmin = stem;
+ gh.xmax += stem;
+ if ( gh.ymax>sf->ascent ) gh.ymax = sf->ascent;
+ dumpghstruct(gi,&gh);
+
+ bp[0].x = stem; bp[0].y = 0;
+ bp[1].x = stem; bp[1].y = gh.ymax;
+ bp[2].x = gh.xmax; bp[2].y = gh.ymax;
+ bp[3].x = gh.xmax; bp[3].y = 0;
+
+ bp[4].x = 2*stem; bp[4].y = stem;
+ bp[5].x = gh.xmax-stem; bp[5].y = stem;
+ bp[6].x = gh.xmax-stem; bp[6].y = gh.ymax-stem;
+ bp[7].x = 2*stem; bp[7].y = gh.ymax-stem;
+
+ if ( !gi->ttc_composite_font ) {
+ stemcvt = TTF_getcvtval(gi->sf,stem);
+
+ instrs[0] = 0xb1; /* Pushb, 2byte */
+ instrs[1] = 1; /* Point 1 */
+ instrs[2] = 0; /* Point 0 */
+ instrs[3] = 0x2f; /* MDAP, rounded (pt0) */
+ instrs[4] = 0x3c; /* ALIGNRP, (pt1 same pos as pt0)*/
+ instrs[5] = 0xb2; /* Pushb, 3byte */
+ instrs[6] = 7; /* Point 7 */
+ instrs[7] = 4; /* Point 4 */
+ instrs[8] = stemcvt; /* CVT entry for our stem width */
+ instrs[9] = 0xe0+0x0d; /* MIRP, don't set rp0, minimum, rounded, black */
+ instrs[10] = 0x32; /* SHP[rp2] (pt7 same pos as pt4) */
+ instrs[11] = 0xb1; /* Pushb, 2byte */
+ instrs[12] = 6; /* Point 6 */
+ instrs[13] = 5; /* Point 5 */
+ instrs[14] = 0xc0+0x1c; /* MDRP, set rp0, minimum, rounded, grey */
+ instrs[15] = 0x3c; /* ALIGNRP, (pt6 same pos as pt5)*/
+ instrs[16] = 0xb2; /* Pushb, 3byte */
+ instrs[17] = 3; /* Point 3 */
+ instrs[18] = 2; /* Point 2 */
+ instrs[19] = stemcvt; /* CVT entry for our stem width */
+ instrs[20] = 0xe0+0x0d; /* MIRP, dont set rp0, minimum, rounded, black */
+ instrs[21] = 0x32; /* SHP[rp2] (pt3 same pos as pt2) */
+
+ instrs[22] = 0x00; /* SVTCA, y axis */
+
+ instrs[23] = 0xb1; /* Pushb, 2byte */
+ instrs[24] = 3; /* Point 3 */
+ instrs[25] = 0; /* Point 0 */
+ instrs[26] = 0x2f; /* MDAP, rounded */
+ instrs[27] = 0x3c; /* ALIGNRP, (pt3 same height as pt0)*/
+ instrs[28] = 0xb2; /* Pushb, 3byte */
+ instrs[29] = 5; /* Point 5 */
+ instrs[30] = 4; /* Point 4 */
+ instrs[31] = stemcvt; /* CVT entry for our stem width */
+ instrs[32] = 0xe0+0x0d; /* MIRP, don't set rp0, minimum, rounded, black */
+ instrs[33] = 0x32; /* SHP[rp2] (pt5 same height as pt4) */
+ instrs[34] = 0xb2; /* Pushb, 3byte */
+ instrs[35] = 7; /* Point 7 */
+ instrs[36] = 6; /* Point 6 */
+ instrs[37] = TTF_getcvtval(gi->sf,bp[6].y); /* CVT entry for top height */
+ instrs[38] = 0xe0+0x1c; /* MIRP, set rp0, minimum, rounded, grey */
+ instrs[39] = 0x3c; /* ALIGNRP (pt7 same height as pt6) */
+ instrs[40] = 0xb2; /* Pushb, 3byte */
+ instrs[41] = 1; /* Point 1 */
+ instrs[42] = 2; /* Point 2 */
+ instrs[43] = stemcvt; /* CVT entry for our stem width */
+ instrs[44] = 0xe0+0x0d; /* MIRP, dont set rp0, minimum, rounded, black */
+ instrs[45] = 0x32; /* SHP[rp2] (pt1 same height as pt2) */
+
+ /* We've touched all points in all dimensions */
+ /* Don't need any IUP */
+ }
+
+ /* end contours array */
+ putshort(gi->glyphs,4-1);
+ putshort(gi->glyphs,8-1);
+ /* instruction length&instructions */
+ if ( !gi->ttc_composite_font )
+ dumpinstrs(gi,instrs,46);
+ else
+ dumpinstrs(gi,NULL,0);
+
+ dumppointarrays(gi,bp,NULL,8);
+
+ if ( fixedwidth<=0 )
+ putshort(gi->hmtx,gh.xmax + 2*stem);
+ else
+ putshort(gi->hmtx,fixedwidth);
+ putshort(gi->hmtx,stem);
+ if ( sf->hasvmetrics ) {
+ putshort(gi->vmtx,sf->ascent+sf->descent);
+ putshort(gi->vmtx,/*sf->vertical_origin-*/gh.ymax);
+ }
+}
+
+static void dumpblankglyph(struct glyphinfo *gi,SplineFont *sf,int fixedwidth) {
+ int advance = gi->next_glyph==1?0:fixedwidth<=0?(sf->ascent+sf->descent)/3:
+ fixedwidth;
+ /* For reasons quite obscure to me, glyph 1 has an advance width of 0 */
+ /* even in a mono-spaced font like CourierNew.ttf */
+
+ /* These don't get a glyph header, because there are no contours */
+ gi->pointcounts[gi->next_glyph] = 0;
+ gi->loca[gi->next_glyph++] = ftell(gi->glyphs);
+ putshort(gi->hmtx,advance);
+ putshort(gi->hmtx,0);
+ if ( sf->hasvmetrics ) {
+ putshort(gi->vmtx,gi->next_glyph==2?0:(sf->ascent+sf->descent));
+ putshort(gi->vmtx,0);
+ }
+}
+
+static void dumpspace(SplineChar *sc, struct glyphinfo *gi) {
+ /* These don't get a glyph header, because there are no contours */
+ DBounds b;
+ gi->pointcounts[gi->next_glyph] = 0;
+ gi->loca[gi->next_glyph++] = ftell(gi->glyphs);
+ memset(&b,0,sizeof(b));
+ ttfdumpmetrics(sc,gi,&b);
+}
+
+static int IsTTFRefable(SplineChar *sc,int layer) {
+ RefChar *ref;
+
+ if ( sc->layers[layer].refs==NULL || sc->layers[layer].splines!=NULL )
+return( false );
+
+ for ( ref=sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->transform[0]<-2 || ref->transform[0]>1.999939 ||
+ ref->transform[1]<-2 || ref->transform[1]>1.999939 ||
+ ref->transform[2]<-2 || ref->transform[2]>1.999939 ||
+ ref->transform[3]<-2 || ref->transform[3]>1.999939 )
+return( false );
+ }
+return( true );
+}
+
+int RefDepth(RefChar *ref,int layer) {
+ int rd, temp;
+ SplineChar *sc = ref->sc;
+
+ if ( sc->layers[layer].refs==NULL || sc->layers[layer].splines!=NULL )
+return( 1 );
+ rd = 0;
+ for ( ref = sc->layers[layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->transform[0]>=-2 || ref->transform[0]<=1.999939 ||
+ ref->transform[1]>=-2 || ref->transform[1]<=1.999939 ||
+ ref->transform[2]>=-2 || ref->transform[2]<=1.999939 ||
+ ref->transform[3]>=-2 || ref->transform[3]<=1.999939 ) {
+ temp = RefDepth(ref,layer);
+ if ( temp>rd ) rd = temp;
+ }
+ }
+return( rd+1 );
+}
+
+static void CountCompositeMaxPts(SplineChar *sc,struct glyphinfo *gi) {
+ RefChar *ref;
+ int ptcnt = 0, index;
+
+ for ( ref=sc->layers[gi->layer].refs; ref!=NULL; ref=ref->next ) {
+ if ( ref->sc->ttf_glyph==-1 )
+ continue;
+ index = ref->sc->ttf_glyph;
+ if ( gi->pointcounts[index]==-1 )
+ CountCompositeMaxPts(ref->sc,gi);
+ ptcnt += gi->pointcounts[index];
+ }
+ gi->pointcounts[sc->ttf_glyph] = ptcnt;
+ if ( gi->maxp->maxCompositPts<ptcnt ) gi->maxp->maxCompositPts=ptcnt;
+}
+
+/* In order3 fonts we figure out the composite point counts at the end */
+/* when we know how many points are in each sub-glyph */
+static void RefigureCompositeMaxPts(SplineFont *sf,struct glyphinfo *gi) {
+ int i;
+
+ for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 && sf->glyphs[gi->bygid[i]]->ttf_glyph!=-1 ) {
+ if ( sf->glyphs[gi->bygid[i]]->layers[gi->layer].splines==NULL &&
+ sf->glyphs[gi->bygid[i]]->layers[gi->layer].refs!=NULL &&
+ gi->pointcounts[i]== -1 )
+ CountCompositeMaxPts(sf->glyphs[gi->bygid[i]],gi);
+ }
+}
+
+static void dumpcomposite(SplineChar *sc, struct glyphinfo *gi) {
+ struct glyphhead gh;
+ DBounds bb;
+ int i, ptcnt, ctcnt, flags, sptcnt, rd;
+ SplineSet *ss;
+ RefChar *ref;
+ SplineChar *isc = sc->ttf_instrs==NULL && sc->parent->mm!=NULL && sc->parent->mm->apple ?
+ sc->parent->mm->normal->glyphs[sc->orig_pos] : sc;
+ int arg1, arg2;
+
+ if ( gi->next_glyph!=sc->ttf_glyph )
+ IError("Glyph count wrong in ttf output");
+ if ( gi->next_glyph>=gi->maxp->numGlyphs )
+ IError("max glyph count wrong in ttf output");
+ gi->loca[gi->next_glyph] = ftell(gi->glyphs);
+
+ SplineCharLayerQuickBounds(sc,gi->layer,&bb);
+ gh.numContours = -1;
+ gh.xmin = floor(bb.minx); gh.ymin = floor(bb.miny);
+ gh.xmax = ceil(bb.maxx); gh.ymax = ceil(bb.maxy);
+ dumpghstruct(gi,&gh);
+
+ i=ptcnt=ctcnt=0;
+ for ( ref=sc->layers[gi->layer].refs; ref!=NULL; ref=ref->next, ++i ) {
+ if ( ref->sc->ttf_glyph==-1 ) {
+ /*if ( sc->layers[gi->layer].refs->next==NULL || any )*/
+ continue;
+ }
+ flags = 0;
+ if ( ref->round_translation_to_grid )
+ flags |= _ROUND;
+ if ( ref->use_my_metrics )
+ flags |= _USE_MY_METRICS;
+ if ( ref->next!=NULL )
+ flags |= _MORE; /* More components */
+ else if ( isc->ttf_instrs_len!=0 ) /* Composits also inherit instructions */
+ flags |= _INSTR; /* Instructions appear after last ref */
+ if ( ref->transform[1]!=0 || ref->transform[2]!=0 )
+ flags |= _MATRIX; /* Need a full matrix */
+ else if ( ref->transform[0]!=ref->transform[3] )
+ flags |= _XY_SCALE; /* different xy scales */
+ else if ( ref->transform[0]!=1. )
+ flags |= _SCALE; /* xy scale is same */
+ if ( ref->point_match ) {
+ arg1 = ref->match_pt_base;
+ arg2 = ref->match_pt_ref;
+ } else {
+ arg1 = rint(ref->transform[4]);
+ arg2 = rint(ref->transform[5]);
+ flags |= _ARGS_ARE_XY|_UNSCALED_OFFSETS;
+ /* The values I output are the values I want to see */
+ /* There is some very strange stuff wrongly-documented on the apple*/
+ /* site about how these should be interpretted when there are */
+ /* scale factors, or rotations */
+ /* That description does not match the behavior of their rasterizer*/
+ /* I've reverse engineered something else (see parsettf.c) */
+ /* http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html */
+ /* Adobe says that setting bit 12 means that this will not happen */
+ /* Apple doesn't mention bit 12 though...(but they do support it) */
+ }
+ if ( arg1<-128 || arg1>127 ||
+ arg2<-128 || arg2>127 )
+ flags |= _ARGS_ARE_WORDS;
+ putshort(gi->glyphs,flags);
+ putshort(gi->glyphs,ref->sc->ttf_glyph==-1?0:ref->sc->ttf_glyph);
+ if ( flags&_ARGS_ARE_WORDS ) {
+ putshort(gi->glyphs,(short)arg1);
+ putshort(gi->glyphs,(short)arg2);
+ } else {
+ putc((char) arg1,gi->glyphs);
+ putc((char) arg2,gi->glyphs);
+ }
+ if ( flags&_MATRIX ) {
+ put2d14(gi->glyphs,ref->transform[0]);
+ put2d14(gi->glyphs,ref->transform[1]);
+ put2d14(gi->glyphs,ref->transform[2]);
+ put2d14(gi->glyphs,ref->transform[3]);
+ } else if ( flags&_XY_SCALE ) {
+ put2d14(gi->glyphs,ref->transform[0]);
+ put2d14(gi->glyphs,ref->transform[3]);
+ } else if ( flags&_SCALE ) {
+ put2d14(gi->glyphs,ref->transform[0]);
+ }
+ sptcnt = SSTtfNumberPoints(ref->layers[0].splines);
+ for ( ss=ref->layers[0].splines; ss!=NULL ; ss=ss->next ) {
+ ++ctcnt;
+ }
+ if ( sc->layers[gi->layer].order2 )
+ ptcnt += sptcnt;
+ else if ( ptcnt>=0 && gi->pointcounts[ref->sc->ttf_glyph==-1?0:ref->sc->ttf_glyph]>=0 )
+ ptcnt += gi->pointcounts[ref->sc->ttf_glyph==-1?0:ref->sc->ttf_glyph];
+ else
+ ptcnt = -1;
+ rd = RefDepth(ref,gi->layer);
+ if ( rd>gi->maxp->maxcomponentdepth )
+ gi->maxp->maxcomponentdepth = rd;
+ }
+
+ if ( isc->ttf_instrs_len!=0 )
+ dumpinstrs(gi,isc->ttf_instrs,isc->ttf_instrs_len);
+
+ gi->pointcounts[gi->next_glyph++] = ptcnt;
+ if ( gi->maxp->maxnumcomponents<i ) gi->maxp->maxnumcomponents = i;
+ if ( gi->maxp->maxCompositPts<ptcnt ) gi->maxp->maxCompositPts=ptcnt;
+ if ( gi->maxp->maxCompositCtrs<ctcnt ) gi->maxp->maxCompositCtrs=ctcnt;
+
+ ttfdumpmetrics(sc,gi,&bb);
+ if ( ftell(gi->glyphs)&1 ) /* Pad the file so that the next glyph */
+ putc('\0',gi->glyphs); /* on a word boundary, can only happen if odd number of instrs */
+}
+
+static void dumpglyph(SplineChar *sc, struct glyphinfo *gi) {
+ struct glyphhead gh;
+ DBounds bb;
+ SplineSet *ss, *ttfss;
+ int contourcnt, ptcnt, origptcnt;
+ BasePoint *bp;
+ char *fs;
+ SplineChar *isc = sc->ttf_instrs==NULL && sc->parent->mm!=NULL && sc->parent->mm->apple ?
+ sc->parent->mm->normal->glyphs[sc->orig_pos] : sc;
+
+ /* This must have been an error on my part, can't just remove points */
+ /* they might be matched to anchors or something */
+/* I haven't seen this documented, but ttf rasterizers are unhappy with a */
+/* glyph that consists of a single point. Glyphs containing two single points*/
+/* are ok, glyphs with a single point and anything else are ok, glyphs with */
+/* a line are ok. But a single point is not ok. Dunno why */
+ if ( sc->layers[gi->layer].splines==NULL && sc->layers[gi->layer].refs==NULL ) {
+ dumpspace(sc,gi);
+return;
+ }
+
+ if ( gi->next_glyph!=sc->ttf_glyph )
+ IError("Glyph count wrong in ttf output");
+ if ( gi->next_glyph>=gi->maxp->numGlyphs )
+ IError("max glyph count wrong in ttf output");
+ gi->loca[gi->next_glyph] = ftell(gi->glyphs);
+
+ ttfss = SCttfApprox(sc,gi->layer);
+ ptcnt = SSTtfNumberPoints(ttfss);
+ for ( ss=ttfss, contourcnt=0; ss!=NULL; ss=ss->next ) {
+ ++contourcnt;
+ }
+ origptcnt = ptcnt;
+
+ SplineSetQuickBounds(ttfss,&bb);
+ gh.numContours = contourcnt;
+ gh.xmin = floor(bb.minx); gh.ymin = floor(bb.miny);
+ gh.xmax = ceil(bb.maxx); gh.ymax = ceil(bb.maxy);
+ dumpghstruct(gi,&gh);
+ if ( contourcnt>gi->maxp->maxContours ) gi->maxp->maxContours = contourcnt;
+ if ( ptcnt>gi->maxp->maxPoints ) gi->maxp->maxPoints = ptcnt;
+
+ bp = malloc(ptcnt*sizeof(BasePoint));
+ fs = malloc(ptcnt);
+ ptcnt = contourcnt = 0;
+ for ( ss=ttfss; ss!=NULL; ss=ss->next ) {
+ ptcnt = SSAddPoints(ss,ptcnt,bp,fs);
+ putshort(gi->glyphs,ptcnt-1);
+ }
+ if ( ptcnt!=origptcnt )
+ IError( "Point count wrong calculated=%d, actual=%d in %.20s", origptcnt, ptcnt, sc->name );
+ gi->pointcounts[gi->next_glyph++] = ptcnt;
+
+ dumpinstrs(gi,isc->ttf_instrs,isc->ttf_instrs_len);
+
+ dumppointarrays(gi,bp,fs,ptcnt);
+ SplinePointListsFree(ttfss);
+ free(bp);
+ free(fs);
+
+ ttfdumpmetrics(sc,gi,&bb);
+}
+
+void SFDummyUpCIDs(struct glyphinfo *gi,SplineFont *sf) {
+ int i,j,k,max;
+ int *bygid;
+
+ max = 0;
+ for ( k=0; k<sf->subfontcnt; ++k )
+ if ( sf->subfonts[k]->glyphcnt>max ) max = sf->subfonts[k]->glyphcnt;
+ if ( max == 0 )
+return;
+
+ sf->glyphs = calloc(max,sizeof(SplineChar *));
+ sf->glyphcnt = sf->glyphmax = max;
+ for ( k=0; k<sf->subfontcnt; ++k )
+ for ( i=0; i<sf->subfonts[k]->glyphcnt; ++i ) if ( sf->subfonts[k]->glyphs[i]!=NULL )
+ sf->glyphs[i] = sf->subfonts[k]->glyphs[i];
+
+ if ( gi==NULL )
+return;
+
+ bygid = malloc((sf->glyphcnt+3)*sizeof(int));
+ memset(bygid,0xff, (sf->glyphcnt+3)*sizeof(int));
+
+ j=1;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ if ( bygid[0]== -1 && strcmp(sf->glyphs[i]->name,".notdef")==0 ) {
+ sf->glyphs[i]->ttf_glyph = 0;
+ bygid[0] = i;
+ } else if ( SCWorthOutputting(sf->glyphs[i])) {
+ sf->glyphs[i]->ttf_glyph = j;
+ bygid[j++] = i;
+ }
+ }
+ gi->bygid = bygid;
+ gi->gcnt = j;
+}
+
+static void AssignNotdefNull(SplineFont *sf,int *bygid, int iscff) {
+ int i;
+
+ /* The first three glyphs are magic, glyph 0 is .notdef */
+ /* glyph 1 is .null and glyph 2 is nonmarking return */
+ /* We may generate them automagically */
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ if ( bygid[0]== -1 && strcmp(sf->glyphs[i]->name,".notdef")==0 ) {
+ sf->glyphs[i]->ttf_glyph = 0;
+ bygid[0] = i;
+ } else if ( !iscff && bygid[1]== -1 &&
+ (strcmp(sf->glyphs[i]->name,".null")==0 ||
+ strcmp(sf->glyphs[i]->name,"uni0000")==0 ||
+ (i==1 && strcmp(sf->glyphs[1]->name,"glyph1")==0)) ) {
+ sf->glyphs[i]->ttf_glyph = 1;
+ bygid[1] = i;
+ } else if ( !iscff && bygid[2]== -1 &&
+ (strcmp(sf->glyphs[i]->name,"nonmarkingreturn")==0 ||
+ strcmp(sf->glyphs[i]->name,"uni000D")==0 ||
+ (i==2 && strcmp(sf->glyphs[2]->name,"glyph2")==0)) ) {
+ sf->glyphs[i]->ttf_glyph = 2;
+ bygid[2] = i;
+ }
+ }
+}
+
+static int AssignTTFGlyph(struct glyphinfo *gi,SplineFont *sf,EncMap *map,int iscff) {
+ int *bygid = malloc((sf->glyphcnt+3)*sizeof(int));
+ int i,j;
+
+ memset(bygid,0xff, (sf->glyphcnt+3)*sizeof(int));
+
+ AssignNotdefNull(sf,bygid,iscff);
+
+ j = iscff ? 1 : 3;
+ for ( i=0; i<map->enccount; ++i ) if ( map->map[i]!=-1 ) {
+ SplineChar *sc = sf->glyphs[map->map[i]];
+ if ( SCWorthOutputting(sc) && sc->ttf_glyph==-1
+#if HANYANG
+ && (!iscff || !sc->compositionunit)
+#endif
+ ) {
+ sc->ttf_glyph = j;
+ bygid[j++] = sc->orig_pos;
+ }
+ }
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ SplineChar *sc = sf->glyphs[i];
+ if ( SCWorthOutputting(sc) && sc->ttf_glyph==-1
+#if HANYANG
+ && (!iscff || !sc->compositionunit)
+#endif
+ ) {
+ sc->ttf_glyph = j;
+ bygid[j++] = i;
+ }
+ }
+ gi->bygid = bygid;
+ gi->gcnt = j;
+return j;
+}
+
+static int dumpglyphs(SplineFont *sf,struct glyphinfo *gi) {
+ int i;
+ int fixed = gi->fixed_width;
+
+ ff_progress_change_stages(2+gi->strikecnt);
+ QuickBlues(sf,gi->layer,&gi->bd);
+ /*FindBlues(sf,gi->blues,NULL);*/
+ ff_progress_next_stage();
+
+ if ( !gi->onlybitmaps ) {
+ if ( sf->layers[gi->layer].order2 )
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ SplineChar *sc = sf->glyphs[i];
+ if ( SCWorthOutputting(sc) )
+ if ( !SCPointsNumberedProperly(sc,gi->layer)) {
+ free(sc->ttf_instrs); sc->ttf_instrs = NULL;
+ sc->ttf_instrs_len = 0;
+ SCNumberPoints(sc,gi->layer);
+ }
+ }
+ }
+
+ gi->maxp->numGlyphs = gi->gcnt;
+ gi->loca = malloc((gi->maxp->numGlyphs+1)*sizeof(uint32));
+ gi->pointcounts = malloc((gi->maxp->numGlyphs+1)*sizeof(int32));
+ memset(gi->pointcounts,-1,(gi->maxp->numGlyphs+1)*sizeof(int32));
+ gi->next_glyph = 0;
+ gi->glyphs = tmpfile2();
+ gi->hmtx = tmpfile2();
+ if ( sf->hasvmetrics )
+ gi->vmtx = tmpfile2();
+ FigureFullMetricsEnd(sf,gi,true);
+
+ if ( fixed>0 ) {
+ gi->lasthwidth = 3;
+ gi->hfullcnt = 3;
+ }
+ for ( i=0; i<gi->gcnt; ++i ) {
+ if ( i==0 ) {
+ if ( gi->bygid[0]!=-1 && (fixed<=0 || sf->glyphs[gi->bygid[0]]->width==fixed))
+ dumpglyph(sf->glyphs[gi->bygid[0]],gi);
+ else
+ dumpmissingglyph(sf,gi,fixed);
+ } else if ( i<=2 && gi->bygid[i]==-1 )
+ dumpblankglyph(gi,sf,fixed);
+ else if ( gi->onlybitmaps ) {
+ if ( gi->bygid[i]!=-1 && sf->glyphs[gi->bygid[i]]->ttf_glyph>0 )
+ dumpspace(sf->glyphs[gi->bygid[i]],gi);
+ } else {
+ if ( gi->bygid[i]!=-1 && sf->glyphs[gi->bygid[i]]->ttf_glyph>0 ) {
+ if ( IsTTFRefable(sf->glyphs[gi->bygid[i]],gi->layer) )
+ dumpcomposite(sf->glyphs[gi->bygid[i]],gi);
+ else
+ dumpglyph(sf->glyphs[gi->bygid[i]],gi);
+ }
+ }
+ if ( (ftell(gi->glyphs)&3) != 0 ) {
+ /* Apple says glyphs must be 16bit aligned */
+ if ( ftell(gi->glyphs)&1 )
+ putc('\0',gi->glyphs);
+ /* MS says glyphs should be 32bit aligned */
+ if ( ftell(gi->glyphs)&2 )
+ putshort(gi->glyphs,0);
+ }
+ if ( !ff_progress_next())
+return( false );
+ }
+
+ /* extra location entry points to end of last glyph */
+ gi->loca[gi->next_glyph] = ftell(gi->glyphs);
+ /* Microsoft's Font Validator wants the last loca entry to point into the */
+ /* glyph table. I think that's an error on their part, but it's so easy */
+ /* to fix, I might as well (instead of pointing to right after the table)*/
+ /* Sigh. But if I do that, it complains that there's extra stuff in the */
+ /* glyph table. There's just no pleasing them */
+ /* putlong(gi->glyphs,0);*/
+ gi->glyph_len = ftell(gi->glyphs);
+ gi->hmtxlen = ftell(gi->hmtx);
+ /* pad out to four bytes */
+ if ( gi->hmtxlen&2 ) putshort(gi->hmtx,0);
+ if ( gi->loca[gi->next_glyph]&3 ) {
+ for ( i=4-(gi->loca[gi->next_glyph]&3); i>0; --i )
+ putc('\0',gi->glyphs);
+ }
+ if ( sf->hasvmetrics ) {
+ gi->vmtxlen = ftell(gi->vmtx);
+ if ( gi->vmtxlen&2 ) putshort(gi->vmtx,0);
+ }
+ if ( !sf->layers[gi->layer].order2 )
+ RefigureCompositeMaxPts(sf,gi);
+ free(gi->pointcounts);
+
+return( true );
+}
+
+static int storesid(struct alltabs *at,const char *str) {
+ int i;
+ FILE *news;
+ const char *pt;
+ long pos;
+
+ if ( str!=NULL ) { /* NULL is the magic string at end of array */
+ for ( i=0; cffnames[i]!=NULL; ++i ) {
+ if ( strcmp(cffnames[i],str)==0 )
+return( i );
+ }
+ }
+
+ pos = ftell(at->sidf)+1;
+ if ( pos>=65536 && !at->sidlongoffset ) {
+ at->sidlongoffset = true;
+ news = tmpfile2();
+ rewind(at->sidh);
+ for ( i=0; i<at->sidcnt; ++i )
+ putlong(news,getushort(at->sidh));
+ fclose(at->sidh);
+ at->sidh = news;
+ }
+ if ( at->sidlongoffset )
+ putlong(at->sidh,pos);
+ else
+ putshort(at->sidh,pos);
+
+ if ( str!=NULL ) {
+ for ( pt=str; *pt; ++pt )
+ putc(*pt,at->sidf);
+ }
+return( at->sidcnt++ + nStdStrings );
+}
+
+static void dumpint(FILE *cfff,int num) {
+
+ if ( num>=-107 && num<=107 )
+ putc(num+139,cfff);
+ else if ( num>=108 && num<=1131 ) {
+ num -= 108;
+ putc((num>>8)+247,cfff);
+ putc(num&0xff,cfff);
+ } else if ( num>=-1131 && num<=-108 ) {
+ num = -num;
+ num -= 108;
+ putc((num>>8)+251,cfff);
+ putc(num&0xff,cfff);
+ } else if ( num>=-32768 && num<32768 ) {
+ putc(28,cfff);
+ putc(num>>8,cfff);
+ putc(num&0xff,cfff);
+ } else { /* In dict data we have 4 byte ints, in type2 strings we don't */
+ putc(29,cfff);
+ putc((num>>24)&0xff,cfff);
+ putc((num>>16)&0xff,cfff);
+ putc((num>>8)&0xff,cfff);
+ putc(num&0xff,cfff);
+ }
+}
+
+static void dumpdbl(FILE *cfff,double d) {
+ if ( d-rint(d)>-.00001 && d-rint(d)<.00001 )
+ dumpint(cfff,(int) d);
+ else {
+ /* The type2 strings have a fixed format, but the dict data does not */
+ char buffer[20], *pt;
+ int sofar,n,odd;
+ sprintf( buffer, "%g", d);
+ sofar = 0; odd=true;
+ putc(30,cfff); /* Start a double */
+ for ( pt=buffer; *pt; ++pt ) {
+ if ( isdigit(*pt) )
+ n = *pt-'0';
+ else if ( *pt=='.' )
+ n = 0xa;
+ else if ( *pt=='-' )
+ n = 0xe;
+ else if (( *pt=='E' || *pt=='e') && pt[1]=='-' ) {
+ n = 0xc;
+ ++pt;
+ } else if ( *pt=='E' || *pt=='e')
+ n = 0xb;
+ else
+ n = 0; /* Should never happen */
+ if ( odd ) {
+ sofar = n<<4;
+ odd = false;
+ } else {
+ putc(sofar|n,cfff);
+ sofar=0;
+ odd = true;
+ }
+ }
+ if ( sofar==0 )
+ putc(0xff,cfff);
+ else
+ putc(sofar|0xf,cfff);
+ }
+}
+
+static void dumpoper(FILE *cfff,int oper ) {
+ if ( oper!=-1 ) {
+ if ( oper>=256 )
+ putc(oper>>8,cfff);
+ putc(oper&0xff,cfff);
+ }
+}
+
+static void dumpdbloper(FILE *cfff,double d, int oper ) {
+ dumpdbl(cfff,d);
+ dumpoper(cfff,oper);
+}
+
+static void dumpintoper(FILE *cfff,int v, int oper ) {
+ dumpint(cfff,v);
+ dumpoper(cfff,oper);
+}
+
+static void dumpsizedint(FILE *cfff,int big,int num, int oper ) {
+ if ( big ) {
+ putc(29,cfff);
+ putc((num>>24)&0xff,cfff);
+ putc((num>>16)&0xff,cfff);
+ putc((num>>8)&0xff,cfff);
+ putc(num&0xff,cfff);
+ } else {
+ putc(28,cfff);
+ putc(num>>8,cfff);
+ putc(num&0xff,cfff);
+ }
+ dumpoper(cfff,oper);
+}
+
+static void dumpsid(FILE *cfff,struct alltabs *at,char *str,int oper) {
+ if ( str==NULL )
+return;
+ dumpint(cfff,storesid(at,str));
+ dumpoper(cfff,oper);
+}
+
+static void DumpStrDouble(char *pt,FILE *cfff,int oper) {
+ real d;
+ if ( *pt=='[' ) ++pt; /* For StdHW, StdVW */
+ d = strtod(pt,NULL);
+ dumpdbloper(cfff,d,oper);
+}
+
+static void DumpDblArray(real *arr,int n,FILE *cfff, int oper) {
+ int mi,i;
+
+ for ( mi=n-1; mi>=0 && arr[mi]==0; --mi );
+ if ( mi<0 )
+return;
+ dumpdbl(cfff,arr[0]);
+ for ( i=1; i<=mi; ++i )
+ dumpdbl(cfff,arr[i]-arr[i-1]);
+ dumpoper(cfff,oper);
+}
+
+static void DumpStrArray(char *pt,FILE *cfff,int oper) {
+ real d, last=0;
+ char *end;
+
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+return;
+ if ( *pt=='[' ) ++pt;
+ while ( *pt==' ' ) ++pt;
+ while ( *pt!=']' && *pt!='\0' ) {
+ d = strtod(pt,&end);
+ if ( pt==end ) /* User screwed up. Should be a number */
+ break;
+ dumpdbl(cfff,d-last);
+ last = d;
+ pt = end;
+ while ( *pt==' ' ) ++pt;
+ }
+ dumpoper(cfff,oper);
+}
+
+static void dumpcffheader(FILE *cfff) {
+ putc('\1',cfff); /* Major version: 1 */
+ putc('\0',cfff); /* Minor version: 0 */
+ putc('\4',cfff); /* Header size in bytes */
+ putc('\4',cfff); /* Absolute Offset size. */
+ /* I don't think there are any absolute offsets that aren't encoded */
+ /* in a dict as numbers (ie. inherently variable sized items) */
+}
+
+static void dumpcffnames(SplineFont *sf,FILE *cfff) {
+ char *pt;
+
+ putshort(cfff,1); /* One font name */
+ putc('\1',cfff); /* Offset size */
+ putc('\1',cfff); /* Offset to first name */
+ putc('\1'+strlen(sf->fontname),cfff);
+ for ( pt=sf->fontname; *pt; ++pt )
+ putc(*pt,cfff);
+}
+
+static void dumpcffcharset(SplineFont *sf,struct alltabs *at) {
+ int i;
+
+ at->gn_sid = calloc(at->gi.gcnt,sizeof(uint32));
+ putc(0,at->charset);
+ /* I always use a format 0 charset. ie. an array of SIDs in random order */
+
+ /* First element must be ".notdef" and is omitted */
+
+ for ( i=1; i<at->gi.gcnt; ++i )
+ if ( at->gi.bygid[i]!=-1 && SCWorthOutputting(sf->glyphs[at->gi.bygid[i]])) {
+ at->gn_sid[i] = storesid(at,sf->glyphs[at->gi.bygid[i]]->name);
+ putshort(at->charset,at->gn_sid[i]);
+ }
+}
+
+static void dumpcffcidset(struct alltabs *at) {
+ int gid, start;
+
+ putc(2,at->charset);
+
+ start = -1; /* Glyph 0 always maps to CID 0, and is omitted */
+ for ( gid = 1; gid<at->gi.gcnt; ++gid ) {
+ if ( start==-1 )
+ start = gid;
+ else if ( at->gi.bygid[gid]-at->gi.bygid[start]!=gid-start ) {
+ putshort(at->charset,at->gi.bygid[start]);
+ putshort(at->charset,at->gi.bygid[gid-1]-at->gi.bygid[start]);
+ start = gid;
+ }
+ }
+ if ( start!=-1 ) {
+ putshort(at->charset,at->gi.bygid[start]);
+ putshort(at->charset,at->gi.bygid[gid-1]-at->gi.bygid[start]);
+ }
+}
+
+static void dumpcfffdselect(SplineFont *sf,struct alltabs *at) {
+ int cid, k, lastfd, cnt;
+ int gid;
+
+ putc(3,at->fdselect);
+ putshort(at->fdselect,0); /* number of ranges, fill in later */
+
+ for ( k=0; k<sf->subfontcnt; ++k )
+ if ( SCWorthOutputting(sf->subfonts[k]->glyphs[0]))
+ break;
+ if ( k==sf->subfontcnt ) --k; /* If CID 0 not defined, put it in last font */
+ putshort(at->fdselect,0);
+ putc(k,at->fdselect);
+ lastfd = k;
+ cnt = 1;
+ for ( gid = 1; gid<at->gi.gcnt; ++gid ) {
+ cid = at->gi.bygid[gid];
+ for ( k=0; k<sf->subfontcnt; ++k ) {
+ if ( cid<sf->subfonts[k]->glyphcnt &&
+ SCWorthOutputting(sf->subfonts[k]->glyphs[cid]) )
+ break;
+ }
+ if ( k==sf->subfontcnt )
+ /* Doesn't map to a glyph, irrelevant */;
+ else {
+ if ( k!=lastfd ) {
+ putshort(at->fdselect,gid);
+ putc(k,at->fdselect);
+ lastfd = k;
+ ++cnt;
+ }
+ }
+ }
+ putshort(at->fdselect,gid);
+ fseek(at->fdselect,1,SEEK_SET);
+ putshort(at->fdselect,cnt);
+ fseek(at->fdselect,0,SEEK_END);
+}
+
+static void dumpcffencoding(SplineFont *sf,struct alltabs *at) {
+ int i, cnt, anydups;
+ uint32 start_pos = ftell(at->encoding);
+ SplineChar *sc;
+ EncMap *map = at->map;
+
+ putc(0,at->encoding);
+ /* I always use a format 0 encoding. ie. an array of glyph indexes */
+ putc(0xff,at->encoding); /* fixup later */
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->ticked = false;
+
+ cnt = 0;
+ anydups = 0;
+ for ( i=0; i<256 && i<map->enccount; ++i ) if ( map->map[i]!=-1 && (sc=sf->glyphs[map->map[i]])!=NULL ) {
+ if ( sc->ttf_glyph>255 )
+ continue;
+ if ( sc->ticked ) {
+ ++anydups;
+ } else if ( sc->ttf_glyph>0 ) {
+ if ( cnt>=255 )
+ break;
+ putc(i,at->encoding);
+ ++cnt;
+ sc->ticked = true;
+ }
+ }
+ if ( anydups ) {
+ fseek(at->encoding,start_pos,SEEK_SET);
+ putc(0x80,at->encoding);
+ putc(cnt,at->encoding);
+ fseek(at->encoding,0,SEEK_END);
+ putc(anydups,at->encoding);
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->ticked = false;
+ for ( i=0; i<256 && i<map->enccount; ++i ) if ( map->map[i]!=-1 && (sc=sf->glyphs[map->map[i]])!=NULL ) {
+ if ( sc->ttf_glyph>255 )
+ continue;
+ if ( sc->ticked ) {
+ putc(i,at->encoding);
+ putshort(at->encoding,at->gn_sid[sc->ttf_glyph]);
+ }
+ sc->ticked = true;
+ }
+ } else {
+ fseek(at->encoding,start_pos+1,SEEK_SET);
+ putc(cnt,at->encoding);
+ fseek(at->encoding,0,SEEK_END);
+ }
+ free( at->gn_sid );
+ at->gn_sid = NULL;
+}
+
+static void _dumpcffstrings(FILE *file, struct pschars *strs) {
+ int i, len, offsize;
+
+ /* First figure out the offset size */
+ len = 1;
+ for ( i=0; i<strs->next; ++i )
+ len += strs->lens[i];
+
+ /* Then output the index size and offsets */
+ putshort( file, strs->next );
+ if ( strs->next!=0 ) {
+ /* presumably offsets are unsigned. But the docs don't state this in the obvious place */
+ offsize = len<=255?1:len<=65535?2:len<=0xffffff?3:4;
+ putc(offsize,file);
+ len = 1;
+ for ( i=0; i<strs->next; ++i ) {
+ dumpoffset(file,offsize,len);
+ len += strs->lens[i];
+ }
+ dumpoffset(file,offsize,len);
+
+ /* last of all the strings */
+ for ( i=0; i<strs->next; ++i ) {
+ uint8 *pt = strs->values[i], *end = pt+strs->lens[i];
+ while ( pt<end ) {
+ putc( *pt++, file );
+ }
+ }
+ }
+}
+
+static FILE *dumpcffstrings(struct pschars *strs) {
+ FILE *file = tmpfile2();
+ _dumpcffstrings(file,strs);
+ PSCharsFree(strs);
+return( file );
+}
+
+int SFFigureDefWidth(SplineFont *sf, int *_nomwid) {
+ uint16 *widths; uint32 *cumwid;
+ int nomwid, defwid, i, j, sameval=(int) 0x80000000, maxw=0, allsame=true;
+ unsigned cnt;
+
+ for ( i=0; i<sf->glyphcnt; ++i )
+ if ( SCWorthOutputting(sf->glyphs[i]) ) {
+ if ( maxw<sf->glyphs[i]->width ) maxw = sf->glyphs[i]->width;
+ if ( sameval == 0x8000000 )
+ sameval = sf->glyphs[i]->width;
+ else if ( sameval!=sf->glyphs[i]->width )
+ allsame = false;
+ }
+ if ( allsame ) {
+ nomwid = defwid = sameval;
+ } else {
+ ++maxw;
+ if ( maxw>65535 ) maxw = 3*(sf->ascent+sf->descent);
+ widths = calloc(maxw,sizeof(uint16));
+ cumwid = calloc(maxw,sizeof(uint32));
+ defwid = 0; cnt=0;
+ for ( i=0; i<sf->glyphcnt; ++i )
+ if ( SCWorthOutputting(sf->glyphs[i]) &&
+ sf->glyphs[i]->width>=0 &&
+ sf->glyphs[i]->width<maxw )
+ if ( ++widths[sf->glyphs[i]->width] > cnt ) {
+ defwid = sf->glyphs[i]->width;
+ cnt = widths[defwid];
+ }
+ widths[defwid] = 0;
+ for ( i=0; i<maxw; ++i )
+ for ( j=-107; j<=107; ++j )
+ if ( i+j>=0 && i+j<maxw )
+ cumwid[i] += widths[i+j];
+ cnt = 0; nomwid = 0;
+ for ( i=0; i<maxw; ++i )
+ if ( cnt<cumwid[i] ) {
+ cnt = cumwid[i];
+ nomwid = i;
+ }
+ free(widths); free(cumwid);
+ }
+ if ( _nomwid!=NULL )
+ *_nomwid = nomwid;
+return( defwid );
+}
+
+static void ATFigureDefWidth(SplineFont *sf, struct alltabs *at, int subfont) {
+ int nomwid, defwid;
+
+ defwid = SFFigureDefWidth(sf,&nomwid);
+ if ( subfont==-1 )
+ at->defwid = defwid;
+ else
+ at->fds[subfont].defwid = defwid;
+ if ( subfont==-1 )
+ at->nomwid = nomwid;
+ else
+ at->fds[subfont].nomwid = nomwid;
+}
+
+static void dumpcffprivate(SplineFont *sf,struct alltabs *at,int subfont,
+ int subrcnt) {
+ char *pt;
+ FILE *private = subfont==-1?at->private:at->fds[subfont].private;
+ int mi,i;
+ real bluevalues[14], otherblues[10];
+ real snapcnt[12];
+ real stemsnaph[12], stemsnapv[12];
+ real stdhw[1], stdvw[1];
+ int hasblue=0, hash=0, hasv=0, bs;
+ int nomwid, defwid;
+ EncMap *map = at->map;
+ double bluescale;
+
+ /* The private dict is not in an index, so no index header. Just the data */
+
+ if ( subfont==-1 )
+ defwid = at->defwid;
+ else
+ defwid = at->fds[subfont].defwid;
+ dumpintoper(private,defwid,20); /* Default Width */
+ if ( subfont==-1 )
+ nomwid = at->nomwid;
+ else
+ nomwid = at->fds[subfont].nomwid;
+ dumpintoper(private,nomwid,21); /* Nominative Width */
+
+ bs = SplineFontIsFlexible(sf,at->gi.layer,at->gi.flags);
+ hasblue = PSDictHasEntry(sf->private,"BlueValues")!=NULL;
+ hash = PSDictHasEntry(sf->private,"StdHW")!=NULL;
+ hasv = PSDictHasEntry(sf->private,"StdVW")!=NULL;
+ ff_progress_change_stages(2+autohint_before_generate+!hasblue);
+ if ( autohint_before_generate ) {
+ ff_progress_change_line1(_("Auto Hinting Font..."));
+ SplineFontAutoHint(sf,at->gi.layer);
+ ff_progress_next_stage();
+ }
+
+ otherblues[0] = otherblues[1] = bluevalues[0] = bluevalues[1] = 0;
+ if ( !hasblue ) {
+ FindBlues(sf,at->gi.layer,bluevalues,otherblues);
+ ff_progress_next_stage();
+ }
+
+ stdhw[0] = stdvw[0] = 0;
+ if ( !hash ) {
+ FindHStems(sf,stemsnaph,snapcnt);
+ mi = -1;
+ for ( i=0; i<12 && stemsnaph[i]!=0; ++i )
+ if ( mi==-1 ) mi = i;
+ else if ( snapcnt[i]>snapcnt[mi] ) mi = i;
+ if ( mi!=-1 ) stdhw[0] = stemsnaph[mi];
+ }
+
+ if ( !hasv ) {
+ FindVStems(sf,stemsnapv,snapcnt);
+ mi = -1;
+ for ( i=0; i<12 && stemsnapv[i]!=0; ++i )
+ if ( mi==-1 ) mi = i;
+ else if ( snapcnt[i]>snapcnt[mi] ) mi = i;
+ if ( mi!=-1 ) stdvw[0] = stemsnapv[mi];
+ }
+ ff_progress_change_line1(_("Saving OpenType Font"));
+
+ if ( hasblue )
+ DumpStrArray(PSDictHasEntry(sf->private,"BlueValues"),private,6);
+ else
+ DumpDblArray(bluevalues,sizeof(bluevalues)/sizeof(bluevalues[0]),private,6);
+ if ( (pt=PSDictHasEntry(sf->private,"OtherBlues"))!=NULL )
+ DumpStrArray(pt,private,7);
+ else if ( !hasblue )
+ DumpDblArray(otherblues,sizeof(otherblues)/sizeof(otherblues[0]),private,7);
+ if ( (pt=PSDictHasEntry(sf->private,"FamilyBlues"))!=NULL )
+ DumpStrArray(pt,private,8);
+ bluescale = BlueScaleFigure(sf->private,bluevalues,otherblues);
+ if ( (pt=PSDictHasEntry(sf->private,"FamilyOtherBlues"))!=NULL )
+ DumpStrArray(pt,private,9);
+ if ( (pt=PSDictHasEntry(sf->private,"BlueScale"))!=NULL )
+ DumpStrDouble(pt,private,(12<<8)+9);
+ else if ( bluescale!=-1 )
+ dumpdbloper(private,bluescale,(12<<8)+9);
+ if ( (pt=PSDictHasEntry(sf->private,"BlueShift"))!=NULL )
+ DumpStrDouble(pt,private,(12<<8)+10);
+ else
+ dumpintoper(private,bs,(12<<8)+10);
+ if ( (pt=PSDictHasEntry(sf->private,"BlueFuzz"))!=NULL )
+ DumpStrDouble(pt,private,(12<<8)+11);
+ if ( hash ) {
+ DumpStrDouble(PSDictHasEntry(sf->private,"StdHW"),private,10);
+ if ( (pt=PSDictHasEntry(sf->private,"StemSnapH"))!=NULL )
+ DumpStrArray(pt,private,(12<<8)|12);
+ } else {
+ if ( stdhw[0]!=0 )
+ dumpdbloper(private,stdhw[0],10);
+ DumpDblArray(stemsnaph,sizeof(stemsnaph)/sizeof(stemsnaph[0]),private,(12<<8)|12);
+ }
+ if ( hasv ) {
+ DumpStrDouble(PSDictHasEntry(sf->private,"StdVW"),private,11);
+ if ( (pt=PSDictHasEntry(sf->private,"StemSnapV"))!=NULL )
+ DumpStrArray(pt,private,(12<<8)|13);
+ } else {
+ if ( stdvw[0]!=0 )
+ dumpdbloper(private,stdvw[0],11);
+ DumpDblArray(stemsnapv,sizeof(stemsnapv)/sizeof(stemsnapv[0]),private,(12<<8)|13);
+ }
+ if ( (pt=PSDictHasEntry(sf->private,"ForceBold"))!=NULL ) {
+ dumpintoper(private,*pt=='t'||*pt=='T',(12<<8)|14);
+ } else if ( sf->weight!=NULL &&
+ (strstrmatch(sf->weight,"Bold")!=NULL ||
+ strstrmatch(sf->weight,"Demi")!=NULL ||
+ strstrmatch(sf->weight,"Fett")!=NULL ||
+ strstrmatch(sf->weight,"Gras")!=NULL ||
+ strstrmatch(sf->weight,"Heavy")!=NULL ||
+ strstrmatch(sf->weight,"Black")!=NULL))
+ dumpintoper(private,1,(12<<8)|14);
+ if ( (pt=PSDictHasEntry(sf->private,"LanguageGroup"))!=NULL )
+ DumpStrDouble(pt,private,(12<<8)+17);
+ else if ( map==NULL )
+ /* Do Nothing */;
+ else if ( map->enc->is_japanese ||
+ map->enc->is_korean ||
+ map->enc->is_tradchinese ||
+ map->enc->is_simplechinese )
+ dumpintoper(private,1,(12<<8)|17);
+ if ( (pt=PSDictHasEntry(sf->private,"ExpansionFactor"))!=NULL )
+ DumpStrDouble(pt,private,(12<<8)+18);
+ if ( subrcnt!=0 )
+ dumpsizedint(private,false,ftell(private)+3+1,19); /* Subrs */
+
+ if ( subfont==-1 )
+ at->privatelen = ftell(private);
+ else
+ at->fds[subfont].privatelen = ftell(private);
+}
+
+/* When we exit this the topdict is not complete, we still need to fill in */
+/* values for charset,encoding,charstrings and private. Then we need to go */
+/* back and fill in the table length (at lenpos) */
+static void dumpcfftopdict(SplineFont *sf,struct alltabs *at) {
+ char *pt, *end;
+ FILE *cfff = at->cfff;
+ DBounds b;
+
+ putshort(cfff,1); /* One top dict */
+ putc('\2',cfff); /* Offset size */
+ putshort(cfff,1); /* Offset to topdict */
+ at->lenpos = ftell(cfff);
+ putshort(cfff,0); /* placeholder for final position (final offset in index points beyond last element) */
+ dumpsid(cfff,at,sf->version,0);
+ dumpsid(cfff,at,sf->copyright,1);
+ dumpsid(cfff,at,sf->fullname?sf->fullname:sf->fontname,2);
+ dumpsid(cfff,at,sf->familyname,3);
+ dumpsid(cfff,at,sf->weight,4);
+ if ( at->gi.fixed_width>0 ) dumpintoper(cfff,1,(12<<8)|1);
+ if ( sf->italicangle!=0 ) dumpdbloper(cfff,sf->italicangle,(12<<8)|2);
+ if ( sf->upos!=-100 ) dumpdbloper(cfff,sf->upos,(12<<8)|3);
+ if ( sf->uwidth!=50 ) dumpdbloper(cfff,sf->uwidth,(12<<8)|4);
+ if ( sf->strokedfont ) {
+ dumpintoper(cfff,2,(12<<8)|5);
+ dumpdbloper(cfff,sf->strokewidth,(12<<8)|8);
+ }
+ /* We'll never set CharstringType */
+ if ( sf->ascent+sf->descent!=1000 ) {
+ dumpdbl(cfff,1.0/(sf->ascent+sf->descent));
+ dumpint(cfff,0);
+ dumpint(cfff,0);
+ dumpdbl(cfff,1.0/(sf->ascent+sf->descent));
+ dumpint(cfff,0);
+ dumpintoper(cfff,0,(12<<8)|7);
+ }
+ if ( sf->uniqueid!=-1 && sf->use_uniqueid )
+ dumpintoper(cfff, sf->uniqueid?sf->uniqueid:4000000 + (rand()&0x3ffff), 13 );
+ SplineFontLayerFindBounds(sf,at->gi.layer,&b);
+ at->gi.xmin = b.minx;
+ at->gi.ymin = b.miny;
+ at->gi.xmax = b.maxx;
+ at->gi.ymax = b.maxy;
+ dumpdbl(cfff,floor(b.minx));
+ dumpdbl(cfff,floor(b.miny));
+ dumpdbl(cfff,ceil(b.maxx));
+ dumpdbloper(cfff,ceil(b.maxy),5);
+ /* We'll never set StrokeWidth */
+ if ( sf->xuid!=NULL && sf->use_xuid ) {
+ pt = sf->xuid; if ( *pt=='[' ) ++pt;
+ while ( *pt && *pt!=']' ) {
+ dumpint(cfff,strtol(pt,&end,10));
+ if ( pt==end ) /* garbage in XUID */
+ break;
+ for ( pt = end; *pt==' '; ++pt );
+ }
+ putc(14,cfff);
+ if ( sf->changed_since_xuidchanged )
+ SFIncrementXUID(sf);
+ }
+ /* Offset to charset (oper=15) needed here */
+ /* Offset to encoding (oper=16) needed here (not for CID )*/
+ /* Offset to charstrings (oper=17) needed here */
+ /* Length of, and Offset to private (oper=18) needed here (not for CID )*/
+}
+
+static int dumpcffdict(SplineFont *sf,struct alltabs *at) {
+ FILE *fdarray = at->fdarray;
+ int pstart;
+ /* according to the PSRef Man v3, only fontname, fontmatrix and private */
+ /* appear in this dictionary */
+
+ dumpsid(fdarray,at,sf->fontname,(12<<8)|38);
+ if ( sf->ascent+sf->descent!=1000 ) {
+ dumpdbl(fdarray,1.0/(sf->ascent+sf->descent));
+ dumpint(fdarray,0);
+ dumpint(fdarray,0);
+ dumpdbl(fdarray,1.0/(sf->ascent+sf->descent));
+ dumpint(fdarray,0);
+ dumpintoper(fdarray,0,(12<<8)|7);
+ }
+ pstart = ftell(fdarray);
+ dumpsizedint(fdarray,false,0,-1); /* private length */
+ dumpsizedint(fdarray,true,0,18); /* private offset */
+return( pstart );
+}
+
+static void dumpcffdictindex(SplineFont *sf,struct alltabs *at) {
+ int i;
+ int pos;
+
+ putshort(at->fdarray,sf->subfontcnt);
+ putc('\2',at->fdarray); /* DICTs aren't very big, and there are at most 255 */
+ putshort(at->fdarray,1); /* Offset to first dict */
+ for ( i=0; i<sf->subfontcnt; ++i )
+ putshort(at->fdarray,0); /* Dump offset placeholders (note there's one extra to mark the end) */
+ pos = ftell(at->fdarray)-1;
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ at->fds[i].fillindictmark = dumpcffdict(sf->subfonts[i],at);
+ at->fds[i].eodictmark = ftell(at->fdarray);
+ if ( at->fds[i].eodictmark>65536 )
+ IError("The DICT INDEX got too big, result won't work");
+ }
+ fseek(at->fdarray,2*sizeof(short)+sizeof(char),SEEK_SET);
+ for ( i=0; i<sf->subfontcnt; ++i )
+ putshort(at->fdarray,at->fds[i].eodictmark-pos);
+ fseek(at->fdarray,0,SEEK_END);
+}
+
+static void dumpcffcidtopdict(SplineFont *sf,struct alltabs *at) {
+ char *pt, *end;
+ FILE *cfff = at->cfff;
+ DBounds b;
+ int cidcnt=0, k;
+
+ for ( k=0; k<sf->subfontcnt; ++k )
+ if ( sf->subfonts[k]->glyphcnt>cidcnt ) cidcnt = sf->subfonts[k]->glyphcnt;
+
+ putshort(cfff,1); /* One top dict */
+ putc('\2',cfff); /* Offset size */
+ putshort(cfff,1); /* Offset to topdict */
+ at->lenpos = ftell(cfff);
+ putshort(cfff,0); /* placeholder for final position */
+ dumpsid(cfff,at,sf->cidregistry,-1);
+ dumpsid(cfff,at,sf->ordering,-1);
+ dumpintoper(cfff,sf->supplement,(12<<8)|30); /* ROS operator must be first */
+ dumpdbloper(cfff,sf->cidversion,(12<<8)|31);
+ dumpintoper(cfff,cidcnt,(12<<8)|34);
+ if ( sf->use_uniqueid )
+ dumpintoper(cfff, sf->uniqueid?sf->uniqueid:4000000 + (rand()&0x3ffff), (12<<8)|35 );
+
+ dumpsid(cfff,at,sf->copyright,1);
+ dumpsid(cfff,at,sf->fullname?sf->fullname:sf->fontname,2);
+ dumpsid(cfff,at,sf->familyname,3);
+ dumpsid(cfff,at,sf->weight,4);
+ /* FontMatrix (identity here, real ones in sub fonts)*/
+ /* Actually there is no fontmatrix in the adobe cid font I'm looking at */
+ /* which means it should default to [.001...] but it doesn't so the */
+ /* docs aren't completely accurate */
+ /* I now see I've no idea what the FontMatrix means in a CID keyed font */
+ /* it seems to be ignored everywhere, so we omit it */
+
+ CIDLayerFindBounds(sf,at->gi.layer,&b);
+ at->gi.xmin = b.minx;
+ at->gi.ymin = b.miny;
+ at->gi.xmax = b.maxx;
+ at->gi.ymax = b.maxy;
+ dumpdbl(cfff,floor(b.minx));
+ dumpdbl(cfff,floor(b.miny));
+ dumpdbl(cfff,ceil(b.maxx));
+ dumpdbloper(cfff,ceil(b.maxy),5);
+ /* We'll never set StrokeWidth */
+ if ( sf->xuid!=NULL && sf->use_xuid ) {
+ pt = sf->xuid; if ( *pt=='[' ) ++pt;
+ while ( *pt && *pt!=']' ) {
+ dumpint(cfff,strtol(pt,&end,10));
+ for ( pt = end; *pt==' '; ++pt );
+ }
+ putc(14,cfff);
+ if ( sf->changed_since_xuidchanged )
+ SFIncrementXUID(sf);
+ }
+ /* Acrobat doesn't seem to care about a private dict here. Ghostscript */
+ /* dies. Tech Note: 5176.CFF.PDF, top of page 23 says: */
+ /* A Private DICT is required, but may be specified as having */
+ /* a length of 0 if there are no non-default values to be stored*/
+ /* No indication >where< it is required. I assumed everywhere. Perhaps */
+ /* just in basefonts? */
+ /* Omit it. */
+
+ /* Offset to charset (oper=15) needed here */
+ /* Offset to charstrings (oper=17) needed here */
+ /* Offset to FDArray (oper=12,36) needed here */
+ /* Offset to FDSelect (oper=12,37) needed here */
+}
+
+static int isStdEncoding(SplineFont *sf,EncMap *map) {
+ int i;
+
+ for ( i=0; i<256 && i<map->enccount; ++i ) if ( map->map[i]!=-1 && sf->glyphs[map->map[i]]!=NULL )
+ if ( sf->glyphs[map->map[i]]->unicodeenc!=-1 )
+ if ( sf->glyphs[map->map[i]]->unicodeenc!=unicode_from_adobestd[i] )
+return( 0 );
+
+return( 1 );
+}
+
+static void finishup(SplineFont *sf,struct alltabs *at) {
+ int strlen, shlen, glen,enclen,csetlen,cstrlen,prvlen;
+ int base, eotop, strhead;
+ int output_enc = ( at->format==ff_cff && !isStdEncoding(sf,at->map));
+
+ storesid(at,NULL); /* end the strings index */
+ strlen = ftell(at->sidf) + (shlen = ftell(at->sidh));
+ glen = sizeof(short); /* Single entry: 0, no globals */
+ enclen = ftell(at->encoding);
+ csetlen = ftell(at->charset);
+ cstrlen = ftell(at->charstrings);
+ prvlen = ftell(at->private);
+ base = ftell(at->cfff);
+ if ( base+6*3+strlen+glen+enclen+csetlen+cstrlen+prvlen > 32767 ) {
+ at->cfflongoffset = true;
+ base += 5*5+4;
+ } else
+ base += 5*3+4;
+ strhead = 2+(at->sidcnt>1);
+ base += strhead;
+
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen,15); /* Charset */
+ if ( output_enc ) /* encoding offset */
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen,16); /* encoding offset */
+ else {
+ dumpsizedint(at->cfff,at->cfflongoffset,0,16);
+ enclen = 0;
+ }
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen+enclen,17);/* charstrings */
+ dumpsizedint(at->cfff,at->cfflongoffset,at->privatelen,-1);
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen+enclen+cstrlen,18); /* private size */
+ eotop = base-strhead-at->lenpos-1;
+ if ( at->cfflongoffset ) {
+ fseek(at->cfff,3,SEEK_SET);
+ putc(4,at->cfff);
+ }
+ fseek(at->cfff,at->lenpos,SEEK_SET);
+ putshort(at->cfff,eotop);
+ fseek(at->cfff,0,SEEK_END);
+
+ /* String Index */
+ putshort(at->cfff,at->sidcnt-1);
+ if ( at->sidcnt!=1 ) { /* Everybody gets an added NULL */
+ putc(at->sidlongoffset?4:2,at->cfff);
+ if ( !ttfcopyfile(at->cfff,at->sidh,base,"CFF-StringBase")) at->error = true;
+ if ( !ttfcopyfile(at->cfff,at->sidf,base+shlen,"CFF-StringData")) at->error = true;
+ }
+
+ /* Global Subrs */
+ putshort(at->cfff,0);
+
+ /* Charset */
+ if ( !ttfcopyfile(at->cfff,at->charset,base+strlen+glen,"CFF-Charset")) at->error = true;
+
+ /* Encoding */
+ if ( !ttfcopyfile(at->cfff,at->encoding,base+strlen+glen+csetlen,"CFF-Encoding")) at->error = true;
+
+ /* Char Strings */
+ if ( !ttfcopyfile(at->cfff,at->charstrings,base+strlen+glen+csetlen+enclen,"CFF-CharStrings")) at->error = true;
+
+ /* Private & Subrs */
+ if ( !ttfcopyfile(at->cfff,at->private,base+strlen+glen+csetlen+enclen+cstrlen,"CFF-Private")) at->error = true;
+}
+
+static void finishupcid(SplineFont *sf,struct alltabs *at) {
+ int strlen, shlen, glen,csetlen,cstrlen,fdsellen,fdarrlen,prvlen;
+ int base, eotop, strhead;
+ int i;
+
+ storesid(at,NULL); /* end the strings index */
+ strlen = ftell(at->sidf) + (shlen = ftell(at->sidh));
+ glen = ftell(at->globalsubrs);
+ /* No encodings */
+ csetlen = ftell(at->charset);
+ fdsellen = ftell(at->fdselect);
+ cstrlen = ftell(at->charstrings);
+ fdarrlen = ftell(at->fdarray);
+ base = ftell(at->cfff);
+
+ at->cfflongoffset = true;
+ base += 5*4+4+2; /* two of the opers below are two byte opers */
+ strhead = 2+(at->sidcnt>1);
+ base += strhead;
+
+ prvlen = 0;
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ fseek(at->fdarray,at->fds[i].fillindictmark,SEEK_SET);
+ dumpsizedint(at->fdarray,false,at->fds[i].privatelen,-1); /* Private len */
+ dumpsizedint(at->fdarray,true,base+strlen+glen+csetlen+fdsellen+cstrlen+fdarrlen+prvlen,18); /* Private offset */
+ prvlen += ftell(at->fds[i].private); /* private & subrs */
+ }
+
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen,15); /* charset */
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen,(12<<8)|37); /* fdselect */
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen+fdsellen,17); /* charstrings */
+ dumpsizedint(at->cfff,at->cfflongoffset,base+strlen+glen+csetlen+fdsellen+cstrlen,(12<<8)|36); /* fdarray */
+ eotop = base-strhead-at->lenpos-1;
+ fseek(at->cfff,at->lenpos,SEEK_SET);
+ putshort(at->cfff,eotop);
+ fseek(at->cfff,0,SEEK_END);
+
+ /* String Index */
+ putshort(at->cfff,at->sidcnt-1);
+ if ( at->sidcnt!=1 ) { /* Everybody gets an added NULL */
+ putc(at->sidlongoffset?4:2,at->cfff);
+ if ( !ttfcopyfile(at->cfff,at->sidh,base,"CFF-StringBase")) at->error = true;
+ if ( !ttfcopyfile(at->cfff,at->sidf,base+shlen,"CFF-StringData")) at->error = true;
+ }
+
+ /* Global Subrs */
+ if ( !ttfcopyfile(at->cfff,at->globalsubrs,base+strlen,"CFF-GlobalSubrs")) at->error = true;
+
+ /* Charset */
+ if ( !ttfcopyfile(at->cfff,at->charset,base+strlen+glen,"CFF-Charset")) at->error = true;
+
+ /* FDSelect */
+ if ( !ttfcopyfile(at->cfff,at->fdselect,base+strlen+glen+csetlen,"CFF-FDSelect")) at->error = true;
+
+ /* Char Strings */
+ if ( !ttfcopyfile(at->cfff,at->charstrings,base+strlen+glen+csetlen+fdsellen,"CFF-CharStrings")) at->error = true;
+
+ /* FDArray (DICT Index) */
+ if ( !ttfcopyfile(at->cfff,at->fdarray,base+strlen+glen+csetlen+fdsellen+cstrlen,"CFF-FDArray")) at->error = true;
+
+ /* Private & Subrs */
+ prvlen = 0;
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ int temp = ftell(at->fds[i].private);
+ if ( !ttfcopyfile(at->cfff,at->fds[i].private,
+ base+strlen+glen+csetlen+fdsellen+cstrlen+fdarrlen+prvlen,"CFF-PrivateSubrs")) at->error = true;
+ prvlen += temp;
+ }
+
+ free(at->fds);
+}
+
+static int dumpcffhmtx(struct alltabs *at,SplineFont *sf,int bitmaps) {
+ DBounds b;
+ SplineChar *sc;
+ int i,cnt;
+ int dovmetrics = sf->hasvmetrics;
+ int width = at->gi.fixed_width;
+
+ at->gi.hmtx = tmpfile2();
+ if ( dovmetrics )
+ at->gi.vmtx = tmpfile2();
+ FigureFullMetricsEnd(sf,&at->gi,bitmaps); /* Bitmap fonts use ttf convention of 3 magic glyphs */
+ if ( at->gi.bygid[0]!=-1 && (sf->glyphs[at->gi.bygid[0]]->width==width || width<=0 )) {
+ putshort(at->gi.hmtx,sf->glyphs[at->gi.bygid[0]]->width);
+ SplineCharLayerFindBounds(sf->glyphs[at->gi.bygid[0]],at->gi.layer,&b);
+ putshort(at->gi.hmtx,b.minx);
+ if ( dovmetrics ) {
+ putshort(at->gi.vmtx,sf->glyphs[at->gi.bygid[0]]->vwidth);
+ putshort(at->gi.vmtx,/*sf->vertical_origin-*/b.miny);
+ }
+ } else {
+ putshort(at->gi.hmtx,width<=0?(sf->ascent+sf->descent)/2:width);
+ putshort(at->gi.hmtx,0);
+ if ( dovmetrics ) {
+ putshort(at->gi.vmtx,sf->ascent+sf->descent);
+ putshort(at->gi.vmtx,0);
+ }
+ }
+ cnt = 1;
+ if ( bitmaps ) {
+ if ( width<=0 ) width = (sf->ascent+sf->descent)/3;
+ putshort(at->gi.hmtx,width);
+ putshort(at->gi.hmtx,0);
+ if ( dovmetrics ) {
+ putshort(at->gi.vmtx,sf->ascent+sf->descent);
+ putshort(at->gi.vmtx,0);
+ }
+ putshort(at->gi.hmtx,width);
+ putshort(at->gi.hmtx,0);
+ if ( dovmetrics ) {
+ putshort(at->gi.vmtx,sf->ascent+sf->descent);
+ putshort(at->gi.vmtx,0);
+ }
+ cnt = 3;
+ }
+
+ for ( i=cnt; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ sc = sf->glyphs[at->gi.bygid[i]];
+ if ( SCWorthOutputting(sc) ) {
+ if ( i<=at->gi.lasthwidth )
+ putshort(at->gi.hmtx,sc->width);
+ SplineCharLayerFindBounds(sc,at->gi.layer,&b);
+ putshort(at->gi.hmtx,b.minx);
+ if ( dovmetrics ) {
+ if ( i<=at->gi.lastvwidth )
+ putshort(at->gi.vmtx,sc->vwidth);
+ putshort(at->gi.vmtx,/*sf->vertical_origin-*/b.maxy);
+ }
+ ++cnt;
+ if ( i==at->gi.lasthwidth )
+ at->gi.hfullcnt = cnt;
+ if ( i==at->gi.lastvwidth )
+ at->gi.vfullcnt = cnt;
+ }
+ }
+ at->gi.hmtxlen = ftell(at->gi.hmtx);
+ if ( at->gi.hmtxlen&2 ) putshort(at->gi.hmtx,0);
+ if ( dovmetrics ) {
+ at->gi.vmtxlen = ftell(at->gi.vmtx);
+ if ( at->gi.vmtxlen&2 ) putshort(at->gi.vmtx,0);
+ }
+
+ at->gi.maxp->numGlyphs = cnt;
+return( true );
+}
+
+static void dumpcffcidhmtx(struct alltabs *at,SplineFont *_sf) {
+ DBounds b;
+ SplineChar *sc;
+ int cid,i,cnt=0,max;
+ SplineFont *sf;
+ int dovmetrics = _sf->hasvmetrics;
+
+ at->gi.hmtx = tmpfile2();
+ if ( dovmetrics )
+ at->gi.vmtx = tmpfile2();
+ FigureFullMetricsEnd(_sf,&at->gi,false);
+
+ max = 0;
+ for ( i=0; i<_sf->subfontcnt; ++i )
+ if ( max<_sf->subfonts[i]->glyphcnt )
+ max = _sf->subfonts[i]->glyphcnt;
+ for ( cid = 0; cid<max; ++cid ) {
+ for ( i=0; i<_sf->subfontcnt; ++i ) {
+ sf = _sf->subfonts[i];
+ if ( cid<sf->glyphcnt && SCWorthOutputting(sf->glyphs[cid]))
+ break;
+ }
+ if ( i!=_sf->subfontcnt ) {
+ sc = sf->glyphs[cid];
+ if ( sc->ttf_glyph<=at->gi.lasthwidth )
+ putshort(at->gi.hmtx,sc->width);
+ SplineCharLayerFindBounds(sc,at->gi.layer,&b);
+ putshort(at->gi.hmtx,b.minx);
+ if ( dovmetrics ) {
+ if ( sc->ttf_glyph<=at->gi.lastvwidth )
+ putshort(at->gi.vmtx,sc->vwidth);
+ putshort(at->gi.vmtx,/*sf->vertical_origin-*/b.maxy);
+ }
+ ++cnt;
+ if ( sc->ttf_glyph==at->gi.lasthwidth )
+ at->gi.hfullcnt = cnt;
+ if ( sc->ttf_glyph==at->gi.lastvwidth )
+ at->gi.vfullcnt = cnt;
+ } else if ( cid==0 ) {
+ /* Create a dummy entry for .notdef */
+ sf = _sf->subfonts[0];
+ putshort(at->gi.hmtx,sf->ascent+sf->descent);
+ putshort(at->gi.hmtx,0);
+ ++cnt;
+ if ( dovmetrics ) {
+ putshort(at->gi.vmtx,sf->ascent+sf->descent);
+ putshort(at->gi.vmtx,0);
+ }
+ }
+ }
+ at->gi.hmtxlen = ftell(at->gi.hmtx);
+ if ( at->gi.hmtxlen&2 ) putshort(at->gi.hmtx,0);
+ if ( dovmetrics ) {
+ at->gi.vmtxlen = ftell(at->gi.vmtx);
+ if ( at->gi.vmtxlen&2 ) putshort(at->gi.vmtx,0);
+ }
+
+ at->gi.maxp->numGlyphs = cnt;
+}
+
+static int dumptype2glyphs(SplineFont *sf,struct alltabs *at) {
+ int i;
+ struct pschars *subrs, *chrs;
+
+ at->cfff = tmpfile2();
+ at->sidf = tmpfile2();
+ at->sidh = tmpfile2();
+ at->charset = tmpfile2();
+ at->encoding = tmpfile2();
+ at->private = tmpfile2();
+
+ dumpcffheader(at->cfff);
+ dumpcffnames(sf,at->cfff);
+ dumpcffcharset(sf,at);
+ ff_progress_change_stages(2+at->gi.strikecnt);
+
+ ATFigureDefWidth(sf,at,-1);
+ if ((chrs =SplineFont2ChrsSubrs2(sf,at->nomwid,at->defwid,at->gi.bygid,at->gi.gcnt,at->gi.flags,&subrs,at->gi.layer))==NULL )
+return( false );
+ dumpcffprivate(sf,at,-1,subrs->next);
+ if ( subrs->next!=0 )
+ _dumpcffstrings(at->private,subrs);
+ ff_progress_next_stage();
+ at->charstrings = dumpcffstrings(chrs);
+ PSCharsFree(subrs);
+ if ( at->charstrings == NULL )
+return( false );
+ if ( at->format==ff_cff && !isStdEncoding(sf,at->map))
+ dumpcffencoding(sf,at); /* Do this after we've assigned glyph ids */
+ dumpcfftopdict(sf,at);
+ finishup(sf,at);
+
+ at->cfflen = ftell(at->cfff);
+ if ( at->cfflen&3 ) {
+ for ( i=4-(at->cfflen&3); i>0; --i )
+ putc('\0',at->cfff);
+ }
+
+ if ( at->format!=ff_cff )
+ dumpcffhmtx(at,sf,false);
+ free(at->gn_sid); at->gn_sid=NULL;
+return( true );
+}
+
+static int dumpcidglyphs(SplineFont *sf,struct alltabs *at) {
+ int i;
+ struct pschars *glbls = NULL, *chrs;
+
+ at->cfff = tmpfile2();
+ at->sidf = tmpfile2();
+ at->sidh = tmpfile2();
+ at->charset = tmpfile2();
+ at->fdselect = tmpfile2();
+ at->fdarray = tmpfile2();
+ at->globalsubrs = tmpfile2();
+
+ at->fds = calloc(sf->subfontcnt,sizeof(struct fd2data));
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ at->fds[i].private = tmpfile2();
+ ATFigureDefWidth(sf->subfonts[i],at,i);
+ }
+ if ( (chrs = CID2ChrsSubrs2(sf,at->fds,at->gi.flags,&glbls,at->gi.layer))==NULL )
+return( false );
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ dumpcffprivate(sf->subfonts[i],at,i,at->fds[i].subrs->next);
+ if ( at->fds[i].subrs->next!=0 )
+ _dumpcffstrings(at->fds[i].private,at->fds[i].subrs);
+ PSCharsFree(at->fds[i].subrs);
+ }
+ _dumpcffstrings(at->globalsubrs,glbls);
+ PSCharsFree(glbls);
+
+ dumpcffheader(at->cfff);
+ dumpcffnames(sf,at->cfff);
+ dumpcffcidset(at);
+ dumpcfffdselect(sf,at);
+ dumpcffdictindex(sf,at);
+ if ( (at->charstrings = dumpcffstrings(chrs))==NULL )
+return( false );
+ dumpcffcidtopdict(sf,at);
+ finishupcid(sf,at);
+
+ at->cfflen = ftell(at->cfff);
+ if ( at->cfflen&3 ) {
+ for ( i=4-(at->cfflen&3); i>0; --i )
+ putc('\0',at->cfff);
+ }
+
+ if ( at->format!=ff_cffcid )
+ dumpcffcidhmtx(at,sf);
+return( true );
+}
+
+static int AnyInstructions(SplineFont *sf) {
+ int i;
+
+ if ( sf->subfontcnt!=0 ) {
+ for ( i=0; i<sf->subfontcnt; ++i )
+ if ( AnyInstructions(sf->subfonts[i]))
+return( true );
+ } else {
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ if ( sf->glyphs[i]->ttf_instrs_len!=0 )
+return( true );
+ }
+ }
+return( false );
+}
+
+void cvt_unix_to_1904( long long time, int32 result[2]) {
+ uint32 date1970[4], tm[4];
+ uint32 year[2];
+ int i;
+
+ tm[0] = time &0xffff;
+ tm[1] = (time>>16)&0xffff;
+ tm[2] = (time>>32)&0xffff;
+ tm[3] = (time>>48)&0xffff;
+ memset(date1970,0,sizeof(date1970));
+ year[0] = (60*60*24*365L)&0xffff;
+ year[1] = (60*60*24*365L)>>16;
+ for ( i=1904; i<1970; ++i ) {
+ date1970[0] += year[0];
+ date1970[1] += year[1];
+ if ( (i&3)==0 && (i%100!=0 || i%400==0))
+ date1970[0] += 24*60*60L; /* Leap year */
+ date1970[1] += (date1970[0]>>16);
+ date1970[0] &= 0xffff;
+ date1970[2] += date1970[1]>>16;
+ date1970[1] &= 0xffff;
+ date1970[3] += date1970[2]>>16;
+ date1970[2] &= 0xffff;
+ }
+
+ for ( i=0; i<3; ++i ) {
+ tm[i] += date1970[i];
+ tm[i+1] += tm[i]>>16;
+ tm[i] &= 0xffff;
+ }
+ tm[3] -= date1970[3];
+
+ result[0] = (tm[1]<<16) | tm[0];
+ result[1] = (tm[3]<<16) | tm[2];
+}
+
+static void sethead(struct head *head,SplineFont *sf,struct alltabs *at,
+ enum fontformat format, int32 *bsizes) {
+ int i, lr, rl, indic_rearrange, arabic;
+ ASM *sm;
+ struct ttflangname *useng;
+ float vn;
+
+ if ( at->gi.xmin==15000 ) at->gi.xmin = 0;
+ if ( at->gi.ymin==15000 ) at->gi.ymin = 0;
+ if ( bsizes!=NULL && format==ff_none ) {
+ if ( sf->ascent >at->gi.ymax ) at->gi.ymax = sf->ascent;
+ if ( -sf->descent<at->gi.ymin ) at->gi.ymin = -sf->descent;
+ }
+ head->xmin = at->gi.xmin;
+ head->ymin = at->gi.ymin;
+ head->xmax = at->gi.xmax;
+ head->ymax = at->gi.ymax;
+
+ lr = rl = arabic = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[i]];
+ int uni = sc->unicodeenc ;
+ if ( SCRightToLeft(sc) )
+ rl = 1;
+ else if (( uni!=-1 && uni<0x10000 && islefttoright(uni)) ||
+ (uni>=0x10300 && uni<0x107ff))
+ lr = 1;
+ if ( SCScriptFromUnicode(sc)==CHR('a','r','a','b') )
+ arabic = 1;
+ }
+
+ head->version = 0x00010000;
+ head->revision = sf->sfntRevision;
+ if ( sf->sfntRevision==sfntRevisionUnset ) {
+ head->revision = 0x00010000;
+ for ( useng=sf->names; useng!=NULL; useng=useng->next )
+ if ( useng->lang==0x409 )
+ break;
+ if ( useng!=NULL && useng->names[ttf_version]!=NULL &&
+ sscanf(useng->names[ttf_version], "Version %f", &vn)==1 ) {
+ head->revision = vn*65536;
+ } else if ( sf->subfontcnt!=0 ) {
+ int val, mant;
+ val = floor(sf->cidversion);
+ mant = floor(65536.*((double)sf->cidversion-val));
+ head->revision = (val<<16) | mant;
+ } else if ( sf->version!=NULL ) {
+ char *pt=sf->version;
+ double dval;
+ int val, mant;
+ while ( *pt && !isdigit(*pt) && *pt!='.' ) ++pt;
+ if ( *pt ) {
+ dval = strtod(pt,NULL);
+ val = floor(dval);
+ mant = floor(65536.*(dval-val));
+ head->revision = (val<<16) | mant;
+ }
+ }
+ }
+ head->checksumAdj = 0;
+ head->magicNum = 0x5f0f3cf5;
+ head->flags = 8|2|1; /* baseline at 0, lsbline at 0, round ppem */
+ if ( format>=ff_ttf && format<=ff_ttfdfont ) {
+ if ( AnyInstructions(sf) )
+ head->flags = 0x10|8|4|2|1; /* baseline at 0, lsbline at 0, round ppem, instructions may depend on point size, instructions change metrics */
+ }
+ /* If a font contains embedded bitmaps, and if some of those bitmaps have */
+ /* a different advance width from that expected by scaling, then windows */
+ /* will only notice the fact if the 0x10 bit is set (even though this has*/
+ /* nothing to do with instructions) */
+/* Apple flags */
+ if ( sf->hasvmetrics )
+ head->flags |= (1<<5); /* designed to be layed out vertically */
+ /* Bit 6 must be zero */
+ if ( arabic )
+ head->flags |= (1<<7);
+ if ( sf->sm )
+ head->flags |= (1<<8); /* has metamorphesis effects */
+ if ( rl )
+ head->flags |= (1<<9);
+ indic_rearrange = 0;
+ for ( sm = sf->sm; sm!=NULL; sm=sm->next )
+ if ( sm->type == asm_indic )
+ indic_rearrange = true;
+ if ( indic_rearrange )
+ head->flags |= (1<<10);
+/* End apple flags */
+ if ( sf->head_optimized_for_cleartype )
+ head->flags |= (1<<13);
+ head->emunits = sf->ascent+sf->descent;
+ head->macstyle = MacStyleCode(sf,NULL);
+ head->lowestreadable = 8;
+ head->locais32 = 1;
+ if ( at->gi.glyph_len<0x20000 )
+ head->locais32 = 0;
+
+ /* I assume we've always got some neutrals (spaces, punctuation) */
+ if ( lr && rl )
+ head->dirhint = 0;
+ else if ( rl )
+ head->dirhint = -2;
+ else
+ head->dirhint = 2;
+ if ( rl )
+ head->flags |= (1<<9); /* Apple documents this */
+ /* if there are any indic characters, set bit 10 */
+
+ cvt_unix_to_1904(sf->creationtime,head->createtime);
+ cvt_unix_to_1904(sf->modificationtime,head->modtime);
+}
+
+static void sethhead(struct hhead *hhead,struct hhead *vhead,struct alltabs *at, SplineFont *sf) {
+ int i, width, rbearing, height, bbearing;
+ int ymax, ymin, xmax, xmin, off;
+ DBounds bb;
+ /* Might as well fill in the vhead even if we don't use it */
+ /* we just won't dump it out if we don't want it */
+
+ width = 0x80000000; rbearing = 0x7fffffff; height = 0x80000000; bbearing=0x7fffffff;
+ xmax = ymax = 0x80000000; xmin = ymin = 0x7fffffff;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[i]];
+ SplineCharLayerFindBounds(sc,at->gi.layer,&bb);
+ if ( sc->width>width ) width = sc->width;
+ if ( sc->vwidth>height ) height = sc->vwidth;
+ if ( sc->width-bb.maxx < rbearing ) rbearing = sc->width-bb.maxx;
+ if ( sc->vwidth-bb.maxy < bbearing ) bbearing = sc->vwidth-bb.maxy;
+ if ( bb.maxy > ymax ) ymax = bb.maxy;
+ if ( bb.miny < ymin ) ymin = bb.miny;
+ if ( bb.maxx > xmax ) xmax = bb.maxx;
+ if ( bb.minx < xmin ) xmin = bb.minx;
+ }
+
+ if ( at->head.ymax>ymax ) ymax = at->head.ymax; /* If generated .notdef glyph is bigger than real glyphs */
+ if ( at->head.ymin<ymin ) ymin = at->head.ymin;
+
+ if ( ymax==0 && ymin==0 ) {
+ /* this can happen in a bitmap only font */
+ ymax = sf->ascent;
+ ymin = -sf->descent;
+ }
+ hhead->version = 0x00010000;
+ if ( sf->pfminfo.hheadascent_add )
+ hhead->ascender = ymax + sf->pfminfo.hhead_ascent;
+ else
+ hhead->ascender = sf->pfminfo.hhead_ascent;
+ if ( sf->pfminfo.hheaddescent_add )
+ hhead->descender = ymin + sf->pfminfo.hhead_descent;
+ else
+ hhead->descender = sf->pfminfo.hhead_descent;
+ hhead->linegap = sf->pfminfo.linegap;
+
+ vhead->version = 0x00011000;
+ off = (sf->ascent+sf->descent)/2;
+ vhead->ascender = xmax-off;
+ vhead->descender = xmin-off;
+ vhead->linegap = sf->pfminfo.linegap;
+
+ at->isfixed = at->gi.fixed_width>0;
+ hhead->maxwidth = width;
+ hhead->minlsb = at->head.xmin;
+ hhead->minrsb = rbearing;
+ /* Apple's ftxvalidator says the min sidebearing should be 0 even if it isn't */
+ if ( hhead->minlsb>0 ) hhead->minlsb = 0;
+ if ( hhead->minrsb>0 ) hhead->minrsb = 0;
+ hhead->maxextent = at->head.xmax;
+ if ( sf->italicangle==0 )
+ hhead->caretSlopeRise = 1;
+ else {
+ hhead->caretSlopeRise = 100;
+ hhead->caretSlopeRun = (int) rint(100*tan(-sf->italicangle*3.1415926535897/180.));
+ }
+
+ vhead->maxwidth = height;
+ vhead->minlsb = at->head.ymin;
+ vhead->minrsb = bbearing;
+ vhead->maxextent = at->head.ymax;
+ vhead->caretSlopeRise = 0;
+ vhead->caretSlopeRun = 1;
+ /* Are there vertical oblique fonts? */
+
+ hhead->numMetrics = at->gi.hfullcnt;
+ vhead->numMetrics = at->gi.vfullcnt;
+}
+
+static void OS2WeightCheck(struct pfminfo *pfminfo,char *weight) {
+ if ( weight==NULL ) {
+ /* default it */
+ } else if ( strstrmatch(weight,"medi")!=NULL ) {
+ pfminfo->weight = 500;
+ pfminfo->panose[2] = 6;
+ } else if ( strstrmatch(weight,"demi")!=NULL ||
+ strstrmatch(weight,"halb")!=NULL ||
+ (strstrmatch(weight,"semi")!=NULL &&
+ strstrmatch(weight,"bold")!=NULL) ) {
+ pfminfo->weight = 600;
+ pfminfo->panose[2] = 7;
+ } else if ( strstrmatch(weight,"bold")!=NULL ||
+ strstrmatch(weight,"fett")!=NULL ||
+ strstrmatch(weight,"gras")!=NULL ) {
+ pfminfo->weight = 700;
+ pfminfo->panose[2] = 8;
+ } else if ( strstrmatch(weight,"heavy")!=NULL ) {
+ pfminfo->weight = 800;
+ pfminfo->panose[2] = 9;
+ } else if ( strstrmatch(weight,"black")!=NULL ) {
+ pfminfo->weight = 900;
+ pfminfo->panose[2] = 10;
+ } else if ( strstrmatch(weight,"nord")!=NULL ) {
+ pfminfo->weight = 950;
+ pfminfo->panose[2] = 11;
+ } else if ( strstrmatch(weight,"thin")!=NULL ) {
+ pfminfo->weight = 100;
+ pfminfo->panose[2] = 2;
+ } else if ( strstrmatch(weight,"extra")!=NULL ||
+ strstrmatch(weight,"light")!=NULL ) {
+ pfminfo->weight = 200;
+ pfminfo->panose[2] = 3;
+ } else if ( strstrmatch(weight,"light")!=NULL ) {
+ pfminfo->weight = 300;
+ pfminfo->panose[2] = 4;
+ }
+}
+
+void SFDefaultOS2Simple(struct pfminfo *pfminfo,SplineFont *sf) {
+ pfminfo->pfmfamily = 0x11;
+ pfminfo->panose[0] = 2;
+ pfminfo->weight = 400;
+ pfminfo->panose[2] = 5;
+ pfminfo->width = 5;
+ pfminfo->panose[3] = 3;
+ pfminfo->winascent_add = pfminfo->windescent_add = true;
+ pfminfo->hheadascent_add = pfminfo->hheaddescent_add = true;
+ pfminfo->typoascent_add = pfminfo->typodescent_add = true;
+ pfminfo->os2_winascent = pfminfo->os2_windescent = 0;
+
+ if ( sf->subfonts!=NULL ) sf = sf->subfonts[0];
+ pfminfo->linegap = pfminfo->vlinegap = pfminfo->os2_typolinegap =
+ rint(.09*(sf->ascent+sf->descent));
+}
+
+void SFDefaultOS2SubSuper(struct pfminfo *pfminfo,int emsize,double italic_angle) {
+ double s = sin(italic_angle*3.1415926535897932/180.0);
+ pfminfo->os2_supysize = pfminfo->os2_subysize = .7*emsize;
+ pfminfo->os2_supxsize = pfminfo->os2_subxsize = .65*emsize;
+ pfminfo->os2_subyoff = .14*emsize;
+ pfminfo->os2_supyoff = .48*emsize;
+ pfminfo->os2_supxoff = s*pfminfo->os2_supyoff;
+ pfminfo->os2_subxoff = -s*pfminfo->os2_subyoff;
+ pfminfo->os2_strikeysize = 102*emsize/2048;
+ pfminfo->os2_strikeypos = 530*emsize/2048;
+}
+
+void SFDefaultOS2Info(struct pfminfo *pfminfo,SplineFont *sf,char *fontname) {
+ int samewid= -1;
+ char *weight = sf->cidmaster==NULL ? sf->weight : sf->cidmaster->weight;
+
+ if ( sf->pfminfo.pfmset ) {
+ if ( pfminfo!=&sf->pfminfo )
+ *pfminfo = sf->pfminfo;
+ if ( !pfminfo->panose_set ) {
+ struct pfminfo info;
+ memset(&info,0,sizeof(info));
+ sf->pfminfo.pfmset = false;
+ SFDefaultOS2Info(&info,sf,fontname);
+ sf->pfminfo.pfmset = true;
+ memcpy(pfminfo->panose,info.panose,sizeof(info.panose));
+ }
+ } else {
+ struct pfminfo hold;
+ if ( pfminfo->hheadset || pfminfo->vheadset )
+ hold = *pfminfo;
+ else
+ hold.hheadset = hold.vheadset = false;
+ memset(pfminfo,'\0',sizeof(*pfminfo));
+ SFDefaultOS2Simple(pfminfo,sf);
+ samewid = CIDOneWidth(sf);
+
+ pfminfo->pfmfamily = 0x10;
+ if ( samewid>0 ) {
+ pfminfo->pfmfamily = 0x30;
+ /* pfminfo->panose[3] = 9; */ /* This is done later */
+ } else if ( strstrmatch(fontname,"sans")!=NULL )
+ pfminfo->pfmfamily = 0x20;
+ else if ( strstrmatch(fontname,"script")!=NULL ) {
+ pfminfo->pfmfamily = 0x40;
+ pfminfo->panose[0] = 3;
+ }
+ if ( samewid==-1 )
+ pfminfo->pfmfamily |= 0x1; /* Else it assumes monospace */
+
+/* urw uses 4 character abreviations */
+ if ( weight!=NULL )
+ OS2WeightCheck(pfminfo,weight);
+ OS2WeightCheck(pfminfo,fontname);
+
+ if ( strstrmatch(fontname,"ultra")!=NULL &&
+ strstrmatch(fontname,"condensed")!=NULL ) {
+ pfminfo->width = 1;
+ pfminfo->panose[3] = 8;
+ } else if ( strstrmatch(fontname,"extra")!=NULL &&
+ strstrmatch(fontname,"condensed")!=NULL ) {
+ pfminfo->width = 2;
+ pfminfo->panose[3] = 8;
+ } else if ( strstrmatch(fontname,"semi")!=NULL &&
+ strstrmatch(fontname,"condensed")!=NULL ) {
+ pfminfo->width = 4;
+ pfminfo->panose[3] = 6;
+ } else if ( strstrmatch(fontname,"condensed")!=NULL ||
+ strstrmatch(fontname,"narrow")!=NULL ) {
+ pfminfo->width = 3;
+ pfminfo->panose[3] = 6;
+ } else if ( strstrmatch(fontname,"ultra")!=NULL &&
+ strstrmatch(fontname,"expanded")!=NULL ) {
+ pfminfo->width = 9;
+ pfminfo->panose[3] = 7;
+ } else if ( strstrmatch(fontname,"extra")!=NULL &&
+ strstrmatch(fontname,"expanded")!=NULL ) {
+ pfminfo->width = 8;
+ pfminfo->panose[3] = 7;
+ } else if ( strstrmatch(fontname,"semi")!=NULL &&
+ strstrmatch(fontname,"expanded")!=NULL ) {
+ pfminfo->width = 6;
+ pfminfo->panose[3] = 5;
+ } else if ( strstrmatch(fontname,"expanded")!=NULL ) {
+ pfminfo->width = 7;
+ pfminfo->panose[3] = 5;
+ }
+ if ( samewid>0 )
+ pfminfo->panose[3] = 9;
+ if ( hold.hheadset ) {
+ pfminfo->hheadset = true;
+ pfminfo->hheadascent_add = hold.hheadascent_add;
+ pfminfo->hheaddescent_add = hold.hheaddescent_add;
+ pfminfo->hhead_ascent = hold.hhead_ascent;
+ pfminfo->hhead_descent = hold.hhead_descent;
+ pfminfo->linegap = hold.linegap;
+ }
+ if ( hold.vheadset ) {
+ pfminfo->vheadset = true;
+ pfminfo->vlinegap = hold.vlinegap;
+ }
+ }
+ if ( !pfminfo->subsuper_set )
+ SFDefaultOS2SubSuper(pfminfo,sf->ascent+sf->descent,sf->italicangle);
+}
+
+int AlreadyMSSymbolArea(SplineFont *sf,EncMap *map) {
+ int i;
+ int acnt=0, pcnt=0;
+
+ for ( i=0; i<map->enccount && i<0xffff; ++i ) {
+ if ( map->map[i]!=-1 && sf->glyphs[map->map[i]]!=NULL &&
+ sf->glyphs[map->map[i]]->ttf_glyph!=-1 ) {
+ if ( i>=0xf000 && i<=0xf0ff )
+ ++pcnt;
+ else if ( i>=0x20 && i<=0xff )
+ ++acnt;
+ }
+ }
+return( pcnt>acnt );
+}
+
+void OS2FigureCodePages(SplineFont *sf, uint32 CodePage[2]) {
+ int i;
+ uint32 latin1[8];
+ int has_ascii, has_lineart=0, has_radical=0, has_summation=0;
+ int cp852=0, cp775=0, cp861=0, cp860=0, cp857=0, cp855=0, cp862=0, cp863=0;
+ int cp864=0, cp865=0, cp866=0, cp869=0, cp737=0, cp708=0, mac=0;
+ int k;
+ SplineChar *sc;
+ SplineFont *sub;
+
+ memset(latin1,0,sizeof(latin1));
+ k=0;
+ do {
+ sub = k<sf->subfontcnt? sf->subfonts[k] : sf;
+ for ( i=0; i<sub->glyphcnt; ++i ) if ( (sc = sub->glyphs[i])!=NULL ) {
+ if ( sc->unicodeenc<256 && sc->unicodeenc>=0 )
+ latin1[(sc->unicodeenc>>5)] |= 1<<(sc->unicodeenc&31);
+ }
+ ++k;
+ } while ( k<sf->subfontcnt );
+
+ has_ascii = latin1[1]==0xffffffff && latin1[2]==0xffffffff &&
+ (latin1[3]&0x7fffffff)==0x7fffffff; /* DEL is not a char */
+ CodePage[0] = CodePage[1] = 0;
+
+ k=0;
+ do {
+ sub = k<sf->subfontcnt? sf->subfonts[k] : sf;
+ for ( i=0; i<sub->glyphcnt; ++i ) if ( (sc = sub->glyphs[i])!=NULL ) {
+ int uni = sc->unicodeenc;
+ if ( uni==0xde && has_ascii )
+ CodePage[0] |= 1<<0; /* (ANSI) Latin1 */
+ else if ( uni==0x255a && has_ascii ) {
+ CodePage[1] |= 1U<<30; /* WE/latin1 */ /* Not latin1 at all */
+ CodePage[1] |= 1U<<31; /* US */
+ } else if ( uni==0x13d && has_ascii ) {
+ CodePage[0] |= 1<<1; /* latin2 */
+ ++cp852;
+ } else if ( uni==0x411 ) {
+ CodePage[0] |= 1<<2; /* cyrillic */
+ ++cp866;
+ ++cp855;
+ } else if ( uni==0x405 ) {
+ ++cp855;
+ } else if ( uni==0x386 ) {
+ CodePage[0] |= 1<<3; /* greek */
+ ++cp869;
+ ++cp737;
+ } else if ( uni==0x130 && has_ascii ) {
+ CodePage[0] |= 1<<4; /* turkish */
+ ++cp857;
+ } else if ( uni==0x5d0 ) {
+ CodePage[0] |= 1<<5; /* hebrew */
+ ++cp862;
+ } else if ( uni==0x631 ) {
+ CodePage[0] |= 1<<6; /* arabic */
+ ++cp864;
+ ++cp708;
+ } else if ( uni==0x157 && has_ascii ) {
+ CodePage[0] |= 1<<7; /* baltic */
+ ++cp775;
+ } else if ( uni==0x20AB && has_ascii ) {
+ CodePage[0] |= 1<<8; /* vietnamese */
+ } else if ( uni==0xe45 )
+ CodePage[0] |= 1<<16; /* thai */
+ else if ( uni==0x30a8 )
+ CodePage[0] |= 1<<17; /* japanese */
+ else if ( uni==0x3105 )
+ CodePage[0] |= 1<<18; /* simplified chinese */
+ else if ( uni==0x3131 )
+ CodePage[0] |= 1<<19; /* korean wansung */
+ else if ( uni==0x592E )
+ CodePage[0] |= 1<<20; /* traditional chinese */
+ else if ( uni==0xacf4 )
+ CodePage[0] |= 1<<21; /* korean Johab */
+ else if ( uni==0x2030 && has_ascii )
+ ++mac;
+ else if ( uni==0x2665 && has_ascii )
+ CodePage[0] |= 1U<<30; /* OEM */
+ /* the symbol bit doesn't mean it contains the glyphs in symbol */
+ /* rather that one is using a symbol encoding. Or that there are */
+ /* glyphs with unicode encoding between 0xf000 and 0xf0ff, in which */
+ /* case those guys should be given a symbol encoding */
+ /* There's a bug in the way otf fonts handle this (but not ttf) and */
+ /* they only seem to list the symbol glyphs. */
+ /* Hence we don't test uni==0x21d4 */
+ /* This doesn't work well either. In ttf fonts the bit is ignored */
+ /* in otf fonts the bit means "ignore all other bits" */
+ else if ( uni>=0xf000 && uni<=0xf0ff )
+ CodePage[0] |= 1U<<31; /* symbol */
+ else if ( uni==0xc5 && has_ascii )
+ ++cp865;
+ else if ( uni==0xe9 && has_ascii )
+ ++cp863;
+ else if ( uni==0xf5 && has_ascii )
+ ++cp860;
+ else if ( uni==0xfe && has_ascii )
+ ++cp861;
+ else if ( uni==0x2524 )
+ ++has_lineart;
+ else if ( uni==0x255c )
+ ++cp866;
+ else if ( uni==0xbd )
+ ++cp869;
+ else if ( uni==0x221A )
+ has_radical=true;
+ else if ( uni==0x2211 )
+ has_summation=true;
+ }
+ ++k;
+ } while ( k<sf->subfontcnt );
+ if ( cp852 && has_lineart )
+ CodePage[1] |= 1<<26; /* latin2 */
+ if ( cp775 && has_lineart )
+ CodePage[1] |= 1<<27; /* baltic */
+ if ( cp861 && has_lineart )
+ CodePage[1] |= 1<<22; /* MS-DOS Icelandic */
+ if ( cp866==2 && has_lineart )
+ CodePage[1] |= 1<<17; /* MS DOS Russian */
+ if ( cp855==2 && has_lineart )
+ CodePage[1] |= 1<<25; /* IBM Cyrillic */
+ if ( cp869==2 && has_lineart )
+ CodePage[1] |= 1<<16; /* IBM Greek */
+ if ( cp737 && has_lineart && has_radical )
+ CodePage[1] |= 1<<28; /* Greek, former 437 G */
+ if ( cp857 && has_lineart )
+ CodePage[1] |= 1<<24; /* IBM turkish */
+ if ( cp862 && has_lineart && has_radical )
+ CodePage[1] |= 1<<21; /* hebrew */
+ if ( cp864 && has_radical )
+ CodePage[1] |= 1<<19; /* arabic */
+ if ( cp708 && has_lineart)
+ CodePage[1] |= 1<<29; /* arabic; ASMO 708 */
+ if ( cp863 && has_lineart && has_radical )
+ CodePage[1] |= 1<<20; /* MS-DOS Canadian French */
+ if ( cp865 && has_lineart && has_radical )
+ CodePage[1] |= 1<<18; /* MS-DOS Nordic */
+ if ( cp860 && has_lineart && has_radical )
+ CodePage[1] |= 1<<23; /* MS-DOS Portuguese */
+ if ( mac && has_summation )
+ CodePage[0] |= 1U<<29; /* mac roman */
+}
+
+void OS2FigureUnicodeRanges(SplineFont *sf, uint32 Ranges[4]) {
+ int i, k;
+ unsigned j;
+ SplineChar *sc;
+ SplineFont *sub;
+
+ memset(Ranges,0,4*sizeof(uint32));
+ k=0;
+ do {
+ sub = k<sf->subfontcnt? sf->subfonts[k] : sf;
+ for ( i=0; i<sub->glyphcnt; ++i ) if ( (sc = sub->glyphs[i])!=NULL ) {
+ if ( SCWorthOutputting(sc) && sc->unicodeenc!=-1 ) {
+ if ( sc->unicodeenc > 0xffff )
+ Ranges[57>>5] |= (1<<(57&31));
+ for ( j=0; j<sizeof(uniranges)/sizeof(uniranges[0]); ++j )
+ if ( sc->unicodeenc>=uniranges[j][0] &&
+ sc->unicodeenc<=uniranges[j][1] ) {
+ int bit = uniranges[j][2];
+ Ranges[bit>>5] |= (1<<(bit&31));
+ break;
+ }
+ }
+ }
+ ++k;
+ } while ( k<sf->subfontcnt );
+}
+
+static void WinBB(SplineFont *sf,uint16 *winascent,uint16 *windescent,struct alltabs *at) {
+ /* The windows ascent/descent is calculated on the ymin/max of the */
+ /* glyphs in the so called ANSI character set. I'm going to pretend */
+ /* that's Latin1 with a few additions */
+ /* Well, that's what is documented, but the documentation says contradictory */
+ /* things. I believe that winAscent should be the same as hhea.ascent */
+
+ *winascent = at->head.ymax;
+ *windescent = -at->head.ymin; /* Should be positive */
+ if ( sf->cidmaster!=NULL )
+ sf = sf->cidmaster;
+
+ if ( sf->pfminfo.winascent_add )
+ *winascent += sf->pfminfo.os2_winascent;
+ else
+ *winascent = sf->pfminfo.os2_winascent;
+ if ( sf->pfminfo.windescent_add )
+ *windescent += sf->pfminfo.os2_windescent;
+ else
+ *windescent = sf->pfminfo.os2_windescent;
+}
+
+static void redohead(struct alltabs *at);
+
+static void setos2(struct os2 *os2,struct alltabs *at, SplineFont *sf,
+ enum fontformat format) {
+ int i,cnt1,cnt2,first,last,avg1,avg2,gid;
+ char *pt;
+ static int const weightFactors[26] = { 64, 14, 27, 35, 100, 20, 14, 42, 63,
+ 3, 6, 35, 20, 56, 56, 17, 4, 49, 56, 71, 31, 10, 18, 3, 18, 2 };
+ EncMap *map;
+ SplineChar *sc;
+ int modformat = format;
+
+ os2->version = 1;
+ if ( format==ff_otf || format==ff_otfcid )
+ os2->version = 3;
+ if ( sf->use_typo_metrics || sf->weight_width_slope_only )
+ os2->version = 4;
+ if ( sf->os2_version > os2->version )
+ os2->version = sf->os2_version;
+ if (( format>=ff_ttf && format<=ff_otfdfont) && (at->gi.flags&ttf_flag_symbol))
+ modformat = ff_ttfsym;
+
+ os2->weightClass = sf->pfminfo.weight;
+ os2->widthClass = sf->pfminfo.width;
+ os2->fstype = 0x8;
+ if ( sf->pfminfo.fstype!=-1 )
+ os2->fstype = sf->pfminfo.fstype;
+ if ( !sf->pfminfo.subsuper_set )
+ SFDefaultOS2SubSuper(&sf->pfminfo,sf->ascent+sf->descent,sf->italicangle);
+ os2->ysupYSize = sf->pfminfo.os2_supysize;
+ os2->ysubXSize = sf->pfminfo.os2_subxsize;
+ os2->ysubYSize = sf->pfminfo.os2_subysize;
+ os2->ysupXSize = sf->pfminfo.os2_supxsize;
+ os2->ysubYOff = sf->pfminfo.os2_subyoff;
+ os2->ysubXOff = sf->pfminfo.os2_subxoff;
+ os2->ysupXOff = sf->pfminfo.os2_supxoff;
+ os2->ysupYOff = sf->pfminfo.os2_supyoff;
+ os2->yStrikeoutSize = sf->pfminfo.os2_strikeysize;
+ os2->yStrikeoutPos = sf->pfminfo.os2_strikeypos;
+ if ( sf->pfminfo.stylemap!=-1 ) {
+ int changed = 0;
+ os2->fsSel = sf->pfminfo.stylemap;
+ /* Make sure fsSel and macStyle don't contradict */
+ if (at->head.macstyle&1 && !(os2->fsSel&32)) {at->head.macstyle &= 0x7E; changed=1;}
+ if (at->head.macstyle&2 && !(os2->fsSel&1)) {at->head.macstyle &= 0x7D; changed=1;}
+ if (changed) redohead(at);
+ } else {
+ os2->fsSel = (at->head.macstyle&1?32:0)|(at->head.macstyle&2?1:0);
+ if ( os2->fsSel==0 && sf->pfminfo.weight==400 )
+ os2->fsSel = 64; /* Regular */
+ }
+ if ( sf->fullname!=NULL && strstrmatch(sf->fullname,"outline")!=NULL )
+ os2->fsSel |= 8;
+ if ( os2->version>=4 ) {
+ if ( strstrmatch(sf->fontname,"Obli")!=NULL ) {
+ os2->fsSel &= ~1; /* Turn off Italic */
+ os2->fsSel |= 512; /* Turn on Oblique */
+ }
+ if ( sf->use_typo_metrics )
+ os2->fsSel |= 128; /* Don't use win ascent/descent for line spacing */
+ if ( sf->weight_width_slope_only )
+ os2->fsSel |= 256;
+ }
+/* David Lemon @Adobe.COM
+1) The sTypoAscender and sTypoDescender values should sum to 2048 in
+a 2048-unit font. They indicate the position of the em square
+relative to the baseline.
+GWW: Almost, sTypoAscender-sTypoDescender == EmSize
+
+2) The usWinAscent and usWinDescent values represent the maximum
+height and depth of specific glyphs within the font, and some
+applications will treat them as the top and bottom of the font
+bounding box. (the "ANSI" glyphs)
+GWW: That's what's documented. But it means non-ANSI glyphs get clipped. So the
+docs are wrong.
+*/
+ if ( sf->pfminfo.typoascent_add )
+ os2->ascender = sf->ascent + sf->pfminfo.os2_typoascent;
+ else
+ os2->ascender = sf->pfminfo.os2_typoascent;
+ if ( sf->pfminfo.typodescent_add )
+ os2->descender = -sf->descent + sf->pfminfo.os2_typodescent; /* Should be neg */
+ else
+ os2->descender = sf->pfminfo.os2_typodescent;
+ WinBB(sf,&os2->winascent,&os2->windescent,at);
+ os2->linegap = sf->pfminfo.os2_typolinegap;
+ os2->sFamilyClass = sf->pfminfo.os2_family_class;
+
+ avg1 = avg2 = last = 0; first = 0xffff;
+ cnt1 = cnt2 = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL ) {
+ if ( SCWorthOutputting(sc) && sc->unicodeenc!=-1 ) {
+ /* Don't include the dummy glyphs (.notdef, .null, etc.) they aren't */
+ /* really encoded. Don't include glyphs out of BMP, OS/2 uses shorts */
+ /* for the first/last char and can't represent them. */
+ /* If no BMP glyphs, then first should be 0xffff. If any outside */
+ /* BMP then last is 0xffff */
+ /* sc->ttf_glyph>2 is to skip the first few truetype glyphs but */
+ /* that doesn't work for cff files which only have .notdef to ignore */
+ if ( ( format>=ff_ttf && format<=ff_otfdfont && sc->ttf_glyph>2) ||
+ ( format>=ff_ttf && format<=ff_otfdfont && sc->ttf_glyph>0) ) {
+ if ( sc->unicodeenc<=0xffff ) {
+ if ( sc->unicodeenc<first ) first = sc->unicodeenc;
+ if ( sc->unicodeenc>last ) last = sc->unicodeenc;
+ } else {
+ last = 0xffff;
+ }
+ }
+ if ( sc->width!=0 ) {
+ avg2 += sc->width; ++cnt2;
+ }
+ if ( sc->unicodeenc==' ') {
+ avg1 += sc->width * 166; ++cnt1;
+ } else if (sc->unicodeenc>='a' && sc->unicodeenc<='z') {
+ avg1 += sc->width * weightFactors[sc->unicodeenc-'a']; ++cnt1;
+ }
+ }
+ }
+ if ( sf->pfminfo.hasunicoderanges )
+ memcpy(os2->unicoderange,sf->pfminfo.unicoderanges,sizeof(os2->unicoderange));
+ else
+ OS2FigureUnicodeRanges(sf,os2->unicoderange);
+ if ( modformat==ff_ttfsym ) /* MS Symbol font has this set to zero. Does it matter? */
+ memset(os2->unicoderange,0,sizeof(os2->unicoderange));
+
+ if ( sf->pfminfo.pfmset )
+ strncpy(os2->achVendID,sf->pfminfo.os2_vendor,4);
+ else if ( TTFFoundry!=NULL )
+ strncpy(os2->achVendID,TTFFoundry,4);
+ else
+ memcpy(os2->achVendID,"PfEd",4);
+ for ( pt=os2->achVendID; pt<os2->achVendID && *pt!='\0'; ++pt );
+ while ( pt<os2->achVendID ) *pt++ = ' '; /* Pad with spaces not NUL */
+
+ /* v1,2 & v3,4 have different ways of calculating avgCharWid. */
+ /* but I'm told that using the v3 way breaks display of CJK fonts in windows */
+ os2->avgCharWid = 500;
+ os2->v1_avgCharWid = os2->v3_avgCharWid = 0;
+ if ( cnt1==27 )
+ os2->v1_avgCharWid = avg1/1000;
+ if ( cnt2!=0 )
+ os2->v3_avgCharWid = avg2/cnt2;
+ memcpy(os2->panose,sf->pfminfo.panose,sizeof(os2->panose));
+ map = at->map;
+ if ( modformat==ff_ttfsym ) {
+ if ( sf->pfminfo.hascodepages )
+ memcpy(os2->ulCodePage,sf->pfminfo.codepages,sizeof(os2->ulCodePage));
+ else {
+ os2->ulCodePage[0] = 0x80000000;
+ os2->ulCodePage[1] = 0;
+ }
+ if ( AlreadyMSSymbolArea(sf,map)) {
+ first = 0xf0ff; last = 0;
+ for ( i=0xf020; i<map->enccount && i<=0xf0ff; ++i )
+ if ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL &&
+ sf->glyphs[gid]->ttf_glyph!=-1 ) {
+ if ( i<first ) first = i;
+ if ( i>last ) last = i;
+ }
+ for ( i=0; i<map->enccount && i<=255; ++i )
+ if ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL &&
+ sf->glyphs[gid]->ttf_glyph!=-1 ) {
+ if ( i+0xf000<first ) first = i+0xf000;
+ if ( i+0xf000>last ) last = i+0xf000;
+ }
+ os2->firstcharindex = first; /* This gets mapped to space */
+ os2->lastcharindex = last;
+ } else {
+ first = 255; last = 0;
+ for ( i=0; i<map->enccount && i<=255; ++i )
+ if ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL &&
+ sf->glyphs[gid]->ttf_glyph!=-1 ) {
+ if ( i<first ) first = i;
+ if ( i>last ) last = i;
+ }
+ for ( i=0xf020; i<map->enccount && i<=0xf0ff; ++i )
+ if ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL &&
+ sf->glyphs[gid]->ttf_glyph!=-1 ) {
+ if ( i-0xf000<first ) first = i-0xf000;
+ if ( i-0xf000>last ) last = i-0xf000;
+ }
+ if ( first<' ' ) first = ' ';
+ os2->firstcharindex = 0xf000 + first; /* This gets mapped to space */
+ os2->lastcharindex = 0xf000 + last;
+ }
+ } else {
+ os2->firstcharindex = first;
+ os2->lastcharindex = last;
+ if ( sf->pfminfo.hascodepages )
+ memcpy(os2->ulCodePage,sf->pfminfo.codepages,sizeof(os2->ulCodePage));
+ else
+ OS2FigureCodePages(sf, os2->ulCodePage);
+ /* Herbert Duerr: */
+ /* Some old versions of Windows do not provide access to all */
+ /* glyphs in a font if the fonts contains non-PUA symbols */
+ /* and thus only has sets the codepage flag for symbol */
+ /* => a workaround for this problem on Windows legacy versions */
+ /* is to use an OS2-table version without codepage flags */
+ /* GWW: */
+ /* This sounds to me like a windows bug rather than one in ff */
+ /* and this is a work-around for windows. As far as I can tell */
+ /* ff is setting the codepage field properly, it's just that */
+ /* windows doesn't interpret that bit correctly */
+ /* GWW: Things get worse. Windows no longer accepts a version 0 */
+ /* for OS/2. FontLab simply lies and says we have a latin1 */
+ /* code page when we don't. */
+ if( !sf->pfminfo.hascodepages )
+ if( (os2->ulCodePage[0]&~(1U<<31))==0 && os2->ulCodePage[1]==0 )
+ os2->ulCodePage[0] |= 1;
+ }
+
+ if ( os2->version>=2 ) {
+ if ( sf->pfminfo.os2_xheight!=0 )
+ os2->xHeight = sf->pfminfo.os2_xheight;
+ else {
+ double xh = SFXHeight(sf,at->gi.layer,true);
+ os2->xHeight = (xh >= 0.0 ? xh : 0);
+ }
+ if ( sf->pfminfo.os2_capheight!=0 )
+ os2->capHeight = sf->pfminfo.os2_capheight;
+ else {
+ double caph = SFCapHeight(sf,at->gi.layer,true);
+ os2->capHeight = (caph >= 0.0 ? caph : 0);
+ }
+ os2->defChar = 0;
+ if ( format==ff_otf || format==ff_otfcid )
+ os2->defChar = ' ';
+ os2->breakChar = ' ';
+ os2->maxContext = 1; /* Kerning will set this to 2, ligature to whatever */
+ }
+
+ if ( os2->version>=3 && os2->v3_avgCharWid!=0 )
+ os2->avgCharWid = os2->v3_avgCharWid;
+ else if ( os2->v1_avgCharWid!=0 )
+ os2->avgCharWid = os2->v1_avgCharWid;
+ else if ( os2->v3_avgCharWid!=0 )
+ os2->avgCharWid = os2->v3_avgCharWid;
+}
+
+static void redoloca(struct alltabs *at) {
+ int i;
+
+ at->loca = tmpfile2();
+ if ( at->head.locais32 ) {
+ for ( i=0; i<=at->maxp.numGlyphs; ++i )
+ putlong(at->loca,at->gi.loca[i]);
+ at->localen = sizeof(int32)*(at->maxp.numGlyphs+1);
+ } else {
+ for ( i=0; i<=at->maxp.numGlyphs; ++i )
+ putshort(at->loca,at->gi.loca[i]/2);
+ at->localen = sizeof(int16)*(at->maxp.numGlyphs+1);
+ if ( ftell(at->loca)&2 )
+ putshort(at->loca,0);
+ }
+ if ( at->format!=ff_type42 && at->format!=ff_type42cid ) {
+ free(at->gi.loca);
+ at->gi.loca = NULL;
+ }
+}
+
+static void dummyloca(struct alltabs *at) {
+
+ at->loca = tmpfile2();
+ if ( at->head.locais32 ) {
+ putlong(at->loca,0);
+ at->localen = sizeof(int32);
+ } else {
+ putshort(at->loca,0);
+ at->localen = sizeof(int16);
+ putshort(at->loca,0); /* pad it */
+ }
+}
+
+static void redohead(struct alltabs *at) {
+ at->headf = tmpfile2();
+
+ putlong(at->headf,at->head.version);
+ putlong(at->headf,at->head.revision);
+ putlong(at->headf,at->head.checksumAdj);
+ putlong(at->headf,at->head.magicNum);
+ putshort(at->headf,at->head.flags);
+ putshort(at->headf,at->head.emunits);
+ putlong(at->headf,at->head.createtime[1]);
+ putlong(at->headf,at->head.createtime[0]);
+ putlong(at->headf,at->head.modtime[1]);
+ putlong(at->headf,at->head.modtime[0]);
+ putshort(at->headf,at->head.xmin);
+ putshort(at->headf,at->head.ymin);
+ putshort(at->headf,at->head.xmax);
+ putshort(at->headf,at->head.ymax);
+ putshort(at->headf,at->head.macstyle);
+ putshort(at->headf,at->head.lowestreadable);
+ putshort(at->headf,at->head.dirhint);
+ putshort(at->headf,at->head.locais32);
+ putshort(at->headf,at->head.glyphformat);
+
+ at->headlen = ftell(at->headf);
+ if ( (at->headlen&2)!=0 )
+ putshort(at->headf,0);
+}
+
+static void redohhead(struct alltabs *at,int isv) {
+ int i;
+ struct hhead *head;
+ FILE *f;
+
+ if ( !isv ) {
+ f = at->hheadf = tmpfile2();
+ head = &at->hhead;
+ } else {
+ f = at->vheadf = tmpfile2();
+ head = &at->vhead;
+ }
+
+ putlong(f,head->version);
+ putshort(f,head->ascender);
+ putshort(f,head->descender);
+ putshort(f,head->linegap);
+ putshort(f,head->maxwidth);
+ putshort(f,head->minlsb);
+ putshort(f,head->minrsb);
+ putshort(f,head->maxextent);
+ putshort(f,head->caretSlopeRise);
+ putshort(f,head->caretSlopeRun);
+ for ( i=0; i<5; ++i )
+ putshort(f,head->mbz[i]);
+ putshort(f,head->metricformat);
+ putshort(f,head->numMetrics);
+
+ if ( !isv ) {
+ at->hheadlen = ftell(f);
+ if ( (at->hheadlen&2)!=0 )
+ putshort(f,0);
+ } else {
+ at->vheadlen = ftell(f);
+ if ( (at->vheadlen&2)!=0 )
+ putshort(f,0);
+ }
+}
+
+static void redomaxp(struct alltabs *at,enum fontformat format) {
+ at->maxpf = tmpfile2();
+
+ putlong(at->maxpf,at->maxp.version);
+ putshort(at->maxpf,at->maxp.numGlyphs);
+ if ( format!=ff_otf && format!=ff_otfcid ) {
+ putshort(at->maxpf,at->maxp.maxPoints);
+ putshort(at->maxpf,at->maxp.maxContours);
+ putshort(at->maxpf,at->maxp.maxCompositPts);
+ putshort(at->maxpf,at->maxp.maxCompositCtrs);
+ putshort(at->maxpf,at->maxp.maxZones);
+ putshort(at->maxpf,at->maxp.maxTwilightPts);
+ putshort(at->maxpf,at->maxp.maxStorage);
+ putshort(at->maxpf,at->maxp.maxFDEFs);
+ putshort(at->maxpf,at->maxp.maxIDEFs);
+ putshort(at->maxpf,at->maxp.maxStack);
+ putshort(at->maxpf,at->maxp.maxglyphInstr);
+ putshort(at->maxpf,at->maxp.maxnumcomponents);
+ putshort(at->maxpf,at->maxp.maxcomponentdepth);
+ }
+
+ at->maxplen = ftell(at->maxpf);
+ if ( (at->maxplen&2)!=0 )
+ putshort(at->maxpf,0);
+}
+
+static void redoos2(struct alltabs *at) {
+ int i;
+ at->os2f = tmpfile2();
+
+ putshort(at->os2f,at->os2.version);
+ putshort(at->os2f,at->os2.avgCharWid);
+ putshort(at->os2f,at->os2.weightClass);
+ putshort(at->os2f,at->os2.widthClass);
+ putshort(at->os2f,at->os2.fstype);
+ putshort(at->os2f,at->os2.ysubXSize);
+ putshort(at->os2f,at->os2.ysubYSize);
+ putshort(at->os2f,at->os2.ysubXOff);
+ putshort(at->os2f,at->os2.ysubYOff);
+ putshort(at->os2f,at->os2.ysupXSize);
+ putshort(at->os2f,at->os2.ysupYSize);
+ putshort(at->os2f,at->os2.ysupXOff);
+ putshort(at->os2f,at->os2.ysupYOff);
+ putshort(at->os2f,at->os2.yStrikeoutSize);
+ putshort(at->os2f,at->os2.yStrikeoutPos);
+ putshort(at->os2f,at->os2.sFamilyClass);
+ for ( i=0; i<10; ++i )
+ putc(at->os2.panose[i],at->os2f);
+ for ( i=0; i<4; ++i )
+ putlong(at->os2f,at->os2.unicoderange[i]);
+ for ( i=0; i<4; ++i )
+ putc(at->os2.achVendID[i],at->os2f);
+ putshort(at->os2f,at->os2.fsSel);
+ putshort(at->os2f,at->os2.firstcharindex);
+ putshort(at->os2f,at->os2.lastcharindex);
+ putshort(at->os2f,at->os2.ascender);
+ putshort(at->os2f,at->os2.descender);
+ putshort(at->os2f,at->os2.linegap);
+ putshort(at->os2f,at->os2.winascent);
+ putshort(at->os2f,at->os2.windescent);
+ if ( at->os2.version>=1 ) {
+ putlong(at->os2f,at->os2.ulCodePage[0]);
+ putlong(at->os2f,at->os2.ulCodePage[1]);
+ }
+
+ if ( at->os2.version>=2 ) {
+ putshort(at->os2f,at->os2.xHeight);
+ putshort(at->os2f,at->os2.capHeight);
+ putshort(at->os2f,at->os2.defChar);
+ putshort(at->os2f,at->os2.breakChar);
+ putshort(at->os2f,at->os2.maxContext);
+ }
+
+ at->os2len = ftell(at->os2f);
+ if ( (at->os2len&2)!=0 )
+ putshort(at->os2f,0);
+}
+
+static void dumpgasp(struct alltabs *at, SplineFont *sf) {
+ int i;
+
+ at->gaspf = tmpfile2();
+ if ( sf->gasp_cnt==0 ) {
+ putshort(at->gaspf,0); /* Old version number */
+ /* For fonts with no instructions always dump a gasp table which */
+ /* asks for grey and no grid fit */
+ putshort(at->gaspf,1);
+ putshort(at->gaspf,0xffff); /* Upper bound on pixels/em for this range */
+ putshort(at->gaspf,0x2); /* Grey scale, no gridfitting */
+ /* No hints, so no grids to fit */
+ } else {
+ putshort(at->gaspf,sf->gasp_version); /* New version number, with clear type info */
+ putshort(at->gaspf,sf->gasp_cnt);
+ for ( i=0; i<sf->gasp_cnt; ++i ) {
+ putshort(at->gaspf,sf->gasp[i].ppem);
+ putshort(at->gaspf,sf->gasp[i].flags);
+ }
+ }
+ at->gasplen = ftell(at->gaspf);
+ /* This table is always 32 bit aligned */
+}
+
+static void dumpstr(FILE *file,char *str) {
+ do {
+ putc(*str,file);
+ } while ( *str++!='\0' );
+}
+
+static void dumpustr(FILE *file,char *utf8_str) {
+ unichar_t *ustr = utf82u_copy(utf8_str), *pt=ustr;
+ do {
+ putc(*pt>>8,file);
+ putc(*pt&0xff,file);
+ } while ( *pt++!='\0' );
+ free(ustr);
+}
+
+static void dumppstr(FILE *file,const char *str) {
+ putc(strlen(str),file);
+ fwrite(str,sizeof(char),strlen(str),file);
+}
+
+char *utf8_verify_copy(const char *str) {
+ /* When given a postscript string it SHOULD be in ASCII. But it will often*/
+ /* contain a copyright symbol (sometimes in latin1, sometimes in macroman)*/
+ /* unfortunately both encodings use 0xa9 for copyright so we can't distinguish */
+ /* guess that it's latin1 (or that copyright is the only odd char which */
+ /* means a latin1 conversion will work for macs too). */
+
+ if ( str==NULL )
+return( NULL );
+
+ if ( utf8_valid(str))
+return( copy(str)); /* Either in ASCII (good) or appears to be utf8*/
+return( latin1_2_utf8_copy(str));
+}
+
+/* Oh. If the encoding is symbol (platform=3, specific=0) then Windows won't */
+/* accept the font unless the name table also has entries for (3,0). I'm not */
+/* sure if this is the case for the CJK encodings (docs don't mention that) */
+/* but let's do it just in case */
+void DefaultTTFEnglishNames(struct ttflangname *dummy, SplineFont *sf) {
+ time_t now;
+ struct tm *tm;
+ char buffer[200];
+
+ if ( dummy->names[ttf_copyright]==NULL || *dummy->names[ttf_copyright]=='\0' )
+ dummy->names[ttf_copyright] = utf8_verify_copy(sf->copyright);
+ if ( dummy->names[ttf_family]==NULL || *dummy->names[ttf_family]=='\0' )
+ dummy->names[ttf_family] = utf8_verify_copy(sf->familyname);
+ if ( dummy->names[ttf_subfamily]==NULL || *dummy->names[ttf_subfamily]=='\0' )
+ dummy->names[ttf_subfamily] = utf8_verify_copy(SFGetModifiers(sf));
+ if ( dummy->names[ttf_uniqueid]==NULL || *dummy->names[ttf_uniqueid]=='\0' ) {
+ time(&now);
+ tm = localtime(&now);
+ sprintf( buffer, "%s : %s : %d-%d-%d",
+ TTFFoundry?TTFFoundry:"FontForge 2.0",
+ sf->fullname!=NULL?sf->fullname:sf->fontname,
+ tm->tm_mday, tm->tm_mon+1, tm->tm_year+1900 );
+ dummy->names[ttf_uniqueid] = copy(buffer);
+ }
+ if ( dummy->names[ttf_fullname]==NULL || *dummy->names[ttf_fullname]=='\0' )
+ dummy->names[ttf_fullname] = utf8_verify_copy(sf->fullname);
+ if ( dummy->names[ttf_version]==NULL || *dummy->names[ttf_version]=='\0' ) {
+ if ( sf->subfontcnt!=0 )
+ sprintf( buffer, "Version %f ", (double)sf->cidversion );
+ else if ( sf->version!=NULL )
+ sprintf(buffer,"Version %.20s ", sf->version);
+ else
+ strcpy(buffer,"Version 1.0" );
+ dummy->names[ttf_version] = copy(buffer);
+ }
+ if ( dummy->names[ttf_postscriptname]==NULL || *dummy->names[ttf_postscriptname]=='\0' )
+ dummy->names[ttf_postscriptname] = utf8_verify_copy(sf->fontname);
+}
+
+typedef struct {
+ uint16 platform;
+ uint16 specific;
+ uint16 lang;
+ uint16 strid;
+ uint16 len;
+ uint16 offset;
+} NameEntry;
+
+typedef struct {
+ FILE *strings;
+ int cur, max;
+ enum fontformat format;
+ Encoding *encoding_name;
+ NameEntry *entries;
+ int applemode;
+} NamTab;
+
+static int compare_entry(const void *_mn1, const void *_mn2) {
+ const NameEntry *mn1 = _mn1, *mn2 = _mn2;
+
+ if ( mn1->platform!=mn2->platform )
+return( mn1->platform - mn2->platform );
+ if ( mn1->specific!=mn2->specific )
+return( mn1->specific - mn2->specific );
+ if ( mn1->lang!=mn2->lang )
+return( mn1->lang - mn2->lang );
+
+return( mn1->strid-mn2->strid );
+}
+
+static void AddEncodedName(NamTab *nt,char *utf8name,uint16 lang,uint16 strid) {
+ NameEntry *ne;
+ int maclang, macenc= -1, specific;
+ char *macname = NULL;
+
+ if ( strid==ttf_postscriptname && lang!=0x409 )
+return; /* Should not happen, but it did */
+
+ if ( nt->cur+6>=nt->max ) {
+ if ( nt->cur==0 )
+ nt->entries = malloc((nt->max=100)*sizeof(NameEntry));
+ else
+ nt->entries = realloc(nt->entries,(nt->max+=100)*sizeof(NameEntry));
+ }
+
+ ne = nt->entries + nt->cur;
+
+ ne->platform = 3; /* Windows */
+ ne->specific = 1; /* unicode */
+ ne->lang = lang;
+ ne->strid = strid;
+ ne->offset = ftell(nt->strings);
+ ne->len = 2*utf82u_strlen(utf8name);
+ dumpustr(nt->strings,utf8name);
+ ++ne;
+
+ if ( nt->format==ff_ttfsym ) {
+ *ne = ne[-1];
+ ne->specific = 0; /* Windows "symbol" */
+ ++ne;
+ }
+
+ maclang = WinLangToMac(lang);
+ if ( !nt->applemode && lang!=0x409 )
+ maclang = 0xffff;
+ if ( maclang!=0xffff ) {
+#ifdef FONTFORGE_CONFIG_APPLE_UNICODE_NAMES
+ if ( strid!=ttf_postscriptname ) {
+ *ne = ne[-1];
+ ne->platform = 0; /* Mac unicode */
+ ne->specific = 0; /* 3 => Unicode 2.0 semantics */ /* 0 ("default") is also a reasonable value */
+ ne->lang = maclang;
+ ++ne;
+ }
+#endif
+
+ macenc = MacEncFromMacLang(maclang);
+ macname = Utf8ToMacStr(utf8name,macenc,maclang);
+ if ( macname!=NULL ) {
+ ne->platform = 1; /* apple non-unicode encoding */
+ ne->specific = macenc; /* whatever */
+ ne->lang = maclang;
+ ne->strid = strid;
+ ne->offset = ftell(nt->strings);
+ ne->len = strlen(macname);
+ dumpstr(nt->strings,macname);
+ ++ne;
+ free(macname);
+ }
+ }
+
+ specific = nt->encoding_name->is_korean ? 5 : /* Wansung, korean */
+ nt->encoding_name->is_japanese ? 2 : /* SJIS */
+ nt->encoding_name->is_simplechinese ? 3 :/* packed gb2312, don't know the real name */
+ strmatch(nt->encoding_name->enc_name,"EUC-GB12345")==0 ? 3 :/* Lie */
+ nt->encoding_name->is_tradchinese ? 4 : /* Big5, traditional Chinese */
+ -1;
+ if ( specific != -1 ) {
+ ne->platform = 3; /* windows */
+ ne->specific = specific; /* whatever */
+ ne->lang = lang;
+ ne->strid = strid;
+ if ( macname!=NULL &&
+ (( specific== 2 && macenc==1 ) || /* Japanese */
+ ( specific== 3 && macenc==25 ) || /* simplified chinese */
+ ( specific== 4 && macenc==2 ) || /* traditional chinese */
+ ( specific== 5 && macenc==3 )) ) { /* wansung korean */
+ ne->offset = ne[-1].offset;
+ ne->len = ne[-1].len;
+ } else {
+ char *space, *out;
+ const char *encname;
+ ICONV_CONST char *in;
+ Encoding *enc;
+ size_t inlen, outlen;
+ ne->offset = ftell(nt->strings);
+ encname = nt->encoding_name->is_japanese ? "SJIS" :
+ strmatch(nt->encoding_name->enc_name,"JOHAB")==0 ? "JOHAB" :
+ nt->encoding_name->is_korean ? "EUC-KR" :
+ nt->encoding_name->is_simplechinese ? "EUC-CN" :
+ nt->encoding_name->enc_name;
+ enc = FindOrMakeEncoding(encname);
+ if ( enc==NULL )
+ --ne;
+ else {
+ unichar_t *uin = utf82u_copy(utf8name);
+ outlen = 3*strlen(utf8name)+10;
+ out = space = malloc(outlen+2);
+ in = (char *) uin; inlen = 2*u_strlen(uin);
+ iconv(enc->fromunicode,NULL,NULL,NULL,NULL); /* should not be needed, but just in case */
+ iconv(enc->fromunicode,&in,&inlen,&out,&outlen);
+ out[0] = '\0'; out[1] = '\0';
+ ne->offset = ftell(nt->strings);
+ ne->len = strlen(space);
+ dumpstr(nt->strings,space);
+ free(space); free(uin);
+ }
+ }
+ ++ne;
+ }
+ nt->cur = ne - nt->entries;
+}
+
+static void AddMacName(NamTab *nt,struct macname *mn, int strid) {
+ NameEntry *ne;
+
+ if ( nt->cur+1>=nt->max ) {
+ if ( nt->cur==0 )
+ nt->entries = malloc((nt->max=100)*sizeof(NameEntry));
+ else
+ nt->entries = realloc(nt->entries,(nt->max+=100)*sizeof(NameEntry));
+ }
+
+ ne = nt->entries + nt->cur;
+
+ ne->platform = 1; /* apple non-unicode encoding */
+ ne->specific = mn->enc; /* whatever */
+ ne->lang = mn->lang;
+ ne->strid = strid;
+ ne->offset = ftell(nt->strings);
+ ne->len = strlen(mn->name);
+ dumpstr(nt->strings,mn->name);
+
+ ++nt->cur;
+}
+
+/* There's an inconsistancy here. Apple's docs say there most be only one */
+/* nameid==6 and that name must be ascii (presumably plat=1, spec=0, lang=0) */
+/* The opentype docs say there must be two (psl=1,0,0 & psl=3,1,0x409) any */
+/* others are to be ignored */
+/* A representative from Apple says they will change their spec to accept */
+/* the opentype version, and tells me that they don't currently care */
+/* So ignore this */
+/* Undocumented fact: Windows insists on having a UniqueID string 3,1 */
+static void dumpnames(struct alltabs *at, SplineFont *sf,enum fontformat format) {
+ int i,j;
+ struct ttflangname dummy, *cur, *useng = NULL;
+ struct macname *mn;
+ struct other_names *on, *onn;
+ NamTab nt;
+ struct otfname *otfn;
+ struct otffeatname *fn;
+
+ memset(&nt,0,sizeof(nt));
+ nt.encoding_name = at->map->enc;
+ nt.format = format;
+ nt.applemode = at->applemode;
+ nt.strings = tmpfile2();
+ if (( format>=ff_ttf && format<=ff_otfdfont) && (at->gi.flags&ttf_flag_symbol))
+ nt.format = ff_ttfsym;
+
+ memset(&dummy,0,sizeof(dummy));
+ for ( cur=sf->names; cur!=NULL; cur=cur->next ) {
+ if ( cur->lang==0x409 ) {
+ dummy = *cur;
+ useng = cur;
+ break;
+ }
+ }
+ DefaultTTFEnglishNames(&dummy, sf);
+
+ for ( i=0; i<ttf_namemax; ++i ) if ( dummy.names[i]!=NULL )
+ AddEncodedName(&nt,dummy.names[i],0x409,i);
+ for ( cur=sf->names; cur!=NULL; cur=cur->next ) {
+ if ( cur->lang!=0x409 )
+ for ( i=0; i<ttf_namemax; ++i )
+ if ( cur->names[i]!=NULL )
+ AddEncodedName(&nt,cur->names[i],cur->lang,i);
+ }
+
+ /* The examples I've seen of the feature table only contain platform==mac */
+ /* so I'm not including apple unicode */
+ if ( at->feat_name!=NULL ) {
+ for ( i=0; at->feat_name[i].strid!=0; ++i ) {
+ for ( mn=at->feat_name[i].mn; mn!=NULL; mn=mn->next )
+ AddMacName(&nt,mn,at->feat_name[i].strid);
+ /* I'm not sure why I keep track of these alternates (feat_name[i].smn) */
+ /* Dumping them out is a bad idea. It might be worth */
+ /* something if we searched through the alternate sets for languages */
+ /* not found in the main set, but at the moment I don't think so */
+ /* What happens now if I do it is that I get duplicate names output. */
+ }
+ }
+ /* And the names used by the fvar table aren't mac unicode either */
+ for ( on = at->other_names; on!=NULL; on=onn ) {
+ for ( mn = on->mn; mn!=NULL ; mn = mn->next )
+ AddMacName(&nt,mn,on->strid);
+ onn = on->next;
+ chunkfree(on,sizeof(*on));
+ }
+ /* Wow, the GPOS 'size' feature uses the name table in a very mac-like way*/
+ if ( at->fontstyle_name_strid!=0 && sf->fontstyle_name!=NULL ) {
+ for ( otfn = sf->fontstyle_name; otfn!=NULL; otfn = otfn->next )
+ AddEncodedName(&nt,otfn->name,otfn->lang,at->fontstyle_name_strid);
+ }
+ /* As do some other features now */
+ for ( fn = sf->feat_names; fn!=NULL; fn=fn->next ) {
+ for ( otfn = fn->names; otfn!=NULL; otfn = otfn->next )
+ AddEncodedName(&nt,otfn->name,otfn->lang,fn->nid);
+ }
+
+ qsort(nt.entries,nt.cur,sizeof(NameEntry),compare_entry);
+
+ at->name = tmpfile2();
+ putshort(at->name,0); /* format */
+ putshort(at->name,nt.cur); /* numrec */
+ putshort(at->name,(3+nt.cur*6)*sizeof(int16)); /* offset to strings */
+
+ for ( i=0; i<nt.cur; ++i ) {
+ putshort(at->name,nt.entries[i].platform);
+ putshort(at->name,nt.entries[i].specific);
+ putshort(at->name,nt.entries[i].lang);
+ putshort(at->name,nt.entries[i].strid);
+ putshort(at->name,nt.entries[i].len);
+ putshort(at->name,nt.entries[i].offset);
+ }
+ if ( !ttfcopyfile(at->name,nt.strings,(3+nt.cur*6)*sizeof(int16),"name-data"))
+ at->error = true;
+
+ at->namelen = ftell(at->name);
+ if ( (at->namelen&3)!=0 )
+ for ( j= 4-(at->namelen&3); j>0; --j )
+ putc('\0',at->name);
+
+ for ( i=0; i<ttf_namemax; ++i )
+ if ( useng==NULL || dummy.names[i]!=useng->names[i] )
+ free( dummy.names[i]);
+ free( nt.entries );
+ free( at->feat_name );
+
+ /* Windows at one point refused to load fonts with 'name' tables bigger than 5K (decided they were insecure). */
+}
+
+static void dumppost(struct alltabs *at, SplineFont *sf, enum fontformat format) {
+ int pos, i,j, shouldbe;
+ int shorttable = (format==ff_otf || format==ff_otfcid ||
+ (at->gi.flags&ttf_flag_shortps));
+ uint32 here;
+
+ at->post = tmpfile2();
+
+ putlong(at->post,shorttable?0x00030000:0x00020000); /* formattype */
+ putfixed(at->post,sf->italicangle);
+ putshort(at->post,sf->upos-sf->uwidth/2); /* 'post' defn says top of rect, while FontInfo def says center of rect */
+ putshort(at->post,sf->uwidth);
+ putlong(at->post,at->isfixed);
+ putlong(at->post,0); /* no idea about memory */
+ putlong(at->post,0); /* no idea about memory */
+ putlong(at->post,0); /* no idea about memory */
+ putlong(at->post,0); /* no idea about memory */
+ if ( !shorttable ) {
+ here = ftell(at->post);
+ putshort(at->post,at->maxp.numGlyphs);
+
+ shouldbe = 0;
+ for ( i=0, pos=0; i<at->maxp.numGlyphs; ++i ) {
+ if ( at->gi.bygid[i]!=-1 && sf->glyphs[at->gi.bygid[i]]!=NULL ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[i]];
+ while ( i>shouldbe ) {
+ if ( shouldbe==0 )
+ putshort(at->post,0); /* glyph 0 is named .notdef */
+ else if ( shouldbe==1 )
+ putshort(at->post,1); /* glyphs 1&2 are .null and cr */
+ else if ( shouldbe==2 )
+ putshort(at->post,2); /* or something */
+ else
+ putshort(at->post,0);
+ ++shouldbe;
+ }
+ if ( strcmp(sc->name,".notdef")==0 )
+ putshort(at->post,0);
+ else {
+ for ( j=0; j<258; ++j )
+ if ( strcmp(sc->name,ttfstandardnames[j])==0 )
+ break;
+ if ( j!=258 )
+ putshort(at->post,j);
+ else {
+ putshort(at->post,pos+258);
+ ++pos;
+ }
+ }
+ ++shouldbe;
+ }
+ }
+
+ if ( shouldbe!=at->maxp.numGlyphs ) {
+ fseek(at->post,here,SEEK_SET);
+ putshort(at->post,shouldbe);
+ fseek(at->post,0,SEEK_END);
+ }
+ if ( pos!=0 ) {
+ for ( i=0; i<at->maxp.numGlyphs; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[i]];
+ if ( strcmp(sc->name,".notdef")==0 )
+ /* Do Nothing */;
+ else {
+ for ( j=0; j<258; ++j )
+ if ( strcmp(sc->name,ttfstandardnames[j])==0 )
+ break;
+ if ( j!=258 )
+ /* Do Nothing */;
+ else
+ dumppstr(at->post,sc->name);
+ }
+ }
+ }
+ }
+ at->postlen = ftell(at->post);
+ if ( (at->postlen&3)!=0 )
+ for ( j= 4-(at->postlen&3); j>0; --j )
+ putc('\0',at->post);
+}
+
+static FILE *_Gen816Enc(SplineFont *sf,int *tlen,EncMap *map) {
+ int i, j, complained, pos, k, subheadindex, jj, isbig5=false;
+ uint16 table[256];
+ struct subhead subheads[128];
+ uint16 *glyphs;
+ uint16 tempglyphs[256];
+ int base, lbase, basebound, subheadcnt, planesize, plane0size;
+ int base2, base2bound;
+ FILE *sub;
+ const char *encname = map->enc->iconv_name!=NULL ? map->enc->iconv_name : map->enc->enc_name;
+
+ *tlen = 0;
+
+ base2 = -1; base2bound = -2;
+ if ( map->enc->is_tradchinese && strstrmatch(encname,"hkscs")!=NULL ) {
+ base = 0x81;
+ basebound = 0xfe;
+ subheadcnt = basebound-base+1;
+ lbase = 0x40;
+ planesize = 191;
+ } else if ( map->enc->is_tradchinese || sf->uni_interp==ui_trad_chinese) {
+ base = 0xa1;
+ basebound = 0xf9; /* wcl-02.ttf's cmap claims to go up to fc, but everything after f9 is invalid (according to what I know of big5, f9 should be the end) */
+ subheadcnt = basebound-base+1;
+ lbase = 0x40;
+ planesize = 191;
+ isbig5 = true;
+ } else if ( strstrmatch(encname,"euc")!=NULL ) {
+ base = 0xa1;
+ basebound = 0xfd;
+ lbase = 0xa1;
+ subheadcnt = basebound-base+1;
+ planesize = 0xfe - lbase +1;
+ } else if ( strstrmatch(encname,"johab")!=NULL ) {
+ base = 0x84;
+ basebound = 0xf9;
+ lbase = 0x31;
+ subheadcnt = basebound-base+1;
+ planesize = 0xfe -0x31+1; /* Stupid gcc bug, thinks 0xfe- is ambiguous (exponant) */
+ } else if ( strstrmatch(encname,"sjis")!=NULL || strstrmatch(encname,"cp932")!=NULL ) {
+ base = 129;
+ basebound = 159;
+ lbase = 64;
+ planesize = 252 - lbase +1;
+ base2 = 0xe0;
+ /* SJIS supports "user defined characters" between 0xf040 and 0xfcfc */
+ /* there probably won't be any, but allow space for them if there are*/
+ for ( base2bound=0xfc00; base2bound>0xefff; --base2bound )
+ if ( base2bound<map->enccount && map->map[base2bound]!=-1 &&
+ SCWorthOutputting(sf->glyphs[map->map[base2bound]]))
+ break;
+ base2bound >>= 8;
+ subheadcnt = basebound-base + 1 + base2bound-base2 + 1;
+ } else {
+ IError( "Unsupported 8/16 encoding %s\n", map->enc->enc_name );
+return( NULL );
+ }
+ plane0size = base2==-1? base : base2;
+ i=0;
+ if ( base2!=-1 ) {
+ for ( i=basebound; i<base2 && i<map->enccount; ++i )
+ if ( map->map[i]==-1 )
+ continue;
+ else if ( SCWorthOutputting(sf->glyphs[map->map[i]]))
+ break;
+ if ( i==base2 || i==map->enccount )
+ i = 0;
+ }
+ if ( i==0 ) {
+ for ( i=0; i<base && i<map->enccount; ++i )
+ if ( map->map[i]==-1 )
+ continue;
+ else if ( SCWorthOutputting(sf->glyphs[map->map[i]]))
+ break;
+ }
+ if ( base2!=-1 ) {
+ for ( i=base; i<=basebound && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a single byte character (%d) using one of the slots needed for double byte characters"),i);
+ break;
+ }
+ if ( i==basebound+1 )
+ for ( i=base2; i<256 && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a single byte character (%d) using one of the slots needed for double byte characters"),i);
+ break;
+ }
+ } else {
+ for ( i=base; i<=256 && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a single byte character (%d) using one of the slots needed for double byte characters"),i);
+ break;
+ }
+ }
+ for ( i=256; i<(base<<8) && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a character (%d) which cannot be encoded"),i);
+ break;
+ }
+ if ( i==(base<<8) && base2==-1 )
+ for ( i=((basebound+1)<<8); i<0x10000 && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a character (%d) which cannot be encoded"),i);
+ break;
+ }
+
+ memset(table,'\0',sizeof(table));
+ for ( i=base; i<=basebound; ++i )
+ table[i] = 8*(i-base+1);
+ for ( i=base2; i<=base2bound; ++i )
+ table[i] = 8*(i-base2+basebound-base+1+1);
+ memset(subheads,'\0',sizeof(subheads));
+ subheads[0].first = 0; subheads[0].cnt = plane0size;
+ for ( i=1; i<subheadcnt+1; ++i ) {
+ subheads[i].first = lbase;
+ subheads[i].cnt = planesize;
+ }
+ glyphs = calloc(subheadcnt*planesize+plane0size,sizeof(uint16));
+ subheads[0].rangeoff = 0;
+ for ( i=0; i<plane0size && i<map->enccount; ++i )
+ if ( map->map[i]!=-1 && sf->glyphs[map->map[i]]!=NULL &&
+ sf->glyphs[map->map[i]]->ttf_glyph!=-1 )
+ glyphs[i] = sf->glyphs[map->map[i]]->ttf_glyph;
+
+ pos = 1;
+
+ complained = false;
+ subheadindex = 1;
+ for ( jj=0; jj<2 || (base2==-1 && jj<1); ++jj )
+ for ( j=((jj==0?base:base2)<<8); j<=((jj==0?basebound:base2bound)<<8); j+= 0x100 ) {
+ for ( i=0; i<lbase; ++i )
+ if ( !complained && map->map[i+j]!=-1 &&
+ SCWorthOutputting(sf->glyphs[map->map[i+j]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a character (%d) which is not normally in the encoding"),i+j);
+ complained = true;
+ }
+ if ( isbig5 ) {
+ /* big5 has a gap here. Does johab? */
+ for ( i=0x7f; i<0xa1; ++i )
+ if ( !complained && map->map[i+j]!=-1 &&
+ SCWorthOutputting(sf->glyphs[map->map[i+j]])) {
+ ff_post_error(_("Bad Encoding"),_("There is a character (%d) which is not normally in the encoding"),i+j);
+ complained = true;
+ }
+ }
+ memset(tempglyphs,0,sizeof(tempglyphs));
+ for ( i=0; i<planesize; ++i )
+ if ( map->map[j+lbase+i]!=-1 && sf->glyphs[map->map[j+lbase+i]]!=NULL &&
+ sf->glyphs[map->map[j+lbase+i]]->ttf_glyph!=-1 )
+ tempglyphs[i] = sf->glyphs[map->map[j+lbase+i]]->ttf_glyph;
+ for ( i=1; i<pos; ++i ) {
+ int delta = 0;
+ for ( k=0; k<planesize; ++k )
+ if ( tempglyphs[k]==0 && glyphs[plane0size+(i-1)*planesize+k]==0 )
+ /* Still matches */;
+ else if ( tempglyphs[k]==0 || glyphs[plane0size+(i-1)*planesize+k]==0 )
+ break; /* Doesn't match */
+ else if ( delta==0 )
+ delta = (uint16) (tempglyphs[k]-glyphs[plane0size+(i-1)*planesize+k]);
+ else if ( tempglyphs[k]==(uint16) (glyphs[plane0size+(i-1)*planesize+k]+delta) )
+ /* Still matches */;
+ else
+ break;
+ if ( k==planesize ) {
+ subheads[subheadindex].delta = delta;
+ subheads[subheadindex].rangeoff = plane0size+(i-1)*planesize;
+ break;
+ }
+ }
+ if ( subheads[subheadindex].rangeoff==0 ) {
+ memcpy(glyphs+(pos-1)*planesize+plane0size,tempglyphs,planesize*sizeof(uint16));
+ subheads[subheadindex].rangeoff = plane0size+(pos++-1)*planesize ;
+ }
+ ++subheadindex;
+ }
+
+ /* fixup offsets */
+ /* my rangeoffsets are indexes into the glyph array. That's nice and */
+ /* simple. Unfortunately ttf says they are offsets from the current */
+ /* location in the file (sort of) so we now fix them up. */
+ for ( i=0; i<subheadcnt+1; ++i )
+ subheads[i].rangeoff = subheads[i].rangeoff*sizeof(uint16) +
+ (subheadcnt-i)*sizeof(struct subhead) + sizeof(uint16);
+
+ sub = tmpfile2();
+ if ( sub==NULL )
+return( NULL );
+
+ putshort(sub,2); /* 8/16 format */
+ putshort(sub,0); /* Subtable length, we'll come back and fix this */
+ putshort(sub,0); /* version/language, not meaningful in ms systems */
+ for ( i=0; i<256; ++i )
+ putshort(sub,table[i]);
+ for ( i=0; i<subheadcnt+1; ++i ) {
+ putshort(sub,subheads[i].first);
+ putshort(sub,subheads[i].cnt);
+ putshort(sub,subheads[i].delta);
+ putshort(sub,subheads[i].rangeoff);
+ }
+ for ( i=0; i<(pos-1)*planesize+plane0size; ++i )
+ putshort(sub,glyphs[i]);
+ free(glyphs);
+
+ *tlen = ftell(sub);
+ fseek(sub,2,SEEK_SET);
+ putshort(sub,*tlen); /* Length, I said we'd come back to it */
+ rewind( sub );
+return( sub );
+}
+
+static FILE *Needs816Enc(SplineFont *sf,int *tlen,EncMap *map, FILE **apple, int *appletlen) {
+ FILE *sub;
+ const char *encname = map->enc->iconv_name!=NULL ? map->enc->iconv_name : map->enc->enc_name;
+ EncMap *oldmap = map;
+ EncMap *applemap = NULL;
+ Encoding *enc;
+
+ *tlen = 0;
+ if ( apple!=NULL ) {
+ *apple = NULL;
+ *appletlen = 0;
+ }
+ if ( sf->cidmaster!=NULL || sf->subfontcnt!=0 )
+return( NULL );
+ if ( (strstrmatch(encname,"big")!=NULL && strchr(encname,'5')!=NULL) ||
+ strstrmatch(encname,"johab")!=NULL ||
+ strstrmatch(encname,"sjis")!=NULL ||
+ strstrmatch(encname,"cp932")!=NULL ||
+ strstrmatch(encname,"euc-kr")!=NULL ||
+ strstrmatch(encname,"euc-cn")!=NULL )
+ /* Already properly encoded */;
+ else if ( strstrmatch(encname,"2022")!=NULL &&
+ (strstrmatch(encname,"JP2")!=NULL ||
+ strstrmatch(encname,"JP-2")!=NULL ||
+ strstrmatch(encname,"JP-3")!=NULL ))
+return( NULL ); /* No 8/16 encoding for JP2 nor JP3 */
+ else if ( sf->uni_interp>=ui_japanese && sf->uni_interp<=ui_korean ) {
+ enc = FindOrMakeEncoding(
+ sf->uni_interp==ui_japanese ? "sjis" :
+ sf->uni_interp==ui_trad_chinese ? "big5" :
+ sf->uni_interp==ui_simp_chinese ? "euc-cn" :
+ "euc-kr");
+ if ( map->enc!=enc ) {
+ map = EncMapFromEncoding(sf,enc);
+ encname = map->enc->iconv_name!=NULL ? map->enc->iconv_name : map->enc->enc_name;
+ }
+ } else
+return( NULL );
+
+ /* Both MS and Apple extend sjis. I don't know how to get iconv to give me*/
+ /* apple's encoding though. So I generate one 8/16 table for MS based on */
+ /* their extension (cp932), and another table based on plain sjis for Apple*/
+ /* Don't know if this is true of other cjk encodings... for the moment I */
+ /* will just use standard encodings for them */
+ if ( strstrmatch(encname,"sjis")!=NULL ) {
+ enc = FindOrMakeEncoding("cp932");
+ if ( enc!=NULL ) {
+ applemap = map;
+ map = EncMapFromEncoding(sf,enc);
+ }
+ } else if ( strstrmatch(encname,"cp932")!=NULL )
+ applemap = EncMapFromEncoding(sf,FindOrMakeEncoding("sjis"));
+
+ if ( applemap!=NULL )
+ *apple = _Gen816Enc(sf,appletlen,applemap);
+ sub = _Gen816Enc(sf,tlen,map);
+
+ if ( applemap!=NULL && applemap!=oldmap )
+ EncMapFree(applemap);
+ if ( map!=oldmap )
+ EncMapFree(map);
+return( sub );
+}
+
+static FILE *NeedsUCS4Table(SplineFont *sf,int *ucs4len,EncMap *map) {
+ int i=0,j,group;
+ FILE *format12;
+ SplineChar *sc;
+ EncMap *freeme = NULL;
+ struct altuni *altuni;
+
+ if ( map->enc->is_unicodefull )
+ i=0x10000;
+ else if ( map->enc->is_custom )
+ i = 0;
+ else
+ i = map->enc->char_cnt;
+ for ( ; i<map->enccount; ++i ) {
+ if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]]) ) {
+ if ( sf->glyphs[map->map[i]]->unicodeenc>=0x10000 )
+ break;
+ for ( altuni=sf->glyphs[map->map[i]]->altuni; altuni!=NULL && (altuni->unienc<0x10000 || altuni->vs!=-1 || altuni->fid!=0);
+ altuni=altuni->next );
+ if ( altuni!=NULL )
+ break;
+ }
+ }
+
+ if ( i>=map->enccount )
+return(NULL);
+
+ if ( !map->enc->is_unicodefull )
+ map = freeme = EncMapFromEncoding(sf,FindOrMakeEncoding("ucs4"));
+
+ format12 = tmpfile2();
+ if ( format12==NULL )
+return( NULL );
+
+ putshort(format12,12); /* Subtable format */
+ putshort(format12,0); /* padding */
+ putlong(format12,0); /* Length, we'll come back to this */
+ putlong(format12,0); /* language */
+ putlong(format12,0); /* Number of groups, we'll come back to this */
+
+ group = 0;
+ for ( i=0; i<map->enccount; ++i ) if ( map->map[i]!=-1 && SCWorthOutputting(sf->glyphs[map->map[i]]) && sf->glyphs[map->map[i]]->unicodeenc!=-1 ) {
+ sc = sf->glyphs[map->map[i]];
+ for ( j=i+1; j<map->enccount && map->map[j]!=-1 &&
+ SCWorthOutputting(sf->glyphs[map->map[j]]) &&
+ sf->glyphs[map->map[j]]->unicodeenc!=-1 &&
+ sf->glyphs[map->map[j]]->ttf_glyph==sc->ttf_glyph+j-i; ++j );
+ --j;
+ putlong(format12,i); /* start char code */
+ putlong(format12,j); /* end char code */
+ putlong(format12,sc->ttf_glyph);
+ ++group;
+ i=j; /* move to the start of the next group */
+ }
+ *ucs4len = ftell(format12);
+ fseek(format12,4,SEEK_SET);
+ putlong(format12,*ucs4len); /* Length, I said we'd come back to it */
+ putlong(format12,0); /* language */
+ putlong(format12,group); /* Number of groups */
+ rewind( format12 );
+
+ if ( freeme!=NULL )
+ EncMapFree(freeme);
+return( format12 );
+}
+
+static FILE *NeedsUCS2Table(SplineFont *sf,int *ucs2len,EncMap *map,int issymbol) {
+ /* We always want a format 4 2byte unicode encoding map */
+ /* But if it's symbol, only include encodings 0xff20 - 0xffff */
+ uint32 *avail = malloc(65536*sizeof(uint32));
+ int i,j,l;
+ int segcnt, cnt=0, delta, rpos;
+ struct cmapseg { uint16 start, end; uint16 delta; uint16 rangeoff; } *cmapseg;
+ uint16 *ranges;
+ SplineChar *sc;
+ FILE *format4 = tmpfile2();
+
+ memset(avail,0xff,65536*sizeof(uint32));
+ if ( map->enc->is_unicodebmp || map->enc->is_unicodefull ) { int gid;
+ for ( i=0; i<65536 && i<map->enccount; ++i ) if ( (gid=map->map[i])!=-1 && sf->glyphs[gid]!=NULL && sf->glyphs[gid]->ttf_glyph!=-1 ) {
+ avail[i] = gid;
+ ++cnt;
+ }
+ } else {
+ struct altuni *altuni;
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( (sc=sf->glyphs[i])!=NULL && sc->ttf_glyph!=-1 ) {
+ if ( sc->unicodeenc>=0 && sc->unicodeenc<=0xffff ) {
+ avail[sc->unicodeenc] = i;
+ ++cnt;
+ }
+ for ( altuni=sc->altuni; altuni!=NULL; altuni = altuni->next ) {
+ if ( altuni->unienc<=0xffff && altuni->vs==-1 && altuni->fid==0 ) {
+ avail[altuni->unienc] = i;
+ ++cnt;
+ }
+ }
+ }
+ }
+ }
+ if ( issymbol ) {
+ /* Clear out all entries we don't want */
+ memset(avail ,0xff,0xf020*sizeof(uint32));
+ memset(avail+0xf100,0xff,0x0eff*sizeof(uint32));
+ }
+
+ j = -1;
+ for ( i=segcnt=0; i<65536; ++i ) {
+ if ( avail[i]!=0xffffffff && j==-1 ) {
+ j=i;
+ ++segcnt;
+ } else if ( j!=-1 && avail[i]==0xffffffff )
+ j = -1;
+ }
+ cmapseg = calloc(segcnt+1,sizeof(struct cmapseg));
+ ranges = malloc(cnt*sizeof(int16));
+ j = -1;
+ for ( i=segcnt=0; i<65536; ++i ) {
+ if ( avail[i]!=0xffffffff && j==-1 ) {
+ j=i;
+ cmapseg[segcnt].start = j;
+ ++segcnt;
+ } else if ( j!=-1 && avail[i]==0xffffffff ) {
+ cmapseg[segcnt-1].end = i-1;
+ j = -1;
+ }
+ }
+ if ( j!=-1 )
+ cmapseg[segcnt-1].end = i-1;
+ /* create a dummy segment to mark the end of the table */
+ cmapseg[segcnt].start = cmapseg[segcnt].end = 0xffff;
+ cmapseg[segcnt++].delta = 1;
+ rpos = 0;
+ for ( i=0; i<segcnt-1; ++i ) {
+ l = avail[cmapseg[i].start];
+ sc = sf->glyphs[l];
+ delta = sc->ttf_glyph-cmapseg[i].start;
+ for ( j=cmapseg[i].start; j<=cmapseg[i].end; ++j ) {
+ l = avail[j];
+ sc = sf->glyphs[l];
+ if ( delta != sc->ttf_glyph-j )
+ break;
+ }
+ if ( j>cmapseg[i].end )
+ cmapseg[i].delta = delta;
+ else {
+ cmapseg[i].rangeoff = (rpos + (segcnt-i)) * sizeof(int16);
+ for ( j=cmapseg[i].start; j<=cmapseg[i].end; ++j ) {
+ l = avail[j];
+ sc = sf->glyphs[l];
+ ranges[rpos++] = sc->ttf_glyph;
+ }
+ }
+ }
+ free(avail);
+
+
+ putshort(format4,4); /* format */
+ putshort(format4,(8+4*segcnt+rpos)*sizeof(int16));
+ putshort(format4,0); /* language/version */
+ putshort(format4,2*segcnt); /* segcnt */
+ for ( j=0,i=1; i<=segcnt; i<<=1, ++j );
+ putshort(format4,i); /* 2*2^floor(log2(segcnt)) */
+ putshort(format4,j-1);
+ putshort(format4,2*segcnt-i);
+ for ( i=0; i<segcnt; ++i )
+ putshort(format4,cmapseg[i].end);
+ putshort(format4,0);
+ for ( i=0; i<segcnt; ++i )
+ putshort(format4,cmapseg[i].start);
+ for ( i=0; i<segcnt; ++i )
+ putshort(format4,cmapseg[i].delta);
+ for ( i=0; i<segcnt; ++i )
+ putshort(format4,cmapseg[i].rangeoff);
+ for ( i=0; i<rpos; ++i )
+ putshort(format4,ranges[i]);
+ free(ranges);
+ free(cmapseg);
+ *ucs2len = ftell(format4);
+return( format4 );
+}
+
+static FILE *NeedsVariationSequenceTable(SplineFont *sf,int *vslen) {
+ /* Do we need a format 14 (unicode variation sequence) subtable? */
+ int gid, vs_cnt=0, vs_max=512, i, j, k, cnt, mingid, maxgid;
+ struct altuni *altuni, *au;
+ int32 vsbuf[512], *vses = vsbuf;
+ FILE *format14;
+ uint32 *avail = NULL;
+ enum vs_type {vs_default=(1<<24), vs_nondefault=(2<<24) };
+ SplineChar *sc;
+ uint32 here;
+ int any;
+
+ mingid = maxgid = -1;
+ for ( gid=0; gid<sf->glyphcnt; ++gid ) if ( (sc = sf->glyphs[gid])!=NULL ) {
+ for ( altuni = sc->altuni; altuni!=NULL; altuni=altuni->next ) {
+ if ( altuni->unienc!=-1 && (uint32)altuni->unienc<unicode4_size &&
+ altuni->vs!=-1 && altuni->fid==0 ) {
+ for ( i=0; i<vs_cnt; ++i )
+ if ( vses[i]==altuni->vs )
+ break;
+ if ( i>=vs_cnt ) {
+ if ( i>=vs_max ) {
+ if ( vses==vsbuf ) {
+ vses = malloc((vs_max*=2)*sizeof(uint32));
+ memcpy(vses,vsbuf,sizeof(vsbuf));
+ } else
+ vses = realloc(vses,(vs_max+=512)*sizeof(uint32));
+ }
+ vses[vs_cnt++] = altuni->vs;
+ }
+ if ( mingid==-1 )
+ mingid = maxgid = gid;
+ else
+ maxgid = gid;
+ }
+ }
+ }
+ if ( vs_cnt==0 ) {
+ *vslen = 0;
+return( NULL ); /* No variation selectors */
+ }
+
+ /* Sort the variation selectors */
+ for ( i=0; i<vs_cnt; ++i ) for ( j=i+1; j<vs_cnt; ++j ) {
+ if ( vses[i]>vses[j] ) {
+ int temp = vses[i];
+ vses[i] = vses[j];
+ vses[j] = temp;
+ }
+ }
+
+ avail = malloc(unicode4_size*sizeof(uint32));
+
+ format14 = tmpfile2();
+ putshort(format14,14);
+ putlong(format14,0); /* Length, fixup later */
+ putlong(format14,vs_cnt); /* number of selectors */
+
+ /* Variation selector records */
+ for ( i=0; i<vs_cnt; ++i ) {
+ putu24(format14,vses[i]);
+ putlong(format14,0);
+ putlong(format14,0);
+ }
+
+ for ( i=0; i<vs_cnt; ++i ) {
+ memset(avail,0,unicode4_size*sizeof(uint32));
+ any = 0;
+ for ( gid=mingid; gid<=maxgid; ++gid ) if ( (sc=sf->glyphs[gid])!=NULL ) {
+ for ( altuni = sc->altuni; altuni!=NULL; altuni=altuni->next ) {
+ if ( altuni->unienc!=-1 && altuni->unienc < (int)unicode4_size &&
+ altuni->vs==vses[i] && altuni->fid==0 ) {
+ for ( au=sc->altuni; au!=NULL; au=au->next )
+ if ( au->unienc==altuni->unienc && au->vs==-1 && au->fid==0 )
+ break;
+ if ( altuni->unienc==sc->unicodeenc || au!=NULL ) {
+ avail[altuni->unienc] = gid | vs_default;
+ any |= vs_default;
+ } else {
+ avail[altuni->unienc] = gid | vs_nondefault;
+ any |= vs_nondefault;
+ }
+ }
+ }
+ }
+ if ( any&vs_default ) {
+ here = ftell(format14);
+ fseek(format14,10+ i*11 + 3, SEEK_SET); /* Seek to defaultUVSOffset */
+ putlong(format14,here);
+ fseek(format14,0,SEEK_END);
+ cnt = 0;
+ for ( j=0; (unsigned)j<unicode4_size; ++j ) if ( avail[j]&vs_default ) {
+ for ( k=j+1; (unsigned)k<unicode4_size && (avail[k]&vs_default); ++k );
+ if ( k-j>256 ) k=j+256; /* Each range is limited to 255 code points, as the count is a byte */
+ ++cnt;
+ j = k-1;
+ }
+ putlong(format14,cnt);
+ for ( j=0; (unsigned)j<unicode4_size; ++j ) if ( avail[j]&vs_default ) {
+ for ( k=j+1; (unsigned)k<unicode4_size && (avail[k]&vs_default); ++k );
+ if ( k-j>256 ) k=j+256;
+ putu24(format14,j);
+ putc(k-j-1,format14);
+ j = k-1;
+ }
+ }
+ if ( any&vs_nondefault ) {
+ here = ftell(format14);
+ fseek(format14,10+ i*11 + 7, SEEK_SET); /* Seek to nonDefaultUVSOffset */
+ putlong(format14,here);
+ fseek(format14,0,SEEK_END);
+ cnt = 0;
+ for ( j=0; (unsigned)j<unicode4_size; ++j ) if ( avail[j]&vs_nondefault )
+ ++cnt;
+ putlong(format14,cnt);
+ for ( j=0; (unsigned)j<unicode4_size; ++j ) if ( avail[j]&vs_nondefault ) {
+ putu24(format14,j);
+ putshort(format14,sf->glyphs[avail[j]&0xffff]->ttf_glyph);
+ }
+ }
+ }
+
+ here = ftell(format14);
+ fseek(format14,2,SEEK_SET);
+ putlong(format14,here);
+ fseek(format14,0,SEEK_END);
+ if ( here&1 ) {
+ putc('\0',format14);
+ ++here;
+ }
+ if ( here&2 ) {
+ putshort(format14,0);
+ here += 2;
+ }
+ *vslen = here;
+
+ free(avail);
+ if ( vses!=vsbuf )
+ free(vses);
+
+return( format14 );
+}
+
+extern unichar_t MacRomanEnc[];
+static void dumpcmap(struct alltabs *at, SplineFont *sf,enum fontformat format) {
+ int i,enccnt, issmall, hasmac;
+ uint16 table[256];
+ SplineChar *sc;
+ int alreadyprivate = false;
+ int wasotf = format==ff_otf || format==ff_otfcid;
+ EncMap *map = at->map;
+ int ucs4len=0, ucs2len=0, cjklen=0, applecjklen=0, vslen=0;
+ FILE *format12, *format4, *format2, *apple2, *format14;
+ int mspos, ucs4pos, cjkpos, applecjkpos, vspos, start_of_macroman;
+ int modformat = format;
+
+ if (( format>=ff_ttf && format<=ff_otfdfont) && (at->gi.flags&ttf_flag_symbol))
+ modformat = ff_ttfsym;
+
+ at->cmap = tmpfile2();
+
+ /* MacRoman encoding table */ /* Not going to bother with making this work for cid fonts */
+ /* I now see that Apple doesn't restrict us to format 0 sub-tables (as */
+ /* the docs imply) but instead also uses format 6 tables. Wildly in- */
+ /* appropriate as they are for 2byte encodings, but Apple uses them */
+ /* for one byte ones too */
+ memset(table,'\0',sizeof(table));
+ if ( !wasotf ) {
+ table[29] = table[8] = table[0] = 1;
+ table[9] = table[13] = 2;
+ }
+ for ( i=0; i<256 ; ++i ) {
+ sc = SFGetChar(sf,MacRomanEnc[i],NULL);
+ if ( sc!=NULL && sc->ttf_glyph!=-1 )
+ table[i] = sc->ttf_glyph;
+ }
+ if ( table[0]==0 ) table[0] = 1;
+
+ if ( modformat==ff_ttfsym ) {
+ alreadyprivate = AlreadyMSSymbolArea(sf,map);
+ memset(table,'\0',sizeof(table));
+ if ( !wasotf ) {
+ table[29] = table[8] = table[0] = 1;
+ table[9] = table[13] = 2;
+ }
+ if ( !alreadyprivate ) {
+ for ( i=0; i<map->enccount && i<256; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL &&
+ sc->ttf_glyph!=-1 )
+ table[i] = sc->ttf_glyph;
+ }
+ for ( i=0xf020; i<=0xf0ff && i<sf->glyphcnt; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL &&
+ sc->ttf_glyph!=-1 && table[i-0xf000]==0 )
+ table[i-0xf000] = sc->ttf_glyph;
+ }
+ } else {
+ for ( i=0xf020; i<=0xf0ff && i<sf->glyphcnt; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL &&
+ sc->ttf_glyph!=-1 )
+ table[i-0xf000] = sc->ttf_glyph;
+ }
+ for ( i=0; i<map->enccount && i<256; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL &&
+ sc->ttf_glyph!=-1 && table[i]==0 )
+ table[i] = sc->ttf_glyph;
+ }
+ }
+ /* if the user has read in a ttf symbol file then it will already have */
+ /* the right private use encoding, and we don't want to mess it up. */
+ /* The alreadyprivate flag should detect this case */
+ if ( !alreadyprivate ) {
+ for ( i=0; i<map->enccount && i<256; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL ) {
+ sc->orig_pos = sc->unicodeenc;
+ sc->unicodeenc = 0xf000 + i;
+ }
+ }
+ for ( ; i<map->enccount; ++i ) {
+ if ( map->map[i]!=-1 && (sc = sf->glyphs[map->map[i]])!=NULL ) {
+ sc->orig_pos = sc->unicodeenc;
+ sc->unicodeenc = -1;
+ }
+ }
+ }
+ }
+
+ format4 = NeedsUCS2Table(sf,&ucs2len,map,modformat==ff_ttfsym);
+ apple2 = NULL;
+ if ( modformat!=ff_ttfsym ) {
+ format12 = NeedsUCS4Table(sf,&ucs4len,map);
+ format2 = Needs816Enc(sf,&cjklen,map,&apple2,&applecjklen);
+ format14 = NeedsVariationSequenceTable(sf,&vslen);
+ } else
+ format12 = format2 = format14 = apple2 = NULL;
+
+ /* Two/Three/Four encoding table pointers, one for ms, one for mac */
+ /* usually one for mac big, just a copy of ms */
+ /* plus we may have a format12 encoding for ucs4, mac doesn't support */
+ /* plus we may have a format2 encoding for cjk, sometimes I know the codes for the mac... */
+ /* sometimes the mac will have a slightly different cjk table */
+ /* Sometimes we want a variation sequence subtable (format=14) for */
+ /* unicode platform */
+ if ( modformat==ff_ttfsym ) {
+ enccnt = 2;
+ hasmac = 0;
+ } else {
+ hasmac = 1;
+ enccnt = 3;
+ if ( format12!=NULL )
+ enccnt = 5;
+ if ( format2!=NULL ) {
+ if ( strstrmatch(map->enc->enc_name,"johab")!=NULL ) {
+ ++enccnt;
+ } else {
+ enccnt+=2;
+ hasmac=3;
+ }
+ }
+ if ( format14!=NULL )
+ ++enccnt;
+ }
+
+ putshort(at->cmap,0); /* version */
+ putshort(at->cmap,enccnt); /* num tables */
+
+ mspos = 2*sizeof(uint16)+enccnt*(2*sizeof(uint16)+sizeof(uint32));
+ ucs4pos = mspos+ucs2len;
+ cjkpos = ucs4pos+ucs4len;
+ if ( apple2==NULL ) {
+ applecjkpos = cjkpos;
+ applecjklen = cjklen;
+ } else
+ applecjkpos = cjkpos + cjklen;
+ /* applecjklen set above */
+ vspos = applecjkpos + applecjklen;
+ start_of_macroman = vspos + vslen;
+
+ if ( hasmac&1 ) {
+ /* big mac table, just a copy of the ms table */
+ putshort(at->cmap,0); /* mac unicode platform */
+ putshort(at->cmap,3); /* Unicode 2.0 */
+ putlong(at->cmap,mspos);
+ }
+ if ( format12!=NULL ) {
+ /* full unicode mac table, just a copy of the ms table */
+ putshort(at->cmap,0); /* mac unicode platform */
+ if( map->enc->is_unicodefull ) {
+ putshort(at->cmap,10); /* Unicode 2.0, unicode beyond BMP */
+ } else {
+ putshort(at->cmap,4); /* Unicode 2.0, unicode BMP */
+ }
+ putlong(at->cmap,ucs4pos);
+ }
+ if ( format14!=NULL ) {
+ /* variation sequence subtable. Only for platform 0. */
+ putshort(at->cmap,0); /* mac unicode platform */
+ putshort(at->cmap,5); /* Variation sequence table */
+ putlong(at->cmap,vspos);
+ }
+ putshort(at->cmap,1); /* mac platform */
+ putshort(at->cmap,0); /* plat specific enc, script=roman */
+ /* Even the symbol font on the mac claims a mac roman encoding */
+ /* although it actually contains a symbol encoding. There is an*/
+ /* "RSymbol" language listed for Mac (specific=8) but it isn't used*/
+ putlong(at->cmap,start_of_macroman); /* offset from tab start to sub tab start */
+ if ( format2!=NULL && (hasmac&2) ) {
+ /* mac cjk table, often a copy of the ms table */
+ putshort(at->cmap,1); /* mac platform */
+ putshort(at->cmap,
+ map->enc->is_japanese || sf->uni_interp==ui_japanese ? 1 : /* SJIS */
+ map->enc->is_korean || sf->uni_interp==ui_korean ? 3 : /* Korean */
+ map->enc->is_simplechinese || sf->uni_interp==ui_simp_chinese ? 25 :/* Simplified Chinese */
+ 2 ); /* Big5 */
+ putlong(at->cmap,applecjkpos);
+ }
+
+ putshort(at->cmap,3); /* ms platform */
+ putshort(at->cmap, /* plat specific enc */
+ modformat==ff_ttfsym ? 0 : /* Symbol */
+ 1 ); /* Unicode */
+ putlong(at->cmap,mspos); /* offset from tab start to sub tab start */
+
+ if ( format2!=NULL ) {
+ putshort(at->cmap,3); /* ms platform */
+ putshort(at->cmap, /* plat specific enc */
+ strstrmatch(map->enc->enc_name,"johab")!=NULL ? 6 :
+ map->enc->is_korean || sf->uni_interp==ui_korean ? 5 :
+ map->enc->is_japanese || sf->uni_interp==ui_japanese ? 2 :
+ map->enc->is_simplechinese || sf->uni_interp==ui_simp_chinese ? 3 :
+ 4); /* Big5 */
+ putlong(at->cmap,cjkpos); /* offset from tab start to sub tab start */
+ }
+
+ if ( format12!=NULL ) {
+ putshort(at->cmap,3); /* ms platform */
+ putshort(at->cmap,10); /* plat specific enc, ucs4 */
+ putlong(at->cmap,ucs4pos); /* offset from tab start to sub tab start */
+ }
+ if ( format4!=NULL ) {
+ if ( !ttfcopyfile(at->cmap,format4,mspos,"cmap-Unicode16")) at->error = true;
+ }
+ if ( format12!=NULL ) {
+ if ( !ttfcopyfile(at->cmap,format12,ucs4pos,"cmap-Unicode32")) at->error = true;
+ }
+ if ( format2!=NULL ) {
+ if ( !ttfcopyfile(at->cmap,format2,cjkpos,"cmap-cjk")) at->error = true;
+ }
+ if ( apple2!=NULL ) {
+ if ( !ttfcopyfile(at->cmap,apple2,applecjkpos,"cmap-applecjk")) at->error = true;
+ }
+ if ( format14!=NULL ) {
+ if ( !ttfcopyfile(at->cmap,format14,vspos,"cmap-uniVariations")) at->error = true;
+ }
+
+ /* Mac table */
+ issmall = true;
+ for ( i=0; i<256; ++i )
+ if ( table[i]>=256 ) {
+ issmall = false;
+ break;
+ }
+ if ( issmall ) {
+ putshort(at->cmap,0); /* format */
+ putshort(at->cmap,262); /* length = 256bytes + 6 header bytes */
+ putshort(at->cmap,0); /* language = english */
+ for ( i=0; i<256; ++i )
+ putc(table[i],at->cmap);
+ } else {
+ putshort(at->cmap,6); /* format 6 */
+ putshort(at->cmap,522); /* length = 256short +10 header bytes */
+ putshort(at->cmap,0); /* language = english */
+ putshort(at->cmap,0); /* first code */
+ putshort(at->cmap,256); /* entry count */
+ for ( i=0; i<256; ++i )
+ putshort(at->cmap,table[i]);
+ }
+
+ at->cmaplen = ftell(at->cmap);
+ if ( (at->cmaplen&2)!=0 )
+ putshort(at->cmap,0);
+
+ if ( modformat==ff_ttfsym ) {
+ if ( !alreadyprivate ) {
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ sf->glyphs[i]->unicodeenc = sf->glyphs[i]->orig_pos;
+ sf->glyphs[i]->orig_pos = i;
+ }
+ }
+ }
+}
+
+int32 filechecksum(FILE *file) {
+ uint32 sum = 0, chunk;
+
+ rewind(file);
+ while ( 1 ) {
+ chunk = getuint32(file);
+ if ( feof(file) || ferror(file))
+ break;
+ sum += chunk;
+ }
+return( sum );
+}
+
+static void AbortTTF(struct alltabs *at, SplineFont *sf) {
+ int i;
+
+ if ( at->loca!=NULL )
+ fclose(at->loca);
+ if ( at->name!=NULL )
+ fclose(at->name);
+ if ( at->post!=NULL )
+ fclose(at->post);
+ if ( at->gpos!=NULL )
+ fclose(at->gpos);
+ if ( at->gsub!=NULL )
+ fclose(at->gsub);
+ if ( at->gdef!=NULL )
+ fclose(at->gdef);
+ if ( at->kern!=NULL )
+ fclose(at->kern);
+ if ( at->cmap!=NULL )
+ fclose(at->cmap);
+ if ( at->headf!=NULL )
+ fclose(at->headf);
+ if ( at->hheadf!=NULL )
+ fclose(at->hheadf);
+ if ( at->maxpf!=NULL )
+ fclose(at->maxpf);
+ if ( at->os2f!=NULL )
+ fclose(at->os2f);
+ if ( at->cvtf!=NULL )
+ fclose(at->cvtf);
+ if ( at->vheadf!=NULL )
+ fclose(at->vheadf);
+ if ( at->vorgf!=NULL )
+ fclose(at->vorgf);
+ if ( at->cfff!=NULL )
+ fclose(at->cfff);
+
+ if ( at->gi.glyphs!=NULL )
+ fclose(at->gi.glyphs);
+ if ( at->gi.hmtx!=NULL )
+ fclose(at->gi.hmtx);
+ if ( at->gi.vmtx!=NULL )
+ fclose(at->gi.vmtx);
+ if ( at->fpgmf!=NULL )
+ fclose(at->fpgmf);
+ if ( at->prepf!=NULL )
+ fclose(at->prepf);
+ if ( at->gaspf!=NULL )
+ fclose(at->gaspf);
+
+ if ( at->sidf!=NULL )
+ fclose(at->sidf);
+ if ( at->sidh!=NULL )
+ fclose(at->sidh);
+ if ( at->charset!=NULL )
+ fclose(at->charset);
+ if ( at->encoding!=NULL )
+ fclose(at->encoding);
+ if ( at->private!=NULL )
+ fclose(at->private);
+ if ( at->charstrings!=NULL )
+ fclose(at->charstrings);
+ if ( at->fdselect!=NULL )
+ fclose(at->fdselect);
+ if ( at->fdarray!=NULL )
+ fclose(at->fdarray);
+ if ( at->bdat!=NULL )
+ fclose(at->bdat);
+ if ( at->bloc!=NULL )
+ fclose(at->bloc);
+ if ( at->ebsc!=NULL )
+ fclose(at->ebsc);
+
+ if ( at->prop!=NULL )
+ fclose(at->prop);
+ if ( at->opbd!=NULL )
+ fclose(at->opbd);
+ if ( at->acnt!=NULL )
+ fclose(at->acnt);
+ if ( at->lcar!=NULL )
+ fclose(at->lcar);
+ if ( at->feat!=NULL )
+ fclose(at->feat);
+ if ( at->morx!=NULL )
+ fclose(at->morx);
+
+ if ( at->pfed!=NULL )
+ fclose(at->pfed);
+ if ( at->tex!=NULL )
+ fclose(at->tex);
+
+ if ( at->gvar!=NULL )
+ fclose(at->gvar);
+ if ( at->fvar!=NULL )
+ fclose(at->fvar);
+ if ( at->cvar!=NULL )
+ fclose(at->cvar);
+ if ( at->avar!=NULL )
+ fclose(at->avar);
+
+ for ( i=0; i<sf->subfontcnt; ++i ) {
+ if ( at->fds[i].private!=NULL )
+ fclose(at->fds[i].private);
+ }
+ if ( sf->subfontcnt!=0 ) {
+ free(sf->glyphs);
+ sf->glyphs = NULL;
+ sf->glyphcnt = sf->glyphmax = 0;
+ }
+ free( at->fds );
+ free( at->gi.bygid );
+}
+
+int SFHasInstructions(SplineFont *sf) {
+ int i;
+
+ if ( sf->mm!=NULL && sf->mm->apple )
+ sf = sf->mm->normal;
+
+ if ( sf->subfontcnt!=0 )
+return( false ); /* Truetype doesn't support cid keyed fonts */
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL ) {
+ if ( strcmp(sf->glyphs[i]->name,".notdef")==0 )
+ continue; /* ff produces fonts with instructions in .notdef & not elsewhere. Ignore these */
+ if ( sf->glyphs[i]->ttf_instrs!=NULL )
+return( true );
+ }
+return( false );
+}
+
+static void MaxpFromTable(struct alltabs *at,SplineFont *sf) {
+ struct ttf_table *maxp;
+
+ maxp = SFFindTable(sf,CHR('m','a','x','p'));
+ if ( maxp==NULL && sf->mm!=NULL && sf->mm->apple )
+ maxp = SFFindTable(sf->mm->normal,CHR('m','a','x','p'));
+ if ( maxp==NULL || maxp->len<13*sizeof(uint16) )
+return;
+ /* We can figure out the others ourselves, but these depend on the contents */
+ /* of uninterpretted tables */
+ at->maxp.maxZones = memushort(maxp->data,maxp->len, 7*sizeof(uint16));
+ at->maxp.maxTwilightPts = memushort(maxp->data,maxp->len, 8*sizeof(uint16));
+ at->maxp.maxStorage = memushort(maxp->data,maxp->len, 9*sizeof(uint16));
+ at->maxp.maxFDEFs = memushort(maxp->data,maxp->len, 10*sizeof(uint16));
+ at->maxp.maxIDEFs = memushort(maxp->data,maxp->len, 11*sizeof(uint16));
+ at->maxp.maxStack = memushort(maxp->data,maxp->len, 12*sizeof(uint16));
+}
+
+static FILE *dumpstoredtable(SplineFont *sf,uint32 tag,int *len) {
+ struct ttf_table *tab = SFFindTable(sf,tag);
+ FILE *out;
+
+ if ( tab==NULL && sf->mm!=NULL && sf->mm->apple )
+ tab = SFFindTable(sf->mm->normal,tag);
+ if ( tab==NULL ) {
+ *len = 0;
+return( NULL );
+ }
+
+ out = tmpfile2();
+ fwrite(tab->data,1,tab->len,out);
+ if ( (tab->len&1))
+ putc('\0',out);
+ if ( (tab->len+1)&2 )
+ putshort(out,0);
+ *len = tab->len;
+return( out );
+}
+
+static FILE *dumpsavedtable(struct ttf_table *tab) {
+ FILE *out;
+
+ if ( tab==NULL )
+return( NULL );
+
+ out = tmpfile2();
+ fwrite(tab->data,1,tab->len,out);
+ if ( (tab->len&1))
+ putc('\0',out);
+ if ( (tab->len+1)&2 )
+ putshort(out,0);
+return( out );
+}
+
+static int tagcomp(const void *_t1, const void *_t2) {
+ struct taboff *t1 = *((struct taboff **) _t1), *t2 = *((struct taboff **) _t2);
+return( (int) (t1->tag - t2->tag) );
+}
+
+static int tcomp(const void *_t1, const void *_t2) {
+ struct taboff *t1 = *((struct taboff **) _t1), *t2 = *((struct taboff **) _t2);
+return( t1->orderingval - t2->orderingval );
+}
+
+static void ATmaxpInit(struct alltabs *at,SplineFont *sf, enum fontformat format) {
+
+ at->maxp.version = 0x00010000;
+ if ( format==ff_otf || format==ff_otfcid || (format==ff_none && at->applemode) )
+ at->maxp.version = 0x00005000;
+ at->maxp.maxnumcomponents = 0;
+ at->maxp.maxcomponentdepth = 0;
+ at->maxp.maxZones = 2; /* 1 would probably do, don't use twilight */
+ at->maxp.maxFDEFs = 1; /* Not even 1 */
+ at->maxp.maxStorage = 1; /* Not even 1 */
+ at->maxp.maxStack = 64; /* A guess, it's probably more like 8 */
+ if ( format==ff_otf || format==ff_otfcid || (format==ff_none && at->applemode) )
+ at->maxp.version = 0x00005000;
+ else
+ MaxpFromTable(at,sf);
+ at->gi.maxp = &at->maxp;
+}
+
+static void initATTables(struct alltabs *at, SplineFont *sf, enum fontformat format) {
+ setos2(&at->os2,at,sf,format); /* should precede kern/ligature output */
+ if ( at->opentypemode ) {
+ SFFindUnusedLookups(sf);
+ otf_dumpgpos(at,sf);
+ otf_dumpgsub(at,sf);
+ otf_dumpgdef(at,sf);
+ otf_dumpjstf(at,sf);
+ otf_dumpbase(at,sf);
+ otf_dump_math(at,sf); /* Not strictly OpenType yet */
+ if ( at->gi.flags & ttf_flag_dummyDSIG )
+ otf_dump_dummydsig(at,sf);
+ }
+ if ( at->dovariations )
+ ttf_dumpvariations(at,sf);
+ if ( at->applemode ) {
+ if ( !at->opentypemode )
+ SFFindUnusedLookups(sf);
+ ttf_dumpkerns(at,sf);
+ aat_dumplcar(at,sf);
+ aat_dumpmorx(at,sf); /* Sets the feat table too */
+ aat_dumpopbd(at,sf);
+ aat_dumpprop(at,sf);
+ aat_dumpbsln(at,sf);
+ }
+ if ( !at->applemode && (!at->opentypemode || (at->gi.flags&ttf_flag_oldkern)) )
+ ttf_dumpkerns(at,sf); /* everybody supports a mimimal kern table */
+
+ dumpnames(at,sf,format); /* Must be after dumpmorx which may create extra names */
+ /* GPOS 'size' can also create names (so must be after that too) */
+ redoos2(at);
+}
+
+static struct taboff *findtabindir(struct tabdir *td, uint32 tag ) {
+ int i;
+
+ for ( i=0; i<td->numtab; ++i )
+ if ( td->tabs[i].tag == tag )
+return( &td->tabs[i] );
+
+return( NULL );
+}
+
+static void buildtablestructures(struct alltabs *at, SplineFont *sf,
+ enum fontformat format) {
+ int i;
+ int ebdtpos, eblcpos;
+ struct ttf_table *tab;
+
+ if ( format==ff_otf || format==ff_otfcid ) {
+ at->tabdir.version = CHR('O','T','T','O');
+#ifdef FONTFORGE_CONFIG_APPLE_ONLY_TTF /* This means that Windows will reject the font. In general not a good idea */
+ } else if ( at->applemode && !at->opentypemode ) {
+ at->tabdir.version = CHR('t','r','u','e');
+#endif
+ } else {
+ at->tabdir.version = 0x00010000;
+ }
+
+ i = 0;
+
+ if ( at->base!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('B','A','S','E');
+ at->tabdir.tabs[i].data = at->base;
+ at->tabdir.tabs[i++].length = at->baselen;
+ }
+
+ if ( at->bsln!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('b','s','l','n');
+ at->tabdir.tabs[i].data = at->bsln;
+ at->tabdir.tabs[i++].length = at->bslnlen;
+ }
+
+ if ( at->bdf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('B','D','F',' ');
+ at->tabdir.tabs[i].data = at->bdf;
+ at->tabdir.tabs[i++].length = at->bdflen;
+ }
+
+ if ( format==ff_otf || format==ff_otfcid ) {
+ at->tabdir.tabs[i].tag = CHR('C','F','F',' ');
+ at->tabdir.tabs[i].length = at->cfflen;
+ at->tabdir.tabs[i++].data = at->cfff;
+ }
+
+ if ( at->dsigf!=NULL ) {
+ ebdtpos = i;
+ at->tabdir.tabs[i].tag = CHR('D','S','I','G');
+ at->tabdir.tabs[i].length = at->dsiglen;
+ at->tabdir.tabs[i++].data = at->dsigf;
+ }
+
+ if ( at->bdat!=NULL && (at->msbitmaps || at->otbbitmaps)) {
+ ebdtpos = i;
+ at->tabdir.tabs[i].tag = CHR('E','B','D','T');
+ at->tabdir.tabs[i].length = at->bdatlen;
+ at->tabdir.tabs[i++].data = at->bdat;
+ }
+
+ if ( at->bloc!=NULL && (at->msbitmaps || at->otbbitmaps)) {
+ eblcpos = i;
+ at->tabdir.tabs[i].tag = CHR('E','B','L','C');
+ at->tabdir.tabs[i].data = at->bloc;
+ at->tabdir.tabs[i++].length = at->bloclen;
+ }
+
+ if ( at->ebsc!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('E','B','S','C');
+ at->tabdir.tabs[i].data = at->ebsc;
+ at->tabdir.tabs[i++].length = at->ebsclen;
+ }
+
+ if ( at->fftmf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('F','F','T','M');
+ at->tabdir.tabs[i].data = at->fftmf;
+ at->tabdir.tabs[i++].length = at->fftmlen;
+ }
+
+ if ( at->gdef!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('G','D','E','F');
+ at->tabdir.tabs[i].data = at->gdef;
+ at->tabdir.tabs[i++].length = at->gdeflen;
+ }
+
+ if ( at->gpos!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('G','P','O','S');
+ at->tabdir.tabs[i].data = at->gpos;
+ at->tabdir.tabs[i++].length = at->gposlen;
+ }
+
+ if ( at->gsub!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('G','S','U','B');
+ at->tabdir.tabs[i].data = at->gsub;
+ at->tabdir.tabs[i++].length = at->gsublen;
+ }
+
+ if ( at->jstf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('J','S','T','F');
+ at->tabdir.tabs[i].data = at->jstf;
+ at->tabdir.tabs[i++].length = at->jstflen;
+ }
+
+ if ( at->os2f!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('O','S','/','2');
+ at->tabdir.tabs[i].data = at->os2f;
+ at->tabdir.tabs[i++].length = at->os2len;
+ }
+
+ if ( at->pfed!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('P','f','E','d');
+ at->tabdir.tabs[i].data = at->pfed;
+ at->tabdir.tabs[i++].length = at->pfedlen;
+ }
+
+ if ( at->tex!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('T','e','X',' ');
+ at->tabdir.tabs[i].data = at->tex;
+ at->tabdir.tabs[i++].length = at->texlen;
+ }
+
+ if ( at->math!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('M','A','T','H');
+ at->tabdir.tabs[i].data = at->math;
+ at->tabdir.tabs[i++].length = at->mathlen;
+ }
+
+ if ( at->vorgf!=NULL ) { /* No longer generated */
+ at->tabdir.tabs[i].tag = CHR('V','O','R','G');
+ at->tabdir.tabs[i].data = at->vorgf;
+ at->tabdir.tabs[i++].length = at->vorglen;
+ }
+
+ if ( at->acnt!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('a','c','n','t');
+ at->tabdir.tabs[i].data = at->acnt;
+ at->tabdir.tabs[i++].length = at->acntlen;
+ }
+
+ if ( at->bdat!=NULL && at->applebitmaps ) {
+ at->tabdir.tabs[i].tag = CHR('b','d','a','t');
+ if ( !at->msbitmaps ) {
+ at->tabdir.tabs[i].data = at->bdat;
+ at->tabdir.tabs[i++].length = at->bdatlen;
+ } else {
+ at->tabdir.tabs[i].data = NULL;
+ at->tabdir.tabs[i].dup_of = ebdtpos;
+ at->tabdir.tabs[i++].length = at->tabdir.tabs[ebdtpos].length;
+ }
+ }
+
+ if ( format==ff_none && at->applebitmaps ) {
+ /* Bitmap only fonts get a bhed table rather than a head */
+ at->tabdir.tabs[i].tag = CHR('b','h','e','d');
+ at->tabdir.tabs[i].data = at->headf;
+ at->tabdir.tabs[i++].length = at->headlen;
+ }
+
+ if ( at->bloc!=NULL && at->applebitmaps ) {
+ at->tabdir.tabs[i].tag = CHR('b','l','o','c');
+ if ( !at->msbitmaps ) {
+ at->tabdir.tabs[i].data = at->bloc;
+ at->tabdir.tabs[i++].length = at->bloclen;
+ } else {
+ at->tabdir.tabs[i].data = NULL;
+ at->tabdir.tabs[i].dup_of = eblcpos;
+ at->tabdir.tabs[i++].length = at->tabdir.tabs[eblcpos].length;
+ }
+ }
+
+ if ( at->cmap!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('c','m','a','p');
+ at->tabdir.tabs[i].data = at->cmap;
+ at->tabdir.tabs[i++].length = at->cmaplen;
+ }
+
+ if ( format!=ff_otf && format!=ff_otfcid && format!=ff_none ) {
+ if ( at->cvtf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('c','v','t',' ');
+ at->tabdir.tabs[i].data = at->cvtf;
+ at->tabdir.tabs[i++].length = at->cvtlen;
+ }
+ }
+
+ if ( at->feat!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('f','e','a','t');
+ at->tabdir.tabs[i].data = at->feat;
+ at->tabdir.tabs[i++].length = at->featlen;
+ }
+
+ if ( at->fpgmf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('f','p','g','m');
+ at->tabdir.tabs[i].data = at->fpgmf;
+ at->tabdir.tabs[i++].length = at->fpgmlen;
+ }
+
+ if ( at->gaspf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('g','a','s','p');
+ at->tabdir.tabs[i].data = at->gaspf;
+ at->tabdir.tabs[i++].length = at->gasplen;
+ }
+
+ if ( at->gi.glyphs!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('g','l','y','f');
+ at->tabdir.tabs[i].data = at->gi.glyphs;
+ at->tabdir.tabs[i++].length = at->gi.glyph_len;
+ }
+
+ if ( at->hdmxf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('h','d','m','x');
+ at->tabdir.tabs[i].data = at->hdmxf;
+ at->tabdir.tabs[i++].length = at->hdmxlen;
+ }
+
+ if ( format!=ff_none || !at->applebitmaps ) {
+ at->tabdir.tabs[i].tag = CHR('h','e','a','d');
+ at->tabdir.tabs[i].data = at->headf;
+ at->tabdir.tabs[i++].length = at->headlen;
+ }
+
+ if ( format!=ff_none || !at->applemode ) {
+ at->tabdir.tabs[i].tag = CHR('h','h','e','a');
+ at->tabdir.tabs[i].data = at->hheadf;
+ at->tabdir.tabs[i++].length = at->hheadlen;
+ } else if ( at->hheadf!=NULL ) {
+ fclose(at->hheadf);
+ at->hheadf = NULL;
+ }
+
+ if ( format!=ff_none || !at->applemode ) {
+ at->tabdir.tabs[i].tag = CHR('h','m','t','x');
+ at->tabdir.tabs[i].data = at->gi.hmtx;
+ at->tabdir.tabs[i++].length = at->gi.hmtxlen;
+ }
+
+ if ( at->kern!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('k','e','r','n');
+ at->tabdir.tabs[i].data = at->kern;
+ at->tabdir.tabs[i++].length = at->kernlen;
+ }
+
+ if ( at->lcar!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('l','c','a','r');
+ at->tabdir.tabs[i].data = at->lcar;
+ at->tabdir.tabs[i++].length = at->lcarlen;
+ }
+
+ if ( at->loca!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('l','o','c','a');
+ at->tabdir.tabs[i].data = at->loca;
+ at->tabdir.tabs[i++].length = at->localen;
+ }
+
+ at->tabdir.tabs[i].tag = CHR('m','a','x','p');
+ at->tabdir.tabs[i].data = at->maxpf;
+ at->tabdir.tabs[i++].length = at->maxplen;
+
+ if ( at->morx!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('m','o','r','x');
+ at->tabdir.tabs[i].data = at->morx;
+ at->tabdir.tabs[i++].length = at->morxlen;
+ }
+
+ if ( at->name!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('n','a','m','e');
+ at->tabdir.tabs[i].data = at->name;
+ at->tabdir.tabs[i++].length = at->namelen;
+ }
+
+ if ( at->opbd!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('o','p','b','d');
+ at->tabdir.tabs[i].data = at->opbd;
+ at->tabdir.tabs[i++].length = at->opbdlen;
+ }
+
+ if ( at->post!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('p','o','s','t');
+ at->tabdir.tabs[i].data = at->post;
+ at->tabdir.tabs[i++].length = at->postlen;
+ }
+
+ if ( format!=ff_otf && format!=ff_otfcid && format!=ff_none ) {
+ if ( at->prepf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('p','r','e','p');
+ at->tabdir.tabs[i].data = at->prepf;
+ at->tabdir.tabs[i++].length = at->preplen;
+ }
+ }
+
+ if ( at->prop!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('p','r','o','p');
+ at->tabdir.tabs[i].data = at->prop;
+ at->tabdir.tabs[i++].length = at->proplen;
+ }
+
+ if ( at->vheadf!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('v','h','e','a');
+ at->tabdir.tabs[i].data = at->vheadf;
+ at->tabdir.tabs[i++].length = at->vheadlen;
+
+ at->tabdir.tabs[i].tag = CHR('v','m','t','x');
+ at->tabdir.tabs[i].data = at->gi.vmtx;
+ at->tabdir.tabs[i++].length = at->gi.vmtxlen;
+ }
+
+ if ( at->fvar!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('f','v','a','r');
+ at->tabdir.tabs[i].data = at->fvar;
+ at->tabdir.tabs[i++].length = at->fvarlen;
+ }
+ if ( at->gvar!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('g','v','a','r');
+ at->tabdir.tabs[i].data = at->gvar;
+ at->tabdir.tabs[i++].length = at->gvarlen;
+ }
+ if ( at->cvar!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('c','v','a','r');
+ at->tabdir.tabs[i].data = at->cvar;
+ at->tabdir.tabs[i++].length = at->cvarlen;
+ }
+ if ( at->avar!=NULL ) {
+ at->tabdir.tabs[i].tag = CHR('a','v','a','r');
+ at->tabdir.tabs[i].data = at->avar;
+ at->tabdir.tabs[i++].length = at->avarlen;
+ }
+
+ if ( i>=MAX_TAB )
+ IError("Miscalculation of number of tables needed. Up sizeof tabs array in struct tabdir in ttf.h" );
+
+ for ( tab=sf->ttf_tab_saved; tab!=NULL && i<MAX_TAB; tab=tab->next ) {
+ at->tabdir.tabs[i].tag = tab->tag;
+ at->tabdir.tabs[i].data = tab->temp;
+ at->tabdir.tabs[i++].length = tab->len;
+ }
+ if ( tab!=NULL )
+ IError("Some user supplied tables omitted. Up sizeof tabs array in struct tabdir in ttf.h" );
+
+ at->tabdir.numtab = i;
+ at->tabdir.searchRange = (i<16?8:i<32?16:i<64?32:64)*16;
+ at->tabdir.entrySel = (i<16?3:i<32?4:i<64?5:6);
+ at->tabdir.rangeShift = at->tabdir.numtab*16-at->tabdir.searchRange;
+}
+
+static int initTables(struct alltabs *at, SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf) {
+ int i, aborted, offset;
+ struct ttf_table *tab;
+
+ if (strmatch(at->map->enc->enc_name, "symbol") == 0 && format == ff_ttf)
+ format = ff_ttfsym;
+
+ tab = SFFindTable(sf, CHR('c', 'v', 't', ' '));
+ if (tab != NULL) {
+ at->oldcvt = tab;
+ at->oldcvtlen = tab->len;
+ }
+
+ SFDefaultOS2Info(&sf->pfminfo, sf, sf->fontname);
+
+ at->gi.xmin = at->gi.ymin = 15000;
+ at->gi.sf = sf;
+ bsizes = NULL;
+
+ if (sf->subfonts != NULL) {
+ SFDummyUpCIDs(&at->gi, sf); /* life is easier if we ignore the separate fonts of a cid keyed fonts and treat it as flat */
+ } else if (format != ff_none)
+ AssignTTFGlyph(&at->gi, sf, at->map, format == ff_otf);
+ else {
+ if (bsizes == NULL) {
+ ff_post_error(_("No bitmap strikes"), _("No bitmap strikes"));
+ AbortTTF(at, sf);
+ return ( false);
+ }
+// AssignTTFBitGlyph(&at->gi, sf, at->map, bsizes);
+ }
+ if (at->gi.gcnt > 65535) {
+ ff_post_error(_("Too many glyphs"), _("The 'sfnt' format is currently limited to 65535 glyphs, and your font has %d of them."),
+ at->gi.gcnt);
+ AbortTTF(at, sf);
+ return ( false);
+ } else if (at->gi.gcnt == 65535) {
+ /* GID 65535 is used as a "No Glyph" mark in many places (cmap tables, mac substitutions to delete a glyph */
+ LogError(_("Your font has exactly 65535 glyphs. Encoding 65535 is the limit and is often used as a magic \
+ value, so it may cause quirks.\n"));
+ }
+
+
+ ATmaxpInit(at,sf,format);
+ if ( format==ff_otf )
+ aborted = !dumptype2glyphs(sf,at);
+ else if ( format==ff_otfcid )
+ aborted = !dumpcidglyphs(sf,at);
+ else {
+ /* if format==ff_none the following will put out lots of space glyphs */
+ aborted = !dumpglyphs(sf,&at->gi);
+ }
+ if ( aborted ) {
+ AbortTTF(at,sf);
+return( false );
+ }
+
+ sethead(&at->head,sf,at,format,bsizes);
+ sethhead(&at->hhead,&at->vhead,at,sf);
+ if ( format==ff_none && at->otbbitmaps )
+ dummyloca(at);
+ else if ( format!=ff_otf && format!=ff_otfcid && bf!=bf_sfnt_dfont &&
+ (format!=ff_none || (bsizes!=NULL && !at->applemode && at->opentypemode)) )
+ redoloca(at);
+ redohead(at);
+ if ( format!=ff_none || !at->applemode ) /* No 'hhea' table for apple bitmap-only fonts */
+ redohhead(at,false);
+ if ( sf->hasvmetrics ) {
+ redohhead(at,true);
+ }
+ ttf_fftm_dump(sf,at);
+
+ if ( format!=ff_type42 && format!=ff_type42cid && !sf->internal_temp ) {
+ initATTables(at, sf, format);
+ }
+ redomaxp(at,format);
+ if ( format!=ff_otf && format!=ff_otfcid && format!=ff_none ) {
+ if (( sf->gasp_cnt!=0 || !SFHasInstructions(sf))
+ && format!=ff_type42 && format!=ff_type42cid )
+ dumpgasp(at, sf);
+ at->fpgmf = dumpstoredtable(sf,CHR('f','p','g','m'),&at->fpgmlen);
+ at->prepf = dumpstoredtable(sf,CHR('p','r','e','p'),&at->preplen);
+ at->cvtf = dumpstoredtable(sf,CHR('c','v','t',' '),&at->cvtlen);
+ }
+ for ( tab=sf->ttf_tab_saved; tab!=NULL; tab=tab->next )
+ tab->temp = dumpsavedtable(tab);
+ if ( format!=ff_type42 && format!=ff_type42cid ) {
+ dumppost(at,sf,format);
+ dumpcmap(at,sf,format);
+
+ pfed_dump(at,sf);
+ tex_dump(at,sf);
+ }
+ if ( sf->subfonts!=NULL ) {
+ free(sf->glyphs); sf->glyphs = NULL;
+ sf->glyphcnt = sf->glyphmax = 0;
+ }
+ free( at->gi.bygid );
+ at->gi.gcnt = 0;
+
+ buildtablestructures(at,sf,format);
+ for ( i=0; i<at->tabdir.numtab; ++i ) {
+ struct taboff *tab = &at->tabdir.tabs[i];
+ at->tabdir.ordered[i] = tab;
+ at->tabdir.alpha[i] = tab;
+/* This is the ordering of tables in ARIAL. I've no idea why it makes a */
+/* difference to order them, time to do a seek seems likely to be small, but */
+/* other people make a big thing about ordering them so I'll do it. */
+/* I got bored after glyph. Adobe follows the same scheme for their otf fonts */
+/* so at least the world is consistant */
+/* On the other hand, MS Font validator has a different idea. Oh well */
+/* From: http://partners.adobe.com/asn/tech/type/opentype/recom.jsp */
+/* TrueType Ordering */
+/* head, hhea, maxp, OS/2, hmtx, LTSH, VDMX, hdmx, cmap, fpgm, prep, cvt, */
+/* loca, glyf, kern, name, post, gasp, PCLT, DSIG */
+/* CFF in OpenType Ordering */
+/* head, hhea, maxp, OS/2, name, cmap, post, CFF, (other tables, as convenient) */
+ if ( format==ff_otf || format==ff_otfcid ) {
+ tab->orderingval = tab->tag==CHR('h','e','a','d')? 1 :
+ tab->tag==CHR('h','h','e','a')? 2 :
+ tab->tag==CHR('m','a','x','p')? 3 :
+ tab->tag==CHR('O','S','/','2')? 4 :
+ tab->tag==CHR('n','a','m','e')? 5 :
+ tab->tag==CHR('c','m','a','p')? 6 :
+ tab->tag==CHR('p','o','s','t')? 7 :
+ tab->tag==CHR('C','F','F',' ')? 8 :
+ tab->tag==CHR('G','D','E','F')? 17 :
+ tab->tag==CHR('G','S','U','B')? 18 :
+ tab->tag==CHR('G','P','O','S')? 19 :
+ 20;
+ } else {
+ tab->orderingval = tab->tag==CHR('h','e','a','d')? 1 :
+ tab->tag==CHR('h','h','e','a')? 2 :
+ tab->tag==CHR('m','a','x','p')? 3 :
+ tab->tag==CHR('O','S','/','2')? 4 :
+ tab->tag==CHR('h','m','t','x')? 5 :
+ tab->tag==CHR('L','T','S','H')? 6 :
+ tab->tag==CHR('V','D','M','X')? 7 :
+ tab->tag==CHR('h','d','m','x')? 8 :
+ tab->tag==CHR('c','m','a','p')? 9 :
+ tab->tag==CHR('f','p','g','m')? 10 :
+ tab->tag==CHR('p','r','e','p')? 11 :
+ tab->tag==CHR('c','v','t',' ')? 12 :
+ tab->tag==CHR('l','o','c','a')? 13 :
+ tab->tag==CHR('g','l','y','f')? 14 :
+ tab->tag==CHR('k','e','r','n')? 15 :
+ tab->tag==CHR('n','a','m','e')? 16 :
+ tab->tag==CHR('p','o','s','t')? 17 :
+ tab->tag==CHR('g','a','s','p')? 18 :
+ tab->tag==CHR('P','C','L','T')? 19 :
+ tab->tag==CHR('D','S','I','G')? 20 :
+ tab->tag==CHR('G','D','E','F')? 21 :
+ tab->tag==CHR('G','S','U','B')? 22 :
+ tab->tag==CHR('G','P','O','S')? 23 :
+ 24;
+ }
+ }
+
+ qsort(at->tabdir.ordered,at->tabdir.numtab,sizeof(struct taboff *),tcomp);
+ qsort(at->tabdir.alpha,i,sizeof(struct taboff *),tagcomp);
+
+ offset = sizeof(int32)+4*sizeof(int16) + at->tabdir.numtab*4*sizeof(int32);
+ for ( i=0; i<at->tabdir.numtab; ++i ) if ( at->tabdir.ordered[i]->data!=NULL ) {
+ at->tabdir.ordered[i]->offset = offset;
+ offset += ((at->tabdir.ordered[i]->length+3)>>2)<<2;
+ at->tabdir.ordered[i]->checksum = filechecksum(at->tabdir.ordered[i]->data);
+ }
+ for ( i=0; i<at->tabdir.numtab; ++i ) if ( at->tabdir.ordered[i]->data==NULL ) {
+ struct taboff *tab = &at->tabdir.tabs[at->tabdir.ordered[i]->dup_of];
+ at->tabdir.ordered[i]->offset = tab->offset;
+ at->tabdir.ordered[i]->checksum = tab->checksum;
+ }
+
+ tab = SFFindTable(sf,CHR('c','v','t',' '));
+ if ( tab!=NULL ) {
+ if ( at->oldcvt!=NULL && at->oldcvtlen<tab->len )
+ tab->len = at->oldcvtlen;
+ else if ( at->oldcvt==NULL ) {
+ /* We created a cvt table when we output the .notdef glyph */
+ /* now that means AutoInstr thinks it no longer has a blank */
+ /* slate to work with, and will complain, much to the user's */
+ /* surprise. So get rid of it */
+ struct ttf_table *prev = NULL;
+ for ( tab = sf->ttf_tables; tab!=NULL ; prev = tab, tab=tab->next )
+ if ( tab->tag==CHR('c','v','t',' ') )
+ break;
+ if ( tab!=NULL ) {
+ if ( prev==NULL )
+ sf->ttf_tables = tab->next;
+ else
+ prev->next = tab->next;
+ tab->next = NULL;
+ TtfTablesFree(tab);
+ }
+ }
+ }
+return( true );
+}
+
+static char *Tag2String(uint32 tag) {
+ static char buffer[8];
+
+ buffer[0] = tag>>24;
+ buffer[1] = tag>>16;
+ buffer[2] = tag>>8;
+ buffer[3] = tag;
+ buffer[4] = 0;
+return( buffer );
+}
+
+static void dumpttf(FILE *ttf,struct alltabs *at) {
+ int32 checksum;
+ int i, head_index=-1;
+ /* I can't use fwrite because I (may) have to byte swap everything */
+
+ putlong(ttf,at->tabdir.version);
+ putshort(ttf,at->tabdir.numtab);
+ putshort(ttf,at->tabdir.searchRange);
+ putshort(ttf,at->tabdir.entrySel);
+ putshort(ttf,at->tabdir.rangeShift);
+ for ( i=0; i<at->tabdir.numtab; ++i ) {
+ if ( at->tabdir.alpha[i]->tag==CHR('h','e','a','d') || at->tabdir.alpha[i]->tag==CHR('b','h','e','d') )
+ head_index = i;
+ putlong(ttf,at->tabdir.alpha[i]->tag);
+ putlong(ttf,at->tabdir.alpha[i]->checksum);
+ putlong(ttf,at->tabdir.alpha[i]->offset);
+ putlong(ttf,at->tabdir.alpha[i]->length);
+ }
+
+ for ( i=0; i<at->tabdir.numtab; ++i ) if ( at->tabdir.ordered[i]->data!=NULL ) {
+ if ( !ttfcopyfile(ttf,at->tabdir.ordered[i]->data,
+ at->tabdir.ordered[i]->offset,Tag2String(at->tabdir.ordered[i]->tag)))
+ at->error = true;
+ }
+
+ if ( head_index!=-1 ) {
+ checksum = filechecksum(ttf);
+ checksum = 0xb1b0afba-checksum;
+ fseek(ttf,at->tabdir.alpha[head_index]->offset+2*sizeof(int32),SEEK_SET);
+ putlong(ttf,checksum);
+ }
+
+ /* ttfcopyfile closed all the files (except ttf) */
+}
+
+static void DumpGlyphToNameMap(char *fontname,SplineFont *sf) {
+ char *d, *e;
+ char *newname = malloc(strlen(fontname)+10);
+ FILE *file;
+ int i,k,max;
+ SplineChar *sc;
+
+ strcpy(newname,fontname);
+ d = strrchr(newname,'/');
+ if ( d==NULL ) d=newname;
+ e = strrchr(d,'.');
+ if ( e==NULL ) e = newname+strlen(newname);
+ strcpy(e,".g2n");
+
+ file = fopen(newname,"wb");
+ if ( file==NULL ) {
+ LogError( _("Failed to open glyph to name map file for writing: %s\n"), newname );
+ free(newname);
+return;
+ }
+
+ if ( sf->subfontcnt==0 )
+ max = sf->glyphcnt;
+ else {
+ for ( k=max=0; k<sf->subfontcnt; ++k )
+ if ( sf->subfonts[k]->glyphcnt > max )
+ max = sf->subfonts[k]->glyphcnt;
+ }
+ for ( i=0; i<max; ++i ) {
+ sc = NULL;
+ if ( sf->subfontcnt==0 )
+ sc = sf->glyphs[i];
+ else {
+ for ( k=0; k<sf->subfontcnt; ++k ) if ( i<sf->subfonts[k]->glyphcnt )
+ if ( (sc=sf->subfonts[k]->glyphs[i])!=NULL )
+ break;
+ }
+ if ( sc!=NULL && sc->ttf_glyph!=-1 ) {
+ fprintf( file, "GLYPHID %d\tPSNAME %s", sc->ttf_glyph, sc->name );
+ if ( sc->unicodeenc!=-1 )
+ fprintf( file, "\tUNICODE %04X", sc->unicodeenc );
+ putc('\n',file);
+ }
+ }
+ fclose(file);
+ free(newname);
+}
+
+static int dumpcff(struct alltabs *at,SplineFont *sf,enum fontformat format,
+ FILE *cff) {
+ int ret;
+
+ if ( format==ff_cff ) {
+ AssignTTFGlyph(&at->gi,sf,at->map,true);
+ ret = dumptype2glyphs(sf,at);
+ } else {
+ SFDummyUpCIDs(&at->gi,sf); /* life is easier if we ignore the separate fonts of a cid keyed fonts and treat it as flat */
+ ret = dumpcidglyphs(sf,at);
+ free(sf->glyphs); sf->glyphs = NULL;
+ sf->glyphcnt = sf->glyphmax = 0;
+ }
+ free( at->gi.bygid );
+
+ if ( !ret )
+ at->error = true;
+ else if ( at->gi.flags & ps_flag_nocffsugar ) {
+ if ( !ttfcopyfile(cff,at->cfff,0,"CFF"))
+ at->error = true;
+ } else {
+ long len;
+ char buffer[80];
+ fprintf(cff,"%%!PS-Adobe-3.0 Resource-FontSet\n");
+ fprintf(cff,"%%%%DocumentNeedResources:ProcSet (FontSetInit)\n");
+ fprintf(cff,"%%%%Title: (FontSet/%s)\n", sf->fontname);
+ fprintf(cff,"%%%%EndComments\n" );
+ fprintf(cff,"%%%%IncludeResource: ProcSet(FontSetInit)\n" );
+ fprintf(cff,"%%%%BeginResource: FontSet(%s)\n", sf->fontname );
+ fprintf(cff,"/FontSetInit /ProcSet findresource begin\n" );
+ fseek(at->cfff,0,SEEK_END);
+ len = ftell(at->cfff);
+ rewind(at->cfff);
+ sprintf( buffer, "/%s %ld StartData\n", sf->fontname, len );
+ fprintf(cff,"%%%%BeginData: %ld Binary Bytes\n", (long) (len+strlen(buffer)) );
+ fputs(buffer,cff);
+ if ( !ttfcopyfile(cff,at->cfff,ftell(cff),"CFF"))
+ at->error = true;
+ fprintf(cff,"\n%%%%EndData\n" );
+ fprintf(cff,"%%%%EndResource\n" );
+ fprintf(cff,"%%%%EOF\n" );
+ }
+return( !at->error );
+}
+
+static void ATinit(struct alltabs *at,SplineFont *sf,EncMap *map,int flags, int layer,
+ enum fontformat format, enum bitmapformat bf,int *bsizes) {
+
+ at->gi.flags = flags;
+ at->gi.layer = layer;
+ at->gi.is_ttf = format == ff_ttf || format==ff_ttfsym || format==ff_ttfmacbin || format==ff_ttfdfont;
+ at->gi.sf = sf;
+ at->applemode = (flags&ttf_flag_applemode)?1:0;
+ at->opentypemode = (flags&ttf_flag_otmode)?1:0;
+ at->msbitmaps = bsizes!=NULL && at->opentypemode;
+ at->applebitmaps = bsizes!=NULL && at->applemode;
+ at->gi.onlybitmaps = format==ff_none;
+
+ if ( bf==bf_sfnt_dfont ) { at->msbitmaps = false; at->applebitmaps=true; at->opentypemode=false; at->gi.onlybitmaps=true;}
+ if ( bf==bf_sfnt_ms ) { at->msbitmaps = true; at->applebitmaps=false; at->applemode=false; at->gi.onlybitmaps=true;}
+ if ( bf==bf_otb ) { at->otbbitmaps = true; at->applebitmaps=at->msbitmaps=false; at->applemode=false; at->gi.onlybitmaps=true;}
+
+ if ( bsizes!=NULL && !at->applebitmaps && !at->otbbitmaps && !at->msbitmaps )
+ at->msbitmaps = true; /* They asked for bitmaps, but no bitmap type selected */
+ at->gi.bsizes = bsizes;
+ at->gi.fixed_width = CIDOneWidth(sf);
+ at->isotf = format==ff_otf || format==ff_otfcid;
+ at->format = format;
+ at->next_strid = 256;
+ if ( at->applemode && sf->mm!=NULL && sf->mm->apple &&
+ (format==ff_ttf || format==ff_ttfsym || format==ff_ttfmacbin ||
+ format==ff_ttfdfont) &&
+ MMValid(sf->mm,false)) {
+ at->dovariations = true;
+ at->gi.dovariations = true;
+ sf = sf->mm->normal;
+ }
+ at->sf = sf;
+ at->map = map;
+}
+
+int _WriteTTFFont(FILE *ttf,SplineFont *sf,enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *map, int layer) {
+ struct alltabs at;
+ int i, anyglyphs;
+
+ short_too_long_warned = 0; // This is a static variable defined for putshort.
+ /* TrueType probably doesn't need this, but OpenType does for floats in dictionaries */
+ ff_locale_t tmplocale, oldlocale; // Declare temporary locale storage.
+ switch_to_c_locale(&tmplocale, &oldlocale); // Switch to the C locale temporarily and cache the old locale.
+
+ if ( format==ff_otfcid || format== ff_cffcid ) {
+ if ( sf->cidmaster ) sf = sf->cidmaster;
+ } else {
+ if ( sf->subfontcnt!=0 ) sf = sf->subfonts[0];
+ }
+
+ if ( sf->subfontcnt==0 ) {
+ anyglyphs = false;
+ for ( i=sf->glyphcnt-1; i>=0 ; --i ) {
+ if ( SCWorthOutputting(sf->glyphs[i])) {
+ anyglyphs = true;
+ if ( sf->glyphs[i]->unicodeenc!=-1 )
+ break;
+ }
+ }
+ if ( !anyglyphs && !sf->internal_temp ) {
+ ff_post_error(_("No Encoded Glyphs"),_("Warning: Font contained no glyphs"));
+ }
+ if ( format!=ff_ttfsym && !(flags&ttf_flag_symbol) && !sf->internal_temp ) {
+ if ( i<0 && anyglyphs ) {
+ if ( map->enccount<=256 ) {
+ char *buts[3];
+ buts[0] = _("_Yes"); buts[1] = _("_No"); buts[2] = NULL;
+ if ( ff_ask(_("No Encoded Glyphs"),(const char **) buts,0,1,_("This font contains no glyphs with unicode encodings.\nWould you like to use a \"Symbol\" encoding instead of Unicode?"))==0 )
+ flags |= ttf_flag_symbol;
+ } else
+ ff_post_error(_("No Encoded Glyphs"),_("This font contains no glyphs with unicode encodings.\nYou will probably not be able to use the output."));
+ }
+ }
+ }
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->ttf_glyph = -1;
+
+ memset(&at,'\0',sizeof(struct alltabs));
+ ATinit(&at,sf,map,flags,layer,format,bf,bsizes);
+
+ if ( format==ff_cff || format==ff_cffcid ) {
+ dumpcff(&at,sf,format,ttf);
+ } else {
+ if ( initTables(&at,sf,format,bsizes,bf))
+ dumpttf(ttf,&at);
+ }
+ switch_to_old_locale(&tmplocale, &oldlocale); // Switch to the cached locale.
+ if ( at.error || ferror(ttf))
+return( 0 );
+
+#ifdef __CygWin
+ /* Modern versions of windows want the execute bit set on a ttf file */
+ /* I've no idea what this corresponds to in windows, nor any idea on */
+ /* how to set it from the windows UI, but this seems to work */
+ {
+ struct stat buf;
+ fstat(fileno(ttf),&buf);
+ fchmod(fileno(ttf),S_IXUSR | buf.st_mode );
+ }
+#endif
+
+return( 1 );
+}
+
+int WriteTTFFont(char *fontname,SplineFont *sf,enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *map, int layer) {
+ FILE *ttf;
+ int ret;
+
+ if ( strstr(fontname,"://")!=NULL ) {
+ if (( ttf = tmpfile2())==NULL )
+return( 0 );
+ } else {
+ if (( ttf=fopen(fontname,"wb+"))==NULL )
+return( 0 );
+ }
+ ret = _WriteTTFFont(ttf,sf,format,bsizes,bf,flags,map,layer);
+ if ( ret && (flags&ttf_flag_glyphmap) )
+ DumpGlyphToNameMap(fontname,sf);
+ if ( fclose(ttf)==-1 )
+return( 0 );
+return( ret );
+}
+
+/* ************************************************************************** */
+/* ****************************** Type42 stuff ****************************** */
+
+/* ************************************************************************** */
+/* ******************************* TTC stuff ******************************** */
+/* ************************************************************************** */
+
+typedef struct splinecharlist *UHash[65536];
+typedef struct splinecharlist *NHash[257];
+
+static unsigned int hashname(const char *name) {
+ unsigned int hash = 0;
+
+ while ( *name ) {
+ unsigned int extra = (hash>>27);
+ hash<<=5;
+ hash += *name&0x1f;
+ hash ^= extra;
+ ++name;
+ }
+return( hash % 257 );
+}
+
+static int glyphmatches(SplineChar *sc,SplineChar *sc2,int layer) {
+ RefChar *r, *r2;
+ SplineSet *ss, *ss2;
+ SplinePoint *sp, *sp2;
+
+ if ( sc->width!=sc2->width )
+return( false );
+ if ( sc->ttf_instrs_len != sc2->ttf_instrs_len )
+return( false );
+ if ( sc->ttf_instrs_len!=0 && memcmp(sc->ttf_instrs,sc2->ttf_instrs,sc->ttf_instrs_len)!=0 )
+return( false );
+
+ for ( r=sc->layers[layer].refs, r2=sc2->layers[layer].refs;
+ r!=NULL && r2!=NULL;
+ r = r->next, r2 = r2->next ) {
+ if ( r->transform[0] != r2->transform[0] ||
+ r->transform[1] != r2->transform[1] ||
+ r->transform[2] != r2->transform[2] ||
+ r->transform[3] != r2->transform[3] ||
+ r->transform[4] != r2->transform[4] ||
+ r->transform[5] != r2->transform[5] )
+return( false );
+ if ( r->sc->unicodeenc!=r2->sc->unicodeenc )
+return( false );
+ if ( r->sc->unicodeenc==-1 && strcmp(r->sc->name,r2->sc->name)!=0 )
+return( false );
+ }
+ if ( r!=NULL || r2!=NULL )
+return( false );
+
+ for ( ss=sc->layers[layer].splines, ss2=sc2->layers[layer].splines;
+ ss!=NULL && ss2!=NULL;
+ ss = ss->next, ss2 = ss2->next ) {
+ for ( sp=ss->first, sp2=ss2->first; sp!=NULL && sp2!=NULL; ) {
+ if ( sp->me.x != sp2->me.x ||
+ sp->me.y != sp2->me.y ||
+ sp->nextcp.x != sp2->nextcp.x ||
+ sp->nextcp.y != sp2->nextcp.y ||
+ sp->prevcp.x != sp2->prevcp.x ||
+ sp->prevcp.y != sp2->prevcp.y )
+return( false );
+ sp = (sp->next ? sp->next->to : NULL);
+ sp2 = (sp2->next ? sp2->next->to : NULL);
+ if ( sp==ss->first ) {
+ if ( sp2==ss2->first )
+ break;
+return( false );
+ } else if ( sp2==ss2->first )
+return( false );
+ }
+ if (( sp==NULL && sp2!=NULL ) || ( sp!=NULL && sp2==NULL ))
+return( false );
+ }
+ if ( ss==NULL && ss2==NULL )
+return( true );
+
+return( false );
+}
+
+static SplineChar *hashglyphfound(SplineChar *sc,UHash *uhash,NHash *nhash,int layer) {
+ int hash;
+ struct splinecharlist *test;
+ struct altuni *alt;
+
+ /* the unicodeenc might be unset and we might still have altunis if the */
+ /* glyph is controlled by a variant selector */
+ if ( sc->unicodeenc==-1 && sc->altuni==NULL ) {
+ hash = hashname(sc->name);
+ for ( test=(*nhash)[hash]; test!=NULL; test=test->next )
+ if ( strcmp(test->sc->name,sc->name)==0 && glyphmatches(sc,test->sc,layer))
+return( test->sc );
+ } else if ( sc->unicodeenc!=-1 ) {
+ hash = sc->unicodeenc&0xffff;
+ for ( test=(*uhash)[hash]; test!=NULL; test=test->next )
+ if ( glyphmatches(sc,test->sc,layer))
+return( test->sc );
+ }
+ for ( alt=sc->altuni; alt!=NULL; alt=alt->next ) {
+ hash = alt->unienc&0xffff;
+ for ( test=(*uhash)[hash]; test!=NULL; test=test->next )
+ if ( glyphmatches(sc,test->sc,layer))
+return( test->sc );
+ }
+return( NULL );
+}
+
+static void hashglyphadd(SplineChar *sc,UHash *uhash,NHash *nhash) {
+ int hash;
+ struct splinecharlist *test;
+ struct altuni *alt;
+
+ if ( sc->unicodeenc==-1 && sc->altuni==NULL ) {
+ hash = hashname(sc->name);
+ test = chunkalloc(sizeof(struct splinecharlist));
+ test->sc = sc;
+ test->next = (*nhash)[hash];
+ (*nhash)[hash] = test;
+ } else if ( sc->unicodeenc!=-1 ) {
+ hash = sc->unicodeenc&0xffff;
+ test = chunkalloc(sizeof(struct splinecharlist));
+ test->sc = sc;
+ test->next = (*uhash)[hash];
+ (*uhash)[hash] = test;
+ }
+ for ( alt=sc->altuni; alt!=NULL; alt=alt->next ) {
+ hash = alt->unienc&0xffff;
+ test = chunkalloc(sizeof(struct splinecharlist));
+ test->sc = sc;
+ test->next = (*uhash)[hash];
+ (*uhash)[hash] = test;
+ }
+}
+
+static struct alltabs *ttc_prep(struct sflist *sfs, enum fontformat format,
+ enum bitmapformat bf,int flags, int layer,SplineFont *dummysf) {
+ struct alltabs *ret;
+ int fcnt, cnt, gcnt=3;
+ struct sflist *sfitem;
+ int emsize = -1;
+ UHash *uhash; /* hash glyphs by unicode */
+ NHash *nhash; /* hash glyphs by name if no unicode */
+ int anyvmetrics = false;
+ int *bygid;
+ SplineFont *sf;
+ SplineChar *sc, *test;
+ int i, aborted;
+
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt ) {
+ sf = sfitem->sf;
+ /* to share the same 'head' table all must be the same emsize */
+ if ( emsize==-1 )
+ emsize = sf->ascent + sf->descent;
+ else if ( emsize != sf->ascent + sf->descent )
+return( NULL );
+ if ( format==ff_otf && !PSDictSame(sf->private,sfs->sf->private))
+return( NULL );
+ if ( sf->hasvmetrics ) anyvmetrics = true;
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( (sc = sf->glyphs[i])!=NULL )
+ sc->ttf_glyph = -1;
+ gcnt += sf->glyphcnt;
+ }
+ if ( cnt==0 )
+return( NULL );
+ fcnt = cnt;
+
+ uhash = calloc(1,sizeof(UHash));
+ nhash = calloc(1,sizeof(NHash));
+
+ *dummysf = *sfs->sf;
+ dummysf->glyphmax = gcnt;
+ dummysf->glyphs = calloc(gcnt,sizeof(SplineChar *));
+ dummysf->glyphcnt = 0;
+ dummysf->hasvmetrics = anyvmetrics;
+
+ bygid = malloc((gcnt+3)*sizeof(int));
+ memset(bygid,0xff, (gcnt+3)*sizeof(int));
+ for ( sfitem= sfs; sfitem!=NULL; sfitem=sfitem->next ) {
+ AssignNotdefNull(sfitem->sf,bygid,false);
+ if ( bygid[0]!=-1 && dummysf->glyphs[0]==NULL ) {
+ dummysf->glyphs[0] = sfitem->sf->glyphs[bygid[0]];
+ bygid[0]=0;
+ }
+ if ( format==ff_ttf ) {
+ if ( bygid[1]!=-1 && dummysf->glyphs[1]==NULL ) {
+ dummysf->glyphs[1] = sfitem->sf->glyphs[bygid[1]];
+ bygid[1]=1;
+ }
+ if ( bygid[2]!=-1 && dummysf->glyphs[2]==NULL ) {
+ dummysf->glyphs[2] = sfitem->sf->glyphs[bygid[2]];
+ bygid[2]=2;
+ }
+ if ( bygid[0]!=-1 && bygid[1]!=-1 && bygid[2]!=-1 )
+ break;
+ } else {
+ if ( bygid[0]!=-1 )
+ break;
+ }
+ }
+ dummysf->glyphcnt = format==ff_ttf ? 3 : 1;
+
+ ret = calloc(fcnt+2,sizeof(struct alltabs));
+ ATinit(&ret[fcnt],dummysf,sfs->map,flags&~ttf_flag_dummyDSIG,
+ layer,format,bf,NULL);
+ ret[fcnt].gi.ttc_composite_font = true;
+ ATmaxpInit(&ret[fcnt],dummysf,format);
+
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt ) {
+ sf = sfitem->sf;
+ ATinit(&ret[cnt],sf,sfitem->map,flags&~ttf_flag_dummyDSIG,
+ layer,format,bf,sfitem->sizes);
+ ret[cnt].gi.bygid = malloc((gcnt+3)*sizeof(int));
+ memset(ret[cnt].gi.bygid,-1,(gcnt+3)*sizeof(int));
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( SCWorthOutputting(sc = sf->glyphs[i])) {
+ if ( sc->ttf_glyph==-1 ) {
+ if ( strcmp(sc->name,".notdef")==0 )
+ sc->ttf_glyph = bygid[0];
+ else if ( format==ff_ttf &&
+ (strcmp(sf->glyphs[i]->name,".null")==0 ||
+ strcmp(sf->glyphs[i]->name,"uni0000")==0 ||
+ (i==1 && strcmp(sf->glyphs[1]->name,"glyph1")==0)) )
+ sc->ttf_glyph = bygid[1];
+ else if ( format==ff_ttf &&
+ (strcmp(sf->glyphs[i]->name,"nonmarkingreturn")==0 ||
+ strcmp(sf->glyphs[i]->name,"uni000D")==0 ||
+ (i==2 && strcmp(sf->glyphs[2]->name,"glyph2")==0)))
+ sc->ttf_glyph = bygid[2];
+ else {
+ test = hashglyphfound(sc,uhash,nhash,layer);
+ if ( test!=NULL )
+ sc->ttf_glyph = test->ttf_glyph;
+ else {
+ sc->ttf_glyph = dummysf->glyphcnt++;
+ bygid[sc->ttf_glyph] = sc->ttf_glyph;
+ dummysf->glyphs[sc->ttf_glyph] = sc;
+ hashglyphadd(sc,uhash,nhash);
+ }
+ }
+ }
+ if ( sc->ttf_glyph!=-1 ) {
+ ret[cnt].gi.bygid[sc->ttf_glyph] = i;
+ if ( sc->ttf_glyph>=ret[cnt].gi.gcnt )
+ ret[cnt].gi.gcnt = sc->ttf_glyph+1;
+ }
+ }
+ if ( sc!=NULL )
+ sc->lsidebearing = 0x7fff;
+ }
+
+ MaxpFromTable(&ret[cnt],sf);
+
+ if ( ret[cnt].maxp.maxZones > ret[fcnt].maxp.maxZones )
+ ret[fcnt].maxp.maxZones = ret[cnt].maxp.maxZones;
+ if ( ret[cnt].maxp.maxTwilightPts > ret[fcnt].maxp.maxTwilightPts )
+ ret[fcnt].maxp.maxTwilightPts = ret[cnt].maxp.maxTwilightPts;
+ if ( ret[cnt].maxp.maxStorage > ret[fcnt].maxp.maxStorage )
+ ret[fcnt].maxp.maxStorage = ret[cnt].maxp.maxStorage;
+ if ( ret[cnt].maxp.maxFDEFs > ret[fcnt].maxp.maxFDEFs )
+ ret[fcnt].maxp.maxFDEFs = ret[cnt].maxp.maxFDEFs;
+ if ( ret[cnt].maxp.maxIDEFs > ret[fcnt].maxp.maxIDEFs )
+ ret[fcnt].maxp.maxIDEFs = ret[cnt].maxp.maxIDEFs;
+ if ( ret[cnt].maxp.maxStack > ret[fcnt].maxp.maxStack )
+ ret[fcnt].maxp.maxStack = ret[cnt].maxp.maxStack;
+ }
+ free(uhash);
+ free(nhash);
+
+ if ( dummysf->glyphcnt>0xffff ) {
+ free(dummysf->glyphs);
+ free(bygid);
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt )
+ free(ret[cnt].gi.bygid);
+ free(ret);
+return( NULL );
+ }
+
+ ret[fcnt].gi.fixed_width = CIDOneWidth(sf);
+ ret[fcnt].gi.bygid = bygid;
+ ret[fcnt].gi.gcnt = ret[fcnt].maxp.numGlyphs = dummysf->glyphcnt;
+ if ( format==ff_ttf )
+ aborted = !dumpglyphs(dummysf,&ret[cnt].gi);
+ else
+ aborted = !dumptype2glyphs(dummysf,&ret[cnt]);
+ if ( aborted ) {
+ free(dummysf->glyphs);
+ free(bygid);
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt )
+ free(ret[cnt].gi.bygid);
+ free(ret);
+return( NULL );
+ }
+ sethhead(&ret[fcnt].hhead,&ret[fcnt].vhead,&ret[fcnt],dummysf);
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt )
+ ret[cnt].maxp = ret[fcnt].maxp;
+
+ /* Just to get a timestamp for all other heads */
+ /* and to figure out whether 'loca' is 4byte or 2 */
+ sethead(&ret[fcnt].head,dummysf,&ret[fcnt],format,NULL);
+ if ( format==ff_ttf )
+ redoloca(&ret[fcnt]);
+ redohhead(&ret[fcnt],false);
+ if ( dummysf->hasvmetrics )
+ redohhead(&ret[fcnt],true);
+ ttf_fftm_dump(dummysf,&ret[fcnt]);
+
+return( ret );
+}
+
+static FILE *checkdupstoredtable(SplineFont *sf,uint32 tag,int *len,
+ struct alltabs *all, int me) {
+ int i;
+ struct ttf_table *tab = SFFindTable(sf,tag), *test;
+
+ if ( tab==NULL ) {
+ *len = 0;
+return( NULL );
+ }
+ for ( i=0; i<me; ++i ) {
+ test = SFFindTable(all[i].sf,tag);
+ if ( test!=NULL && test->len==tab->len &&
+ memcmp(test->data,tab->data,tab->len)==0 ) {
+ *len = i;
+return( (FILE *) (intpt) -1 );
+ }
+ }
+return( dumpstoredtable(sf,tag,len));
+}
+
+static void ttc_perfonttables(struct alltabs *all, int me, int mainpos,
+ enum fontformat format ) {
+ struct alltabs *at = &all[me];
+ struct alltabs *tabsmain = &all[mainpos];
+ SplineFont *sf = at->sf;
+ struct ttf_table *tab;
+
+ at->gi.xmin = tabsmain->gi.xmin; at->gi.xmax = tabsmain->gi.xmax;
+ at->gi.ymin = tabsmain->gi.ymin; at->gi.ymax = tabsmain->gi.ymax;
+ at->gi.glyph_len = tabsmain->gi.glyph_len;
+ at->gi.gcnt = tabsmain->maxp.numGlyphs;
+ sethead(&at->head,sf,at,format,NULL);
+ memcpy(at->head.modtime,tabsmain->head.modtime,sizeof(at->head.modtime));
+ memcpy(at->head.createtime,at->head.modtime,sizeof(at->head.modtime));
+ initATTables(at, sf, format); /* also name and OS/2 */
+
+ if ( format==ff_ttf ) {
+ if ( sf->gasp_cnt!=0 || !SFHasInstructions(sf) )
+ dumpgasp(at, sf);
+ at->fpgmf = checkdupstoredtable(sf,CHR('f','p','g','m'),&at->fpgmlen, all, me);
+ at->prepf = checkdupstoredtable(sf,CHR('p','r','e','p'),&at->preplen, all, me);
+ at->cvtf = checkdupstoredtable(sf,CHR('c','v','t',' '),&at->cvtlen, all, me);
+ }
+
+ for ( tab=sf->ttf_tab_saved; tab!=NULL; tab=tab->next )
+ tab->temp = dumpsavedtable(tab);
+ {
+ /* post table is expected to have names for every glyph (or none) even*/
+ /* those not used in this font. Now it might seem we could just share*/
+ /* the post table, but it also contains a few font specific things */
+ /* (italic angle, etc.) so dump one for each font and hope that we'll*/
+ /* be able to coalesce them later when we check if any tables are the*/
+ /* same across fonts */
+ int cnt = sf->glyphcnt;
+ SplineChar **g = sf->glyphs;
+ int *bygid = at->gi.bygid;
+ sf->glyphcnt = tabsmain->sf->glyphcnt;
+ sf->glyphs = tabsmain->sf->glyphs;
+ at->gi.bygid = tabsmain->gi.bygid;
+ dumppost(at,sf,format);
+ sf->glyphcnt = cnt;
+ sf->glyphs = g;
+ at->gi.bygid = bygid;
+ }
+ dumpcmap(at,sf,format);
+ redohead(at);
+
+ pfed_dump(at,sf);
+ tex_dump(at,sf);
+
+ /* These tables are always to be shared and are found in the extra structure */
+ /* called main */
+ if ( format==ff_ttf ) {
+ at->loca = (void *) (intpt) -1; at->localen = mainpos;
+ at->gi.glyphs = (void *) (intpt) -1; at->gi.glyph_len = mainpos;
+ } else {
+ at->cfff = (void *) (intpt) -1; at->cfflen = mainpos;
+ }
+ at->fftmf = (void *) (intpt) -1; at->fftmlen = mainpos;
+ at->hheadf = (void *) (intpt) -1; at->hheadlen = mainpos;
+ at->gi.hmtx = (void *) (intpt) -1; at->gi.hmtxlen = mainpos;
+ at->maxpf = (void *) (intpt) -1; at->maxplen = mainpos;
+ if ( all[mainpos].vheadf!=NULL ) {
+ at->vheadf = (void *) (intpt) -1; at->vheadlen = mainpos;
+ at->gi.vmtx = (void *) (intpt) -1; at->gi.vmtxlen = mainpos;
+ }
+
+ free(at->gi.bygid);
+}
+
+static int tablefilematch(struct taboff *tab,FILE *ttc,struct alltabs *all,int pos) {
+ int i, ch1, ch2;
+ struct taboff *test;
+ unsigned len;
+
+ /* See if this table (which lives in its own file) matches any tables */
+ /* with the same tag in an earlier font */
+
+ for ( i=0; i<pos; ++i ) {
+ test = findtabindir(&all[i].tabdir,tab->tag);
+ if ( test==NULL || test->data==(void *) (intpt) -1 ||
+ test->length!=tab->length )
+ continue;
+ rewind(tab->data);
+ fseek(ttc,test->offset,SEEK_SET);
+ for ( len=0; len<tab->length && (ch1=getc(tab->data))!=EOF && (ch2=getc(ttc))!=EOF; ++len ) {
+ if ( ch1!=ch2 )
+ break;
+ }
+ if ( len==tab->length ) {
+ rewind(tab->data);
+ fseek(ttc,0,SEEK_END);
+return( i );
+ }
+ }
+ rewind(tab->data);
+ fseek(ttc,0,SEEK_END);
+return( -1 );
+}
+
+static void ttc_dump(FILE *ttc,struct alltabs *all, enum fontformat format,
+ int flags, enum ttc_flags ttc_flags ) {
+ int i,j,cnt,tot,ch,dup;
+ int offset, startoffset;
+ struct taboff *tab;
+
+ for ( cnt=0; all[cnt].sf!=NULL; ++cnt );
+ --cnt; /* Last one is dummysf */
+
+ putlong(ttc,CHR('t','t','c','f'));
+ if ( flags&ttf_flag_dummyDSIG ) {
+ putlong(ttc,0x00020000);
+ startoffset = 4*(3+cnt+4);
+ } else {
+ putlong(ttc,0x00010000);
+ startoffset = 4*(3+cnt);
+ }
+ putlong(ttc,cnt);
+ offset = startoffset;
+ for ( i=0; i<cnt; ++i ) {
+ putlong(ttc,offset); /* Pointer to font header */
+ offset += (8+16*MAX_TAB); /* Explained below */
+ }
+ if ( flags&ttf_flag_dummyDSIG ) {
+ putlong(ttc,CHR('D','S','I','G'));
+ putlong(ttc,8); /* Length of dummy DSIG table */
+ putlong(ttc,0x00000001); /* Standard DSIG version */
+ putlong(ttc,0); /* No Signatures, no flags */
+ }
+
+ /* Now a font header contains 8 bytes of header and 16 bytes/table */
+ /* Reserve space for cnt fonts. Don't know how many tables they'll */
+ /* have, so reserve MAX_TAB */
+ tot = cnt*(8+16*MAX_TAB);
+ for ( i=0; i<tot; ++i )
+ putc('\0', ttc);
+
+ /* Build, but don't output. This is so we can lookup tables by tag later */
+ buildtablestructures(&all[cnt],all[cnt].sf,format);
+
+ /* Output some of the smaller tables now, near the head of the file */
+ /* I have my doubts about this being a significant savings... but */
+ /* it doesn't hurt */
+ tab = findtabindir(&all[cnt].tabdir,CHR('h','h','e','a'));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ tab = findtabindir(&all[cnt].tabdir,CHR('v','h','e','a'));
+ if ( tab!=NULL ) {
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ }
+ tab = findtabindir(&all[cnt].tabdir,CHR('m','a','x','p'));
+ tab->offset = ftell(ttc);
+ for ( i=0; i<64; ++i ) /* maxp table is 64 bytes, fill in later */
+ putc('\0', ttc);
+ tab = findtabindir(&all[cnt].tabdir,CHR('F','F','T','M'));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+
+ for ( i=0; i<cnt; ++i ) {
+ /* Now generate all tables unique to this font */
+ ttc_perfonttables(all, i, cnt, format );
+ buildtablestructures(&all[i],all[i].sf,format);
+ /* Check for any tables which match those of a previous font */
+ for ( j=0 ; j<all[i].tabdir.numtab; ++j ) {
+ if ( all[i].tabdir.tabs[j].data!=(void *) (intpt) -1 &&
+ (dup = tablefilematch(&all[i].tabdir.tabs[j],ttc,all,i))!=-1 ) {
+ fclose(all[i].tabdir.tabs[j].data);
+ all[i].tabdir.tabs[j].data = (void *) (intpt) -1;
+ all[i].tabdir.tabs[j].length = dup;
+ }
+ }
+
+ /* And now dump those tables into the file. I don't see how I could */
+ /* order them meaningfully */
+ for ( j=0 ; j<all[i].tabdir.numtab; ++j ) {
+ if ( all[i].tabdir.tabs[j].data!=(void *) (intpt) -1 ) {
+ all[i].tabdir.tabs[j].offset = ftell(ttc);
+ all[i].tabdir.tabs[j].checksum = filechecksum(all[i].tabdir.tabs[j].data);
+ if ( !ttfcopyfile(ttc,all[i].tabdir.tabs[j].data, all[i].tabdir.tabs[j].offset,Tag2String(all[i].tabdir.tabs[j].tag)))
+ all[cnt].error = true;
+ }
+ }
+ }
+
+ free(all[cnt].sf->glyphs);
+ free(all[cnt].gi.bygid);
+
+ /* Now dump the big shared tables */
+ tab = findtabindir(&all[cnt].tabdir,CHR('h','m','t','x'));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ tab = findtabindir(&all[cnt].tabdir,CHR('v','m','t','x'));
+ if ( tab!=NULL ) {
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ }
+ if ( format==ff_ttf ) {
+ tab = findtabindir(&all[cnt].tabdir,CHR('l','o','c','a'));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ tab = findtabindir(&all[cnt].tabdir,CHR('g','l','y','f'));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ } else {
+ tab = findtabindir(&all[cnt].tabdir,CHR('C','F','F',' '));
+ tab->offset = ftell(ttc);
+ tab->checksum = filechecksum(tab->data);
+ if ( !ttfcopyfile(ttc,tab->data, tab->offset,Tag2String(tab->tag)))
+ all[cnt].error = true;
+ }
+
+ /* Do maxp last, in case generating other tables changed it */
+ redomaxp(&all[cnt],format);
+ tab = findtabindir(&all[cnt].tabdir,CHR('m','a','x','p'));
+ fseek(ttc,tab->offset,SEEK_SET);
+ tab->checksum = filechecksum(all[cnt].maxpf);
+ tab->length = all[cnt].maxplen;
+ rewind(all[cnt].maxpf);
+ while ( (ch=getc(all[cnt].maxpf))!=EOF )
+ putc(ch,ttc);
+
+ /* Now output the font headers */
+ for ( offset=startoffset, i=0; i<cnt; ++i, offset += (8+16*MAX_TAB)) {
+ struct alltabs *at = &all[i];
+ /* Find the location of any shared tables */
+ for ( j=0; j<at->tabdir.numtab; ++j ) {
+ struct taboff *curtab = &at->tabdir.tabs[j];
+ if ( curtab->data == (void *) (intpt) -1 ) {
+ tab = findtabindir(&all[curtab->length].tabdir,curtab->tag);
+ if ( tab==NULL ) {
+ IError("Failed to find tab");
+ curtab->length = 0;
+ curtab->offset = 0;
+ curtab->checksum = 0;
+ } else {
+ curtab->offset = tab->offset;
+ curtab->length = tab->length;
+ curtab->checksum = tab->checksum;
+ }
+ }
+ }
+ fseek(ttc,offset,SEEK_SET);
+
+ /* Put in alphabetic order */
+ for ( j=0; j<at->tabdir.numtab; ++j )
+ at->tabdir.alpha[j] = &at->tabdir.tabs[j];
+ qsort(at->tabdir.alpha,at->tabdir.numtab,sizeof(struct taboff *),tagcomp);
+
+ putlong(ttc,at->tabdir.version);
+ putshort(ttc,at->tabdir.numtab);
+ putshort(ttc,at->tabdir.searchRange);
+ putshort(ttc,at->tabdir.entrySel);
+ putshort(ttc,at->tabdir.rangeShift);
+ for ( j=0; j<at->tabdir.numtab; ++j ) {
+ putlong(ttc,at->tabdir.alpha[j]->tag);
+ putlong(ttc,at->tabdir.alpha[j]->checksum);
+ putlong(ttc,at->tabdir.alpha[j]->offset);
+ putlong(ttc,at->tabdir.alpha[j]->length);
+ }
+ }
+
+ tab = findtabindir(&all[0].tabdir,CHR('h','e','a','d'));
+ if ( tab!=NULL ) {
+ /* As far as I can tell the file checksum is ignored */
+ int checksum;
+ checksum = filechecksum(ttc);
+ checksum = 0xb1b0afba-checksum;
+ fseek(ttc,tab->offset+2*sizeof(int32),SEEK_SET);
+ putlong(ttc,checksum);
+ }
+}
+
+static void CopySFNTAndFixup(FILE *ttc,FILE *ttf) {
+ /* ttf contains a truetype file which we want to copy into ttc */
+ /* Mostly this is just a dump copy, but the offset table at the */
+ /* start of the file must be adjusted to reflect the absolute */
+ /* locations of the tables in the ttc */
+ int offset = ftell(ttc);
+ int val, table_cnt, i;
+
+ fseek(ttf,0,SEEK_SET);
+ val = getlong(ttf);
+ putlong(ttc,val); /* sfnt version */
+ table_cnt = getushort(ttf);
+ putshort(ttc,table_cnt);
+ val = getushort(ttf);
+ putshort(ttc,val);
+ val = getushort(ttf);
+ putshort(ttc,val);
+ val = getushort(ttf);
+ putshort(ttc,val);
+
+ for ( i=0; i<table_cnt; ++i ) {
+ val = getlong(ttf);
+ putlong(ttc,val); /* tag */
+ val = getlong(ttf);
+ putlong(ttc,val); /* checkSum */
+ val = getlong(ttf);
+ putlong(ttc,val+offset); /* offset */
+ val = getlong(ttf);
+ putlong(ttc,val); /* length */
+ }
+
+ while ( (val=getc(ttf))!=EOF )
+ putc(val,ttc);
+
+ fclose(ttf);
+
+ if ( ftell(ttc)&1 )
+ putc('\0',ttc);
+ if ( ftell(ttc)&2 )
+ putshort(ttc,0);
+}
+
+int WriteTTC(const char *filename,struct sflist *sfs,enum fontformat format,
+ enum bitmapformat bf,int flags, int layer, enum ttc_flags ttcflags) {
+ struct sflist *sfitem, *sfi2;
+ int ok=1;
+ FILE *ttc;
+ int cnt, offset;
+ int dobruteforce;
+ struct alltabs *ret;
+ SplineFont dummysf;
+
+ if ( strstr(filename,"://")!=NULL ) {
+ if (( ttc = tmpfile2())==NULL )
+return( 0 );
+ } else {
+ if (( ttc=fopen(filename,"wb+"))==NULL )
+return( 0 );
+ }
+
+ format = (ttcflags & ttc_flag_cff) ? ff_otf : ff_ttf;
+
+ dobruteforce = true;
+ if ( (ttcflags & ttc_flag_trymerge) && bf==bf_none ) {
+ dobruteforce = false;
+ ret = ttc_prep(sfs,format,bf,flags,layer,&dummysf);
+ if ( ret==NULL )
+ dobruteforce = true;
+ else
+ ttc_dump(ttc,ret,format,flags,ttcflags);
+ free(ret);
+ }
+ if ( dobruteforce ) {
+ /* Create a trivial ttc where each font is its own entity and there */
+ /* are no common tables */
+ /* Generate all the fonts (don't generate DSIGs, there's one DSIG for */
+ /* the ttc as a whole) */
+ for ( sfitem= sfs, cnt=0; sfitem!=NULL; sfitem=sfitem->next, ++cnt ) {
+ sfitem->tempttf = tmpfile2();
+ if ( sfitem->tempttf==NULL )
+ ok=0;
+ else
+ ok = _WriteTTFFont(sfitem->tempttf,sfitem->sf,format,sfitem->sizes,
+ bf,flags&~ttf_flag_dummyDSIG,sfitem->map,layer);
+ if ( !ok ) {
+ for ( sfi2=sfs; sfi2!=NULL; sfi2 = sfi2->next )
+ if ( sfi2->tempttf!=NULL )
+ fclose(sfi2->tempttf );
+ fclose(ttc);
+return( true );
+ }
+ fseek(sfitem->tempttf,0,SEEK_END);
+ sfitem->len = ftell(sfitem->tempttf);
+ }
+
+ putlong(ttc,CHR('t','t','c','f'));
+ if ( flags&ttf_flag_dummyDSIG ) {
+ putlong(ttc,0x00020000);
+ offset = 4*(3+cnt+4);
+ } else {
+ putlong(ttc,0x00010000);
+ offset = 4*(3+cnt);
+ }
+ putlong(ttc,cnt);
+ for ( sfitem= sfs; sfitem!=NULL; sfitem=sfitem->next ) {
+ putlong(ttc,offset);
+ offset += ((sfitem->len+3)>>2)<<2; /* Align on 4 byte boundary */
+ }
+ if ( flags&ttf_flag_dummyDSIG ) {
+ putlong(ttc,CHR('D','S','I','G'));
+ putlong(ttc,8); /* Length of dummy DSIG table */
+ putlong(ttc,0x00000001); /* Standard DSIG version */
+ putlong(ttc,0); /* No Signatures, no flags */
+ }
+ for ( sfitem= sfs; sfitem!=NULL; sfitem=sfitem->next )
+ CopySFNTAndFixup(ttc,sfitem->tempttf);
+ if ( ftell(ttc)!=offset )
+ IError("Miscalculated offsets in ttc");
+ } else
+
+ if ( ferror(ttc))
+ ok = false;
+ if ( fclose(ttc)==-1 )
+ ok = false;
+ if ( !ok )
+ LogError(_("Something went wrong"));
+return( ok );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tottfaat.c b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfaat.c
new file mode 100644
index 0000000000..1383022448
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfaat.c
@@ -0,0 +1,2526 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <utype.h>
+
+#include "ttf.h"
+
+/* This file contains routines to create some of the Apple Advanced Typography Tables */
+/* (or GX fonts) */
+
+/* ************************************************************************** */
+/* ************************* The 'kern' table ************************* */
+/* ************************************************************************** */
+
+
+/* Apple's docs imply that kerning info is always provided left to right, even*/
+/* for right to left scripts. If that be so then we need code in here to reverse */
+/* the order of the characters for right to left since pfaedit's convention */
+/* is to follow writing order rather than to go left to right */
+
+
+static void DumpKernClass(FILE *file, uint16 *class,int cnt,int add,int mul) {
+ int i, first=-1, last=-1;
+
+ for ( i=0; i<cnt; ++i ) {
+ if ( class[i] ) last = i;
+ if ( class[i] && first==-1 ) first = i;
+ }
+ putshort(file,first);
+ putshort(file,last-first+1);
+ for ( i=first; i<=last; ++i )
+ putshort(file,class[i]*mul+add);
+}
+
+static int morx_dumpASM(FILE *temp,ASM *sm, struct alltabs *at, SplineFont *sf );
+
+struct kerncounts {
+ int cnt;
+ int vcnt;
+ int mh, mv;
+ int kccnt;
+ int vkccnt;
+ int ksm;
+ int hsubs;
+ int *hbreaks;
+ int vsubs;
+ int *vbreaks;
+};
+
+static int CountKerns(struct alltabs *at, SplineFont *sf, struct kerncounts *kcnt) {
+ int i, cnt, vcnt, j, kccnt=0, vkccnt=0, ksm=0, mh, mv;
+ KernPair *kp;
+ KernClass *kc;
+ ASM *sm;
+
+ cnt = mh = vcnt = mv = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ j = 0;
+ for ( kp = sf->glyphs[at->gi.bygid[i]]->kerns; kp!=NULL; kp=kp->next )
+ if ( kp->off!=0 && kp->sc->ttf_glyph!=-1 &&
+ LookupHasDefault(kp->subtable->lookup ))
+ ++cnt, ++j;
+ if ( j>mh ) mh=j;
+ j=0;
+ for ( kp = sf->glyphs[at->gi.bygid[i]]->vkerns; kp!=NULL; kp=kp->next )
+ if ( kp->off!=0 && kp->sc->ttf_glyph!=-1 &&
+ LookupHasDefault(kp->subtable->lookup ))
+ ++vcnt, ++j;
+ if ( j>mv ) mv=j;
+ }
+ kcnt->cnt = cnt;
+ kcnt->vcnt = vcnt;
+ kcnt->mh = mh;
+ kcnt->mv = mv;
+ kcnt->hbreaks = kcnt->vbreaks = NULL;
+ if ( cnt>=10000 ) {
+ /* the sub-table size is 6*cnt+14 or so and needs to be less 65535 */
+ /* so break it up into little bits */
+ /* We might not need this when applemode is set because the subtable */
+ /* length is a long. BUT... there's a damn binsearch header with */
+ /* shorts in it still */
+ int b=0;
+ kcnt->hbreaks = malloc((at->gi.gcnt+1)*sizeof(int));
+ cnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ j = 0;
+ for ( kp = sf->glyphs[at->gi.bygid[i]]->kerns; kp!=NULL; kp=kp->next )
+ if ( kp->off!=0 && LookupHasDefault(kp->subtable->lookup ))
+ ++j;
+ if ( (cnt+j)*6>64000L && cnt!=0 ) {
+ kcnt->hbreaks[b++] = cnt;
+ cnt = 0;
+ }
+ cnt += j;
+ }
+ kcnt->hbreaks[b++] = cnt;
+ kcnt->hsubs = b;
+ } else if ( cnt!=0 )
+ kcnt->hsubs = 1;
+ else
+ kcnt->hsubs = 0;
+ if ( vcnt>=10000 ) {
+ int b=0;
+ kcnt->vbreaks = malloc((at->gi.gcnt+1)*sizeof(int));
+ vcnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ j = 0;
+ for ( kp = sf->glyphs[at->gi.bygid[i]]->vkerns; kp!=NULL; kp=kp->next )
+ if ( kp->off!=0 && LookupHasDefault(kp->subtable->lookup))
+ ++j;
+ if ( (vcnt+j)*6>64000L && vcnt!=0 ) {
+ kcnt->vbreaks[b++] = vcnt;
+ vcnt = 0;
+ }
+ vcnt += j;
+ }
+ kcnt->vbreaks[b++] = vcnt;
+ kcnt->vsubs = b;
+ } else if ( vcnt!=0 )
+ kcnt->vsubs = 1;
+ else
+ kcnt->vsubs = 0;
+
+ if ( at->applemode ) { /* if we aren't outputting Apple's extensions to kerning (by classes, and by state machine) then don't check for those extensions */
+ for ( kc=sf->kerns; kc!=NULL; kc = kc->next ) if ( LookupHasDefault(kc->subtable->lookup) )
+ ++kccnt;
+ for ( kc=sf->vkerns; kc!=NULL; kc = kc->next ) if ( LookupHasDefault(kc->subtable->lookup) )
+ ++vkccnt;
+ for ( sm=sf->sm; sm!=NULL; sm=sm->next )
+ if ( sm->type == asm_kern )
+ ++ksm;
+ }
+ kcnt->kccnt = kccnt;
+ kcnt->vkccnt = vkccnt;
+ kcnt->ksm = ksm;
+return( kcnt->hsubs + kcnt->vsubs + kccnt + vkccnt + ksm );
+}
+
+static void ttf_dumpsfkerns(struct alltabs *at, SplineFont *sf, int tupleIndex, int version) {
+ struct kerncounts kcnt;
+ int i, j, k, m, c, gid, tot, km;
+ KernPair *kp;
+ KernClass *kc;
+ ASM *sm;
+ uint16 *glnum, *offsets;
+ int isv;
+ int tupleMask = tupleIndex==-1 ? 0 : 0x2000;
+ int b, bmax;
+ int *breaks;
+ int winfail=0;
+ int subtableBeginPos,subtableEndPos;
+
+ if ( CountKerns(at,sf,&kcnt)==0 )
+return;
+
+ if ( tupleIndex==-1 ) tupleIndex = 0;
+
+ for ( isv=0; isv<2; ++isv ) {
+ c = isv ? kcnt.vcnt : kcnt.cnt;
+ bmax = isv ? kcnt.vsubs : kcnt.hsubs;
+ breaks = isv ? kcnt.vbreaks : kcnt.hbreaks;
+ if ( c!=0 ) {
+ km = isv ? kcnt.mv : kcnt.mh;
+ glnum = malloc(km*sizeof(uint16));
+ offsets = malloc(km*sizeof(uint16));
+ gid = 0;
+ for ( b=0; b<bmax; ++b ) {
+ c = bmax==1 ? c : breaks[b];
+
+ // skip subtable header because we don't know the number of kern pairs yet
+ subtableBeginPos=ftell(at->kern);
+ if(version==0) fseek(at->kern,7*sizeof(uint16),SEEK_CUR);
+ else fseek(at->kern,8*sizeof(uint16),SEEK_CUR);
+
+ for ( tot = 0; gid<at->gi.gcnt && tot<c; ++gid ) if ( at->gi.bygid[gid]!=-1 ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[gid]];
+ // if requested, omit kern pairs with unmapped glyphs
+ // (required for compatibility with non-OpenType-aware Windows applications)
+ if( (at->gi.flags&ttf_flag_oldkernmappedonly) && (unsigned)(sc->unicodeenc)>0xFFFF ) continue;
+ m = 0;
+ for ( kp = isv ? sc->vkerns : sc->kerns; kp!=NULL; kp=kp->next ) {
+ // if requested, omit kern pairs with unmapped glyphs
+ // (required for compatibility with non-OpenType-aware Windows applications)
+ if( (at->gi.flags&ttf_flag_oldkernmappedonly) && (unsigned)(kp->sc->unicodeenc)>0xFFFF ) continue;
+ if ( kp->off!=0 && kp->sc->ttf_glyph!=-1 &&
+ LookupHasDefault(kp->subtable->lookup)) {
+ /* order the pairs */
+ for ( j=0; j<m; ++j )
+ if ( kp->sc->ttf_glyph<glnum[j] )
+ break;
+ for ( k=m; k>j; --k ) {
+ glnum[k] = glnum[k-1];
+ offsets[k] = offsets[k-1];
+ }
+ glnum[j] = kp->sc->ttf_glyph;
+ offsets[j] = kp->off;
+ ++m;
+ /* check if a pair will cause problems on Windows */
+ /* If the glyph is outside BMP, so either unicode >0xffff */
+ /* or -1. Cast to unsigned catches both */
+ if( (unsigned)(sf->glyphs[at->gi.bygid[gid]]->unicodeenc)>0xFFFF ||
+ (unsigned)(sf->glyphs[at->gi.bygid[glnum[j]]]->unicodeenc)>0xFFFF )
+ winfail++;
+ }
+ }
+ for ( j=0; j<m; ++j ) {
+ putshort(at->kern,gid);
+ putshort(at->kern,glnum[j]);
+ putshort(at->kern,offsets[j]);
+ }
+ tot += m;
+ }
+
+ // now we can fill the subtable header
+ c=tot;
+ subtableEndPos=ftell(at->kern);
+ fseek(at->kern,subtableBeginPos,SEEK_SET);
+ if ( version==0 ) {
+ putshort(at->kern,0); /* subtable version */
+ if ( c>10920 )
+ ff_post_error(_("Too many kern pairs"),_("The 'kern' table supports at most 10920 kern pairs in a subtable"));
+ putshort(at->kern,(7+3*c)*sizeof(uint16)); /* subtable length */
+ putshort(at->kern,!isv); /* coverage, flags=hor/vert&format=0 */
+ } else {
+ putlong(at->kern,(8+3*c)*sizeof(uint16)); /* subtable length */
+ /* Apple's new format has a completely different coverage format */
+ putshort(at->kern,(isv?0x8000:0)| /* format 0, horizontal/vertical flags (coverage) */
+ tupleMask);
+ putshort(at->kern,tupleIndex);
+ }
+ putshort(at->kern,c);
+ for ( i=1,j=0; i<=c; i<<=1, ++j );
+ i>>=1; --j;
+ putshort(at->kern,i*6); /* binary search headers */
+ putshort(at->kern,j);
+ putshort(at->kern,6*(c-i));
+ fseek(at->kern,subtableEndPos,SEEK_SET);
+ }
+ free(offsets);
+ free(glnum);
+ }
+ }
+ free(kcnt.hbreaks); free(kcnt.vbreaks);
+
+ if( winfail > 0 )
+ ff_post_error(_("Kerning is likely to fail on Windows"),_(
+ "Note: On Windows many apps can have problems with this font's kerning, because %d of its glyph kern pairs cannot be mapped to unicode-BMP kern pairs (eg, they have a Unicode value of -1) To avoid this, go to Generate, Options, and check the \"Windows-compatible \'kern\'\" option."),
+ winfail);
+
+ if ( at->applemode ) for ( isv=0; isv<2; ++isv ) {
+ for ( kc=isv ? sf->vkerns : sf->kerns; kc!=NULL; kc=kc->next ) if ( LookupHasDefault(kc->subtable->lookup) ) {
+ /* If we are here, we must be using version 1 */
+ uint32 len_pos = ftell(at->kern), pos;
+ uint16 *class1, *class2;
+ int first_cnt = kc->first_cnt;
+
+ /* OpenType fonts can actually have a set of glyphs in class[0] of*/
+ /* the first class. This happens when there are glyphs in the */
+ /* coverage table which are not in any of the classes. Otherwise */
+ /* class 0 is sort of useless in opentype */
+ if ( kc->firsts[0]!=NULL )
+ ++first_cnt;
+
+ putlong(at->kern,0); /* subtable length */
+ putshort(at->kern,(isv?0x8002:2)| /* format 2, horizontal/vertical flags (coverage) */
+ tupleMask);
+ putshort(at->kern,tupleIndex);
+
+ putshort(at->kern,sizeof(uint16)*kc->second_cnt);
+ putshort(at->kern,0); /* left classes */
+ putshort(at->kern,0); /* right classes */
+ putshort(at->kern,16); /* Offset to array, next byte */
+
+ if ( kc->firsts[0]!=NULL ) {
+ /* Create a dummy class to correspond to the mac's class 0 */
+ /* all entries will be 0 */
+ for ( i=0 ; i<kc->second_cnt; ++i )
+ putshort(at->kern,0);
+ }
+ for ( i=0; i<kc->first_cnt*kc->second_cnt; ++i )
+ putshort(at->kern,kc->offsets[i]);
+
+ pos = ftell(at->kern);
+ fseek(at->kern,len_pos+10,SEEK_SET);
+ putshort(at->kern,pos-len_pos);
+ fseek(at->kern,pos,SEEK_SET);
+ class1 = ClassesFromNames(sf,kc->firsts,kc->first_cnt,at->maxp.numGlyphs,NULL,true);
+ DumpKernClass(at->kern,class1,at->maxp.numGlyphs,16,sizeof(uint16)*kc->second_cnt);
+ free(class1);
+
+ pos = ftell(at->kern);
+ fseek(at->kern,len_pos+12,SEEK_SET);
+ putshort(at->kern,pos-len_pos);
+ fseek(at->kern,pos,SEEK_SET);
+ class2 = ClassesFromNames(sf,kc->seconds,kc->second_cnt,at->maxp.numGlyphs,NULL,true);
+ DumpKernClass(at->kern,class2,at->maxp.numGlyphs,0,sizeof(uint16));
+ free(class2);
+
+ pos = ftell(at->kern);
+ fseek(at->kern,len_pos,SEEK_SET);
+ putlong(at->kern,pos-len_pos);
+ fseek(at->kern,pos,SEEK_SET);
+ }
+ }
+
+ if ( at->applemode ) if ( kcnt.ksm!=0 ) {
+ for ( sm=sf->sm; sm!=NULL; sm=sm->next ) if ( sm->type == asm_kern ) {
+ uint32 len_pos = ftell(at->kern), pos;
+
+ putlong(at->kern,0); /* subtable length */
+ putshort(at->kern,((sm->flags&0x8000)?0x8001:1)| /* format 1, horizontal/vertical flags (coverage) */
+ tupleMask);
+ putshort(at->kern,tupleIndex);
+ morx_dumpASM(at->kern,sm,at,sf);
+
+ pos = ftell(at->kern);
+ fseek(at->kern,len_pos,SEEK_SET);
+ putlong(at->kern,pos-len_pos);
+ fseek(at->kern,pos,SEEK_SET);
+ }
+ }
+}
+
+void ttf_dumpkerns(struct alltabs *at, SplineFont *sf) {
+ int i, mmcnt=0, sum;
+ int version;
+ MMSet *mm = at->dovariations ? sf->mm : NULL;
+ struct kerncounts kcnt;
+ int must_use_old_style = 0;
+
+ if ( !at->applemode && (!at->opentypemode || (at->gi.flags&ttf_flag_oldkern)) ) {
+ must_use_old_style = true;
+ SFKernClassTempDecompose(sf,false);
+ mm = NULL;
+ } else {
+ if ( mm!=NULL ) {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ mmcnt += CountKerns(at,mm->instances[i],&kcnt);
+ free(kcnt.hbreaks); free(kcnt.vbreaks);
+ }
+ sf = mm->normal;
+ }
+ }
+
+ sum = CountKerns(at,sf,&kcnt);
+ free(kcnt.hbreaks); free(kcnt.vbreaks);
+ if ( sum==0 && mmcnt==0 ) {
+ if ( must_use_old_style )
+ SFKernCleanup(sf,false);
+return;
+ }
+
+ /* Old kerning format (version 0) uses 16 bit quantities */
+ /* Apple's new format (version 0x00010000) uses 32 bit quantities */
+ at->kern = tmpfile2();
+ if ( must_use_old_style ||
+ ( kcnt.kccnt==0 && kcnt.vkccnt==0 && kcnt.ksm==0 && mmcnt==0 )) {
+ /* MS does not support format 1,2,3 kern sub-tables so if we have them */
+ /* we might as well admit that this table is for apple only and use */
+ /* the new format apple recommends. Otherwise, use the old format */
+ /* If we might need to store tuple data, use the new format */
+ putshort(at->kern,0); /* version */
+ putshort(at->kern,sum); /* number of subtables */
+ version = 0;
+ } else {
+ putlong(at->kern,0x00010000); /* version */
+ putlong(at->kern,sum+mmcnt); /* number of subtables */
+ version = 1;
+ }
+
+ ttf_dumpsfkerns(at, sf, -1, version);
+ if ( mm!=NULL ) {
+ for ( i=0; i<mm->instance_count; ++i )
+ ttf_dumpsfkerns(at, mm->instances[i], i, version);
+ }
+ if ( must_use_old_style )
+ SFKernCleanup(sf,false);
+
+ at->kernlen = ftell(at->kern);
+ if ( at->kernlen&2 )
+ putshort(at->kern,0); /* pad it */
+}
+
+/* ************************************************************************** */
+/* ************************* The 'lcar' table ************************* */
+/* ************************************************************************** */
+
+static PST *haslcaret(SplineChar *sc) {
+ PST *pst; int j;
+
+ for ( pst=sc->possub; pst!=NULL && pst->type!=pst_lcaret; pst=pst->next );
+ if ( pst!=NULL ) {
+ if ( !sc->lig_caret_cnt_fixed ) {
+ for ( j=pst->u.lcaret.cnt-1; j>=0 && pst->u.lcaret.carets[j]==0; --j );
+ if ( j==-1 )
+ pst = NULL;
+ } else {
+ if ( pst->u.lcaret.cnt==0 )
+ pst = NULL;
+ }
+ }
+return( pst );
+}
+
+void aat_dumplcar(struct alltabs *at, SplineFont *sf) {
+ int i, j, k, l, seg_cnt, tot, last, offset;
+ PST *pst;
+ FILE *lcar=NULL;
+ SplineChar *sc;
+ /* We do four passes. The first just calculates how much space we will need */
+ /* the second provides the top-level lookup table structure */
+ /* the third provides the arrays of offsets needed for type 4 lookup tables */
+ /* the fourth provides the actual data on the ligature carets */
+
+ for ( k=0; k<4; ++k ) {
+ for ( i=seg_cnt=tot=0; i<at->gi.gcnt; ++i )
+ if ( at->gi.bygid[i]!=-1 &&
+ (pst = haslcaret(sc = sf->glyphs[at->gi.bygid[i]]))!=NULL ) {
+ if ( k==1 )
+ tot = 0;
+ else if ( k==2 ) {
+ putshort(lcar,offset);
+ offset += 2 + 2*LigCaretCnt(sc);
+ } else if ( k==3 ) {
+ putshort(lcar,LigCaretCnt(sc));
+ for ( l=0; l<pst->u.lcaret.cnt; ++l )
+ if ( pst->u.lcaret.carets[l]!=0 || sc->lig_caret_cnt_fixed )
+ putshort(lcar,pst->u.lcaret.carets[l]);
+ }
+ last = i;
+ for ( j=i+1, ++tot; j<at->gi.gcnt && at->gi.bygid[j]!=-1; ++j ) {
+ if ( (pst = haslcaret(sc = sf->glyphs[at->gi.bygid[j]]))== NULL )
+ break;
+ ++tot;
+ last = j;
+ if ( k==2 ) {
+ putshort(lcar,offset);
+ offset += 2 + 2*LigCaretCnt(sc);
+ } else if ( k==3 ) {
+ putshort(lcar,LigCaretCnt(sc));
+ for ( l=0; l<pst->u.lcaret.cnt; ++l )
+ if ( pst->u.lcaret.carets[l]!=0 || sc->lig_caret_cnt_fixed )
+ putshort(lcar,pst->u.lcaret.carets[l]);
+ }
+ }
+ if ( k==1 ) {
+ putshort(lcar,last);
+ putshort(lcar,i);
+ putshort(lcar,offset);
+ offset += 2*tot;
+ }
+ ++seg_cnt;
+ i = j-1;
+ }
+ if ( k==0 ) {
+ if ( seg_cnt==0 )
+return;
+ lcar = tmpfile2();
+ putlong(lcar, 0x00010000); /* version */
+ putshort(lcar,0); /* data are distances (not points) */
+
+ putshort(lcar,4); /* Lookup table format 4 */
+ /* Binary search header */
+ putshort(lcar,6); /* Entry size */
+ putshort(lcar,seg_cnt); /* Number of segments */
+ for ( j=0,l=1; l<=seg_cnt; l<<=1, ++j );
+ --j; l>>=1;
+ putshort(lcar,6*l);
+ putshort(lcar,j);
+ putshort(lcar,6*(seg_cnt-l));
+ offset = /*4+2+*/6*2 + seg_cnt*6 + 6 /* fake segment at end */;
+ /* Offset relative to lookup table, not to lcar_start */
+ /* Or, that's true while we build the lookup table. Once we */
+ /* start working on the data offsets they are relative to */
+ /* lcar_start */
+ } else if ( k==1 ) { /* flag entry */
+ putshort(lcar,0xffff);
+ putshort(lcar,0xffff);
+ putshort(lcar,0);
+
+ offset += 6; /* Now offsets are relative to lcar_start */
+ }
+ }
+ at->lcar = lcar;
+ at->lcarlen = ftell(at->lcar);
+ if ( at->lcarlen&2 )
+ putshort(at->lcar,0);
+}
+
+/* ************************************************************************** */
+/* ************************* The 'morx' table ************************* */
+/* ************************* (and 'feat') ************************* */
+/* ************************************************************************** */
+
+/* Each lookup gets its own subtable, so there may be multiple subtables */
+/* with the same feature/setting. The subtables will be ordered the same */
+/* way the lookups are, which might lead to awkwardness if there are many */
+/* chains and the same feature occurs in several of them */
+/* (only the default language will be used) */
+struct feature {
+ int16 featureType, featureSetting;
+ MacFeat *mf, *smf;
+ struct macsetting *ms, *sms;
+ unsigned int vertOnly: 1;
+ unsigned int r2l: 1; /* I think this is the "descending" flag */
+ unsigned int needsOff: 1;
+ unsigned int singleMutex: 1;
+ unsigned int dummyOff: 1;
+ uint8 subtable_type;
+ int chain;
+ int32 flag, offFlags;
+ uint32 feature_start;
+ uint32 feature_len; /* Does not include header yet */
+ struct feature *next; /* features in output order */
+ struct feature *nexttype; /* features in feature/setting order */
+ struct feature *nextsame; /* all features with the same feature/setting */
+ int setting_cnt, setting_index, real_index;
+};
+
+static struct feature *featureFromSubtable(SplineFont *sf, struct lookup_subtable *sub );
+static int PSTHasTag(PST *pst, uint32 tag);
+
+static void morxfeaturesfree(struct feature *features) {
+ struct feature *n;
+
+ for ( ; features!=NULL; features=n ) {
+ n = features->next;
+ chunkfree( features,sizeof(*features) );
+ }
+}
+
+static void mort_classes(FILE *temp,SplineFont *sf,struct glyphinfo *gi) {
+ int first, last, i, cnt;
+ /* Mort tables just have a trimmed byte array for the classes */
+
+ for ( first=0; first<gi->gcnt; ++first )
+ if ( gi->bygid[first]!=-1 && sf->glyphs[gi->bygid[first]]->lsidebearing!=1 )
+ break;
+ for ( last=gi->gcnt-1; last>first; --last )
+ if ( gi->bygid[last]!=-1 && sf->glyphs[gi->bygid[last]]->lsidebearing!=1 )
+ break;
+ cnt = last-first+1;
+
+ putshort(temp,first);
+ putshort(temp,cnt);
+ for ( i=first; i<=last; ++i )
+ if ( gi->bygid[i]==-1 )
+ putc(1,temp);
+ else
+ putc(sf->glyphs[gi->bygid[i]]->lsidebearing,temp);
+ if ( cnt&1 )
+ putc(1,temp); /* Pad to a word boundary */
+}
+
+static void morx_lookupmap(FILE *temp,SplineChar **glyphs,uint16 *maps,int gcnt) {
+ int i, j, k, l, seg_cnt, tot, last, offset;
+ /* We do four passes. The first just calculates how much space we will need (if any) */
+ /* the second provides the top-level lookup table structure */
+ /* the third provides the arrays of offsets needed for type 4 lookup tables */
+
+ for ( k=0; k<3; ++k ) {
+ for ( i=seg_cnt=tot=0; i<gcnt; ++i ) {
+ if ( glyphs[i]==NULL )
+ continue;
+ if ( k==1 )
+ tot = 0;
+ else if ( k==2 ) {
+ putshort(temp,maps[i]);
+ }
+ last = i;
+ for ( j=i+1, ++tot; j<gcnt && glyphs[j]!=NULL && glyphs[j]->ttf_glyph==glyphs[i]->ttf_glyph+j-i; ++j ) {
+ ++tot;
+ last = j;
+ if ( k==2 ) {
+ putshort(temp,maps[j]);
+ }
+ }
+ if ( k==1 ) {
+ putshort(temp,glyphs[last]->ttf_glyph);
+ putshort(temp,glyphs[i]->ttf_glyph);
+ putshort(temp,offset);
+ offset += 2*tot;
+ }
+ ++seg_cnt;
+ i = j-1;
+ }
+ if ( k==0 ) {
+ putshort(temp,4); /* Lookup table format 4 */
+ /* Binary search header */
+ putshort(temp,6); /* Entry size */
+ putshort(temp,seg_cnt); /* Number of segments */
+ for ( j=0,l=1; l<=seg_cnt; l<<=1, ++j );
+ --j; l>>=1;
+ putshort(temp,6*l);
+ putshort(temp,j);
+ putshort(temp,6*(seg_cnt-l));
+ if ( seg_cnt==0 )
+return;
+ offset = 6*2 + seg_cnt*6 + 6;
+ } else if ( k==1 ) { /* flag entry */
+ putshort(temp,0xffff);
+ putshort(temp,0xffff);
+ putshort(temp,0);
+ }
+ }
+}
+
+static void morx_dumpSubsFeature(FILE *temp,SplineChar **glyphs,uint16 *maps,int gcnt) {
+ morx_lookupmap(temp,glyphs,maps,gcnt);
+}
+
+static struct feature *aat_dumpmorx_substitutions(struct alltabs *at, SplineFont *sf,
+ FILE *temp, struct feature *features, struct lookup_subtable *sub) {
+ int i, k, gcnt;
+ SplineChar *sc, *msc, **glyphs;
+ uint16 *maps;
+ struct feature *cur;
+ PST *pst;
+
+ for ( k=0; k<2; ++k ) {
+ gcnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ sc = sf->glyphs[at->gi.bygid[i]];
+ for ( pst=sc->possub; pst!=NULL && pst->subtable!=sub; pst=pst->next );
+ if ( pst!=NULL ) {
+ if ( k==1 ) {
+ msc = SFGetChar(sf,-1,pst->u.subs.variant);
+ glyphs[gcnt] = sc;
+ if ( msc!=NULL && msc->ttf_glyph!=-1 ) {
+ maps[gcnt++] = msc->ttf_glyph;
+ } else if ( msc==NULL &&
+ strcmp(pst->u.subs.variant,MAC_DELETED_GLYPH_NAME)==0 ) {
+ maps[gcnt++] = 0xffff;
+ }
+ } else
+ ++gcnt;
+ }
+ }
+ if ( k==0 ) {
+ if ( gcnt==0 )
+return( features );
+ glyphs = malloc((gcnt+1)*sizeof(SplineChar *));
+ maps = malloc((gcnt+1)*sizeof(uint16));
+ } else {
+ glyphs[gcnt] = NULL; maps[gcnt] = 0;
+ }
+ }
+
+ cur = featureFromSubtable(sf,sub);
+ cur->next = features;
+ cur->r2l = sub->lookup->lookup_flags&pst_r2l ? true : false;
+ features = cur;
+ cur->subtable_type = 4;
+ cur->feature_start = ftell(temp);
+ morx_dumpSubsFeature(temp,glyphs,maps,gcnt);
+ if ( (ftell(temp)-cur->feature_start)&1 )
+ putc('\0',temp);
+ if ( (ftell(temp)-cur->feature_start)&2 )
+ putshort(temp,0);
+ cur->feature_len = ftell(temp)-cur->feature_start;
+ free(glyphs); free(maps);
+return( features);
+}
+
+static LigList *LigListMatchSubtable(SplineFont *sf,LigList *ligs,
+ struct lookup_subtable *sub) {
+ LigList *l;
+
+ for ( l=ligs; l!=NULL; l=l->next )
+ if ( l->lig->subtable==sub )
+return( l );
+return( NULL );
+}
+
+static int IsMarkChar( SplineChar *sc ) {
+ AnchorPoint *ap;
+
+ ap=sc->anchor;
+ while ( ap!=NULL && (ap->type==at_centry || ap->type==at_cexit) )
+ ap = ap->next;
+ if ( ap!=NULL && (ap->type==at_mark || ap->type==at_basemark) )
+return( true );
+
+return( false );
+}
+
+struct transition { uint16 next_state, dontconsume, ismark, trans_ent; LigList *l; };
+struct trans_entries { uint16 next_state, flags, act_index; LigList *l; };
+static void morx_dumpLigaFeature(FILE *temp,SplineChar **glyphs,int gcnt,
+ struct lookup_subtable *sub, struct alltabs *at, SplineFont *sf,
+ int ignoremarks) {
+ LigList *l;
+ struct splinecharlist *comp;
+ uint16 *used = calloc(at->maxp.numGlyphs,sizeof(uint16));
+ SplineChar **cglyphs;
+ uint16 *map;
+ int i,j,k,class, state_max, state_cnt, base, last;
+ uint32 start;
+ struct transition **states;
+ struct trans_entries *trans;
+ int trans_cnt;
+ int maxccnt=0;
+ int acnt, lcnt, charcnt;
+ uint32 *actions;
+ uint16 *components, *lig_glyphs;
+ uint32 here;
+ struct splinecharlist *scl;
+ int anymarks;
+
+ /* figure out the classes (one for each character used to make a lig) */
+ for ( i=0; i<gcnt; ++i ) {
+ used[glyphs[i]->ttf_glyph] = true;
+ for ( l=glyphs[i]->ligofme; l!=NULL; l=l->next ) if ( l->lig->subtable==sub ) {
+ for ( comp = l->components; comp!=NULL; comp=comp->next )
+ used[comp->sc->ttf_glyph] = true;
+ }
+ }
+ class = 4;
+ for ( i=0; i<at->maxp.numGlyphs; ++i ) if ( used[i] )
+ used[i] = class++;
+ anymarks = false;
+ charcnt = class;
+ if ( ignoremarks ) {
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ if ( IsMarkChar(sf->glyphs[at->gi.bygid[i]])) {
+ anymarks = true;
+ ++charcnt;
+ used[i] = class;
+ }
+ }
+ if ( anymarks )
+ ++class;
+ }
+ cglyphs = malloc((charcnt+1)*sizeof(SplineChar *));
+ map = malloc((charcnt+1)*sizeof(uint16));
+ j=0;
+ for ( i=k=0; i<at->maxp.numGlyphs; ++i ) if ( used[i] ) {
+ j = at->gi.bygid[i];
+ if ( j!=-1 ) {
+ cglyphs[k] = sf->glyphs[j];
+ map[k++] = used[i];
+ }
+ }
+ cglyphs[k] = NULL;
+
+ start = ftell(temp);
+ putlong(temp,class);
+ putlong(temp,7*sizeof(uint32));
+ putlong(temp,0); /* Fill in later */
+ putlong(temp,0);
+ putlong(temp,0);
+ putlong(temp,0);
+ putlong(temp,0);
+ morx_lookupmap(temp,cglyphs,map,k); /* dump the class lookup table */
+ free( cglyphs ); free( map );
+ here = ftell(temp);
+ fseek(temp,start+2*sizeof(uint32),SEEK_SET);
+ putlong(temp,here-start); /* Point to start of state arrays */
+ fseek(temp,0,SEEK_END);
+
+ /* Now build the state machine */
+ /* Note: the ligofme list is so ordered that the longest ligatures come first */
+ /* we will depend on that in the case of "ffl", "ffi", "ff" */
+ state_max = 40; state_cnt = 2;
+ states = malloc(state_max*sizeof(struct transition *));
+ states[0] = calloc(class,sizeof(struct transition)); /* Initial state */
+ states[1] = calloc(class,sizeof(struct transition)); /* other Initial state */
+ for ( i=0; i<gcnt; ++i ) {
+ if ( state_cnt>=state_max )
+ states = realloc(states,(state_max += 40)*sizeof(struct transition *));
+ base = state_cnt;
+ states[0][used[glyphs[i]->ttf_glyph]].next_state = state_cnt;
+ states[1][used[glyphs[i]->ttf_glyph]].next_state = state_cnt;
+ states[state_cnt++] = calloc(class,sizeof(struct transition));
+ for ( l=glyphs[i]->ligofme; l!=NULL; l=l->next ) if ( l->lig->subtable==sub ) {
+ if ( l->ccnt > maxccnt ) maxccnt = l->ccnt;
+ last = base;
+ for ( comp = l->components; comp!=NULL; comp=comp->next ) {
+ if ( states[last][used[comp->sc->ttf_glyph]].next_state==0 ) {
+ if ( comp->next==NULL )
+ states[last][used[comp->sc->ttf_glyph]].l = l;
+ else {
+ states[last][used[comp->sc->ttf_glyph]].next_state = state_cnt;
+ if ( state_cnt>=state_max )
+ states = realloc(states,(state_max += 40)*sizeof(struct transition *));
+ last = state_cnt;
+ states[state_cnt++] = calloc(class,sizeof(struct transition));
+ }
+ } else {
+ last = states[last][used[comp->sc->ttf_glyph]].next_state;
+ if ( comp->next==NULL ) {
+ /* this is where we depend on the ordering */
+ for ( j=0; j<class; ++j )
+ if ( states[last][j].next_state==0 && states[last][j].l==NULL ) {
+ states[last][j].l = l;
+ states[last][j].dontconsume = true;
+ /* the next state should continue to be 0 (initial) */
+ }
+ }
+ }
+ }
+ }
+ }
+ if ( anymarks ) {
+ /* behavior for a mark is the same everywhere: stay in current state */
+ /* do no operations. consume the mark */
+ for ( i=0; i<state_cnt; ++i ) {
+ states[i][class-1].next_state = i;
+ states[i][class-1].ismark = true;
+ }
+ }
+ /* Ok, we've got the state machine now. Convert it into apple's wierd */
+ /* (space saving) format */
+ trans = malloc(class*state_cnt*sizeof(struct trans_entries));
+ trans_cnt = 0;
+ for ( i=0; i<state_cnt; ++i ) for ( j=0; j<class; ++j ) {
+ if ( states[i][j].ismark )
+ k = trans_cnt;
+ else for ( k=0; k<trans_cnt; ++k ) {
+ if ( trans[k].next_state==states[i][j].next_state &&
+ (trans[k].flags&0x4000?1:0) == states[i][j].dontconsume &&
+ trans[k].l ==states[i][j].l )
+ break;
+ }
+ states[i][j].trans_ent = k;
+ if ( k==trans_cnt ) {
+ trans[k].next_state = states[i][j].next_state;
+ trans[k].l = states[i][j].l;
+ trans[k].flags = 0;
+ if ( states[i][j].dontconsume )
+ trans[k].flags = 0x4000;
+ else if ( states[i][j].ismark )
+ /* Do nothing */;
+ else if ( trans[k].next_state!=0 || trans[k].l!=NULL )
+ trans[k].flags = 0x8000;
+ if ( trans[k].l!=NULL )
+ trans[k].flags |= 0x2000;
+ trans[k].act_index = 0;
+ ++trans_cnt;
+ }
+ }
+ /* Oops. Bug. */
+ /* Suppose we have two ligatures f+l=>fl & s+t->st. */
+ /* Suppose we get input "fst" */
+ /* Now the state machine we've built so far will go to the f branch, see */
+ /* the "s" and go back to state 0 */
+ /* Obviously that's wrong, we've lost the st. So either we go back to 0 */
+ /* but don't advance the glyph, or we take the transition from state 0 */
+ /* and copy it to here. The second is easier for me just now */
+ for ( i=2; i<state_cnt; ++i ) for ( j=4; j<class; ++j ) {
+ if ( states[i][j].trans_ent == 0 && states[0][j].trans_ent != 0 )
+ states[i][j].trans_ent = states[0][j].trans_ent;
+ }
+
+ /* Dump out the state machine */
+ for ( i=0; i<state_cnt; ++i ) for ( j=0; j<class; ++j )
+ putshort( temp, states[i][j].trans_ent );
+
+ /* Now figure out the ligature actions (and all the other tables) */
+ actions = malloc(trans_cnt*maxccnt*sizeof(uint32));
+ components = malloc(trans_cnt*maxccnt*sizeof(uint16));
+ lig_glyphs = malloc(trans_cnt*sizeof(uint16));
+ acnt = lcnt = 0;
+ for ( i=0; i<trans_cnt; ++i ) if ( trans[i].l!=NULL ) {
+ lig_glyphs[lcnt] = trans[i].l->lig->u.lig.lig->ttf_glyph;
+ /* component Glyphs get popped off the stack in the reverse order */
+ /* so we must built our tables backwards */
+ components[acnt+trans[i].l->ccnt-1] = lcnt;
+ actions[acnt+trans[i].l->ccnt-1] = 0x80000000 |
+ ((acnt+trans[i].l->ccnt-1 - trans[i].l->first->ttf_glyph)&0x3fffffff);
+ for ( scl=trans[i].l->components,j=trans[i].l->ccnt-2; scl!=NULL; scl=scl->next, --j ) {
+ components[acnt+j] = 0;
+ actions[acnt+j] = (acnt+j - scl->sc->ttf_glyph)&0x3fffffff;
+ }
+ trans[i].act_index = acnt;
+ ++lcnt;
+ acnt += trans[i].l->ccnt;
+ }
+
+ /* Now we know how big all the tables will be. Dump out their locations */
+ here = ftell(temp);
+ fseek(temp,start+3*sizeof(uint32),SEEK_SET);
+ putlong(temp,here-start); /* Point to start of entry array */
+ putlong(temp,here-start+6*trans_cnt); /* Point to start of actions */
+ putlong(temp,here-start+6*trans_cnt+4*acnt);/* Point to start of components */
+ putlong(temp,here-start+6*trans_cnt+6*acnt);/* Point to start of ligatures */
+ fseek(temp,0,SEEK_END);
+
+ /* Now dump the transitions */
+ for ( i=0; i<trans_cnt; ++i ) {
+ putshort(temp,trans[i].next_state);
+ putshort(temp,trans[i].flags);
+ putshort(temp,trans[i].act_index);
+ }
+ /* And the actions */
+ for ( i=0; i<acnt; ++i )
+ putlong(temp,actions[i]);
+ /* And the components */
+ for ( i=0; i<acnt; ++i )
+ putshort(temp,components[i]);
+ /* Do A simple check on the validity of what we've done */
+ if ( here+6*trans_cnt+6*acnt != ftell(temp) )
+ IError( "Offset wrong in morx ligature table\n" );
+ /* And finally the ligature glyph indeces */
+ for ( i=0; i<lcnt; ++i )
+ putshort(temp,lig_glyphs[i]);
+
+ /* clean up */
+ free(actions); free(components); free(lig_glyphs);
+ free(trans);
+ for ( i=0; i<state_cnt; ++i )
+ free(states[i]);
+ free(states);
+ free(used);
+}
+
+static struct feature *aat_dumpmorx_ligatures(struct alltabs *at, SplineFont *sf,
+ FILE *temp, struct feature *features, struct lookup_subtable *sub) {
+ int i, k, gcnt;
+ SplineChar *sc, *ssc, **glyphs;
+ struct feature *cur;
+ LigList *l;
+
+ glyphs = malloc((at->maxp.numGlyphs+1)*sizeof(SplineChar *));
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->ticked = false;
+
+ for ( i=0; i<at->gi.gcnt; ++i )
+ if ( at->gi.bygid[i]!=-1 && !(sc=sf->glyphs[at->gi.bygid[i]])->ticked &&
+ (l = LigListMatchSubtable(sf,sc->ligofme,sub))!=NULL ) {
+ int ignoremarks = sub->lookup->lookup_flags & pst_ignorecombiningmarks ? 1 : 0 ;
+ for ( k=i, gcnt=0; k<at->gi.gcnt; ++k )
+ if ( at->gi.bygid[k]!=-1 &&
+ (ssc=sf->glyphs[at->gi.bygid[k]])!=NULL && !ssc->ticked &&
+ LigListMatchSubtable(sf,ssc->ligofme,sub)) {
+ glyphs[gcnt++] = ssc;
+ ssc->ticked = true;
+ }
+ glyphs[gcnt] = NULL;
+ cur = featureFromSubtable(sf,sub);
+ cur->next = features;
+ features = cur;
+ cur->subtable_type = 2; /* ligature */
+ cur->feature_start = ftell(temp);
+ morx_dumpLigaFeature(temp,glyphs,gcnt,sub,at,sf,ignoremarks);
+ if ( (ftell(temp)-cur->feature_start)&1 )
+ putc('\0',temp);
+ if ( (ftell(temp)-cur->feature_start)&2 )
+ putshort(temp,0);
+ cur->feature_len = ftell(temp)-cur->feature_start;
+ cur->r2l = sub->lookup->lookup_flags&pst_r2l ? true : false;
+ }
+
+ free(glyphs);
+return( features);
+}
+
+static void morx_dumpnestedsubs(FILE *temp,SplineFont *sf,OTLookup *otl,struct glyphinfo *gi) {
+ int i, j, gcnt;
+ PST *pst;
+ SplineChar **glyphs, *sc;
+ uint16 *map;
+ struct lookup_subtable *sub = otl->subtables; /* Mac can't have more than one subtable/lookup */
+
+ for ( j=0; j<2; ++j ) {
+ gcnt = 0;
+ for ( i = 0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 ) {
+ for ( pst=sf->glyphs[gi->bygid[i]]->possub;
+ pst!=NULL && pst->subtable!=sub; pst=pst->next );
+ if ( pst!=NULL && pst->type==pst_substitution &&
+ (sc=SFGetChar(sf,-1,pst->u.subs.variant))!=NULL &&
+ sc->ttf_glyph!=-1 ) {
+ if ( j ) {
+ glyphs[gcnt] = sf->glyphs[gi->bygid[i]];
+ map[gcnt] = sc->ttf_glyph;
+ }
+ ++gcnt;
+ }
+ }
+ if ( !j ) {
+ glyphs = malloc((gcnt+1)*sizeof(SplineChar *));
+ map = malloc(gcnt*sizeof(uint16));
+ glyphs[gcnt] = NULL;
+ }
+ }
+ morx_lookupmap(temp,glyphs,map,gcnt);
+ free(glyphs);
+ free(map);
+}
+
+static uint16 *NamesToGlyphs(SplineFont *sf,char *names,uint16 *cnt) {
+ char *pt, *start;
+ int c, ch;
+ uint16 *ret;
+ SplineChar *sc;
+
+ for ( c=0, pt=names; *pt; ++pt )
+ if ( *pt==' ' ) ++c;
+ ret = malloc((c+1)*sizeof(uint16));
+
+ for ( c=0, pt=names; *pt; ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+ break;
+ start = pt;
+ while ( *pt!=' ' && *pt!='\0' ) ++pt;
+ ch = *pt; *pt='\0';
+ sc = SFGetChar(sf,-1,start);
+ *pt = ch;
+ if ( sc!=NULL && sc->ttf_glyph!=-1 )
+ ret[c++] = sc->ttf_glyph;
+ }
+ *cnt = c;
+return( ret );
+}
+
+static int morx_dumpASM(FILE *temp,ASM *sm, struct alltabs *at, SplineFont *sf ) {
+ int i, j, k, gcnt, ch;
+ char *pt, *end;
+ uint16 *map;
+ SplineChar **glyphs, *sc;
+ int stcnt, tcnt;
+ struct ins { char *names; uint16 len,pos; uint16 *glyphs; } *subsins=NULL;
+ OTLookup **subslookups=NULL;
+ uint32 start, here, substable_pos, state_offset;
+ struct transdata { uint16 transition, mark_index, cur_index; } *transdata;
+ struct trans { uint16 ns, flags, mi, ci; } *trans;
+ int ismort = sm->type == asm_kern;
+ FILE *kernvalues;
+
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i]!=NULL )
+ sf->glyphs[i]->lsidebearing = 1;
+
+ gcnt = 0;
+ for ( i=4; i<sm->class_cnt; ++i ) {
+ for ( pt = sm->classes[i]; ; pt=end ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+ break;
+ for ( end=pt; *end!='\0' && *end!=' '; ++end );
+ ch = *end; *end = '\0';
+ sc = SFGetChar(sf,-1,pt);
+ *end = ch;
+ if ( sc!=NULL ) {
+ sc->lsidebearing = i;
+ ++gcnt;
+ }
+ }
+ }
+ glyphs = malloc((gcnt+1)*sizeof(SplineChar *));
+ map = malloc((gcnt+1)*sizeof(uint16));
+ gcnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 && sf->glyphs[at->gi.bygid[i]]->lsidebearing!=1 ) {
+ glyphs[gcnt] = sf->glyphs[at->gi.bygid[i]];
+ map[gcnt++] = sf->glyphs[at->gi.bygid[i]]->lsidebearing;
+ }
+ glyphs[gcnt] = NULL;
+
+ /* Give each subs tab an index into the mac's substitution lookups */
+ transdata = calloc(sm->state_cnt*sm->class_cnt,sizeof(struct transdata));
+ stcnt = 0;
+ subslookups = NULL; subsins = NULL;
+ if ( sm->type==asm_context ) {
+ subslookups = malloc(2*sm->state_cnt*sm->class_cnt*sizeof(OTLookup));
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j ) {
+ struct asm_state *this = &sm->state[j];
+ transdata[j].mark_index = transdata[j].cur_index = 0xffff;
+ if ( this->u.context.mark_lookup!=NULL ) {
+ for ( i=0; i<stcnt; ++i )
+ if ( subslookups[i]==this->u.context.mark_lookup )
+ break;
+ if ( i==stcnt )
+ subslookups[stcnt++] = this->u.context.mark_lookup;
+ transdata[j].mark_index = i;
+ }
+ if ( this->u.context.cur_lookup!=NULL ) {
+ for ( i=0; i<stcnt; ++i )
+ if ( subslookups[i]==this->u.context.cur_lookup )
+ break;
+ if ( i==stcnt )
+ subslookups[stcnt++] = this->u.context.cur_lookup;
+ transdata[j].cur_index = i;
+ }
+ }
+ } else if ( sm->type==asm_insert ) {
+ subsins = malloc(2*sm->state_cnt*sm->class_cnt*sizeof(struct ins));
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j ) {
+ struct asm_state *this = &sm->state[j];
+ transdata[j].mark_index = transdata[j].cur_index = 0xffff;
+ if ( this->u.insert.mark_ins!=0 ) {
+ for ( i=0; i<stcnt; ++i )
+ if ( strcmp(subsins[i].names,this->u.insert.mark_ins)==0 )
+ break;
+ if ( i==stcnt ) {
+ subsins[stcnt].pos = stcnt==0 ? 0 : subsins[stcnt-1].pos +
+ subsins[stcnt-1].len;
+ subsins[stcnt].names = this->u.insert.mark_ins;
+ subsins[stcnt].glyphs = NamesToGlyphs(sf,subsins[stcnt].names,&subsins[stcnt].len);
+ ++stcnt;
+ }
+ transdata[j].mark_index = subsins[i].pos;
+ }
+ if ( this->u.insert.cur_ins!=0 ) {
+ for ( i=0; i<stcnt; ++i )
+ if ( strcmp(subsins[i].names,this->u.insert.cur_ins)==0 )
+ break;
+ if ( i==stcnt ) {
+ subsins[stcnt].pos = stcnt==0 ? 0 : subsins[stcnt-1].pos +
+ subsins[stcnt-1].len;
+ subsins[stcnt].names = this->u.insert.cur_ins;
+ subsins[stcnt].glyphs = NamesToGlyphs(sf,subsins[stcnt].names,&subsins[stcnt].len);
+ ++stcnt;
+ }
+ transdata[j].cur_index = subsins[i].pos;
+ }
+ }
+ } else if ( sm->type==asm_kern ) {
+ int off=0;
+ kernvalues = tmpfile2();
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j ) {
+ struct asm_state *this = &sm->state[j];
+ transdata[j].mark_index = 0xffff;
+ if ( this->u.kern.kcnt!=0 ) {
+ for ( k=0; k<j; ++k )
+ if ( sm->state[k].u.kern.kcnt==this->u.kern.kcnt &&
+ memcmp(sm->state[k].u.kern.kerns,this->u.kern.kerns,
+ this->u.kern.kcnt*sizeof(int16))==0 )
+ break;
+ if ( k!=j )
+ transdata[j].mark_index = transdata[k].mark_index;
+ else {
+ transdata[j].mark_index = off;
+ off += this->u.kern.kcnt*sizeof(int16);
+ /* kerning values must be output backwards */
+ for ( k=this->u.kern.kcnt-1; k>=1; --k )
+ putshort(kernvalues,this->u.kern.kerns[k]&~1);
+ /* And the last one must be odd */
+ putshort(kernvalues,this->u.kern.kerns[0]|1);
+ }
+ }
+ }
+ }
+
+ trans = malloc(sm->state_cnt*sm->class_cnt*sizeof(struct trans));
+ tcnt = 0;
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j ) {
+ struct asm_state *this = &sm->state[j];
+ for ( i=0; i<tcnt; ++i )
+ if ( trans[i].ns==this->next_state && trans[i].flags==this->flags &&
+ trans[i].mi==transdata[j].mark_index &&
+ trans[i].ci==transdata[j].cur_index )
+ break;
+ if ( i==tcnt ) {
+ trans[tcnt].ns = this->next_state;
+ trans[tcnt].flags = this->flags;
+ trans[tcnt].mi = transdata[j].mark_index;
+ trans[tcnt++].ci = transdata[j].cur_index;
+ }
+ transdata[j].transition = i;
+ }
+
+
+ /* Output the header */
+ start = ftell(temp);
+ if ( ismort /* old format still used for kerning */ ) {
+ putshort(temp,sm->class_cnt);
+ putshort(temp,5*sizeof(uint16)); /* class offset */
+ putshort(temp,0); /* state offset */
+ putshort(temp,0); /* transition entry offset */
+ putshort(temp,0); /* kerning values offset */
+ mort_classes(temp,sf,&at->gi); /* dump the class table */
+ } else {
+ putlong(temp,sm->class_cnt);
+ if ( sm->type==asm_indic ) {
+ putlong(temp,4*sizeof(uint32)); /* class offset */
+ putlong(temp,0); /* state offset */
+ putlong(temp,0); /* transition entry offset */
+ } else {
+ putlong(temp,5*sizeof(uint32)); /* class offset */
+ putlong(temp,0); /* state offset */
+ putlong(temp,0); /* transition entry offset */
+ putlong(temp,0); /* substitution/insertion table offset */
+ }
+ morx_lookupmap(temp,glyphs,map,gcnt);/* dump the class lookup table */
+ }
+ free(glyphs); free(map);
+
+
+ state_offset = ftell(temp)-start;
+ if ( ismort ) {
+ fseek(temp,start+2*sizeof(uint16),SEEK_SET);
+ putshort(temp,state_offset); /* Point to start of state arrays */
+ } else {
+ fseek(temp,start+2*sizeof(uint32),SEEK_SET);
+ putlong(temp,state_offset); /* Point to start of state arrays */
+ }
+ fseek(temp,0,SEEK_END);
+
+ if ( ismort ) {
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j )
+ putc(transdata[j].transition,temp);
+ if ( ftell(temp)&1 )
+ putc(0,temp); /* Pad to a word boundry */
+ } else {
+ for ( j=0; j<sm->state_cnt*sm->class_cnt; ++j )
+ putshort(temp,transdata[j].transition);
+ }
+ free(transdata);
+
+ here = ftell(temp);
+ if ( ismort ) {
+ fseek(temp,start+3*sizeof(uint16),SEEK_SET);
+ putshort(temp,here-start); /* Point to start of transition arrays */
+ } else {
+ fseek(temp,start+3*sizeof(uint32),SEEK_SET);
+ putlong(temp,here-start); /* Point to start of transition arrays */
+ }
+ fseek(temp,0,SEEK_END);
+
+ /* Now the transitions */
+ if ( sm->type==asm_kern ) {
+ substable_pos = here+tcnt*2*sizeof(int16);
+ for ( i=0; i<tcnt; ++i ) {
+ /* mort tables use an offset rather than the state number */
+ putshort(temp,trans[i].ns*sm->class_cnt+state_offset);
+ if ( trans[i].mi!=0xffff )
+ trans[i].flags |= substable_pos-start+trans[i].mi;
+ putshort(temp,trans[i].flags);
+ }
+ } else {
+ for ( i=0; i<tcnt; ++i ) {
+ putshort(temp,trans[i].ns);
+ putshort(temp,trans[i].flags);
+ if ( sm->type!=asm_indic && sm->type!=asm_kern ) {
+ putshort(temp,trans[i].mi );
+ putshort(temp,trans[i].ci );
+ }
+ }
+ }
+ free(trans);
+
+ if ( sm->type==asm_context ) {
+ substable_pos = ftell(temp);
+ fseek(temp,start+4*sizeof(uint32),SEEK_SET);
+ putlong(temp,substable_pos-start); /* Point to start of substitution lookup offsets */
+ fseek(temp,0,SEEK_END);
+
+ /* And finally the substitutions */
+ for ( i=0; i<stcnt; ++i )
+ putlong(temp,0); /* offsets to the substitutions */
+ for ( i=0; i<stcnt; ++i ) {
+ here = ftell(temp);
+ fseek(temp,substable_pos+i*sizeof(uint32),SEEK_SET);
+ putlong(temp,here-substable_pos);
+ fseek(temp,0,SEEK_END);
+ morx_dumpnestedsubs(temp,sf,subslookups[i],&at->gi);
+ }
+ free(subslookups);
+ } else if ( sm->type==asm_insert ) {
+ substable_pos = ftell(temp);
+ fseek(temp,start+4*sizeof(uint32),SEEK_SET);
+ putlong(temp,substable_pos-start); /* Point to start of insertions */
+ fseek(temp,0,SEEK_END);
+
+ for ( i=0; i<stcnt; ++i ) {
+ for ( j=0; j<subsins[i].len; ++j )
+ putshort(temp,subsins[i].glyphs[j]);
+ free(subsins[i].glyphs);
+ }
+ free(subsins);
+ } else if ( sm->type==asm_kern ) {
+ if ( substable_pos!=ftell(temp) )
+ IError( "Kern Values table in wrong place.\n" );
+ fseek(temp,start+4*sizeof(uint16),SEEK_SET);
+ putshort(temp,substable_pos-start); /* Point to start of insertions */
+ fseek(temp,0,SEEK_END);
+ if ( !ttfcopyfile(temp,kernvalues,substable_pos,"kern-subtable")) at->error = true;
+ }
+return( true );
+}
+
+static struct feature *aat_dumpmorx_asm(struct alltabs *at, SplineFont *sf,
+ FILE *temp, struct feature *features, ASM *sm) {
+ struct feature *cur;
+
+ cur = featureFromSubtable(sf,sm->subtable);
+ cur->vertOnly = sm->flags&0x8000?1:0;
+ cur->r2l = sm->flags&0x4000?1:0;
+ cur->subtable_type = sm->type; /* contextual glyph subs */
+ cur->feature_start = ftell(temp);
+ if ( morx_dumpASM(temp,sm,at,sf)) {
+ cur->next = features;
+ features = cur;
+ if ( (ftell(temp)-cur->feature_start)&1 )
+ putc('\0',temp);
+ if ( (ftell(temp)-cur->feature_start)&2 )
+ putshort(temp,0);
+ cur->feature_len = ftell(temp)-cur->feature_start;
+ } else
+ chunkfree(cur,sizeof(struct feature));
+return( features);
+}
+
+static struct feature *aat_dumpmorx_cvtopentype(struct alltabs *at, SplineFont *sf,
+ FILE *temp, struct feature *features, struct lookup_subtable *sub) {
+ ASM *sm;
+
+ if ( FPSTisMacable(sf,sub->fpst)) {
+ sm = ASMFromFPST(sf,sub->fpst,true);
+ if ( sm!=NULL ) {
+ features = aat_dumpmorx_asm(at,sf,temp,features,sm);
+ ASMFree(sm);
+ }
+ }
+return( features );
+}
+
+static int IsOtfArabicFormFeature(OTLookup *otl) {
+ FeatureScriptLangList *fl;
+
+ for ( fl=otl->features; fl!=NULL; fl=fl->next ) {
+ if (( fl->featuretag == CHR('i','n','i','t') ||
+ fl->featuretag==CHR('m','e','d','i') ||
+ fl->featuretag==CHR('f','i','n','a') ||
+ fl->featuretag==CHR('i','s','o','l') ) &&
+ scriptsHaveDefault(fl->scripts))
+return( true );
+ }
+return( false );
+}
+
+static int HasCursiveConnectionSM(SplineFont *sf) {
+ int featureType, featureSetting;
+ uint32 tag;
+ ASM *sm;
+
+ if ( OTTagToMacFeature(CHR('i','s','o','l'),&featureType,&featureSetting) ) {
+ tag = (featureType<<16) | featureSetting;
+ for ( sm = sf->sm; sm!=NULL; sm=sm->next ) {
+ if ( sm->subtable->lookup->features->featuretag==tag )
+return( true );
+ }
+ }
+ for ( sm = sf->sm; sm!=NULL; sm=sm->next ) {
+ if ( sm->subtable->lookup->features->featuretag==CHR('i','s','o','l') )
+return( true );
+ }
+return( false );
+}
+
+static uint32 *FormedScripts(SplineFont *sf) {
+ OTLookup *otl;
+ uint32 *ret = NULL;
+ int scnt=0, smax=0;
+ FeatureScriptLangList *fl;
+ struct scriptlanglist *sl;
+ int i;
+
+ for ( otl= sf->gsub_lookups; otl!=NULL; otl=otl->next ) {
+ if ( otl->lookup_type == gsub_single ) {
+ for ( fl=otl->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->featuretag == CHR('i','n','i','t') ||
+ fl->featuretag==CHR('m','e','d','i') ||
+ fl->featuretag==CHR('f','i','n','a') ||
+ fl->featuretag==CHR('i','s','o','l') ) {
+ for ( sl=fl->scripts; sl!=NULL; sl=sl->next ) {
+ for ( i=0; i<sl->lang_cnt; ++i ) {
+ if ( (i<MAX_LANG ? sl->langs[i] : sl->morelangs[i-MAX_LANG])==DEFAULT_LANG ) {
+ if ( scnt<=smax )
+ ret = realloc(ret,(smax+=5)*sizeof(uint32));
+ ret[scnt++] = sl->script;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if ( scnt==0 )
+return( NULL );
+ if ( scnt<=smax )
+ ret = realloc(ret,(smax+=1)*sizeof(uint32));
+ ret[scnt] = 0;
+return( ret );
+}
+
+int Macable(SplineFont *sf, OTLookup *otl) {
+ int ft, fs;
+ FeatureScriptLangList *features;
+
+ switch ( otl->lookup_type ) {
+ /* These lookup types are mac only */
+ case kern_statemachine: case morx_indic: case morx_context: case morx_insert:
+ return( true );
+ /* These lookup types or OpenType only */
+ case gsub_multiple: case gsub_alternate:
+ case gpos_single: case gpos_cursive: case gpos_mark2base:
+ case gpos_mark2ligature: case gpos_mark2mark:
+ return( false );
+ /* These are OpenType only, but they might be convertable to a state */
+ /* machine */
+ case gsub_context:
+ case gsub_contextchain: case gsub_reversecchain:
+ case gpos_context: case gpos_contextchain:
+ if ( sf==NULL || sf->sm!=NULL )
+ return( false );
+ /* Else fall through into the test on the feature tag */;
+ /* These two can be expressed in both, and might be either */
+ case gsub_single: case gsub_ligature: case gpos_pair:
+ for ( features = otl->features; features!=NULL; features = features->next ) {
+ if ( features->ismac || OTTagToMacFeature(features->featuretag,&ft,&fs))
+ return( true );
+ }
+ default:;
+ }
+ return( false );
+}
+
+static struct feature *aat_dumpmorx_cvtopentypeforms(struct alltabs *at, SplineFont *sf,
+ FILE *temp, struct feature *features) {
+ ASM *sm;
+ uint32 *scripts;
+ int featureType, featureSetting;
+ int i;
+ OTLookup *otl;
+
+ if ( sf->cidmaster!=NULL )
+ sf = sf->cidmaster;
+ else if ( sf->mm!=NULL ) sf=sf->mm->normal;
+
+ for ( otl=sf->gsub_lookups; otl!=NULL; otl=otl->next )
+ if ( Macable(sf,otl) && otl->lookup_type==gsub_single && IsOtfArabicFormFeature(otl))
+ otl->ticked = true;
+
+ if ( OTTagToMacFeature(CHR('i','s','o','l'),&featureType,&featureSetting) ) {
+ scripts = FormedScripts(sf);
+ for ( i=0; scripts[i]!=0; ++i ) {
+ sm = ASMFromOpenTypeForms(sf,scripts[i]);
+ if ( sm!=NULL ) {
+ features = aat_dumpmorx_asm(at,sf,temp,features,sm);
+ ASMFree(sf->sm);
+ }
+ }
+ free(scripts);
+ }
+return( features );
+}
+
+static struct feature *featuresReverse(struct feature *features) {
+ struct feature *p, *n;
+
+ p = NULL;
+ while ( features!=NULL ) {
+ n = features->next;
+ features->next = p;
+ p = features;
+ features = n;
+ }
+return( p );
+}
+
+static struct feature *featuresOrderByType(struct feature *features) {
+ struct feature *f, **all;
+ int i, j, cnt/*, saw_default*/;
+
+ for ( cnt=0, f=features; f!=NULL; f=f->next, ++cnt );
+ if ( cnt==1 ) {
+return( features );
+ }
+ all = malloc(cnt*sizeof(struct feature *));
+ for ( i=0, f=features; f!=NULL; f=f->next, ++i )
+ all[i] = f;
+ for ( i=0; i<cnt-1; ++i ) for ( j=i+1; j<cnt; ++j ) {
+ if ( all[i]->featureType>all[j]->featureType ||
+ (all[i]->featureType==all[j]->featureType && all[i]->featureSetting>all[j]->featureSetting )) {
+ f = all[i];
+ all[i] = all[j];
+ all[j] = f;
+ }
+ }
+ for ( i=0; i<cnt-1; ++i )
+ all[i]->nexttype = all[i+1];
+ all[cnt-1]->nexttype = NULL;
+ features = all[0];
+ free( all );
+return( features );
+}
+
+static struct feature *AddExclusiveNoops(SplineFont *sf, struct feature *features) {
+ struct feature *f, *n, *def, *p, *t;
+ /* mutually exclusive features need to have a setting which does nothing */
+
+ for ( f=features; f!=NULL; f=n ) {
+ n= f->nexttype;
+ if ( f->mf!=NULL && f->mf->ismutex ) {
+ def = NULL;
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n=n->nexttype ) {
+ if ( n->featureSetting==f->mf->default_setting )
+ def = n;
+ }
+ if ( def==NULL ) {
+ t = chunkalloc(sizeof(struct feature));
+ *t = *f;
+ t->feature_start = 0; t->feature_len=0; t->next = NULL;
+ t->featureSetting = f->mf->default_setting;
+ t->ms = FindMacSetting(sf,t->featureType,f->mf->default_setting,&t->sms);
+ t->flag = 0;
+ t->dummyOff = true;
+ if ( f==features )
+ p = NULL;
+ else
+ for ( p=features; p->nexttype!=f; p=p->nexttype );
+ n = f;
+ while ( n!=NULL && n->featureType==t->featureType && n->featureSetting<t->featureSetting ) {
+ p = n;
+ n = n->nexttype;
+ }
+ t->nexttype = n;
+ if ( p==NULL )
+ features = t;
+ else
+ p->nexttype = t;
+ while ( n!=NULL && n->featureType==t->featureType )
+ n=n->nexttype;
+ }
+ }
+ }
+return( features );
+}
+
+static void SetExclusiveOffs(struct feature *features) {
+ struct feature *f, *n;
+ int offFlags;
+ /* mutually exclusive features need to have a setting which does nothing */
+
+ for ( f=features; f!=NULL; f=n ) {
+ n= f->nexttype;
+ if ( f->mf!=NULL && f->mf->ismutex ) {
+ offFlags=0;
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n=n->nexttype ) {
+ offFlags |= n->flag;
+ }
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n=n->nexttype )
+ n->offFlags = ~(offFlags&~n->flag);
+ }
+ }
+return;
+}
+
+static void aat_dumpfeat(struct alltabs *at, SplineFont *sf, struct feature *feature) {
+ int scnt, fcnt, cnt;
+ struct feature *f, *n, *p;
+ int k;
+ uint32 offset;
+ int strid = at->next_strid;
+ int fn=0;
+ MacFeat *mf, *smf;
+ struct macsetting *ms, *sms;
+ /* Dump the 'feat' table which is a connection between morx features and */
+ /* the name table */
+ /* We do three passes. The first just calculates how much space we will need */
+ /* the second provides names for the feature types */
+ /* and the third provides names for the feature settings */
+ /* As we fill up the feat table we also create an array of strings */
+ /* (strid, char *pointer) which will be used by the 'name' table to */
+ /* give names to the features and their settings */
+ /* The mac documentation says that the features should be sorted by feature type */
+ /* This is a lie. Features should appear in the same order they appear */
+ /* in the morx table, otherwise WorldText goes blooie */
+ /* WorldText doesn't exist any more. Perhaps the morx table needs to be */
+ /* sorted by feature id too? No, it can't be. Feature 0 must come last */
+
+ if ( feature==NULL )
+return;
+
+ fcnt = scnt = 0;
+ for ( k=0; k<3; ++k ) {
+ if ( k==1 ) {
+ /* FeatureName entry for All Typographics */
+ mf = FindMacFeature(sf,0,&smf);
+ if ( (mf!=NULL && mf->featname!=NULL) || (smf!=NULL && smf->featname!=NULL)) {
+ at->feat_name[fn].mn = mf!=NULL ? mf->featname : NULL;
+ at->feat_name[fn].smn = smf!=NULL ? smf->featname : NULL;
+ at->feat_name[fn++].strid = strid;
+ }
+ putshort(at->feat,0);
+ putshort(at->feat,1);
+ putlong(at->feat,offset);
+ putshort(at->feat,0x0000); /* non exclusive */
+ putshort(at->feat,strid++);
+ offset += 1*4; /* (1 setting, 4 bytes) All Features */
+ } else if ( k==2 ) {
+ /* Setting Name Array for All Typographic Features */
+ ms = FindMacSetting(sf,0,0,&sms);
+ if ( (ms!=NULL && ms->setname!=NULL) || (sms!=NULL && sms->setname!=NULL)) {
+ at->feat_name[fn].mn = ms!=NULL ? ms->setname: NULL;
+ at->feat_name[fn].smn = sms!=NULL ? sms->setname: NULL;
+ at->feat_name[fn++].strid = strid;
+ }
+ putshort(at->feat,0);
+ putshort(at->feat,strid++);
+ }
+ for ( f=feature; f!=NULL; f=n ) {
+ cnt=1;
+ if ( k!=2 ) {
+ p = f;
+ for ( n=f->nexttype; n!=NULL && n->featureType==f->featureType; n = n->nexttype ) {
+ if ( p->featureSetting!=n->featureSetting ) {
+ ++cnt;
+ p = n;
+ }
+ }
+ } else {
+ p = f;
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n = n->nexttype ) {
+ if ( n==f || p->featureSetting!=n->featureSetting ) {
+ if (( n->ms!=NULL && n->ms->setname!=NULL ) ||
+ ( n->sms!=NULL && n->sms->setname!=NULL)) {
+ at->feat_name[fn].mn = n->ms!=NULL ? n->ms->setname : NULL;
+ at->feat_name[fn].smn = n->sms!=NULL ? n->sms->setname : NULL;
+ at->feat_name[fn++].strid = strid;
+ }
+ putshort(at->feat,n->featureSetting);
+ putshort(at->feat,strid++);
+ p = n;
+ }
+ }
+ }
+ if ( k==0 ) {
+ ++fcnt;
+ scnt += cnt;
+ } else if ( k==1 ) {
+ if ( (f->mf!=NULL && f->mf->featname!=NULL) || (f->smf!=NULL && f->smf->featname!=NULL) ) {
+ at->feat_name[fn].mn = f->mf!=NULL ? f->mf->featname : NULL;
+ at->feat_name[fn].smn = f->smf!=NULL ? f->smf->featname : NULL;
+ at->feat_name[fn++].strid = strid;
+ }
+ putshort(at->feat,f->featureType);
+ putshort(at->feat,cnt);
+ putlong(at->feat,offset);
+ putshort(at->feat,f->mf!=NULL && f->mf->ismutex?(0xc000|f->mf->default_setting):
+ 0);
+ putshort(at->feat,strid++);
+ offset += 4*cnt;
+ }
+ }
+ if ( k==0 ) {
+ ++fcnt; /* Add one for "All Typographic Features" */
+ ++scnt; /* Add one for All Features */
+ at->feat = tmpfile2();
+ at->feat_name = malloc((fcnt+scnt+1)*sizeof(struct feat_name));
+ putlong(at->feat,0x00010000);
+ putshort(at->feat,fcnt);
+ putshort(at->feat,0);
+ putlong(at->feat,0);
+ offset = 12 /* header */ + fcnt*12;
+ }
+ }
+ memset( &at->feat_name[fn],0,sizeof(struct feat_name));
+ at->next_strid = strid;
+
+ at->featlen = ftell(at->feat);
+ if ( at->featlen&2 )
+ putshort(at->feat,0);
+}
+
+static int featuresAssignFlagsChains(struct feature *features, struct feature *feature_by_type) {
+ int bit, cnt, chain, fcnt, i, mybit;
+ struct feature *f, *n, *p;
+ uint16 chains_features[32];
+ uint32 chains_bitindex[32]; /* Index for bit of first setting of this feature */
+
+ if ( features==NULL )
+return( 0 );
+
+ /* A feature may have several subtables which need not be contiguous in */
+ /* the feature list */
+ /* Indeed we could have a feature in several different chains */
+ /* Sigh */
+ /* we figure out how many possible settings there are for each feature */
+ /* and reserve that many bits for the feature in all chains in which it */
+ /* occurs */
+ /* Note that here we count dummy settings (they need turn off bits) */
+ /* so we use feature_by_type */
+ for ( f=feature_by_type; f!=NULL; f=n ) {
+ cnt=0;
+ p = NULL;
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n=n->nexttype ) {
+ if ( p==NULL || n->featureSetting != p->featureSetting ) {
+ ++cnt;
+ p = n;
+ }
+ n->setting_index = cnt-1;
+ }
+ for ( n=f; n!=NULL && n->featureType==f->featureType; n=n->nexttype )
+ n->setting_cnt = cnt;
+ }
+ /* When we counted flags we need to count the dummy features for turning */
+ /* things off. Those features live in features_by_type. When we put */
+ /* things in chains we want only the meaningful features, and we want */
+ /* them to be properly ordered. That we get from the "features" list */
+ fcnt = 0; chain = 0; bit=0;
+ for ( f=features; f!=NULL; f=f->next ) {
+ for ( i=0; i<fcnt && chains_features[i]!=f->featureType; ++i );
+ if ( i==fcnt ) {
+ if ( bit+f->setting_cnt>=32 ) {
+ ++chain;
+ bit = 0;
+ fcnt = 0;
+ }
+ chains_features[fcnt] = f->featureType;
+ chains_bitindex[fcnt++] = bit;
+ mybit = bit;
+ bit += f->setting_cnt;
+ } else
+ mybit = chains_bitindex[i];
+ f->real_index = mybit+f->setting_index;
+ f->flag = 1<<f->real_index;
+ if ( f->mf!=NULL && f->mf->ismutex ) {
+ int off = (~((~0)<<f->setting_cnt))<<mybit;
+ off &= !f->flag;
+ f->offFlags = off;
+ } else {
+ if ( f->featureSetting&1 ) {
+ for ( n=feature_by_type; n!=NULL &&
+ (n->featureType!=f->featureType || n->featureSetting!=f->featureSetting+1);
+ n=n->next );
+ } else {
+ for ( n=feature_by_type; n!=NULL &&
+ (n->featureType!=f->featureType || n->featureSetting!=f->featureSetting+1);
+ n=n->next );
+ }
+ if ( n!=NULL )
+ f->offFlags = 1<<(mybit+n->setting_index);
+ else
+ f->offFlags = ~0;
+ }
+ f->chain = chain;
+ }
+return( chain+1 );
+}
+
+static void morxDumpChain(struct alltabs *at,struct feature *features,
+ struct feature *features_by_type, int chain, FILE *temp) {
+ uint32 def_flags=0;
+ struct feature *f, *n;
+ uint32 chain_start, end;
+ char *buf;
+ int len, tot, fs_cnt, sub_cnt;
+ struct feature *all[32];
+ int i,offFlags, last_ri=-1, last_f=-1, ri;
+
+ memset(all,0,sizeof(all));
+ for ( f=features, fs_cnt=sub_cnt=0; f!=NULL; f=f->next ) {
+ if ( f->chain==chain ) {
+ if ( all[f->real_index]==NULL ) {
+ int base = f->real_index-f->setting_index;
+ /* Note we use features_by_type here. It will have the default*/
+ /* settings for features, and will be ordered nicely */
+ for ( n=features_by_type; n!=NULL; n=n->nexttype ) {
+ if ( n->featureType==f->featureType && n->chain==chain ) {
+ n->nextsame = all[base+n->setting_index];
+ all[base+n->setting_index] = n;
+ if ( n->ms!=NULL && n->ms->initially_enabled )
+ def_flags |= n->flag;
+ }
+ }
+ }
+ ++sub_cnt;
+ }
+ }
+
+ /* Chain header */
+ chain_start = ftell(at->morx);
+ putlong(at->morx,def_flags);
+ putlong(at->morx,0); /* Fix up length later */
+ putlong(at->morx,0); /* fix up feature count */
+ putlong(at->morx,sub_cnt); /* subtable cnt */
+
+ /* Features */
+ fs_cnt = 0;
+ for ( i=0; i<32; ++i ) if ( all[i]!=NULL ) {
+ putshort(at->morx,all[i]->featureType);
+ putshort(at->morx,all[i]->featureSetting);
+ if ( all[i]->dummyOff ) {
+ putlong(at->morx,0);
+ if ( last_f==all[i]->featureType )
+ ri = last_ri;
+ else if ( i<31 && all[i+1]!=NULL && all[i+1]->featureType == all[i]->featureType )
+ ri = i+1 - all[i+1]->real_index;
+ else
+ ri = 0; /* This can't happen */
+ } else {
+ putlong(at->morx,1<<i);
+ ri = i-all[i]->real_index;
+ last_ri = ri; last_f = all[i]->featureType;
+ }
+ offFlags = all[i]->offFlags;
+ if ( ri>0 )
+ offFlags<<=(ri);
+ else if ( ri<0 )
+ offFlags>>=(-ri);
+ putlong(at->morx,offFlags);
+ ++fs_cnt;
+
+ if ( all[i]->needsOff && (i==31 || all[i+1]==NULL ||
+ all[i+1]->featureType!=all[i]->featureType ||
+ all[i+1]->featureSetting!=all[i]->featureSetting+1 )) {
+ putshort(at->morx,all[i]->featureType);
+ putshort(at->morx,all[i]->featureSetting+1);
+ putlong(at->morx,0);
+ putlong(at->morx,all[i]->offFlags & ~all[i]->flag );
+ ++fs_cnt;
+ }
+ /* I used to have code to output the default setting of a mutex */
+ /* but I should already have put that in the feature list */
+ }
+ /* The feature list of every chain must end with these two features */
+ putshort(at->morx,0); /* All Typo Features */
+ putshort(at->morx,0); /* All Features */
+ putlong(at->morx,0xffffffff); /* enable */
+ putlong(at->morx,0xffffffff); /* disable */
+ putshort(at->morx,0); /* All Typo Features */
+ putshort(at->morx,1); /* No Features */
+ putlong(at->morx,0); /* enable */
+ putlong(at->morx,0); /* disable */
+ fs_cnt += 2;
+
+ buf = malloc(16*1024);
+ /* Subtables */
+ for ( f=features; f!=NULL; f=f->next ) if ( f->chain==chain ) {
+ putlong(at->morx,f->feature_len+12); /* Size of header needs to be added */
+ putlong(at->morx,(f->vertOnly?0x80000000:f->r2l?0x40000000:0) | f->subtable_type);
+ putlong(at->morx,f->flag);
+ tot = f->feature_len;
+ fseek(temp, f->feature_start, SEEK_SET);
+ while ( tot!=0 ) {
+ len = tot;
+ if ( len>16*1024 ) len = 16*1024;
+ len = fread(buf,1,len,temp);
+ len = fwrite(buf,1,len,at->morx);
+ if ( len<=0 ) {
+ IError( "Disk error\n" );
+ break;
+ }
+ tot -= len;
+ }
+ }
+ free(buf);
+
+ /* Pad chain to a multiple of four */
+ if ( (ftell(at->morx)-chain_start)&1 )
+ putc('\0',at->morx);
+ if ( (ftell(at->morx)-chain_start)&2 )
+ putshort(at->morx,0);
+ end = ftell(at->morx);
+ fseek(at->morx,chain_start+4,SEEK_SET);
+ putlong(at->morx,end-chain_start);
+ putlong(at->morx,fs_cnt);
+ fseek(at->morx,0,SEEK_END);
+}
+
+void aat_dumpmorx(struct alltabs *at, SplineFont *sf) {
+ FILE *temp = tmpfile2();
+ struct feature *features = NULL, *features_by_type;
+ int nchains, i;
+ OTLookup *otl;
+ struct lookup_subtable *sub;
+
+ /* Arabic Form features all need to be merged together and formed into */
+ /* a cursive connection state machine. So the first time we see one of */
+ /* we handle all of them. After that we ignore all of them. Note: if */
+ /* OpenType has them happening in different orders, that information */
+ /* will be lost. All will be processed at once. */
+ for ( otl = sf->gsub_lookups; otl!=NULL; otl=otl->next )
+ otl->ticked = false;
+
+ SFLigaturePrepare(sf);
+
+ /* Retain the same lookup ordering */
+ for ( otl = sf->gsub_lookups; otl!=NULL; otl=otl->next ) {
+ if ( !Macable(sf,otl))
+ continue;
+ if ( otl->lookup_type==gsub_single && IsOtfArabicFormFeature(otl) ) {
+ if ( otl->ticked )
+ /* Already processed */;
+ else if ( HasCursiveConnectionSM(sf) )
+ /* Skip the OpenType conversion and use the native state machine */;
+ else
+ features = aat_dumpmorx_cvtopentypeforms(at,sf,temp,features);
+ } else {
+ for ( sub=otl->subtables; sub!=NULL; sub=sub->next ) {
+ switch ( otl->lookup_type ) {
+ case gsub_single:
+ features = aat_dumpmorx_substitutions(at,sf,temp,features,sub);
+ break;
+ case gsub_ligature:
+ features = aat_dumpmorx_ligatures(at,sf,temp,features,sub);
+ break;
+ case morx_indic: case morx_context: case morx_insert:
+ features = aat_dumpmorx_asm(at,sf,temp,features,sub->sm);
+ break;
+ default:
+ if ( sf->sm==NULL )
+ features = aat_dumpmorx_cvtopentype(at,sf,temp,features,sub);
+ }
+ }
+ }
+ }
+
+ SFLigatureCleanup(sf);
+
+ if ( features==NULL ) {
+ fclose(temp);
+return;
+ }
+ /* The features are in reverse execution order */
+ features = featuresReverse(features);
+ /* But the feature table requires them in numeric order */
+ features_by_type = featuresOrderByType(features);
+ features_by_type = AddExclusiveNoops(sf,features_by_type);
+ aat_dumpfeat(at, sf, features_by_type);
+ nchains = featuresAssignFlagsChains(features,features_by_type);
+ SetExclusiveOffs(features_by_type);
+
+ at->morx = tmpfile2();
+ putlong(at->morx,0x00020000);
+ putlong(at->morx,nchains);
+ for ( i=0; i<nchains; ++i )
+ morxDumpChain(at,features,features_by_type,i,temp);
+ fclose(temp);
+ morxfeaturesfree(features_by_type);
+
+ at->morxlen = ftell(at->morx);
+ if ( at->morxlen&1 )
+ putc('\0',at->morx);
+ if ( (at->morxlen+1)&2 )
+ putshort(at->morx,0);
+}
+
+/* ************************************************************************** */
+/* ************************* The 'opbd' table ************************* */
+/* ************************************************************************** */
+
+int haslrbounds(SplineChar *sc, PST **left, PST **right) {
+ PST *pst;
+
+ *left = *right = NULL;
+ for ( pst=sc->possub; pst!=NULL ; pst=pst->next ) {
+ if ( pst->type == pst_position ) {
+ if ( PSTHasTag(pst,CHR('l','f','b','d')) ) {
+ *left = pst;
+ if ( *right )
+return( true );
+ } else if ( PSTHasTag(pst,CHR('r','t','b','d')) ) {
+ *right = pst;
+ if ( *left )
+return( true );
+ }
+ }
+ }
+return( *left!=NULL || *right!=NULL );
+}
+
+void aat_dumpopbd(struct alltabs *at, SplineFont *_sf) {
+ int i, j, k, l, seg_cnt, tot, last, offset;
+ PST *left, *right;
+ FILE *opbd=NULL;
+ /* We do four passes. The first just calculates how much space we will need (if any) */
+ /* the second provides the top-level lookup table structure */
+ /* the third provides the arrays of offsets needed for type 4 lookup tables */
+ /* the fourth provides the actual data on the optical bounds */
+ SplineChar *sc;
+
+ for ( k=0; k<4; ++k ) {
+ for ( i=seg_cnt=tot=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ l = 0;
+ sc = _sf->glyphs[at->gi.bygid[i]];
+ if ( haslrbounds(sc,&left,&right) ) {
+ if ( k==1 )
+ tot = 0;
+ else if ( k==2 ) {
+ putshort(opbd,offset);
+ offset += 8;
+ } else if ( k==3 ) {
+ putshort(opbd,left!=NULL?-left->u.pos.xoff:0);
+ putshort(opbd,0); /* top */
+ putshort(opbd,right!=NULL?-right->u.pos.h_adv_off:0);
+ putshort(opbd,0); /* bottom */
+ }
+ last = i;
+ for ( j=i+1, ++tot; j<at->gi.gcnt; ++j ) {
+ if ( at->gi.bygid[i]==-1 || !haslrbounds(_sf->glyphs[at->gi.bygid[j]],&left,&right) )
+ break;
+ ++tot;
+ last = j;
+ if ( k==2 ) {
+ putshort(opbd,offset);
+ offset += 8;
+ } else if ( k==3 ) {
+ putshort(opbd,left!=NULL?-left->u.pos.xoff:0);
+ putshort(opbd,0); /* top */
+ putshort(opbd,right!=NULL?-right->u.pos.h_adv_off:0);
+ putshort(opbd,0); /* bottom */
+ }
+ }
+ if ( k==1 ) {
+ putshort(opbd,last);
+ putshort(opbd,i);
+ putshort(opbd,offset);
+ offset += 2*tot;
+ }
+ ++seg_cnt;
+ i = j-1;
+ }
+ }
+ if ( k==0 ) {
+ if ( seg_cnt==0 )
+return;
+ opbd = tmpfile2();
+ putlong(opbd, 0x00010000); /* version */
+ putshort(opbd,0); /* data are distances (not control points) */
+
+ putshort(opbd,4); /* Lookup table format 4 */
+ /* Binary search header */
+ putshort(opbd,6); /* Entry size */
+ putshort(opbd,seg_cnt); /* Number of segments */
+ for ( j=0,l=1; l<=seg_cnt; l<<=1, ++j );
+ --j; l>>=1;
+ putshort(opbd,6*l);
+ putshort(opbd,j);
+ putshort(opbd,6*(seg_cnt-l));
+ /* offset from start of lookup, not table */
+ offset = 6*2/* format, binsearch*/ + seg_cnt*6 +6 /*flag entry */;
+ } else if ( k==1 ) { /* flag entry */
+ putshort(opbd,0xffff);
+ putshort(opbd,0xffff);
+ putshort(opbd,0);
+ }
+ }
+ at->opbd = opbd;
+ at->opbdlen = ftell(at->opbd);
+ if ( at->opbdlen&2 )
+ putshort(at->opbd,0);
+}
+
+/* ************************************************************************** */
+/* ************************* The 'prop' table ************************* */
+/* ************************************************************************** */
+
+uint16 *props_array(SplineFont *sf,struct glyphinfo *gi) {
+ uint16 *props;
+ int i;
+ SplineChar *sc, *bsc;
+ int dir, isfloat, isbracket, offset, doit=false;
+ AnchorPoint *ap;
+ PST *pst;
+ int p;
+
+ props = calloc(gi->gcnt+1,sizeof(uint16));
+ props[gi->gcnt] = -1;
+
+ for ( i=0; i<gi->gcnt; ++i ) if ( (p = gi->bygid==NULL ? i : gi->bygid[i])!=-1 ) {
+ sc = sf->glyphs[p];
+ if ( sc!=NULL && (gi->bygid==NULL || sc->ttf_glyph!=-1 )) {
+ dir = 0;
+ if ( sc->unicodeenc>=0x10300 && sc->unicodeenc<=0x103ff )
+ dir = 0;
+ else if ( sc->unicodeenc>=0x10800 && sc->unicodeenc<=0x10fff )
+ dir = 1;
+ else if ( sc->unicodeenc!=-1 && sc->unicodeenc<0x10fff ) {
+ if ( iseuronumeric(sc->unicodeenc) )
+ dir = 3;
+ else if ( iseuronumsep(sc->unicodeenc))
+ dir = 4;
+ else if ( iseuronumterm(sc->unicodeenc))
+ dir = 5;
+ else if ( isarabnumeric(sc->unicodeenc))
+ dir = 6;
+ else if ( iscommonsep(sc->unicodeenc))
+ dir = 7;
+ else if ( isspace(sc->unicodeenc))
+ dir = 10;
+ else if ( islefttoright(sc->unicodeenc) )
+ dir = 0;
+ else if ( isrighttoleft(sc->unicodeenc) )
+ dir = 1;
+ else if ( SCScriptFromUnicode(sc)==CHR('a','r','a','b') )
+ dir = 2;
+ else if ( SCScriptFromUnicode(sc)==CHR('h','e','b','r') )
+ dir = 1;
+ else
+ dir = 11; /* Other neutrals */
+ /* Not dealing with unicode 3 classes */
+ /* nor block seperator/ segment seperator */
+ } else if ( SCScriptFromUnicode(sc)==CHR('a','r','a','b') )
+ dir = 2;
+ else if ( SCScriptFromUnicode(sc)==CHR('h','e','b','r') )
+ dir = 1;
+
+ if ( dir==1 || dir==2 ) doit = true;
+ isfloat = false;
+ if ( sc->width==0 &&
+ ((sc->anchor!=NULL && sc->anchor->type==at_mark) ||
+ (sc->unicodeenc!=-1 && sc->unicodeenc<0x10000 && iscombining(sc->unicodeenc))))
+ isfloat = doit = true;
+ isbracket = offset = 0;
+ if ( sc->unicodeenc!=-1 && sc->unicodeenc<0x10000 && tomirror(sc->unicodeenc)!=0 ) {
+ bsc = SFGetChar(sf,tomirror(sc->unicodeenc),NULL);
+ if ( bsc!=NULL && bsc->ttf_glyph-sc->ttf_glyph>-8 && bsc->ttf_glyph-sc->ttf_glyph<8 ) {
+ isbracket = true;
+ offset = bsc->ttf_glyph-sc->ttf_glyph;
+ }
+ }
+ if ( !isbracket ) {
+ for ( pst=sc->possub; pst!=NULL && PSTHasTag(pst,CHR('r','t','l','a')); pst=pst->next );
+ if ( pst!=NULL && pst->type==pst_substitution &&
+ (bsc=SFGetChar(sf,-1,pst->u.subs.variant))!=NULL &&
+ bsc->ttf_glyph!=-1 && bsc->ttf_glyph-sc->ttf_glyph>-8 && bsc->ttf_glyph-sc->ttf_glyph<8 ) {
+ isbracket = true;
+ offset = bsc->ttf_glyph-sc->ttf_glyph;
+ doit = true;
+ }
+ }
+ if ( SCRightToLeft(sc) ) {
+ /* Apple docs say attached right. So for r2l scripts we look for */
+ /* a cursive entry, and for l2r a cursive exit */
+ for ( ap=sc->anchor; ap!=NULL && ap->type!=at_centry; ap=ap->next );
+ } else {
+ for ( ap=sc->anchor; ap!=NULL && ap->type!=at_cexit; ap=ap->next );
+ }
+ props[sc->ttf_glyph] = dir |
+ (isfloat ? 0x8000 : 0 ) |
+ (isbracket ? 0x1000 : 0 ) |
+ (ap!=NULL ? 0x80 : 0 ) |
+ ((offset&0xf)<<8);
+ /* not dealing with */
+ /* hang left 0x4000 */
+ /* hang right 0x2000 */
+ }
+ }
+
+ if ( !doit ) {
+ free(props);
+return( NULL );
+ }
+
+return( props );
+}
+
+void aat_dumpprop(struct alltabs *at, SplineFont *sf) {
+ uint16 *props = props_array(sf,&at->gi);
+ uint32 bin_srch_header;
+ int i, j, cnt;
+
+ if ( props==NULL )
+return;
+
+ at->prop = tmpfile2();
+ putlong(at->prop,0x00020000);
+ putshort(at->prop,1); /* Lookup data */
+ putshort(at->prop,0); /* default property is simple l2r */
+ putshort(at->prop,2); /* lookup format 2 => segment single value */
+ /* Binsearch header */
+ bin_srch_header = ftell(at->prop);
+ putshort(at->prop,6); /* Entry size */
+ putshort(at->prop,0); /* fill in later */
+ putshort(at->prop,0);
+ putshort(at->prop,0);
+ putshort(at->prop,0);
+
+ cnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) {
+ while ( i<at->gi.gcnt && props[i]==0 ) ++i; /* skip default entries */
+ if ( i>=at->gi.gcnt )
+ break;
+ for ( j=i+1; j<at->gi.gcnt && props[j]==props[i]; ++j );
+ putshort(at->prop,j-1);
+ putshort(at->prop,i);
+ putshort(at->prop,props[i]);
+ i = j-1;
+ ++cnt;
+ }
+ putshort(at->prop,0xffff); /* Final eof marker */
+ putshort(at->prop,0xffff);
+ putshort(at->prop,0x0000);
+
+ fseek(at->prop,bin_srch_header,SEEK_SET);
+ putshort(at->prop,6); /* Entry size */
+ putshort(at->prop,cnt); /* Number of segments */
+ for ( j=0,i=1; i<=cnt; i<<=1, ++j );
+ --j; i>>=1;
+ putshort(at->prop,6*i);
+ putshort(at->prop,j);
+ putshort(at->prop,6*(cnt-i));
+
+ fseek(at->prop,0,SEEK_END);
+ at->proplen = ftell(at->prop);
+ if ( at->proplen&2 )
+ putshort(at->prop,0);
+ free(props);
+}
+
+/* ************************************************************************** */
+/* ************************* The 'bsln' table ************************* */
+/* ************************************************************************** */
+
+static int BslnFromTag(uint32 tag) {
+ switch ( tag ) {
+ case CHR('r','o','m','n'):
+return( 0 );
+ /* Apple has a centered ideographic baseline, while OT has a top ideo bsln*/
+ /* no way to get Apple's baseline #1 */
+ case CHR('i','d','e','o'):
+return( 2 );
+ case CHR('h','a','n','g'):
+return( 3 );
+ case CHR('m','a','t','h'):
+return( 4 );
+ default:
+return( 0xffff );
+ }
+}
+
+int16 *PerGlyphDefBaseline(SplineFont *sf,int *def_baseline) {
+ int16 *baselines = malloc(sf->glyphcnt*sizeof(int16));
+ int gid, bsln, i, any;
+ SplineChar *sc;
+ int counts[32]; /* Apple supports a max of 32 baselines, but only 5 are defined */
+ struct Base *base = sf->horiz_base;
+ struct basescript *bs;
+ int bestbsln, bestcnt;
+
+ memset(counts,0,sizeof(counts));
+
+ for ( gid = 0; gid<sf->glyphcnt; ++gid ) if ( (sc = sf->glyphs[gid])!=NULL ) {
+ uint32 script = SCScriptFromUnicode(sc);
+ for ( bs= base->scripts; bs!=NULL; bs=bs->next )
+ if ( bs->script==script )
+ break;
+ if ( bs==NULL )
+ bsln = 0xffff;
+ else
+ bsln = BslnFromTag( base->baseline_tags[bs->def_baseline] );
+/* This if is duplicated (almost) in basedlg.c:Base_FinishEdit */
+ if ( bsln==0xffff ) {
+ if ( script==CHR('k','a','n','a') || script==CHR('h','a','n','g') ||
+ script==CHR('h','a','n','i') || script==CHR('b','o','p','o') ||
+ script==CHR('j','a','m','o') || script==CHR('y','i',' ',' '))
+ bsln = 2;
+ else if ( script==CHR('t','i','b','t' ) ||
+ script == CHR('b','e','n','g' ) || script == CHR('b','n','g','2') ||
+ script == CHR('d','e','v','a' ) || script == CHR('d','e','v','2') ||
+ script == CHR('g','u','j','r' ) || script == CHR('g','j','r','2') ||
+ script == CHR('g','u','r','u' ) || script == CHR('g','u','r','2') ||
+ script == CHR('k','n','d','a' ) || script == CHR('k','n','d','2') ||
+ script == CHR('m','l','y','m' ) || script == CHR('m','l','m','2') ||
+ script == CHR('o','r','y','a' ) || script == CHR('o','r','y','2') ||
+ script == CHR('t','a','m','l' ) || script == CHR('t','m','l','2') ||
+ script == CHR('t','e','l','u' ) || script == CHR('t','e','l','2'))
+ bsln = 3;
+ else if ( script==CHR('m','a','t','h') )
+ bsln = 4;
+ else
+ bsln = 0;
+ }
+ baselines[gid] = bsln;
+ if ( bsln!=0xffff )
+ ++counts[bsln];
+ }
+
+ bestbsln = 0;
+ bestcnt = 0;
+ any = 0;
+ for ( i=0; i<32 ; ++i ) {
+ if ( counts[i]>bestcnt ) {
+ bestbsln = i;
+ bestcnt = counts[i];
+ ++any;
+ }
+ }
+ *def_baseline = bestbsln | (any<=1 ? 0x100 : 0 );
+return( baselines );
+}
+
+void FigureBaseOffsets(SplineFont *sf,int def_bsln,int offsets[32]) {
+ struct Base *base = sf->horiz_base;
+ struct basescript *bs = base->scripts;
+ int i;
+
+ memset( offsets,0xff,32*sizeof(int));
+ for ( i=0; i<base->baseline_cnt; ++i ) {
+ int bsln = BslnFromTag(base->baseline_tags[i]);
+ if ( bsln!=0xffff )
+ offsets[bsln] = bs->baseline_pos[i];
+ }
+ if ( offsets[def_bsln]!=-1 ) {
+ for ( i=0; i<32; ++i ) {
+ if ( offsets[i]!=-1 )
+ offsets[i] -= offsets[def_bsln];
+ }
+ }
+ /* I suspect baseline 1 is the standard baseline for CJK glyphs on the mac*/
+ /* (because baseline 2 is often the same as baseline 1, which is wrong for 2) */
+ /* OT doesn't have a centered ideographic baseline, so guestimate */
+ /* And I don't want to base it on the actual ideo baseline (go up half an em?) */
+ /* because in my small sample of 'bsln' tables baseline 2 has been wrong */
+ /* most of the time, and it is wrong in the example in the docs. */
+ /* (I know it is wrong because it has the same value as baseline 1, but */
+ /* is supposed to be below baseline 1 ) */
+ if ( offsets[1]==-1 ) {
+ if ( offsets[2]!=-1 )
+ offsets[1] = offsets[2]+(sf->ascent+sf->descent)/2;
+ else
+ offsets[1] = (sf->ascent+sf->descent)/2 - sf->descent;
+ }
+ for ( i=0; i<32; ++i )
+ if ( offsets[i]==-1 )
+ offsets[i] = 0;
+}
+
+void aat_dumpbsln(struct alltabs *at, SplineFont *sf) {
+ int def_baseline;
+ int offsets[32];
+ int16 *baselines;
+ int i, gid, j, bsln, cnt;
+
+ if ( sf->horiz_base==NULL || sf->horiz_base->baseline_cnt==0 ||
+ sf->horiz_base->scripts==NULL )
+return;
+
+ baselines = PerGlyphDefBaseline(sf,&def_baseline);
+
+ at->bsln = tmpfile2();
+ putlong(at->bsln,0x00010000); /* Version */
+ if ( def_baseline & 0x100 ) /* Only one baseline in the font */
+ putshort(at->bsln,0); /* distanced based (no control point), no per-glyph info */
+ else
+ putshort(at->bsln,1); /* distanced based (no cp info) with per-glyph info */
+ putshort(at->bsln,def_baseline&0x1f);/* Default baseline when no info specified for glyphs */
+
+ /* table of 32 int16 (the docs say uint16, but that must be wrong) giving */
+ /* the offset of the nth baseline from the default baseline. */
+ /* 0 => Roman, 1=> centered ideo, 2=>low ideo (same as OTF ideo) 3=>hang, 4=>Math */
+ /* values 5-31 undefined, set to 0 */
+ FigureBaseOffsets(sf,def_baseline&0x1f,offsets);
+
+ for ( i=0; i<32; ++i )
+ putshort(at->bsln,offsets[i]);
+
+ if ( !(def_baseline&0x100) ) {
+ def_baseline &= 0x1f;
+
+ putshort(at->bsln,2); /* Lookup format 2, segmented array w/ single value */
+
+ cnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( (gid=at->gi.bygid[i])!=-1 ) {
+ if ( baselines[gid]!=-1 && baselines[gid]!=def_baseline ) {
+ bsln = baselines[gid];
+ for ( j=i; j<at->gi.gcnt && baselines[at->gi.bygid[i]]==bsln; ++j );
+ i = j-1;
+ ++cnt;
+ }
+ }
+
+ /* Dump out a binary search header */
+ putshort(at->bsln,6); /* size of each item */
+ putshort(at->bsln,cnt); /* number of items */
+ for ( j=1, i=0; cnt<=j; j<<=1, ++i );
+ putshort(at->bsln,6*j/2); /* j is a power of 2 too big */
+ putshort(at->bsln,i-1);
+ putshort(at->bsln,6*(cnt-(j>>1)) );
+
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( (gid=at->gi.bygid[i])!=-1 ) {
+ if ( baselines[gid]!=-1 && baselines[gid]!=def_baseline ) {
+ bsln = baselines[gid];
+ for ( j=i; j<at->gi.gcnt && baselines[at->gi.bygid[i]]==bsln; ++j );
+ putshort(at->bsln,j-1);
+ putshort(at->bsln,i);
+ putshort(at->bsln,bsln);
+ i = j-1;
+ }
+ }
+
+ putshort(at->bsln,0xffff); /* Final eof marker */
+ putshort(at->bsln,0xffff);
+ putshort(at->bsln,0x0000);
+ }
+
+ at->bslnlen = ftell(at->bsln);
+ /* Only contains 2 & 4 byte quantities, can't have an odd number of bytes */
+ if ( at->bslnlen&2 )
+ putshort(at->bsln,0);
+ free(baselines);
+}
+
+/* ************************************************************************** */
+/* ************************* utility routines ************************* */
+/* ************************************************************************** */
+
+int OTTagToMacFeature(uint32 tag, int *featureType,int *featureSetting) {
+ int i;
+ struct macsettingname *msn = user_macfeat_otftag ? user_macfeat_otftag : macfeat_otftag;
+
+ for ( i=0; msn[i].otf_tag!=0; ++i )
+ if ( msn[i].otf_tag == tag ) {
+ *featureType = msn[i].mac_feature_type;
+ *featureSetting = msn[i].mac_feature_setting;
+return( true );
+ }
+ *featureType = (tag >> 16);
+ *featureSetting = (tag & 0xFFFF);
+ /* Ranges taken from Apple Font Registry. An OT tag without a
+ corresponding mac feature should fail this test.*/
+ if (*featureType >= 0 && *featureType < 105 && *featureSetting < 16)
+ return ( true );
+
+ *featureType = 0;
+ *featureSetting = 0;
+return( false );
+}
+
+static struct feature *featureFromTag(SplineFont *sf, uint32 tag ) {
+ int ft, fs;
+ struct feature *feat;
+
+ feat = chunkalloc(sizeof(struct feature));
+ if (OTTagToMacFeature(tag, &ft, &fs)) {
+ feat->featureType = ft;
+ feat->featureSetting = fs;
+ feat->mf = FindMacFeature(sf,feat->featureType,&feat->smf);
+ feat->ms = FindMacSetting(sf,feat->featureType,feat->featureSetting,&feat->sms);
+ feat->needsOff = feat->mf!=NULL && !feat->mf->ismutex;
+ feat->vertOnly = tag==CHR('v','r','t','2') || tag==CHR('v','k','n','a');
+ }
+
+ return( feat );
+}
+
+static struct feature *featureFromSubtable(SplineFont *sf, struct lookup_subtable *sub ) {
+ FeatureScriptLangList *fl;
+ int ft, fs;
+
+ for ( fl=sub->lookup->features; fl!=NULL; fl=fl->next ) {
+ if ( fl->ismac )
+ break;
+ }
+ if ( fl==NULL ) {
+ for ( fl=sub->lookup->features; fl!=NULL; fl=fl->next ) {
+ if ( OTTagToMacFeature(fl->featuretag,&ft,&fs) )
+ break;
+ }
+ if ( fl==NULL ) {
+ IError("Could not find a mac feature");
+ return NULL;
+ }
+ }
+ return( featureFromTag(sf,fl->featuretag));
+}
+
+static int PSTHasTag(PST *pst, uint32 tag) {
+ FeatureScriptLangList *fl;
+
+ if ( pst->subtable==NULL )
+return( false );
+ for ( fl=pst->subtable->lookup->features; fl!=NULL; fl=fl->next )
+ if ( fl->featuretag == tag )
+return( true );
+
+return( false );
+}
+
+int scriptsHaveDefault(struct scriptlanglist *sl) {
+ int i;
+
+ for ( ; sl!=NULL; sl=sl->next ) {
+ for ( i=0; i<sl->lang_cnt; ++i ) {
+ if ( (i<MAX_LANG && sl->langs[i]==DEFAULT_LANG) ||
+ (i>=MAX_LANG && sl->morelangs[i-MAX_LANG]==DEFAULT_LANG)) {
+return( true );
+ }
+ }
+ }
+return( false );
+}
+
+int LookupHasDefault(OTLookup *otl) {
+ FeatureScriptLangList *feats;
+
+ if ( otl->def_lang_checked )
+return( otl->def_lang_found );
+
+ otl->def_lang_checked = true;
+ for ( feats=otl->features; feats!=NULL; feats = feats->next ) {
+ if ( scriptsHaveDefault(feats->scripts) ) {
+ otl->def_lang_found = true;
+return( true );
+ }
+ }
+ otl->def_lang_found = false;
+return( false );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tottfgpos.c b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfgpos.c
new file mode 100644
index 0000000000..607214a7ef
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfgpos.c
@@ -0,0 +1,4613 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include <utype.h>
+
+int coverageformatsallowed=3;
+int use_second_indic_scripts = false;
+
+#include "ttf.h"
+
+/* This file contains routines to create the otf gpos and gsub tables and their */
+/* attendant subtables */
+
+/* Undocumented fact: ATM (which does kerning for otf fonts in Word) can't handle features with multiple lookups */
+
+/* Undocumented fact: Only one feature with a given tag allowed per script/lang */
+/* So if we have multiple lookups with the same tag they must be merged into */
+/* one feature with many lookups */
+
+/* scripts (for opentype) that I understand */
+ /* see also list in lookups.c mapping script tags to friendly names */
+
+static uint32 scripts[][15] = {
+/* Arabic */ { CHR('a','r','a','b'), 0x0600, 0x06ff, 0xfb50, 0xfdff, 0xfe70, 0xfefe },
+/* Aramaic */ { CHR('a','r','a','m'), 0x820, 0x83f },
+/* Armenian */ { CHR('a','r','m','n'), 0x0530, 0x058f, 0xfb13, 0xfb17 },
+/* Balinese */ { CHR('b','a','l','i'), 0x1b00, 0x1b7f },
+/* Bengali */ { CHR('b','e','n','g'), 0x0980, 0x09ff },
+/* Bliss symb */{ CHR('b','l','i','s'), 0x12200, 0x124ff },
+/* Bopomofo */ { CHR('b','o','p','o'), 0x3100, 0x312f, 0x31a0, 0x31bf },
+/* Braille */ { CHR('b','r','a','i'), 0x2800, 0x28ff },
+/* Buginese */ { CHR('b','u','g','i'), 0x1a00, 0x1a1f },
+/* Buhid */ { CHR('b','u','h','d'), 0x1740, 0x1753 },
+/* Byzantine M*/{ CHR('b','y','z','m'), 0x1d000, 0x1d0ff },
+/* Canadian Syl*/{CHR('c','a','n','s'), 0x1400, 0x167f },
+/* Carian */ {CHR('c','a','r','i'), 0x0, 0x0 },
+/* Cham */ {CHR('c','h','a','m'), 0x0, 0x0 },
+/* Cherokee */ { CHR('c','h','e','r'), 0x13a0, 0x13ff },
+/* Cirth */ { CHR('c','i','r','t'), 0x12080, 0x120ff },
+/* CJKIdeogra */{ CHR('h','a','n','i'), 0x3300, 0x9fff, 0xf900, 0xfaff, 0x020000, 0x02ffff },
+/* Coptic */ { CHR('c','o','p','t'), 0x2c80, 0x2cff },
+/* Cypriot */ { CHR('c','p','m','n'), 0x10800, 0x1083f },
+/* Cyrillic */ { CHR('c','y','r','l'), 0x0400, 0x052f, 0x1d2b, 0x1d2b, 0x1d78, 0x1d78,
+ 0x2de0, 0x2dff, 0xa640, 0xa6ff },
+/* Deseret */ { CHR('d','s','r','t'), 0x10400, 0x1044f },
+/* Devanagari */{ CHR('d','e','v','a'), 0x0900, 0x097f },
+/* Ethiopic */ { CHR('e','t','h','i'), 0x1200, 0x139f },
+/* Georgian */ { CHR('g','e','o','r'), 0x1080, 0x10ff },
+/* Glagolitic */{ CHR('g','l','a','g'), 0x1080, 0x10ff },
+/* Gothic */ { CHR('g','o','t','h'), 0x10330, 0x1034a },
+/* Greek */ { CHR('g','r','e','k'), 0x0370, 0x03ff, 0x1f00, 0x1fff },
+/* Gujarati */ { CHR('g','u','j','r'), 0x0a80, 0x0aff },
+/* Gurmukhi */ { CHR('g','u','r','u'), 0x0a00, 0x0a7f },
+/* Hangul */ { CHR('h','a','n','g'), 0xac00, 0xd7af, 0x3130, 0x319f, 0xffa0, 0xff9f },
+/* Hanunoo */ { CHR('h','a','n','o'), 0x1720, 0x1734 },
+ /* I'm not sure what the difference is between the 'hang' tag and the 'jamo' */
+ /* tag. 'Jamo' is said to be the precomposed forms, but what's 'hang'? */
+/* Hebrew */ { CHR('h','e','b','r'), 0x0590, 0x05ff, 0xfb1e, 0xfb4f },
+/* Hiragana used to have its own tag 'hira', but has since been merged with katakana */
+/* Hangul Jamo*/{ CHR('j','a','m','o'), 0x1100, 0x11ff, 0x3130, 0x319f, 0xffa0, 0xffdf },
+/* Javanese */ { CHR('j','a','v','a'), 0 }, /* MS has a tag, but there is no unicode range */
+/* Katakana */ { CHR('k','a','n','a'), 0x3040, 0x30ff, 0xff60, 0xff9f },
+/* Kayah Li */ { CHR('k','a','l','i'), 0 },
+/* Kannada */ { CHR('k','n','d','a'), 0x0c80, 0x0cff },
+/* Kharosthi */ { CHR('k','h','a','r'), 0x10a00, 0x10a5f },
+/* Khmer */ { CHR('k','h','m','r'), 0x1780, 0x17ff },
+/* Latin */ { CHR('l','a','t','n'), 0x0041, 0x005a, 0x0061, 0x007a,
+ 0x00c0, 0x02af, 0x1d00, 0x1eff, 0xfb00, 0xfb0f, 0xff00, 0xff5f, 0xa770, 0xa7ff },
+/* Lao */ { CHR('l','a','o',' '), 0x0e80, 0x0eff },
+/* Lepcha */ { CHR('l','e','p','c'), 0 },
+/* Limbu */ { CHR('l','i','m','b'), 0x1900, 0x194f },
+/* Linear A */ /*{ CHR('l','i','n','a'), 0x10180, 0x102cf },*/ /* What happened to linear A? */
+/* Linear B */ { CHR('l','i','n','b'), 0x10000, 0x100fa },
+/* Lycian */ { CHR('l','y','c','i'), 0 },
+/* Lydian */ { CHR('l','y','d','i'), 0 },
+/* Malayalam */ { CHR('m','l','y','m'), 0x0d00, 0x0d7f },
+/* Mathematical Alphanumeric Symbols */
+ { CHR('m','a','t','h'), 0x1d400, 0x1d7ff },
+/* Mongolian */ { CHR('m','o','n','g'), 0x1800, 0x18af },
+/* Musical */ { CHR('m','u','s','c'), 0x1d100, 0x1d1ff },
+/* Myanmar */ { CHR('m','y','m','r'), 0x1000, 0x107f },
+/* New Tai Lue*/{ CHR('t','a','l','u'), 0 },
+/* N'Ko */ { CHR('n','k','o',' '), 0x07c0, 0x07fa },
+/* Ogham */ { CHR('o','g','a','m'), 0x1680, 0x169f },
+/* Ol Chiki */ { CHR('o','l','c','k'), 0 },
+/* Old Italic */{ CHR('i','t','a','l'), 0x10300, 0x1031e },
+/* Old Permic */{ CHR('p','e','r','m'), 0x10350, 0x1037f },
+/* Old Persian cuneiform */
+ { CHR('x','p','e','o'), 0x103a0, 0x103df },
+/* Oriya */ { CHR('o','r','y','a'), 0x0b00, 0x0b7f },
+/* Osmanya */ { CHR('o','s','m','a'), 0x10480, 0x104a9 },
+/* Phags-pa */ { CHR('p','h','a','g'), 0xa840, 0xa87f },
+/* Phoenician */{ CHR('p','h','n','x'), 0x10900, 0x1091f },
+/* Pollard */ { CHR('p','l','r','d'), 0x104b0, 0x104d9 },
+/* Rejang */ { CHR('r','j','n','g'), 0 },
+/* Rongorongo */{ CHR('r','o','r','o'), 0 },
+/* Runic */ { CHR('r','u','n','r'), 0x16a0, 0x16ff },
+/* Saurashtra*/ { CHR('s','a','u','r'), 0 },
+/* Shavian */ { CHR('s','h','a','w'), 0x10450, 0x1047f },
+/* Sinhala */ { CHR('s','i','n','h'), 0x0d80, 0x0dff },
+/* Sumero-Akkadian Cuneiform */
+ { CHR('x','s','u','x'), 0x12000, 0x1236e },
+/* Sundanese */ { CHR('s','u','n','d'), 0 },
+/* Syloti Nagri */
+ { CHR('s','y','l','o'), 0xa800, 0xa82f },
+/* Syriac */ { CHR('s','y','r','c'), 0x0700, 0x074f },
+/* Tagalog */ { CHR('t','a','g','l'), 0x1700, 0x1714 },
+/* Tagbanwa */ { CHR('t','a','g','b'), 0x1760, 0x1773 },
+/* Tai Le */ { CHR('t','a','l','e'), 0x1950, 0x1974 },
+/* Tai Lu */ { CHR('t','a','l','u'), 0x1980, 0x19df },
+/* Tamil */ { CHR('t','a','m','l'), 0x0b80, 0x0bff },
+/* Telugu */ { CHR('t','e','l','u'), 0x0c00, 0x0c7f },
+/* Tengwar */ { CHR('t','e','n','g'), 0x12000, 0x1207f },
+/* Thaana */ { CHR('t','h','a','a'), 0x0780, 0x07bf },
+/* Thai */ { CHR('t','h','a','i'), 0x0e00, 0x0e7f },
+/* Tibetan */ { CHR('t','i','b','t'), 0x0f00, 0x0fff },
+/* Tifinagh */ { CHR('t','f','n','g'), 0x2d30, 0x2d7f },
+/* Ugaritic */ { CHR('u','g','a','r'), 0x10380, 0x1039d },
+/* Yi */ { CHR('y','i',' ',' '), 0xa000, 0xa4c6 },
+ { 0 }
+};
+
+static SplineChar **SFOrderedGlyphs(SplineChar **glyphs);
+
+int ScriptIsRightToLeft(uint32 script) {
+ if ( script==CHR('a','r','a','b') || script==CHR('h','e','b','r') ||
+ script==CHR('c','p','m','n') || script==CHR('k','h','a','r') ||
+ script==CHR('s','y','r','c') || script==CHR('t','h','a','a') ||
+ script==CHR('n','k','o',' '))
+return( true );
+
+return( false );
+}
+
+uint32 ScriptFromUnicode(uint32 u,SplineFont *sf) {
+ int s, k;
+
+ if ( (int32)u!=-1 ) {
+ for ( s=0; scripts[s][0]!=0; ++s ) {
+ for ( k=1; scripts[s][k+1]!=0; k += 2 )
+ if ( u>=scripts[s][k] && u<=scripts[s][k+1] )
+ break;
+ if ( scripts[s][k+1]!=0 )
+ break;
+ }
+ if ( scripts[s][0]!=0 ) {
+ uint32 script = scripts[s][0];
+ if ( use_second_indic_scripts ) {
+ /* MS has a parallel set of script tags for their new */
+ /* Indic font shaper */
+ if ( script == CHR('b','e','n','g' )) script = CHR('b','n','g','2');
+ else if ( script == CHR('d','e','v','a' )) script = CHR('d','e','v','2');
+ else if ( script == CHR('g','u','j','r' )) script = CHR('g','j','r','2');
+ else if ( script == CHR('g','u','r','u' )) script = CHR('g','u','r','2');
+ else if ( script == CHR('k','n','d','a' )) script = CHR('k','n','d','2');
+ else if ( script == CHR('m','l','y','m' )) script = CHR('m','l','m','2');
+ else if ( script == CHR('o','r','y','a' )) script = CHR('o','r','y','2');
+ else if ( script == CHR('t','a','m','l' )) script = CHR('t','m','l','2');
+ else if ( script == CHR('t','e','l','u' )) script = CHR('t','e','l','2');
+ }
+return( script );
+ }
+ } else if ( sf!=NULL ) {
+ if ( sf->cidmaster!=NULL || sf->subfontcnt!=0 ) {
+ if ( sf->cidmaster!=NULL ) sf = sf->cidmaster;
+ if ( strmatch(sf->ordering,"Identity")==0 )
+return( DEFAULT_SCRIPT );
+ else if ( strmatch(sf->ordering,"Korean")==0 )
+return( CHR('h','a','n','g'));
+ else
+return( CHR('h','a','n','i') );
+ }
+ }
+
+return( DEFAULT_SCRIPT );
+}
+
+uint32 SCScriptFromUnicode(SplineChar *sc) {
+ const char *pt;
+ PST *pst;
+ SplineFont *sf;
+ int i; unsigned uni;
+ FeatureScriptLangList *features;
+
+ if ( sc==NULL )
+return( DEFAULT_SCRIPT );
+
+ sf = sc->parent;
+ if ( sc->unicodeenc!=-1 &&
+ !(sc->unicodeenc>=0xe000 && sc->unicodeenc<0xf8ff) &&
+ !(sc->unicodeenc>=0xf0000 && sc->unicodeenc<0x10ffff))
+return( ScriptFromUnicode( sc->unicodeenc,sf ));
+
+ pt = sc->name;
+ if ( *pt ) for ( ++pt; *pt!='\0' && *pt!='_' && *pt!='.'; ++pt );
+ if ( *pt!='\0' ) {
+ char *str = copyn(sc->name,pt-sc->name);
+ int uni = UniFromName(str,ui_none,&custom);
+ free(str);
+ if ( uni!=-1 )
+return( ScriptFromUnicode( uni,sf ));
+ }
+ /* Adobe ligature uniXXXXXXXX */
+ if ( strncmp(sc->name,"uni",3)==0 && sscanf(sc->name+3,"%4x", &uni)==1 )
+return( ScriptFromUnicode( uni,sf ));
+
+ if ( sf==NULL )
+return( DEFAULT_SCRIPT );
+
+ if ( sf->cidmaster ) sf=sf->cidmaster;
+ else if ( sf->mm!=NULL ) sf=sf->mm->normal;
+ for ( i=0; i<2; ++i ) {
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->type == pst_lcaret )
+ continue;
+ for ( features = pst->subtable->lookup->features; features!=NULL; features=features->next ) {
+ if ( features->scripts!=NULL )
+return( features->scripts->script );
+ }
+ }
+ }
+return( ScriptFromUnicode( sc->unicodeenc,sf ));
+}
+
+int SCRightToLeft(SplineChar *sc) {
+
+ if ( sc->unicodeenc>=0x10800 && sc->unicodeenc<=0x10fff )
+return( true ); /* Supplemental Multilingual Plane, RTL scripts */
+ if ( sc->unicodeenc!=-1 && sc->unicodeenc<0x10000 )
+return( isrighttoleft(sc->unicodeenc ));
+
+return( ScriptIsRightToLeft(SCScriptFromUnicode(sc)));
+}
+
+static void GlyphMapFree(SplineChar ***map) {
+ int i;
+
+ if ( map==NULL )
+ return;
+ for ( i=0; map[i]!=NULL; ++i )
+ free(map[i]);
+ free(map);
+}
+
+static SplineChar **FindSubs(SplineChar *sc,struct lookup_subtable *sub) {
+ SplineChar *spc[30], **space = spc;
+ int max = sizeof(spc)/sizeof(spc[0]);
+ int cnt=0;
+ char *pt, *start;
+ SplineChar *subssc, **ret;
+ PST *pst;
+
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==sub ) {
+ pt = pst->u.subs.variant;
+ while ( 1 ) {
+ while ( *pt==' ' ) ++pt; // Burn leading spaces.
+ // Start tokenizing the space-delimited list of references.
+ start = pt; // Note the beginning of the current item.
+ pt = strchr(start,' '); // Find the end of the current item.
+ if ( pt!=NULL )
+ *pt = '\0'; // Temporarily terminate the item.
+ subssc = SFGetChar(sc->parent,-1,start); // Find the corresponding SplineChar.
+ if ( subssc!=NULL && subssc->ttf_glyph!=-1 ) {
+ // Extend the list if necessary.
+ if ( cnt>=max ) {
+ if ( spc==space ) {
+ space = malloc((max+=30)*sizeof(SplineChar *));
+ memcpy(space,spc,(max-30)*sizeof(SplineChar *));
+ } else
+ space = realloc(space,(max+=30)*sizeof(SplineChar *));
+ }
+ // Write the SplineChar to the list.
+ space[cnt++] = subssc;
+ }
+ if ( pt==NULL )
+ break; // No more items.
+ *pt=' '; // Repair the string from the tokenization process.
+ }
+ }
+ }
+ // Returning NULL causes problems and seems to be unnecessary for now.
+ ret = malloc((cnt+1)*sizeof(SplineChar *));
+ memcpy(ret,space,cnt*sizeof(SplineChar *));
+ ret[cnt] = NULL;
+ if ( space!=spc )
+ free(space); // Free the temp space only if it is dynamically allocated.
+ return( ret );
+}
+
+static SplineChar ***generateMapList(SplineChar **glyphs, struct lookup_subtable *sub) {
+ int cnt;
+ SplineChar *sc;
+ int i;
+ SplineChar ***maps=NULL;
+
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt );
+ maps = malloc((cnt+1)*sizeof(SplineChar **));
+ for ( i=0; i<cnt; ++i ) {
+ sc = glyphs[i];
+ maps[i] = FindSubs(sc,sub);
+ if (maps[i] == NULL) {
+ fprintf( stderr, "maps[%d] is null; glyphs[%d] is \"%s\"; lookup name is \"%s\".\n" , i , i , (glyphs[i]->name ? glyphs[i]->name : ""), sub->subtable_name) ;
+ }
+ }
+ maps[cnt] = NULL;
+return( maps );
+}
+
+void AnchorClassDecompose(SplineFont *sf,AnchorClass *_ac, int classcnt, int *subcnts,
+ SplineChar ***marks,SplineChar ***base,
+ SplineChar ***lig,SplineChar ***mkmk,
+ struct glyphinfo *gi) {
+ /* Run through the font finding all characters with this anchor class */
+ /* (and the cnt-1 classes after it) */
+ /* and distributing in the four possible anchor types */
+ int i,j,k,gid, gmax;
+ struct sclist { int cnt; SplineChar **glyphs; } heads[at_max];
+ AnchorPoint *test;
+ AnchorClass *ac;
+
+ memset(heads,0,sizeof(heads));
+ memset(subcnts,0,classcnt*sizeof(int));
+ memset(marks,0,classcnt*sizeof(SplineChar **));
+ gmax = gi==NULL ? sf->glyphcnt : gi->gcnt;
+ for ( j=0; j<2; ++j ) {
+ for ( i=0; i<gmax; ++i ) if ( (gid = gi==NULL ? i : gi->bygid[i])!=-1 && gid < sf->glyphcnt && sf->glyphs[gid]!=NULL ) {
+ for ( ac = _ac, k=0; k<classcnt; ac=ac->next ) if ( ac->matches ) {
+ for ( test=sf->glyphs[gid]->anchor; test!=NULL ; test=test->next ) {
+ if ( test->anchor==ac ) {
+ if ( test->type==at_mark ) {
+ if ( j )
+ marks[k][subcnts[k]] = sf->glyphs[gid];
+ ++subcnts[k];
+ if ( ac->type!=act_mkmk )
+ break;
+ } else if ( test->type!=at_centry && test->type!=at_cexit ) {
+ if ( heads[test->type].glyphs!=NULL ) {
+ /* If we have multiple mark classes, we may use the same base glyph */
+ /* with more than one mark class. But it should only appear once in */
+ /* the output */
+ if ( heads[test->type].cnt==0 ||
+ heads[test->type].glyphs[heads[test->type].cnt-1]!=sf->glyphs[gid] ) {
+ heads[test->type].glyphs[heads[test->type].cnt] = sf->glyphs[gid];
+ ++heads[test->type].cnt;
+ }
+ } else
+ ++heads[test->type].cnt;
+ if ( ac->type!=act_mkmk )
+ break;
+ }
+ }
+ }
+ ++k;
+ }
+ }
+ if ( j==1 )
+ break;
+ for ( i=0; i<4; ++i )
+ if ( heads[i].cnt!=0 ) {
+ heads[i].glyphs = malloc((heads[i].cnt+1)*sizeof(SplineChar *));
+ /* I used to set glyphs[cnt] to NULL here. But it turns out */
+ /* cnt may be an overestimate on the first pass. So we can */
+ /* only set it at the end of the second pass */
+ heads[i].cnt = 0;
+ }
+ for ( k=0; k<classcnt; ++k ) if ( subcnts[k]!=0 ) {
+ marks[k] = malloc((subcnts[k]+1)*sizeof(SplineChar *));
+ marks[k][subcnts[k]] = NULL;
+ subcnts[k] = 0;
+ }
+ }
+ for ( i=0; i<4; ++i ) {
+ if ( heads[i].glyphs!=NULL )
+ heads[i].glyphs[heads[i].cnt] = NULL;
+ }
+ for ( i=0; i<classcnt; ++i ) {
+ if ( subcnts[k]!=0 )
+ SFOrderedGlyphs(marks[i]);
+ }
+
+ *base = SFOrderedGlyphs(heads[at_basechar].glyphs);
+ *lig = SFOrderedGlyphs(heads[at_baselig].glyphs);
+ *mkmk = SFOrderedGlyphs(heads[at_basemark].glyphs);
+}
+
+SplineChar **EntryExitDecompose(SplineFont *sf,AnchorClass *ac,struct glyphinfo *gi) {
+ /* Run through the font finding all characters with this anchor class */
+ int i,j, cnt, gmax, gid;
+ SplineChar **array;
+ AnchorPoint *test;
+
+ array=NULL;
+ gmax = gi==NULL ? sf->glyphcnt : gi->gcnt;
+ for ( j=0; j<2; ++j ) {
+ cnt = 0;
+ for ( i=0; i<gmax; ++i ) if ( (gid = gi==NULL ? i : gi->bygid[i])!=-1 && sf->glyphs[gid]!=NULL ) {
+ for ( test=sf->glyphs[gid]->anchor; test!=NULL && test->anchor!=ac; test=test->next );
+ if ( test!=NULL && (test->type==at_centry || test->type==at_cexit )) {
+ if ( array!=NULL )
+ array[cnt] = sf->glyphs[gid];
+ ++cnt;
+ }
+ }
+ if ( cnt==0 )
+return( NULL );
+ if ( j==1 )
+ break;
+ array = malloc((cnt+1)*sizeof(SplineChar *));
+ array[cnt] = NULL;
+ }
+return( array );
+}
+
+static void AnchorGuessContext(SplineFont *sf,struct alltabs *at) {
+ int i;
+ int maxbase=0, maxmark=0, basec, markc;
+ AnchorPoint *ap;
+ int hascursive = 0;
+
+ /* the order in which we examine the glyphs does not matter here, so */
+ /* we needn't add the complexity running though in gid order */
+ for ( i=0; i<sf->glyphcnt; ++i ) if ( sf->glyphs[i] ) {
+ basec = markc = 0;
+ for ( ap = sf->glyphs[i]->anchor; ap!=NULL; ap=ap->next )
+ if ( ap->type==at_basemark )
+ ++markc;
+ else if ( ap->type==at_basechar || ap->type==at_baselig )
+ ++basec;
+ else if ( ap->type==at_centry )
+ hascursive = true;
+ if ( basec>maxbase ) maxbase = basec;
+ if ( markc>maxmark ) maxmark = markc;
+ }
+
+ if ( maxbase*(maxmark+1)>at->os2.maxContext )
+ at->os2.maxContext = maxbase*(maxmark+1);
+ if ( hascursive && at->os2.maxContext<2 )
+ at->os2.maxContext=2;
+}
+
+static void dumpcoveragetable(FILE *gpos,SplineChar **glyphs) {
+ int i, last = -2, range_cnt=0, start, r;
+ /* the glyph list should already be sorted */
+ /* figure out whether it is better (smaller) to use an array of glyph ids */
+ /* or a set of glyph id ranges */
+
+ for ( i=0; glyphs[i]!=NULL; ++i ) {
+ if ( glyphs[i]->ttf_glyph<=last )
+ IError("Glyphs must be ordered when creating coverage table");
+ if ( glyphs[i]->ttf_glyph!=last+1 )
+ ++range_cnt;
+ last = glyphs[i]->ttf_glyph;
+ }
+ /* I think Windows will only accept format 2 coverage tables? */
+ if ( !(coverageformatsallowed&2) || ((coverageformatsallowed&1) && i<=3*range_cnt )) {
+ /* We use less space with a list of glyphs than with a set of ranges */
+ putshort(gpos,1); /* Coverage format=1 => glyph list */
+ putshort(gpos,i); /* count of glyphs */
+ for ( i=0; glyphs[i]!=NULL; ++i )
+ putshort(gpos,glyphs[i]->ttf_glyph); /* array of glyph IDs */
+ } else {
+ putshort(gpos,2); /* Coverage format=2 => range list */
+ putshort(gpos,range_cnt); /* count of ranges */
+ last = -2; start = -2; /* start is a index in our glyph array, last is ttf_glyph */
+ r = 0;
+ for ( i=0; glyphs[i]!=NULL; ++i ) {
+ if ( glyphs[i]->ttf_glyph!=last+1 ) {
+ if ( last!=-2 ) {
+ putshort(gpos,glyphs[start]->ttf_glyph); /* start glyph ID */
+ putshort(gpos,last); /* end glyph ID */
+ putshort(gpos,start); /* coverage index of start glyph */
+ ++r;
+ }
+ start = i;
+ }
+ last = glyphs[i]->ttf_glyph;
+ }
+ if ( last!=-2 ) {
+ putshort(gpos,glyphs[start]->ttf_glyph); /* start glyph ID */
+ putshort(gpos,last); /* end glyph ID */
+ putshort(gpos,start); /* coverage index of start glyph */
+ ++r;
+ }
+ if ( r!=range_cnt )
+ IError("Miscounted ranges in format 2 coverage table output");
+ }
+}
+
+static int sc_ttf_order( const void *_sc1, const void *_sc2) {
+ const SplineChar *sc1 = *(const SplineChar **) _sc1, *sc2 = *(const SplineChar **) _sc2;
+return( sc1->ttf_glyph - sc2->ttf_glyph );
+}
+
+static SplineChar **SFOrderedGlyphs(SplineChar **glyphs) {
+ int cnt, i, k;
+ if ( glyphs==NULL )
+return( NULL );
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt);
+ qsort(glyphs,cnt,sizeof(SplineChar *),sc_ttf_order);
+ if ( glyphs[0]->ttf_glyph==-1 ) {
+ /* Not sure if this can happen, but it's easy to fix */
+ for ( k=0; k<cnt && glyphs[k]->ttf_glyph==-1; ++k);
+ for ( i=0; i<=cnt-k; ++i )
+ glyphs[i] = glyphs[i+k];
+ }
+ for ( i=0; i<cnt-1; ++i )
+ if (glyphs[i]->ttf_glyph==glyphs[i+1]->ttf_glyph) {
+ memmove(glyphs+i, glyphs+i+1, (cnt-i)*sizeof(SplineChar *));
+ --cnt;
+ }
+return( glyphs );
+}
+
+static SplineChar **SFOrderedGlyphsWithPSTinSubtable(SplineFont *sf,struct lookup_subtable *sub) {
+ SplineChar **glyphs = SFGlyphsWithPSTinSubtable(sf,sub);
+ return SFOrderedGlyphs(glyphs);
+}
+
+SplineChar **SFGlyphsFromNames(SplineFont *sf,char *names) {
+ int cnt, ch;
+ char *pt, *end;
+ SplineChar *sc, **glyphs;
+
+ if ( names==NULL )
+return( calloc(1,sizeof(SplineChar *)) );
+
+ cnt = 0;
+ for ( pt = names; *pt; pt = end+1 ) {
+ ++cnt;
+ end = strchr(pt,' ');
+ if ( end==NULL )
+ break;
+ }
+
+ glyphs = malloc((cnt+1)*sizeof(SplineChar *));
+ cnt = 0;
+ for ( pt = names; *pt; pt = end+1 ) {
+ end = strchr(pt,' ');
+ if ( end==NULL )
+ end = pt+strlen(pt);
+ ch = *end;
+ *end = '\0';
+ sc = SFGetChar(sf,-1,pt);
+ if ( sc!=NULL && sc->ttf_glyph!=-1 )
+ glyphs[cnt++] = sc;
+ *end = ch;
+ if ( ch=='\0' )
+ break;
+ }
+ glyphs[cnt] = NULL;
+return( glyphs );
+}
+
+static SplineChar **OrderedGlyphsFromNames(SplineFont *sf,char *names) {
+ SplineChar **glyphs = SFGlyphsFromNames(sf,names);
+ int i,j;
+
+ if ( glyphs==NULL || glyphs[0]==NULL )
+return( glyphs );
+
+ for ( i=0; glyphs[i+1]!=NULL; ++i ) for ( j=i+1; glyphs[j]!=NULL; ++j ) {
+ if ( glyphs[i]->ttf_glyph > glyphs[j]->ttf_glyph ) {
+ SplineChar *sc = glyphs[i];
+ glyphs[i] = glyphs[j];
+ glyphs[j] = sc;
+ }
+ }
+ if ( glyphs[0]!=NULL ) { /* Glyphs should not appear twice in the name list, just just in case they do... */
+ for ( i=0; glyphs[i+1]!=NULL; ++i ) {
+ if ( glyphs[i]==glyphs[i+1] ) {
+ for ( j=i+1; glyphs[j]!=NULL; ++j )
+ glyphs[j] = glyphs[j+1];
+ }
+ }
+ }
+return( glyphs );
+}
+
+static void gposvrmaskeddump(FILE *gpos,int vf1,int mask,int offset) {
+ if ( vf1&1 ) putshort(gpos,mask&1 ? offset : 0 );
+ if ( vf1&2 ) putshort(gpos,mask&2 ? offset : 0 );
+ if ( vf1&4 ) putshort(gpos,mask&4 ? offset : 0 );
+ if ( vf1&8 ) putshort(gpos,mask&8 ? offset : 0 );
+}
+
+static int devtaboffsetsize(DeviceTable *dt) {
+ int type = 1, i;
+
+ for ( i=dt->last_pixel_size-dt->first_pixel_size; i>=0; --i ) {
+ if ( dt->corrections[i]>=8 || dt->corrections[i]<-8 )
+return( 3 );
+ else if ( dt->corrections[i]>=2 || dt->corrections[i]<-2 )
+ type = 2;
+ }
+return( type );
+}
+
+static void dumpgposdevicetable(FILE *gpos,DeviceTable *dt) {
+ int type;
+ int i,cnt,b;
+
+ if ( dt==NULL || dt->corrections==NULL )
+return;
+ type = devtaboffsetsize(dt);
+ putshort(gpos,dt->first_pixel_size);
+ putshort(gpos,dt->last_pixel_size );
+ putshort(gpos,type);
+ cnt = dt->last_pixel_size - dt->first_pixel_size + 1;
+ if ( type==3 ) {
+ for ( i=0; i<cnt; ++i )
+ putc(dt->corrections[i],gpos);
+ if ( cnt&1 )
+ putc(0,gpos);
+ } else if ( type==2 ) {
+ for ( i=0; i<cnt; i+=4 ) {
+ int val = 0;
+ for ( b=0; b<4 && i+b<cnt; ++b )
+ val |= (dt->corrections[i+b]&0x000f)<<(12-b*4);
+ putshort(gpos,val);
+ }
+ } else {
+ for ( i=0; i<cnt; i+=8 ) {
+ int val = 0;
+ for ( b=0; b<8 && i+b<cnt; ++b )
+ val |= (dt->corrections[i+b]&0x0003)<<(14-b*2);
+ putshort(gpos,val);
+ }
+ }
+}
+
+static int DevTabLen(DeviceTable *dt) {
+ int type;
+ int cnt;
+
+ if ( dt==NULL || dt->corrections==NULL )
+return( 0 );
+ cnt = dt->last_pixel_size - dt->first_pixel_size + 1;
+ type = devtaboffsetsize(dt);
+ if ( type==3 )
+ cnt = (cnt+1)/2;
+ else if ( type==2 )
+ cnt = (cnt+3)/4;
+ else
+ cnt = (cnt+7)/8;
+ cnt += 3; /* first, last, type */
+return( sizeof(uint16)*cnt );
+}
+
+static int ValDevTabLen(ValDevTab *vdt) {
+
+ if ( vdt==NULL )
+return( 0 );
+
+return( DevTabLen(&vdt->xadjust) + DevTabLen(&vdt->yadjust) +
+ DevTabLen(&vdt->xadv) + DevTabLen(&vdt->yadv) );
+}
+
+static int gposdumpvaldevtab(FILE *gpos,ValDevTab *vdt,int bits,int next_dev_tab ) {
+
+ if ( bits&0x10 ) {
+ if ( vdt==NULL || vdt->xadjust.corrections==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(&vdt->xadjust);
+ }
+ }
+ if ( bits&0x20 ) {
+ if ( vdt==NULL || vdt->yadjust.corrections==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(&vdt->yadjust);
+ }
+ }
+ if ( bits&0x40 ) {
+ if ( vdt==NULL || vdt->xadv.corrections==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(&vdt->xadv);
+ }
+ }
+ if ( bits&0x80 ) {
+ if ( vdt==NULL || vdt->yadv.corrections==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(&vdt->yadv);
+ }
+ }
+return( next_dev_tab );
+}
+
+static int gposmaskeddumpdevtab(FILE *gpos,DeviceTable *dt,int bits,int mask,
+ int next_dev_tab ) {
+
+ if ( bits&0x10 ) {
+ if ( !(mask&0x10) || dt==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(dt);
+ }
+ }
+ if ( bits&0x20 ) {
+ if ( !(mask&0x20) || dt==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(dt);
+ }
+ }
+ if ( bits&0x40 ) {
+ if ( !(mask&0x40) || dt==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(dt);
+ }
+ }
+ if ( bits&0x80 ) {
+ if ( !(mask&0x80) || dt==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,next_dev_tab);
+ next_dev_tab += DevTabLen(dt);
+ }
+ }
+return( next_dev_tab );
+}
+
+static int DevTabsSame(DeviceTable *dt1, DeviceTable *dt2) {
+ DeviceTable _dt;
+ int i;
+
+ if ( dt1==NULL && dt2==NULL )
+return( true );
+ if ( dt1==NULL ) {
+ memset(&_dt,0,sizeof(_dt));
+ dt1 = &_dt;
+ }
+ if ( dt2==NULL ) {
+ memset(&_dt,0,sizeof(_dt));
+ dt2 = &_dt;
+ }
+ if ( dt1->corrections==NULL && dt2->corrections==NULL )
+return( true );
+ if ( dt1->corrections==NULL || dt2->corrections==NULL )
+return( false );
+ if ( dt1->first_pixel_size!=dt2->first_pixel_size ||
+ dt1->last_pixel_size!=dt2->last_pixel_size )
+return( false );
+ for ( i=dt2->last_pixel_size-dt1->first_pixel_size; i>=0; --i )
+ if ( dt1->corrections[i]!=dt2->corrections[i] )
+return( false );
+
+return( true );
+}
+
+static int ValDevTabsSame(ValDevTab *vdt1, ValDevTab *vdt2) {
+ ValDevTab _vdt;
+
+ if ( vdt1==NULL && vdt2==NULL )
+return( true );
+ if ( vdt1==NULL ) {
+ memset(&_vdt,0,sizeof(_vdt));
+ vdt1 = &_vdt;
+ }
+ if ( vdt2==NULL ) {
+ memset(&_vdt,0,sizeof(_vdt));
+ vdt2 = &_vdt;
+ }
+return( DevTabsSame(&vdt1->xadjust,&vdt2->xadjust) &&
+ DevTabsSame(&vdt1->yadjust,&vdt2->yadjust) &&
+ DevTabsSame(&vdt1->xadv,&vdt2->xadv) &&
+ DevTabsSame(&vdt1->yadv,&vdt2->yadv) );
+}
+
+static void dumpGPOSsimplepos(FILE *gpos,SplineFont *sf,struct lookup_subtable *sub ) {
+ int cnt, cnt2;
+ int32 coverage_pos, end;
+ PST *pst, *first=NULL;
+ int bits = 0, same=true;
+ SplineChar **glyphs;
+
+ glyphs = SFOrderedGlyphsWithPSTinSubtable(sf,sub);
+ for ( cnt=cnt2=0; glyphs[cnt]!=NULL; ++cnt) {
+ for ( pst=glyphs[cnt]->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==sub && pst->type==pst_position ) {
+ if ( first==NULL ) first = pst;
+ else if ( same ) {
+ if ( first->u.pos.xoff!=pst->u.pos.xoff ||
+ first->u.pos.yoff!=pst->u.pos.yoff ||
+ first->u.pos.h_adv_off!=pst->u.pos.h_adv_off ||
+ first->u.pos.v_adv_off!=pst->u.pos.v_adv_off )
+ same = false;
+ if ( !ValDevTabsSame(pst->u.pos.adjust,first->u.pos.adjust))
+ same = false;
+ }
+ if ( pst->u.pos.xoff!=0 ) bits |= 1;
+ if ( pst->u.pos.yoff!=0 ) bits |= 2;
+ if ( pst->u.pos.h_adv_off!=0 ) bits |= 4;
+ if ( pst->u.pos.v_adv_off!=0 ) bits |= 8;
+ if ( pst->u.pos.adjust!=NULL ) {
+ if ( pst->u.pos.adjust->xadjust.corrections!=NULL ) bits |= 0x10;
+ if ( pst->u.pos.adjust->yadjust.corrections!=NULL ) bits |= 0x20;
+ if ( pst->u.pos.adjust->xadv.corrections!=NULL ) bits |= 0x40;
+ if ( pst->u.pos.adjust->yadv.corrections!=NULL ) bits |= 0x80;
+ }
+ ++cnt2;
+ break;
+ }
+ }
+ }
+ if ( bits==0 ) bits=1;
+ if ( cnt!=cnt2 )
+ IError( "Count mismatch in dumpGPOSsimplepos#1 %d vs %d\n", cnt, cnt2 );
+
+ putshort(gpos,same?1:2); /* 1 means all value records same */
+ coverage_pos = ftell(gpos);
+ putshort(gpos,0); /* offset to coverage table */
+ putshort(gpos,bits);
+ if ( same ) {
+ if ( bits&1 ) putshort(gpos,first->u.pos.xoff);
+ if ( bits&2 ) putshort(gpos,first->u.pos.yoff);
+ if ( bits&4 ) putshort(gpos,first->u.pos.h_adv_off);
+ if ( bits&8 ) putshort(gpos,first->u.pos.v_adv_off);
+ if ( bits&0xf0 ) {
+ int next_dev_tab = ftell(gpos)-coverage_pos+2+
+ sizeof(int16)*((bits&0x10?1:0) + (bits&0x20?1:0) + (bits&0x40?1:0) + (bits&0x80?1:0));
+ if ( bits&0x10 ) { putshort(gpos,next_dev_tab); next_dev_tab += DevTabLen(&first->u.pos.adjust->xadjust); }
+ if ( bits&0x20 ) { putshort(gpos,next_dev_tab); next_dev_tab += DevTabLen(&first->u.pos.adjust->yadjust); }
+ if ( bits&0x40 ) { putshort(gpos,next_dev_tab); next_dev_tab += DevTabLen(&first->u.pos.adjust->xadv); }
+ if ( bits&0x80 ) { putshort(gpos,next_dev_tab); next_dev_tab += DevTabLen(&first->u.pos.adjust->yadv); }
+ if ( bits&0x10 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->xadjust);
+ if ( bits&0x20 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->yadjust);
+ if ( bits&0x40 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->xadv);
+ if ( bits&0x80 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->yadv);
+ if ( next_dev_tab!=ftell(gpos)-coverage_pos+2 )
+ IError( "Device Table offsets wrong in simple positioning 2");
+ }
+ } else {
+ int vr_size =
+ sizeof(int16)*((bits&0x1?1:0) + (bits&0x2?1:0) + (bits&0x4?1:0) + (bits&0x8?1:0) +
+ (bits&0x10?1:0) + (bits&0x20?1:0) + (bits&0x40?1:0) + (bits&0x80?1:0));
+ int next_dev_tab = ftell(gpos)-coverage_pos+2+2+vr_size*cnt;
+ putshort(gpos,cnt);
+ for ( cnt2 = 0; glyphs[cnt2]!=NULL; ++cnt2 ) {
+ for ( pst=glyphs[cnt2]->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==sub && pst->type==pst_position ) {
+ if ( bits&1 ) putshort(gpos,pst->u.pos.xoff);
+ if ( bits&2 ) putshort(gpos,pst->u.pos.yoff);
+ if ( bits&4 ) putshort(gpos,pst->u.pos.h_adv_off);
+ if ( bits&8 ) putshort(gpos,pst->u.pos.v_adv_off);
+ next_dev_tab = gposdumpvaldevtab(gpos,pst->u.pos.adjust,bits,
+ next_dev_tab);
+ break;
+ }
+ }
+ }
+ if ( cnt!=cnt2 )
+ IError( "Count mismatch in dumpGPOSsimplepos#3 %d vs %d\n", cnt, cnt2 );
+ if ( bits&0xf0 ) {
+ for ( cnt2 = 0; glyphs[cnt2]!=NULL; ++cnt2 ) {
+ for ( pst=glyphs[cnt2]->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==sub && pst->type==pst_position ) {
+ if ( bits&0x10 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->xadjust);
+ if ( bits&0x20 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->yadjust);
+ if ( bits&0x40 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->xadv);
+ if ( bits&0x80 ) dumpgposdevicetable(gpos,&first->u.pos.adjust->yadv);
+ }
+ }
+ }
+ }
+ if ( next_dev_tab!=ftell(gpos)-coverage_pos+2 )
+ IError( "Device Table offsets wrong in simple positioning 2");
+ }
+ end = ftell(gpos);
+ fseek(gpos,coverage_pos,SEEK_SET);
+ putshort(gpos,end-coverage_pos+2);
+ fseek(gpos,end,SEEK_SET);
+ dumpcoveragetable(gpos,glyphs);
+ fseek(gpos,0,SEEK_END);
+ free(glyphs);
+}
+
+struct sckppst {
+ uint16 samewas;
+ uint16 devtablen;
+ uint16 tot;
+ uint8 isv;
+ uint8 subtable_too_big;
+/* The first few fields are only meaningful in the first structure in the array*/
+/* and provide information about the entire rest of the array */
+ uint16 other_gid;
+ SplineChar *sc;
+ KernPair *kp;
+ PST *pst;
+};
+
+static int cmp_gid( const void *_s1, const void *_s2 ) {
+ const struct sckppst *s1 = _s1, *s2 = _s2;
+return( ((int) s1->other_gid) - ((int) s2->other_gid) );
+}
+
+static void dumpGPOSpairpos(FILE *gpos,SplineFont *sf,struct lookup_subtable *sub) {
+ int cnt;
+ int32 coverage_pos, offset_pos, end, start, pos;
+ PST *pst;
+ KernPair *kp;
+ int vf1 = 0, vf2=0, i, j, k, tot, bit_cnt, v;
+ int start_cnt, end_cnt;
+ int chunk_cnt, chunk_max;
+ SplineChar *sc, **glyphs, *gtemp;
+ struct sckppst **seconds;
+ int devtablen;
+ int next_dev_tab;
+
+ /* Figure out all the data we need. First the glyphs with kerning info */
+ /* then the glyphs to which they kern, and by how much */
+ glyphs = SFOrderedGlyphsWithPSTinSubtable(sf,sub);
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt);
+ seconds = malloc(cnt*sizeof(struct sckppst *));
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt) {
+ for ( k=0; k<2; ++k ) {
+ devtablen = 0;
+ tot = 0;
+ for ( pst=glyphs[cnt]->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->subtable==sub && pst->type==pst_pair &&
+ (sc = SFGetChar(sf,-1,pst->u.pair.paired))!=NULL &&
+ sc->ttf_glyph!=-1 ) {
+ if ( k ) {
+ seconds[cnt][tot].sc = sc;
+ seconds[cnt][tot].other_gid = sc->ttf_glyph;
+ seconds[cnt][tot].pst = pst;
+ devtablen += ValDevTabLen(pst->u.pair.vr[0].adjust) +
+ ValDevTabLen(pst->u.pair.vr[1].adjust);
+
+ }
+ ++tot;
+ }
+ }
+ for ( v=0; v<2; ++v ) {
+ for ( kp = v ? glyphs[cnt]->vkerns : glyphs[cnt]->kerns; kp!=NULL; kp=kp->next ) {
+ if( kp->subtable!=sub ) continue; // process only glyphs from the current subtable
+ if ( kp->sc->ttf_glyph!=-1 ) {
+ if ( k ) {
+ seconds[cnt][tot].other_gid = kp->sc->ttf_glyph;
+ seconds[cnt][tot].sc = kp->sc;
+ seconds[cnt][tot].kp = kp;
+ seconds[cnt][tot].isv = v;
+ devtablen += DevTabLen(kp->adjust);
+ }
+ ++tot;
+ }
+ }
+ }
+ if ( k==0 ) {
+ seconds[cnt] = calloc(tot+1,sizeof(struct sckppst));
+ } else {
+ qsort(seconds[cnt],tot,sizeof(struct sckppst),cmp_gid);
+ seconds[cnt][0].tot = tot;
+ /* Devtablen is 0 unless we are configured for device tables */
+ seconds[cnt][0].devtablen = devtablen;
+ seconds[cnt][0].samewas = 0xffff;
+ }
+ }
+ }
+
+ /* Some fonts do a primitive form of class based kerning, several glyphs */
+ /* can share the same list of second glyphs & offsets */
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt) {
+ struct sckppst *test = seconds[cnt], *test2;
+ for ( i=cnt-1; i>=0; --i ) {
+ test2 = seconds[i];
+ if ( test[0].tot != test2[0].tot || test2[0].samewas!=0xffff )
+ continue;
+ for ( j=test[0].tot-1; j>=0; --j ) {
+ if ( test[j].other_gid != test2[j].other_gid )
+ break;
+ if ( test[j].kp!=NULL && test2[j].kp!=NULL &&
+ test[j].kp->off == test2[j].kp->off
+ && DevTabsSame(test[j].kp->adjust,test2[j].kp->adjust)
+ )
+ /* So far, so good */;
+ else if ( test[j].pst!=NULL && test2[j].pst!=NULL &&
+ test[j].pst->u.pair.vr[0].xoff == test2[j].pst->u.pair.vr[0].xoff &&
+ test[j].pst->u.pair.vr[0].yoff == test2[j].pst->u.pair.vr[0].yoff &&
+ test[j].pst->u.pair.vr[0].h_adv_off == test2[j].pst->u.pair.vr[0].h_adv_off &&
+ test[j].pst->u.pair.vr[0].v_adv_off == test2[j].pst->u.pair.vr[0].v_adv_off &&
+ test[j].pst->u.pair.vr[1].xoff == test2[j].pst->u.pair.vr[1].xoff &&
+ test[j].pst->u.pair.vr[1].yoff == test2[j].pst->u.pair.vr[1].yoff &&
+ test[j].pst->u.pair.vr[1].h_adv_off == test2[j].pst->u.pair.vr[1].h_adv_off &&
+ test[j].pst->u.pair.vr[1].v_adv_off == test2[j].pst->u.pair.vr[1].v_adv_off
+ && ValDevTabsSame(test[j].pst->u.pair.vr[0].adjust,test2[j].pst->u.pair.vr[0].adjust)
+ && ValDevTabsSame(test[j].pst->u.pair.vr[1].adjust,test2[j].pst->u.pair.vr[1].adjust)
+ )
+ /* That's ok too. */;
+ else
+ break;
+ }
+ if ( j>=0 )
+ continue;
+ test[0].samewas = i;
+ break;
+ }
+ }
+
+ /* Ok, how many offsets must we output? Normal kerning will just use */
+ /* one offset (with perhaps a device table), but the standard allows */
+ /* us to adjust 8 different values (with 8 different device tables) */
+ /* Find out which we need */
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt) {
+ for ( tot=0 ; tot<seconds[cnt][0].tot; ++tot ) {
+ if ( (pst=seconds[cnt][tot].pst)!=NULL ) {
+ if ( pst->subtable==sub && pst->type==pst_pair ) {
+ if ( pst->u.pair.vr[0].xoff!=0 ) vf1 |= 1;
+ if ( pst->u.pair.vr[0].yoff!=0 ) vf1 |= 2;
+ if ( pst->u.pair.vr[0].h_adv_off!=0 ) vf1 |= 4;
+ if ( pst->u.pair.vr[0].v_adv_off!=0 ) vf1 |= 8;
+ if ( pst->u.pair.vr[0].adjust!=NULL ) {
+ if ( pst->u.pair.vr[0].adjust->xadjust.corrections!=NULL ) vf1 |= 0x10;
+ if ( pst->u.pair.vr[0].adjust->yadjust.corrections!=NULL ) vf1 |= 0x20;
+ if ( pst->u.pair.vr[0].adjust->xadv.corrections!=NULL ) vf1 |= 0x40;
+ if ( pst->u.pair.vr[0].adjust->yadv.corrections!=NULL ) vf1 |= 0x80;
+ }
+ if ( pst->u.pair.vr[1].xoff!=0 ) vf2 |= 1;
+ if ( pst->u.pair.vr[1].yoff!=0 ) vf2 |= 2;
+ if ( pst->u.pair.vr[1].h_adv_off!=0 ) vf2 |= 4;
+ if ( pst->u.pair.vr[1].v_adv_off!=0 ) vf2 |= 8;
+ if ( pst->u.pair.vr[1].adjust!=NULL ) {
+ if ( pst->u.pair.vr[1].adjust->xadjust.corrections!=NULL ) vf2 |= 0x10;
+ if ( pst->u.pair.vr[1].adjust->yadjust.corrections!=NULL ) vf2 |= 0x20;
+ if ( pst->u.pair.vr[1].adjust->xadv.corrections!=NULL ) vf2 |= 0x40;
+ if ( pst->u.pair.vr[1].adjust->yadv.corrections!=NULL ) vf2 |= 0x80;
+ }
+ }
+ }
+ if ( (kp = seconds[cnt][tot].kp)!=NULL ) {
+ int mask = 0, mask2=0;
+ if ( seconds[cnt][tot].isv )
+ mask = 0x0008;
+ else
+ mask = 0x0004;
+ if ( kp->adjust!=NULL ) {
+ mask |= mask<<4;
+ mask2 |= mask2<<4;
+ }
+ vf1 |= mask;
+ vf2 |= mask2;
+ }
+ }
+ }
+ if ( vf1==0 && vf2==0 ) vf1=1;
+ bit_cnt = 0;
+ for ( i=0; i<8; ++i ) {
+ if ( vf1&(1<<i) ) ++bit_cnt;
+ if ( vf2&(1<<i) ) ++bit_cnt;
+ }
+
+ chunk_max = chunk_cnt = 0;
+ for ( start_cnt=0; start_cnt<cnt; start_cnt=end_cnt ) {
+ int len = 5*2; /* Subtable header */
+ for ( end_cnt=start_cnt; end_cnt<cnt; ++end_cnt ) {
+ int glyph_len = 2; /* For the glyph's offset */
+ if ( seconds[end_cnt][0].samewas==0xffff || seconds[end_cnt][0].samewas<start_cnt )
+ glyph_len += (bit_cnt*2+2)*seconds[end_cnt][0].tot +
+ seconds[end_cnt][0].devtablen +
+ 2; /* Number of secondary glyphs */
+ if ( glyph_len>65535 && end_cnt==start_cnt ) {
+ LogError(_("Lookup subtable %s contains a glyph %s whose kerning information takes up more than 64k bytes\n"),
+ sub->subtable_name, glyphs[start_cnt]->name );
+ len += glyph_len;
+ } else if ( len+glyph_len>65535 ) {
+ if( start_cnt==0 )
+ LogError(_("Lookup subtable %s had to be split into several subtables\nbecause it was too big.\n"),
+ sub->subtable_name );
+ break;
+ } else
+ len += glyph_len;
+ }
+ if ( start_cnt!=0 || end_cnt!=cnt ) {
+ if ( chunk_cnt>=chunk_max )
+ sub->extra_subtables = realloc(sub->extra_subtables,((chunk_max+=10)+1)*sizeof(uint32));
+ sub->extra_subtables[chunk_cnt++] = ftell(gpos);
+ sub->extra_subtables[chunk_cnt] = -1;
+ }
+
+ start = ftell(gpos);
+ putshort(gpos,1); /* 1 means char pairs (ie. not classes) */
+ coverage_pos = ftell(gpos);
+ putshort(gpos,0); /* offset to coverage table */
+ putshort(gpos,vf1);
+ putshort(gpos,vf2);
+ putshort(gpos,end_cnt-start_cnt);
+ offset_pos = ftell(gpos);
+ for ( i=start_cnt; i<end_cnt; ++i )
+ putshort(gpos,0); /* Fill in later */
+ for ( i=start_cnt; i<end_cnt; ++i ) {
+ if ( seconds[i][0].samewas>= start_cnt && seconds[i][0].samewas!=0xffff ) {
+ /* It's the same as the glyph at samewas, so just copy the */
+ /* offset from there. We don't need to do anything else */
+ int offset;
+ fseek(gpos,offset_pos+(seconds[i][0].samewas-start_cnt)*sizeof(uint16),SEEK_SET);
+ offset = getushort(gpos);
+ fseek(gpos,offset_pos+(i-start_cnt)*sizeof(uint16),SEEK_SET);
+ putshort(gpos,offset);
+ fseek(gpos,0,SEEK_END);
+ continue;
+ }
+ next_dev_tab = ftell(gpos)-start;
+ if ( (vf1&0xf0) || (vf2&0xf0) ) {
+ for ( tot=0 ; tot<seconds[i][0].tot; ++tot ) {
+ if ( (pst=seconds[i][tot].pst)!=NULL ) {
+ if ( pst->u.pair.vr[0].adjust!=NULL ) {
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[0].adjust->xadjust);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[0].adjust->yadjust);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[0].adjust->xadv);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[0].adjust->yadv);
+ }
+ if ( pst->u.pair.vr[1].adjust!=NULL ) {
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[1].adjust->xadjust);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[1].adjust->yadjust);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[1].adjust->xadv);
+ dumpgposdevicetable(gpos,&pst->u.pair.vr[1].adjust->yadv);
+ }
+ }
+ if ( (kp=seconds[i][tot].kp)!=NULL && kp->adjust!=NULL )
+ dumpgposdevicetable(gpos,kp->adjust);
+ }
+ }
+ pos = ftell(gpos);
+ fseek(gpos,offset_pos+(i-start_cnt)*sizeof(uint16),SEEK_SET);
+ putshort(gpos,pos-start);
+ fseek(gpos,pos,SEEK_SET);
+
+ putshort(gpos,seconds[i][0].tot);
+ for ( tot=0 ; tot<seconds[i][0].tot; ++tot ) {
+ putshort(gpos,seconds[i][tot].other_gid);
+ if ( (pst=seconds[i][tot].pst)!=NULL ) {
+ if ( vf1&1 ) putshort(gpos,pst->u.pair.vr[0].xoff);
+ if ( vf1&2 ) putshort(gpos,pst->u.pair.vr[0].yoff);
+ if ( vf1&4 ) putshort(gpos,pst->u.pair.vr[0].h_adv_off);
+ if ( vf1&8 ) putshort(gpos,pst->u.pair.vr[0].v_adv_off);
+ next_dev_tab = gposdumpvaldevtab(gpos,pst->u.pair.vr[0].adjust,vf1,
+ next_dev_tab);
+ if ( vf2&1 ) putshort(gpos,pst->u.pair.vr[1].xoff);
+ if ( vf2&2 ) putshort(gpos,pst->u.pair.vr[1].yoff);
+ if ( vf2&4 ) putshort(gpos,pst->u.pair.vr[1].h_adv_off);
+ if ( vf2&8 ) putshort(gpos,pst->u.pair.vr[1].v_adv_off);
+ next_dev_tab = gposdumpvaldevtab(gpos,pst->u.pair.vr[1].adjust,vf2,
+ next_dev_tab);
+ } else if ( (kp=seconds[i][tot].kp)!=NULL ) {
+ int mask=0, mask2=0;
+ if ( seconds[i][tot].isv )
+ mask = 0x8;
+ else
+ mask = 0x4;
+ gposvrmaskeddump(gpos,vf1,mask,kp->off);
+ next_dev_tab = gposmaskeddumpdevtab(gpos,kp->adjust,vf1,mask<<4,
+ next_dev_tab);
+ gposvrmaskeddump(gpos,vf2,mask2,kp->off);
+ next_dev_tab = gposmaskeddumpdevtab(gpos,kp->adjust,vf2,mask2<<4,
+ next_dev_tab);
+ }
+ }
+ }
+ end = ftell(gpos);
+ fseek(gpos,coverage_pos,SEEK_SET);
+ if ( end-start>65535 )
+ IError(_("I miscalculated the size of subtable %s, this means the kerning output is wrong."), sub->subtable_name );
+ putshort(gpos,end-start);
+ fseek(gpos,end,SEEK_SET);
+ gtemp = glyphs[end_cnt]; glyphs[end_cnt] = NULL;
+ dumpcoveragetable(gpos,glyphs+start_cnt);
+ glyphs[end_cnt] = gtemp;
+ }
+ for ( i=0; i<cnt; ++i )
+ free(seconds[i]);
+ free(seconds);
+ free(glyphs);
+}
+
+uint16 *ClassesFromNames(SplineFont *sf,char **classnames,int class_cnt,
+ int numGlyphs, SplineChar ***glyphs, int apple_kc) {
+ uint16 *class;
+ int i;
+ char *pt, *end, ch;
+ SplineChar *sc, **gs=NULL;
+ int offset = (apple_kc && classnames[0]!=NULL);
+
+ class = calloc(numGlyphs,sizeof(uint16));
+ if ( glyphs ) *glyphs = gs = calloc(numGlyphs,sizeof(SplineChar *));
+ for ( i=0; i<class_cnt; ++i ) {
+ if ( i==0 && classnames[0]==NULL )
+ continue;
+ for ( pt = classnames[i]; *pt; pt = end+1 ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+ break;
+ end = strchr(pt,' ');
+ if ( end==NULL )
+ end = pt+strlen(pt);
+ ch = *end;
+ *end = '\0';
+ sc = SFGetChar(sf,-1,pt);
+ if ( sc!=NULL && sc->ttf_glyph!=-1 ) {
+ class[sc->ttf_glyph] = i+offset;
+ if ( gs!=NULL )
+ gs[sc->ttf_glyph] = sc;
+ }
+ *end = ch;
+ if ( ch=='\0' )
+ break;
+ }
+ }
+return( class );
+}
+
+static SplineChar **GlyphsFromClasses(SplineChar **gs, int numGlyphs) {
+ int i, cnt;
+ SplineChar **glyphs;
+
+ for ( i=cnt=0; i<numGlyphs; ++i )
+ if ( gs[i]!=NULL ) ++cnt;
+ glyphs = malloc((cnt+1)*sizeof(SplineChar *));
+ for ( i=cnt=0; i<numGlyphs; ++i )
+ if ( gs[i]!=NULL )
+ glyphs[cnt++] = gs[i];
+ glyphs[cnt++] = NULL;
+ free(gs);
+return( glyphs );
+}
+
+static SplineChar **GlyphsFromInitialClasses(SplineChar **gs, int numGlyphs, uint16 *classes, uint16 *initial) {
+ int i, j, cnt;
+ SplineChar **glyphs;
+
+ for ( i=cnt=0; i<numGlyphs; ++i ) {
+ for ( j=0; initial[j]!=0xffff; ++j )
+ if ( initial[j]==classes[i])
+ break;
+ if ( initial[j]!=0xffff && gs[i]!=NULL ) ++cnt;
+ }
+ glyphs = malloc((cnt+1)*sizeof(SplineChar *));
+ for ( i=cnt=0; i<numGlyphs; ++i ) {
+ for ( j=0; initial[j]!=0xffff; ++j )
+ if ( initial[j]==classes[i])
+ break;
+ if ( initial[j]!=0xffff && gs[i]!=NULL )
+ glyphs[cnt++] = gs[i];
+ }
+ glyphs[cnt++] = NULL;
+return( glyphs );
+}
+
+static void DumpClass(FILE *gpos,uint16 *class,int numGlyphs) {
+ int ranges, i, cur, first= -1, last=-1, istart;
+
+ for ( i=ranges=0; i<numGlyphs; ) {
+ istart = i;
+ cur = class[i];
+ while ( i<numGlyphs && class[i]==cur )
+ ++i;
+ if ( cur!=0 ) {
+ ++ranges;
+ if ( first==-1 ) first = istart;
+ last = i-1;
+ }
+ }
+ if ( ranges*3+1>last-first+1+2 || first==-1 ) {
+ if ( first==-1 ) first = last = 0;
+ putshort(gpos,1); /* Format 1, list of all posibilities */
+ putshort(gpos,first);
+ putshort(gpos,last-first+1);
+ for ( i=first; i<=last ; ++i )
+ putshort(gpos,class[i]);
+ } else {
+ putshort(gpos,2); /* Format 2, series of ranges */
+ putshort(gpos,ranges);
+ for ( i=0; i<numGlyphs; ) {
+ istart = i;
+ cur = class[i];
+ while ( i<numGlyphs && class[i]==cur )
+ ++i;
+ if ( cur!=0 ) {
+ putshort(gpos,istart);
+ putshort(gpos,i-1);
+ putshort(gpos,cur);
+ }
+ }
+ }
+}
+
+static void dumpgposkernclass(FILE *gpos,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ uint32 begin_off = ftell(gpos), pos;
+ uint16 *class1, *class2;
+ KernClass *kc = sub->kc, *test;
+ SplineChar **glyphs;
+ int i, isv;
+ int anydevtab = false;
+ int next_devtab;
+
+ putshort(gpos,2); /* format 2 of the pair adjustment subtable */
+ putshort(gpos,0); /* offset to coverage table */
+ for ( i=0; i<kc->first_cnt*kc->second_cnt; ++i ) {
+ if ( kc->adjusts[i].corrections!=NULL ) {
+ anydevtab = true;
+ break;
+ }
+ }
+
+ for ( test=sf->vkerns; test!=NULL && test!=kc; test=test->next );
+ isv = test==kc;
+
+ if ( isv ) {
+ /* As far as I know there is no "bottom to top" writing direction */
+ /* Oh. There is. Ogham, Runic */
+ putshort(gpos,anydevtab?0x0088:0x0008); /* Alter YAdvance of first character */
+ putshort(gpos,0x0000); /* leave second char alone */
+ } else {
+ putshort(gpos,anydevtab?0x0044:0x0004); /* Alter XAdvance of first character */
+ putshort(gpos,0x0000); /* leave second char alone */
+ }
+ class1 = ClassesFromNames(sf,kc->firsts,kc->first_cnt,at->maxp.numGlyphs,&glyphs,false);
+ glyphs = GlyphsFromClasses(glyphs,at->maxp.numGlyphs);
+ class2 = ClassesFromNames(sf,kc->seconds,kc->second_cnt,at->maxp.numGlyphs,NULL,false);
+ putshort(gpos,0); /* offset to first glyph classes */
+ putshort(gpos,0); /* offset to second glyph classes */
+ putshort(gpos,kc->first_cnt);
+ putshort(gpos,kc->second_cnt);
+ next_devtab = ftell(gpos)-begin_off + kc->first_cnt*kc->second_cnt*2*sizeof(uint16);
+ for ( i=0; i<kc->first_cnt*kc->second_cnt; ++i ) {
+ putshort(gpos,kc->offsets[i]);
+ if ( anydevtab && kc->adjusts[i].corrections!=NULL ) {
+ putshort(gpos,next_devtab);
+ next_devtab += DevTabLen(&kc->adjusts[i]);
+ } else if ( anydevtab )
+ putshort(gpos,0);
+ }
+ if ( anydevtab ) {
+ for ( i=0; i<kc->first_cnt*kc->second_cnt; ++i ) {
+ if ( kc->adjusts[i].corrections!=NULL )
+ dumpgposdevicetable(gpos,&kc->adjusts[i]);
+ }
+ if ( next_devtab!=ftell(gpos)-begin_off )
+ IError("Device table offsets screwed up in kerning class");
+ }
+ pos = ftell(gpos);
+ fseek(gpos,begin_off+4*sizeof(uint16),SEEK_SET);
+ putshort(gpos,pos-begin_off);
+ fseek(gpos,pos,SEEK_SET);
+ DumpClass(gpos,class1,at->maxp.numGlyphs);
+
+ pos = ftell(gpos);
+ fseek(gpos,begin_off+5*sizeof(uint16),SEEK_SET);
+ putshort(gpos,pos-begin_off);
+ fseek(gpos,pos,SEEK_SET);
+ DumpClass(gpos,class2,at->maxp.numGlyphs);
+
+ pos = ftell(gpos);
+ fseek(gpos,begin_off+sizeof(uint16),SEEK_SET);
+ putshort(gpos,pos-begin_off);
+ fseek(gpos,pos,SEEK_SET);
+ dumpcoveragetable(gpos,glyphs);
+
+ free(glyphs);
+ free(class1);
+ free(class2);
+}
+
+static void dumpanchor(FILE *gpos,AnchorPoint *ap, int is_ttf ) {
+ int base = ftell(gpos);
+
+ if ( ap->xadjust.corrections!=NULL || ap->yadjust.corrections!=NULL )
+ putshort(gpos,3); /* format 3 w/ device tables */
+ else
+ if ( ap->has_ttf_pt && is_ttf )
+ putshort(gpos,2); /* format 2 w/ a matching ttf point index */
+ else
+ putshort(gpos,1); /* Anchor format 1 just location*/
+ putshort(gpos,ap->me.x); /* X coord of attachment */
+ putshort(gpos,ap->me.y); /* Y coord of attachment */
+ if ( ap->xadjust.corrections!=NULL || ap->yadjust.corrections!=NULL ) {
+ putshort(gpos,ap->xadjust.corrections==NULL?0:
+ ftell(gpos)-base+4);
+ putshort(gpos,ap->yadjust.corrections==NULL?0:
+ ftell(gpos)-base+2+DevTabLen(&ap->xadjust));
+ dumpgposdevicetable(gpos,&ap->xadjust);
+ dumpgposdevicetable(gpos,&ap->yadjust);
+ } else
+ if ( ap->has_ttf_pt && is_ttf )
+ putshort(gpos,ap->ttf_pt_index);
+}
+
+static void dumpgposCursiveAttach(FILE *gpos, SplineFont *sf,
+ struct lookup_subtable *sub,struct glyphinfo *gi) {
+ AnchorClass *ac, *testac;
+ SplineChar **entryexit;
+ int cnt, offset,j;
+ AnchorPoint *ap, *entry, *exit;
+ uint32 coverage_offset, start;
+
+ ac = NULL;
+ for ( testac=sf->anchor; testac!=NULL; testac = testac->next ) {
+ if ( testac->subtable == sub ) {
+ if ( ac==NULL )
+ ac = testac;
+ else {
+ ff_post_error(_("Two cursive anchor classes"),_("Two cursive anchor classes in the same subtable, %s"),
+ sub->subtable_name);
+ break;
+ }
+ }
+ }
+ if ( ac==NULL ) {
+ IError( "Missing anchor class for %s", sub->subtable_name );
+return;
+ }
+ entryexit = EntryExitDecompose(sf,ac,gi);
+ if ( entryexit==NULL )
+return;
+
+ for ( cnt=0; entryexit[cnt]!=NULL; ++cnt );
+
+ start = ftell(gpos);
+ putshort(gpos,1); /* format 1 for this subtable */
+ putshort(gpos,0); /* Fill in later, offset to coverage table */
+ putshort(gpos,cnt); /* number of glyphs */
+
+ offset = 6+2*2*cnt;
+ for ( j=0; j<cnt; ++j ) {
+ entry = exit = NULL;
+ for ( ap=entryexit[j]->anchor; ap!=NULL; ap=ap->next ) {
+ if ( ap->anchor==ac && ap->type==at_centry ) entry = ap;
+ if ( ap->anchor==ac && ap->type==at_cexit ) exit = ap;
+ }
+ if ( entry!=NULL ) {
+ putshort(gpos,offset);
+ offset += 6;
+ if ( entry->xadjust.corrections!=NULL || entry->yadjust.corrections!=NULL )
+ offset += 4 + DevTabLen(&entry->xadjust) + DevTabLen(&entry->yadjust);
+ if ( gi->is_ttf && entry->has_ttf_pt )
+ offset += 2;
+ } else
+ putshort(gpos,0);
+ if ( exit!=NULL ) {
+ putshort(gpos,offset);
+ offset += 6;
+ if ( exit->xadjust.corrections!=NULL || exit->yadjust.corrections!=NULL )
+ offset += 4 + DevTabLen(&exit->xadjust) + DevTabLen(&exit->yadjust);
+ else
+ if ( gi->is_ttf && exit->has_ttf_pt )
+ offset += 2;
+ } else
+ putshort(gpos,0);
+ }
+ for ( j=0; j<cnt; ++j ) {
+ entry = exit = NULL;
+ for ( ap=entryexit[j]->anchor; ap!=NULL; ap=ap->next ) {
+ if ( ap->anchor==ac && ap->type==at_centry ) entry = ap;
+ if ( ap->anchor==ac && ap->type==at_cexit ) exit = ap;
+ }
+ if ( entry!=NULL )
+ dumpanchor(gpos,entry,gi->is_ttf);
+ if ( exit!=NULL )
+ dumpanchor(gpos,exit,gi->is_ttf);
+ }
+ coverage_offset = ftell(gpos);
+ dumpcoveragetable(gpos,entryexit);
+ fseek(gpos,start+2,SEEK_SET);
+ putshort(gpos,coverage_offset-start);
+ fseek(gpos,0,SEEK_END);
+
+ free(entryexit);
+}
+
+static int orderglyph(const void *_sc1,const void *_sc2) {
+ SplineChar * const *sc1 = _sc1, * const *sc2 = _sc2;
+
+return( (*sc1)->ttf_glyph - (*sc2)->ttf_glyph );
+}
+
+static SplineChar **allmarkglyphs(SplineChar ***glyphlist, int classcnt) {
+ SplineChar **glyphs;
+ int i, tot, k;
+
+ if ( classcnt==1 )
+return( SFOrderedGlyphs(glyphlist[0]));
+
+ for ( i=tot=0; i<classcnt; ++i ) {
+ for ( k=0; glyphlist[i][k]!=NULL; ++k );
+ tot += k;
+ }
+ glyphs = malloc((tot+1)*sizeof(SplineChar *));
+ for ( i=tot=0; i<classcnt; ++i ) {
+ for ( k=0; glyphlist[i][k]!=NULL; ++k )
+ glyphs[tot++] = glyphlist[i][k];
+ }
+ qsort(glyphs,tot,sizeof(SplineChar *),orderglyph);
+ for ( i=k=0; i<tot; ++i ) {
+ while ( i+1<tot && glyphs[i]==glyphs[i+1]) ++i;
+ glyphs[k++] = glyphs[i];
+ }
+ glyphs[k] = NULL;
+return( glyphs );
+}
+
+static void dumpgposAnchorData(FILE *gpos,AnchorClass *_ac,
+ enum anchor_type at,
+ SplineChar ***marks,SplineChar **base,
+ int classcnt, struct glyphinfo *gi) {
+ AnchorClass *ac=NULL;
+ int j,cnt,k,l, pos, offset, tot, max;
+ uint32 coverage_offset, markarray_offset, subtable_start;
+ AnchorPoint *ap, **aps;
+ SplineChar **markglyphs;
+
+ for ( cnt=0; base[cnt]!=NULL; ++cnt );
+
+ subtable_start = ftell(gpos);
+ putshort(gpos,1); /* format 1 for this subtable */
+ putshort(gpos,0); /* Fill in later, offset to mark coverage table */
+ putshort(gpos,0); /* Fill in later, offset to base coverage table */
+ putshort(gpos,classcnt);
+ putshort(gpos,0); /* Fill in later, offset to mark array */
+ putshort(gpos,12); /* Offset to base array */
+ /* Base array */
+ putshort(gpos,cnt); /* Number of entries in array */
+ if ( at==at_basechar || at==at_basemark ) {
+ offset = 2;
+ for ( l=0; l<3; ++l ) {
+ for ( j=0; j<cnt; ++j ) {
+ for ( k=0, ac=_ac; k<classcnt; ac=ac->next ) if ( ac->matches ) {
+ if ( !ac->has_mark || !ac->has_base )
+ continue;
+ for ( ap=base[j]->anchor; ap!=NULL && (ap->anchor!=ac || ap->type!=at);
+ ap=ap->next );
+ switch ( l ) {
+ case 0:
+ offset += 2;
+ break;
+ case 1:
+ if ( ap==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,offset);
+ offset += 6;
+ if ( ap->xadjust.corrections!=NULL || ap->yadjust.corrections!=NULL )
+ offset += 4 + DevTabLen(&ap->xadjust) + DevTabLen(&ap->yadjust);
+ else
+ if ( gi->is_ttf && ap->has_ttf_pt )
+ offset += 2;
+ }
+ break;
+ case 2:
+ if ( ap!=NULL )
+ dumpanchor(gpos,ap,gi->is_ttf);
+ break;
+ }
+ ++k;
+ }
+ }
+ }
+ } else {
+ offset = 2+2*cnt;
+ max = 0;
+ for ( j=0; j<cnt; ++j ) {
+ putshort(gpos,offset);
+ pos = tot = 0;
+ for ( ap=base[j]->anchor; ap!=NULL ; ap=ap->next )
+ for ( k=0, ac=_ac; k<classcnt; ac=ac->next ) if ( ac->matches ) {
+ if ( ap->anchor==ac ) {
+ if ( ap->lig_index>pos ) pos = ap->lig_index;
+ ++tot;
+ }
+ ++k;
+ }
+ if ( pos>max ) max = pos;
+ offset += 2+(pos+1)*classcnt*2+tot*6;
+ /* 2 for component count, for each component an offset to an offset to an anchor record */
+ }
+ ++max;
+ int special_ceiling = classcnt*max;
+ aps = malloc((classcnt*max+max)*sizeof(AnchorPoint *));
+ for ( j=0; j<cnt; ++j ) {
+ memset(aps,0,(classcnt*max+max)*sizeof(AnchorPoint *));
+ pos = 0;
+ for ( ap=base[j]->anchor; ap!=NULL ; ap=ap->next )
+ for ( k=0, ac=_ac; k<classcnt; ac=ac->next ) if ( ac->matches ) {
+ if ( ap->anchor==ac ) {
+ if ( ap->lig_index>pos ) pos = ap->lig_index;
+ if (k*max+ap->lig_index > special_ceiling || k*max+ap->lig_index < 0) {
+ fprintf(stderr, "A ligature index is invalid.\n");
+ } else {
+ aps[k*max+ap->lig_index] = ap;
+ }
+ }
+ ++k;
+ }
+ ++pos;
+ putshort(gpos,pos);
+ offset = 2+2*pos*classcnt;
+ for ( l=0; l<pos; ++l ) {
+ for ( k=0; k<classcnt; ++k ) {
+ if ( aps[k*max+l]==NULL )
+ putshort(gpos,0);
+ else {
+ putshort(gpos,offset);
+ offset += 6;
+ if ( aps[k*max+l]->xadjust.corrections!=NULL || aps[k*max+l]->yadjust.corrections!=NULL )
+ offset += 4 + DevTabLen(&aps[k*max+l]->xadjust) +
+ DevTabLen(&aps[k*max+l]->yadjust);
+ else
+ if ( gi->is_ttf && aps[k*max+l]->has_ttf_pt )
+ offset += 2;
+ }
+ }
+ }
+ for ( l=0; l<pos; ++l ) {
+ for ( k=0; k<classcnt; ++k ) {
+ if ( aps[k*max+l]!=NULL ) {
+ dumpanchor(gpos,aps[k*max+l],gi->is_ttf);
+ }
+ }
+ }
+ }
+ free(aps); aps = NULL;
+ }
+ coverage_offset = ftell(gpos);
+ fseek(gpos,subtable_start+4,SEEK_SET);
+ putshort(gpos,coverage_offset-subtable_start);
+ fseek(gpos,0,SEEK_END);
+ dumpcoveragetable(gpos,base);
+
+ /* We tried sharing the mark table, (among all these sub-tables) but */
+ /* that doesn't work because we need to be able to reorder the sub-tables */
+ markglyphs = allmarkglyphs(marks,classcnt);
+ coverage_offset = ftell(gpos);
+ dumpcoveragetable(gpos,markglyphs);
+ markarray_offset = ftell(gpos);
+ for ( cnt=0; markglyphs[cnt]!=NULL; ++cnt );
+ putshort(gpos,cnt);
+ offset = 2+4*cnt;
+ for ( j=0; j<cnt; ++j ) {
+ if ( classcnt==0 ) {
+ putshort(gpos,0); /* Only one class */
+ ap = NULL;
+ } else {
+ for ( k=0, ac=_ac; k<classcnt; ac=ac->next ) {
+ if ( ac->matches ) {
+ for ( ap = markglyphs[j]->anchor; ap!=NULL && (ap->anchor!=ac || ap->type!=at_mark);
+ ap=ap->next );
+ if ( ap!=NULL )
+ break;
+ ++k;
+ }
+ }
+ putshort(gpos,k);
+ }
+ putshort(gpos,offset);
+ offset += 6;
+ if ( ap!=NULL && (ap->xadjust.corrections!=NULL || ap->yadjust.corrections!=NULL ))
+ offset += 4 + DevTabLen(&ap->xadjust) + DevTabLen(&ap->yadjust);
+ else
+ if ( gi->is_ttf && ap->has_ttf_pt )
+ offset += 2;
+ }
+ for ( j=0; j<cnt; ++j ) {
+ for ( k=0, ac=_ac; k<classcnt; ac=ac->next ) {
+ if ( ac->matches ) {
+ for ( ap = markglyphs[j]->anchor; ap!=NULL && (ap->anchor!=ac || ap->type!=at_mark);
+ ap=ap->next );
+ if ( ap!=NULL )
+ break;
+ ++k;
+ }
+ }
+ dumpanchor(gpos,ap,gi->is_ttf);
+ }
+ if ( markglyphs!=marks[0] )
+ free(markglyphs);
+
+ fseek(gpos,subtable_start+2,SEEK_SET); /* mark coverage table offset */
+ putshort(gpos,coverage_offset-subtable_start);
+ fseek(gpos,4,SEEK_CUR);
+ putshort(gpos,markarray_offset-subtable_start);
+
+ fseek(gpos,0,SEEK_END);
+}
+
+static void dumpGSUBsimplesubs(FILE *gsub,SplineFont *sf,struct lookup_subtable *sub) {
+ int cnt, diff, ok = true;
+ int32 coverage_pos, end;
+ SplineChar **glyphs, ***maps;
+
+ glyphs = SFOrderedGlyphsWithPSTinSubtable(sf,sub);
+ maps = generateMapList(glyphs,sub);
+
+ diff = (*maps[0])->ttf_glyph - glyphs[0]->ttf_glyph;
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt)
+ if ( diff!= maps[cnt][0]->ttf_glyph-glyphs[cnt]->ttf_glyph ) ok = false;
+
+ if ( ok ) {
+ putshort(gsub,1); /* delta format */
+ coverage_pos = ftell(gsub);
+ putshort(gsub,0); /* offset to coverage table */
+ putshort(gsub,diff);
+ } else {
+ putshort(gsub,2); /* glyph list format */
+ coverage_pos = ftell(gsub);
+ putshort(gsub,0); /* offset to coverage table */
+ putshort(gsub,cnt);
+ for ( cnt = 0; glyphs[cnt]!=NULL; ++cnt )
+ putshort(gsub,(*maps[cnt])->ttf_glyph);
+ }
+ end = ftell(gsub);
+ fseek(gsub,coverage_pos,SEEK_SET);
+ putshort(gsub,end-coverage_pos+2);
+ fseek(gsub,end,SEEK_SET);
+ dumpcoveragetable(gsub,glyphs);
+
+ free(glyphs);
+ GlyphMapFree(maps);
+}
+
+static void dumpGSUBmultiplesubs(FILE *gsub,SplineFont *sf,struct lookup_subtable *sub) {
+ int cnt, offset;
+ int32 coverage_pos, end;
+ int gc;
+ SplineChar **glyphs, ***maps;
+
+ glyphs = SFOrderedGlyphsWithPSTinSubtable(sf,sub);
+ maps = generateMapList(glyphs,sub);
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt);
+
+ putshort(gsub,1); /* glyph list format */
+ coverage_pos = ftell(gsub);
+ putshort(gsub,0); /* offset to coverage table */
+ putshort(gsub,cnt);
+ offset = 6+2*cnt;
+ for ( cnt = 0; glyphs[cnt]!=NULL; ++cnt ) {
+ putshort(gsub,offset);
+ if (maps[cnt] == NULL) {
+ fprintf( stderr, "maps[%d] is null; glyphs[%d] is \"%s\"; lookup name is \"%s\".\n" , cnt , cnt , (glyphs[cnt]->name ? glyphs[cnt]->name : ""), sub->subtable_name) ;
+ }
+ for ( gc=0; maps[cnt][gc]!=NULL; ++gc );
+ offset += 2+2*gc;
+ }
+ for ( cnt = 0; glyphs[cnt]!=NULL; ++cnt ) {
+ for ( gc=0; maps[cnt][gc]!=NULL; ++gc );
+ putshort(gsub,gc);
+ for ( gc=0; maps[cnt][gc]!=NULL; ++gc )
+ putshort(gsub,maps[cnt][gc]->ttf_glyph);
+ }
+ end = ftell(gsub);
+ fseek(gsub,coverage_pos,SEEK_SET);
+ putshort(gsub,end-coverage_pos+2);
+ fseek(gsub,end,SEEK_SET);
+ dumpcoveragetable(gsub,glyphs);
+
+ free(glyphs);
+ GlyphMapFree(maps);
+}
+
+static int AllToBeOutput(LigList *lig) {
+ struct splinecharlist *cmp;
+
+ if ( lig->lig->u.lig.lig->ttf_glyph==-1 ||
+ lig->first->ttf_glyph==-1 )
+return( 0 );
+ for ( cmp=lig->components; cmp!=NULL; cmp=cmp->next )
+ if ( cmp->sc->ttf_glyph==-1 )
+return( 0 );
+return( true );
+}
+
+static void dumpGSUBligdata(FILE *gsub,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ int32 coverage_pos, next_val_pos, here, lig_list_start;
+ int cnt, i, pcnt, lcnt, max=100, j;
+ uint16 *offsets=NULL, *ligoffsets=malloc(max*sizeof(uint16));
+ SplineChar **glyphs;
+ LigList *ll;
+ struct splinecharlist *scl;
+
+ glyphs = SFOrderedGlyphsWithPSTinSubtable(sf,sub);
+ cnt=0;
+ if ( glyphs!=NULL ) for ( ; glyphs[cnt]!=NULL; ++cnt );
+
+ putshort(gsub,1); /* only one format for ligatures */
+ coverage_pos = ftell(gsub);
+ putshort(gsub,0); /* offset to coverage table */
+ putshort(gsub,cnt);
+ next_val_pos = ftell(gsub);
+ if ( glyphs!=NULL )
+ offsets = malloc(cnt*sizeof(int16));
+ for ( i=0; i<cnt; ++i )
+ putshort(gsub,0);
+ for ( i=0; i<cnt; ++i ) {
+ offsets[i] = ftell(gsub)-coverage_pos+2;
+ for ( pcnt = 0, ll = glyphs[i]->ligofme; ll!=NULL; ll=ll->next )
+ if ( ll->lig->subtable==sub && AllToBeOutput(ll))
+ ++pcnt;
+ putshort(gsub,pcnt);
+ if ( pcnt>=max ) {
+ max = pcnt+100;
+ ligoffsets = realloc(ligoffsets,max*sizeof(int));
+ }
+ lig_list_start = ftell(gsub);
+ for ( j=0; j<pcnt; ++j )
+ putshort(gsub,0); /* Place holders */
+ for ( pcnt=0, ll = glyphs[i]->ligofme; ll!=NULL; ll=ll->next ) {
+ if ( ll->lig->subtable==sub && AllToBeOutput(ll)) {
+ ligoffsets[pcnt] = ftell(gsub)-lig_list_start+2;
+ putshort(gsub,ll->lig->u.lig.lig->ttf_glyph);
+ for ( lcnt=0, scl=ll->components; scl!=NULL; scl=scl->next ) ++lcnt;
+ putshort(gsub, lcnt+1);
+ if ( lcnt+1>at->os2.maxContext )
+ at->os2.maxContext = lcnt+1;
+ for ( scl=ll->components; scl!=NULL; scl=scl->next )
+ putshort(gsub, scl->sc->ttf_glyph );
+ ++pcnt;
+ }
+ }
+ fseek(gsub,lig_list_start,SEEK_SET);
+ for ( j=0; j<pcnt; ++j )
+ putshort(gsub,ligoffsets[j]);
+ fseek(gsub,0,SEEK_END);
+ }
+ free(ligoffsets);
+ if ( glyphs!=NULL ) {
+ here = ftell(gsub);
+ fseek(gsub,coverage_pos,SEEK_SET);
+ putshort(gsub,here-coverage_pos+2);
+ fseek(gsub,next_val_pos,SEEK_SET);
+ for ( i=0; i<cnt; ++i )
+ putshort(gsub,offsets[i]);
+ fseek(gsub,here,SEEK_SET);
+ dumpcoveragetable(gsub,glyphs);
+ free(glyphs);
+ free(offsets);
+ }
+}
+
+static int ui16cmp(const void *_i1, const void *_i2) {
+ if ( *(const uint16 *) _i1 > *(const uint16 *) _i2 )
+return( 1 );
+ if ( *(const uint16 *) _i1 < *(const uint16 *) _i2 )
+return( -1 );
+
+return( 0 );
+}
+
+static uint16 *FigureInitialClasses(FPST *fpst) {
+ uint16 *initial = malloc((fpst->nccnt+1)*sizeof(uint16));
+ int i, cnt, j;
+
+ initial[fpst->nccnt] = 0xffff;
+ for ( i=cnt=0; i<fpst->rule_cnt; ++i ) {
+ for ( j=0; j<cnt ; ++j )
+ if ( initial[j] == fpst->rules[i].u.class.nclasses[0] )
+ break;
+ if ( j==cnt )
+ initial[cnt++] = fpst->rules[i].u.class.nclasses[0];
+ }
+ qsort(initial,cnt,sizeof(uint16),ui16cmp);
+ initial[cnt] = 0xffff;
+return( initial );
+}
+
+static SplineChar **OrderedInitialGlyphs(SplineFont *sf,FPST *fpst) {
+ SplineChar **glyphs, *sc;
+ int i, j, cnt, ch;
+ char *pt, *names;
+
+ glyphs = malloc((fpst->rule_cnt+1)*sizeof(SplineChar *));
+ for ( i=cnt=0; i<fpst->rule_cnt; ++i ) {
+ names = fpst->rules[i].u.glyph.names;
+ pt = strchr(names,' ');
+ if ( pt==NULL ) pt = names+strlen(names);
+ ch = *pt; *pt = '\0';
+ sc = SFGetChar(sf,-1,names);
+ *pt = ch;
+ for ( j=0; j<cnt; ++j )
+ if ( glyphs[j]==sc )
+ break;
+ if ( j==cnt && sc!=NULL )
+ glyphs[cnt++] = sc;
+ }
+ glyphs[cnt] = NULL;
+ if ( cnt==0 )
+return( glyphs );
+
+ for ( i=0; glyphs[i+1]!=NULL; ++i ) for ( j=i+1; glyphs[j]!=NULL; ++j ) {
+ if ( glyphs[i]->ttf_glyph > glyphs[j]->ttf_glyph ) {
+ sc = glyphs[i];
+ glyphs[i] = glyphs[j];
+ glyphs[j] = sc;
+ }
+ }
+return( glyphs );
+}
+
+static int NamesStartWith(SplineChar *sc,char *names ) {
+ char *pt;
+
+ pt = strchr(names,' ');
+ if ( pt==NULL ) pt = names+strlen(names);
+ if ( pt-names!=strlen(sc->name))
+return( false );
+
+return( strncmp(sc->name,names,pt-names)==0 );
+}
+
+static int CntRulesStartingWith(FPST *fpst,SplineChar *sc) {
+ int i, cnt;
+
+ for ( i=cnt=0; i<fpst->rule_cnt; ++i ) {
+ if ( NamesStartWith(sc,fpst->rules[i].u.glyph.names))
+ ++cnt;
+ }
+return( cnt );
+}
+
+static int CntRulesStartingWithClass(FPST *fpst,uint16 cval) {
+ int i, cnt;
+
+ for ( i=cnt=0; i<fpst->rule_cnt; ++i ) {
+ if ( fpst->rules[i].u.class.nclasses[0]==cval )
+ ++cnt;
+ }
+return( cnt );
+}
+
+static void dumpg___ContextChainGlyphs(FILE *lfile,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ FPST *fpst = sub->fpst;
+ int iscontext = fpst->type==pst_contextpos || fpst->type==pst_contextsub;
+ uint32 base = ftell(lfile);
+ int i,cnt, subcnt, j,k,l, maxcontext,curcontext;
+ SplineChar **glyphs, **subglyphs;
+ int lc;
+
+ glyphs = OrderedInitialGlyphs(sf,fpst);
+ for ( cnt=0; glyphs[cnt]!=NULL; ++cnt );
+
+ putshort(lfile,1); /* Sub format 1 => glyph lists */
+ putshort(lfile,(3+cnt)*sizeof(short)); /* offset to coverage */
+ putshort(lfile,cnt);
+ for ( i=0; i<cnt; ++i )
+ putshort(lfile,0); /* Offset to rule */
+ dumpcoveragetable(lfile,glyphs);
+
+ maxcontext = 0;
+
+ for ( i=0; i<cnt; ++i ) {
+ uint32 pos = ftell(lfile);
+ fseek(lfile,base+(3+i)*sizeof(short),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ subcnt = CntRulesStartingWith(fpst,glyphs[i]);
+ putshort(lfile,subcnt);
+ for ( j=0; j<subcnt; ++j )
+ putshort(lfile,0);
+ for ( j=k=0; k<fpst->rule_cnt; ++k ) if ( NamesStartWith(glyphs[i],fpst->rules[k].u.glyph.names )) {
+ uint32 subpos = ftell(lfile);
+ fseek(lfile,pos+(1+j)*sizeof(short),SEEK_SET);
+ putshort(lfile,subpos-pos);
+ fseek(lfile,subpos,SEEK_SET);
+
+ for ( l=lc=0; l<fpst->rules[k].lookup_cnt; ++l )
+ if ( fpst->rules[k].lookups[l].lookup->lookup_index!=-1 )
+ ++lc;
+ if ( iscontext ) {
+ subglyphs = SFGlyphsFromNames(sf,fpst->rules[k].u.glyph.names);
+ for ( l=0; subglyphs[l]!=NULL; ++l );
+ putshort(lfile,l);
+ curcontext = l;
+ putshort(lfile,lc);
+ for ( l=1; subglyphs[l]!=NULL; ++l )
+ putshort(lfile,subglyphs[l]->ttf_glyph);
+ free(subglyphs);
+ } else {
+ subglyphs = SFGlyphsFromNames(sf,fpst->rules[k].u.glyph.back);
+ for ( l=0; subglyphs[l]!=NULL; ++l );
+ putshort(lfile,l);
+ curcontext = l;
+ for ( l=0; subglyphs[l]!=NULL; ++l )
+ putshort(lfile,subglyphs[l]->ttf_glyph);
+ free(subglyphs);
+ subglyphs = SFGlyphsFromNames(sf,fpst->rules[k].u.glyph.names);
+ for ( l=0; subglyphs[l]!=NULL; ++l );
+ putshort(lfile,l);
+ curcontext += l;
+ for ( l=1; subglyphs[l]!=NULL; ++l )
+ putshort(lfile,subglyphs[l]->ttf_glyph);
+ free(subglyphs);
+ subglyphs = SFGlyphsFromNames(sf,fpst->rules[k].u.glyph.fore);
+ for ( l=0; subglyphs[l]!=NULL; ++l );
+ putshort(lfile,l);
+ curcontext += l;
+ for ( l=0; subglyphs[l]!=NULL; ++l )
+ putshort(lfile,subglyphs[l]->ttf_glyph);
+ free(subglyphs);
+ putshort(lfile,lc);
+ }
+ for ( l=0; l<fpst->rules[k].lookup_cnt; ++l )
+ if ( fpst->rules[k].lookups[l].lookup->lookup_index!=-1 ) {
+ putshort(lfile,fpst->rules[k].lookups[l].seq);
+ putshort(lfile,fpst->rules[k].lookups[l].lookup->lookup_index);
+ }
+ ++j;
+ if ( curcontext>maxcontext ) maxcontext = curcontext;
+ }
+ }
+ free(glyphs);
+
+ if ( maxcontext>at->os2.maxContext )
+ at->os2.maxContext = maxcontext;
+}
+
+static void dumpg___ContextChainClass(FILE *lfile,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ FPST *fpst = sub->fpst;
+ int iscontext = fpst->type==pst_contextpos || fpst->type==pst_contextsub;
+ uint32 base = ftell(lfile), rulebase, pos, subpos, npos;
+ uint16 *initialclasses, *iclass, *bclass, *lclass;
+ SplineChar **iglyphs, **bglyphs, **lglyphs, **glyphs;
+ int i,ii,cnt, subcnt, j,k,l , maxcontext,curcontext;
+ int lc;
+
+ putshort(lfile,2); /* Sub format 2 => class */
+ putshort(lfile,0); /* offset to coverage table */
+ if ( iscontext )
+ putshort(lfile,0); /* offset to input classdef */
+ else {
+ putshort(lfile,0); /* offset to backtrack classdef */
+ putshort(lfile,0); /* offset to input classdef */
+ putshort(lfile,0); /* offset to lookahead classdef */
+ }
+ initialclasses = FigureInitialClasses(fpst);
+ putshort(lfile,fpst->nccnt);
+ rulebase = ftell(lfile);
+ for ( cnt=0; cnt<fpst->nccnt; ++cnt )
+ putshort(lfile,0);
+
+ iclass = ClassesFromNames(sf,fpst->nclass,fpst->nccnt,at->maxp.numGlyphs,&iglyphs,false);
+ lglyphs = bglyphs = NULL; bclass = lclass = NULL;
+ if ( !iscontext ) {
+ bclass = ClassesFromNames(sf,fpst->bclass,fpst->bccnt,at->maxp.numGlyphs,&bglyphs,false);
+ lclass = ClassesFromNames(sf,fpst->fclass,fpst->fccnt,at->maxp.numGlyphs,&lglyphs,false);
+ }
+ pos = ftell(lfile);
+ fseek(lfile,base+sizeof(uint16),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ glyphs = GlyphsFromInitialClasses(iglyphs,at->maxp.numGlyphs,iclass,initialclasses);
+ dumpcoveragetable(lfile,glyphs);
+ free(glyphs);
+ free(iglyphs); free(bglyphs); free(lglyphs);
+
+ if ( iscontext ) {
+ pos = ftell(lfile);
+ fseek(lfile,base+2*sizeof(uint16),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ DumpClass(lfile,iclass,at->maxp.numGlyphs);
+ free(iclass);
+ } else {
+ pos = ftell(lfile);
+ fseek(lfile,base+2*sizeof(uint16),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ DumpClass(lfile,bclass,at->maxp.numGlyphs);
+ if ( ClassesMatch(fpst->bccnt,fpst->bclass,fpst->nccnt,fpst->nclass)) {
+ npos = pos;
+ fseek(lfile,base+3*sizeof(uint16),SEEK_SET);
+ putshort(lfile,npos-base);
+ fseek(lfile,0,SEEK_END);
+ } else {
+ npos = ftell(lfile);
+ fseek(lfile,base+3*sizeof(uint16),SEEK_SET);
+ putshort(lfile,npos-base);
+ fseek(lfile,npos,SEEK_SET);
+ DumpClass(lfile,iclass,at->maxp.numGlyphs);
+ }
+ if ( ClassesMatch(fpst->fccnt,fpst->fclass,fpst->bccnt,fpst->bclass)) {
+ fseek(lfile,base+4*sizeof(uint16),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,0,SEEK_END);
+ } else if ( ClassesMatch(fpst->fccnt,fpst->fclass,fpst->nccnt,fpst->nclass)) {
+ fseek(lfile,base+4*sizeof(uint16),SEEK_SET);
+ putshort(lfile,npos-base);
+ fseek(lfile,0,SEEK_END);
+ } else {
+ pos = ftell(lfile);
+ fseek(lfile,base+4*sizeof(uint16),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ DumpClass(lfile,lclass,at->maxp.numGlyphs);
+ }
+ free(iclass); free(bclass); free(lclass);
+ }
+
+ ii=0;
+ for ( i=0; i<fpst->nccnt; ++i ) {
+ if ( initialclasses[ii]!=i ) {
+ /* This class isn't an initial one, so leave it's rule pointer NULL */
+ } else {
+ ++ii;
+ pos = ftell(lfile);
+ fseek(lfile,rulebase+i*sizeof(short),SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ subcnt = CntRulesStartingWithClass(fpst,i);
+ putshort(lfile,subcnt);
+ for ( j=0; j<subcnt; ++j )
+ putshort(lfile,0);
+ for ( j=k=0; k<fpst->rule_cnt; ++k ) if ( i==fpst->rules[k].u.class.nclasses[0] ) {
+ subpos = ftell(lfile);
+ fseek(lfile,pos+(1+j)*sizeof(short),SEEK_SET);
+ putshort(lfile,subpos-pos);
+ fseek(lfile,subpos,SEEK_SET);
+
+ for ( l=lc=0; l<fpst->rules[k].lookup_cnt; ++l )
+ if ( fpst->rules[k].lookups[l].lookup->lookup_index!=-1 )
+ ++lc;
+ if ( iscontext ) {
+ putshort(lfile,fpst->rules[k].u.class.ncnt);
+ putshort(lfile,lc);
+ for ( l=1; l<fpst->rules[k].u.class.ncnt; ++l )
+ putshort(lfile,fpst->rules[k].u.class.nclasses[l]);
+ } else {
+ putshort(lfile,fpst->rules[k].u.class.bcnt);
+ for ( l=0; l<fpst->rules[k].u.class.bcnt; ++l )
+ putshort(lfile,fpst->rules[k].u.class.bclasses[l]);
+ putshort(lfile,fpst->rules[k].u.class.ncnt);
+ for ( l=1; l<fpst->rules[k].u.class.ncnt; ++l )
+ putshort(lfile,fpst->rules[k].u.class.nclasses[l]);
+ putshort(lfile,fpst->rules[k].u.class.fcnt);
+ for ( l=0; l<fpst->rules[k].u.class.fcnt; ++l )
+ putshort(lfile,fpst->rules[k].u.class.fclasses[l]);
+ putshort(lfile,lc);
+ }
+ for ( l=0; l<fpst->rules[k].lookup_cnt; ++l )
+ if ( fpst->rules[k].lookups[l].lookup->lookup_index!=-1 ) {
+ putshort(lfile,fpst->rules[k].lookups[l].seq);
+ putshort(lfile,fpst->rules[k].lookups[l].lookup->lookup_index);
+ }
+ ++j;
+ }
+ }
+ }
+ free(initialclasses);
+
+ maxcontext = 0;
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ curcontext = fpst->rules[i].u.class.ncnt+fpst->rules[i].u.class.bcnt+fpst->rules[i].u.class.fcnt;
+ if ( curcontext>maxcontext ) maxcontext = curcontext;
+ }
+ if ( maxcontext>at->os2.maxContext )
+ at->os2.maxContext = maxcontext;
+}
+
+static void dumpg___ContextChainCoverage(FILE *lfile,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ FPST *fpst = sub->fpst;
+ int iscontext = fpst->type==pst_contextpos || fpst->type==pst_contextsub;
+ uint32 base = ftell(lfile), ibase, lbase, bbase;
+ int i, l;
+ SplineChar **glyphs;
+ int curcontext;
+ int lc;
+
+ if ( fpst->rule_cnt!=1 )
+ IError("Bad rule cnt in coverage context lookup");
+ if ( fpst->format==pst_reversecoverage && fpst->rules[0].u.rcoverage.always1!=1 )
+ IError("Bad input count in reverse coverage lookup" );
+
+ putshort(lfile,3); /* Sub format 3 => coverage */
+ for ( l=lc=0; l<fpst->rules[0].lookup_cnt; ++l )
+ if ( fpst->rules[0].lookups[l].lookup->lookup_index!=-1 )
+ ++lc;
+ if ( iscontext ) {
+ putshort(lfile,fpst->rules[0].u.coverage.ncnt);
+ putshort(lfile,lc);
+ for ( i=0; i<fpst->rules[0].u.coverage.ncnt; ++i )
+ putshort(lfile,0);
+ for ( i=0; i<fpst->rules[0].lookup_cnt; ++i )
+ if ( fpst->rules[0].lookups[i].lookup->lookup_index!=-1 ) {
+ putshort(lfile,fpst->rules[0].lookups[i].seq);
+ putshort(lfile,fpst->rules[0].lookups[i].lookup->lookup_index);
+ }
+ for ( i=0; i<fpst->rules[0].u.coverage.ncnt; ++i ) {
+ uint32 pos = ftell(lfile);
+ fseek(lfile,base+6+2*i,SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ glyphs = OrderedGlyphsFromNames(sf,fpst->rules[0].u.coverage.ncovers[i]);
+ dumpcoveragetable(lfile,glyphs);
+ free(glyphs);
+ }
+ } else {
+ if ( fpst->format==pst_reversecoverage ) {
+ ibase = ftell(lfile);
+ putshort(lfile,0);
+ }
+ putshort(lfile,fpst->rules[0].u.coverage.bcnt);
+ bbase = ftell(lfile);
+ for ( i=0; i<fpst->rules[0].u.coverage.bcnt; ++i )
+ putshort(lfile,0);
+ if ( fpst->format==pst_coverage ) {
+ putshort(lfile,fpst->rules[0].u.coverage.ncnt);
+ ibase = ftell(lfile);
+ for ( i=0; i<fpst->rules[0].u.coverage.ncnt; ++i )
+ putshort(lfile,0);
+ }
+ putshort(lfile,fpst->rules[0].u.coverage.fcnt);
+ lbase = ftell(lfile);
+ for ( i=0; i<fpst->rules[0].u.coverage.fcnt; ++i )
+ putshort(lfile,0);
+ if ( fpst->format==pst_coverage ) {
+ putshort(lfile,lc);
+ for ( i=0; i<fpst->rules[0].lookup_cnt; ++i )
+ if ( fpst->rules[0].lookups[i].lookup->lookup_index!=-1 ) {
+ putshort(lfile,fpst->rules[0].lookups[i].seq);
+ putshort(lfile,fpst->rules[0].lookups[i].lookup->lookup_index);
+ }
+ } else { /* reverse coverage */
+ glyphs = SFGlyphsFromNames(sf,fpst->rules[0].u.rcoverage.replacements);
+ for ( i=0; glyphs[i]!=0; ++i );
+ putshort(lfile,i);
+ for ( i=0; glyphs[i]!=0; ++i )
+ putshort(lfile,glyphs[i]->ttf_glyph);
+ }
+ for ( i=0; i<fpst->rules[0].u.coverage.ncnt; ++i ) {
+ uint32 pos = ftell(lfile);
+ fseek(lfile,ibase+2*i,SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ glyphs = OrderedGlyphsFromNames(sf,fpst->rules[0].u.coverage.ncovers[i]);
+ dumpcoveragetable(lfile,glyphs);
+ free(glyphs);
+ }
+ for ( i=0; i<fpst->rules[0].u.coverage.bcnt; ++i ) {
+ uint32 pos = ftell(lfile);
+ fseek(lfile,bbase+2*i,SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ glyphs = OrderedGlyphsFromNames(sf,fpst->rules[0].u.coverage.bcovers[i]);
+ dumpcoveragetable(lfile,glyphs);
+ free(glyphs);
+ }
+ for ( i=0; i<fpst->rules[0].u.coverage.fcnt; ++i ) {
+ uint32 pos = ftell(lfile);
+ fseek(lfile,lbase+2*i,SEEK_SET);
+ putshort(lfile,pos-base);
+ fseek(lfile,pos,SEEK_SET);
+ glyphs = OrderedGlyphsFromNames(sf,fpst->rules[0].u.coverage.fcovers[i]);
+ dumpcoveragetable(lfile,glyphs);
+ free(glyphs);
+ }
+ }
+
+ curcontext = fpst->rules[0].u.coverage.ncnt+fpst->rules[0].u.coverage.bcnt+fpst->rules[0].u.coverage.fcnt;
+ if ( curcontext>at->os2.maxContext )
+ at->os2.maxContext = curcontext;
+}
+
+static void dumpg___ContextChain(FILE *lfile,SplineFont *sf,
+ struct lookup_subtable *sub, struct alltabs *at) {
+ FPST *fpst = sub->fpst;
+
+ switch ( fpst->format ) {
+ case pst_glyphs:
+ dumpg___ContextChainGlyphs(lfile,sf,sub,at);
+ break;
+ case pst_class:
+ dumpg___ContextChainClass(lfile,sf,sub,at);
+ break;
+ case pst_coverage:
+ case pst_reversecoverage:
+ dumpg___ContextChainCoverage(lfile,sf,sub,at);
+ break;
+ }
+
+ fseek(lfile,0,SEEK_END);
+
+}
+
+static void AnchorsAway(FILE *lfile,SplineFont *sf,
+ struct lookup_subtable *sub, struct glyphinfo *gi ) {
+ SplineChar **base, **lig, **mkmk;
+ AnchorClass *ac, *acfirst;
+ SplineChar ***marks;
+ int *subcnts;
+ int cmax, classcnt;
+ int i;
+
+ marks = malloc((cmax=20)*sizeof(SplineChar **));
+ subcnts = malloc(cmax*sizeof(int));
+
+ classcnt = 0;
+ acfirst = NULL;
+ for ( ac=sf->anchor; ac!=NULL; ac = ac->next ) {
+ ac->matches = false;
+ if ( ac->subtable==sub && !ac->processed ) {
+ if ( acfirst == NULL )
+ acfirst = ac;
+ if ( ac->type==act_curs )
+ continue;
+ else if ( ac->has_mark && ac->has_base ) {
+ ac->matches = ac->processed = true;
+ ++classcnt;
+ }
+ }
+ }
+ if ( classcnt>cmax ) {
+ marks = realloc(marks,(cmax=classcnt+10)*sizeof(SplineChar **));
+ subcnts = realloc(subcnts,cmax*sizeof(int));
+ }
+ AnchorClassDecompose(sf,acfirst,classcnt,subcnts,marks,&base,&lig,&mkmk,gi);
+ switch ( sub->lookup->lookup_type ) {
+ case gpos_mark2base:
+ if ( marks[0]!=NULL && base!=NULL )
+ dumpgposAnchorData(lfile,acfirst,at_basechar,marks,base,classcnt,gi);
+ break;
+ case gpos_mark2ligature:
+ if ( marks[0]!=NULL && lig!=NULL )
+ dumpgposAnchorData(lfile,acfirst,at_baselig,marks,lig,classcnt,gi);
+ break;
+ case gpos_mark2mark:
+ if ( marks[0]!=NULL && mkmk!=NULL )
+ dumpgposAnchorData(lfile,acfirst,at_basemark,marks,mkmk,classcnt,gi);
+ break;
+ default:;
+ }
+ for ( i=0; i<classcnt; ++i )
+ free(marks[i]);
+ free(base);
+ free(lig);
+ free(mkmk);
+ free(marks);
+ free(subcnts);
+}
+
+static int lookup_size_cmp(const void *_l1, const void *_l2) {
+ const OTLookup *l1 = *(OTLookup **) _l1, *l2 = *(OTLookup **) _l2;
+return( l1->lookup_length-l2->lookup_length );
+}
+
+static int FPSTRefersToOTL(FPST *fpst,OTLookup *otl) {
+ int i, j;
+
+ if ( fpst==NULL || fpst->type == pst_reversesub )
+return( false );
+ for ( i=0; i<fpst->rule_cnt; ++i ) {
+ for ( j=0; j< fpst->rules[i].lookup_cnt; ++j )
+ if ( fpst->rules[i].lookups[j].lookup == otl )
+return( true );
+ }
+return( false );
+}
+
+static int OnlyMac(OTLookup *otl, OTLookup *all) {
+ FeatureScriptLangList *features = otl->features;
+ int anymac = 0;
+ struct lookup_subtable *sub;
+
+ switch ( otl->lookup_type ) {
+ /* These two lookup types are mac only */
+ case kern_statemachine: case morx_indic: case morx_context: case morx_insert:
+ return( true );
+ /* These lookup types are OpenType only */
+ case gsub_multiple: case gsub_alternate: case gsub_context:
+ case gsub_contextchain: case gsub_reversecchain:
+ case gpos_single: case gpos_cursive: case gpos_mark2base:
+ case gpos_mark2ligature: case gpos_mark2mark:
+ case gpos_context: case gpos_contextchain:
+ return( false );
+ /* These two can be expressed in both, and might be either */
+ case gpos_pair: case gsub_single: case gsub_ligature:
+ for ( features = otl->features; features!=NULL; features = features->next ) {
+ if ( !features->ismac )
+ return( false );
+ else
+ anymac = true;
+ }
+ /* Either it has no features at all (nested), or all its features */
+ /* are mac feature settings. Even if all are mac feature settings it */
+ /* might still be used as under control of a contextual feature */
+ /* so in both cases check for nested */
+ while ( all!=NULL ) {
+ if ( all!=otl && !all->unused &&
+ (all->lookup_type==gpos_context ||
+ all->lookup_type==gpos_contextchain ||
+ all->lookup_type==gsub_context ||
+ all->lookup_type==gsub_contextchain /*||
+ all->lookup_type==gsub_reversecchain*/ )) {
+ for ( sub=all->subtables; sub!=NULL; sub=sub->next ) if ( !sub->unused && sub->fpst!=NULL ) {
+ if ( FPSTRefersToOTL(sub->fpst,otl) )
+ return( false );
+ }
+ }
+ all = all->next;
+ }
+ if ( anymac )
+ return( true );
+ /* As far as I can tell, this lookup isn't used at all */
+ /* Let's output it anyway, just in case we ever support some other */
+ /* table that uses GPOS/GSUB lookups (I think JUST) */
+ return( false );
+ default:;
+ }
+ /* Should never get here, but gcc probably thinks we might */
+return( true );
+}
+
+static void otf_dumpALookup(FILE *lfile, OTLookup *otl, SplineFont *sf,
+ struct alltabs *at) {
+ struct lookup_subtable *sub;
+ int lookup_sub_table_contains_no_data_count = 0;
+ int lookup_sub_table_is_too_big_count = 0;
+
+ otl->lookup_offset = ftell(lfile);
+ for ( sub = otl->subtables; sub!=NULL; sub=sub->next ) {
+ sub->extra_subtables = NULL;
+ if ( sub->unused )
+ sub->subtable_offset = -1;
+ else {
+ sub->subtable_offset = ftell(lfile);
+ switch ( otl->lookup_type ) {
+ /* GPOS lookup types */
+ case gpos_single:
+ dumpGPOSsimplepos(lfile,sf,sub);
+ break;
+
+ case gpos_pair:
+ if ( at->os2.maxContext<2 )
+ at->os2.maxContext = 2;
+ if ( sub->kc!=NULL )
+ dumpgposkernclass(lfile,sf,sub,at);
+ else
+ dumpGPOSpairpos(lfile,sf,sub);
+ break;
+
+ case gpos_cursive:
+ dumpgposCursiveAttach(lfile,sf,sub,&at->gi);
+ break;
+
+ case gpos_mark2base:
+ case gpos_mark2ligature:
+ case gpos_mark2mark:
+ AnchorsAway(lfile,sf,sub,&at->gi);
+ break;
+
+ case gpos_contextchain:
+ case gpos_context:
+ dumpg___ContextChain(lfile,sf,sub,at);
+ break;
+
+ /* GSUB lookup types */
+ case gsub_single:
+ dumpGSUBsimplesubs(lfile,sf,sub);
+ break;
+
+ case gsub_multiple:
+ case gsub_alternate:
+ dumpGSUBmultiplesubs(lfile,sf,sub);
+ break;
+
+ case gsub_ligature:
+ dumpGSUBligdata(lfile,sf,sub,at);
+ break;
+
+ case gsub_contextchain:
+ case gsub_context:
+ case gsub_reversecchain:
+ dumpg___ContextChain(lfile,sf,sub,at);
+ break;
+ default:;
+ }
+ if ( ftell(lfile)-sub->subtable_offset==0 ) {
+ if ( lookup_sub_table_contains_no_data_count < 32 ) {
+ IError( "Lookup sub table, %s in %s, contains no data.\n",
+ sub->subtable_name, sub->lookup->lookup_name );
+ lookup_sub_table_contains_no_data_count ++;
+ }
+ sub->unused = true;
+ sub->subtable_offset = -1;
+ } else if ( sub->extra_subtables==NULL &&
+ ftell(lfile)-sub->subtable_offset>65535 )
+ if ( lookup_sub_table_is_too_big_count < 32 ) {
+ IError( "Lookup sub table, %s in %s, is too big. Will not be useable.\n",
+ sub->subtable_name, sub->lookup->lookup_name );
+ lookup_sub_table_is_too_big_count ++;
+ }
+ }
+ }
+ otl->lookup_length = ftell(lfile)-otl->lookup_offset;
+}
+
+static FILE *G___figureLookups(SplineFont *sf,int is_gpos,
+ struct alltabs *at) {
+ OTLookup *otl;
+ struct lookup_subtable *sub;
+ int index, i,j;
+ FILE *final;
+ FILE *lfile = tmpfile2();
+ OTLookup **sizeordered;
+ OTLookup *all = is_gpos ? sf->gpos_lookups : sf->gsub_lookups;
+ char *buffer;
+ int len;
+
+ index = 0;
+ for ( otl=all; otl!=NULL; otl=otl->next ) {
+ if ( otl->unused || OnlyMac(otl,all) || otl->only_jstf || otl->temporary_kern )
+ otl->lookup_index = -1;
+ else
+ otl->lookup_index = index++;
+ }
+ for ( otl=all; otl!=NULL; otl=otl->next ) {
+ if ( otl->lookup_index!=-1 ) {
+ otf_dumpALookup(lfile, otl, sf, at );
+ }
+ }
+ if ( is_gpos )
+ AnchorGuessContext(sf,at);
+
+ /* We don't need to reorder short files */
+ if ( ftell(lfile)<65536 )
+return( lfile );
+
+ /* Order the lookups so that the smallest ones come first */
+ /* thus we are less likely to need extension tables */
+ /* I think it's better to order the entire lookup rather than ordering the*/
+ /* subtables -- since the extension subtable would be required for all */
+ /* subtables in the lookup, so might as well keep them all together */
+ sizeordered = malloc(index*sizeof(OTLookup *));
+ for ( otl=is_gpos ? sf->gpos_lookups : sf->gsub_lookups; otl!=NULL; otl=otl->next )
+ if ( otl->lookup_index!=-1 )
+ sizeordered[ otl->lookup_index ] = otl;
+ qsort(sizeordered,index,sizeof(OTLookup *),lookup_size_cmp);
+
+ final = tmpfile2();
+ buffer = malloc(32768);
+ for ( i=0; i<index; ++i ) {
+ uint32 diff;
+ otl = sizeordered[i];
+ fseek(lfile,otl->lookup_offset,SEEK_SET);
+ diff = ftell(final) - otl->lookup_offset;
+ otl->lookup_offset = ftell(final);
+ len = otl->lookup_length;
+ while ( len>=32768 ) {
+ int done = fread(buffer,1,32768,lfile);
+ if ( done==0 ) /* fread returns 0 on error, not EOF */
+ break;
+ fwrite(buffer,1,done,final);
+ len -= done;
+ }
+ if ( len>0 && len<=32768 ) {
+ int done = fread(buffer,1,len,lfile);
+ if ( done==0 )
+ break;
+ fwrite(buffer,1,done,final);
+ }
+ for ( sub = otl->subtables; sub!=NULL; sub=sub->next ) {
+ if ( !sub->unused ) {
+ sub->subtable_offset += diff;
+ if ( sub->extra_subtables!=NULL ) {
+ for ( j=0; sub->extra_subtables[j]!=-1; ++j )
+ sub->extra_subtables[j] += diff;
+ }
+ }
+ }
+ }
+ free(buffer);
+ free(sizeordered);
+ fclose(lfile);
+return( final );
+}
+
+struct feat_lookups {
+ uint32 tag;
+ int lcnt;
+ OTLookup **lookups;
+ int feature_id; /* Initially consecutive, but may be rearranged by sorting */
+ uint32 name_param_ptr;
+};
+
+struct langsys {
+ uint32 lang;
+ int fc;
+ int *feature_id;
+ int same_as;
+ int32 offset;
+};
+
+struct scriptset {
+ uint32 script;
+ int lc;
+ struct langsys *langsys;
+};
+
+struct ginfo {
+ int fmax, fcnt;
+ struct feat_lookups *feat_lookups;
+ int sc;
+ struct scriptset *scripts;
+};
+
+static int FindOrMakeNewFeatureLookup(struct ginfo *ginfo,OTLookup **lookups,
+ uint32 tag) {
+ int i, j;
+
+ for ( i=0; i<ginfo->fcnt; ++i ) {
+ if ( ginfo->feat_lookups[i].tag!= tag )
+ continue;
+ if ( lookups==NULL && ginfo->feat_lookups[i].lookups==NULL ) /* 'size' feature */
+return( i );
+ if ( lookups==NULL || ginfo->feat_lookups[i].lookups==NULL )
+ continue;
+ for ( j=0; lookups[j]!=NULL && ginfo->feat_lookups[i].lookups[j]!=NULL; ++j )
+ if ( ginfo->feat_lookups[i].lookups[j]!=lookups[j] )
+ break;
+ if ( ginfo->feat_lookups[i].lookups[j]==lookups[j] ) {
+ free(lookups);
+return( i );
+ }
+ }
+ if ( ginfo->fcnt>=ginfo->fmax )
+ ginfo->feat_lookups = realloc(ginfo->feat_lookups,(ginfo->fmax+=20)*sizeof(struct feat_lookups));
+ ginfo->feat_lookups[i].feature_id = i;
+ ginfo->feat_lookups[i].tag = tag;
+ ginfo->feat_lookups[i].lookups = lookups;
+ j=0;
+ if ( lookups!=NULL ) for ( ; lookups[j]!=NULL; ++j );
+ ginfo->feat_lookups[i].lcnt = j;
+ ++ginfo->fcnt;
+return( i );
+}
+
+static int feat_alphabetize(const void *_fl1, const void *_fl2) {
+ const struct feat_lookups *fl1 = _fl1, *fl2 = _fl2;
+
+ if ( fl1->tag<fl2->tag )
+return( -1 );
+ if ( fl1->tag>fl2->tag )
+return( 1 );
+
+return( 0 );
+}
+
+static int numeric_order(const void *_i1, const void *_i2) {
+ int i1 = *(const int *) _i1, i2 = *(const int *) _i2;
+
+ if ( i1<i2 )
+return( -1 );
+ if ( i1>i2 )
+return( 1 );
+
+return( 0 );
+}
+
+static int LangSysMatch(struct scriptset *s,int ils1, int ils2 ) {
+ struct langsys *ls1 = &s->langsys[ils1], *ls2 = &s->langsys[ils2];
+ int i;
+
+ if ( ls1->fc!=ls2->fc )
+return( false );
+ for ( i=0; i<ls1->fc; ++i )
+ if ( ls1->feature_id[i]!=ls2->feature_id[i] )
+return( false );
+
+return( true );
+}
+
+static void FindFeatures(SplineFont *sf,int is_gpos,struct ginfo *ginfo) {
+ uint32 *scripts, *langs, *features;
+ OTLookup **lookups;
+ int sc, lc, fc, j;
+
+ memset(ginfo,0,sizeof(struct ginfo));
+
+ scripts = SFScriptsInLookups(sf,is_gpos);
+ if ( scripts==NULL ) /* All lookups unused */
+return;
+ for ( sc=0; scripts[sc]!=0; ++sc );
+ ginfo->scripts = malloc(sc*sizeof(struct scriptset));
+ ginfo->sc = sc;
+ for ( sc=0; scripts[sc]!=0; ++sc ) {
+ langs = SFLangsInScript(sf,is_gpos,scripts[sc]);
+ for ( lc=0; langs[lc]!=0; ++lc );
+ ginfo->scripts[sc].script = scripts[sc];
+ ginfo->scripts[sc].lc = lc;
+ ginfo->scripts[sc].langsys = malloc(lc*sizeof(struct langsys));
+ for ( lc=0; langs[lc]!=0; ++lc ) {
+ features = SFFeaturesInScriptLang(sf,is_gpos,scripts[sc],langs[lc]);
+ for ( fc=0; features[fc]!=0; ++fc );
+ ginfo->scripts[sc].langsys[lc].lang = langs[lc];
+ ginfo->scripts[sc].langsys[lc].fc = fc;
+ ginfo->scripts[sc].langsys[lc].feature_id = malloc(fc*sizeof(int));
+ ginfo->scripts[sc].langsys[lc].same_as = -1;
+ for ( fc=0; features[fc]!=0; ++fc ) {
+ lookups = SFLookupsInScriptLangFeature(sf,is_gpos,scripts[sc],langs[lc],features[fc]);
+ ginfo->scripts[sc].langsys[lc].feature_id[fc] =
+ FindOrMakeNewFeatureLookup(ginfo,lookups,features[fc]);
+ /* lookups is freed or used by FindOrMakeNewFeatureLookup */
+ }
+ free(features);
+ }
+ free(langs);
+ }
+ free(scripts);
+
+ qsort(ginfo->feat_lookups,ginfo->fcnt,sizeof(struct feat_lookups),feat_alphabetize);
+
+ /* Now we've disordered the features. Find each feature_id and turn it back*/
+ /* into a feature number */
+ for ( sc=0; sc<ginfo->sc; ++sc ) {
+ for ( lc=0; lc<ginfo->scripts[sc].lc; ++lc ) {
+ int fcmax = ginfo->scripts[sc].langsys[lc].fc;
+ int *feature_id = ginfo->scripts[sc].langsys[lc].feature_id;
+ for ( fc=0; fc<fcmax; ++fc ) {
+ int id = feature_id[fc];
+ for ( j=0; j<ginfo->fcnt; ++j )
+ if ( id==ginfo->feat_lookups[j].feature_id )
+ break;
+ feature_id[fc] = j;
+ }
+ qsort(feature_id,fcmax,sizeof(int),numeric_order);
+ }
+ /* See if there are langsys tables which use exactly the same features*/
+ /* They can use the same entry in the file. This optimization seems */
+ /* to be required for Japanese vertical writing to work in Uniscribe.*/
+ for ( lc=0; lc<ginfo->scripts[sc].lc; ++lc ) {
+ for ( j=0; j<lc; ++j )
+ if ( LangSysMatch(&ginfo->scripts[sc],j,lc) ) {
+ ginfo->scripts[sc].langsys[lc].same_as = j;
+ break;
+ }
+ }
+ }
+}
+
+
+static void dump_script_table(FILE *g___,struct scriptset *ss,struct ginfo *ginfo) {
+ int i, lcnt, dflt_lang = -1;
+ uint32 base;
+ int j, req_index;
+ uint32 offset;
+
+ /* Count the languages, and find default */
+ for ( lcnt=0; lcnt<ss->lc; ++lcnt )
+ if ( ss->langsys[lcnt].lang==DEFAULT_LANG )
+ dflt_lang = lcnt;
+ if ( dflt_lang != -1 )
+ --lcnt;
+
+ base = ftell(g___);
+ putshort(g___, 0 ); /* fill in later, Default Lang Sys */
+ putshort(g___,lcnt);
+ for ( i=0; i<ss->lc; ++i ) if ( i!=dflt_lang ) {
+ putlong(g___,ss->langsys[i].lang); /* Language tag */
+ putshort(g___,0); /* Fill in later, offset to langsys */
+ }
+
+ for ( lcnt=0; lcnt<ss->lc; ++lcnt ) {
+ if ( ss->langsys[lcnt].same_as!=-1 )
+ offset = ss->langsys[ ss->langsys[lcnt].same_as ].offset;
+ else {
+ offset = ftell(g___);
+ ss->langsys[lcnt].offset = offset;
+ }
+ fseek(g___,lcnt==dflt_lang ? base :
+ lcnt<dflt_lang || dflt_lang==-1 ? base + 4 + lcnt*6 +4 :
+ base + 4 + (lcnt-1)*6 +4 ,
+ SEEK_SET );
+ putshort(g___,offset-base);
+ fseek(g___,0,SEEK_END);
+ if ( ss->langsys[lcnt].same_as==-1 ) {
+ req_index = -1;
+ for ( j=0; j<ss->langsys[lcnt].fc; ++j ) {
+ if ( ginfo->feat_lookups[ ss->langsys[lcnt].feature_id[j] ].tag == REQUIRED_FEATURE ) {
+ req_index = ss->langsys[lcnt].feature_id[j];
+ break;
+ }
+ }
+ putshort(g___,0); /* LookupOrder, always NULL */
+ putshort(g___,req_index); /* index of required feature, if any */
+ putshort(g___,ss->langsys[lcnt].fc - (req_index!=-1));
+ /* count of non-required features */
+ for ( j=0; j<ss->langsys[lcnt].fc; ++j ) if (ss->langsys[lcnt].feature_id[j]!=req_index )
+ putshort(g___,ss->langsys[lcnt].feature_id[j]);
+ }
+ }
+}
+
+static FILE *g___FigureExtensionSubTables(OTLookup *all,int startoffset,int is_gpos) {
+ OTLookup *otf;
+ struct lookup_subtable *sub;
+ int len, len2, gotmore;
+ FILE *efile;
+ int i, offset, cnt;
+ int any= false;
+
+ if ( all==NULL )
+return( NULL );
+ gotmore = true; cnt=len=0;
+ while ( gotmore ) {
+ gotmore = false;
+ offset = startoffset + 8*cnt;
+ for ( otf=all; otf!=NULL; otf=otf->next ) if ( otf->lookup_index!=-1 ) {
+ if ( otf->needs_extension )
+ continue;
+ for ( sub = otf->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->subtable_offset==-1 )
+ continue;
+ if ( sub->extra_subtables!=NULL ) {
+ for ( i=0; sub->extra_subtables[i]!=-1; ++i ) {
+ if ( sub->extra_subtables[i]+offset>65535 )
+ break;
+ }
+ if ( sub->extra_subtables[i]!=-1 )
+ break;
+ } else if ( sub->subtable_offset+offset>65535 )
+ break;
+ }
+ if ( sub!=NULL ) {
+ if ( !any ) {
+ ff_post_notice(_("Lookup potentially too big"),
+ _("Lookup %s has an\noffset bigger than 65535 bytes. This means\nFontForge must use an extension lookup to output it.\nNot all applications support extension lookups."),
+ otf->lookup_name );
+ any = true;
+ }
+ otf->needs_extension = true;
+ gotmore = true;
+ len += 8*otf->subcnt;
+ ++cnt;
+ }
+ offset -= 6+2*otf->subcnt;
+ }
+ }
+
+ if ( cnt==0 ) /* No offset overflows */
+return( NULL );
+
+ /* Now we've worked out which lookups need extension tables and marked them*/
+ /* Generate the extension tables, and update the offsets to reflect the size */
+ /* of the extensions */
+ efile = tmpfile2();
+
+ len2 = 0;
+ for ( otf=all; otf!=NULL; otf=otf->next ) if ( otf->lookup_index!=-1 ) {
+ for ( sub = otf->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->subtable_offset==-1 )
+ continue;
+ if ( sub->extra_subtables!=NULL ) {
+ for ( i=0; sub->extra_subtables[i]!=-1; ++i ) {
+ sub->extra_subtables[i] += len;
+ if ( otf->needs_extension ) {
+ int off = ftell(efile);
+ putshort(efile,1); /* exten subtable format (there's only one) */
+ putshort(efile,otf->lookup_type&0xff);
+ putlong(efile,sub->extra_subtables[i]-len2);
+ sub->extra_subtables[i] = off;
+ len2+=8;
+ }
+ }
+ } else {
+ sub->subtable_offset += len;
+ if ( otf->needs_extension ) {
+ int off = ftell(efile);
+ putshort(efile,1); /* exten subtable format (there's only one) */
+ putshort(efile,otf->lookup_type&0xff);
+ putlong(efile,sub->subtable_offset-len2);
+ sub->subtable_offset = off;
+ len2+=8;
+ }
+ }
+ }
+ }
+
+return( efile );
+}
+
+struct otffeatname *findotffeatname(uint32 tag,SplineFont *sf) {
+ struct otffeatname *fn;
+
+ for ( fn=sf->feat_names; fn!=NULL && fn->tag!=tag; fn=fn->next );
+return( fn );
+}
+
+static FILE *dumpg___info(struct alltabs *at, SplineFont *sf,int is_gpos) {
+ /* Dump out either a gpos or a gsub table. gpos handles kerns, gsub ligs */
+ /* we assume that SFFindUnusedLookups has been called */
+ FILE *lfile, *g___, *efile;
+ uint32 lookup_list_table_start, feature_list_table_start, here, scripts_start_offset;
+ struct ginfo ginfo;
+ int32 size_params_loc, size_params_ptr;
+ int i,j, cnt, scnt, offset;
+ OTLookup *otf, *all;
+ struct lookup_subtable *sub;
+ char *buf;
+ struct otffeatname *fn;
+
+ for ( fn=sf->feat_names; fn!=NULL; fn=fn->next )
+ fn->nid = 0;
+
+ FindFeatures(sf,is_gpos,&ginfo);
+ if ( ginfo.sc==0 )
+return( NULL );
+ lfile = G___figureLookups(sf,is_gpos,at);
+
+ if ( ginfo.sc==0 && ftell(lfile)==0 ) {
+ /* ftell(lfile)==0 => There are no lookups for this table */
+ /* ginfo.sc==0 => There are no scripts. */
+ /* If both are true then we don't need to output the table */
+ /* It is perfectly possible to have lookups without scripts */
+ /* (if some other table refered to them -- we don't currently */
+ /* support this, but we might some day). */
+ /* It is also possible to have scripts without lookups (to get */
+ /* around a bug in Uniscribe which only processes some scripts */
+ /* if both GPOS and GSUB entries are present. So we share scripts */
+ /* between the two tables */
+ fclose(lfile);
+ /* if ginfo.sc==0 then there will be nothing to free in the ginfo struct*/
+return( NULL );
+ }
+
+ g___ = tmpfile2();
+
+ putlong(g___,0x10000); /* version number */
+ putshort(g___,10); /* offset to script table */
+ putshort(g___,0); /* offset to features. Come back for this */
+ putshort(g___,0); /* offset to lookups. Come back for this */
+/* Now the scripts */
+ scripts_start_offset = ftell(g___);
+ putshort(g___,ginfo.sc);
+ for ( i=0; i<ginfo.sc; ++i ) {
+ putlong(g___,ginfo.scripts[i].script);
+ putshort(g___,0); /* fix up later */
+ }
+
+ /* Ok, that was the script_list_table which gives each script an offset */
+ /* Now for each script we provide a Script table which contains an */
+ /* offset to a bunch of features for the default language, and a */
+ /* a more complex situation for non-default languages. */
+ offset=2+4; /* To the script pointer at the start of table */
+ for ( i=0; i<ginfo.sc; ++i ) {
+ here = ftell(g___);
+ fseek(g___,scripts_start_offset+offset,SEEK_SET);
+ putshort(g___,here-scripts_start_offset);
+ offset+=6;
+ fseek(g___,here,SEEK_SET);
+ dump_script_table(g___,&ginfo.scripts[i],&ginfo);
+ }
+ /* And that should finish all the scripts/languages */
+
+ /* so free the ginfo script/lang data */
+ for ( i=0; i<ginfo.sc; ++i ) {
+ for ( j=0; j<ginfo.scripts[i].lc; ++j ) {
+ free( ginfo.scripts[i].langsys[j].feature_id );
+ }
+ free( ginfo.scripts[i].langsys );
+ }
+ free( ginfo.scripts );
+
+/* Now the features */
+ feature_list_table_start = ftell(g___);
+ fseek(g___,6,SEEK_SET);
+ putshort(g___,feature_list_table_start);
+ fseek(g___,0,SEEK_END);
+ putshort(g___,ginfo.fcnt); /* Number of features */
+ offset = 2+6*ginfo.fcnt; /* Offset to start of first feature table from beginning of feature_list */
+ for ( i=0; i<ginfo.fcnt; ++i ) {
+ putlong(g___,ginfo.feat_lookups[i].tag);
+ putshort(g___,offset);
+ offset += 4+2*ginfo.feat_lookups[i].lcnt;
+ }
+ /* for each feature, one feature table */
+ size_params_ptr = 0;
+ for ( i=0; i<ginfo.fcnt; ++i ) {
+ ginfo.feat_lookups[i].name_param_ptr = 0;
+ if ( ginfo.feat_lookups[i].tag==CHR('s','i','z','e') )
+ size_params_ptr = ftell(g___);
+ else if ( ginfo.feat_lookups[i].tag>=CHR('s','s','0','1') && ginfo.feat_lookups[i].tag<=CHR('s','s','2','0'))
+ ginfo.feat_lookups[i].name_param_ptr = ftell(g___);
+ putshort(g___,0); /* No feature params (we'll come back for 'size') */
+ putshort(g___,ginfo.feat_lookups[i].lcnt);/* this many lookups */
+ for ( j=0; j<ginfo.feat_lookups[i].lcnt; ++j )
+ putshort(g___,ginfo.feat_lookups[i].lookups[j]->lookup_index );
+ /* index of each lookup */
+ }
+ if ( size_params_ptr!=0 ) {
+ size_params_loc = ftell(g___);
+ fseek(g___,size_params_ptr,SEEK_SET);
+ putshort(g___,size_params_loc-size_params_ptr);
+ fseek(g___,size_params_loc,SEEK_SET);
+ putshort(g___,sf->design_size);
+ if ( sf->fontstyle_id!=0 || sf->fontstyle_name!=NULL ) {
+ putshort(g___,sf->fontstyle_id);
+ at->fontstyle_name_strid = at->next_strid++;
+ putshort(g___,at->fontstyle_name_strid);
+ } else {
+ putshort(g___,0);
+ putshort(g___,0);
+ }
+ putshort(g___,sf->design_range_bottom);
+ putshort(g___,sf->design_range_top);
+ }
+ for ( i=0; i<ginfo.fcnt; ++i ) {
+ if ( ginfo.feat_lookups[i].name_param_ptr!=0 &&
+ (fn = findotffeatname(ginfo.feat_lookups[i].tag,sf))!=NULL ) {
+ if ( fn->nid==0 )
+ fn->nid = at->next_strid++;
+ uint32 name_param_loc = ftell(g___);
+ fseek(g___,ginfo.feat_lookups[i].name_param_ptr,SEEK_SET);
+ putshort(g___,name_param_loc-ginfo.feat_lookups[i].name_param_ptr);
+ fseek(g___,name_param_loc,SEEK_SET);
+ putshort(g___,0); /* Minor version number */
+ putshort(g___,fn->nid);
+ }
+ }
+ /* And that should finish all the features */
+
+ /* so free the ginfo feature data */
+ for ( i=0; i<ginfo.fcnt; ++i )
+ free( ginfo.feat_lookups[i].lookups );
+ free( ginfo.feat_lookups );
+
+/* Now the lookups */
+ all = is_gpos ? sf->gpos_lookups : sf->gsub_lookups;
+ for ( cnt=0, otf = all; otf!=NULL; otf=otf->next ) {
+ if ( otf->lookup_index!=-1 )
+ ++cnt;
+ }
+ lookup_list_table_start = ftell(g___);
+ fseek(g___,8,SEEK_SET);
+ putshort(g___,lookup_list_table_start);
+ fseek(g___,0,SEEK_END);
+ putshort(g___,cnt);
+ offset = 2+2*cnt; /* Offset to start of first lookup table from beginning of lookup list */
+ for ( otf = all; otf!=NULL; otf=otf->next ) if ( otf->lookup_index!=-1 ) {
+ putshort(g___,offset);
+ for ( scnt=0, sub = otf->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->subtable_offset==-1 )
+ continue;
+ else if ( sub->extra_subtables!=NULL ) {
+ for ( i=0; sub->extra_subtables[i]!=-1; ++i )
+ ++scnt;
+ } else
+ ++scnt;
+ }
+ otf->subcnt = scnt;
+ offset += 6+2*scnt; /* 6 bytes header +2 per lookup */
+ if ( otf->lookup_flags & pst_usemarkfilteringset )
+ offset += 2; /* For mark filtering set, if used */
+ }
+ offset -= 2+2*cnt;
+ /* now the lookup tables */
+ /* do we need any extension sub-tables? */
+ efile=g___FigureExtensionSubTables(all,offset,is_gpos);
+ for ( otf = all; otf!=NULL; otf=otf->next ) if ( otf->lookup_index!=-1 ) {
+ putshort(g___,!otf->needs_extension ? (otf->lookup_type&0xff)
+ : is_gpos ? 9 : 7);
+ putshort(g___,(otf->lookup_flags&0xffff));
+ putshort(g___,otf->subcnt);
+ for ( sub = otf->subtables; sub!=NULL; sub=sub->next ) {
+ if ( sub->subtable_offset==-1 )
+ continue;
+ else if ( sub->extra_subtables!=NULL ) {
+ for ( i=0; sub->extra_subtables[i]!=-1; ++i )
+ putshort(g___,offset+sub->extra_subtables[i]);
+ } else
+ putshort(g___,offset+sub->subtable_offset);
+
+ /* Offset to lookup data which is in the temp file */
+ /* we keep adjusting offset so it reflects the distance between */
+ /* here and the place where the temp file will start, and then */
+ /* we need to skip l->offset bytes in the temp file */
+ /* If it's a big GPOS/SUB table we may also need some extension */
+ /* pointers, but FigureExtension will adjust for that */
+ }
+ offset -= 6+2*otf->subcnt;
+ if ( otf->lookup_flags & pst_usemarkfilteringset ) {
+ putshort(g___,otf->lookup_flags>>16);
+ offset -= 2;
+ }
+ }
+
+ buf = malloc(8096);
+ if ( efile!=NULL ) {
+ rewind(efile);
+ while ( (i=fread(buf,1,8096,efile))>0 )
+ fwrite(buf,1,i,g___);
+ fclose(efile);
+ }
+ rewind(lfile);
+ while ( (i=fread(buf,1,8096,lfile))>0 )
+ fwrite(buf,1,i,g___);
+ fclose(lfile);
+ free(buf);
+ for ( otf = all; otf!=NULL; otf=otf->next ) if ( otf->lookup_index!=-1 ) {
+ for ( sub = otf->subtables; sub!=NULL; sub=sub->next ) {
+ free(sub->extra_subtables);
+ sub->extra_subtables = NULL;
+ }
+ otf->needs_extension = false;
+ }
+return( g___ );
+}
+
+void otf_dumpgpos(struct alltabs *at, SplineFont *sf) {
+ /* Open Type, bless its annoying little heart, doesn't store kern info */
+ /* in the kern table. Of course not, how silly of me to think it might */
+ /* be consistent. It stores it in the much more complicated gpos table */
+ AnchorClass *ac;
+
+ for ( ac=sf->anchor; ac!=NULL; ac=ac->next )
+ ac->processed = false;
+
+ at->gpos = dumpg___info(at, sf,true);
+ if ( at->gpos!=NULL ) {
+ at->gposlen = ftell(at->gpos);
+ if ( at->gposlen&1 ) putc('\0',at->gpos);
+ if ( (at->gposlen+1)&2 ) putshort(at->gpos,0);
+ }
+}
+
+void otf_dumpgsub(struct alltabs *at, SplineFont *sf) {
+ /* substitutions such as: Ligatures, cjk vertical rotation replacement, */
+ /* arabic forms, small caps, ... */
+ SFLigaturePrepare(sf);
+ at->gsub = dumpg___info(at, sf, false);
+ if ( at->gsub!=NULL ) {
+ at->gsublen = ftell(at->gsub);
+ if ( at->gsublen&1 ) putc('\0',at->gsub);
+ if ( (at->gsublen+1)&2 ) putshort(at->gsub,0);
+ }
+ SFLigatureCleanup(sf);
+}
+
+int LigCaretCnt(SplineChar *sc) {
+ PST *pst;
+ int j, cnt;
+
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->type == pst_lcaret ) {
+ if ( sc->lig_caret_cnt_fixed )
+return( pst->u.lcaret.cnt );
+ else {
+ /* only output non-zero carets */
+ cnt=0;
+ for ( j=pst->u.lcaret.cnt-1; j>=0 ; --j )
+ if ( pst->u.lcaret.carets[j]!=0 )
+ ++cnt;
+return( cnt );
+ }
+ }
+ }
+return( 0 );
+}
+
+static void DumpLigCarets(FILE *gdef,SplineChar *sc) {
+ PST *pst;
+ int i, j, offset, cnt;
+
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->type == pst_lcaret )
+ break;
+ }
+ if ( pst==NULL )
+return;
+ cnt = LigCaretCnt(sc);
+ if ( cnt==0 )
+return;
+
+ if ( SCRightToLeft(sc) ) {
+ for ( i=0; i<pst->u.lcaret.cnt-1; ++i )
+ for ( j=i+1; j<pst->u.lcaret.cnt; ++j )
+ if ( pst->u.lcaret.carets[i]<pst->u.lcaret.carets[j] ) {
+ int16 temp = pst->u.lcaret.carets[i];
+ pst->u.lcaret.carets[i] = pst->u.lcaret.carets[j];
+ pst->u.lcaret.carets[j] = temp;
+ }
+ } else {
+ for ( i=0; i<pst->u.lcaret.cnt-1; ++i )
+ for ( j=i+1; j<pst->u.lcaret.cnt; ++j )
+ if ( pst->u.lcaret.carets[i]>pst->u.lcaret.carets[j] ) {
+ int16 temp = pst->u.lcaret.carets[i];
+ pst->u.lcaret.carets[i] = pst->u.lcaret.carets[j];
+ pst->u.lcaret.carets[j] = temp;
+ }
+ }
+
+ putshort(gdef,cnt); /* this many carets */
+ offset = sizeof(uint16) + sizeof(uint16)*cnt;
+ for ( i=0; i<cnt; ++i ) {
+ putshort(gdef,offset);
+ offset+=4;
+ }
+ for ( i=0; i<pst->u.lcaret.cnt; ++i ) {
+ if ( sc->lig_caret_cnt_fixed || pst->u.lcaret.carets[i]!=0 ) {
+ putshort(gdef,1); /* Format 1 */
+ putshort(gdef,pst->u.lcaret.carets[i]);
+ }
+ }
+}
+
+static int glyphnameinlist(char *haystack,char *name) {
+ char *start, *pt;
+ int ch, match, slen = strlen(name);
+
+ for ( pt=haystack ; ; ) {
+ while ( *pt==' ' ) ++pt;
+ if ( *pt=='\0' )
+return( false );
+ start=pt;
+ while ( *pt!=' ' && *pt!='\0' ) ++pt;
+ if ( pt-start==slen ) {
+ ch = *pt; *pt='\0';
+ match = strcmp(start,name);
+ *pt = ch;
+ if ( match==0 )
+return( true );
+ }
+ }
+}
+
+static int ReferencedByGSUB(SplineChar *sc) {
+ PST *pst;
+ SplineFont *sf = sc->parent;
+ int gid;
+ SplineChar *testsc;
+ char *name = sc->name;
+
+ /* If it is itself a ligature it will be referenced by GSUB */
+ /* (because we store ligatures on the glyph generated) */
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next )
+ if ( pst->type == pst_ligature )
+return( true );
+
+ for ( gid=0; gid<sf->glyphcnt; ++gid ) if ( (testsc=sf->glyphs[gid])!=NULL ) {
+ for ( pst=testsc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->type==pst_substitution || pst->type==pst_alternate ||
+ pst->type==pst_multiple ) {
+ if ( glyphnameinlist(pst->u.mult.components,name) )
+return( true );
+ }
+ }
+ }
+return( false );
+}
+
+int gdefclass(SplineChar *sc) {
+ PST *pst;
+ AnchorPoint *ap;
+
+ if ( sc->glyph_class!=0 )
+return( sc->glyph_class-1 );
+
+ if ( strcmp(sc->name,".notdef")==0 )
+return( 0 );
+
+ /* It isn't clear to me what should be done if a glyph is both a ligature */
+ /* and a mark (There are some greek accent ligatures, it is probably more*/
+ /* important that they be indicated as marks). Here I chose mark rather */
+ /* than ligature as the mark class is far more likely to be used */
+ ap=sc->anchor;
+ while ( ap!=NULL && (ap->type==at_centry || ap->type==at_cexit) )
+ ap = ap->next;
+ if ( ap!=NULL && (ap->type==at_mark || ap->type==at_basemark) )
+return( 3 );
+
+ for ( pst=sc->possub; pst!=NULL; pst=pst->next ) {
+ if ( pst->type == pst_ligature )
+return( 2 ); /* Ligature */
+ }
+
+ /* I not quite sure what a componant glyph is. Probably something */
+ /* that is not in the cmap table and is referenced in other glyphs */
+ /* (I've never seen it used by others) */
+ /* (Note: No glyph in a CID font can be components as all CIDs mean */
+ /* something) (I think) */
+ if ( sc->unicodeenc==-1 && sc->dependents!=NULL &&
+ sc->parent->cidmaster!=NULL && !ReferencedByGSUB(sc))
+return( 4 );
+ else
+return( 1 );
+}
+
+void otf_dumpgdef(struct alltabs *at, SplineFont *sf) {
+ /* In spite of what the open type docs say, this table does appear to be */
+ /* required (at least the glyph class def table) if we do mark to base */
+ /* positioning */
+ /* I was wondering at the apperant contradiction: something can be both a */
+ /* base glyph and a ligature component, but it appears that the component*/
+ /* class is unused and everything is a base unless it is a ligature or */
+ /* mark */
+ /* All my example fonts ignore the attachment list subtable and the mark */
+ /* attach class def subtable, so I shall too */
+ /* Ah. Some indic fonts need the mark attach class subtable for greater */
+ /* control of lookup flags */
+ /* All my example fonts contain a ligature caret list subtable, which is */
+ /* empty. Odd, but perhaps important */
+ int i,j,k, lcnt, needsclass;
+ int pos, offset;
+ int cnt, start, last, lastval;
+ SplineChar **glyphs, *sc;
+
+ /* Don't look in the cidmaster if we are only dumping one subfont */
+ if ( sf->cidmaster && sf->cidmaster->glyphs!=NULL ) sf = sf->cidmaster;
+ else if ( sf->mm!=NULL ) sf=sf->mm->normal;
+
+ glyphs = NULL;
+ for ( k=0; k<2; ++k ) {
+ lcnt = 0;
+ needsclass = false;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ SplineChar *sc = sf->glyphs[at->gi.bygid[i]];
+ if ( sc->glyph_class!=0 || gdefclass(sc)!=1 )
+ needsclass = true;
+ if ( LigCaretCnt(sc)!=0 ) {
+ if ( glyphs!=NULL ) glyphs[lcnt] = sc;
+ ++lcnt;
+ }
+ }
+ if ( lcnt==0 )
+ break;
+ if ( glyphs!=NULL )
+ break;
+ glyphs = malloc((lcnt+1)*sizeof(SplineChar *));
+ glyphs[lcnt] = NULL;
+ }
+ if ( !needsclass && lcnt==0 && sf->mark_class_cnt==0 && sf->mark_set_cnt==0 )
+return; /* No anchor positioning, no ligature carets */
+
+ at->gdef = tmpfile2();
+ if ( sf->mark_set_cnt==0 ) {
+ putlong(at->gdef,0x00010000); /* Version */
+ putshort(at->gdef, needsclass ? 12 : 0 ); /* glyph class defn table */
+ } else {
+ putlong(at->gdef,0x00010002); /* Version with mark sets */
+ putshort(at->gdef, needsclass ? 14 : 0 ); /* glyph class defn table */
+ }
+ putshort(at->gdef, 0 ); /* attachment list table */
+ putshort(at->gdef, 0 ); /* ligature caret table (come back and fix up later) */
+ putshort(at->gdef, 0 ); /* mark attachment class table */
+ if ( sf->mark_set_cnt>0 ) {
+ putshort(at->gdef, 0 ); /* mark attachment set table only meaningful if version is 0x10002*/
+ }
+
+ /* Glyph class subtable */
+ if ( needsclass ) {
+ /* Mark shouldn't conflict with anything */
+ /* Ligature is more important than Base */
+ /* Component is not used */
+ /* ttx can't seem to support class format type 1 so let's output type 2 */
+ for ( j=0; j<2; ++j ) {
+ cnt = 0;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ sc = sf->glyphs[at->gi.bygid[i]];
+ if ( sc!=NULL && sc->ttf_glyph!=-1 ) {
+ lastval = gdefclass(sc);
+ start = last = i;
+ for ( ; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ sc = sf->glyphs[at->gi.bygid[i]];
+ if ( gdefclass(sc)!=lastval )
+ break;
+ last = i;
+ }
+ --i;
+ if ( lastval!=0 ) {
+ if ( j==1 ) {
+ putshort(at->gdef,start);
+ putshort(at->gdef,last);
+ putshort(at->gdef,lastval);
+ }
+ ++cnt;
+ }
+ }
+ }
+ if ( j==0 ) {
+ putshort(at->gdef,2); /* class format 2, range list by class */
+ putshort(at->gdef,cnt);
+ }
+ }
+ }
+
+ /* Ligature caret subtable. Always include this if we have a GDEF */
+ pos = ftell(at->gdef);
+ fseek(at->gdef,8,SEEK_SET); /* location of lig caret table offset */
+ putshort(at->gdef,pos);
+ fseek(at->gdef,0,SEEK_END);
+ if ( lcnt==0 ) {
+ /* It always seems to be present, even if empty */
+ putshort(at->gdef,4); /* Offset to (empty) coverage table */
+ putshort(at->gdef,0); /* no ligatures */
+ putshort(at->gdef,2); /* coverage table format 2 */
+ putshort(at->gdef,0); /* no ranges in coverage table */
+ } else {
+ pos = ftell(at->gdef); /* coverage location */
+ putshort(at->gdef,0); /* Offset to coverage table (fix up later) */
+ putshort(at->gdef,lcnt);
+ offset = 2*lcnt+4;
+ for ( i=0; i<lcnt; ++i ) {
+ putshort(at->gdef,offset);
+ offset+=2+6*LigCaretCnt(glyphs[i]);
+ }
+ for ( i=0; i<lcnt; ++i )
+ DumpLigCarets(at->gdef,glyphs[i]);
+ offset = ftell(at->gdef);
+ fseek(at->gdef,pos,SEEK_SET);
+ putshort(at->gdef,offset-pos);
+ fseek(at->gdef,0,SEEK_END);
+ dumpcoveragetable(at->gdef,glyphs);
+ }
+
+ /* Mark Attachment Class Subtable */
+ if ( sf->mark_class_cnt>0 ) {
+ uint16 *mclasses = ClassesFromNames(sf,sf->mark_classes,sf->mark_class_cnt,at->maxp.numGlyphs,NULL,false);
+ pos = ftell(at->gdef);
+ fseek(at->gdef,10,SEEK_SET); /* location of mark attach table offset */
+ putshort(at->gdef,pos);
+ fseek(at->gdef,0,SEEK_END);
+ DumpClass(at->gdef,mclasses,at->maxp.numGlyphs);
+ free(mclasses);
+ }
+
+ /* Mark Attachment Class Subtable */
+ if ( sf->mark_set_cnt>0 ) {
+ pos = ftell(at->gdef);
+ fseek(at->gdef,12,SEEK_SET); /* location of mark attach table offset */
+ putshort(at->gdef,pos);
+ fseek(at->gdef,0,SEEK_END);
+ putshort(at->gdef,1); /* Version number */
+ putshort(at->gdef,sf->mark_set_cnt);
+ for ( i=0; i<sf->mark_set_cnt; ++i )
+ putlong(at->gdef,0);
+ for ( i=0; i<sf->mark_set_cnt; ++i ) {
+ int here = ftell(at->gdef);
+ fseek(at->gdef,pos+4+4*i,SEEK_SET);
+ putlong(at->gdef,here-pos);
+ fseek(at->gdef,0,SEEK_END);
+ glyphs = OrderedGlyphsFromNames(sf,sf->mark_sets[i]);
+ dumpcoveragetable(at->gdef,glyphs);
+ free(glyphs);
+ }
+ }
+
+ at->gdeflen = ftell(at->gdef);
+ if ( at->gdeflen&1 ) putc('\0',at->gdef);
+ if ( (at->gdeflen+1)&2 ) putshort(at->gdef,0);
+}
+
+/******************************************************************************/
+/* ******************************* MATH Table ******************************* */
+/* ********************** (Not strictly OpenType yet) *********************** */
+/******************************************************************************/
+enum math_bits { mb_constants=0x01, mb_italic=0x02, mb_topaccent=0x04,
+ mb_extended=0x08, mb_mathkern=0x10, mb_vertvariant=0x20,
+ mb_horizvariant=0x40,
+ mb_all = 0x7f,
+ mb_gi=(mb_italic|mb_topaccent|mb_extended|mb_mathkern),
+ mb_gv=(mb_vertvariant|mb_horizvariant) };
+
+static int MathBits(struct alltabs *at, SplineFont *sf) {
+ int i, gid, ret;
+ SplineChar *sc;
+
+ ret = sf->MATH ? mb_constants : 0;
+
+ for ( i=0; i<at->gi.gcnt; ++i ) {
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL ) {
+ if ( sc->italic_correction!=TEX_UNDEF )
+ ret |= mb_italic;
+ if ( sc->top_accent_horiz!=TEX_UNDEF )
+ ret |= mb_topaccent;
+ if ( sc->is_extended_shape )
+ ret |= mb_extended;
+ if ( sc->mathkern!=NULL )
+ ret |= mb_mathkern;
+ if ( sc->vert_variants!=NULL )
+ ret |= mb_vertvariant;
+ if ( sc->horiz_variants!=NULL )
+ ret |= mb_horizvariant;
+ if ( ret==mb_all )
+return( mb_all );
+ }
+ }
+return( ret );
+}
+
+static void ttf_math_dump_italic_top(FILE *mathf,struct alltabs *at, SplineFont *sf, int is_italic) {
+ int i, gid, len;
+ SplineChar *sc, **glyphs;
+ uint32 coverage_pos, coverage_table;
+ uint32 devtab_offset;
+ DeviceTable *devtab;
+
+ /* Figure out our glyph list (and count) */
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( (is_italic && sc->italic_correction!=TEX_UNDEF) || (!is_italic && sc->top_accent_horiz!=TEX_UNDEF))
+ ++len;
+ glyphs = malloc((len+1)*sizeof(SplineChar *));
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( (is_italic && sc->italic_correction!=TEX_UNDEF) || (!is_italic && sc->top_accent_horiz!=TEX_UNDEF))
+ glyphs[len++] = sc;
+ glyphs[len] = NULL;
+
+ coverage_pos = ftell(mathf);
+ putshort(mathf,0); /* Coverage table, return to this */
+ putshort(mathf,len);
+ devtab_offset = 4 + 4*len;
+ for ( i=0; i<len; ++i ) {
+ putshort(mathf,is_italic ? glyphs[i]->italic_correction : glyphs[i]->top_accent_horiz );
+ devtab = is_italic ? glyphs[i]->italic_adjusts : glyphs[i]->top_accent_adjusts;
+ if ( devtab!=NULL ) {
+ putshort(mathf,devtab_offset);
+ devtab_offset += DevTabLen(devtab);
+ } else
+ putshort(mathf,0);
+ }
+ for ( i=0; i<len; ++i ) {
+ devtab = is_italic ? glyphs[i]->italic_adjusts : glyphs[i]->top_accent_adjusts;
+ if ( devtab!=NULL )
+ dumpgposdevicetable(mathf,devtab);
+ }
+ if ( devtab_offset!=ftell(mathf)-coverage_pos )
+ IError("Actual end did not match expected end in %s table, expected=%d, actual=%d",
+ is_italic ? "italic" : "top accent", devtab_offset, ftell(mathf)-coverage_pos );
+ coverage_table = ftell(mathf);
+ fseek( mathf, coverage_pos, SEEK_SET);
+ putshort(mathf,coverage_table-coverage_pos);
+ fseek(mathf,coverage_table,SEEK_SET);
+ dumpcoveragetable(mathf,glyphs);
+ free(glyphs);
+}
+
+static void ttf_math_dump_extended(FILE *mathf,struct alltabs *at, SplineFont *sf) {
+ int i, gid, len;
+ SplineChar *sc, **glyphs;
+
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( sc->is_extended_shape )
+ ++len;
+ glyphs = malloc((len+1)*sizeof(SplineChar *));
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( sc->is_extended_shape )
+ glyphs[len++] = sc;
+ glyphs[len] = NULL;
+ dumpcoveragetable(mathf,glyphs);
+ free(glyphs);
+}
+
+static int mkv_len(struct mathkernvertex *mkv) {
+return( 2+8*mkv->cnt-4 );
+}
+
+static int ttf_math_dump_mathkernvertex(FILE *mathf,struct mathkernvertex *mkv,
+ int devtab_pos) {
+ int i;
+ uint32 here = ftell(mathf);
+
+ putshort(mathf,mkv->cnt-1);
+
+ for ( i=0; i<mkv->cnt-1; ++i ) {
+ putshort(mathf,mkv->mkd[i].height);
+ if ( mkv->mkd[i].height_adjusts!=NULL ) {
+ putshort(mathf,devtab_pos-here);
+ devtab_pos += DevTabLen(mkv->mkd[i].height_adjusts);
+ } else
+ putshort(mathf,0);
+ }
+ for ( i=0; i<mkv->cnt; ++i ) {
+ putshort(mathf,mkv->mkd[i].kern);
+ if ( mkv->mkd[i].kern_adjusts!=NULL ) {
+ putshort(mathf,devtab_pos-here);
+ devtab_pos += DevTabLen(mkv->mkd[i].kern_adjusts);
+ } else
+ putshort(mathf,0);
+ }
+return( devtab_pos );
+}
+
+static void ttf_math_dump_mathkerndevtab(FILE *mathf,struct mathkernvertex *mkv) {
+ int i;
+
+ for ( i=0; i<mkv->cnt-1; ++i )
+ if ( mkv->mkd[i].height_adjusts!=NULL )
+ dumpgposdevicetable(mathf,mkv->mkd[i].height_adjusts);
+ for ( i=0; i<mkv->cnt; ++i )
+ if ( mkv->mkd[i].kern_adjusts!=NULL )
+ dumpgposdevicetable(mathf,mkv->mkd[i].kern_adjusts);
+}
+
+static void ttf_math_dump_mathkern(FILE *mathf,struct alltabs *at, SplineFont *sf) {
+ int i, gid, len;
+ SplineChar *sc, **glyphs;
+ uint32 coverage_pos, coverage_table, kr_pos, midpos2;
+
+ /* Figure out our glyph list (and count) */
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( sc->mathkern!=NULL )
+ ++len;
+ glyphs = malloc((len+1)*sizeof(SplineChar *));
+ for ( i=len=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL )
+ if ( sc->mathkern!=NULL )
+ glyphs[len++] = sc;
+ glyphs[len] = NULL;
+
+ coverage_pos = ftell(mathf);
+ putshort(mathf,0); /* Coverage table, return to this */
+ putshort(mathf,len);
+ kr_pos = coverage_pos + 4 + 8*len;
+ for ( i=0; i<len; ++i ) {
+ struct mathkern *mk = glyphs[i]->mathkern;
+ if ( mk->top_right.cnt==0 )
+ putshort(mathf,0);
+ else {
+ putshort(mathf,kr_pos-coverage_pos);
+ kr_pos += mkv_len(&mk->top_right);
+ }
+ if ( mk->top_left.cnt==0 )
+ putshort(mathf,0);
+ else {
+ putshort(mathf,kr_pos-coverage_pos);
+ kr_pos += mkv_len(&mk->top_left);
+ }
+ if ( mk->bottom_right.cnt==0 )
+ putshort(mathf,0);
+ else {
+ putshort(mathf,kr_pos-coverage_pos);
+ kr_pos += mkv_len(&mk->bottom_right);
+ }
+ if ( mk->bottom_left.cnt==0 )
+ putshort(mathf,0);
+ else {
+ putshort(mathf,kr_pos-coverage_pos);
+ kr_pos += mkv_len(&mk->bottom_left);
+ }
+ }
+ if ( ftell(mathf)!=coverage_pos + 4 + 8*len )
+ IError("Actual midpoint1 did not match expected midpoint1 in mathkern table, expected=%d, actual=%d",
+ coverage_pos + 4 + 8*len, ftell(mathf) );
+
+ midpos2 = kr_pos;
+ for ( i=0; i<len; ++i ) {
+ struct mathkern *mk = glyphs[i]->mathkern;
+ if ( mk->top_right.cnt!=0 )
+ kr_pos = ttf_math_dump_mathkernvertex(mathf,&mk->top_right,kr_pos);
+ if ( mk->top_left.cnt!=0 )
+ kr_pos = ttf_math_dump_mathkernvertex(mathf,&mk->top_left,kr_pos);
+ if ( mk->bottom_right.cnt!=0 )
+ kr_pos = ttf_math_dump_mathkernvertex(mathf,&mk->bottom_right,kr_pos);
+ if ( mk->bottom_left.cnt!=0 )
+ kr_pos = ttf_math_dump_mathkernvertex(mathf,&mk->bottom_left,kr_pos);
+ }
+ if ( ftell(mathf)!=midpos2)
+ IError("Actual midpoint2 did not match expected midpoint2 in mathkern table, expected=%d, actual=%d",
+ midpos2, ftell(mathf) );
+
+ for ( i=0; i<len; ++i ) {
+ struct mathkern *mk = glyphs[i]->mathkern;
+ if ( mk->top_right.cnt!=0 )
+ ttf_math_dump_mathkerndevtab(mathf,&mk->top_right);
+ if ( mk->top_left.cnt!=0 )
+ ttf_math_dump_mathkerndevtab(mathf,&mk->top_left);
+ if ( mk->bottom_right.cnt!=0 )
+ ttf_math_dump_mathkerndevtab(mathf,&mk->bottom_right);
+ if ( mk->bottom_left.cnt!=0 )
+ ttf_math_dump_mathkerndevtab(mathf,&mk->bottom_left);
+ }
+ if ( kr_pos!=ftell(mathf) )
+ IError("Actual end did not match expected end in mathkern table, expected=%d, actual=%d",
+ kr_pos, ftell(mathf) );
+
+ coverage_table = ftell(mathf);
+ fseek( mathf, coverage_pos, SEEK_SET);
+ putshort(mathf,coverage_table-coverage_pos);
+ fseek(mathf,coverage_table,SEEK_SET);
+ dumpcoveragetable(mathf,glyphs);
+ free(glyphs);
+}
+
+static int gv_len(SplineFont *sf, struct glyphvariants *gv) {
+ char *pt, *start;
+ int ch, cnt;
+ SplineChar *sc;
+
+ if ( gv==NULL || (gv->variants==NULL && gv->part_cnt==0))
+return( 0 );
+ if ( gv->variants==NULL )
+return( 4 ); /* No variants, but we've got parts to assemble */
+ cnt = 0;
+ for ( start=gv->variants ;; ) {
+ while ( *start==' ' ) ++start;
+ if ( *start=='\0' )
+return( 4+4*cnt ); /* MathGlyphConstructionTable */
+ for ( pt = start ; *pt!=' ' && *pt!='\0'; ++pt );
+ ch = *pt; *pt = '\0';
+ sc = SFGetChar(sf,-1,start);
+ *pt = ch;
+ if ( sc!=NULL )
+ ++cnt;
+ start = pt;
+ }
+}
+
+static int gvc_len(struct glyphvariants *gv) {
+ if ( gv->part_cnt==0 )
+return( 0 );
+
+return( 6+10*gv->part_cnt );
+}
+
+static uint32 ttf_math_dump_mathglyphconstructiontable(FILE *mathf,
+ struct glyphvariants *gv,SplineFont *sf, uint32 pos,int is_v) {
+ char *pt, *start;
+ int ch, cnt;
+ SplineChar *sc;
+ uint32 here = ftell(mathf);
+ DBounds b;
+
+ putshort(mathf,gv->part_cnt==0? 0 : pos-here);
+ if ( gv->variants==NULL ) {
+ putshort(mathf,0);
+ } else {
+ cnt = 0;
+ for ( start=gv->variants ;; ) {
+ while ( *start==' ' ) ++start;
+ if ( *start=='\0' )
+ break;
+ for ( pt = start ; *pt!=' ' && *pt!='\0'; ++pt );
+ ch = *pt; *pt = '\0';
+ sc = SFGetChar(sf,-1,start);
+ *pt = ch;
+ if ( sc!=NULL )
+ ++cnt;
+ start = pt;
+ }
+ putshort(mathf,cnt);
+ for ( start=gv->variants ;; ) {
+ while ( *start==' ' ) ++start;
+ if ( *start=='\0' )
+ break;
+ for ( pt = start ; *pt!=' ' && *pt!='\0'; ++pt );
+ ch = *pt; *pt = '\0';
+ sc = SFGetChar(sf,-1,start);
+ *pt = ch;
+ if ( sc!=NULL ) {
+ putshort(mathf,sc->ttf_glyph);
+ SplineCharFindBounds(sc,&b);
+ /* Don't ask me why I have a plus one here. In the MS font */
+ /* CambriaMath all of these values are one more than I would */
+ /* expect */
+ if ( is_v )
+ putshort(mathf,b.maxy-b.miny +1);
+ else
+ putshort(mathf,b.maxx-b.minx +1);
+ }
+ start=pt;
+ }
+ }
+return( pos + gvc_len(gv));
+}
+
+static uint32 ttf_math_dump_mathglyphassemblytable(FILE *mathf,
+ struct glyphvariants *gv,SplineFont *sf, uint32 devtab_pos) {
+ SplineChar *sc;
+ uint32 here = ftell(mathf);
+ int i;
+
+ if ( gv->part_cnt==0 )
+return( devtab_pos );
+ putshort(mathf,gv->italic_correction);
+ if ( gv->italic_adjusts!=NULL ) {
+ putshort(mathf,devtab_pos-here);
+ devtab_pos += DevTabLen(gv->italic_adjusts);
+ } else
+ putshort(mathf,0);
+ putshort(mathf,gv->part_cnt);
+ for ( i=0; i<gv->part_cnt; ++i ) {
+ sc = SFGetChar(sf,-1,gv->parts[i].component);
+ if ( sc==NULL )
+ putshort(mathf,0); /* .notdef */
+ else
+ putshort(mathf,sc->ttf_glyph);
+ putshort(mathf,gv->parts[i].startConnectorLength);
+ putshort(mathf,gv->parts[i].endConnectorLength);
+ putshort(mathf,gv->parts[i].fullAdvance);
+ putshort(mathf,gv->parts[i].is_extender);
+ }
+return(devtab_pos);
+}
+
+static void ttf_math_dump_glyphvariant(FILE *mathf,struct alltabs *at, SplineFont *sf) {
+ int i, gid, vlen, hlen;
+ SplineChar *sc, **vglyphs, **hglyphs;
+ uint32 coverage_pos, coverage_table, offset, pos, assembly_pos;
+
+ /* Figure out our glyph list (and count) */
+ for ( i=vlen=hlen=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL ) {
+ if ( sc->vert_variants!=NULL )
+ ++vlen;
+ if ( sc->horiz_variants!=NULL )
+ ++hlen;
+ }
+
+ vglyphs = malloc((vlen+1)*sizeof(SplineChar *));
+ hglyphs = malloc((hlen+1)*sizeof(SplineChar *));
+ for ( i=vlen=hlen=0; i<at->gi.gcnt; ++i )
+ if ( (gid=at->gi.bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL ) {
+ if ( sc->vert_variants!=NULL )
+ vglyphs[vlen++] = sc;
+ if ( sc->horiz_variants!=NULL )
+ hglyphs[hlen++] = sc;
+ }
+ vglyphs[vlen] = NULL;
+ hglyphs[hlen] = NULL;
+
+ putshort(mathf,sf->MATH==NULL?(sf->ascent+sf->descent)/50 : sf->MATH->MinConnectorOverlap );
+ coverage_pos = ftell(mathf);
+ putshort(mathf,0); /* Vertical Coverage table, return to this */
+ putshort(mathf,0); /* Horizontal Coverage table, return to this */
+ putshort(mathf,vlen);
+ putshort(mathf,hlen);
+ offset = 5*2+vlen*2+hlen*2;
+ for ( i=0; i<vlen; ++i ) {
+ putshort(mathf,offset);
+ offset += gv_len(sf,vglyphs[i]->vert_variants);
+ }
+ for ( i=0; i<hlen; ++i ) {
+ putshort(mathf,offset);
+ offset += gv_len(sf,hglyphs[i]->horiz_variants);
+ }
+ assembly_pos = pos = (coverage_pos-2)+offset;
+ for ( i=0; i<vlen; ++i ) {
+ /*uint32 start = ftell(mathf);*/
+ pos = ttf_math_dump_mathglyphconstructiontable(mathf,
+ vglyphs[i]->vert_variants,sf,pos,true);
+ /*if ( ftell(mathf)-start != gv_len(sf,vglyphs[i]->vert_variants))*/
+ /*IError("v gv_len incorrect");*/
+ }
+ for ( i=0; i<hlen; ++i ) {
+ /*uint32 start = ftell(mathf);*/
+ pos = ttf_math_dump_mathglyphconstructiontable(mathf,
+ hglyphs[i]->horiz_variants,sf,pos,false);
+ /*if ( ftell(mathf)-start != gv_len(sf,hglyphs[i]->horiz_variants))*/
+ /*IError("h gv_len incorrect: %s", hglyphs[i]->name);*/
+ }
+ if ( ftell(mathf)!=assembly_pos )
+ IError("assembly tables at wrong place");
+
+ for ( i=0; i<vlen; ++i )
+ pos = ttf_math_dump_mathglyphassemblytable(mathf,
+ vglyphs[i]->vert_variants,sf,pos);
+ for ( i=0; i<hlen; ++i )
+ pos = ttf_math_dump_mathglyphassemblytable(mathf,
+ hglyphs[i]->horiz_variants,sf,pos);
+ for ( i=0; i<vlen; ++i )
+ if ( vglyphs[i]->vert_variants->part_cnt!=0 &&
+ vglyphs[i]->vert_variants->italic_adjusts!=NULL )
+ dumpgposdevicetable(mathf,vglyphs[i]->vert_variants->italic_adjusts);
+ for ( i=0; i<hlen; ++i )
+ if ( hglyphs[i]->horiz_variants->part_cnt!=0 &&
+ hglyphs[i]->horiz_variants->italic_adjusts!=NULL )
+ dumpgposdevicetable(mathf,hglyphs[i]->horiz_variants->italic_adjusts);
+ if ( vlen!=0 ) {
+ coverage_table = ftell(mathf);
+ fseek( mathf, coverage_pos, SEEK_SET);
+ putshort(mathf,coverage_table-(coverage_pos-2));
+ fseek(mathf,coverage_table,SEEK_SET);
+ dumpcoveragetable(mathf,vglyphs);
+ }
+ free(vglyphs);
+ if ( hlen!=0 ) {
+ coverage_table = ftell(mathf);
+ fseek( mathf, coverage_pos+2, SEEK_SET);
+ putshort(mathf,coverage_table-(coverage_pos-2));
+ fseek(mathf,coverage_table,SEEK_SET);
+ dumpcoveragetable(mathf,hglyphs);
+ }
+ free(hglyphs);
+}
+
+void otf_dump_math(struct alltabs *at, SplineFont *sf) {
+ FILE *mathf;
+ int i;
+ uint32 devtab_offsets[60], const_start, gi_start, v_start;
+ int bits = MathBits(at,sf);
+
+ if ( sf->MATH==NULL )
+return;
+
+ at->math = mathf = tmpfile2();
+
+ putlong(mathf, 0x00010000 ); /* Version 1 */
+ putshort(mathf, 10); /* Offset to constants */
+ putshort(mathf, 0); /* GlyphInfo, fix later */
+ putshort(mathf, 0); /* Variants, fix later */
+
+ /* Start on constants */
+ memset(devtab_offsets,0,sizeof(devtab_offsets));
+ const_start = ftell(mathf);
+ for ( i=0; math_constants_descriptor[i].script_name!=NULL; ++i ) {
+ int16 *pos = (int16 *) (((char *) (sf->MATH)) + math_constants_descriptor[i].offset );
+ if ( pos == (int16 *) &sf->MATH->MinConnectorOverlap )
+ continue; /* Actually lives in the Variant table, not here */
+ putshort(mathf, *pos);
+ if ( math_constants_descriptor[i].devtab_offset != -1 ) {
+ devtab_offsets[i] = ftell(mathf);
+ putshort(mathf, 0); /* Fix up later if we support device tables */
+ }
+ }
+ for ( i=0; math_constants_descriptor[i].script_name!=NULL; ++i ) {
+ int16 *pos = (int16 *) (((char *) (sf->MATH)) + math_constants_descriptor[i].offset );
+ DeviceTable **devtab = (DeviceTable **) (((char *) (sf->MATH)) + math_constants_descriptor[i].devtab_offset );
+ if ( pos == (int16 *) &sf->MATH->MinConnectorOverlap )
+ continue; /* Actually lives in the Variant table, not here */
+ if ( math_constants_descriptor[i].devtab_offset >= 0 && *devtab!=NULL ) {
+ uint32 here = ftell(mathf);
+ fseek(mathf,devtab_offsets[i],SEEK_SET);
+ putshort(mathf, here-const_start);
+ fseek(mathf,here,SEEK_SET);
+ dumpgposdevicetable(mathf,*devtab);
+ }
+ }
+
+ /* The spec does not say this can be NULL */
+ if ( 1 /* bits&mb_gi*/ ) {
+ gi_start = ftell(mathf);
+ fseek(mathf,6,SEEK_SET);
+ putshort(mathf,gi_start);
+ fseek(mathf,gi_start,SEEK_SET);
+
+ putshort(mathf,0); /* Italics correction */
+ putshort(mathf,0); /* top accent */
+ putshort(mathf,0); /* is extended shape */
+ putshort(mathf,0); /* math kern info */
+
+ if ( bits&mb_italic ) {
+ v_start = ftell(mathf);
+ fseek(mathf,gi_start,SEEK_SET);
+ putshort(mathf,v_start-gi_start);
+ fseek(mathf,v_start,SEEK_SET);
+
+ ttf_math_dump_italic_top(mathf,at,sf,true);
+ }
+
+ if ( bits&mb_topaccent ) {
+ v_start = ftell(mathf);
+ fseek(mathf,gi_start+2,SEEK_SET);
+ putshort(mathf,v_start-gi_start);
+ fseek(mathf,v_start,SEEK_SET);
+
+ ttf_math_dump_italic_top(mathf,at,sf,false);
+ }
+
+ if ( bits&mb_extended ) {
+ v_start = ftell(mathf);
+ fseek(mathf,gi_start+4,SEEK_SET);
+ putshort(mathf,v_start-gi_start);
+ fseek(mathf,v_start,SEEK_SET);
+
+ ttf_math_dump_extended(mathf,at,sf);
+ }
+
+ if ( bits&mb_mathkern ) {
+ v_start = ftell(mathf);
+ fseek(mathf,gi_start+6,SEEK_SET);
+ putshort(mathf,v_start-gi_start);
+ fseek(mathf,v_start,SEEK_SET);
+
+ ttf_math_dump_mathkern(mathf,at,sf);
+ }
+ }
+
+ /* The spec does not say this can be NULL */
+ if ( 1 /* bits&mb_gv*/ ) {
+ v_start = ftell(mathf);
+ fseek(mathf,8,SEEK_SET);
+ putshort(mathf,v_start);
+ fseek(mathf,v_start,SEEK_SET);
+
+ ttf_math_dump_glyphvariant(mathf,at,sf);
+ }
+
+ at->mathlen = ftell(mathf);
+ if ( ftell(mathf)&1 )
+ putc('\0',mathf);
+ if ( ftell(mathf)&2 )
+ putshort(mathf,0);
+}
+
+struct taglist {
+ uint32 tag;
+ struct taglist *next;
+};
+
+static int taglistcompar(const void *_cv1, const void *_cv2) {
+ const struct taglist *const *tl1 = _cv1, *const *tl2 = _cv2;
+
+ if ( (*tl1)->tag==(*tl2)->tag )
+return( 0 );
+ if ( (*tl1)->tag>(*tl2)->tag )
+return( 1 );
+
+return( -1 );
+}
+
+static int langlistcompar(const void *_cv1, const void *_cv2) {
+ const struct taglist *const *tl1 = _cv1, *const *tl2 = _cv2;
+
+ if ( (*tl1)->tag==(*tl2)->tag )
+return( 0 );
+ if ( (*tl1)->tag == DEFAULT_LANG )
+return( -1 );
+ if ( (*tl2)->tag == DEFAULT_LANG )
+return( 1 );
+ if ( (*tl1)->tag>(*tl2)->tag )
+return( 1 );
+
+return( -1 );
+}
+
+static struct taglist *sorttaglist(struct taglist *list,int (*compar)(const void *,const void*)) {
+ struct taglist *t, **array;
+ int i,cnt;
+
+ if ( list==NULL || list->next==NULL )
+return( list );
+
+ for ( t=list, cnt=0; t!=NULL; t=t->next, ++cnt );
+ array = malloc(cnt*sizeof(struct taglist *));
+ for ( t=list, cnt=0; t!=NULL; t=t->next, ++cnt )
+ array[cnt] = t;
+ qsort(array,cnt,sizeof(struct taglist *),compar);
+ for ( i=1; i<cnt; ++i )
+ array[i-1]->next = array[i];
+ array[cnt-1]->next = NULL;
+ list = array[0];
+ free( array );
+return( list );
+}
+
+static void _base_sort(struct Base *base) {
+ /* Sort the base lines. Which can reorder the def_baseline index in the */
+ /* script, and the baseline_pos lists */
+ /* Sort the script list */
+ /* Sort the language lists in each script */
+ /* Sort the feature lists in each language */
+ int i,j,pos, tag;
+ struct basescript *bs;
+ struct baselangextent *langs;
+
+ if ( base==NULL )
+return;
+
+ if ( base->baseline_cnt!=0 ) {
+ for ( i=0; i<base->baseline_cnt; ++i )
+ for ( j=i+1; j<base->baseline_cnt; ++j ) {
+ if ( base->baseline_tags[i]>base->baseline_tags[j] ) {
+ tag = base->baseline_tags[i];
+ base->baseline_tags[i] = base->baseline_tags[j];
+ base->baseline_tags[j] = tag;
+ for ( bs=base->scripts ; bs!=NULL; bs=bs->next ) {
+ if ( bs->def_baseline==i )
+ bs->def_baseline = j;
+ else if ( bs->def_baseline==j )
+ bs->def_baseline = i;
+ pos = bs->baseline_pos[i];
+ bs->baseline_pos[i] = bs->baseline_pos[j];
+ bs->baseline_pos[j] = pos;
+ }
+ }
+ }
+ }
+ base->scripts = (struct basescript *) sorttaglist((struct taglist *) base->scripts,taglistcompar);
+ for ( bs=base->scripts ; bs!=NULL; bs=bs->next ) {
+ bs->langs = (struct baselangextent *) sorttaglist((struct taglist *) bs->langs,langlistcompar);
+ for ( langs = bs->langs; langs!=NULL; langs = langs->next )
+ langs->features = (struct baselangextent *) sorttaglist((struct taglist *) langs->features,taglistcompar);
+ }
+}
+
+void SFBaseSort(SplineFont *sf) {
+ _base_sort(sf->horiz_base);
+ _base_sort(sf->vert_base);
+}
+
+static void dump_minmax(FILE *basef,struct baselangextent *bl) {
+ struct baselangextent *fl;
+ int fcnt;
+
+ putshort(basef,bl->descent);
+ putshort(basef,bl->ascent);
+ for ( fl=bl->features, fcnt=0; fl!=NULL; fl=fl->next, ++fcnt );
+ putshort(basef,fcnt);
+ for ( fl=bl->features; fl!=NULL; fl=fl->next ) {
+ putlong(basef,fl->lang); /* feature tag really */
+ putshort(basef,fl->descent);
+ putshort(basef,fl->ascent);
+ }
+}
+
+void otf_dumpbase(struct alltabs *at, SplineFont *sf) {
+ FILE *basef;
+ int i,j, cnt, lcnt;
+ uint32 here, bsl;
+ struct basescript *bs;
+ struct baselangextent *bl, *dflt;
+ int offset;
+
+ if ( sf->horiz_base==NULL && sf->vert_base==NULL )
+return;
+
+ SFBaseSort(sf);
+
+ at->base = basef = tmpfile2();
+
+ putlong(basef, 0x00010000 ); /* Version 1 */
+ putshort(basef, 0 ); /* offset to horizontal baselines, fill in later */
+ putshort(basef, 0 ); /* offset to vertical baselines, fill in later */
+
+ for ( i=0; i<2; ++i ) {
+ struct Base *base = i==0 ? sf->horiz_base : sf->vert_base;
+ if ( base==NULL )
+ continue;
+ here = ftell(basef);
+ fseek(basef,4+2*i,SEEK_SET);
+ putshort(basef,here-0);
+ fseek(basef,here,SEEK_SET);
+
+ /* axis table */
+ putshort(basef,base->baseline_cnt==0 ? 0 : 4 );
+ putshort(basef,base->baseline_cnt==0 ? 4 :
+ 4+2+4*base->baseline_cnt );
+
+ if ( base->baseline_cnt!=0 ) {
+ /* BaseTagList table */
+ putshort(basef,base->baseline_cnt);
+ for ( j=0; j<base->baseline_cnt; ++j )
+ putlong(basef,base->baseline_tags[j]);
+ }
+
+ /* BaseScriptList table */
+ bsl = ftell(basef);
+ for ( bs=base->scripts, cnt=0; bs!=NULL; bs=bs->next, ++cnt );
+ putshort(basef,cnt);
+ for ( bs=base->scripts; bs!=NULL; bs=bs->next ) {
+ putlong(basef,bs->script);
+ putshort(basef,0);
+ }
+
+ /* BaseScript table */
+ for ( bs=base->scripts, cnt=0; bs!=NULL; bs=bs->next, ++cnt ) {
+ uint32 bst = ftell(basef);
+ fseek(basef,bsl+2+6*cnt+4,SEEK_SET);
+ putshort(basef,bst-bsl);
+ fseek(basef,bst,SEEK_SET);
+
+ for ( bl=bs->langs, dflt=NULL, lcnt=0; bl!=NULL; bl=bl->next ) {
+ if ( bl->lang==DEFAULT_LANG )
+ dflt = bl;
+ else
+ ++lcnt;
+ }
+ offset = 6+6*lcnt;
+ putshort(basef,base->baseline_cnt==0?0:offset);
+ if ( base->baseline_cnt!=0 )
+ offset += 4+2*base->baseline_cnt+4*base->baseline_cnt;
+ putshort(basef,dflt==NULL ? 0 : offset);
+ putshort(basef,lcnt);
+ for ( bl=bs->langs; bl!=NULL; bl=bl->next ) if ( bl->lang!=DEFAULT_LANG ) {
+ putlong(basef,bl->lang);
+ putshort(basef,0);
+ }
+
+ /* Base Values table */
+ if ( base->baseline_cnt!=0 ) {
+ offset = 4+2*base->baseline_cnt;
+ putshort(basef,bs->def_baseline);
+ putshort(basef,base->baseline_cnt);
+ for ( j=0; j<base->baseline_cnt; ++j ) {
+ putshort(basef,offset);
+ offset += 2*2;
+ }
+ for ( j=0; j<base->baseline_cnt; ++j ) {
+ putshort(basef,1); /* format 1 */
+ putshort(basef,bs->baseline_pos[j]);
+ }
+ }
+
+ if ( dflt!=NULL )
+ dump_minmax(basef,dflt);
+ for ( bl=bs->langs, dflt=NULL, lcnt=0; bl!=NULL; bl=bl->next ) if ( bl->lang!=DEFAULT_LANG ) {
+ uint32 here = ftell(basef);
+ fseek(basef,bst+6+6*lcnt+4,SEEK_SET);
+ putshort(basef,here-bst);
+ fseek(basef,here,SEEK_SET);
+ dump_minmax(basef,bl);
+ }
+ }
+ }
+
+ at->baselen = ftell(basef);
+ if ( ftell(basef)&1 )
+ putc('\0',basef);
+ if ( ftell(basef)&2 )
+ putshort(basef,0);
+}
+
+static int jscriptsort(const void *_s1,const void *_s2) {
+ const Justify * const * __s1 = (const Justify * const *) _s1;
+ const Justify * const * __s2 = (const Justify * const *) _s2;
+ const Justify *s1 = *__s1;
+ const Justify *s2 = *__s2;
+
+ if ( s1->script>s2->script )
+return( 1 );
+ else if ( s1->script<s2->script )
+return( -1 );
+ else
+return( 0 );
+}
+
+static int jlangsort(const void *_s1,const void *_s2) {
+ const struct jstf_lang * const * __s1 = (const struct jstf_lang * const *) _s1;
+ const struct jstf_lang * const * __s2 = (const struct jstf_lang * const *) _s2;
+ const struct jstf_lang *s1 = *__s1;
+ const struct jstf_lang *s2 = *__s2;
+
+ if ( s1->lang==s2->lang )
+return( 0 );
+
+ if ( s1->lang==DEFAULT_LANG )
+return( -1 );
+ if ( s2->lang==DEFAULT_LANG )
+return( 1 );
+
+ if ( s1->lang>s2->lang )
+return( 1 );
+ else
+return( -1 );
+}
+
+static int lookup_order(const void *_s1,const void *_s2) {
+ const OTLookup * const * __s1 = (const OTLookup * const *) _s1;
+ const OTLookup * const * __s2 = (const OTLookup * const *) _s2;
+ const OTLookup *s1 = *__s1;
+ const OTLookup *s2 = *__s2;
+
+ if ( s1->lookup_index>s2->lookup_index )
+return( 1 );
+ else if ( s1->lookup_index<s2->lookup_index )
+return( -1 );
+ else
+return( 0 );
+}
+
+static void SFJstfSort(SplineFont *sf) {
+ /* scripts must be ordered */
+ /* languages must be ordered within scripts */
+ /* lookup lists must be ordered */
+ Justify *jscript, **scripts;
+ int i,cnt,lmax;
+ struct jstf_lang **langs;
+
+ for ( cnt=0, jscript= sf->justify; jscript!=NULL; ++cnt, jscript=jscript->next );
+ if ( cnt>1 ) {
+ scripts = malloc(cnt*sizeof(Justify *));
+ for ( i=0, jscript= sf->justify; jscript!=NULL; ++i, jscript=jscript->next )
+ scripts[i] = jscript;
+ qsort(scripts,cnt,sizeof(Justify *),jscriptsort);
+ for ( i=1; i<cnt; ++i )
+ scripts[i-1]->next = scripts[i];
+ scripts[cnt-1]->next = NULL;
+ sf->justify = scripts[0];
+ free(scripts);
+ }
+
+ langs = NULL; lmax=0;
+ for ( jscript= sf->justify; jscript!=NULL; jscript=jscript->next ) {
+ struct jstf_lang *jlang;
+ for ( cnt=0, jlang=jscript->langs; jlang!=NULL; ++cnt, jlang=jlang->next );
+ if ( cnt>1 ) {
+ if ( cnt>lmax )
+ langs = realloc(langs,(lmax=cnt+10)*sizeof(struct jstf_lang *));
+ for ( i=0, jlang=jscript->langs; jlang!=NULL; ++i, jlang=jlang->next )
+ langs[i] = jlang;
+ qsort(langs,cnt,sizeof(Justify *),jlangsort);
+ for ( i=1; i<cnt; ++i )
+ langs[i-1]->next = langs[i];
+ langs[cnt-1]->next = NULL;
+ jscript->langs = langs[0];
+ }
+ }
+ free(langs);
+
+ /* don't bother to sort the lookup lists yet. We need to separate them into*/
+ /* GPOS/GSUB first, might as well do it all at once later */
+}
+
+static void jstf_SplitTables(OTLookup **mixed,OTLookup ***_SUB,OTLookup ***_POS) {
+ /* (later is now, see comment above) */
+ /* mixed contains both gsub and gpos lookups. put them into their own */
+ /* lists, and then sort them */
+ int cnt, s, p;
+ OTLookup **SUB, **POS;
+
+ if ( mixed==NULL || mixed[0]==NULL ) {
+ *_SUB = NULL;
+ *_POS = NULL;
+return;
+ }
+
+ for ( cnt=0; mixed[cnt]!=NULL; ++cnt);
+ SUB = malloc((cnt+1)*sizeof(OTLookup *));
+ POS = malloc((cnt+1)*sizeof(OTLookup *));
+ for ( cnt=s=p=0; mixed[cnt]!=NULL; ++cnt) {
+ if ( mixed[cnt]->lookup_index==-1 ) /* Not actually used */
+ continue;
+ if ( mixed[cnt]->lookup_type>=gpos_start )
+ POS[p++] = mixed[cnt];
+ else
+ SUB[s++] = mixed[cnt];
+ }
+ POS[p] = SUB[s] = NULL;
+
+ if ( p>1 )
+ qsort(POS,p,sizeof(OTLookup *),lookup_order);
+ if ( s>1 )
+ qsort(SUB,s,sizeof(OTLookup *),lookup_order);
+ if ( p==0 ) {
+ free(POS);
+ POS=NULL;
+ }
+ if ( s==0 ) {
+ free(SUB);
+ SUB=NULL;
+ }
+ *_SUB = SUB;
+ *_POS = POS;
+}
+
+static uint32 jstf_dumplklist(FILE *jstf,OTLookup **PS,uint32 base) {
+ uint32 here;
+ int i;
+
+ if ( PS==NULL )
+return( 0 );
+
+ here = ftell(jstf);
+ for ( i=0; PS[i]!=NULL; ++i );
+ putshort(jstf,i); /* Lookup cnt */
+ for ( i=0; PS[i]!=NULL; ++i )
+ putshort( jstf, PS[i]->lookup_index );
+ free(PS);
+return( here - base );
+}
+
+static uint32 jstf_dumpmaxlookups(FILE *jstf,SplineFont *sf,struct alltabs *at,
+ OTLookup **maxes,uint32 base) {
+ uint32 here, lbase;
+ int cnt,i;
+ int scnt, j;
+ struct lookup_subtable *sub;
+
+ if ( maxes==NULL )
+return( 0 );
+
+ for ( cnt=i=0; maxes[i]!=NULL; ++i )
+ if ( !maxes[i]->unused )
+ ++cnt;
+ if ( cnt==0 )
+return( 0 );
+
+ if ( (here=ftell(jstf))<0 )
+return( 0 );
+
+ putshort( jstf,cnt );
+ for ( i=0; maxes[i]!=NULL; ++i ) if ( !maxes[i]->unused )
+ putshort( jstf,0 );
+ for ( cnt=i=0; maxes[i]!=NULL; ++i ) if ( !maxes[i]->unused ) {
+ if ( (lbase=ftell(jstf))<0 )
+return( 0 );
+ fseek(jstf,here+2+2*cnt,SEEK_SET);
+ putshort(jstf,lbase-here);
+ fseek(jstf,lbase,SEEK_SET);
+
+ putshort(jstf,maxes[i]->lookup_type - gpos_start );
+ putshort(jstf,maxes[i]->lookup_flags);
+
+ for ( scnt=0, sub=maxes[i]->subtables; sub!=NULL; sub=sub->next )
+ if ( !sub->unused )
+ ++scnt;
+ putshort( jstf,scnt );
+ for ( j=0; j<scnt; ++j )
+ putshort( jstf,0 );
+ /* I don't think extension lookups get a MarkAttachmentType, I guess */
+ /* that inherits from the parent? */
+
+ otf_dumpALookup(jstf, maxes[i], sf, at);
+ fseek(jstf,lbase+6,SEEK_SET);
+ for ( sub=maxes[i]->subtables; sub!=NULL; sub=sub->next )
+ if ( !sub->unused )
+ putshort(jstf,sub->subtable_offset-lbase);
+ ++cnt;
+ }
+
+return( here - base );
+}
+
+void otf_dumpjstf(struct alltabs *at, SplineFont *sf) {
+ FILE *jstf;
+ int i, cnt, lcnt, offset;
+ uint32 here, base;
+ Justify *jscript;
+ struct jstf_lang *jlang;
+
+ if ( sf->justify==NULL )
+return;
+
+ SFJstfSort(sf);
+ for ( jscript=sf->justify, cnt=0; jscript!=NULL; jscript=jscript->next, ++cnt );
+
+ at->jstf = jstf = tmpfile2();
+
+ putlong(jstf, 0x00010000 ); /* Version 1 */
+ putshort(jstf, cnt ); /* script count */
+ for ( jscript=sf->justify; jscript!=NULL; jscript=jscript->next ) {
+ putlong(jstf, jscript->script);
+ putshort(jstf, 0); /* Come back to this later */
+ }
+ for ( jscript=sf->justify, cnt=0; jscript!=NULL; jscript=jscript->next, ++cnt ) {
+ base = ftell(jstf);
+ if ( base>0xffff )
+ ff_post_error(_("Failure"),_("Offset in JSTF table is too big. The resultant font will not work."));
+ fseek(jstf, 6+6*cnt+4,SEEK_SET);
+ putshort(jstf,base);
+ fseek(jstf, base, SEEK_SET);
+
+ putshort(jstf,0); /* extender glyphs */
+ putshort(jstf,0); /* default lang */
+ for ( jlang=jscript->langs, lcnt=0; jlang!=NULL; jlang=jlang->next, ++lcnt );
+ if ( lcnt>0 && jscript->langs->lang==DEFAULT_LANG )
+ --lcnt;
+ putshort(jstf,lcnt); /* count of non-default languages */
+ jlang = jscript->langs;
+ if ( jlang!=NULL && jlang->lang==DEFAULT_LANG )
+ jlang=jlang->next;
+ for ( ; jlang!=NULL; jlang=jlang->next ) {
+ putlong(jstf, jlang->lang);
+ putshort(jstf, 0); /* Come back to this later */
+ }
+
+ if ( jscript->extenders!=NULL ) {
+ SplineChar **glyphs;
+ int gcnt,g;
+
+ here = ftell(jstf);
+ fseek(jstf,base,SEEK_SET);
+ putshort(jstf,here-base);
+ fseek(jstf,here,SEEK_SET);
+
+ glyphs = OrderedGlyphsFromNames(sf,jscript->extenders);
+ if ( glyphs==NULL )
+ gcnt=0;
+ else
+ for ( gcnt=0; glyphs[gcnt]!=NULL; ++gcnt);
+ putshort(jstf,gcnt);
+ for ( g=0; g<gcnt; ++g )
+ putshort(jstf,glyphs[g]->ttf_glyph);
+ free(glyphs);
+ }
+
+ offset=0;
+ for ( jlang=jscript->langs, lcnt=0; jlang!=NULL; jlang=jlang->next, ++lcnt ) {
+ here = ftell(jstf);
+ if ( jlang->lang==DEFAULT_LANG ) {
+ fseek(jstf,base+2,SEEK_SET);
+ offset = -6;
+ } else
+ fseek(jstf,base+offset+10+lcnt*6,SEEK_SET);
+ putshort(jstf,here-base);
+ fseek(jstf,here,SEEK_SET);
+
+ putshort(jstf,jlang->cnt);
+ for ( i=0; i<jlang->cnt; ++i )
+ putshort(jstf,0);
+ for ( i=0; i<jlang->cnt; ++i ) {
+ OTLookup **enSUB, **enPOS, **disSUB, **disPOS;
+ uint32 enSUBoff, enPOSoff, disSUBoff, disPOSoff, maxOff;
+ uint32 pbase;
+ pbase = ftell(jstf);
+ fseek(jstf,here+2+i*2,SEEK_SET);
+ putshort(jstf,pbase-here);
+ fseek(jstf,pbase,SEEK_SET);
+
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+ putshort(jstf,0);
+
+ jstf_SplitTables(jlang->prios[i].enableShrink,&enSUB,&enPOS);
+ jstf_SplitTables(jlang->prios[i].disableShrink,&disSUB,&disPOS);
+ enSUBoff = jstf_dumplklist(jstf,enSUB, pbase);
+ disSUBoff = jstf_dumplklist(jstf,disSUB,pbase);
+ enPOSoff = jstf_dumplklist(jstf,enPOS, pbase);
+ disPOSoff = jstf_dumplklist(jstf,disPOS,pbase);
+ maxOff = jstf_dumpmaxlookups(jstf,sf,at,jlang->prios[i].maxShrink,pbase);
+
+ fseek(jstf,pbase,SEEK_SET);
+ putshort(jstf,enSUBoff);
+ putshort(jstf,disSUBoff);
+ putshort(jstf,enPOSoff);
+ putshort(jstf,disPOSoff);
+ putshort(jstf,maxOff);
+
+ fseek(jstf,0,SEEK_END);
+ jstf_SplitTables(jlang->prios[i].enableExtend,&enSUB,&enPOS);
+ jstf_SplitTables(jlang->prios[i].disableExtend,&disSUB,&disPOS);
+ enSUBoff = jstf_dumplklist(jstf,enSUB, pbase);
+ disSUBoff = jstf_dumplklist(jstf,disSUB,pbase);
+ enPOSoff = jstf_dumplklist(jstf,enPOS, pbase);
+ disPOSoff = jstf_dumplklist(jstf,disPOS,pbase);
+ maxOff = jstf_dumpmaxlookups(jstf,sf,at,jlang->prios[i].maxExtend,pbase);
+
+ fseek(jstf,pbase+10,SEEK_SET);
+ putshort(jstf,enSUBoff);
+ putshort(jstf,disSUBoff);
+ putshort(jstf,enPOSoff);
+ putshort(jstf,disPOSoff);
+ putshort(jstf,maxOff);
+ fseek(jstf,0,SEEK_END);
+ }
+ }
+ }
+
+ fseek(jstf,0,SEEK_END);
+ at->jstflen = ftell(jstf);
+ if ( ftell(jstf)&1 )
+ putc('\0',jstf);
+ if ( ftell(jstf)&2 )
+ putshort(jstf,0);
+}
+
+void otf_dump_dummydsig(struct alltabs *at, SplineFont *sf) {
+ FILE *dsigf;
+
+ /* I think the DSIG table is a big crock. At best the most it can do is */
+ /* tell you that the font hasn't changed since it was signed. It gives */
+ /* no guarantee that the data are reasonable. I think it's stupid. */
+ /* I think it is even more stupid that MS choses this useless table as a*/
+ /* mark of whether a ttf font is OpenType or not. */
+ /* But users want their fonts to show up as OpenType under MS. And I'm */
+ /* told an empty DSIG table works for that. So... a truely pointless */
+ /* instance of a pointless table. I suppose that's a bit ironic. */
+
+ at->dsigf = dsigf = tmpfile2();
+ putlong(dsigf,0x00000001); /* Standard version (and why isn't it 0x10000 like everything else?) */
+ putshort(dsigf,0); /* No signatures in my signature table*/
+ putshort(dsigf,0); /* No flags */
+
+ at->dsiglen = ftell(dsigf);
+ if ( ftell(dsigf)&1 )
+ putc('\0',dsigf);
+ if ( ftell(dsigf)&2 )
+ putshort(dsigf,0);
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/tottfvar.c b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfvar.c
new file mode 100644
index 0000000000..436ab39f42
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/tottfvar.c
@@ -0,0 +1,820 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include "ttf.h"
+#include <math.h>
+
+static int PtNumbersAreSet(SplineChar *sc) {
+ struct splinecharlist *dep;
+
+ if ( sc==NULL )
+return( false );
+
+ if ( sc->ttf_instrs!=NULL )
+return( true );
+ for ( dep= sc->dependents; dep!=NULL ; dep=dep->next )
+ if ( dep->sc->ttf_instrs!=NULL )
+return( true );
+
+return( false );
+}
+
+static int AssignPtNumbers(MMSet *mm,int gid) {
+ /* None of the instances has fixed point numbers. Make them match */
+ int cnt=0;
+ SplineSet **ss;
+ SplinePoint **sp;
+ int i;
+ int allavg, alllines, stillmore, ret=true;
+
+ ss = malloc((mm->instance_count+1)*sizeof(SplineSet *));
+ sp = malloc((mm->instance_count+1)*sizeof(SplinePoint *));
+ for ( i=0; i<mm->instance_count; ++i )
+ ss[i] = mm->instances[i]->glyphs[gid]->layers[ly_fore].splines;
+ ss[i] = mm->normal->glyphs[gid]->layers[ly_fore].splines;
+
+ if ( ss[0]==NULL ) {
+ stillmore = false;
+ for ( i=0; i<=mm->instance_count; ++i )
+ if ( ss[i]!=NULL ) stillmore = true;
+ free(ss);
+ free(sp);
+ if ( stillmore )
+return( false );
+return( true );
+ } else {
+ stillmore = true;
+ for ( i=0; i<=mm->instance_count; ++i )
+ if ( ss[i]==NULL ) stillmore = false;
+ if ( !stillmore )
+{
+free(ss);
+free(sp);
+return( false );
+}
+ }
+
+ for (;;) {
+ for ( i=0; i<=mm->instance_count; ++i )
+ sp[i] = ss[i]->first;
+ for (;;) {
+ allavg = alllines = true;
+ for ( i=0; i<=mm->instance_count; ++i ) {
+ if ( !RealNear(sp[i]->me.x,(sp[i]->nextcp.x+sp[i]->prevcp.x)/2) ||
+ !RealNear(sp[i]->me.y,(sp[i]->nextcp.y+sp[i]->prevcp.y)/2) )
+ allavg = false;
+ if ( !sp[i]->nonextcp )
+ alllines = false;
+ }
+ if ( sp[0] == ss[0]->first )
+ allavg = false;
+ for ( i=0; i<=mm->instance_count; ++i ) {
+ if ( allavg )
+ sp[i]->ttfindex = 0xffff;
+ else
+ sp[i]->ttfindex = cnt;
+ }
+ if ( !allavg )
+ ++cnt;
+ for ( i=0; i<=mm->instance_count; ++i ) {
+ if ( alllines )
+ sp[i]->nextcpindex = 0xffff;
+ else
+ sp[i]->nextcpindex = cnt;
+ }
+ if ( !alllines )
+ ++cnt;
+
+ if ( sp[0]->next==NULL ) {
+ stillmore = false;
+ for ( i=1; i<=mm->instance_count; ++i )
+ if ( sp[i]->next!=NULL )
+ stillmore = true;
+ if ( stillmore )
+ ret = false;
+ break;
+ }
+ for ( i=1; i<=mm->instance_count; ++i )
+ if ( sp[i]->next==NULL )
+ stillmore = false;
+ if ( !stillmore ) {
+ ret = false;
+ break;
+ }
+ sp[0] = sp[0]->next->to;
+ for ( i=1; i<=mm->instance_count; ++i )
+ sp[i] = sp[i]->next->to;
+ if ( sp[0]==ss[0]->first ) {
+ stillmore = false;
+ for ( i=1; i<=mm->instance_count; ++i )
+ if ( sp[i]!=ss[i]->first )
+ stillmore = true;
+ if ( stillmore )
+ ret = false;
+ break;
+ }
+ for ( i=1; i<=mm->instance_count; ++i ) {
+ if ( sp[i]==ss[i]->first )
+ stillmore = false;
+ }
+ if ( !stillmore ) {
+ ret = false;
+ break;
+ }
+ }
+ if ( !ret )
+ break;
+ stillmore = true;
+ for ( i=0; i<=mm->instance_count; ++i )
+ ss[i] = ss[i]->next;
+ if ( ss[0]==NULL ) {
+ stillmore=false;
+ for ( i=1; i<=mm->instance_count; ++i )
+ if ( ss[i]!=NULL )
+ stillmore = true;
+ if ( stillmore )
+ ret = true;
+ break;
+ }
+ for ( i=1; i<=mm->instance_count; ++i )
+ if ( ss[i]==NULL )
+ stillmore = false;
+ if ( !stillmore ) {
+ ret = true;
+ break;
+ }
+ }
+ free(ss);
+ free(sp);
+return( ret );
+}
+
+static int MatchPoints(SplineFont *sffixed, SplineFont *sfother, int gid) {
+ SplineChar *fixed, *other;
+ SplineSet *ss1, *ss2;
+ SplinePoint *sp1, *sp2;
+
+ fixed = sffixed->glyphs[gid]; other = sfother->glyphs[gid];
+
+ if ( PtNumbersAreSet(other)) {
+ /* Point numbers must match exactly, both are fixed */
+ for ( ss1=fixed->layers[ly_fore].splines,
+ ss2=other->layers[ly_fore].splines;
+ ss1!=NULL && ss2!=NULL ;
+ ss1 = ss1->next, ss2=ss2->next ) {
+ for ( sp1=ss1->first, sp2=ss2->first; ; ) {
+ if ( sp1->ttfindex!=sp2->ttfindex ||
+ sp1->nextcpindex!=sp2->nextcpindex )
+return( false );
+ if ( sp1->next==NULL || sp2->next==NULL ) {
+ if ( sp1->next!=NULL || sp2->next!=NULL )
+return( false );
+ break;
+ }
+ sp1 = sp1->next->to; sp2=sp2->next->to;
+ if ( sp1==ss1->first || sp2==ss2->first ) {
+ if ( sp1!=ss1->first || sp2!=ss2->first )
+return( false );
+ break;
+ }
+ }
+ }
+return( ss1==NULL && ss2==NULL );
+ } else {
+ for ( ss1=fixed->layers[ly_fore].splines,
+ ss2=other->layers[ly_fore].splines;
+ ss1!=NULL && ss2!=NULL ;
+ ss1 = ss1->next, ss2=ss2->next ) {
+ for ( sp1=ss1->first, sp2=ss2->first; ; ) {
+ if ( sp1->ttfindex!=0xffff )
+ sp2->ttfindex = sp1->ttfindex;
+ else if ( !RealNear(sp2->me.x,(sp2->nextcp.x+sp2->prevcp.x)/2) ||
+ !RealNear(sp2->me.y,(sp2->nextcp.y+sp2->prevcp.y)/2) )
+return( false );
+ else
+ sp2->ttfindex = 0xffff;
+ if ( sp1->nextcpindex!=0xffff )
+ sp2->nextcpindex = sp1->nextcpindex;
+ else if ( !sp2->nonextcp )
+return( false );
+ else
+ sp2->nextcpindex = 0xffff;
+ if ( sp1->next==NULL || sp2->next==NULL ) {
+ if ( sp1->next!=NULL || sp2->next!=NULL )
+return( false );
+ break;
+ }
+ sp1 = sp1->next->to; sp2=sp2->next->to;
+ if ( sp1==ss1->first || sp2==ss2->first ) {
+ if ( sp1!=ss1->first || sp2!=ss2->first )
+return( false );
+ break;
+ }
+ }
+ }
+return( ss1==NULL && ss2==NULL );
+ }
+}
+
+int ContourPtNumMatch(MMSet *mm, int gid) {
+ SplineFont *sf;
+ int i;
+
+ if ( !mm->apple )
+return( false );
+
+ if ( gid>=mm->normal->glyphcnt )
+return( false );
+ if ( !SCWorthOutputting(mm->normal->glyphs[gid] ) ) {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( gid>=mm->instances[i]->glyphcnt )
+return( false );
+ if ( SCWorthOutputting(mm->instances[i]->glyphs[gid]))
+return( false );
+ }
+return( true ); /* None is not worth outputting, and that's ok, they match */
+ } else {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( gid>=mm->instances[i]->glyphcnt )
+return( false );
+ if ( !SCWorthOutputting(mm->instances[i]->glyphs[gid]))
+return( false );
+ }
+ /* All are worth outputting */
+ }
+
+ if ( mm->normal->glyphs[gid]->layers[ly_fore].refs!=NULL && mm->normal->glyphs[gid]->layers[ly_fore].splines!=NULL )
+return( false );
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( mm->instances[i]->glyphs[gid]->layers[ly_fore].refs!=NULL && mm->instances[i]->glyphs[gid]->layers[ly_fore].splines!=NULL )
+return( false );
+ }
+ if ( mm->normal->glyphs[gid]->layers[ly_fore].refs!=NULL ) {
+ RefChar *r;
+ int cnt, c;
+ for ( r=mm->normal->glyphs[gid]->layers[ly_fore].refs, cnt=0; r!=NULL; r=r->next )
+ ++cnt;
+ for ( i=0; i<mm->instance_count; ++i ) {
+ for ( r=mm->instances[i]->glyphs[gid]->layers[ly_fore].refs, c=0; r!=NULL; r=r->next )
+ ++c;
+ if ( c!=cnt )
+return( false );
+ }
+ }
+
+ sf = NULL;
+ if ( PtNumbersAreSet(mm->normal->glyphs[gid]) )
+ sf = mm->normal;
+ else {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ if ( PtNumbersAreSet(mm->instances[i]->glyphs[gid])) {
+ sf = mm->instances[i];
+ break;
+ }
+ }
+ }
+ if ( sf==NULL )
+ /* No instance has fixed points. Make sure all fonts are consistent */
+return( AssignPtNumbers(mm,gid));
+
+ if ( sf!=mm->normal && !MatchPoints(sf,mm->normal,gid))
+return( false );
+ for ( i=0; i<mm->instance_count; ++i ) if ( sf!=mm->instances[i] ) {
+ if ( !MatchPoints(sf, mm->instances[i],gid) )
+return( false );
+ }
+return( true );
+}
+
+static int SCPointCount(SplineChar *sc) {
+ int ptcnt=0;
+ RefChar *r;
+
+ ptcnt = SSTtfNumberPoints(sc->layers[ly_fore].splines);
+ for ( r=sc->layers[ly_fore].refs; r!=NULL ; r=r->next )
+ ++ptcnt;
+return( ptcnt );
+}
+
+int16 **SCFindDeltas(MMSet *mm, int gid, int *_ptcnt) {
+ /* When figuring out the deltas the first thing we must do is figure */
+ /* out each point's number */
+ int i, j, k, l, cnt, ptcnt;
+ int16 **deltas;
+ SplineSet *ss1, *ss2;
+ SplinePoint *sp1, *sp2;
+ RefChar *r1, *r2;
+
+ if ( !ContourPtNumMatch(mm,gid))
+return( NULL );
+ if ( !SCWorthOutputting(mm->normal->glyphs[gid]))
+return( NULL );
+
+ *_ptcnt = ptcnt = SCPointCount(mm->normal->glyphs[gid])+4;
+ deltas = malloc(2*mm->instance_count*sizeof(int16 *));
+ for ( i=0; i<2*mm->instance_count; ++i )
+ deltas[i] = calloc(ptcnt,sizeof(int16));
+ for ( i=0; i<mm->instance_count; ++i ) {
+ for ( ss1=mm->normal->glyphs[gid]->layers[ly_fore].splines,
+ ss2=mm->instances[i]->glyphs[gid]->layers[ly_fore].splines;
+ ss1!=NULL && ss2!=NULL ;
+ ss1 = ss1->next, ss2=ss2->next ) {
+ for ( sp1=ss1->first, sp2=ss2->first; ; ) {
+ if ( sp1->ttfindex!=0xffff ) {
+ deltas[2*i][sp1->ttfindex] = rint(sp2->me.x)-rint(sp1->me.x);
+ deltas[2*i+1][sp1->ttfindex] = rint(sp2->me.y)-rint(sp1->me.y);
+ }
+ if ( sp1->nextcpindex != 0xffff ) {
+ deltas[2*i][sp1->nextcpindex] = rint(sp2->nextcp.x)-rint(sp1->nextcp.x);
+ deltas[2*i+1][sp1->nextcpindex] = rint(sp2->nextcp.y)-rint(sp1->nextcp.y);
+ }
+ if ( sp1->next==NULL )
+ break;
+ sp1 = sp1->next->to; sp2 = sp2->next->to;
+ if ( sp1==ss1->first )
+ break;
+ }
+ }
+ for ( cnt=0,
+ r1=mm->normal->glyphs[gid]->layers[ly_fore].refs,
+ r2=mm->instances[i]->glyphs[gid]->layers[ly_fore].refs;
+ r1!=NULL && r2!=NULL;
+ r1=r1->next, r2=r2->next, ++cnt ) {
+ deltas[2*i][cnt] = r2->transform[4]-r1->transform[4];
+ deltas[2*i+1][cnt] = r2->transform[5]-r1->transform[5];
+ }
+ /* Phantom points */
+ deltas[2*i][ptcnt-4] = 0; deltas[2*i+1][ptcnt-4] = 0; /* lbearing */
+ deltas[2*i][ptcnt-3] = mm->instances[i]->glyphs[gid]->width -mm->normal->glyphs[gid]->width;
+ deltas[2*i+1][ptcnt-3] = 0; /* horizontal advance */
+ deltas[2*i][ptcnt-2] = 0; deltas[2*i+1][ptcnt-2] = 0; /* top bearing */
+ deltas[2*i][ptcnt-1] = 0; /* vertical advance */
+ deltas[2*i+1][ptcnt-1] = mm->instances[i]->glyphs[gid]->vwidth -mm->normal->glyphs[gid]->vwidth; /* horizontal advance */
+ }
+
+ /* Ok, each delta now contains the difference between the instance[i] points */
+ /* and the base points. But that isn't good enough. We must subtract */
+ /* [0,1] and [1,0] from [1,1], and then subtract [1,1,0] [1,0,1] [0,1,1] */
+ /* from [1,1,1] and so on (also [-1,0] from [-1,1], etc.) */
+ for ( j=1; j<mm->axis_count; ++j ) {
+ for ( i=0; i<mm->instance_count; ++i ) {
+ for ( k=cnt=0; k<mm->axis_count; ++k )
+ if ( mm->positions[i*mm->axis_count+k]!=0 )
+ ++cnt;
+ if ( cnt==j ) {
+ for ( l = 0; l<mm->instance_count; ++l ) if ( l!=i ) {
+ for ( k=0; k<mm->axis_count; ++k )
+ if ( mm->positions[i*mm->axis_count+k]!=0 &&
+ mm->positions[l*mm->axis_count+k]!=mm->positions[i*mm->axis_count+k])
+ break;
+ if ( k==mm->axis_count ) {
+ for ( k=0; k<ptcnt; ++k ) {
+ deltas[2*l][k] -= deltas[2*i][k];
+ deltas[2*l+1][k] -= deltas[2*i+1][k];
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* If all variants of the glyph are the same, no point in having a gvar */
+ /* entry for it */
+ for ( i=0 ; i<mm->instance_count; ++i ) {
+ for ( j=0; j<ptcnt; ++j )
+ if ( deltas[i][j]!=0 )
+ break;
+ if ( j!=ptcnt )
+ break;
+ }
+ if ( i==mm->instance_count ) {
+ /* All zeros */
+ for ( i=0 ; i<mm->instance_count; ++i )
+ free(deltas[i]);
+ free(deltas);
+return( NULL );
+ }
+
+return( deltas );
+}
+
+int16 **CvtFindDeltas(MMSet *mm, int *_ptcnt) {
+ int i, j, k, l, cnt, ptcnt;
+ int16 **deltas;
+ struct ttf_table *cvt, *icvt;
+ for ( cvt = mm->normal->ttf_tables; cvt!=NULL && cvt->tag!=CHR('c','v','t',' '); cvt=cvt->next );
+
+ if ( cvt==NULL )
+return( NULL );
+
+ icvt = NULL;
+ for ( i=0; i<mm->instance_count; ++i )
+ if ( (icvt=mm->instances[i]->ttf_tables)!=NULL )
+ break;
+ if ( icvt==NULL ) /* No other cvt tables => no variation */
+return( NULL );
+
+ *_ptcnt = ptcnt = cvt->len/2;
+ deltas = calloc(mm->instance_count,sizeof(int16 *));
+ for ( i=0; i<mm->instance_count; ++i ) if ( (icvt=mm->instances[i]->ttf_tables)!=NULL ) {
+ deltas[i] = calloc(ptcnt,sizeof(int16));
+ for ( j=0; j<ptcnt; ++j )
+ deltas[i][j] = memushort(icvt->data,icvt->len, sizeof(uint16)*j)-
+ memushort(cvt->data,cvt->len, sizeof(uint16)*j);
+ }
+
+ /* Ok, each delta now contains the difference between the instance[i] points */
+ /* and the base points. But that isn't good enough. We must subtract */
+ /* [0,1] and [1,0] from [1,1], and then subtract [1,1,0] [1,0,1] [0,1,1] */
+ /* from [1,1,1] and so on (also [-1,0] from [-1,1], etc.) */
+ for ( j=1; j<mm->axis_count; ++j ) {
+ for ( i=0; i<mm->instance_count; ++i ) if ( deltas[i]!=NULL ) {
+ for ( k=cnt=0; k<mm->axis_count; ++k )
+ if ( mm->positions[i*mm->axis_count+k]!=0 )
+ ++cnt;
+ if ( cnt==j ) {
+ for ( l = 0; l<mm->instance_count; ++l ) if ( l!=i && deltas[l]!=NULL ) {
+ for ( k=0; k<mm->axis_count; ++k )
+ if ( mm->positions[i*mm->axis_count+k]!=0 &&
+ mm->positions[l*mm->axis_count+k]!=mm->positions[i*mm->axis_count+k])
+ break;
+ if ( k==mm->axis_count ) {
+ for ( k=0; k<ptcnt; ++k )
+ deltas[l][k] -= deltas[i][k];
+ }
+ }
+ }
+ }
+ }
+
+ /* If all variants of the cvt are the same, no point in having a gvar */
+ /* entry for it */
+ for ( i=0 ; i<mm->instance_count; ++i ) if ( deltas[i]!=NULL ) {
+ for ( j=0; j<ptcnt; ++j )
+ if ( deltas[i][j]!=0 )
+ break;
+ if ( j==ptcnt ) {
+ free(deltas[i]);
+ deltas[i] = NULL;
+ }
+ }
+ for ( i=0 ; i<mm->instance_count; ++i )
+ if ( deltas[i]!=NULL )
+ break;
+ if ( i==mm->instance_count ) {
+ /* All zeros */
+ free(deltas);
+return( NULL );
+ }
+
+return( deltas );
+}
+
+static void ttf_dumpcvar(struct alltabs *at, MMSet *mm) {
+ int16 **deltas;
+ int ptcnt, cnt, pcnt;
+ int i,j,rj,big;
+ int tuple_size;
+ uint32 start, end;
+ uint16 *pts;
+
+ deltas = CvtFindDeltas(mm,&ptcnt);
+ if ( deltas == NULL ) return;
+ for ( i=cnt=0; i<mm->instance_count; ++i )
+ if ( deltas[i]!=NULL )
+ ++cnt;
+ if ( cnt==0 ) {
+ free(deltas);
+return;
+ }
+
+ tuple_size = 4+2*mm->axis_count;
+ at->cvar = tmpfile2();
+ putlong( at->cvar, 0x00010000 ); /* Format */
+ putshort( at->cvar, cnt ); /* Number of instances with cvt tables (tuple count of interesting tuples) */
+ putshort( at->cvar, 8+cnt*tuple_size ); /* Offset to data */
+
+ for ( i=0; i<mm->instance_count; ++i ) if ( deltas[i]!=NULL ) {
+ putshort( at->cvar, 0 ); /* tuple data size, figure out later */
+ putshort( at->cvar, 0xa000 ); /* tuple coords follow, private points in data */
+ for ( j=0; j<mm->axis_count; ++j )
+ putshort( at->cvar, rint(16384*mm->positions[i*mm->axis_count+j]) );
+ }
+ if ( ftell( at->cvar )!=8+cnt*tuple_size )
+ IError( "Data offset wrong" );
+
+ for ( i=cnt=0; i<mm->instance_count; ++i ) if ( deltas[i]!=NULL ) {
+ start = ftell(at->cvar);
+ for ( j=pcnt=0; j<ptcnt; ++j )
+ if ( deltas[i][j]!=0 )
+ ++pcnt;
+ pts = malloc(pcnt*sizeof(uint16));
+ for ( j=pcnt=0; j<ptcnt; ++j )
+ if ( deltas[i][j]!=0 )
+ pts[pcnt++]=j;
+
+ if ( pcnt>0x7f ) {
+ putc(0x80|(pcnt>>8), at->cvar );
+ putc(pcnt&0xff, at->cvar);
+ } else
+ putc(pcnt, at->cvar);
+ for ( j=0; j<pcnt; ) {
+ big = pts[j]>=0x80 ? 0x80 : 0;
+ for ( rj=j+1 ; rj<j+0x80 && rj<pcnt && !big; ++rj )
+ if ( pts[rj]-pts[rj-1]>=0x80 )
+ big = 0x80;
+
+ putc((rj-j-1)|big,at->cvar);
+ if ( big ) {
+ putshort(at->cvar,pts[j]);
+ for ( ++j; j<rj; ++j )
+ putshort(at->cvar,pts[j]-pts[j-1]);
+ } else {
+ putc(pts[j],at->cvar);
+ for ( ++j; j<rj; ++j )
+ putc(pts[j]-pts[j-1],at->cvar);
+ }
+ }
+ /* Now output the corresponding deltas for those points */
+ for ( j=0; j<pcnt; ) {
+ if ( deltas[i][j]>0x7f || deltas[i][j]<0x80 ) {
+ for ( rj=j+1; rj<j+0x40 && rj<pcnt; ++rj ) {
+ if ( deltas[i][pts[rj]]>0x7f || deltas[i][pts[rj]]<0x80 ||
+ (rj+1<j+0x40 && rj+1<pcnt && (deltas[i][pts[rj+1]]>0x7f || deltas[i][pts[rj+1]]<0x80)) )
+ /* Keep going with a big run */;
+ else
+ break;
+ }
+ putc( (rj-j-1)|0x40,at->cvar );
+ for ( ; j<rj ; ++j )
+ putshort( at->cvar, deltas[i][pts[j]] );
+ } else {
+ for ( rj=j+1; rj<j+0x40 && rj<pcnt; ++rj ) {
+ if ( deltas[i][pts[rj]]>0x7f || deltas[i][pts[rj]]<0x80 )
+ break;
+ }
+ putc( rj-j-1,at->cvar );
+ for ( ; j<rj ; ++j )
+ putc( deltas[i][pts[j]], at->cvar );
+ }
+ }
+ free(pts);
+ end = ftell(at->cvar);
+ fseek(at->cvar, 8+cnt*tuple_size, SEEK_SET);
+ putshort(at->cvar,end-start);
+ fseek(at->cvar, end, SEEK_SET);
+ ++cnt;
+ }
+
+ for ( i=0; i<mm->instance_count; ++i )
+ free( deltas[i] );
+ free(deltas);
+
+ at->cvarlen = ftell(at->cvar);
+ if ( at->cvarlen&1 )
+ putc('\0',at->cvar );
+ if ( ftell(at->cvar)&2 )
+ putshort(at->cvar,0);
+}
+
+static void dumpdeltas(struct alltabs *at,int16 *deltas,int ptcnt) {
+ int j,rj;
+
+ for ( j=0; j<ptcnt; ) {
+ for ( rj=j; rj<ptcnt && rj<j+0x40 && deltas[rj]==0; ++rj );
+ if ( rj!=j ) {
+ putc((rj-j-1)|0x80,at->gvar);
+ j = rj;
+ continue;
+ }
+ if ( deltas[j]>0x7f || deltas[j]<0x80 ) {
+ for ( rj=j+1; rj<j+0x40 && rj<ptcnt; ++rj ) {
+ if ( deltas[rj]>0x7f || deltas[rj]<0x80 ||
+ (rj+1<j+0x40 && rj+1<ptcnt && (deltas[rj+1]>0x7f || deltas[rj+1]<0x80)) )
+ /* Keep going with a big run */;
+ else
+ break;
+ }
+ putc( (rj-j-1)|0x40,at->gvar );
+ for ( ; j<rj ; ++j )
+ putshort( at->gvar, deltas[j] );
+ } else {
+ for ( rj=j+1; rj<j+0x40 && rj<ptcnt; ++rj ) {
+ if ( deltas[rj]>0x7f || deltas[rj]<0x80 ||
+ (deltas[rj]==0 && rj+1<j+0x40 && rj+1<ptcnt &&
+ deltas[rj+1]<=0x7f && deltas[rj+1]>=0x80 && deltas[rj+1]!=0 ))
+ break;
+ }
+ putc( rj-j-1,at->gvar );
+ for ( ; j<rj ; ++j )
+ putc( deltas[j], at->gvar );
+ }
+ }
+}
+
+static void ttf_dumpgvar(struct alltabs *at, MMSet *mm) {
+ int i,j, last;
+ uint32 gcoordoff, glyphoffs, start, here, tupledataend, tupledatastart;
+ int16 **deltas;
+ int ptcnt;
+
+ at->gvar = tmpfile2();
+ putlong( at->gvar, 0x00010000 ); /* Format */
+ putshort( at->gvar, mm->axis_count );
+ putshort( at->gvar, mm->instance_count ); /* Number of global tuples */
+ gcoordoff = ftell(at->gvar);
+ putlong( at->gvar, 0 ); /* Offset to global tuples, fix later */
+ putshort( at->gvar,at->maxp.numGlyphs );
+ putshort( at->gvar, 1 ); /* always output 32bit offsets */
+ putlong( at->gvar, ftell(at->gvar)+4 + (at->maxp.numGlyphs+1)*4);
+ glyphoffs = ftell(at->gvar);
+ for ( i=0; i<=at->maxp.numGlyphs; ++i )
+ putlong( at->gvar,0 );
+
+ start = ftell( at->gvar );
+ last = -1;
+ for ( i=0; i<at->gi.gcnt; ++i ) if ( at->gi.bygid[i]!=-1 ) {
+ deltas = SCFindDeltas(mm,at->gi.bygid[i],&ptcnt);
+ if ( deltas==NULL )
+ continue;
+ here = ftell(at->gvar);
+ fseek(at->gvar,glyphoffs+(last+1)*4,SEEK_SET);
+ for ( ; last< i; ++last )
+ putlong(at->gvar,here-start);
+ fseek(at->gvar,here,SEEK_SET);
+ putshort(at->gvar,mm->instance_count);
+ putshort(at->gvar,4+4*mm->instance_count); /* offset to data */
+ for ( j=0; j<mm->instance_count; ++j ) {
+ putshort(at->gvar,0); /* tuple data size, fix later */
+ putshort(at->gvar,0x2000|j); /* private points, tuple i */
+ }
+ for ( j=0; j<mm->instance_count; ++j ) {
+ tupledatastart = ftell(at->gvar);
+ putc('\0',at->gvar); /* Point list, all points */
+ dumpdeltas(at,deltas[2*j],ptcnt);
+ dumpdeltas(at,deltas[2*j+1],ptcnt);
+ tupledataend = ftell(at->gvar);
+ fseek(at->gvar,here+4+4*j,SEEK_SET);
+ putshort( at->gvar,tupledataend-tupledatastart);
+ fseek(at->gvar,tupledataend,SEEK_SET);
+ free(deltas[2*j]); free(deltas[2*j+1]);
+ }
+ free(deltas);
+ }
+ here = ftell(at->gvar);
+ fseek(at->gvar,glyphoffs+(last+1)*4,SEEK_SET);
+ for ( ; last< at->maxp.numGlyphs; ++last )
+ putlong(at->gvar,here-start);
+ fseek(at->gvar,gcoordoff,SEEK_SET);
+ putlong(at->gvar,here);
+ fseek(at->gvar,here,SEEK_SET);
+ for ( j=0; j<mm->instance_count; ++j ) {
+ for ( i=0; i<mm->axis_count; ++i )
+ putshort(at->gvar,rint(16384*mm->positions[j*mm->axis_count+i]));
+ }
+
+ at->gvarlen = ftell(at->gvar);
+ if ( at->gvarlen&1 )
+ putc('\0',at->gvar );
+ if ( ftell(at->gvar)&2 )
+ putshort(at->gvar,0);
+}
+
+
+static void ttf_dumpavar(struct alltabs *at, MMSet *mm) {
+ int i,j;
+
+ for ( i=0; i<mm->axis_count; ++i ) {
+ if ( mm->axismaps[i].points>3 )
+ break;
+ }
+ if ( i==mm->axis_count ) /* We only have simple axes */
+return; /* No need for a variation table */
+
+ at->avar = tmpfile2();
+ putlong( at->avar, 0x00010000 ); /* Format */
+ putlong( at->avar, mm->axis_count );
+ for ( i=0; i<mm->axis_count; ++i ) {
+ putshort( at->avar, mm->axismaps[i].points );
+ for ( j=0; j<mm->axismaps[i].points; ++j ) {
+ if ( mm->axismaps[i].designs[j]<mm->axismaps[i].def )
+ putshort( at->avar, (mm->axismaps[i].designs[j]-mm->axismaps[i].def)*16384/
+ (mm->axismaps[i].def-mm->axismaps[i].min));
+ else
+ putshort( at->avar, (mm->axismaps[i].designs[j]-mm->axismaps[i].def)*16384/
+ (mm->axismaps[i].max-mm->axismaps[i].def));
+ putshort( at->avar, mm->axismaps[i].blends[j]*16384);
+ }
+ }
+
+ at->avarlen = ftell(at->avar);
+ if ( at->avarlen&2 )
+ putshort(at->avar,0);
+}
+
+static uint32 AxisNameToTag(char *name) {
+ char buf[4];
+ int i;
+
+ if ( strmatch(name,"Weight")==0 )
+return( CHR('w','g','h','t'));
+ if ( strmatch(name,"Width")==0 )
+return( CHR('w','d','t','h'));
+ if ( strmatch(name,"OpticalSize")==0 )
+return( CHR('o','p','s','z'));
+ if ( strmatch(name,"Slant")==0 )
+return( CHR('s','l','n','t'));
+
+ memset(buf,0,sizeof(buf));
+ for ( i=0; i<4 && name[i]!='\0'; ++i )
+ buf[i] = name[i];
+return( CHR(buf[0],buf[1],buf[2],buf[3]));
+}
+
+static int AllocateStrId(struct alltabs *at,struct macname *mn) {
+ struct other_names *on;
+
+ if ( mn==NULL )
+return( 0 );
+
+ on = chunkalloc(sizeof(struct other_names));
+ on->strid = at->next_strid++;
+ on->mn = mn;
+ on->next = at->other_names;
+ at->other_names = on;
+return( on->strid );
+}
+
+static void ttf_dumpfvar(struct alltabs *at, MMSet *mm) {
+ int i,j;
+
+ at->fvar = tmpfile2();
+ putlong( at->fvar, 0x00010000 ); /* Format */
+ putshort( at->fvar, 16 ); /* Offset to first axis data */
+ putshort( at->fvar, 2 ); /* Size count pairs */
+ putshort( at->fvar, mm->axis_count );
+ putshort( at->fvar, 20 ); /* Size of each axis record */
+ putshort( at->fvar, mm->named_instance_count );
+ putshort( at->fvar, 4+4*mm->axis_count );
+
+ /* For each axis ... */
+ for ( i=0; i<mm->axis_count; ++i ) {
+ putlong( at->fvar, AxisNameToTag(mm->axes[i]) );
+ putlong( at->fvar, rint(mm->axismaps[i].min*65536));
+ putlong( at->fvar, rint(mm->axismaps[i].def*65536));
+ putlong( at->fvar, rint(mm->axismaps[i].max*65536));
+ putshort(at->fvar, 0 ); /* No flags defined for axes */
+ putshort(at->fvar, AllocateStrId(at,mm->axismaps[i].axisnames));
+ }
+
+ /* For each named font ... */
+ for ( i=0; i<mm->named_instance_count; ++i ) {
+ putshort(at->fvar, AllocateStrId(at,mm->named_instances[i].names));
+ putshort(at->fvar, 0 ); /* No flags here either */
+ for ( j=0; j<mm->axis_count; ++j )
+ putlong(at->fvar, rint(65536*mm->named_instances[i].coords[j]));
+ }
+
+ at->fvarlen = ftell(at->fvar);
+ if ( at->fvarlen&2 ) /* I don't think this is ever hit */
+ putshort(at->fvar,0);
+}
+
+void ttf_dumpvariations(struct alltabs *at, SplineFont *sf) {
+ MMSet *mm = sf->mm;
+ int i,j;
+
+ for ( j=0; j<sf->glyphcnt; ++j ) if ( sf->glyphs[j]!=NULL ) {
+ for ( i=0; i<mm->instance_count; ++i ) if ( mm->instances[i]->glyphs[j]!=NULL )
+ mm->instances[i]->glyphs[j]->ttf_glyph = sf->glyphs[j]->ttf_glyph;
+ }
+
+ ttf_dumpfvar(at,mm);
+ ttf_dumpgvar(at,mm);
+ ttf_dumpcvar(at,mm);
+ ttf_dumpavar(at,mm);
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/ttf.h b/dviware/dvisvgm/libs/ff-woff/fontforge/ttf.h
new file mode 100644
index 0000000000..db19f5dc86
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/ttf.h
@@ -0,0 +1,871 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "psfont.h" /* for struct fddata */
+
+#define MAC_DELETED_GLYPH_NAME "<Delete>"
+
+struct taxis {
+ uint32 tag;
+ real min, def, max; /* in user design space */
+ int nameid;
+ int paircount;
+ real *mapfrom; /* after conversion from [-1,1] */
+ real *mapto; /* secondary conversiont to [-1,1] */
+};
+
+struct tinstance {
+ int nameid;
+ real *coords; /* Location along axes array[axis_count] */
+};
+
+struct tuples {
+ real *coords; /* Location along axes array[axis_count] */
+ SplineChar **chars; /* Varied glyphs, array parallels one in info */
+ struct ttf_table *cvt;
+ KernClass *khead, *klast, *vkhead, *vklast; /* Varied kern classes */
+};
+
+struct variations {
+ int axis_count;
+ struct taxis *axes; /* Array of axis_count entries */
+ int instance_count; /* Not master designs, but named interpolations in design space */
+ struct tinstance *instances;
+ int tuple_count;
+ struct tuples *tuples;
+};
+
+enum gsub_inusetype { git_normal, git_justinuse, git_findnames };
+
+struct macidname {
+ int id;
+ struct macname *head, *last;
+ struct macidname *next;
+};
+
+struct savetab {
+ uint32 tag;
+ uint32 offset;
+ int len;
+};
+
+struct ttfinfo {
+ int emsize; /* ascent + descent? from the head table */
+ int ascent, descent; /* from the hhea table */
+ /* not the usWinAscent from the OS/2 table */
+ int vertical_origin; /* if vmetrics are present */
+ int width_cnt; /* from the hhea table, in the hmtx table */
+ int glyph_cnt; /* from maxp table (or cff table) */
+ unsigned int index_to_loc_is_long:1; /* in head table */
+ unsigned int is_ttc:1; /* Is it a font collection? */
+ unsigned int is_onebyte:1; /* Is it a one byte encoding? */
+ unsigned int twobytesymbol:1; /* it had a symbol encoding which we converted to unicode */
+ unsigned int complainedbeyondglyfend:1; /* Don't complain about this more than once */
+ unsigned int extensionrequested:1; /* Only ask once for a copy of a font containing extension subtables */
+ unsigned int to_order2:1; /* We are to leave the font as truetype (order2) splines, else convert to ps */
+ unsigned int complainedmultname:1; /* Don't complain about this more than once */
+ unsigned int strokedfont: 1; /* painttype==2 for otf */
+ unsigned int use_typo_metrics: 1;
+ unsigned int weight_width_slope_only: 1;
+ unsigned int optimized_for_cleartype: 1;
+ unsigned int apply_lsb: 1;
+ int sfntRevision;
+ enum openflags openflags;
+ /* Mac fonts platform=0/1, platform specific enc id, roman=0, english is lang code 0 */
+ /* iso platform=2, platform specific enc id, latin1=0/2, no language */
+ /* microsoft platform=3, platform specific enc id, 1, english is lang code 0x??09 */
+ char *copyright; /* from the name table, nameid=0 */
+ char *familyname; /* nameid=1 */
+ char *fullname; /* nameid=4 */
+ char *weight;
+ char *version; /* nameid=5 */
+ char *fontname; /* postscript font name, nameid=6 */
+ char *xuid; /* Only for open type cff fonts */
+ int uniqueid;
+ real italicAngle; /* from post table */
+ int upos, uwidth; /* underline pos, width from post table */
+ real strokewidth;
+ int fstype;
+ struct psdict *private; /* Only for open type cff fonts */
+ EncMap *map;
+ enum uni_interp uni_interp;
+ struct pfminfo pfminfo;
+ short os2_version;
+ short gasp_version;
+ int dupnamestate;
+ struct ttflangname *names;
+ char *fontcomments, *fontlog;
+ char **cvt_names;
+ SplineChar **chars; /* from all over, glyf table for contours */
+ /* cmap table for encodings */
+ /* hmtx table for widths */
+ /* post table for names */
+ /* Or from CFF table for everything in opentype */
+ LayerInfo *layers;
+ int layer_cnt;
+ BDFFont *bitmaps;
+ char *cidregistry, *ordering;
+ int supplement;
+ real cidfontversion;
+ int subfontcnt;
+ SplineFont **subfonts;
+ char *inuse; /* What glyphs are used by this font in the ttc */
+
+ int numtables;
+ /* BASE */
+ uint32 base_start; /* Offset from sof to start of 'BASE' table */
+ /* CFF */
+ uint32 cff_start; /* Offset from sof to start of postscript compact font format */
+ uint32 cff_length;
+ /* cmap */
+ uint32 encoding_start; /* Offset from sof to start of encoding table */
+ uint32 vs_start; /* Offset within 'cmap' to variant selector table */
+ /* gasp */
+ uint32 gasp_start;
+ /* glyf */
+ uint32 glyph_start; /* Offset from sof to start of glyph table */
+ uint32 glyph_length;
+ /* GDEF */
+ uint32 gdef_start; /* Offset from sof to start of GDEF table (glyph class defn, ligature carets) */
+ uint32 gdef_length;
+ /* GPOS */
+ uint32 gpos_start; /* Offset from sof to start of GPOS table */
+ uint32 gpos_length;
+ /* GSUB */
+ uint32 gsub_start; /* Offset from sof to start of GSUB table */
+ uint32 gsub_length;
+ uint32 g_bounds; /* Filled in with g???_start+g???_length */
+ /* EBDT, bdat */
+ uint32 bitmapdata_start; /* Offset to start of bitmap data */
+ uint32 bitmapdata_length;
+ /* EBLT, bloc */
+ uint32 bitmaploc_start; /* Offset to start of bitmap locator data */
+ uint32 bitmaploc_length;
+ /* gvar, etc. */
+ uint32 gvar_start, gvar_len;
+ uint32 fvar_start, fvar_len;
+ uint32 avar_start, avar_len;
+ uint32 cvar_start, cvar_len;
+ /* head */
+ uint32 head_start;
+ /* hhea */
+ uint32 hhea_start;
+ /* hmtx */
+ uint32 hmetrics_start;
+ /* JSTF */
+ uint32 jstf_start;
+ uint32 jstf_length;
+ /* kern */
+ uint32 kern_start;
+ /* loca */
+ uint32 glyphlocations_start;/* there are glyph_cnt of these, from maxp tab */
+ uint32 loca_length; /* actually glypn_cnt is wrong. Use the table length (divided by size) instead */
+ /* maxp */
+ uint32 maxp_start; /* maximum number of glyphs */
+ uint32 maxp_len;
+ /* name */
+ uint32 copyright_start; /* copyright and fontname */
+ /* post */
+ uint32 postscript_start; /* names for the glyphs, italic angle, etc. */
+ /* OS/2 */
+ uint32 os2_start;
+ /* TYP1 */
+ uint32 typ1_start; /* For Adobe's? Apple's? attempt to stuff a type1 font into an sfnt wrapper */
+ uint32 typ1_length;
+ /* vhea */
+ uint32 vhea_start;
+ /* vmtx */
+ uint32 vmetrics_start;
+ /* VORG */
+ uint32 vorg_start;
+
+ /* PfEd -- FontForge/PfaEdit specific info */
+ uint32 pfed_start;
+ /* TeX -- TeX table, also non-standard */
+ uint32 tex_start;
+ /* BDF -- BDF properties, also non-standard */
+ uint32 bdf_start;
+ /* FFTM -- FontForge timestamps */
+ uint32 fftm_start;
+
+ /* Apple Advanced Typography Tables */
+ uint32 prop_start;
+ uint32 lcar_start;
+ uint32 opbd_start;
+ uint32 acnt_start;
+ uint32 feat_start;
+ uint32 mort_start;
+ uint32 morx_start;
+ uint32 bsln_start;
+
+ /* MATH Table */
+ uint32 math_start;
+ uint32 math_length;
+
+ /* Info for instructions */
+ uint32 cvt_start, cvt_len;
+ uint32 prep_start, prep_len;
+ uint32 fpgm_start, fpgm_len;
+
+ unsigned int one_of_many: 1; /* A TTCF file, or a opentype font with multiple fonts */
+ unsigned int obscomplain: 1; /* We've complained about obsolete format 3 in EBDT table */
+ unsigned int cmpcomplain: 1; /* We've complained about compressed format 4 in EBDT */
+ unsigned int unkcomplain: 1; /* We've complained about unknown formats in EBDT */
+ unsigned int comcomplain: 1; /* We've complained about composit formats in EBDT */
+ unsigned int onlystrikes: 1; /* Only read in the bitmaps, not the outlines */
+ unsigned int onlyonestrike: 1; /* Only read in one bitmap (strike) */
+ unsigned int barecff: 1; /* pay attention to the encoding in the cff file, we won't have a cmap */
+ unsigned int wdthcomplain: 1; /* We've complained about advance widths exceding the max */
+ unsigned int bbcomplain: 1; /* We've complained about glyphs being outside the bounding box */
+ unsigned int gbbcomplain: 1; /* We've complained about points being outside the bounding box */
+
+ int platform, specific; /* values of the encoding we chose to use */
+
+ int anchor_class_cnt; /* For GPOS */
+ int anchor_merge_cnt;
+ AnchorClass *ahead, *alast;
+
+ KernClass *khead, *klast, *vkhead, *vklast;
+
+ OTLookup *gpos_lookups, *gsub_lookups, *cur_lookups;
+
+ OTLookup *mort_subs_lookup, *mort_pos_lookup2;
+ int mort_r2l, mort_tag_mac, mort_feat, mort_setting, mort_is_nested;
+ uint16 *morx_classes;
+ uint16 *bsln_values;
+
+ int mort_max;
+
+ struct ttf_table *tabs;
+ FPST *possub;
+ ASM *sm;
+ MacFeat *features;
+ char *chosenname;
+ int macstyle;
+ int lookup_cnt; /* Max lookup in current GPOS/GSUB table */
+ int feature_cnt; /* Max feature in current GPOS/GSUB table */
+ struct variations *variations;
+ struct macidname *macstrids;
+ struct fontdict *fd; /* For reading in Type42 fonts. Glyph names in postscript section must be associated with glyphs in TTF section */
+ int savecnt;
+ struct savetab *savetab;
+ int32 last_size_pos;
+ uint16 design_size;
+ uint16 fontstyle_id;
+ struct otfname *fontstyle_name;
+ uint16 design_range_bottom, design_range_top;
+ struct texdata texdata;
+ int mark_class_cnt;
+ char **mark_classes; /* glyph name list */
+ char **mark_class_names; /* used within ff (utf8) */
+ int mark_set_cnt;
+ char **mark_sets; /* glyph name list */
+ char **mark_set_names; /* used within ff (utf8) */
+ uint8 warned_morx_out_of_bounds_glyph;
+ int badgid_cnt, badgid_max; /* Used when parsing apple morx tables*/
+ SplineChar **badgids; /* which use out of range glyph IDs as temporary flags */
+ long long creationtime; /* seconds since 1970 */
+ long long modificationtime;
+ int gasp_cnt;
+ struct gasp *gasp;
+ struct MATH *math;
+ /* Set of errors we found when loading the font */
+ unsigned int bad_ps_fontname: 1;
+ unsigned int bad_glyph_data: 1;
+ unsigned int bad_cff: 1;
+ unsigned int bad_metrics: 1;
+ unsigned int bad_cmap: 1;
+ unsigned int bad_embedded_bitmap: 1;
+ unsigned int bad_gx: 1;
+ unsigned int bad_ot: 1;
+ unsigned int bad_os2_version: 1;
+ unsigned int bad_sfnt_header: 1;
+ Layer guidelines;
+ struct Base *horiz_base, *vert_base;
+ Justify *justify;
+
+ int advanceWidthMax;
+ int fbb[4]; /* x,yMin x,yMax*/
+ int isFixedPitch;
+
+ uint32 jstf_script;
+ uint32 jstf_lang;
+ int16 jstf_isShrink, jstf_prio, jstf_lcnt;
+ struct otffeatname *feat_names;
+ enum gsub_inusetype justinuse;
+ long ttfFileSize;
+};
+
+struct taboff {
+ uint32 tag; /* Table name */
+ uint32 checksum;/* for table */
+ uint32 offset; /* to start of table in file */
+ uint32 length;
+ FILE *data;
+ uint16 dup_of;
+ uint16 orderingval;
+};
+
+#define MAX_TAB 48
+struct tabdir {
+ int32 version; /* 0x00010000 */
+ uint16 numtab;
+ uint16 searchRange; /* (Max power of 2 <= numtab) *16 */
+ uint16 entrySel; /* Log2(Max power of 2 <= numtab ) */
+ uint16 rangeShift; /* numtab*16 - searchRange */
+ struct taboff tabs[MAX_TAB];/* room for all the tables */
+ /* Not in any particular order. */
+ struct taboff *ordered[MAX_TAB]; /* Ordered the way the tables should be output in file */
+ struct taboff *alpha[MAX_TAB]; /* Ordered alphabetically by tag for the ttf header */
+};
+
+struct glyphhead {
+ int16 numContours;
+ int16 xmin;
+ int16 ymin;
+ int16 xmax;
+ int16 ymax;
+};
+
+struct head {
+ int32 version; /* 0x00010000 */
+ int32 revision; /* 0 */
+ uint32 checksumAdj; /* set to 0, sum entire font, store 0xb1b0afba-sum */
+ uint32 magicNum; /* 0x5f0f3cf5 */
+ uint16 flags; /* 1 */
+ uint16 emunits; /* sf->ascent+sf->descent */
+ int32 createtime[2];/* number of seconds since 1904 */
+ int32 modtime[2];
+ int16 xmin; /* min for entire font */
+ int16 ymin;
+ int16 xmax;
+ int16 ymax;
+ uint16 macstyle; /* 1=>Bold, 2=>Italic */
+ uint16 lowestreadable; /* size in pixels. Say about 10? */
+ int16 dirhint; /* 0=>mixed directional characters, */
+ int16 locais32; /* is the location table 32bits or 16, 0=>16, 1=>32 */
+ int16 glyphformat; /* 0 */
+ uint16 mbz; /* padding */
+};
+
+struct hhead {
+ int32 version; /* 0x00010000 */
+ int16 ascender; /* sf->ascender */
+ int16 descender; /* -sf->descender */
+ int16 linegap; /* 0 */
+ int16 maxwidth; /* of all characters */
+ int16 minlsb; /* How is this different from xmin above? */
+ int16 minrsb;
+ int16 maxextent; /* How is this different from xmax above? */
+ int16 caretSlopeRise;/* Uh... let's say 1? */
+ int16 caretSlopeRun;/* Uh... let's say 0 */
+ /* not exactly specified, but FontValidator wants this to match italicangle */
+ int16 mbz[5];
+ int16 metricformat; /* 0 */
+ uint16 numMetrics; /* just set to glyph count */
+};
+
+struct kp {
+ uint16 left; /* left glyph num */
+ uint16 right; /* right glyph num */
+ /* table is ordered by these two above treated as uint32 */
+ int16 offset; /* kern amount */
+};
+
+struct kern {
+ uint16 version; /* 0 */
+ uint16 ntab; /* 1, number of subtables */
+ /* first (and only) subtable */
+ uint16 stversion; /* 0 */
+ uint16 length; /* length of subtable beginning at &stversion */
+ uint16 coverage; /* 1, (set of flags&format) */
+ uint16 nPairs; /* number of kern pairs */
+ uint16 searchRange; /* (Max power of 2 <= nPairs) *6 */
+ uint16 entrySel; /* Log2(Max power of 2 <= nPairs ) */
+ uint16 rangeShift; /* numtab*6 - searchRange */
+ struct kp *kerns; /* Array should be nPairs big */
+};
+
+struct maxp {
+ int32 version; /* 0x00010000 */
+ uint16 numGlyphs;
+ uint16 maxPoints; /* max number of points in a simple glyph */
+ uint16 maxContours; /* max number of paths in a simple glyph */
+ uint16 maxCompositPts;
+ uint16 maxCompositCtrs;
+ uint16 maxZones; /* 1 */
+ uint16 maxTwilightPts; /* 0 */
+ uint16 maxStorage; /* 0 */
+ uint16 maxFDEFs; /* 0 */
+ uint16 maxIDEFs; /* 0 */
+ uint16 maxStack; /* 0 */
+ uint16 maxglyphInstr;/* 0 */
+ uint16 maxnumcomponents; /* Maximum number of refs in any composit */
+ uint16 maxcomponentdepth;
+ /* Apple docs say: 0 (if no composits), maximum value 1 (one level of composit) */
+ /* OpenType docs say: 1 (if no composits), any depth allowed */
+};
+
+struct namerec {
+ uint16 platform; /* 3 => MS */
+ uint16 specific; /* 1 */
+ uint16 language; /* 0x0409 */
+ uint16 nameid; /* 0=>copyright, 1=>family, 2=>weight, 4=>fullname */
+ /* 5=>version, 6=>postscript name */
+ uint16 strlen;
+ uint16 stroff;
+};
+
+struct os2 {
+ uint16 version; /* 1 */
+ int16 avgCharWid; /* average all chars (v3) see v2 definition below */
+ uint16 weightClass; /* 100=>thin, 200=>extra-light, 300=>light, 400=>normal, */
+ /* 500=>Medium, 600=>semi-bold, 700=>bold, 800=>extra-bold, */
+ /* 900=>black */
+ uint16 widthClass; /* 75=>condensed, 100, 125=>expanded */
+ int16 fstype; /* 0x0008 => allow embedded editing */
+ int16 ysubXSize; /* emsize/5 */
+ int16 ysubYSize; /* emsize/5 */
+ int16 ysubXOff; /* 0 */
+ int16 ysubYOff; /* emsize/5 */
+ int16 ysupXSize; /* emsize/5 */
+ int16 ysupYSize; /* emsize/5 */
+ int16 ysupXOff; /* 0 */
+ int16 ysupYOff; /* emsize/5 */
+ int16 yStrikeoutSize; /* 102/2048 *emsize */
+ int16 yStrikeoutPos; /* 530/2048 *emsize */
+ int16 sFamilyClass; /* ??? 0 */
+ /* high order byte is the "class", low order byte the sub class */
+ /* class = 0 => no classification */
+ /* class = 1 => old style serifs */
+ /* subclass 0, no class; 1 ibm rounded; 2 garalde; 3 venetian; 4 mod venitian; 5 dutch modern; 6 dutch trad; 7 contemporary; 8 caligraphic; 15 misc */
+ /* class = 2 => transitional serifs */
+ /* subclass 0, no class; 1 drect line; 2 script; 15 misc */
+ /* class = 3 => modern serifs */
+ /* subclass: 1, italian; 2, script */
+ /* class = 4 => clarendon serifs */
+ /* subclass: 1, clarendon; 2, modern; 3 trad; 4 newspaper; 5 stub; 6 monotone; 7 typewriter */
+ /* class = 5 => slab serifs */
+ /* subclass: 1, monotone; 2, humanist; 3 geometric; 4 swiss; 5 typewriter */
+ /* class = 7 => freeform serifs */
+ /* subclass: 1, modern */
+ /* class = 8 => sans serif */
+ /* subclass: 1, ibm neogrotesque; 2 humanist; 3 low-x rounded; 4 high-x rounded; 5 neo-grotesque; 6 mod neo-grot; 9 typewriter; 10 matrix */
+ /* class = 9 => ornamentals */
+ /* subclass: 1, engraver; 2 black letter; 3 decorative; 4 3D */
+ /* class = 10 => scripts */
+ /* subclass: 1, uncial; 2 brush joined; 3 formal joined; 4 monotone joined; 5 calligraphic; 6 brush unjoined; 7 formal unjoined; 8 monotone unjoined */
+ /* class = 12 => symbolic */
+ /* subclass: 3 mixed serif; 6 old style serif; 7 neo-grotesque sans; */
+ char panose[10]; /* can be set to zero */
+ uint32 unicoderange[4];
+ /* 1<<0=>ascii, 1<<1 => latin1, 2=>100-17f, 3=>180-24f, 4=>250-2af */
+ /* 5=> 2b0-2ff, 6=>300-36f, ... */
+ char achVendID[4]; /* can be zero */
+ uint16 fsSel; /* 1=> italic, 32=>bold, 64 => regular */
+ /* 2=>underscore, 4=>negative, 8->outlined, 16=>strikeout */
+ /* version 4 of OS/2 */
+ /* 128->don't use win_ascent/descent for line spacing */
+ /* 256=>family varies on weight width slope only */
+ /* 512=>oblique (as opposed to italic) */
+ uint16 firstcharindex; /* minimum unicode encoding */
+ uint16 lastcharindex; /* maximum unicode encoding */
+ uint16 ascender; /* font ascender height (not ascent) */
+ uint16 descender; /* font descender height */
+ uint16 linegap; /* 0 */
+ uint16 winascent; /* ymax */
+ uint16 windescent; /* ymin */
+ uint32 ulCodePage[2];
+ /* 1<<0 => latin1, 1<<1=>latin2, cyrillic, greek, turkish, hebrew, arabic */
+ /* 1<<30 => mac, 1<<31 => symbol */
+ /* OTF stuff (version 2 of OS/2) */
+ short xHeight;
+ short capHeight;
+ short defChar;
+ short breakChar;
+ short maxContext;
+ /* V3 of OS/2 has no additional data */
+ /* V4 of OS/2 has no additional data */
+
+ int v1_avgCharWid; /* 1&2 Weighted average of the lower case letters and space */
+ int v3_avgCharWid; /* 3&4 average over all non-zero width glyphs */
+};
+
+struct glyphinfo {
+ struct maxp *maxp; /* this one is given to dumpglyphs, rest blank */
+ uint32 *loca;
+ FILE *glyphs;
+ FILE *hmtx;
+ int hmtxlen;
+ FILE *vmtx;
+ int vmtxlen;
+ int next_glyph;
+ int glyph_len;
+ int xmin, ymin, xmax, ymax;
+ BlueData bd;
+ int strikecnt; /* number of bitmaps to dump */
+ int lasthwidth, lastvwidth; /* encoding of last glyph for which we generate a full metrics entry */
+ int hfullcnt, vfullcnt;
+ int flags;
+ int fixed_width;
+ int32 *bsizes;
+ unsigned int dovariations: 1;
+ unsigned int onlybitmaps: 1;
+ unsigned int has_instrs: 1;
+ unsigned int is_ttf: 1;
+ unsigned int ttc_composite_font: 1;
+ SplineFont *sf;
+ int32 *pointcounts;
+ int *bygid; /* glyph list */
+ int gcnt;
+ int layer;
+};
+
+struct vorg {
+ uint16 majorVersion; /* 1 */
+ uint16 minorVersion; /* 0 */
+ short defaultVertOriginY; /* Y coord of default vertical origin in the design coordinate system */
+ uint16 numVertOriginYMetrics; /* exceptions to the above, elements in following array */
+};
+
+struct feat_name {
+ int strid;
+ struct macname *mn, *smn;
+};
+
+struct other_names {
+ int strid;
+ struct macname *mn;
+ struct other_names *next;
+};
+
+struct alltabs {
+ struct tabdir tabdir;
+ struct head head;
+ struct hhead hhead;
+ struct hhead vhead;
+ struct maxp maxp;
+ struct os2 os2;
+ struct vorg vorg;
+ FILE *loca;
+ int localen;
+ FILE *name;
+ int namelen;
+ FILE *post;
+ int postlen;
+ FILE *gpos; /* Used instead of kern for opentype (and other glyph positioning) */
+ int gposlen;
+ FILE *gsub; /* Used for ligatures and other substitutions */
+ int gsublen;
+ FILE *gdef; /* If we use mark to base we need this to tell the text processor what things are marks (the opentype docs say it is optional. They are wrong) */
+ int gdeflen;
+ FILE *kern;
+ int kernlen;
+ FILE *cmap;
+ int cmaplen;
+ FILE *headf;
+ int headlen;
+ FILE *hheadf;
+ int hheadlen;
+ FILE *maxpf;
+ int maxplen;
+ FILE *os2f;
+ int os2len;
+ FILE *math;
+ int mathlen;
+ FILE *base;
+ int baselen;
+ FILE *jstf;
+ int jstflen;
+ FILE *cvtf;
+ int cvtlen;
+ FILE *fpgmf; /* Copied from an original ttf file and dumped out. Never generated */
+ int fpgmlen;
+ FILE *prepf; /* Copied from an original ttf file and dumped out. Never generated */
+ int preplen;
+ FILE *vheadf;
+ int vheadlen;
+ FILE *vorgf;
+ int vorglen;
+ FILE *gaspf;
+ int gasplen;
+ FILE *cfff;
+ int cfflen;
+ FILE *sidf;
+ FILE *sidh;
+ FILE *charset;
+ FILE *encoding;
+ FILE *globalsubrs;
+ FILE *private;
+ FILE *charstrings;
+ FILE *fdselect;
+ FILE *fdarray;
+ FILE *bdat; /* might be EBDT */
+ int bdatlen;
+ FILE *bloc; /* might be EBLC */
+ int bloclen;
+ FILE *ebsc;
+ int ebsclen;
+ FILE *prop;
+ int proplen;
+ FILE *opbd;
+ int opbdlen;
+ FILE *acnt;
+ int acntlen;
+ FILE *lcar;
+ int lcarlen;
+ FILE *feat;
+ int featlen;
+ FILE *morx;
+ int morxlen;
+ FILE *bsln;
+ int bslnlen;
+ FILE *pfed;
+ int pfedlen;
+ FILE *tex;
+ int texlen;
+ FILE *bdf;
+ int bdflen;
+ FILE *gvar;
+ int gvarlen;
+ FILE *fvar;
+ int fvarlen;
+ FILE *cvar;
+ int cvarlen;
+ FILE *avar;
+ int avarlen;
+ FILE *fftmf;
+ int fftmlen;
+ FILE *dsigf;
+ int dsiglen;
+ FILE *hdmxf;
+ int hdmxlen;
+ int defwid, nomwid;
+ int sidcnt;
+ int lenpos;
+ int privatelen;
+ unsigned int sidlongoffset: 1;
+ unsigned int cfflongoffset: 1;
+ unsigned int applemode: 1; /* Where apple & ms differ do things apple's way (bitmaps, name table PostScript) */
+ unsigned int opentypemode: 1; /* Where apple & ms differ do things opentype's way (bitmaps, name table PostScript) */
+ /* If both are set then try to generate both types of tables. Some things can't be fudged though (name table postscript) */
+ unsigned int msbitmaps: 1;
+ unsigned int applebitmaps: 1;
+ unsigned int otbbitmaps: 1;
+ unsigned int isotf: 1;
+ unsigned int dovariations: 1; /* Output Apple *var tables (for mm fonts) */
+ unsigned int error: 1;
+ struct glyphinfo gi;
+ int isfixed;
+ struct fd2data *fds;
+ int next_strid;
+
+ struct feat_name *feat_name;
+ struct other_names *other_names;
+ struct macname2 *ordered_feat;
+
+ int next_lookup; /* for doing nested lookups in contextual features */
+ short *gn_sid;
+ enum fontformat format;
+ int fontstyle_name_strid; /* For GPOS 'size' */
+ SplineFont *sf;
+ EncMap *map;
+ struct ttf_table *oldcvt;
+ unsigned oldcvtlen;
+};
+
+struct subhead { uint16 first, cnt, delta, rangeoff; }; /* a sub header in 8/16 cmap table */
+
+enum touchflags { tf_x=1, tf_y=2, tf_d=4, tf_endcontour=0x80, tf_startcontour=0x40 };
+
+struct ct_branch {
+ uint16 classnum;
+ struct contexttree *branch;
+};
+
+struct ct_subs {
+ struct fpst_rule *rule;
+ struct contexttree *branch;/* if the rule ends here this will be null */
+ uint16 thisclassnum;
+};
+
+struct contexttree {
+ int depth;
+ int branch_cnt; /* count of subbranches of this node */
+ struct ct_branch *branches;
+ struct fpst_rule *ends_here;
+ int rule_cnt; /* count of rules which are active here */
+ struct ct_subs *rules;
+ int pending_pos;
+ OTLookup *applymarkedsubs;
+ OTLookup *applycursubs;
+ uint16 marked_index, cur_index;
+ uint8 markme;
+ int state, next_state;
+ struct contexttree *parent;
+};
+
+ /* TrueType Composite glyph flags */
+#define _ARGS_ARE_WORDS 1
+#define _ARGS_ARE_XY 2
+#define _ROUND 4 /* round offsets so componant is on grid */
+#define _SCALE 8
+/* 0x10 is reserved */
+#define _MORE 0x20
+#define _XY_SCALE 0x40
+#define _MATRIX 0x80
+#define _INSTR 0x100
+#define _USE_MY_METRICS 0x200
+#define _OVERLAP_COMPOUND 0x400 /* Used in Apple GX fonts */
+ /* Means the components overlap (which? this one and what other?) */
+/* Described in OpenType specs, not by Apple */
+/* amusingly, Apple supports but MS does not */
+/* MS says they support this after Win 2000 */
+#define _SCALED_OFFSETS 0x800 /* Use Apple definition of offset interpretation */
+#define _UNSCALED_OFFSETS 0x1000 /* Use MS definition */
+
+extern int ttfFixupRef(SplineChar **chars,int i);
+extern const char *cffnames[];
+extern const int nStdStrings;
+
+ /* Open type Advanced Typography Tables */
+extern void otf_dumpgpos(struct alltabs *at, SplineFont *sf);
+extern void otf_dumpgsub(struct alltabs *at, SplineFont *sf);
+extern void otf_dumpgdef(struct alltabs *at, SplineFont *sf);
+extern void otf_dumpbase(struct alltabs *at, SplineFont *sf);
+extern void otf_dumpjstf(struct alltabs *at, SplineFont *sf);
+extern void otf_dump_dummydsig(struct alltabs *at, SplineFont *sf);
+extern int gdefclass(SplineChar *sc);
+
+extern void ttf_dumpkerns(struct alltabs *at, SplineFont *sf);
+extern void aat_dumplcar(struct alltabs *at, SplineFont *sf);
+extern void aat_dumpmorx(struct alltabs *at, SplineFont *sf);
+extern void aat_dumpopbd(struct alltabs *at, SplineFont *sf);
+extern void aat_dumpprop(struct alltabs *at, SplineFont *sf);
+extern void aat_dumpbsln(struct alltabs *at, SplineFont *sf);
+extern int LookupHasDefault(OTLookup *otl);
+extern int scriptsHaveDefault(struct scriptlanglist *sl);
+extern int FPSTisMacable(SplineFont *sf, FPST *fpst);
+
+extern int OTTagToMacFeature(uint32 tag, int *featureType,int *featureSetting);
+extern uint16 *props_array(SplineFont *sf,struct glyphinfo *gi);
+extern int haslrbounds(SplineChar *sc, PST **left, PST **right);
+extern int16 *PerGlyphDefBaseline(SplineFont *sf,int *def_baseline);
+extern void FigureBaseOffsets(SplineFont *sf,int def_bsln,int offsets[32]);
+
+ /* Apple variation tables */
+extern int ContourPtNumMatch(MMSet *mm, int gid);
+extern int16 **SCFindDeltas(MMSet *mm, int gid, int *_ptcnt);
+extern int16 **CvtFindDeltas(MMSet *mm, int *_ptcnt);
+extern void ttf_dumpvariations(struct alltabs *at, SplineFont *sf);
+
+extern struct macsettingname {
+ int mac_feature_type;
+ int mac_feature_setting;
+ uint32 otf_tag;
+} macfeat_otftag[], *user_macfeat_otftag;
+
+ /* TrueType instructions */
+extern struct ttf_table *SFFindTable(SplineFont *sf,uint32 tag);
+
+extern int memushort(uint8 *data,int table_len, int offset);
+extern void memputshort(uint8 *data,int offset,uint16 val);
+extern int TTF__getcvtval(SplineFont *sf,int val);
+extern int TTF_getcvtval(SplineFont *sf,int val);
+
+extern int SSAddPoints(SplineSet *ss,int ptcnt,BasePoint *bp, char *flags);
+extern int Macable(SplineFont *sf, OTLookup *otl);
+
+ /* Used by both otf and apple */
+extern int LigCaretCnt(SplineChar *sc);
+extern uint16 *ClassesFromNames(SplineFont *sf,char **classnames,int class_cnt,
+ int numGlyphs, SplineChar ***glyphs, int apple_kc);
+extern SplineChar **SFGlyphsFromNames(SplineFont *sf,char *names);
+
+
+extern SplineChar **EntryExitDecompose(SplineFont *sf,AnchorClass *ac,
+ struct glyphinfo *gi);
+extern void AnchorClassDecompose(SplineFont *sf,AnchorClass *_ac, int classcnt, int *subcnts,
+ SplineChar ***marks,SplineChar ***base,
+ SplineChar ***lig,SplineChar ***mkmk,
+ struct glyphinfo *gi);
+
+extern void cvt_unix_to_1904( long long time, int32 result[2]);
+
+
+ /* Non-standard tables */
+ /* My PfEd table for FontForge/PfaEdit specific info */
+extern void pfed_dump(struct alltabs *at, SplineFont *sf);
+extern void pfed_read(FILE *ttf,struct ttfinfo *info);
+ /* The TeX table, to contain stuff the TeX people want */
+extern void tex_dump(struct alltabs *at, SplineFont *sf);
+extern void tex_read(FILE *ttf,struct ttfinfo *info);
+
+extern void ttf_bdf_read(FILE *ttf,struct ttfinfo *info);
+ /* The FFTM table, to some timestamps I'd like */
+extern int ttf_fftm_dump(SplineFont *sf,struct alltabs *at);
+
+ /* The MATH table */
+extern void otf_dump_math(struct alltabs *at, SplineFont *sf);
+
+/* Known font parameters for 'TeX ' table (fontdims, spacing params, whatever you want to call them) */
+ /* Used by all fonts */
+#define TeX_Slant CHR('S','l','n','t')
+#define TeX_Space CHR('S','p','a','c')
+#define TeX_Stretch CHR('S','t','r','e')
+#define TeX_Shrink CHR('S','h','n','k')
+#define TeX_XHeight CHR('X','H','g','t')
+#define TeX_Quad CHR('Q','u','a','d')
+ /* Used by text fonts */
+#define TeX_ExtraSp CHR('E','x','S','p')
+ /* Used by all math fonts */
+#define TeX_MathSp CHR('M','t','S','p')
+ /* Used by math fonts */
+#define TeX_Num1 CHR('N','u','m','1')
+#define TeX_Num2 CHR('N','u','m','2')
+#define TeX_Num3 CHR('N','u','m','3')
+#define TeX_Denom1 CHR('D','n','m','1')
+#define TeX_Denom2 CHR('D','n','m','2')
+#define TeX_Sup1 CHR('S','u','p','1')
+#define TeX_Sup2 CHR('S','u','p','2')
+#define TeX_Sup3 CHR('S','u','p','3')
+#define TeX_Sub1 CHR('S','u','b','1')
+#define TeX_Sub2 CHR('S','u','b','2')
+#define TeX_SupDrop CHR('S','p','D','p')
+#define TeX_SubDrop CHR('S','b','D','p')
+#define TeX_Delim1 CHR('D','l','m','1')
+#define TeX_Delim2 CHR('D','l','m','2')
+#define TeX_AxisHeight CHR('A','x','H','t')
+ /* Used by math extension fonts */
+#define TeX_DefRuleThick CHR('R','l','T','k')
+#define TeX_BigOpSpace1 CHR('B','O','S','1')
+#define TeX_BigOpSpace2 CHR('B','O','S','2')
+#define TeX_BigOpSpace3 CHR('B','O','S','3')
+#define TeX_BigOpSpace4 CHR('B','O','S','4')
+#define TeX_BigOpSpace5 CHR('B','O','S','5')
+
+extern void SFDummyUpCIDs(struct glyphinfo *gi,SplineFont *sf);
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.c b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.c
new file mode 100644
index 0000000000..727ac28538
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.c
@@ -0,0 +1,473 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforgevw.h"
+#include <utype.h>
+#include "ttf.h"
+#include "ttfinstrs.h"
+
+const char *ff_ttf_instrnames[] = {
+ "SVTCA[y-axis]",
+ "SVTCA[x-axis]",
+ "SPVTCA[y-axis]",
+ "SPVTCA[x-axis]",
+ "SFVTCA[y-axis]",
+ "SFVTCA[x-axis]",
+ "SPVTL[parallel]",
+ "SPVTL[orthog]",
+ "SFVTL[parallel]",
+ "SFVTL[orthog]",
+ "SPVFS",
+ "SFVFS",
+ "GPV",
+ "GFV",
+ "SFVTPV",
+ "ISECT",
+ "SRP0",
+ "SRP1",
+ "SRP2",
+ "SZP0",
+ "SZP1",
+ "SZP2",
+ "SZPS",
+ "SLOOP",
+ "RTG",
+ "RTHG",
+ "SMD",
+ "ELSE",
+ "JMPR",
+ "SCVTCI",
+ "SSWCI",
+ "SSW",
+ "DUP",
+ "POP",
+ "CLEAR",
+ "SWAP",
+ "DEPTH",
+ "CINDEX",
+ "MINDEX",
+ "ALIGNPTS",
+ "Unknown28",
+ "UTP",
+ "LOOPCALL",
+ "CALL",
+ "FDEF",
+ "ENDF",
+ "MDAP[no-rnd]",
+ "MDAP[rnd]",
+ "IUP[y]",
+ "IUP[x]",
+ "SHP[rp2]",
+ "SHP[rp1]",
+ "SHC[rp2]",
+ "SHC[rp1]",
+ "SHZ[rp2]",
+ "SHZ[rp1]",
+ "SHPIX",
+ "IP",
+ "MSIRP[no-rp0]",
+ "MSIRP[rp0]",
+ "ALIGNRP",
+ "RTDG",
+ "MIAP[no-rnd]",
+ "MIAP[rnd]",
+ "NPUSHB",
+ "NPUSHW",
+ "WS",
+ "RS",
+ "WCVTP",
+ "RCVT",
+ "GC[cur]",
+ "GC[orig]",
+ "SCFS",
+ "MD[grid]",
+ "MD[orig]",
+ "MPPEM",
+ "MPS",
+ "FLIPON",
+ "FLIPOFF",
+ "DEBUG",
+ "LT",
+ "LTEQ",
+ "GT",
+ "GTEQ",
+ "EQ",
+ "NEQ",
+ "ODD",
+ "EVEN",
+ "IF",
+ "EIF",
+ "AND",
+ "OR",
+ "NOT",
+ "DELTAP1",
+ "SDB",
+ "SDS",
+ "ADD",
+ "SUB",
+ "DIV",
+ "MUL",
+ "ABS",
+ "NEG",
+ "FLOOR",
+ "CEILING",
+ "ROUND[Grey]",
+ "ROUND[Black]",
+ "ROUND[White]",
+ "ROUND[Undef4]",
+ "NROUND[Grey]",
+ "NROUND[Black]",
+ "NROUND[White]",
+ "NROUND[Undef4]",
+ "WCVTF",
+ "DELTAP2",
+ "DELTAP3",
+ "DELTAC1",
+ "DELTAC2",
+ "DELTAC3",
+ "SROUND",
+ "S45ROUND",
+ "JROT",
+ "JROF",
+ "ROFF",
+ "Unknown7B",
+ "RUTG",
+ "RDTG",
+ "SANGW",
+ "AA",
+ "FLIPPT",
+ "FLIPRGON",
+ "FLIPRGOFF",
+ "Unknown83",
+ "Unknown84",
+ "SCANCTRL",
+ "SDPVTL[parallel]",
+ "SDPVTL[orthog]",
+ "GETINFO",
+ "IDEF",
+ "ROLL",
+ "MAX",
+ "MIN",
+ "SCANTYPE",
+ "INSTCTRL",
+ "Unknown8F",
+ "Unknown90",
+ "Unknown91",
+ "Unknown92",
+ "Unknown93",
+ "Unknown94",
+ "Unknown95",
+ "Unknown96",
+ "Unknown97",
+ "Unknown98",
+ "Unknown99",
+ "Unknown9A",
+ "Unknown9B",
+ "Unknown9C",
+ "Unknown9D",
+ "Unknown9E",
+ "Unknown9F",
+ "UnknownA0",
+ "UnknownA1",
+ "UnknownA2",
+ "UnknownA3",
+ "UnknownA4",
+ "UnknownA5",
+ "UnknownA6",
+ "UnknownA7",
+ "UnknownA8",
+ "UnknownA9",
+ "UnknownAA",
+ "UnknownAB",
+ "UnknownAC",
+ "UnknownAD",
+ "UnknownAE",
+ "UnknownAF",
+ "PUSHB_1",
+ "PUSHB_2",
+ "PUSHB_3",
+ "PUSHB_4",
+ "PUSHB_5",
+ "PUSHB_6",
+ "PUSHB_7",
+ "PUSHB_8",
+ "PUSHW_1",
+ "PUSHW_2",
+ "PUSHW_3",
+ "PUSHW_4",
+ "PUSHW_5",
+ "PUSHW_6",
+ "PUSHW_7",
+ "PUSHW_8",
+ "MDRP[grey]",
+ "MDRP[black]",
+ "MDRP[white]",
+ "MDRP03",
+ "MDRP[rnd,grey]",
+ "MDRP[rnd,black]",
+ "MDRP[rnd,white]",
+ "MDRP07",
+ "MDRP[min,grey]",
+ "MDRP[min,black]",
+ "MDRP[min,white]",
+ "MDRP0b",
+ "MDRP[min,rnd,grey]",
+ "MDRP[min,rnd,black]",
+ "MDRP[min,rnd,white]",
+ "MDRP0f",
+ "MDRP[rp0,grey]",
+ "MDRP[rp0,black]",
+ "MDRP[rp0,white]",
+ "MDRP13",
+ "MDRP[rp0,rnd,grey]",
+ "MDRP[rp0,rnd,black]",
+ "MDRP[rp0,rnd,white]",
+ "MDRP17",
+ "MDRP[rp0,min,grey]",
+ "MDRP[rp0,min,black]",
+ "MDRP[rp0,min,white]",
+ "MDRP1b",
+ "MDRP[rp0,min,rnd,grey]",
+ "MDRP[rp0,min,rnd,black]",
+ "MDRP[rp0,min,rnd,white]",
+ "MDRP1f",
+ "MIRP[grey]",
+ "MIRP[black]",
+ "MIRP[white]",
+ "MIRP03",
+ "MIRP[rnd,grey]",
+ "MIRP[rnd,black]",
+ "MIRP[rnd,white]",
+ "MIRP07",
+ "MIRP[min,grey]",
+ "MIRP[min,black]",
+ "MIRP[min,white]",
+ "MIRP0b",
+ "MIRP[min,rnd,grey]",
+ "MIRP[min,rnd,black]",
+ "MIRP[min,rnd,white]",
+ "MIRP0f",
+ "MIRP[rp0,grey]",
+ "MIRP[rp0,black]",
+ "MIRP[rp0,white]",
+ "MIRP13",
+ "MIRP[rp0,rnd,grey]",
+ "MIRP[rp0,rnd,black]",
+ "MIRP[rp0,rnd,white]",
+ "MIRP17",
+ "MIRP[rp0,min,grey]",
+ "MIRP[rp0,min,black]",
+ "MIRP[rp0,min,white]",
+ "MIRP1b",
+ "MIRP[rp0,min,rnd,grey]",
+ "MIRP[rp0,min,rnd,black]",
+ "MIRP[rp0,min,rnd,white]",
+ "MIRP1f"
+};
+
+enum byte_types { bt_instr, bt_cnt, bt_byte, bt_wordhi, bt_wordlo, bt_impliedreturn };
+
+
+uint8 *_IVParse(SplineFont *sf, char *text, int *len,
+ void (*IVError)(void *,char *, int), void *iv) {
+ short numberstack[256];
+ int npos=0, nread, i;
+ int push_left= 0, push_size=0;
+ char *pt;
+ char *end, *bend, *brack;
+ int icnt=0, imax=strlen(text)/2, val, temp;
+ uint8 *instrs = malloc(imax);
+
+ for ( pt = text; *pt ; ++pt ) {
+ npos = 0;
+ while ( npos<256 ) {
+ while ( *pt==' ' || *pt=='\t' ) ++pt;
+ if ( isdigit( *pt ) || *pt=='-' ) {
+ val = strtol(pt,&end,0);
+ if ( val>32767 || val<-32768 ) {
+ IVError(iv,_("A value must be between [-32768,32767]"),pt-text);
+return( NULL );
+ }
+
+ pt = end;
+
+ if ( *pt == '@' ) { /* a delta control byte */
+ if ( val>8 || val<-8 || val==0 ) {
+ IVError(iv,_("A value must be between [-8,-1] or [1,8]"),pt-text);
+return( NULL );
+ }
+
+ pt++;
+
+ if ( !isdigit( *pt ) ) {
+ IVError(iv,_("Number expected"),pt-text);
+return( NULL );
+ }
+
+ temp = val;
+ val = strtol(pt,&end,0);
+
+ if ( val>15 || val<0 ) {
+ IVError(iv,_("A value must be between [0,15]"),pt-text);
+return( NULL );
+ }
+
+ val *= 16;
+ if (temp < 0) temp += 8;
+ else temp += 7;
+ val += temp;
+ pt = end;
+ }
+
+ numberstack[npos++] = val;
+ } else if ( strnmatch(pt,"cvt",3)==0 ) {
+ pt += 3;
+ while ( *pt==' ' || *pt=='\t' ) ++pt;
+ if ( *pt!='(' ) {
+ IVError(iv,_("Missing left parenthesis in command to get a cvt index"),pt-text);
+return( NULL );
+ }
+ temp = strtol(pt+1,&end,0);
+ pt = end;
+ while ( *pt==' ' || *pt=='\t' ) ++pt;
+ if ( *pt!=')' ) {
+ IVError(iv,_("Missing right paren in command to get a cvt index"),pt-text);
+return( NULL );
+ }
+ numberstack[npos++] = TTF__getcvtval(sf,temp);
+ ++pt;
+ } else
+ break;
+ }
+ while ( *pt==' ' || *pt=='\t' ) ++pt;
+ if ( npos==0 && (*pt=='\r' || *pt=='\n' || *pt=='\0') )
+ continue;
+ nread = 0;
+ if ( push_left==-1 ) {
+ /* we need a push count */
+ if ( npos==0 )
+ IVError(iv,_("Expected a number for a push count"),pt-text);
+ else if ( numberstack[0]>255 || numberstack[0]<=0 ) {
+ IVError(iv,_("The push count must be a number between 0 and 255"),pt-text);
+return( NULL );
+ } else {
+ nread = 1;
+ instrs[icnt++] = numberstack[0];
+ push_left = numberstack[0];
+ }
+ }
+ if ( push_left!=0 && push_left<npos-nread && (*pt=='\r' || *pt=='\n' || *pt=='\0') ) {
+ IVError(iv,_("More pushes specified than needed"),pt-text);
+return( NULL );
+ }
+ while ( push_left>0 && nread<npos ) {
+ if ( push_size==2 ) {
+ instrs[icnt++] = numberstack[nread]>>8;
+ instrs[icnt++] = numberstack[nread++]&0xff;
+ } else if ( numberstack[0]>255 || numberstack[0]<0 ) {
+ IVError(iv,_("A value to be pushed by a byte push must be between 0 and 255"),pt-text);
+return( NULL );
+ } else
+ instrs[icnt++] = numberstack[nread++];
+ --push_left;
+ }
+ if ( nread<npos && push_left==0 && (*pt=='\r' || *pt=='\n' || *pt=='\0')) {
+ IVError(iv,_("Unexpected number"),pt-text);
+return( NULL );
+ }
+ if ( *pt=='\r' || *pt=='\n' || *pt=='\0' )
+ continue;
+ if ( push_left>0 ) {
+ IVError(iv,_("Missing pushes"),pt-text);
+return( NULL );
+ }
+ while ( nread<npos ) {
+ i = nread;
+ if ( numberstack[nread]>=0 && numberstack[nread]<=255 ) {
+ while ( i<npos && numberstack[i]>=0 && numberstack[i]<=255 )
+ ++i;
+ if ( i-nread<=8 )
+ instrs[icnt++] = ttf_pushb+(i-nread)-1;
+ else {
+ instrs[icnt++] = ttf_npushb;
+ instrs[icnt++] = i-nread;
+ }
+ while ( nread<i )
+ instrs[icnt++] = numberstack[nread++];
+ } else {
+ while ( i<npos && (numberstack[i]<0 || numberstack[i]>255) )
+ ++i;
+ if ( i-nread<=8 )
+ instrs[icnt++] = ttf_pushw+(i-nread)-1;
+ else {
+ instrs[icnt++] = ttf_npushw;
+ instrs[icnt++] = i-nread;
+ }
+ while ( nread<i ) {
+ instrs[icnt++] = numberstack[nread]>>8;
+ instrs[icnt++] = numberstack[nread++]&0xff;
+ }
+ }
+ }
+ brack = NULL;
+ for ( end= pt; *end!='\r' && *end!='\n' && *end!=' ' && *end!='\0'; ++end )
+ if ( *end=='[' || *end=='_' ) brack=end;
+ for ( i=0; i<256; ++i )
+ if ( strnmatch(pt,ff_ttf_instrnames[i],end-pt)==0 && end-pt==strlen(ff_ttf_instrnames[i]))
+ break;
+ if ( i==256 && brack!=NULL ) {
+ for ( i=0; i<256; ++i )
+ if ( strnmatch(pt,ff_ttf_instrnames[i],brack-pt+1)==0 )
+ break;
+ val = strtol(brack+1,&bend,2); /* Stuff in brackets should be in binary */
+ while ( *bend==' ' || *bend=='\t' ) ++bend;
+ if ( *bend!=']' ) {
+ IVError(iv,_("Missing right bracket in command (or bad binary value in bracket)"),pt-text);
+return( NULL );
+ }
+ if ( val>=32 ) {
+ IVError(iv,_("Bracketted value is too large"),pt-text);
+return( NULL );
+ }
+ i += val;
+ }
+ pt = end;
+ instrs[icnt++] = i;
+ if ( i==ttf_npushb || i==ttf_npushw || (i>=ttf_pushb && i<=ttf_pushw+7)) {
+ push_size = (i==ttf_npushb || (i>=ttf_pushb && i<=ttf_pushb+7))? 1 : 2;
+ if ( i==ttf_npushb || i==ttf_npushw )
+ push_left = -1;
+ else if ( i>=ttf_pushb && i<=ttf_pushb+7 )
+ push_left = i-ttf_pushb+1;
+ else
+ push_left = i-ttf_pushw+1;
+ }
+ if ( *pt=='\0' )
+ break;
+ }
+ *len = icnt;
+return( realloc(instrs,icnt==0?1:icnt)); /* some versions of realloc abort on 0 */
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.h b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.h
new file mode 100644
index 0000000000..9f52eb9fde
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfinstrs.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 2001-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+enum ttf_instructions {
+ ttf_npushb=0x40, ttf_npushw=0x41, ttf_pushb=0xb0, ttf_pushw=0xb8,
+ ttf_aa=0x7f, ttf_abs=0x64, ttf_add=0x60, ttf_alignpts=0x27, ttf_alignrp=0x3c,
+ ttf_and=0x5a, ttf_call=0x2b, ttf_ceiling=0x67, ttf_cindex=0x25, ttf_clear=0x22,
+ ttf_debug=0x4f, ttf_deltac1=0x73, ttf_deltac2=0x74, ttf_deltac3=0x75,
+ ttf_deltap1=0x5d, ttf_deltap2=0x71, ttf_deltap3=0x72, ttf_depth=0x24,
+ ttf_div=0x62, ttf_dup=0x20, ttf_eif=0x59, ttf_else=0x1b, ttf_endf=0x2d,
+ ttf_eq=0x54, ttf_even=0x57, ttf_fdef=0x2c, ttf_flipoff=0x4e, ttf_flipon=0x4d,
+ ttf_flippt=0x80, ttf_fliprgoff=0x82, ttf_fliprgon=0x81, ttf_floor=0x66,
+ ttf_gc=0x46, ttf_getinfo=0x88, ttf_gfv=0x0d, ttf_gpv=0x0c, ttf_gt=0x52,
+ ttf_gteq=0x53, ttf_idef=0x89, ttf_if=0x58, ttf_instctrl=0x8e, ttf_ip=0x39,
+ ttf_isect=0x0f, ttf_iup=0x30, ttf_jmpr=0x1c, ttf_jrof=0x79, ttf_jrot=0x78,
+ ttf_loopcall=0x2a, ttf_lt=0x50, ttf_lteq=0x51, ttf_max=0x8b, ttf_md=0x49,
+ ttf_mdap=0x2e, ttf_mdrp=0xc0, ttf_miap=0x3e, ttf_min=0x8c, ttf_mindex=0x26,
+ ttf_mirp=0xe0, ttf_mppem=0x4b, ttf_mps=0x4c, ttf_msirp=0x3a, ttf_mul=0x63,
+ ttf_neg=0x65, ttf_neq=0x55, ttf_not=0x5c, ttf_nround=0x6c, ttf_odd=0x56,
+ ttf_or=0x5b, ttf_pop=0x21, ttf_rcvt=0x45, ttf_rdtg=0x7d, ttf_roff=0x7a,
+ ttf_roll=0x8a, ttf_round=0x68, ttf_rs=0x43, ttf_rtdg=0x3d, ttf_rtg=0x18,
+ ttf_rthg=0x19, ttf_rutg=0x7c, ttf_s45round=0x77, ttf_sangw=0x7e,
+ ttf_scanctrl=0x85, ttf_scantype=0x8d, ttf_scfs=0x48, ttf_scvtci=0x1d,
+ ttf_sdb=0x5e, ttf_sdpvtl=0x86, ttf_sds=0x5f, ttf_sfvfs=0x0b, ttf_sfvtca=0x04,
+ ttf_sfvtl=0x08, ttf_sfvtpv=0x0e, ttf_shc=0x34, ttf_shp=0x32, ttf_shpix=0x38,
+ ttf_shz=0x36, ttf_sloop=0x17, ttf_smd=0x1a, ttf_spvfs=0x0a, ttf_spvtca=0x02,
+ ttf_spvtl=0x06, ttf_sround=0x76, ttf_srp0=0x10, ttf_srp1=0x11, ttf_srp2=0x12,
+ ttf_ssw=0x1f, ttf_sswci=0x1e, ttf_sub=0x61, ttf_svtca=0x00, ttf_swap=0x23,
+ ttf_szp0=0x13, ttf_szp1=0x14, ttf_szp2=0x15, ttf_szps=0x16, ttf_utp=0x29,
+ ttf_wcvtf=0x70, ttf_wcvtp=0x44, ttf_ws=0x42
+};
+
+extern const char *ff_ttf_instrnames[];
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/ttfspecial.c b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfspecial.c
new file mode 100644
index 0000000000..24bd2d5e05
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/ttfspecial.c
@@ -0,0 +1,2095 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "fontforge.h"
+#include <math.h>
+#include <gimage.h> /* For COLOR_DEFAULT */
+
+#include "ttf.h"
+
+/* This file contains routines to generate non-standard true/opentype tables */
+/* The first is the 'PfEd' table containing PfaEdit specific information */
+/* glyph comments & colours ... perhaps other info later */
+
+/* ************************************************************************** */
+/* ************************* The 'PfEd' table ************************* */
+/* ************************* Output ************************* */
+/* ************************************************************************** */
+
+#include "PfEd.h" /* This describes the format of the 'PfEd' table */
+ /* and its many subtables. */
+
+#define MAX_SUBTABLE_TYPES 20
+
+struct PfEd_subtabs {
+ int next;
+ struct {
+ FILE *data;
+ uint32 tag;
+ uint32 offset;
+ } subtabs[MAX_SUBTABLE_TYPES];
+};
+
+static void PfEd_FontComment(SplineFont *sf, struct PfEd_subtabs *pfed, uint32 tag ) {
+ FILE *fcmt;
+ char *pt;
+ char *text = tag==fcmt_TAG ? sf->comments : sf->fontlog;
+
+ if ( text==NULL || *text=='\0' )
+return;
+ pfed->subtabs[pfed->next].tag = tag;
+ pfed->subtabs[pfed->next++].data = fcmt = tmpfile2();
+
+ putshort(fcmt,1); /* sub-table version number */
+ putshort(fcmt,strlen(text));
+ for ( pt = text; *pt; ++pt )
+ putc(*pt,fcmt);
+ putshort(fcmt,0);
+ if ( ftell(fcmt)&1 ) putc(0,fcmt);
+ if ( ftell(fcmt)&2 ) putshort(fcmt,0);
+}
+
+static void PfEd_GlyphComments(SplineFont *sf, struct PfEd_subtabs *pfed,
+ struct glyphinfo *gi ) {
+ int i, j, k, any, cnt, last, skipped;
+ uint32 offset;
+ SplineChar *sc, *sc2;
+ FILE *cmnt;
+
+ any = 0;
+ /* We don't need to check in bygid order. We just want to know existance */
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->ttf_glyph!=-1 &&
+ sf->glyphs[i]->comment!=NULL ) {
+ any = true;
+ break;
+ }
+ }
+
+ if ( !any )
+return;
+
+ pfed->subtabs[pfed->next].tag = cmnt_TAG;
+ pfed->subtabs[pfed->next++].data = cmnt = tmpfile2();
+
+ putshort(cmnt,1); /* sub-table version number */
+ /* Version 0 used ucs2, version 1 uses utf8 */
+
+ offset = 0;
+ for ( j=0; j<4; ++j ) {
+ cnt = 0;
+ for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 ) {
+ sc=sf->glyphs[gi->bygid[i]];
+ if ( sc!=NULL && sc->comment!=NULL ) {
+ last = i; skipped = false;
+ for ( k=i+1; k<gi->gcnt; ++k ) {
+ if ( gi->bygid[k]!=-1 )
+ sc2 = sf->glyphs[gi->bygid[k]];
+ if ( (gi->bygid[k]==-1 || sc2->comment==NULL) && skipped )
+ break;
+ if ( gi->bygid[k]!=-1 && sc2->comment!=NULL ) {
+ last = k;
+ skipped = false;
+ } else
+ skipped = true;
+ }
+ ++cnt;
+ if ( j==1 ) {
+ putshort(cmnt,i);
+ putshort(cmnt,last);
+ putlong(cmnt,offset);
+ offset += sizeof(uint32)*(last-i+2);
+ } else if ( j==2 ) {
+ for ( ; i<=last; ++i ) {
+ if ( gi->bygid[i]==-1 || (sc=sf->glyphs[gi->bygid[i]])->comment==NULL )
+ putlong(cmnt,0);
+ else {
+ putlong(cmnt,offset);
+ offset += strlen(sc->comment)+1;
+ }
+ }
+ putlong(cmnt,offset); /* Guard data, to let us calculate the string lengths */
+ } else if ( j==3 ) {
+ for ( ; i<=last; ++i ) {
+ if ( gi->bygid[i]==-1 || (sc=sf->glyphs[gi->bygid[i]])->comment==NULL )
+ continue;
+ fputs(sc->comment,cmnt);
+ putc('\0',cmnt);
+ }
+ }
+ i = last;
+ }
+ }
+ if ( j==0 ) {
+ putshort(cmnt,cnt);
+ offset = 2*sizeof(short) + cnt*(2*sizeof(short)+sizeof(uint32));
+ }
+ }
+ if ( ftell(cmnt) & 1 )
+ putc('\0',cmnt);
+ if ( ftell(cmnt) & 2 )
+ putshort(cmnt,0);
+}
+
+static void PfEd_CvtComments(SplineFont *sf, struct PfEd_subtabs *pfed ) {
+ FILE *cvtcmt;
+ int i, offset;
+
+ if ( sf->cvt_names==NULL )
+return;
+ pfed->subtabs[pfed->next].tag = cvtc_TAG;
+ pfed->subtabs[pfed->next++].data = cvtcmt = tmpfile2();
+
+ for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i);
+
+ putshort(cvtcmt,0); /* sub-table version number */
+ putshort(cvtcmt,i);
+ offset = 2*2 + i*2;
+ for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i) {
+ if ( sf->cvt_names[i]==NULL )
+ putshort(cvtcmt,0);
+ else {
+ putshort(cvtcmt,offset);
+ offset += strlen(sf->cvt_names[i])+1;
+ }
+ }
+ for ( i=0; sf->cvt_names[i]!=END_CVT_NAMES; ++i) {
+ if ( sf->cvt_names[i]!=NULL ) {
+ fputs(sf->cvt_names[i],cvtcmt);
+ putc('\0',cvtcmt);
+ }
+ }
+ if ( ftell(cvtcmt)&1 ) putc(0,cvtcmt);
+ if ( ftell(cvtcmt)&2 ) putshort(cvtcmt,0);
+}
+
+static void PfEd_Colours(SplineFont *sf, struct PfEd_subtabs *pfed, struct glyphinfo *gi ) {
+ int i, j, k, any, cnt, last;
+ SplineChar *sc, *sc2;
+ FILE *colr;
+
+ any = 0;
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( sf->glyphs[i]!=NULL && sf->glyphs[i]->ttf_glyph!=-1 &&
+ sf->glyphs[i]->color!=COLOR_DEFAULT ) {
+ any = true;
+ break;
+ }
+ }
+
+ if ( !any )
+return;
+
+ pfed->subtabs[pfed->next].tag = colr_TAG;
+ pfed->subtabs[pfed->next++].data = colr = tmpfile2();
+
+ putshort(colr,0); /* sub-table version number */
+ for ( j=0; j<2; ++j ) {
+ cnt = 0;
+ for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 ) {
+ sc = sf->glyphs[gi->bygid[i]];
+ if ( sc!=NULL && sc->color!=COLOR_DEFAULT ) {
+ last = i;
+ for ( k=i+1; k<gi->gcnt; ++k ) {
+ if ( gi->bygid[k]==-1 )
+ break;
+ sc2 = sf->glyphs[gi->bygid[k]];
+ if ( sc2->color != sc->color )
+ break;
+ last = k;
+ }
+ ++cnt;
+ if ( j==1 ) {
+ putshort(colr,i);
+ putshort(colr,last);
+ putlong(colr,sc->color);
+ }
+ i = last;
+ }
+ }
+ if ( j==0 )
+ putshort(colr,cnt);
+ }
+ if ( ftell(colr) & 2 )
+ putshort(colr,0);
+}
+
+static void PfEd_Lookups(SplineFont *sf, struct PfEd_subtabs *pfed,
+ OTLookup *lookups, uint32 tag) {
+ OTLookup *otl;
+ int lcnt, scnt, ascnt, acnt, s, a;
+ FILE *lkf;
+ struct lookup_subtable *subs;
+ AnchorClass *ac;
+ int sub_info, ac_info, name_info;
+
+ if ( lookups==NULL )
+return;
+ for ( otl=lookups, lcnt=scnt=acnt=ascnt=0; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ ++lcnt;
+ for ( subs = otl->subtables; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
+ ++scnt;
+ if ( subs->anchor_classes ) {
+ ++ascnt;
+ for ( ac=sf->anchor; ac!=NULL; ac=ac->next )
+ if ( ac->subtable==subs && ac->has_base && ac->has_mark )
+ ++acnt;
+ }
+ }
+ }
+
+ pfed->subtabs[pfed->next].tag = tag;
+ pfed->subtabs[pfed->next++].data = lkf = tmpfile2();
+
+ putshort(lkf,0); /* Subtable version */
+ putshort(lkf,lcnt);
+
+ sub_info = 4 + 4*lcnt;
+ ac_info = sub_info + 2*lcnt + 4*scnt;
+ name_info = ac_info + 2*ascnt + 2*acnt;
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ putshort(lkf,name_info);
+ name_info += strlen(otl->lookup_name)+1;
+ putshort(lkf,sub_info);
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) ++s;
+ sub_info += 2 + 4*s;
+ }
+ if ( sub_info!=ac_info )
+ IError("Lookup name data didn't behave as expected");
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) ++s;
+ putshort(lkf,s); /* Subtable count */
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
+ putshort(lkf,name_info);
+ name_info += strlen(subs->subtable_name)+1;
+ if ( subs->anchor_classes ) {
+ putshort(lkf,ac_info);
+ for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
+ if ( ac->subtable==subs && ac->has_base && ac->has_mark )
+ ++a;
+ ac_info += 2 + 2*a;
+ } else
+ putshort(lkf,0);
+ }
+ }
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
+ if ( subs->anchor_classes ) {
+ for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
+ if ( ac->subtable==subs && ac->has_base && ac->has_mark )
+ ++a;
+ putshort(lkf,a);
+ for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
+ if ( ac->subtable==subs && ac->has_base && ac->has_mark ) {
+ putshort(lkf,name_info);
+ name_info += strlen(ac->name)+1;
+ }
+ }
+ }
+ }
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ fputs(otl->lookup_name,lkf);
+ putc('\0',lkf);
+ }
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
+ fputs(subs->subtable_name,lkf);
+ putc('\0',lkf);
+ }
+ }
+ for ( otl=lookups; otl!=NULL; otl=otl->next ) if ( !otl->unused ) {
+ for ( subs = otl->subtables, s=0; subs!=NULL; subs=subs->next ) if ( !subs->unused ) {
+ for ( ac=sf->anchor, a=0; ac!=NULL; ac=ac->next )
+ if ( ac->subtable==subs && ac->has_base && ac->has_mark ) {
+ fputs(ac->name,lkf);
+ putc('\0',lkf);
+ }
+ }
+ }
+ if ( ftell(lkf) & 1 )
+ putc('\0',lkf);
+ if ( ftell(lkf) & 2 )
+ putshort(lkf,0);
+}
+
+static int pfed_mod_type(float val,int last_mod) {
+ float ival;
+
+ if ( last_mod==V_F )
+return( V_F );
+ ival = rint(val);
+ if ( ival!=val || ival<-32768 || ival>32767 )
+return( V_F );
+ if ( last_mod==V_S || ival<-128 || ival>127 )
+return( V_S );
+
+return( V_B );
+}
+
+static void pfed_write_data(FILE *ttf, float val, int mod) {
+ if ( mod==V_F )
+ putlong(ttf,(int) rint(val*256.0f));
+ else if ( mod==V_S )
+ putshort(ttf,(int) rint(val));
+ else
+ putc(((int) rint(val)), ttf);
+}
+
+static void pfed_glyph_layer(FILE *layr,Layer *layer, int do_spiro) {
+ int contour_cnt, image_cnt, ref_cnt, name_off, i,j;
+ SplineSet *ss;
+ SplinePoint *sp;
+ uint32 base;
+ int mod, was_implicit;
+ RefChar *ref;
+
+ contour_cnt = 0;
+ for ( ss=layer->splines; ss!=NULL; ss=ss->next )
+ ++contour_cnt;
+ image_cnt = 0;
+ /* I'm not doing images yet (if ever) but I leave space for them */
+ ref_cnt = 0;
+ for ( ref=layer->refs; ref!=NULL; ref=ref->next )
+ ++ref_cnt;
+
+ base = ftell(layr);
+ putshort(layr,contour_cnt);
+ putshort(layr,ref_cnt);
+ putshort(layr,image_cnt);
+
+ name_off = 2*3 + 4 * contour_cnt + (4*7+2)* ref_cnt;
+ for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
+ putshort(layr,0); /* fill in later */
+ if ( ss->contour_name!=NULL ) {
+ putshort(layr,name_off);
+ name_off += strlen(ss->contour_name)+1;
+ } else {
+ putshort(layr,0);
+ }
+ }
+ for ( ref=layer->refs; ref!=NULL; ref=ref->next ) {
+ for ( j=0; j<6; ++j )
+ putlong(layr, (int) rint(ref->transform[j]*32768));
+ putshort(layr,ref->sc->ttf_glyph);
+ }
+ for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
+ if ( ss->contour_name!=NULL ) {
+ fputs(ss->contour_name,layr);
+ putc('\0',layr);
+ }
+ }
+
+ contour_cnt=0;
+ for ( ss=layer->splines; ss!=NULL; ss=ss->next, ++contour_cnt ) {
+ uint32 pos = ftell(layr);
+ fseek( layr, base + 6 + 4*contour_cnt, SEEK_SET);
+ putshort( layr, pos-base);
+ fseek( layr, pos, SEEK_SET );
+
+ if ( !do_spiro ) {
+ sp = ss->first;
+ mod = pfed_mod_type(sp->me.x, pfed_mod_type(sp->me.y,V_B));
+ putc( (V_MoveTo|mod),layr);
+ pfed_write_data(layr,sp->me.x,mod);
+ pfed_write_data(layr,sp->me.y,mod);
+ was_implicit = false;
+
+ while ( sp->next!=NULL ) {
+ SplinePoint *nsp = sp->next->to;
+ float offx = nsp->me.x - sp->me.x;
+ float offy = nsp->me.y - sp->me.y;
+ if ( offx==0 && offy==0 )
+ /* Do Nothing */;
+ else if ( sp->next->knownlinear ) {
+ mod = pfed_mod_type(offx, pfed_mod_type(offy,V_B));
+ if ( offx==0 ) {
+ putc( (V_VLineTo|mod), layr);
+ pfed_write_data(layr,offy,mod);
+ } else if ( offy==0 ) {
+ putc( (V_HLineTo|mod), layr);
+ pfed_write_data(layr,offx,mod);
+ } else {
+ putc( (V_LineTo|mod), layr);
+ pfed_write_data(layr,offx,mod);
+ pfed_write_data(layr,offy,mod);
+ }
+ } else if ( sp->next->order2 ) {
+ float offx1, offx2, offy1, offy2;
+ BasePoint *base = was_implicit ? &sp->prevcp : &sp->me;
+ offx1 = sp->nextcp.x - base->x;
+ offy1 = sp->nextcp.y - base->y;
+ mod = pfed_mod_type(offx1, pfed_mod_type(offy1,V_B));
+ if ( SPInterpolate(nsp) && nsp!=ss->first ) {
+ was_implicit = true;
+ if ( offx1==0 ) {
+ putc( (V_QVImplicit|mod), layr);
+ pfed_write_data(layr,offy1,mod);
+ } else if ( offy1==0 ) {
+ putc( (V_QHImplicit|mod), layr);
+ pfed_write_data(layr,offx1,mod);
+ } else {
+ putc( (V_QImplicit|mod), layr);
+ pfed_write_data(layr,offx1,mod);
+ pfed_write_data(layr,offy1,mod);
+ }
+ } else {
+ offx2 = nsp->me.x - sp->nextcp.x;
+ offy2 = nsp->me.y - sp->nextcp.y;
+ mod = pfed_mod_type(offx2, pfed_mod_type(offy2,mod));
+ was_implicit = false;
+ putc( (V_QCurveTo|mod), layr);
+ pfed_write_data(layr,offx1,mod);
+ pfed_write_data(layr,offy1,mod);
+ pfed_write_data(layr,offx2,mod);
+ pfed_write_data(layr,offy2,mod);
+ }
+ } else {
+ float offx1 = sp->nextcp.x - sp->me.x;
+ float offy1 = sp->nextcp.y - sp->me.y;
+ float offx2 = nsp->prevcp.x - sp->nextcp.x;
+ float offy2 = nsp->prevcp.y - sp->nextcp.y;
+ float offx3 = nsp->me.x - nsp->prevcp.x;
+ float offy3 = nsp->me.y - nsp->prevcp.y;
+ mod = pfed_mod_type(offx1, pfed_mod_type(offy1,V_B));
+ mod = pfed_mod_type(offx2, pfed_mod_type(offy2,mod));
+ mod = pfed_mod_type(offx3, pfed_mod_type(offy3,mod));
+ if ( offx1==0 && offy3==0 ) {
+ putc((V_VHCurveTo|mod),layr);
+ pfed_write_data(layr,offy1,mod);
+ pfed_write_data(layr,offx2,mod);
+ pfed_write_data(layr,offy2,mod);
+ pfed_write_data(layr,offx3,mod);
+ } else if ( offy1==0 && offx3==0 ) {
+ putc((V_HVCurveTo|mod),layr);
+ pfed_write_data(layr,offx1,mod);
+ pfed_write_data(layr,offx2,mod);
+ pfed_write_data(layr,offy2,mod);
+ pfed_write_data(layr,offy3,mod);
+ } else {
+ putc((V_CurveTo|mod),layr);
+ pfed_write_data(layr,offx1,mod);
+ pfed_write_data(layr,offy1,mod);
+ pfed_write_data(layr,offx2,mod);
+ pfed_write_data(layr,offy2,mod);
+ pfed_write_data(layr,offx3,mod);
+ pfed_write_data(layr,offy3,mod);
+ }
+ }
+ if ( nsp == ss->first )
+ break;
+ if ( nsp->next!=NULL && nsp->next->to==ss->first && nsp->next->knownlinear )
+ break;
+ sp = nsp;
+ }
+ if ( sp->next==NULL )
+ putc(V_End,layr);
+ else
+ putc(V_Close,layr);
+ } else if ( ss->spiro_cnt==0 )
+ putc(SPIRO_CLOSE_CONTOUR,layr); /* Mark for an empty spiro contour */
+ else {
+ for ( i=0; i<ss->spiro_cnt; ++i ) {
+ if ( i==ss->spiro_cnt-1 && ss->first->prev==NULL )
+ putc(SPIRO_CLOSE_CONTOUR,layr);
+ else if ( i==0 && ss->first->prev==NULL ) /* Open */
+ putc(SPIRO_OPEN_CONTOUR,layr);
+ else
+ putc(ss->spiros[i].ty&0x7f,layr);
+ putlong(layr,rint(ss->spiros[i].x*256.0));
+ putlong(layr,rint(ss->spiros[i].y*256.0));
+ }
+ putc(SPIRO_END,layr); /* Add the z whether open or not. Might as well */
+ }
+ }
+}
+
+struct pos_name {
+ real pos;
+ char *name;
+};
+
+static int pfed_guide_real_comp(const void *_r1, const void *_r2) {
+ const struct pos_name *r1 = _r1, *r2 = _r2;
+
+ if ( r1->pos>r2->pos )
+return( 1 );
+ else if ( r1->pos<r2->pos )
+return( -1 );
+ else
+return( 0 );
+}
+
+static int pfed_guide_sortuniq( struct pos_name *array, int cnt) {
+ int i,j;
+
+ qsort(array,cnt,sizeof(struct pos_name),pfed_guide_real_comp);
+ for ( i=j=0; i<cnt; ++i ) {
+ if ( array[i].pos<-32768 || array[i].pos>32767 )
+ /* Out of bounds, ignore it */;
+ else if ( i!=0 && array[i].pos == array[i-1].pos )
+ /* Duplicate, ignore it */;
+ else
+ array[j++] = array[i];
+ }
+return( j );
+}
+
+static int pfed_guide_dump_pos_name(FILE *guid, struct pos_name *pn, int namestart ) {
+ putshort(guid,(short) rint(pn->pos));
+ if ( pn->name!=NULL ) {
+ putshort(guid,namestart);
+ namestart += strlen(pn->name)+1;
+ } else {
+ putshort(guid,0);
+ }
+return( namestart );
+}
+
+static void PfEd_Guides(SplineFont *sf, struct PfEd_subtabs *pfed ) {
+ int h,v, i;
+ SplineSet *ss;
+ Spline *s, *first;
+ FILE *guid;
+ struct pos_name hs[100], vs[100];
+ int nameoff, namelen;
+
+ if ( sf->grid.splines==NULL )
+return;
+
+ h=v=0;
+ for ( ss=sf->grid.splines; ss!=NULL; ss=ss->next ) {
+ first = NULL;
+ for ( s=ss->first->next; s!=NULL && s!=first; s=s->to->next ) {
+ if ( first==NULL ) first = s;
+ if ( s->from->me.x==s->to->me.x ) {
+ if ( s->from->me.y!=s->to->me.y && v<100 ) {
+ vs[v].name = ss->contour_name;
+ vs[v++].pos = s->from->me.x;
+ }
+ } else if ( s->from->me.y==s->to->me.y ) {
+ if ( h<100 ) {
+ hs[h].name = ss->contour_name;
+ hs[h++].pos = s->from->me.y;
+ }
+ }
+ }
+ }
+
+ v = pfed_guide_sortuniq(vs,v);
+ h = pfed_guide_sortuniq(hs,h);
+
+ pfed->subtabs[pfed->next].tag = guid_TAG;
+ pfed->subtabs[pfed->next++].data = guid = tmpfile2();
+
+ nameoff = 5*2 + (h+v) * 4;
+ namelen = 0;
+ for ( i=0; i<v; ++i ) if ( vs[i].name!=NULL )
+ namelen += strlen( vs[i].name )+1;
+ for ( i=0; i<h; ++i ) if ( hs[i].name!=NULL )
+ namelen += strlen( hs[i].name )+1;
+
+ putshort(guid,1); /* sub-table version number */
+ putshort(guid,v);
+ putshort(guid,h);
+ putshort(guid,0); /* Diagonal lines someday? nothing for now */
+ putshort(guid,nameoff+namelen); /* full spline output */
+ for ( i=0; i<v; ++i )
+ nameoff = pfed_guide_dump_pos_name(guid, &vs[i], nameoff );
+ for ( i=0; i<h; ++i )
+ nameoff = pfed_guide_dump_pos_name(guid, &hs[i], nameoff );
+
+ for ( i=0; i<v; ++i ) if ( vs[i].name!=NULL ) {
+ fputs(vs[i].name,guid);
+ putc('\0',guid);
+ }
+ for ( i=0; i<h; ++i ) if ( hs[i].name!=NULL ) {
+ fputs(hs[i].name,guid);
+ putc('\0',guid);
+ }
+
+ pfed_glyph_layer(guid,&sf->grid,false);
+
+ if ( ftell(guid) & 1 )
+ putc('\0',guid);
+ if ( ftell(guid) & 2 )
+ putshort(guid,0);
+}
+
+static int pfed_has_spiros(Layer *layer) {
+ SplineSet *ss;
+
+ for ( ss=layer->splines; ss!=NULL; ss=ss->next ) {
+ if ( ss->spiro_cnt>1 )
+return( true );
+ }
+return( false );
+}
+
+static void PfEd_Layer(SplineFont *sf, struct glyphinfo *gi, int layer, int dospiro,
+ FILE *layr) {
+ int i, j, k, gid, cnt, last, skipped;
+ SplineChar *sc, *sc2;
+ uint32 offset;
+ uint32 *glyph_data_offset_location;
+
+ for ( i=0; i<gi->gcnt; ++i ) if ( gi->bygid[i]!=-1 )
+ if ( (sc=sf->glyphs[gi->bygid[i]])!=NULL ) {
+ sc->ticked = false;
+ if ( (!dospiro && (sc->layers[layer].splines!=NULL || sc->layers[layer].refs!=NULL) ) ||
+ (dospiro && pfed_has_spiros(&sc->layers[layer])) )
+ sc->ticked=true;
+ }
+
+ offset = ftell(layr);
+ glyph_data_offset_location = calloc(gi->gcnt,sizeof(uint32));
+ for ( j=0; j<4; ++j ) {
+ cnt = 0;
+ for ( i=0; i<gi->gcnt; ++i ) if ( (gid=gi->bygid[i])!=-1 && (sc=sf->glyphs[gid])!=NULL ) {
+ if ( sc->ticked ) {
+ last = i; skipped = false;
+ for ( k=i+1; k<gi->gcnt; ++k ) {
+ sc2 = NULL;
+ if ( gi->bygid[k]!=-1 )
+ sc2 = sf->glyphs[gi->bygid[k]];
+ if ( skipped && (sc2==NULL || !sc2->ticked))
+ break;
+ if ( sc2!=NULL && sc2->ticked ) {
+ last = k;
+ skipped = false;
+ } else
+ skipped = true;
+ }
+ ++cnt;
+ if ( j==1 ) {
+ putshort(layr,i);
+ putshort(layr,last);
+ putlong(layr,offset);
+ offset += sizeof(uint32)*(last-i+1);
+ } else if ( j==2 ) {
+ for ( ; i<=last; ++i ) {
+ if ( gi->bygid[i]==-1 || !sf->glyphs[gi->bygid[i]]->ticked )
+ putlong(layr,0);
+ else {
+ glyph_data_offset_location[i] = ftell(layr);
+ putlong(layr,0);
+ }
+ }
+ } else if ( j==3 ) {
+ for ( ; i<=last; ++i ) {
+ if ( gi->bygid[i]!=-1 && (sc=sf->glyphs[gi->bygid[i]])->ticked ) {
+ uint32 pos = ftell(layr);
+ fseek(layr,glyph_data_offset_location[i],SEEK_SET);
+ putlong(layr,pos); /* Offset relative to start of subtable==start of file */
+ fseek(layr,pos,SEEK_SET);
+ pfed_glyph_layer(layr,&sc->layers[layer],dospiro);
+ }
+ }
+ }
+ i = last;
+ }
+ }
+ if ( j==0 ) {
+ offset += sizeof(short) + cnt*(2*sizeof(short)+sizeof(uint32));
+ putshort(layr,cnt);
+ }
+ }
+ free(glyph_data_offset_location);
+}
+
+static void PfEd_Layers(SplineFont *sf, struct PfEd_subtabs *pfed,
+ struct glyphinfo *gi ) {
+ /* currently we output the following: */
+ /* The background layer */
+ /* And the spiro representation of the foreground */
+ /* if the foreground is cubic and output is quad then the foreground */
+ /* Any other layers */
+ /* Check if any of these data exist */
+ uint8 has_spiro=0;
+ uint8 *otherlayers;
+ int i, name_off, l, cnt, sofar;
+ SplineChar *sc;
+ FILE *layr;
+
+ otherlayers = calloc(sf->layer_cnt,sizeof(uint8));
+
+ /* We don't need to check in bygid order. We just want to know existance */
+ /* We don't check for refs because a reference to an empty glyph is empty too */
+ for ( i=0; i<sf->glyphcnt; ++i ) {
+ if ( (sc=sf->glyphs[i])!=NULL && sc->ttf_glyph!=-1 ) {
+ if ( pfed_has_spiros(&sc->layers[ly_fore]))
+ has_spiro = true;
+ for ( l=ly_back ; l<sf->layer_cnt; ++l )
+ if ( sc->layers[l].splines!=NULL )
+ otherlayers[l] = true;
+ }
+ }
+ otherlayers[gi->layer] = (!sf->layers[gi->layer].order2 && gi->is_ttf) ||
+ ( sf->layers[gi->layer].order2 && !gi->is_ttf);
+
+ for ( l=cnt=0; l<sf->layer_cnt; ++l )
+ if ( otherlayers[l] )
+ ++cnt;
+ cnt += has_spiro;
+ if ( cnt==0 ) {
+ free(otherlayers);
+return;
+ }
+
+ pfed->subtabs[pfed->next].tag = layr_TAG;
+ pfed->subtabs[pfed->next++].data = layr = tmpfile2();
+
+ putshort(layr,1); /* sub-table version */
+ putshort(layr,cnt); /* layer count */
+
+ name_off = 4 + 8 * cnt;
+ if ( has_spiro ) {
+ putshort(layr,1); /* spiros */
+ putshort(layr,name_off);
+ name_off += strlen("Spiro")+1;
+ putlong(layr,0); /* Fill in later */
+ }
+ for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
+ putshort(layr,(sf->layers[l].order2?2:3) | /* Quadratic/cubic */
+ (sf->layers[l].background?0:0x100)); /* Fore/Back */
+ putshort(layr,name_off);
+ if ( l==ly_fore ) name_off += strlen("Old_");
+ name_off += strlen(sf->layers[l].name)+1;
+ putlong(layr,0); /* Fill in later */
+ }
+ if ( has_spiro ) {
+ fputs("Spiro",layr);
+ putc('\0',layr);
+ }
+ for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
+ if ( l==ly_fore ) fputs("Old_",layr);
+ fputs(sf->layers[l].name,layr);
+ putc('\0',layr);
+ }
+
+ sofar = 0;
+ if ( has_spiro ) {
+ uint32 pos = ftell(layr);
+ fseek(layr, 4 + 0*8 + 4, SEEK_SET);
+ putlong(layr,pos);
+ fseek(layr, 0, SEEK_END);
+ PfEd_Layer(sf, gi, ly_fore, true, layr);
+ ++sofar;
+ }
+ for ( l=0; l<sf->layer_cnt; ++l ) if ( otherlayers[l]) {
+ uint32 pos = ftell(layr);
+ fseek(layr, 4 + sofar*8 + 4, SEEK_SET);
+ putlong(layr,pos);
+ fseek(layr, 0, SEEK_END);
+ PfEd_Layer(sf, gi, l, false, layr);
+ ++sofar;
+ }
+
+ if ( ftell(layr) & 1 )
+ putc('\0',layr);
+ if ( ftell(layr) & 2 )
+ putshort(layr,0);
+ free(otherlayers);
+}
+
+void pfed_dump(struct alltabs *at, SplineFont *sf) {
+ struct PfEd_subtabs pfed;
+ FILE *file;
+ int i;
+ uint32 offset;
+
+ memset(&pfed,0,sizeof(pfed));
+ if ( at->gi.flags & ttf_flag_pfed_comments ) {
+ PfEd_FontComment(sf, &pfed, fcmt_TAG );
+ PfEd_FontComment(sf, &pfed, flog_TAG );
+ PfEd_GlyphComments(sf, &pfed, &at->gi );
+ PfEd_CvtComments(sf, &pfed );
+ }
+ if ( at->gi.flags & ttf_flag_pfed_colors )
+ PfEd_Colours(sf, &pfed, &at->gi );
+ if ( (at->gi.flags & ttf_flag_pfed_lookupnames) && at->opentypemode ) {
+ PfEd_Lookups(sf, &pfed, sf->gsub_lookups, GSUB_TAG );
+ PfEd_Lookups(sf, &pfed, sf->gpos_lookups, GPOS_TAG );
+ }
+ if ( at->gi.flags & ttf_flag_pfed_guides )
+ PfEd_Guides(sf, &pfed);
+ if ( at->gi.flags & ttf_flag_pfed_layers )
+ PfEd_Layers(sf, &pfed, &at->gi);
+
+ if ( pfed.next==0 )
+return; /* No subtables */
+
+ at->pfed = file = tmpfile2();
+ putlong(file, 0x00010000); /* Version number */
+ putlong(file, pfed.next); /* sub-table count */
+ offset = 2*sizeof(uint32) + 2*pfed.next*sizeof(uint32);
+ for ( i=0; i<pfed.next; ++i ) {
+ putlong(file,pfed.subtabs[i].tag);
+ putlong(file,offset);
+ fseek(pfed.subtabs[i].data,0,SEEK_END);
+ pfed.subtabs[i].offset = offset;
+ offset += ftell(pfed.subtabs[i].data);
+ }
+ for ( i=0; i<pfed.next; ++i ) {
+ fseek(pfed.subtabs[i].data,0,SEEK_SET);
+ ttfcopyfile(file,pfed.subtabs[i].data,pfed.subtabs[i].offset,"PfEd-subtable");
+ }
+ if ( ftell(file)&3 )
+ IError("'PfEd' table not properly aligned");
+ at->pfedlen = ftell(file);
+}
+
+/* ************************* The 'PfEd' table ************************* */
+/* ************************* Input ************************* */
+
+static void pfed_readfontcomment(FILE *ttf,struct ttfinfo *info,uint32 base,
+ uint32 tag) {
+ int len;
+ char *start, *pt, *end;
+ int use_utf8;
+
+ fseek(ttf,base,SEEK_SET);
+ use_utf8 = getushort(ttf);
+ if ( use_utf8!=0 && use_utf8!=1 )
+return; /* Bad version number */
+ len = getushort(ttf);
+ start = pt = malloc(len+1);
+
+ end = pt+len;
+ if ( use_utf8 ) {
+ while ( pt<end )
+ *pt++ = getc(ttf);
+ } else {
+ while ( pt<end )
+ *pt++ = getushort(ttf);
+ }
+ *pt = '\0';
+ if ( !use_utf8 ) {
+ pt = latin1_2_utf8_copy(info->fontcomments);
+ free(start);
+ start = pt;
+ }
+ if ( tag==flog_TAG )
+ info->fontlog = start;
+ else
+ info->fontcomments = start;
+}
+
+static char *pfed_read_utf8(FILE *ttf, uint32 start) {
+ int ch, len;
+ char *str, *pt;
+
+ fseek( ttf, start, SEEK_SET);
+ len = 0;
+ while ( (ch=getc(ttf))!='\0' && ch!=EOF )
+ ++len;
+ fseek( ttf, start, SEEK_SET);
+ str = pt = malloc(len+1);
+ while ( (ch=getc(ttf))!='\0' && ch!=EOF )
+ *pt++ = ch;
+ *pt = '\0';
+return( str );
+}
+
+static char *pfed_read_ucs2_len(FILE *ttf,uint32 offset,int len) {
+ char *pt, *str;
+ uint32 uch, uch2;
+ int i;
+
+ if ( len<0 )
+return( NULL );
+
+ len>>=1;
+ if ( (pt=str=malloc(len>0 ? 3*len:1))==NULL )
+ return( NULL );
+ fseek(ttf,offset,SEEK_SET);
+ for ( i=0; i<len; ++i ) {
+ uch = getushort(ttf);
+ if ( uch>=0xd800 && uch<0xdc00 ) {
+ /* Is this a possible utf16 surrogate value? */
+ uch2 = getushort(ttf);
+ if ( uch2>=0xdc00 && uch2<0xe000 )
+ uch = ((uch-0xd800)<<10) | (uch2&0x3ff);
+ else {
+ pt = utf8_idpb(pt,uch,0);
+ uch = uch2;
+ }
+ }
+ pt = utf8_idpb(pt,uch,0);
+ }
+ *pt++ = 0;
+return( realloc(str,pt-str) );
+}
+
+static char *pfed_read_utf8_len(FILE *ttf,uint32 offset,int len) {
+ char *pt, *str;
+ int i;
+
+ if ( len<0 )
+return( NULL );
+
+ pt = str = malloc(len+1);
+ fseek(ttf,offset,SEEK_SET);
+ for ( i=0; i<len; ++i )
+ *pt++ = getc(ttf);
+ *pt = '\0';
+return( str );
+}
+
+static void pfed_readcvtcomments(FILE *ttf,struct ttfinfo *info,uint32 base ) {
+ int count, i;
+ uint16 *offsets;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 )
+return; /* Bad version number */
+ count = getushort(ttf);
+
+ offsets = malloc(count*sizeof(uint16));
+ info->cvt_names = malloc((count+1)*sizeof(char *));
+ for ( i=0; i<count; ++i )
+ offsets[i] = getushort(ttf);
+ for ( i=0; i<count; ++i ) {
+ if ( offsets[i]==0 )
+ info->cvt_names[i] = NULL;
+ else
+ info->cvt_names[i] = pfed_read_utf8(ttf,base+offsets[i]);
+ }
+ free(offsets);
+}
+
+static void pfed_readglyphcomments(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int n, i, j;
+ struct grange { int start, end; uint32 offset; } *grange;
+ uint32 offset, next;
+ int use_utf8;
+
+ fseek(ttf,base,SEEK_SET);
+ use_utf8 = getushort(ttf);
+ if ( use_utf8!=0 && use_utf8!=1 )
+return; /* Bad version number */
+ n = getushort(ttf);
+ grange = malloc(n*sizeof(struct grange));
+ for ( i=0; i<n; ++i ) {
+ grange[i].start = getushort(ttf);
+ grange[i].end = getushort(ttf);
+ grange[i].offset = getlong(ttf);
+ if ( grange[i].start>grange[i].end || grange[i].end>info->glyph_cnt ) {
+ LogError( _("Bad glyph range specified in glyph comment subtable of PfEd table\n") );
+ grange[i].start = 1; grange[i].end = 0;
+ }
+ }
+ for ( i=0; i<n; ++i ) {
+ for ( j=grange[i].start; j<=grange[i].end; ++j ) {
+ fseek( ttf,base+grange[i].offset+(j-grange[i].start)*sizeof(uint32),SEEK_SET);
+ offset = getlong(ttf);
+ next = getlong(ttf);
+ if ( use_utf8 )
+ info->chars[j]->comment = pfed_read_utf8_len(ttf,base+offset,next-offset);
+ else
+ info->chars[j]->comment = pfed_read_ucs2_len(ttf,base+offset,next-offset);
+ if ( info->chars[j]->comment == NULL )
+ LogError(_("Invalid comment string (negative length?) in 'PfEd' table for glyph %s."),
+ info->chars[j]->name );
+ }
+ }
+ free(grange);
+}
+
+static void pfed_readcolours(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int n, i, j, start, end;
+ uint32 col;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 )
+return; /* Bad version number */
+ n = getushort(ttf);
+ for ( i=0; i<n; ++i ) {
+ start = getushort(ttf);
+ end = getushort(ttf);
+ col = getlong(ttf);
+ if ( start>end || end>info->glyph_cnt )
+ LogError( _("Bad glyph range specified in color subtable of PfEd table\n") );
+ else {
+ for ( j=start; j<=end; ++j )
+ info->chars[j]->color = col;
+ }
+ }
+}
+
+static void pfed_readlookupnames(FILE *ttf,struct ttfinfo *info,uint32 base,
+ OTLookup *lookups) {
+ OTLookup *otl;
+ struct lookup_subtable *sub;
+ AnchorClass *ac;
+ int i, j, k, n, s, a;
+ struct lstruct { int name_off, subs_off; } *ls, *ss, *as;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 )
+return; /* Bad version number */
+ n = getushort(ttf);
+ ls = malloc(n*sizeof(struct lstruct));
+ for ( i=0; i<n; ++i ) {
+ ls[i].name_off = getushort(ttf);
+ ls[i].subs_off = getushort(ttf);
+ }
+ for ( i=0, otl=lookups; i<n && otl!=NULL; ++i, otl=otl->next ) {
+ if ( ls[i].name_off!=0 ) {
+ free( otl->lookup_name );
+ otl->lookup_name = pfed_read_utf8(ttf,base+ls[i].name_off);
+ }
+ if ( ls[i].subs_off!=0 ) {
+ fseek(ttf,base+ls[i].subs_off,SEEK_SET);
+ s = getushort(ttf);
+ ss = malloc(s*sizeof(struct lstruct));
+ for ( j=0; j<s; ++j ) {
+ ss[j].name_off = getushort(ttf);
+ ss[j].subs_off = getushort(ttf);
+ }
+ for ( j=0, sub=otl->subtables; j<s && sub!=NULL; ++j, sub=sub->next ) {
+ if ( ss[j].name_off!=0 ) {
+ free( sub->subtable_name );
+ sub->subtable_name = pfed_read_utf8(ttf,base+ss[j].name_off);
+ }
+ if ( ss[j].subs_off!=0 ) {
+ if ( !sub->anchor_classes )
+ LogError(_("Whoops, attempt to name anchors in a subtable which doesn't contain any\n"));
+ else {
+ fseek(ttf,base+ss[j].subs_off,SEEK_SET);
+ a = getushort(ttf);
+ as = malloc(a*sizeof(struct lstruct));
+ for ( k=0; k<a; ++k ) {
+ as[k].name_off = getushort(ttf);
+ }
+ k=0;
+ for ( ac=info->ahead; ac!=NULL; ac=ac->next ) {
+ if ( ac->subtable==sub ) {
+ if ( as[k].name_off!=0 ) {
+ free( ac->name );
+ ac->name = pfed_read_utf8(ttf,base+as[k].name_off);
+ }
+ ++k;
+ }
+ }
+ free(as);
+ }
+ }
+ }
+ /* I guess it's ok for some subtables to be unnamed, so no check for sub!=NULL */
+ if ( j<s )
+ LogError(_("Whoops, more names than subtables of lookup %s\n"), otl->lookup_name );
+ free(ss);
+ }
+ }
+ /* I guess it's ok for some lookups to be unnamed, so no check for otf!=NULL */
+ if ( i<n )
+ LogError(_("Whoops, more names than lookups\n") );
+ free(ls);
+}
+
+static float pfed_get_coord(FILE *ttf,int mod) {
+ if ( mod==V_B )
+return( (float) (signed char) getc(ttf) );
+ else if ( mod==V_S )
+return( (float) (short) getushort(ttf));
+ else if ( mod==V_F )
+return( getlong(ttf)/256.0 );
+ else {
+ LogError(_("Bad data type in contour verb in 'PfEd'\n"));
+return( 0 );
+ }
+}
+
+static void pfed_read_normal_contour(FILE *ttf,SplineSet *ss,
+ uint32 base, int type) {
+ SplinePoint *sp, *current;
+ int verb, v, m;
+ float offx, offy, offx1, offy1, offx2, offy2;
+ int was_implicit=false;
+
+ fseek(ttf,base,SEEK_SET);
+
+ verb = getc(ttf);
+ if ( COM_VERB(verb)!=V_MoveTo ) {
+ LogError(_("Whoops, contours must begin with a move to\n") );
+ ss->first = ss->last = SplinePointCreate(0,0);
+ ss->start_offset = 0;
+return;
+ }
+ offx = pfed_get_coord(ttf,COM_MOD(verb));
+ offy = pfed_get_coord(ttf,COM_MOD(verb));
+ ss->first = current = SplinePointCreate(offx,offy);
+ ss->start_offset = 0;
+ for (;;) {
+ verb = getc(ttf);
+ v = COM_VERB(verb); m = COM_MOD(verb);
+ if ( m==3 ) {
+ LogError(_("Bad data modifier in contour command in 'PfEd'\n") );
+ break;
+ }
+ if ( verb==V_Close || verb==V_End )
+ break;
+ else if ( v>=V_LineTo && v<=V_VLineTo ) {
+ offx = offy = 0;
+ if ( v==V_LineTo ) {
+ offx = pfed_get_coord(ttf,m);
+ offy = pfed_get_coord(ttf,m);
+ } else if ( v==V_HLineTo )
+ offx = pfed_get_coord(ttf,m);
+ else if ( v==V_VLineTo )
+ offy = pfed_get_coord(ttf,m);
+ sp = SplinePointCreate(current->me.x+offx,current->me.y+offy);
+ } else if ( v>=V_QCurveTo && v<=V_QVImplicit ) {
+ int will_be_implicit = true;
+ offx = offy = 0; offx1 = offy1 = 1; /* else implicit points become straight lines too soon */
+ if ( v==V_QCurveTo ) {
+ offx = pfed_get_coord(ttf,m);
+ offy = pfed_get_coord(ttf,m);
+ offx1 = pfed_get_coord(ttf,m);
+ offy1 = pfed_get_coord(ttf,m);
+ will_be_implicit = false;
+ } else if ( v==V_QImplicit ) {
+ offx = pfed_get_coord(ttf,m);
+ offy = pfed_get_coord(ttf,m);
+ } else if ( v==V_QHImplicit ) {
+ offx = pfed_get_coord(ttf,m);
+ } else if ( v==V_QVImplicit ) {
+ offy = pfed_get_coord(ttf,m);
+ }
+
+ current->nextcp.x = current->me.x+offx;
+ current->nextcp.y = current->me.y+offy;
+ current->nonextcp = false;
+ sp = SplinePointCreate(current->nextcp.x+offx1,current->nextcp.y+offy1);
+ sp->prevcp = current->nextcp;
+ sp->noprevcp = false;
+ if ( was_implicit ) {
+ current->me.x = (current->prevcp.x + current->nextcp.x)/2;
+ current->me.y = (current->prevcp.y + current->nextcp.y)/2;
+ SplineRefigure(current->prev);
+ }
+ was_implicit = will_be_implicit;
+ } else if ( v>=V_CurveTo && v<=V_HVCurveTo ) {
+ offx=offy=offx2=offy2=0;
+ if ( v==V_CurveTo ) {
+ offx = pfed_get_coord(ttf,m);
+ offy = pfed_get_coord(ttf,m);
+ offx1 = pfed_get_coord(ttf,m);
+ offy1 = pfed_get_coord(ttf,m);
+ offx2 = pfed_get_coord(ttf,m);
+ offy2 = pfed_get_coord(ttf,m);
+ } else if ( v==V_VHCurveTo ) {
+ offy = pfed_get_coord(ttf,m);
+ offx1 = pfed_get_coord(ttf,m);
+ offy1 = pfed_get_coord(ttf,m);
+ offx2 = pfed_get_coord(ttf,m);
+ } else if ( v==V_HVCurveTo ) {
+ offx = pfed_get_coord(ttf,m);
+ offx1 = pfed_get_coord(ttf,m);
+ offy1 = pfed_get_coord(ttf,m);
+ offy2 = pfed_get_coord(ttf,m);
+ }
+ current->nextcp.x = current->me.x+offx;
+ current->nextcp.y = current->me.y+offy;
+ current->nonextcp = false;
+ sp = SplinePointCreate(current->nextcp.x+offx1+offx2,current->nextcp.y+offy1+offy2);
+ sp->prevcp.x = current->nextcp.x+offx1;
+ sp->prevcp.y = current->nextcp.y+offy1;
+ sp->noprevcp = false;
+ } else {
+ LogError(_("Whoops, unexpected verb in contour %d.%d\n"), v, m );
+ break;
+ }
+ SplineMake(current,sp,type==2);
+ current = sp;
+ }
+ if ( verb==V_Close ) {
+ if ( was_implicit ) {
+ current->me.x = (current->prevcp.x + ss->first->nextcp.x)/2;
+ current->me.y = (current->prevcp.y + ss->first->nextcp.y)/2;
+ }
+ if ( current->me.x==ss->first->me.x && current->me.y==ss->first->me.y ) {
+ current->prev->to = ss->first;
+ ss->first->prev = current->prev;
+ ss->first->prevcp = current->prevcp;
+ ss->first->noprevcp = current->noprevcp;
+ SplinePointFree(current);
+ } else
+ SplineMake(current,ss->first,type==2);
+ ss->last = ss->first;
+ } else {
+ ss->last = current;
+ }
+ SPLCategorizePoints(ss);
+}
+
+static void pfed_read_spiro_contour(FILE *ttf,SplineSet *ss,
+ uint32 base, int type) {
+ int ch;
+
+ fseek(ttf,base,SEEK_SET);
+
+ for (; ; ) {
+ ch = getc(ttf);
+ if ( ch!=SPIRO_OPEN_CONTOUR && ch!=SPIRO_CORNER && ch!=SPIRO_G4 &&
+ ch!=SPIRO_G2 && ch!=SPIRO_LEFT && ch!=SPIRO_RIGHT &&
+ ch!=SPIRO_END && ch!=SPIRO_CLOSE_CONTOUR ) {
+ LogError(_("Whoops, bad spiro command %d\n"), ch);
+ break;
+ }
+ if ( ss->spiro_cnt>=ss->spiro_max )
+ ss->spiros = realloc(ss->spiros,(ss->spiro_max+=10)*sizeof(spiro_cp));
+ ss->spiros[ss->spiro_cnt].ty = ch;
+ if ( ch!=SPIRO_END ) {
+ ss->spiros[ss->spiro_cnt].x = getlong(ttf)/256.0;
+ ss->spiros[ss->spiro_cnt].y = getlong(ttf)/256.0;
+ } else {
+ ss->spiros[ss->spiro_cnt].x = 0;
+ ss->spiros[ss->spiro_cnt].y = 0;
+ }
+ ++(ss->spiro_cnt);
+ if ( ch==SPIRO_END || ch=='}' )
+ break;
+ }
+ if ( ss->spiro_cnt!=0 && ss->spiros[ss->spiro_cnt-1].ty!= SPIRO_END ) {
+ if ( ss->spiros[ss->spiro_cnt-1].ty==SPIRO_CLOSE_CONTOUR )
+ ss->spiros[ss->spiro_cnt-1].ty = SPIRO_G4;
+ if ( ss->spiro_cnt>=ss->spiro_max )
+ ss->spiros = realloc(ss->spiros,(ss->spiro_max+=2)*sizeof(spiro_cp));
+ ss->spiros[ss->spiro_cnt].ty = SPIRO_END;
+ ss->spiros[ss->spiro_cnt].x = 0;
+ ss->spiros[ss->spiro_cnt].y = 0;
+ }
+}
+
+static void pfed_read_glyph_layer(FILE *ttf,struct ttfinfo *info,Layer *ly,
+ uint32 base, int type, int version) {
+ int cc, rc, i, j;
+ SplineSet *ss;
+ struct contours { int data_off, name_off; SplineSet *ss; } *contours;
+ int gid;
+ RefChar *last, *cur;
+
+ fseek(ttf,base,SEEK_SET);
+ cc = getushort(ttf); /* Contours */
+ rc = 0;
+ if ( version==1 )
+ rc = getushort(ttf); /* References */
+ contours = malloc(cc*sizeof(struct contours));
+ for ( i=0; i<cc; ++i ) {
+ contours[i].data_off = getushort(ttf);
+ contours[i].name_off = getushort(ttf);
+ }
+ last = NULL;
+ for ( i=0; i<rc; ++i ) {
+ cur = RefCharCreate();
+ for ( j=0; j<6; ++j )
+ cur->transform[j] = getlong(ttf)/32768.0;
+ gid = getushort(ttf);
+ if ( gid>=info->glyph_cnt ) {
+ LogError(_("Bad glyph reference in layer info.\n"));
+ break;
+ }
+ cur->sc = info->chars[gid];
+ cur->orig_pos = gid;
+ cur->unicode_enc = cur->sc->unicodeenc;
+ if ( last==NULL )
+ ly->refs = cur;
+ else
+ last->next = cur;
+ last = cur;
+ }
+
+ ss = ly->splines; /* Only relevant for spiros where they live in someone else's layer */
+ for ( i=0; i<cc; ++i ) {
+ if ( type!=1 ) { /* Not spiros */
+ contours[i].ss = chunkalloc(sizeof(SplineSet));
+ if ( i==0 )
+ ly->splines = contours[i].ss;
+ else
+ contours[i-1].ss->next = contours[i].ss;
+ if ( contours[i].name_off!=0 )
+ contours[i].ss->contour_name = pfed_read_utf8(ttf,base+contours[i].name_off);
+ pfed_read_normal_contour(ttf,contours[i].ss,base+contours[i].data_off,type);
+ } else { /* Spiros are actually bound to an already existing layer and don't have an independent existance yet */
+ contours[i].ss = ss;
+ if ( ss!=NULL ) {
+ pfed_read_spiro_contour(ttf,ss,base+contours[i].data_off,type);
+ ss = ss->next;
+ } else
+ LogError(_("Whoops, Ran out of spiros\n"));
+ }
+ }
+ free(contours);
+}
+
+static void pfed_readguidelines(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int i,v,h,off;
+ int version;
+ SplinePoint *sp, *nsp;
+ SplineSet *ss;
+
+ fseek(ttf,base,SEEK_SET);
+ version = getushort(ttf);
+ if ( version>1 )
+return; /* Bad version number */
+ v = getushort(ttf);
+ h = getushort(ttf);
+ (void) getushort(ttf);
+ off = getushort(ttf);
+
+ if ( off!=0 ) {
+ pfed_read_glyph_layer(ttf,info,&info->guidelines,base+off,info->to_order2?2:3,version);
+ } else {
+ struct npos { int pos; int offset; } *vs, *hs;
+ vs = malloc(v*sizeof(struct npos));
+ hs = malloc(h*sizeof(struct npos));
+ for ( i=0; i<v; ++i ) {
+ vs[i].pos = (short) getushort(ttf);
+ vs[i].offset = getushort(ttf);
+ }
+ for ( i=0; i<h; ++i ) {
+ hs[i].pos = (short) getushort(ttf);
+ hs[i].offset = getushort(ttf);
+ }
+ for ( i=0; i<v; ++i ) {
+ sp = SplinePointCreate(vs[i].pos,-info->emsize);
+ nsp = SplinePointCreate(vs[i].pos,2*info->emsize);
+ SplineMake(sp,nsp,info->to_order2);
+ ss = chunkalloc(sizeof(SplineSet));
+ ss->first = sp; ss->last = nsp;
+ if ( vs[i].offset!=0 )
+ ss->contour_name = pfed_read_utf8(ttf,base+vs[i].offset);
+ ss->next = info->guidelines.splines;
+ info->guidelines.splines = ss;
+ }
+ for ( i=0; i<h; ++i ) {
+ sp = SplinePointCreate(-info->emsize,hs[i].pos);
+ nsp = SplinePointCreate(2*info->emsize,hs[i].pos);
+ SplineMake(sp,nsp,info->to_order2);
+ ss = chunkalloc(sizeof(SplineSet));
+ ss->first = sp; ss->last = nsp;
+ if ( hs[i].offset!=0 )
+ ss->contour_name = pfed_read_utf8(ttf,base+hs[i].offset);
+ ss->next = info->guidelines.splines;
+ info->guidelines.splines = ss;
+ }
+ SPLCategorizePoints(info->guidelines.splines);
+ free(vs); free(hs);
+ }
+}
+
+static void pfed_redo_refs(SplineChar *sc,int layer) {
+ RefChar *refs;
+
+ sc->ticked = true;
+ for ( refs=sc->layers[layer].refs; refs!=NULL; refs=refs->next ) {
+ if ( layer==1 && refs->sc==NULL ) /* If main layer has spiros attached, then we'll get here. Any refs will come from the main ttf reading routines and won't be fixed up yet */
+ continue;
+ if ( !refs->sc->ticked )
+ pfed_redo_refs(refs->sc,layer);
+ SCReinstanciateRefChar(sc,refs,layer);
+ }
+}
+
+static void pfed_read_layer(FILE *ttf,struct ttfinfo *info,int layer,int type, uint32 base,
+ uint32 start,int version) {
+ uint32 *loca = calloc(info->glyph_cnt,sizeof(uint32));
+ int i,j;
+ SplineChar *sc;
+ int rcnt;
+ struct range { int start, last; uint32 offset; } *ranges;
+
+ fseek(ttf,start,SEEK_SET);
+ rcnt = getushort(ttf);
+ ranges = malloc(rcnt*sizeof(struct range));
+ for ( i=0; i<rcnt; ++i ) {
+ ranges[i].start = getushort(ttf);
+ ranges[i].last = getushort(ttf);
+ ranges[i].offset = getlong(ttf);
+ }
+ for ( i=0; i<rcnt; ++i ) {
+ fseek(ttf,base+ranges[i].offset,SEEK_SET);
+ for ( j=ranges[i].start; j<=ranges[i].last; ++j )
+ loca[j] = getlong(ttf);
+ for ( j=ranges[i].start; j<=ranges[i].last; ++j ) {
+ Layer *ly;
+ sc = info->chars[j];
+ ly = &sc->layers[layer];
+ if ( loca[j]!=0 )
+ pfed_read_glyph_layer(ttf,info,ly,base+loca[j],type,version);
+ }
+ }
+ free(ranges); free(loca);
+
+ for ( i=0; i<info->glyph_cnt; ++i ) if ( info->chars[i]!=NULL )
+ info->chars[i]->ticked = false;
+ for ( i=0; i<info->glyph_cnt; ++i ) if ( info->chars[i]!=NULL )
+ pfed_redo_refs(info->chars[i],layer);
+}
+
+static void pfed_readotherlayers(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int i, l, lcnt, spiro_index, gid;
+ int version;
+ struct layer_info { int type, name_off, data_off, sf_layer; char *name; } *layers;
+ int non_spiro_cnt=0;
+ SplineChar *sc;
+
+ fseek(ttf,base,SEEK_SET);
+ version = getushort(ttf);
+ if ( version>1 )
+return; /* Bad version number */
+ lcnt = getushort(ttf);
+ layers = malloc(lcnt*sizeof(struct layer_info));
+ for ( i=0; i<lcnt; ++i ) {
+ layers[i].type = getushort(ttf);
+ layers[i].name_off = getushort(ttf);
+ layers[i].data_off = getlong(ttf);
+ layers[i].sf_layer = -1;
+ }
+ spiro_index = -1;
+ non_spiro_cnt = 0;
+ for ( i=0; i<lcnt; ++i ) {
+ if ( layers[i].name_off==0 )
+ layers[i].name = copy("Unnamed");
+ else {
+ layers[i].name = pfed_read_utf8(ttf,base+layers[i].name_off);
+ if ( layers[i].type==1 && strcmp(layers[i].name,"Spiro")==0 )
+ spiro_index = i;
+ }
+ if ( layers[i].type==2 || layers[i].type==3 || layers[i].type==0x102 || layers[i].type==0x103 )
+ ++non_spiro_cnt;
+ }
+ if ( spiro_index==-1 ) {
+ for ( i=0; i<lcnt; ++i )
+ if ( layers[i].type==1 ) {
+ spiro_index=i;
+ break;
+ }
+ }
+
+ if ( non_spiro_cnt!=0 ) {
+ info->layer_cnt = non_spiro_cnt+1;
+ info->layers = calloc(info->layer_cnt+1,sizeof(LayerInfo));
+ info->layers[ly_back].background = true;
+ info->layers[ly_fore].order2 = info->to_order2;
+ info->layers[ly_fore].background = false;
+ l = i = 0;
+ if ( (layers[i].type&0xff)==1 )
+ ++i;
+ if ( layers[i].type&0x100 ) {
+ /* first layer output is foreground, so it can't replace the background layer */
+ ++info->layer_cnt;
+ l = 2;
+ info->layers[ly_back].order2 = info->to_order2;
+ }
+ for ( ; i<lcnt; ++i ) if ( (layers[i].type&0xff)==2 || (layers[i].type&0xff)==3 ) {
+ info->layers[l].name = layers[i].name;
+ layers[i].name = NULL;
+ layers[i].sf_layer = l;
+ info->layers[l].order2 = (layers[i].type&0xff)==2;
+ info->layers[l].background = (layers[i].type&0x100)?0:1;
+ if ( l==0 ) l=2; else ++l;
+ }
+ if ( info->layer_cnt!=2 ) {
+ for ( gid = 0; gid<info->glyph_cnt; ++gid ) if ((sc=info->chars[gid])!=NULL ) {
+ sc->layers = realloc(sc->layers,info->layer_cnt*sizeof(Layer));
+ memset(sc->layers+2,0,(info->layer_cnt-2)*sizeof(Layer));
+ sc->layer_cnt = info->layer_cnt;
+ }
+ }
+ }
+ if ( spiro_index!=-1 )
+ pfed_read_layer(ttf,info,ly_fore,layers[spiro_index].type,base,base+layers[spiro_index].data_off,version);
+ for ( i=0; i<lcnt; ++i ) if ( layers[i].sf_layer!=-1 ) {
+ pfed_read_layer(ttf,info,layers[i].sf_layer,layers[i].type&0xff,
+ base,base+layers[i].data_off,version);
+ }
+ for ( i=0; i<lcnt; ++i )
+ free( layers[i].name );
+ free( layers );
+}
+
+void pfed_read(FILE *ttf,struct ttfinfo *info) {
+ int n,i;
+ struct tagoff { uint32 tag, offset; } tagoff[MAX_SUBTABLE_TYPES+30];
+
+ fseek(ttf,info->pfed_start,SEEK_SET);
+
+ if ( getlong(ttf)!=0x00010000 )
+return;
+ n = getlong(ttf);
+ if ( n>=MAX_SUBTABLE_TYPES+30 )
+ n = MAX_SUBTABLE_TYPES+30;
+ for ( i=0; i<n; ++i ) {
+ tagoff[i].tag = getlong(ttf);
+ tagoff[i].offset = getlong(ttf);
+ }
+ for ( i=0; i<n; ++i ) switch ( tagoff[i].tag ) {
+ case fcmt_TAG: case flog_TAG:
+ pfed_readfontcomment(ttf,info,info->pfed_start+tagoff[i].offset, tagoff[i].tag);
+ break;
+ case cvtc_TAG:
+ pfed_readcvtcomments(ttf,info,info->pfed_start+tagoff[i].offset);
+ break;
+ case cmnt_TAG:
+ pfed_readglyphcomments(ttf,info,info->pfed_start+tagoff[i].offset);
+ break;
+ case colr_TAG:
+ pfed_readcolours(ttf,info,info->pfed_start+tagoff[i].offset);
+ break;
+ case GPOS_TAG:
+ pfed_readlookupnames(ttf,info,info->pfed_start+tagoff[i].offset,info->gpos_lookups);
+ break;
+ case GSUB_TAG:
+ pfed_readlookupnames(ttf,info,info->pfed_start+tagoff[i].offset,info->gsub_lookups);
+ break;
+ case layr_TAG:
+ pfed_readotherlayers(ttf,info,info->pfed_start+tagoff[i].offset);
+ break;
+ case guid_TAG:
+ pfed_readguidelines(ttf,info,info->pfed_start+tagoff[i].offset);
+ break;
+ default:
+ LogError( _("Unknown subtable '%c%c%c%c' in 'PfEd' table, ignored\n"),
+ tagoff[i].tag>>24, (tagoff[i].tag>>16)&0xff, (tagoff[i].tag>>8)&0xff, tagoff[i].tag&0xff );
+ break;
+ }
+}
+
+/* 'TeX ' table format is as follows... */
+/* uint32 version number 0x00010000 */
+/* uint32 subtable count */
+/* struct { uint32 tab, offset } tag/offset for first subtable */
+/* struct { uint32 tab, offset } tag/offset for second subtable */
+/* ... */
+
+/* 'TeX ' 'ftpm' font parameter subtable format */
+/* short version number 0 */
+/* parameter count */
+/* array of { 4chr tag, value } */
+
+/* 'TeX ' 'htdp' per-glyph height/depth subtable format */
+/* short version number 0 */
+/* short glyph-count */
+/* array[glyph-count] of { int16 height,depth } */
+
+/* 'TeX ' 'itlc' per-glyph italic correction subtable */
+/* short version number 0 */
+/* short glyph-count */
+/* array[glyph-count] of int16 italic_correction */
+
+/* !!!!!!!!!!! OBSOLETE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
+/* 'TeX ' 'sbsp' per-glyph sub/super script positioning subtable */
+/* short version number 0 */
+/* short glyph-count */
+/* array[glyph-count] of { int16 sub,super } */
+
+#undef MAX_SUBTABLE_TYPES
+#define MAX_SUBTABLE_TYPES 4
+
+struct TeX_subtabs {
+ int next;
+ struct {
+ FILE *data;
+ uint32 tag;
+ uint32 offset;
+ } subtabs[MAX_SUBTABLE_TYPES];
+};
+
+static uint32 tex_text_params[] = {
+ TeX_Slant,
+ TeX_Space,
+ TeX_Stretch,
+ TeX_Shrink,
+ TeX_XHeight,
+ TeX_Quad,
+ TeX_ExtraSp,
+ 0
+};
+static uint32 tex_math_params[] = {
+ TeX_Slant,
+ TeX_Space,
+ TeX_Stretch,
+ TeX_Shrink,
+ TeX_XHeight,
+ TeX_Quad,
+ TeX_MathSp,
+ TeX_Num1,
+ TeX_Num2,
+ TeX_Num3,
+ TeX_Denom1,
+ TeX_Denom2,
+ TeX_Sup1,
+ TeX_Sup2,
+ TeX_Sup3,
+ TeX_Sub1,
+ TeX_Sub2,
+ TeX_SupDrop,
+ TeX_SubDrop,
+ TeX_Delim1,
+ TeX_Delim2,
+ TeX_AxisHeight,
+ 0};
+static uint32 tex_mathext_params[] = {
+ TeX_Slant,
+ TeX_Space,
+ TeX_Stretch,
+ TeX_Shrink,
+ TeX_XHeight,
+ TeX_Quad,
+ TeX_MathSp,
+ TeX_DefRuleThick,
+ TeX_BigOpSpace1,
+ TeX_BigOpSpace2,
+ TeX_BigOpSpace3,
+ TeX_BigOpSpace4,
+ TeX_BigOpSpace5,
+ 0};
+
+/* ************************************************************************** */
+/* ************************* The 'TeX ' table ************************* */
+/* ************************* Output ************************* */
+/* ************************************************************************** */
+
+static void TeX_dumpFontParams(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
+ FILE *fprm;
+ int i,pcnt;
+ uint32 *tags;
+
+ if ( sf->texdata.type==tex_unset )
+return;
+ tex->subtabs[tex->next].tag = CHR('f','t','p','m');
+ tex->subtabs[tex->next++].data = fprm = tmpfile2();
+
+ putshort(fprm,0); /* sub-table version number */
+ pcnt = sf->texdata.type==tex_math ? 22 : sf->texdata.type==tex_mathext ? 13 : 7;
+ tags = sf->texdata.type==tex_math ? tex_math_params :
+ sf->texdata.type==tex_mathext ? tex_mathext_params :
+ tex_text_params;
+ putshort(fprm,pcnt);
+ for ( i=0; i<pcnt; ++i ) {
+ putlong(fprm,tags[i]);
+ putlong(fprm,sf->texdata.params[i]);
+ }
+ /* always aligned */
+}
+
+static void TeX_dumpHeightDepth(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
+ FILE *htdp;
+ int i,j,k,last_g, gid;
+ DBounds b;
+
+ for ( i=at->gi.gcnt-1; i>=0; --i ) {
+ gid = at->gi.bygid[i];
+ if ( gid!=-1 && sf->glyphs[gid]!=NULL &&
+ (sf->glyphs[gid]->tex_height!=TEX_UNDEF || sf->glyphs[gid]->tex_depth!=TEX_UNDEF))
+ break;
+ }
+ if ( i<0 ) /* No height/depth info */
+return;
+
+ tex->subtabs[tex->next].tag = CHR('h','t','d','p');
+ tex->subtabs[tex->next++].data = htdp = tmpfile2();
+
+ putshort(htdp,0); /* sub-table version number */
+ putshort(htdp,sf->glyphs[gid]->ttf_glyph+1);/* data for this many glyphs */
+
+ last_g = -1;
+ for ( j=0; j<=i; ++j ) {
+ gid = at->gi.bygid[j];
+ if ( gid!=-1 && sf->glyphs[gid]!=NULL ) {
+ SplineChar *sc = sf->glyphs[gid];
+ for ( k=last_g+1; k<sc->ttf_glyph; ++k ) {
+ putshort(htdp,0);
+ putshort(htdp,0);
+ }
+ if ( sc->tex_depth==TEX_UNDEF || sc->tex_height==TEX_UNDEF )
+ SplineCharFindBounds(sc,&b);
+ putshort( htdp, sc->tex_height==TEX_UNDEF ? b.maxy : sc->tex_height );
+ putshort( htdp, sc->tex_depth==TEX_UNDEF ? -b.miny : sc->tex_depth );
+ last_g = sc->ttf_glyph;
+ }
+ }
+ /* always aligned */
+}
+
+static void TeX_dumpItalicCorr(SplineFont *sf, struct TeX_subtabs *tex, struct alltabs *at ) {
+ FILE *itlc;
+ int i,j,k,last_g, gid;
+
+ for ( i=at->gi.gcnt-1; i>=0; --i ) {
+ gid = at->gi.bygid[i];
+ if ( gid!=-1 && sf->glyphs[gid]!=NULL &&
+ sf->glyphs[gid]->italic_correction!=TEX_UNDEF )
+ break;
+ }
+ if ( i<0 ) /* No italic_correction info */
+return;
+
+ tex->subtabs[tex->next].tag = CHR('i','t','l','c');
+ tex->subtabs[tex->next++].data = itlc = tmpfile2();
+
+ putshort(itlc,0); /* sub-table version number */
+ putshort(itlc,sf->glyphs[gid]->ttf_glyph+1);/* data for this many glyphs */
+
+ last_g = -1;
+ for ( j=0; j<=i; ++j ) {
+ gid = at->gi.bygid[j];
+ if ( gid!=-1 && sf->glyphs[gid]!=NULL ) {
+ SplineChar *sc = sf->glyphs[gid];
+ for ( k=last_g+1; k<sc->ttf_glyph; ++k ) {
+ putshort(itlc,0);
+ putshort(itlc,0);
+ }
+ putshort( itlc, sc->italic_correction!=TEX_UNDEF ? sc->italic_correction :
+ 0 );
+ last_g = sc->ttf_glyph;
+ }
+ }
+ /* always aligned */
+}
+
+void tex_dump(struct alltabs *at, SplineFont *sf) {
+ struct TeX_subtabs tex;
+ FILE *file;
+ int i;
+ uint32 offset;
+
+ if ( !(at->gi.flags & ttf_flag_TeXtable ))
+return;
+
+ memset(&tex,0,sizeof(tex));
+ TeX_dumpFontParams(sf,&tex,at);
+ TeX_dumpHeightDepth(sf,&tex,at);
+ TeX_dumpItalicCorr(sf,&tex,at);
+
+ if ( tex.next==0 )
+return; /* No subtables */
+
+ at->tex = file = tmpfile2();
+ putlong(file, 0x00010000); /* Version number */
+ putlong(file, tex.next); /* sub-table count */
+ offset = 2*sizeof(uint32) + 2*tex.next*sizeof(uint32);
+ for ( i=0; i<tex.next; ++i ) {
+ putlong(file,tex.subtabs[i].tag);
+ putlong(file,offset);
+ fseek(tex.subtabs[i].data,0,SEEK_END);
+ tex.subtabs[i].offset = offset;
+ offset += ftell(tex.subtabs[i].data);
+ }
+ for ( i=0; i<tex.next; ++i ) {
+ fseek(tex.subtabs[i].data,0,SEEK_SET);
+ ttfcopyfile(file,tex.subtabs[i].data,tex.subtabs[i].offset,"TeX-subtable");
+ }
+ if ( ftell(file)&2 )
+ putshort(file,0);
+ if ( ftell(file)&3 )
+ IError("'TeX ' table not properly aligned");
+ at->texlen = ftell(file);
+}
+
+/* ************************* The 'TeX ' table ************************* */
+/* ************************* Input ************************* */
+
+static void TeX_readFontParams(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int i,pcnt;
+ static uint32 *alltags[] = { tex_text_params, tex_math_params, tex_mathext_params };
+ int j,k;
+ uint32 tag;
+ int32 val;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
+return;
+ pcnt = getushort(ttf);
+ if ( pcnt==22 ) info->texdata.type = tex_math;
+ else if ( pcnt==13 ) info->texdata.type = tex_mathext;
+ else if ( pcnt>=7 ) info->texdata.type = tex_text;
+ for ( i=0; i<pcnt; ++i ) {
+ tag = getlong(ttf);
+ val = getlong(ttf);
+ for ( j=0; j<3; ++j ) {
+ for ( k=0; alltags[j][k]!=0; ++k )
+ if ( alltags[j][k]==tag )
+ break;
+ if ( alltags[j][k]==tag )
+ break;
+ }
+ if ( j<3 )
+ info->texdata.params[k] = val;
+ }
+}
+
+static void TeX_readHeightDepth(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int i,gcnt;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
+return;
+ gcnt = getushort(ttf);
+ for ( i=0; i<gcnt && i<info->glyph_cnt; ++i ) {
+ int h, d;
+ h = getushort(ttf);
+ d = getushort(ttf);
+ if ( info->chars[i]!=NULL ) {
+ info->chars[i]->tex_height = h;
+ info->chars[i]->tex_depth = d;
+ }
+ }
+}
+
+static void TeX_readItalicCorr(FILE *ttf,struct ttfinfo *info,uint32 base) {
+ int i,gcnt;
+
+ fseek(ttf,base,SEEK_SET);
+ if ( getushort(ttf)!=0 ) /* Don't know how to read this version of the subtable */
+return;
+ gcnt = getushort(ttf);
+ for ( i=0; i<gcnt && i<info->glyph_cnt; ++i ) {
+ int ital;
+ ital = getushort(ttf);
+ if ( info->chars[i]!=NULL ) {
+ info->chars[i]->italic_correction = ital;
+ }
+ }
+}
+
+void tex_read(FILE *ttf,struct ttfinfo *info) {
+ int n,i;
+ struct tagoff { uint32 tag, offset; } tagoff[MAX_SUBTABLE_TYPES+30];
+
+ fseek(ttf,info->tex_start,SEEK_SET);
+
+ if ( getlong(ttf)!=0x00010000 )
+return;
+ n = getlong(ttf);
+ if ( n>=MAX_SUBTABLE_TYPES+30 )
+ n = MAX_SUBTABLE_TYPES+30;
+ for ( i=0; i<n; ++i ) {
+ tagoff[i].tag = getlong(ttf);
+ tagoff[i].offset = getlong(ttf);
+ }
+ for ( i=0; i<n; ++i ) switch ( tagoff[i].tag ) {
+ case CHR('f','t','p','m'):
+ TeX_readFontParams(ttf,info,info->tex_start+tagoff[i].offset);
+ break;
+ case CHR('h','t','d','p'):
+ TeX_readHeightDepth(ttf,info,info->tex_start+tagoff[i].offset);
+ break;
+ case CHR('i','t','l','c'):
+ TeX_readItalicCorr(ttf,info,info->tex_start+tagoff[i].offset);
+ break;
+ default:
+ LogError( _("Unknown subtable '%c%c%c%c' in 'TeX ' table, ignored\n"),
+ tagoff[i].tag>>24, (tagoff[i].tag>>16)&0xff, (tagoff[i].tag>>8)&0xff, tagoff[i].tag&0xff );
+ break;
+ }
+}
+
+/* ************************************************************************** */
+/* ************************* The 'BDF ' table ************************* */
+/* ************************* Output ************************* */
+/* ************************************************************************** */
+
+/* the BDF table is used to store BDF properties so that we can do round trip */
+/* conversion from BDF->otb->BDF without losing anything. */
+/* Format:
+ USHORT version : 'BDF' table version number, must be 0x0001
+ USHORT strikeCount : number of strikes in table
+ ULONG stringTable : offset (from start of BDF table) to string table
+
+followed by an array of 'strikeCount' descriptors that look like:
+ USHORT ppem : vertical pixels-per-EM for this strike
+ USHORT num_items : number of items (properties and atoms), max is 255
+
+this array is followed by 'strikeCount' value sets. Each "value set" is
+an array of (num_items) items that look like:
+ ULONG item_name : offset in string table to item name
+ USHORT item_type : item type: 0 => non-property string (e.g. COMMENT)
+ 1 => non-property atom (e.g. FONT)
+ 2 => non-property int32
+ 3 => non-property uint32
+ 0x10 => flag for a property, ored
+ with above value types)
+ ULONG item_value : item value.
+ strings => an offset into the string table
+ to the corresponding string,
+ without the surrending double-quotes
+
+ atoms => an offset into the string table
+
+ integers => the corresponding 32-bit value
+Then the string table of null terminated strings. These strings should be in
+ASCII.
+*/
+
+/* ************************* The 'BDF ' table ************************* */
+/* ************************* Input ************************* */
+
+static char *getstring(FILE *ttf,long start) {
+ long here = ftell(ttf);
+ int len, ch;
+ char *str, *pt;
+
+ if ( here<0 ) return( NULL );
+ fseek(ttf,start,SEEK_SET);
+ for ( len=1; (ch=getc(ttf))>0 ; ++len );
+ fseek(ttf,start,SEEK_SET);
+ pt = str = malloc(len);
+ while ( (ch=getc(ttf))>0 )
+ *pt++ = ch;
+ *pt = '\0';
+ fseek(ttf,here,SEEK_SET);
+return( str );
+}
+
+/* COMMENTS get stored all in one lump by freetype. De-lump them */
+static int CheckForNewlines(BDFFont *bdf,int k) {
+ char *pt, *start;
+ int cnt, i;
+
+ for ( cnt=0, pt = bdf->props[k].u.atom; *pt; ++pt )
+ if ( *pt=='\n' )
+ ++cnt;
+ if ( cnt==0 )
+return( k );
+
+ bdf->prop_cnt += cnt;
+ bdf->props = realloc(bdf->props, bdf->prop_cnt*sizeof( BDFProperties ));
+
+ pt = strchr(bdf->props[k].u.atom,'\n');
+ *pt = '\0'; ++pt;
+ for ( i=1; i<=cnt; ++i ) {
+ start = pt;
+ while ( *pt!='\n' && *pt!='\0' ) ++pt;
+ bdf->props[k+i].name = copy(bdf->props[k].name);
+ bdf->props[k+i].type = bdf->props[k].type;
+ bdf->props[k+i].u.atom = copyn(start,pt-start);
+ if ( *pt=='\n' ) ++pt;
+ }
+ pt = copy( bdf->props[k].u.atom );
+ free( bdf->props[k].u.atom );
+ bdf->props[k].u.atom = pt;
+return( k+cnt );
+}
+
+void ttf_bdf_read(FILE *ttf,struct ttfinfo *info) {
+ int strike_cnt, i,j,k;
+ long string_start;
+ struct bdfinfo { BDFFont *bdf; int cnt; } *bdfinfo;
+ BDFFont *bdf;
+
+ if ( info->bdf_start==0 )
+return;
+ fseek(ttf,info->bdf_start,SEEK_SET);
+ if ( getushort(ttf)!=1 )
+return;
+ strike_cnt = getushort(ttf);
+ string_start = getlong(ttf) + info->bdf_start;
+
+ bdfinfo = malloc(strike_cnt*sizeof(struct bdfinfo));
+ for ( i=0; i<strike_cnt; ++i ) {
+ int ppem, num_items;
+ ppem = getushort(ttf);
+ num_items = getushort(ttf);
+ for ( bdf=info->bitmaps; bdf!=NULL; bdf=bdf->next )
+ if ( bdf->pixelsize==ppem )
+ break;
+ bdfinfo[i].bdf = bdf;
+ bdfinfo[i].cnt = num_items;
+ }
+
+ for ( i=0; i<strike_cnt; ++i ) {
+ if ( (bdf = bdfinfo[i].bdf) ==NULL )
+ fseek(ttf,10*bdfinfo[i].cnt,SEEK_CUR);
+ else {
+ bdf->prop_cnt = bdfinfo[i].cnt;
+ bdf->props = malloc(bdf->prop_cnt*sizeof(BDFProperties));
+ for ( j=k=0; j<bdfinfo[i].cnt; ++j, ++k ) {
+ long name = getlong(ttf);
+ int type = getushort(ttf);
+ long value = getlong(ttf);
+ bdf->props[k].type = type;
+ bdf->props[k].name = getstring(ttf,string_start+name);
+ switch ( type&~prt_property ) {
+ case prt_int: case prt_uint:
+ bdf->props[k].u.val = value;
+ if ( strcmp(bdf->props[k].name,"FONT_ASCENT")==0 &&
+ value<=bdf->pixelsize ) {
+ bdf->ascent = value;
+ bdf->descent = bdf->pixelsize-value;
+ }
+ break;
+ case prt_string: case prt_atom:
+ bdf->props[k].u.str = getstring(ttf,string_start+value);
+ k = CheckForNewlines(bdf,k);
+ break;
+ }
+ }
+ }
+ }
+ free(bdfinfo);
+}
+
+
+/* ************************************************************************** */
+/* ************************* The 'FFTM' table ************************* */
+/* ************************* Output ************************* */
+/* ************************************************************************** */
+
+/* FontForge timestamp table */
+/* Contains: */
+/* date of fontforge sources */
+/* date of font's (not file's) creation */
+/* date of font's modification */
+int ttf_fftm_dump(SplineFont *sf,struct alltabs *at) {
+ int32 results[2];
+
+ at->fftmf = tmpfile2();
+
+ putlong(at->fftmf,0x00000001); /* Version */
+
+ cvt_unix_to_1904(LibFF_ModTime,results);
+ putlong(at->fftmf,results[1]);
+ putlong(at->fftmf,results[0]);
+
+ cvt_unix_to_1904(sf->creationtime,results);
+ putlong(at->fftmf,results[1]);
+ putlong(at->fftmf,results[0]);
+
+ cvt_unix_to_1904(sf->modificationtime,results);
+ putlong(at->fftmf,results[1]);
+ putlong(at->fftmf,results[0]);
+
+ at->fftmlen = ftell(at->fftmf); /* had better be 7*4 */
+ /* It will never be misaligned */
+ if ( (at->fftmlen&1)!=0 )
+ putc(0,at->fftmf);
+ if ( ((at->fftmlen+1)&2)!=0 )
+ putshort(at->fftmf,0);
+return( true );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/uiinterface.h b/dviware/dvisvgm/libs/ff-woff/fontforge/uiinterface.h
new file mode 100644
index 0000000000..c965de0fbc
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/uiinterface.h
@@ -0,0 +1,159 @@
+/* Copyright (C) 2007-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _UIINTERFACE_H
+#define _UIINTERFACE_H
+# include <basics.h>
+#include <fontforge-config.h>
+
+/* This encapsulates a set of callbacks and stubs. The callbacks get activated*/
+/* when an event happens (a glyph in a font changes for example, then all */
+/* charviews looking at it must be updated), and the stubs provide some simple*/
+/* UI routines: Post an error, etc. */
+
+/* ************************************************************************** */
+/* Basic, low-level UI routines for events we discover deep inside script code*/
+/* ************************************************************************** */
+
+struct ui_interface {
+ /* The following is used to post a fontforge internal error */
+ /* currently it puts up a dlg displaying the error text */
+ void (*ierror)(const char *fmt,...);
+
+ /* The following is a simple dialog to alert the user that s/he has */
+ /* made an error. Currently it posts a modal dlg and waits for the */
+ /* user to dismiss it */
+ /* The title argument is the window's title. The error argument is the */
+ /* text of the message. It may contain printf formatting. It may contain */
+ /* newlines to force line breaks -- even if it doesn't contain new lines */
+ /* the routine will wrap the text if a line is too long */
+ void (*post_error)(const char *title,const char *error,...);
+
+ /* The following is used to post a warning message in such a way that it */
+ /* will not impede the user. Currently it creates a little window at the */
+ /* bottom right of the screen and writes successive messages there */
+ void (*logwarning)(const char *fmt,...);
+
+ /* The following is another way to post a warning message in such a way */
+ /* that it will not impede the user. Currently it pops up a little */
+ /* non-modal dlg which vanishes after a minute or two (or if the user */
+ /* dismisses it, of course */
+ void (*post_warning)(const char *title,const char *statement,...);
+
+ /* Occasionally we we be deep in a non-ui routine and we find we must ask */
+ /* the user a question. In this routine the choices are displayed as */
+ /* buttons, one button is the default, another is a cancel choice */
+ int (*ask)(const char *title, const char **answers,
+ int def, int cancel,const char *question,...);
+
+ /* Similar to the above, except here the choices are presented as a */
+ /* scrolled list. Return -1 if the user cancels */
+ int (*choose)(const char *title, const char **answers,
+ int def, int cancel,const char *question,...);
+
+ /* Multiple things can be selected, sel is an in/out parameter, one byte */
+ /* per entry in the choice array. 0=> not selected, 1=>selected */
+ int (*choose_multiple)(char *title, const char **choices,char *sel,
+ int cnt, char *buts[2], const char *question,...);
+
+ /* Here we want a string. We are passed a default answer (or NULL) */
+ /* The return is NULL on cancel, otherwise a string which must be freed */
+ char *(*ask_string)(const char *title,
+ const char *def,const char *question,...);
+ /* Same as above, except for entering a password */
+ char *(*ask_password)(const char *title,
+ const char *def,const char *question,...);
+
+ /* The next two routines are only used in the python interface to provide */
+ /* a python script running in ff a way to open a file */
+ /* Arguments are a window title for the dlg, a default file (or NULL), and */
+ /* an initial filter (unix wildcards) or NULL */
+ char *(*open_file)(const char *title, const char *defaultfile,
+ const char *initial_filter);
+ char *(*saveas_file)(const char *title, const char *defaultfile,
+ const char *initial_filter);
+
+ /* These routines are for a progress indicator */
+ void (*progress_start)(int delay, const char *title, const char *line1,
+ const char *line2, int tot, int stages);
+ void (*progress_end)(void);
+ void (*progress_show)(void);
+ void (*progress_enable_stop)(int);
+ int (*progress_next)(void);
+ int (*progress_next_stage)(void);
+ int (*progress_increment)(int);
+ void (*progress_change_line1)(const char *);
+ void (*progress_change_line2)(const char *);
+ void (*progress_pause)(void);
+ void (*progress_resume)(void);
+ void (*progress_change_stages)(int);
+ void (*progress_change_total)(int);
+ int (*progress_reset)(void);
+
+ void (*allow_events)(void);
+
+ /* pops up a dlg asking user whether to do remove overlap (and other stuff)*/
+ /* when loading an eps file with strokes, etc. */
+ int (*stroke_flags)(void);
+};
+extern struct ui_interface *ui_interface;
+
+#define IError (ui_interface->ierror)
+#define LogError (ui_interface->logwarning)
+#define ff_post_notice (ui_interface->post_warning)
+#define ff_post_error (ui_interface->post_error)
+#define ff_ask (ui_interface->ask)
+#define ff_choose (ui_interface->choose)
+#define ff_choose_multiple (ui_interface->choose_multiple)
+#define ff_ask_string (ui_interface->ask_string)
+#define ff_ask_password (ui_interface->ask_password)
+
+#define ff_open_filename (ui_interface->open_file)
+#define ff_save_filename (ui_interface->saveas_file)
+
+#define ff_progress_start_indicator (ui_interface->progress_start)
+#define ff_progress_end_indicator (ui_interface->progress_end)
+#define ff_progress_show (ui_interface->progress_show)
+#define ff_progress_enable_stop (ui_interface->progress_enable_stop)
+#define ff_progress_next (ui_interface->progress_next)
+#define ff_progress_next_stage (ui_interface->progress_next_stage)
+#define ff_progress_increment (ui_interface->progress_increment)
+#define ff_progress_change_line1 (ui_interface->progress_change_line1)
+#define ff_progress_change_line2 (ui_interface->progress_change_line2)
+#define ff_progress_pause_timer (ui_interface->progress_pause)
+#define ff_progress_resume_timer (ui_interface->progress_resume)
+#define ff_progress_change_stages (ui_interface->progress_change_stages)
+#define ff_progress_change_total (ui_interface->progress_change_total)
+#define ff_progress_reset (ui_interface->progress_reset)
+
+#define ff_progress_allow_events (ui_interface->allow_events)
+
+#define TTFNameIds (ui_interface->strid)
+#define MSLangString (ui_interface->mslang)
+
+#define PsStrokeFlagsDlg (ui_interface->stroke_flags)
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/unialt.c b/dviware/dvisvgm/libs/ff-woff/fontforge/unialt.c
new file mode 100644
index 0000000000..1718338d63
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/unialt.c
@@ -0,0 +1,8937 @@
+#include <chardata.h>
+
+/* This file was generated using the program 'makeutype' */
+
+static const unichar_t str_a0[] = { 0x0020, 0 };
+static const unichar_t str_a8[] = { 0x0020, 0x0308, 0 };
+static const unichar_t str_aa[] = { 0x0061, 0 };
+static const unichar_t str_af[] = { 0x0020, 0x0304, 0 };
+static const unichar_t str_b2[] = { 0x0032, 0 };
+static const unichar_t str_b3[] = { 0x0033, 0 };
+static const unichar_t str_b4[] = { 0x0020, 0x0301, 0 };
+static const unichar_t str_b5[] = { 0x03bc, 0 };
+static const unichar_t str_b8[] = { 0x0020, 0x0327, 0 };
+static const unichar_t str_b9[] = { 0x0031, 0 };
+static const unichar_t str_ba[] = { 0x006f, 0 };
+static const unichar_t str_bc[] = { 0x0031, 0x2044, 0x0034, 0 };
+static const unichar_t str_bd[] = { 0x0031, 0x2044, 0x0032, 0 };
+static const unichar_t str_be[] = { 0x0033, 0x2044, 0x0034, 0 };
+static const unichar_t str_c0[] = { 0x0041, 0x0300, 0 };
+static const unichar_t str_c1[] = { 0x0041, 0x0301, 0 };
+static const unichar_t str_c2[] = { 0x0041, 0x0302, 0 };
+static const unichar_t str_c3[] = { 0x0041, 0x0303, 0 };
+static const unichar_t str_c4[] = { 0x0041, 0x0308, 0 };
+static const unichar_t str_c5[] = { 0x0041, 0x030a, 0 };
+static const unichar_t str_c7[] = { 0x0043, 0x0327, 0 };
+static const unichar_t str_c8[] = { 0x0045, 0x0300, 0 };
+static const unichar_t str_c9[] = { 0x0045, 0x0301, 0 };
+static const unichar_t str_ca[] = { 0x0045, 0x0302, 0 };
+static const unichar_t str_cb[] = { 0x0045, 0x0308, 0 };
+static const unichar_t str_cc[] = { 0x0049, 0x0300, 0 };
+static const unichar_t str_cd[] = { 0x0049, 0x0301, 0 };
+static const unichar_t str_ce[] = { 0x0049, 0x0302, 0 };
+static const unichar_t str_cf[] = { 0x0049, 0x0308, 0 };
+static const unichar_t str_d1[] = { 0x004e, 0x0303, 0 };
+static const unichar_t str_d2[] = { 0x004f, 0x0300, 0 };
+static const unichar_t str_d3[] = { 0x004f, 0x0301, 0 };
+static const unichar_t str_d4[] = { 0x004f, 0x0302, 0 };
+static const unichar_t str_d5[] = { 0x004f, 0x0303, 0 };
+static const unichar_t str_d6[] = { 0x004f, 0x0308, 0 };
+static const unichar_t str_d9[] = { 0x0055, 0x0300, 0 };
+static const unichar_t str_da[] = { 0x0055, 0x0301, 0 };
+static const unichar_t str_db[] = { 0x0055, 0x0302, 0 };
+static const unichar_t str_dc[] = { 0x0055, 0x0308, 0 };
+static const unichar_t str_dd[] = { 0x0059, 0x0301, 0 };
+static const unichar_t str_e0[] = { 0x0061, 0x0300, 0 };
+static const unichar_t str_e1[] = { 0x0061, 0x0301, 0 };
+static const unichar_t str_e2[] = { 0x0061, 0x0302, 0 };
+static const unichar_t str_e3[] = { 0x0061, 0x0303, 0 };
+static const unichar_t str_e4[] = { 0x0061, 0x0308, 0 };
+static const unichar_t str_e5[] = { 0x0061, 0x030a, 0 };
+static const unichar_t str_e7[] = { 0x0063, 0x0327, 0 };
+static const unichar_t str_e8[] = { 0x0065, 0x0300, 0 };
+static const unichar_t str_e9[] = { 0x0065, 0x0301, 0 };
+static const unichar_t str_ea[] = { 0x0065, 0x0302, 0 };
+static const unichar_t str_eb[] = { 0x0065, 0x0308, 0 };
+static const unichar_t str_ec[] = { 0x0069, 0x0300, 0 };
+static const unichar_t str_ed[] = { 0x0069, 0x0301, 0 };
+static const unichar_t str_ee[] = { 0x0069, 0x0302, 0 };
+static const unichar_t str_ef[] = { 0x0069, 0x0308, 0 };
+static const unichar_t str_f1[] = { 0x006e, 0x0303, 0 };
+static const unichar_t str_f2[] = { 0x006f, 0x0300, 0 };
+static const unichar_t str_f3[] = { 0x006f, 0x0301, 0 };
+static const unichar_t str_f4[] = { 0x006f, 0x0302, 0 };
+static const unichar_t str_f5[] = { 0x006f, 0x0303, 0 };
+static const unichar_t str_f6[] = { 0x006f, 0x0308, 0 };
+static const unichar_t str_f9[] = { 0x0075, 0x0300, 0 };
+static const unichar_t str_fa[] = { 0x0075, 0x0301, 0 };
+static const unichar_t str_fb[] = { 0x0075, 0x0302, 0 };
+static const unichar_t str_fc[] = { 0x0075, 0x0308, 0 };
+static const unichar_t str_fd[] = { 0x0079, 0x0301, 0 };
+static const unichar_t str_ff[] = { 0x0079, 0x0308, 0 };
+static const unichar_t str_100[] = { 0x0041, 0x0304, 0 };
+static const unichar_t str_101[] = { 0x0061, 0x0304, 0 };
+static const unichar_t str_102[] = { 0x0041, 0x0306, 0 };
+static const unichar_t str_103[] = { 0x0061, 0x0306, 0 };
+static const unichar_t str_104[] = { 0x0041, 0x0328, 0 };
+static const unichar_t str_105[] = { 0x0061, 0x0328, 0 };
+static const unichar_t str_106[] = { 0x0043, 0x0301, 0 };
+static const unichar_t str_107[] = { 0x0063, 0x0301, 0 };
+static const unichar_t str_108[] = { 0x0043, 0x0302, 0 };
+static const unichar_t str_109[] = { 0x0063, 0x0302, 0 };
+static const unichar_t str_10a[] = { 0x0043, 0x0307, 0 };
+static const unichar_t str_10b[] = { 0x0063, 0x0307, 0 };
+static const unichar_t str_10c[] = { 0x0043, 0x030c, 0 };
+static const unichar_t str_10d[] = { 0x0063, 0x030c, 0 };
+static const unichar_t str_10e[] = { 0x0044, 0x030c, 0 };
+static const unichar_t str_10f[] = { 0x0064, 0x030c, 0 };
+static const unichar_t str_110[] = { 0x00d0, 0 };
+static const unichar_t str_112[] = { 0x0045, 0x0304, 0 };
+static const unichar_t str_113[] = { 0x0065, 0x0304, 0 };
+static const unichar_t str_114[] = { 0x0045, 0x0306, 0 };
+static const unichar_t str_115[] = { 0x0065, 0x0306, 0 };
+static const unichar_t str_116[] = { 0x0045, 0x0307, 0 };
+static const unichar_t str_117[] = { 0x0065, 0x0307, 0 };
+static const unichar_t str_118[] = { 0x0045, 0x0328, 0 };
+static const unichar_t str_119[] = { 0x0065, 0x0328, 0 };
+static const unichar_t str_11a[] = { 0x0045, 0x030c, 0 };
+static const unichar_t str_11b[] = { 0x0065, 0x030c, 0 };
+static const unichar_t str_11c[] = { 0x0047, 0x0302, 0 };
+static const unichar_t str_11d[] = { 0x0067, 0x0302, 0 };
+static const unichar_t str_11e[] = { 0x0047, 0x0306, 0 };
+static const unichar_t str_11f[] = { 0x0067, 0x0306, 0 };
+static const unichar_t str_120[] = { 0x0047, 0x0307, 0 };
+static const unichar_t str_121[] = { 0x0067, 0x0307, 0 };
+static const unichar_t str_122[] = { 0x0047, 0x0327, 0 };
+static const unichar_t str_123[] = { 0x0067, 0x0327, 0 };
+static const unichar_t str_124[] = { 0x0048, 0x0302, 0 };
+static const unichar_t str_125[] = { 0x0068, 0x0302, 0 };
+static const unichar_t str_128[] = { 0x0049, 0x0303, 0 };
+static const unichar_t str_129[] = { 0x0069, 0x0303, 0 };
+static const unichar_t str_12a[] = { 0x0049, 0x0304, 0 };
+static const unichar_t str_12b[] = { 0x0069, 0x0304, 0 };
+static const unichar_t str_12c[] = { 0x0049, 0x0306, 0 };
+static const unichar_t str_12d[] = { 0x0069, 0x0306, 0 };
+static const unichar_t str_12e[] = { 0x0049, 0x0328, 0 };
+static const unichar_t str_12f[] = { 0x0069, 0x0328, 0 };
+static const unichar_t str_130[] = { 0x0049, 0x0307, 0 };
+static const unichar_t str_132[] = { 0x0049, 0x004a, 0 };
+static const unichar_t str_133[] = { 0x0069, 0x006a, 0 };
+static const unichar_t str_134[] = { 0x004a, 0x0302, 0 };
+static const unichar_t str_135[] = { 0x006a, 0x0302, 0 };
+static const unichar_t str_136[] = { 0x004b, 0x0327, 0 };
+static const unichar_t str_137[] = { 0x006b, 0x0327, 0 };
+static const unichar_t str_138[] = { 0x03ba, 0 };
+static const unichar_t str_139[] = { 0x004c, 0x0301, 0 };
+static const unichar_t str_13a[] = { 0x006c, 0x0301, 0 };
+static const unichar_t str_13b[] = { 0x004c, 0x0327, 0 };
+static const unichar_t str_13c[] = { 0x006c, 0x0327, 0 };
+static const unichar_t str_13d[] = { 0x004c, 0x030c, 0 };
+static const unichar_t str_13e[] = { 0x006c, 0x030c, 0 };
+static const unichar_t str_13f[] = { 0x004c, 0x00b7, 0 };
+static const unichar_t str_140[] = { 0x006c, 0x00b7, 0 };
+static const unichar_t str_143[] = { 0x004e, 0x0301, 0 };
+static const unichar_t str_144[] = { 0x006e, 0x0301, 0 };
+static const unichar_t str_145[] = { 0x004e, 0x0327, 0 };
+static const unichar_t str_146[] = { 0x006e, 0x0327, 0 };
+static const unichar_t str_147[] = { 0x004e, 0x030c, 0 };
+static const unichar_t str_148[] = { 0x006e, 0x030c, 0 };
+static const unichar_t str_149[] = { 0x02bc, 0x006e, 0 };
+static const unichar_t str_14c[] = { 0x004f, 0x0304, 0 };
+static const unichar_t str_14d[] = { 0x006f, 0x0304, 0 };
+static const unichar_t str_14e[] = { 0x004f, 0x0306, 0 };
+static const unichar_t str_14f[] = { 0x006f, 0x0306, 0 };
+static const unichar_t str_150[] = { 0x004f, 0x030b, 0 };
+static const unichar_t str_151[] = { 0x006f, 0x030b, 0 };
+static const unichar_t str_152[] = { 0x004f, 0x0045, 0 };
+static const unichar_t str_153[] = { 0x006f, 0x0065, 0 };
+static const unichar_t str_154[] = { 0x0052, 0x0301, 0 };
+static const unichar_t str_155[] = { 0x0072, 0x0301, 0 };
+static const unichar_t str_156[] = { 0x0052, 0x0327, 0 };
+static const unichar_t str_157[] = { 0x0072, 0x0327, 0 };
+static const unichar_t str_158[] = { 0x0052, 0x030c, 0 };
+static const unichar_t str_159[] = { 0x0072, 0x030c, 0 };
+static const unichar_t str_15a[] = { 0x0053, 0x0301, 0 };
+static const unichar_t str_15b[] = { 0x0073, 0x0301, 0 };
+static const unichar_t str_15c[] = { 0x0053, 0x0302, 0 };
+static const unichar_t str_15d[] = { 0x0073, 0x0302, 0 };
+static const unichar_t str_15e[] = { 0x0053, 0x0327, 0 };
+static const unichar_t str_15f[] = { 0x0073, 0x0327, 0 };
+static const unichar_t str_160[] = { 0x0053, 0x030c, 0 };
+static const unichar_t str_161[] = { 0x0073, 0x030c, 0 };
+static const unichar_t str_162[] = { 0x0054, 0x0327, 0 };
+static const unichar_t str_163[] = { 0x0074, 0x0327, 0 };
+static const unichar_t str_164[] = { 0x0054, 0x030c, 0 };
+static const unichar_t str_165[] = { 0x0074, 0x030c, 0 };
+static const unichar_t str_168[] = { 0x0055, 0x0303, 0 };
+static const unichar_t str_169[] = { 0x0075, 0x0303, 0 };
+static const unichar_t str_16a[] = { 0x0055, 0x0304, 0 };
+static const unichar_t str_16b[] = { 0x0075, 0x0304, 0 };
+static const unichar_t str_16c[] = { 0x0055, 0x0306, 0 };
+static const unichar_t str_16d[] = { 0x0075, 0x0306, 0 };
+static const unichar_t str_16e[] = { 0x0055, 0x030a, 0 };
+static const unichar_t str_16f[] = { 0x0075, 0x030a, 0 };
+static const unichar_t str_170[] = { 0x0055, 0x030b, 0 };
+static const unichar_t str_171[] = { 0x0075, 0x030b, 0 };
+static const unichar_t str_172[] = { 0x0055, 0x0328, 0 };
+static const unichar_t str_173[] = { 0x0075, 0x0328, 0 };
+static const unichar_t str_174[] = { 0x0057, 0x0302, 0 };
+static const unichar_t str_175[] = { 0x0077, 0x0302, 0 };
+static const unichar_t str_176[] = { 0x0059, 0x0302, 0 };
+static const unichar_t str_177[] = { 0x0079, 0x0302, 0 };
+static const unichar_t str_178[] = { 0x0059, 0x0308, 0 };
+static const unichar_t str_179[] = { 0x005a, 0x0301, 0 };
+static const unichar_t str_17a[] = { 0x007a, 0x0301, 0 };
+static const unichar_t str_17b[] = { 0x005a, 0x0307, 0 };
+static const unichar_t str_17c[] = { 0x007a, 0x0307, 0 };
+static const unichar_t str_17d[] = { 0x005a, 0x030c, 0 };
+static const unichar_t str_17e[] = { 0x007a, 0x030c, 0 };
+static const unichar_t str_17f[] = { 0x0073, 0 };
+static const unichar_t str_182[] = { 0x0402, 0 };
+static const unichar_t str_189[] = { 0x00d0, 0 };
+static const unichar_t str_19e[] = { 0x03b7, 0 };
+static const unichar_t str_19f[] = { 0x0398, 0 };
+static const unichar_t str_1a0[] = { 0x004f, 0x031b, 0 };
+static const unichar_t str_1a1[] = { 0x006f, 0x031b, 0 };
+static const unichar_t str_1a9[] = { 0x03a3, 0 };
+static const unichar_t str_1af[] = { 0x0055, 0x031b, 0 };
+static const unichar_t str_1b0[] = { 0x0075, 0x031b, 0 };
+static const unichar_t str_1c0[] = { 0x007c, 0 };
+static const unichar_t str_1c1[] = { 0x007c, 0x007c, 0 };
+static const unichar_t str_1c4[] = { 0x0044, 0x017d, 0 };
+static const unichar_t str_1c5[] = { 0x0044, 0x017e, 0 };
+static const unichar_t str_1c6[] = { 0x0064, 0x017e, 0 };
+static const unichar_t str_1c7[] = { 0x004c, 0x004a, 0 };
+static const unichar_t str_1c8[] = { 0x004c, 0x006a, 0 };
+static const unichar_t str_1c9[] = { 0x006c, 0x006a, 0 };
+static const unichar_t str_1ca[] = { 0x004e, 0x004a, 0 };
+static const unichar_t str_1cb[] = { 0x004e, 0x006a, 0 };
+static const unichar_t str_1cc[] = { 0x006e, 0x006a, 0 };
+static const unichar_t str_1cd[] = { 0x0041, 0x030c, 0 };
+static const unichar_t str_1ce[] = { 0x0061, 0x030c, 0 };
+static const unichar_t str_1cf[] = { 0x0049, 0x030c, 0 };
+static const unichar_t str_1d0[] = { 0x0069, 0x030c, 0 };
+static const unichar_t str_1d1[] = { 0x004f, 0x030c, 0 };
+static const unichar_t str_1d2[] = { 0x006f, 0x030c, 0 };
+static const unichar_t str_1d3[] = { 0x0055, 0x030c, 0 };
+static const unichar_t str_1d4[] = { 0x0075, 0x030c, 0 };
+static const unichar_t str_1d5[] = { 0x00dc, 0x0304, 0 };
+static const unichar_t str_1d6[] = { 0x00fc, 0x0304, 0 };
+static const unichar_t str_1d7[] = { 0x00dc, 0x0301, 0 };
+static const unichar_t str_1d8[] = { 0x00fc, 0x0301, 0 };
+static const unichar_t str_1d9[] = { 0x00dc, 0x030c, 0 };
+static const unichar_t str_1da[] = { 0x00fc, 0x030c, 0 };
+static const unichar_t str_1db[] = { 0x00dc, 0x0300, 0 };
+static const unichar_t str_1dc[] = { 0x00fc, 0x0300, 0 };
+static const unichar_t str_1de[] = { 0x00c4, 0x0304, 0 };
+static const unichar_t str_1df[] = { 0x00e4, 0x0304, 0 };
+static const unichar_t str_1e0[] = { 0x0226, 0x0304, 0 };
+static const unichar_t str_1e1[] = { 0x0227, 0x0304, 0 };
+static const unichar_t str_1e2[] = { 0x00c6, 0x0304, 0 };
+static const unichar_t str_1e3[] = { 0x00e6, 0x0304, 0 };
+static const unichar_t str_1e6[] = { 0x0047, 0x030c, 0 };
+static const unichar_t str_1e7[] = { 0x0067, 0x030c, 0 };
+static const unichar_t str_1e8[] = { 0x004b, 0x030c, 0 };
+static const unichar_t str_1e9[] = { 0x006b, 0x030c, 0 };
+static const unichar_t str_1ea[] = { 0x004f, 0x0328, 0 };
+static const unichar_t str_1eb[] = { 0x006f, 0x0328, 0 };
+static const unichar_t str_1ec[] = { 0x01ea, 0x0304, 0 };
+static const unichar_t str_1ed[] = { 0x01eb, 0x0304, 0 };
+static const unichar_t str_1ee[] = { 0x01b7, 0x030c, 0 };
+static const unichar_t str_1ef[] = { 0x0292, 0x030c, 0 };
+static const unichar_t str_1f0[] = { 0x006a, 0x030c, 0 };
+static const unichar_t str_1f1[] = { 0x0044, 0x005a, 0 };
+static const unichar_t str_1f2[] = { 0x0044, 0x007a, 0 };
+static const unichar_t str_1f3[] = { 0x0064, 0x007a, 0 };
+static const unichar_t str_1f4[] = { 0x0047, 0x0301, 0 };
+static const unichar_t str_1f5[] = { 0x0067, 0x0301, 0 };
+static const unichar_t str_1f8[] = { 0x004e, 0x0300, 0 };
+static const unichar_t str_1f9[] = { 0x006e, 0x0300, 0 };
+static const unichar_t str_1fa[] = { 0x00c5, 0x0301, 0 };
+static const unichar_t str_1fb[] = { 0x00e5, 0x0301, 0 };
+static const unichar_t str_1fc[] = { 0x00c6, 0x0301, 0 };
+static const unichar_t str_1fd[] = { 0x00e6, 0x0301, 0 };
+static const unichar_t str_1fe[] = { 0x00d8, 0x0301, 0 };
+static const unichar_t str_1ff[] = { 0x00f8, 0x0301, 0 };
+static const unichar_t str_200[] = { 0x0041, 0x030f, 0 };
+static const unichar_t str_201[] = { 0x0061, 0x030f, 0 };
+static const unichar_t str_202[] = { 0x0041, 0x0311, 0 };
+static const unichar_t str_203[] = { 0x0061, 0x0311, 0 };
+static const unichar_t str_204[] = { 0x0045, 0x030f, 0 };
+static const unichar_t str_205[] = { 0x0065, 0x030f, 0 };
+static const unichar_t str_206[] = { 0x0045, 0x0311, 0 };
+static const unichar_t str_207[] = { 0x0065, 0x0311, 0 };
+static const unichar_t str_208[] = { 0x0049, 0x030f, 0 };
+static const unichar_t str_209[] = { 0x0069, 0x030f, 0 };
+static const unichar_t str_20a[] = { 0x0049, 0x0311, 0 };
+static const unichar_t str_20b[] = { 0x0069, 0x0311, 0 };
+static const unichar_t str_20c[] = { 0x004f, 0x030f, 0 };
+static const unichar_t str_20d[] = { 0x006f, 0x030f, 0 };
+static const unichar_t str_20e[] = { 0x004f, 0x0311, 0 };
+static const unichar_t str_20f[] = { 0x006f, 0x0311, 0 };
+static const unichar_t str_210[] = { 0x0052, 0x030f, 0 };
+static const unichar_t str_211[] = { 0x0072, 0x030f, 0 };
+static const unichar_t str_212[] = { 0x0052, 0x0311, 0 };
+static const unichar_t str_213[] = { 0x0072, 0x0311, 0 };
+static const unichar_t str_214[] = { 0x0055, 0x030f, 0 };
+static const unichar_t str_215[] = { 0x0075, 0x030f, 0 };
+static const unichar_t str_216[] = { 0x0055, 0x0311, 0 };
+static const unichar_t str_217[] = { 0x0075, 0x0311, 0 };
+static const unichar_t str_218[] = { 0x0053, 0x0326, 0 };
+static const unichar_t str_219[] = { 0x0073, 0x0326, 0 };
+static const unichar_t str_21a[] = { 0x0054, 0x0326, 0 };
+static const unichar_t str_21b[] = { 0x0074, 0x0326, 0 };
+static const unichar_t str_21e[] = { 0x0048, 0x030c, 0 };
+static const unichar_t str_21f[] = { 0x0068, 0x030c, 0 };
+static const unichar_t str_226[] = { 0x0041, 0x0307, 0 };
+static const unichar_t str_227[] = { 0x0061, 0x0307, 0 };
+static const unichar_t str_228[] = { 0x0045, 0x0327, 0 };
+static const unichar_t str_229[] = { 0x0065, 0x0327, 0 };
+static const unichar_t str_22a[] = { 0x00d6, 0x0304, 0 };
+static const unichar_t str_22b[] = { 0x00f6, 0x0304, 0 };
+static const unichar_t str_22c[] = { 0x00d5, 0x0304, 0 };
+static const unichar_t str_22d[] = { 0x00f5, 0x0304, 0 };
+static const unichar_t str_22e[] = { 0x004f, 0x0307, 0 };
+static const unichar_t str_22f[] = { 0x006f, 0x0307, 0 };
+static const unichar_t str_230[] = { 0x022e, 0x0304, 0 };
+static const unichar_t str_231[] = { 0x022f, 0x0304, 0 };
+static const unichar_t str_232[] = { 0x0059, 0x0304, 0 };
+static const unichar_t str_233[] = { 0x0079, 0x0304, 0 };
+static const unichar_t str_269[] = { 0x03b9, 0 };
+static const unichar_t str_278[] = { 0x03a6, 0 };
+static const unichar_t str_292[] = { 0x01b7, 0 };
+static const unichar_t str_299[] = { 0x0432, 0 };
+static const unichar_t str_29c[] = { 0x043d, 0 };
+static const unichar_t str_2b0[] = { 0x0068, 0 };
+static const unichar_t str_2b1[] = { 0x0266, 0 };
+static const unichar_t str_2b2[] = { 0x006a, 0 };
+static const unichar_t str_2b3[] = { 0x0072, 0 };
+static const unichar_t str_2b4[] = { 0x0279, 0 };
+static const unichar_t str_2b5[] = { 0x027b, 0 };
+static const unichar_t str_2b6[] = { 0x0281, 0 };
+static const unichar_t str_2b7[] = { 0x0077, 0 };
+static const unichar_t str_2b8[] = { 0x0079, 0 };
+static const unichar_t str_2b9[] = { 0x0027, 0 };
+static const unichar_t str_2ba[] = { 0x0022, 0 };
+static const unichar_t str_2bc[] = { 0x0027, 0 };
+static const unichar_t str_2c4[] = { 0x005e, 0 };
+static const unichar_t str_2c6[] = { 0x005e, 0 };
+static const unichar_t str_2c8[] = { 0x0027, 0 };
+static const unichar_t str_2d8[] = { 0x0020, 0x0306, 0 };
+static const unichar_t str_2d9[] = { 0x0020, 0x0307, 0 };
+static const unichar_t str_2da[] = { 0x0020, 0x030a, 0 };
+static const unichar_t str_2db[] = { 0x0020, 0x0328, 0 };
+static const unichar_t str_2dc[] = { 0x0020, 0x0303, 0 };
+static const unichar_t str_2dd[] = { 0x0020, 0x030b, 0 };
+static const unichar_t str_2e0[] = { 0x0263, 0 };
+static const unichar_t str_2e1[] = { 0x006c, 0 };
+static const unichar_t str_2e2[] = { 0x0073, 0 };
+static const unichar_t str_2e3[] = { 0x0078, 0 };
+static const unichar_t str_2e4[] = { 0x0295, 0 };
+static const unichar_t str_301[] = { 0x00b4, 0 };
+static const unichar_t str_302[] = { 0x005e, 0 };
+static const unichar_t str_303[] = { 0x007e, 0 };
+static const unichar_t str_308[] = { 0x00a8, 0 };
+static const unichar_t str_30a[] = { 0x00b0, 0 };
+static const unichar_t str_30b[] = { 0x0022, 0 };
+static const unichar_t str_30e[] = { 0x0022, 0 };
+static const unichar_t str_327[] = { 0x00b8, 0 };
+static const unichar_t str_340[] = { 0x0300, 0 };
+static const unichar_t str_341[] = { 0x0301, 0 };
+static const unichar_t str_343[] = { 0x0313, 0 };
+static const unichar_t str_344[] = { 0x0308, 0x0301, 0 };
+static const unichar_t str_374[] = { 0x02b9, 0 };
+static const unichar_t str_375[] = { 0x02cf, 0 };
+static const unichar_t str_37a[] = { 0x0020, 0x0345, 0 };
+static const unichar_t str_37e[] = { 0x003b, 0 };
+static const unichar_t str_384[] = { 0x0020, 0x0301, 0 };
+static const unichar_t str_385[] = { 0x00a8, 0x0301, 0 };
+static const unichar_t str_386[] = { 0x0391, 0x0301, 0 };
+static const unichar_t str_387[] = { 0x00b7, 0 };
+static const unichar_t str_388[] = { 0x0395, 0x0301, 0 };
+static const unichar_t str_389[] = { 0x0397, 0x0301, 0 };
+static const unichar_t str_38a[] = { 0x0399, 0x0301, 0 };
+static const unichar_t str_38c[] = { 0x039f, 0x0301, 0 };
+static const unichar_t str_38e[] = { 0x03a5, 0x0301, 0 };
+static const unichar_t str_38f[] = { 0x03a9, 0x0301, 0 };
+static const unichar_t str_390[] = { 0x03ca, 0x0301, 0 };
+static const unichar_t str_391[] = { 0x0041, 0 };
+static const unichar_t str_392[] = { 0x0042, 0 };
+static const unichar_t str_393[] = { 0x0413, 0 };
+static const unichar_t str_395[] = { 0x0045, 0 };
+static const unichar_t str_396[] = { 0x005a, 0 };
+static const unichar_t str_397[] = { 0x0048, 0 };
+static const unichar_t str_399[] = { 0x0049, 0 };
+static const unichar_t str_39a[] = { 0x004b, 0 };
+static const unichar_t str_39c[] = { 0x004d, 0 };
+static const unichar_t str_39d[] = { 0x004e, 0 };
+static const unichar_t str_39f[] = { 0x004f, 0 };
+static const unichar_t str_3a1[] = { 0x0050, 0 };
+static const unichar_t str_3a4[] = { 0x0054, 0 };
+static const unichar_t str_3a5[] = { 0x0059, 0 };
+static const unichar_t str_3a7[] = { 0x0058, 0 };
+static const unichar_t str_3aa[] = { 0x0399, 0x0308, 0 };
+static const unichar_t str_3ab[] = { 0x03a5, 0x0308, 0 };
+static const unichar_t str_3ac[] = { 0x03b1, 0x0301, 0 };
+static const unichar_t str_3ad[] = { 0x03b5, 0x0301, 0 };
+static const unichar_t str_3ae[] = { 0x03b7, 0x0301, 0 };
+static const unichar_t str_3af[] = { 0x03b9, 0x0301, 0 };
+static const unichar_t str_3b0[] = { 0x03cb, 0x0301, 0 };
+static const unichar_t str_3ba[] = { 0x0138, 0 };
+static const unichar_t str_3bf[] = { 0x006f, 0 };
+static const unichar_t str_3c1[] = { 0x0070, 0 };
+static const unichar_t str_3c7[] = { 0x0078, 0 };
+static const unichar_t str_3ca[] = { 0x03b9, 0x0308, 0 };
+static const unichar_t str_3cb[] = { 0x03c5, 0x0308, 0 };
+static const unichar_t str_3cc[] = { 0x03bf, 0x0301, 0 };
+static const unichar_t str_3cd[] = { 0x03c5, 0x0301, 0 };
+static const unichar_t str_3ce[] = { 0x03c9, 0x0301, 0 };
+static const unichar_t str_3d0[] = { 0x03b2, 0 };
+static const unichar_t str_3d1[] = { 0x03b8, 0 };
+static const unichar_t str_3d2[] = { 0x03a5, 0 };
+static const unichar_t str_3d3[] = { 0x03d2, 0x0301, 0 };
+static const unichar_t str_3d4[] = { 0x03d2, 0x0308, 0 };
+static const unichar_t str_3d5[] = { 0x03c6, 0 };
+static const unichar_t str_3d6[] = { 0x03c0, 0 };
+static const unichar_t str_3f0[] = { 0x03ba, 0 };
+static const unichar_t str_3f1[] = { 0x03c1, 0 };
+static const unichar_t str_3f2[] = { 0x03c2, 0 };
+static const unichar_t str_3f4[] = { 0x0398, 0 };
+static const unichar_t str_3f5[] = { 0x03b5, 0 };
+static const unichar_t str_3f9[] = { 0x03a3, 0 };
+static const unichar_t str_400[] = { 0x0415, 0x0300, 0 };
+static const unichar_t str_401[] = { 0x0415, 0x0308, 0 };
+static const unichar_t str_403[] = { 0x0413, 0x0301, 0 };
+static const unichar_t str_405[] = { 0x0053, 0 };
+static const unichar_t str_406[] = { 0x0049, 0 };
+static const unichar_t str_407[] = { 0x0406, 0x0308, 0 };
+static const unichar_t str_408[] = { 0x004a, 0 };
+static const unichar_t str_40c[] = { 0x041a, 0x0301, 0 };
+static const unichar_t str_40d[] = { 0x0418, 0x0300, 0 };
+static const unichar_t str_40e[] = { 0x0423, 0x0306, 0 };
+static const unichar_t str_410[] = { 0x0041, 0 };
+static const unichar_t str_412[] = { 0x0042, 0 };
+static const unichar_t str_413[] = { 0x0393, 0 };
+static const unichar_t str_415[] = { 0x0045, 0 };
+static const unichar_t str_419[] = { 0x0418, 0x0306, 0 };
+static const unichar_t str_41a[] = { 0x004b, 0 };
+static const unichar_t str_41c[] = { 0x004d, 0 };
+static const unichar_t str_41d[] = { 0x0048, 0 };
+static const unichar_t str_41e[] = { 0x004f, 0 };
+static const unichar_t str_41f[] = { 0x03a0, 0 };
+static const unichar_t str_420[] = { 0x0050, 0 };
+static const unichar_t str_421[] = { 0x0043, 0 };
+static const unichar_t str_422[] = { 0x0054, 0 };
+static const unichar_t str_424[] = { 0x03a6, 0 };
+static const unichar_t str_425[] = { 0x0058, 0 };
+static const unichar_t str_430[] = { 0x0061, 0 };
+static const unichar_t str_435[] = { 0x0065, 0 };
+static const unichar_t str_439[] = { 0x0438, 0x0306, 0 };
+static const unichar_t str_43a[] = { 0x03ba, 0 };
+static const unichar_t str_43e[] = { 0x006f, 0 };
+static const unichar_t str_43f[] = { 0x03c0, 0 };
+static const unichar_t str_440[] = { 0x0070, 0 };
+static const unichar_t str_441[] = { 0x0063, 0 };
+static const unichar_t str_443[] = { 0x0079, 0 };
+static const unichar_t str_445[] = { 0x0078, 0 };
+static const unichar_t str_450[] = { 0x0435, 0x0300, 0 };
+static const unichar_t str_451[] = { 0x0435, 0x0308, 0 };
+static const unichar_t str_453[] = { 0x0433, 0x0301, 0 };
+static const unichar_t str_455[] = { 0x0073, 0 };
+static const unichar_t str_456[] = { 0x0069, 0 };
+static const unichar_t str_457[] = { 0x0456, 0x0308, 0 };
+static const unichar_t str_458[] = { 0x006a, 0 };
+static const unichar_t str_45c[] = { 0x043a, 0x0301, 0 };
+static const unichar_t str_45d[] = { 0x0438, 0x0300, 0 };
+static const unichar_t str_45e[] = { 0x0443, 0x0306, 0 };
+static const unichar_t str_470[] = { 0x03a8, 0 };
+static const unichar_t str_471[] = { 0x03c8, 0 };
+static const unichar_t str_476[] = { 0x0474, 0x030f, 0 };
+static const unichar_t str_477[] = { 0x0475, 0x030f, 0 };
+static const unichar_t str_4ae[] = { 0x0059, 0 };
+static const unichar_t str_4c0[] = { 0x0049, 0 };
+static const unichar_t str_4c1[] = { 0x0416, 0x0306, 0 };
+static const unichar_t str_4c2[] = { 0x0436, 0x0306, 0 };
+static const unichar_t str_4d0[] = { 0x0410, 0x0306, 0 };
+static const unichar_t str_4d1[] = { 0x0430, 0x0306, 0 };
+static const unichar_t str_4d2[] = { 0x0410, 0x0308, 0 };
+static const unichar_t str_4d3[] = { 0x0430, 0x0308, 0 };
+static const unichar_t str_4d4[] = { 0x00c6, 0 };
+static const unichar_t str_4d5[] = { 0x00e6, 0 };
+static const unichar_t str_4d6[] = { 0x0415, 0x0306, 0 };
+static const unichar_t str_4d7[] = { 0x0435, 0x0306, 0 };
+static const unichar_t str_4da[] = { 0x04d8, 0x0308, 0 };
+static const unichar_t str_4db[] = { 0x04d9, 0x0308, 0 };
+static const unichar_t str_4dc[] = { 0x0416, 0x0308, 0 };
+static const unichar_t str_4dd[] = { 0x0436, 0x0308, 0 };
+static const unichar_t str_4de[] = { 0x0417, 0x0308, 0 };
+static const unichar_t str_4df[] = { 0x0437, 0x0308, 0 };
+static const unichar_t str_4e0[] = { 0x01b7, 0 };
+static const unichar_t str_4e1[] = { 0x0292, 0 };
+static const unichar_t str_4e2[] = { 0x0418, 0x0304, 0 };
+static const unichar_t str_4e3[] = { 0x0438, 0x0304, 0 };
+static const unichar_t str_4e4[] = { 0x0418, 0x0308, 0 };
+static const unichar_t str_4e5[] = { 0x0438, 0x0308, 0 };
+static const unichar_t str_4e6[] = { 0x041e, 0x0308, 0 };
+static const unichar_t str_4e7[] = { 0x043e, 0x0308, 0 };
+static const unichar_t str_4e8[] = { 0x0398, 0 };
+static const unichar_t str_4e9[] = { 0x03b8, 0 };
+static const unichar_t str_4ea[] = { 0x04e8, 0x0308, 0 };
+static const unichar_t str_4eb[] = { 0x04e9, 0x0308, 0 };
+static const unichar_t str_4ec[] = { 0x042d, 0x0308, 0 };
+static const unichar_t str_4ed[] = { 0x044d, 0x0308, 0 };
+static const unichar_t str_4ee[] = { 0x0423, 0x0304, 0 };
+static const unichar_t str_4ef[] = { 0x0443, 0x0304, 0 };
+static const unichar_t str_4f0[] = { 0x0423, 0x0308, 0 };
+static const unichar_t str_4f1[] = { 0x0443, 0x0308, 0 };
+static const unichar_t str_4f2[] = { 0x0423, 0x030b, 0 };
+static const unichar_t str_4f3[] = { 0x0443, 0x030b, 0 };
+static const unichar_t str_4f4[] = { 0x0427, 0x0308, 0 };
+static const unichar_t str_4f5[] = { 0x0447, 0x0308, 0 };
+static const unichar_t str_4f8[] = { 0x042b, 0x0308, 0 };
+static const unichar_t str_4f9[] = { 0x044b, 0x0308, 0 };
+static const unichar_t str_54f[] = { 0x0053, 0 };
+static const unichar_t str_555[] = { 0x004f, 0 };
+static const unichar_t str_570[] = { 0x0068, 0 };
+static const unichar_t str_578[] = { 0x006e, 0 };
+static const unichar_t str_57a[] = { 0x0270, 0 };
+static const unichar_t str_57d[] = { 0x0075, 0 };
+static const unichar_t str_581[] = { 0x0261, 0 };
+static const unichar_t str_582[] = { 0x0269, 0 };
+static const unichar_t str_584[] = { 0x0066, 0 };
+static const unichar_t str_585[] = { 0x006f, 0 };
+static const unichar_t str_587[] = { 0x0565, 0x0582, 0 };
+static const unichar_t str_589[] = { 0x003a, 0 };
+static const unichar_t str_5f0[] = { 0x05d5, 0x05d5, 0 };
+static const unichar_t str_5f1[] = { 0x05d5, 0x05d9, 0 };
+static const unichar_t str_5f2[] = { 0x05d9, 0x05d9, 0 };
+static const unichar_t str_60c[] = { 0x2018, 0 };
+static const unichar_t str_621[] = { 0xfe80, 0 };
+static const unichar_t str_622[] = { 0x0627, 0x0653, 0 };
+static const unichar_t str_623[] = { 0x0627, 0x0654, 0 };
+static const unichar_t str_624[] = { 0x0648, 0x0654, 0 };
+static const unichar_t str_625[] = { 0x0627, 0x0655, 0 };
+static const unichar_t str_626[] = { 0x064a, 0x0654, 0 };
+static const unichar_t str_627[] = { 0xfe8d, 0 };
+static const unichar_t str_628[] = { 0xfe8f, 0 };
+static const unichar_t str_629[] = { 0xfe93, 0 };
+static const unichar_t str_62a[] = { 0xfe95, 0 };
+static const unichar_t str_62b[] = { 0xfe99, 0 };
+static const unichar_t str_62c[] = { 0xfe9d, 0 };
+static const unichar_t str_62d[] = { 0xfea1, 0 };
+static const unichar_t str_62e[] = { 0xfea5, 0 };
+static const unichar_t str_62f[] = { 0xfea9, 0 };
+static const unichar_t str_630[] = { 0xfeab, 0 };
+static const unichar_t str_631[] = { 0xfead, 0 };
+static const unichar_t str_632[] = { 0xfeaf, 0 };
+static const unichar_t str_633[] = { 0xfeb1, 0 };
+static const unichar_t str_634[] = { 0xfeb5, 0 };
+static const unichar_t str_635[] = { 0xfeb9, 0 };
+static const unichar_t str_636[] = { 0xfebd, 0 };
+static const unichar_t str_637[] = { 0xfec1, 0 };
+static const unichar_t str_638[] = { 0xfec5, 0 };
+static const unichar_t str_639[] = { 0xfec9, 0 };
+static const unichar_t str_63a[] = { 0xfecd, 0 };
+static const unichar_t str_641[] = { 0xfed1, 0 };
+static const unichar_t str_642[] = { 0xfed5, 0 };
+static const unichar_t str_643[] = { 0xfed9, 0 };
+static const unichar_t str_644[] = { 0xfedd, 0 };
+static const unichar_t str_645[] = { 0xfee1, 0 };
+static const unichar_t str_646[] = { 0xfee5, 0 };
+static const unichar_t str_647[] = { 0xfee9, 0 };
+static const unichar_t str_648[] = { 0xfeed, 0 };
+static const unichar_t str_649[] = { 0xfeef, 0 };
+static const unichar_t str_64a[] = { 0xfef1, 0 };
+static const unichar_t str_66a[] = { 0x0025, 0 };
+static const unichar_t str_66c[] = { 0x002c, 0 };
+static const unichar_t str_66d[] = { 0x22c6, 0 };
+static const unichar_t str_671[] = { 0xfb50, 0 };
+static const unichar_t str_675[] = { 0x0627, 0x0674, 0 };
+static const unichar_t str_676[] = { 0x0648, 0x0674, 0 };
+static const unichar_t str_677[] = { 0x06c7, 0x0674, 0 };
+static const unichar_t str_678[] = { 0x064a, 0x0674, 0 };
+static const unichar_t str_679[] = { 0xfb66, 0 };
+static const unichar_t str_67a[] = { 0xfb5e, 0 };
+static const unichar_t str_67b[] = { 0xfb52, 0 };
+static const unichar_t str_67e[] = { 0xfb56, 0 };
+static const unichar_t str_67f[] = { 0xfb62, 0 };
+static const unichar_t str_680[] = { 0xfb5a, 0 };
+static const unichar_t str_683[] = { 0xfb76, 0 };
+static const unichar_t str_684[] = { 0xfb72, 0 };
+static const unichar_t str_686[] = { 0xfb7a, 0 };
+static const unichar_t str_687[] = { 0xfb7e, 0 };
+static const unichar_t str_688[] = { 0xfb88, 0 };
+static const unichar_t str_68c[] = { 0xfb84, 0 };
+static const unichar_t str_68d[] = { 0xfb82, 0 };
+static const unichar_t str_68e[] = { 0xfb86, 0 };
+static const unichar_t str_691[] = { 0xfb8c, 0 };
+static const unichar_t str_698[] = { 0xfb8a, 0 };
+static const unichar_t str_6a4[] = { 0xfb6a, 0 };
+static const unichar_t str_6a6[] = { 0xfb6e, 0 };
+static const unichar_t str_6a9[] = { 0xfb8e, 0 };
+static const unichar_t str_6ad[] = { 0xfbd3, 0 };
+static const unichar_t str_6af[] = { 0xfb92, 0 };
+static const unichar_t str_6b1[] = { 0xfb9a, 0 };
+static const unichar_t str_6b3[] = { 0xfb96, 0 };
+static const unichar_t str_6ba[] = { 0xfb9e, 0 };
+static const unichar_t str_6bb[] = { 0xfba0, 0 };
+static const unichar_t str_6be[] = { 0xfbaa, 0 };
+static const unichar_t str_6c0[] = { 0x06d5, 0x0654, 0 };
+static const unichar_t str_6c1[] = { 0xfba6, 0 };
+static const unichar_t str_6c2[] = { 0x06c1, 0x0654, 0 };
+static const unichar_t str_6c5[] = { 0xfbe0, 0 };
+static const unichar_t str_6c6[] = { 0xfbd9, 0 };
+static const unichar_t str_6c7[] = { 0xfbd7, 0 };
+static const unichar_t str_6c8[] = { 0xfbdb, 0 };
+static const unichar_t str_6c9[] = { 0xfbe2, 0 };
+static const unichar_t str_6cb[] = { 0xfbde, 0 };
+static const unichar_t str_6cc[] = { 0xfbfc, 0 };
+static const unichar_t str_6d0[] = { 0xfbe4, 0 };
+static const unichar_t str_6d2[] = { 0xfbae, 0 };
+static const unichar_t str_6d3[] = { 0x06d2, 0x0654, 0 };
+static const unichar_t str_6d4[] = { 0x00b7, 0 };
+static const unichar_t str_929[] = { 0x0928, 0x093c, 0 };
+static const unichar_t str_931[] = { 0x0930, 0x093c, 0 };
+static const unichar_t str_934[] = { 0x0933, 0x093c, 0 };
+static const unichar_t str_958[] = { 0x0915, 0x093c, 0 };
+static const unichar_t str_959[] = { 0x0916, 0x093c, 0 };
+static const unichar_t str_95a[] = { 0x0917, 0x093c, 0 };
+static const unichar_t str_95b[] = { 0x091c, 0x093c, 0 };
+static const unichar_t str_95c[] = { 0x0921, 0x093c, 0 };
+static const unichar_t str_95d[] = { 0x0922, 0x093c, 0 };
+static const unichar_t str_95e[] = { 0x092b, 0x093c, 0 };
+static const unichar_t str_95f[] = { 0x092f, 0x093c, 0 };
+static const unichar_t str_9cb[] = { 0x09c7, 0x09be, 0 };
+static const unichar_t str_9cc[] = { 0x09c7, 0x09d7, 0 };
+static const unichar_t str_9dc[] = { 0x09a1, 0x09bc, 0 };
+static const unichar_t str_9dd[] = { 0x09a2, 0x09bc, 0 };
+static const unichar_t str_9df[] = { 0x09af, 0x09bc, 0 };
+static const unichar_t str_a33[] = { 0x0a32, 0x0a3c, 0 };
+static const unichar_t str_a36[] = { 0x0a38, 0x0a3c, 0 };
+static const unichar_t str_a59[] = { 0x0a16, 0x0a3c, 0 };
+static const unichar_t str_a5a[] = { 0x0a17, 0x0a3c, 0 };
+static const unichar_t str_a5b[] = { 0x0a1c, 0x0a3c, 0 };
+static const unichar_t str_a5e[] = { 0x0a2b, 0x0a3c, 0 };
+static const unichar_t str_b48[] = { 0x0b47, 0x0b56, 0 };
+static const unichar_t str_b4b[] = { 0x0b47, 0x0b3e, 0 };
+static const unichar_t str_b4c[] = { 0x0b47, 0x0b57, 0 };
+static const unichar_t str_b5c[] = { 0x0b21, 0x0b3c, 0 };
+static const unichar_t str_b5d[] = { 0x0b22, 0x0b3c, 0 };
+static const unichar_t str_b94[] = { 0x0b92, 0x0bd7, 0 };
+static const unichar_t str_bca[] = { 0x0bc6, 0x0bbe, 0 };
+static const unichar_t str_bcb[] = { 0x0bc7, 0x0bbe, 0 };
+static const unichar_t str_bcc[] = { 0x0bc6, 0x0bd7, 0 };
+static const unichar_t str_c48[] = { 0x0c46, 0x0c56, 0 };
+static const unichar_t str_cc0[] = { 0x0cbf, 0x0cd5, 0 };
+static const unichar_t str_cc7[] = { 0x0cc6, 0x0cd5, 0 };
+static const unichar_t str_cc8[] = { 0x0cc6, 0x0cd6, 0 };
+static const unichar_t str_cca[] = { 0x0cc6, 0x0cc2, 0 };
+static const unichar_t str_ccb[] = { 0x0cca, 0x0cd5, 0 };
+static const unichar_t str_d4a[] = { 0x0d46, 0x0d3e, 0 };
+static const unichar_t str_d4b[] = { 0x0d47, 0x0d3e, 0 };
+static const unichar_t str_d4c[] = { 0x0d46, 0x0d57, 0 };
+static const unichar_t str_dda[] = { 0x0dd9, 0x0dca, 0 };
+static const unichar_t str_ddc[] = { 0x0dd9, 0x0dcf, 0 };
+static const unichar_t str_ddd[] = { 0x0ddc, 0x0dca, 0 };
+static const unichar_t str_dde[] = { 0x0dd9, 0x0ddf, 0 };
+static const unichar_t str_e33[] = { 0x0e4d, 0x0e32, 0 };
+static const unichar_t str_eb3[] = { 0x0ecd, 0x0eb2, 0 };
+static const unichar_t str_edc[] = { 0x0eab, 0x0e99, 0 };
+static const unichar_t str_edd[] = { 0x0eab, 0x0ea1, 0 };
+static const unichar_t str_f0c[] = { 0x0f0b, 0 };
+static const unichar_t str_f43[] = { 0x0f42, 0x0fb7, 0 };
+static const unichar_t str_f4d[] = { 0x0f4c, 0x0fb7, 0 };
+static const unichar_t str_f52[] = { 0x0f51, 0x0fb7, 0 };
+static const unichar_t str_f57[] = { 0x0f56, 0x0fb7, 0 };
+static const unichar_t str_f5c[] = { 0x0f5b, 0x0fb7, 0 };
+static const unichar_t str_f69[] = { 0x0f40, 0x0fb5, 0 };
+static const unichar_t str_f73[] = { 0x0f71, 0x0f72, 0 };
+static const unichar_t str_f75[] = { 0x0f71, 0x0f74, 0 };
+static const unichar_t str_f76[] = { 0x0fb2, 0x0f80, 0 };
+static const unichar_t str_f77[] = { 0x0fb2, 0x0f81, 0 };
+static const unichar_t str_f78[] = { 0x0fb3, 0x0f80, 0 };
+static const unichar_t str_f79[] = { 0x0fb3, 0x0f81, 0 };
+static const unichar_t str_f81[] = { 0x0f71, 0x0f80, 0 };
+static const unichar_t str_f93[] = { 0x0f92, 0x0fb7, 0 };
+static const unichar_t str_f9d[] = { 0x0f9c, 0x0fb7, 0 };
+static const unichar_t str_fa2[] = { 0x0fa1, 0x0fb7, 0 };
+static const unichar_t str_fa7[] = { 0x0fa6, 0x0fb7, 0 };
+static const unichar_t str_fac[] = { 0x0fab, 0x0fb7, 0 };
+static const unichar_t str_fb9[] = { 0x0f90, 0x0fb5, 0 };
+static const unichar_t str_1026[] = { 0x1025, 0x102e, 0 };
+static const unichar_t str_10fc[] = { 0x10dc, 0 };
+static const unichar_t str_1101[] = { 0x1100, 0x1100, 0 };
+static const unichar_t str_1104[] = { 0x1103, 0x1103, 0 };
+static const unichar_t str_1108[] = { 0x1107, 0x1107, 0 };
+static const unichar_t str_110a[] = { 0x1109, 0x1109, 0 };
+static const unichar_t str_110d[] = { 0x110c, 0x110c, 0 };
+static const unichar_t str_1113[] = { 0x1102, 0x1100, 0 };
+static const unichar_t str_1114[] = { 0x1102, 0x1102, 0 };
+static const unichar_t str_1115[] = { 0x1102, 0x1103, 0 };
+static const unichar_t str_1116[] = { 0x1102, 0x1107, 0 };
+static const unichar_t str_1117[] = { 0x1103, 0x1100, 0 };
+static const unichar_t str_1118[] = { 0x1105, 0x1102, 0 };
+static const unichar_t str_1119[] = { 0x1105, 0x1105, 0 };
+static const unichar_t str_111a[] = { 0x1105, 0x1112, 0 };
+static const unichar_t str_111b[] = { 0x1105, 0x110b, 0 };
+static const unichar_t str_111c[] = { 0x1106, 0x1107, 0 };
+static const unichar_t str_111d[] = { 0x1106, 0x110b, 0 };
+static const unichar_t str_111e[] = { 0x1107, 0x1100, 0 };
+static const unichar_t str_111f[] = { 0x1107, 0x1102, 0 };
+static const unichar_t str_1120[] = { 0x1107, 0x1103, 0 };
+static const unichar_t str_1121[] = { 0x1107, 0x1109, 0 };
+static const unichar_t str_1122[] = { 0x1107, 0x1109, 0x1100, 0 };
+static const unichar_t str_1123[] = { 0x1107, 0x1109, 0x1103, 0 };
+static const unichar_t str_1124[] = { 0x1107, 0x1109, 0x1107, 0 };
+static const unichar_t str_1125[] = { 0x1107, 0x1109, 0x1109, 0 };
+static const unichar_t str_1126[] = { 0x1107, 0x1109, 0x110c, 0 };
+static const unichar_t str_1127[] = { 0x1107, 0x110c, 0 };
+static const unichar_t str_1128[] = { 0x1107, 0x110e, 0 };
+static const unichar_t str_1129[] = { 0x1107, 0x1110, 0 };
+static const unichar_t str_112a[] = { 0x1107, 0x1111, 0 };
+static const unichar_t str_112b[] = { 0x1107, 0x110b, 0 };
+static const unichar_t str_112c[] = { 0x1107, 0x1107, 0x110b, 0 };
+static const unichar_t str_112d[] = { 0x1109, 0x1100, 0 };
+static const unichar_t str_112e[] = { 0x1109, 0x1102, 0 };
+static const unichar_t str_112f[] = { 0x1109, 0x1103, 0 };
+static const unichar_t str_1130[] = { 0x1109, 0x1105, 0 };
+static const unichar_t str_1131[] = { 0x1109, 0x1106, 0 };
+static const unichar_t str_1132[] = { 0x1109, 0x1107, 0 };
+static const unichar_t str_1133[] = { 0x1109, 0x1107, 0x1100, 0 };
+static const unichar_t str_1134[] = { 0x1109, 0x1109, 0x1109, 0 };
+static const unichar_t str_1135[] = { 0x1109, 0x110b, 0 };
+static const unichar_t str_1136[] = { 0x1109, 0x110c, 0 };
+static const unichar_t str_1137[] = { 0x1109, 0x110e, 0 };
+static const unichar_t str_1138[] = { 0x1109, 0x110f, 0 };
+static const unichar_t str_1139[] = { 0x1109, 0x1110, 0 };
+static const unichar_t str_113a[] = { 0x1109, 0x1111, 0 };
+static const unichar_t str_113b[] = { 0x1109, 0x1112, 0 };
+static const unichar_t str_113d[] = { 0x113c, 0x113c, 0 };
+static const unichar_t str_113f[] = { 0x113e, 0x113e, 0 };
+static const unichar_t str_1141[] = { 0x110b, 0x1100, 0 };
+static const unichar_t str_1142[] = { 0x110b, 0x1103, 0 };
+static const unichar_t str_1143[] = { 0x110b, 0x1106, 0 };
+static const unichar_t str_1144[] = { 0x110b, 0x1107, 0 };
+static const unichar_t str_1145[] = { 0x110b, 0x1109, 0 };
+static const unichar_t str_1146[] = { 0x110b, 0x1140, 0 };
+static const unichar_t str_1147[] = { 0x110b, 0x110b, 0 };
+static const unichar_t str_1148[] = { 0x110b, 0x110c, 0 };
+static const unichar_t str_1149[] = { 0x110b, 0x110e, 0 };
+static const unichar_t str_114a[] = { 0x110b, 0x1110, 0 };
+static const unichar_t str_114b[] = { 0x110b, 0x1111, 0 };
+static const unichar_t str_114d[] = { 0x110c, 0x110b, 0 };
+static const unichar_t str_114f[] = { 0x114e, 0x114e, 0 };
+static const unichar_t str_1151[] = { 0x1150, 0x1150, 0 };
+static const unichar_t str_1152[] = { 0x110e, 0x110f, 0 };
+static const unichar_t str_1153[] = { 0x110e, 0x1112, 0 };
+static const unichar_t str_1156[] = { 0x1111, 0x1107, 0 };
+static const unichar_t str_1157[] = { 0x1111, 0x110b, 0 };
+static const unichar_t str_1158[] = { 0x1112, 0x1112, 0 };
+static const unichar_t str_1162[] = { 0x1161, 0x1175, 0 };
+static const unichar_t str_1164[] = { 0x1163, 0x1175, 0 };
+static const unichar_t str_1166[] = { 0x1165, 0x1175, 0 };
+static const unichar_t str_1168[] = { 0x1167, 0x1175, 0 };
+static const unichar_t str_116a[] = { 0x1169, 0x1161, 0 };
+static const unichar_t str_116b[] = { 0x1169, 0x1162, 0 };
+static const unichar_t str_116c[] = { 0x1169, 0x1175, 0 };
+static const unichar_t str_116f[] = { 0x116e, 0x1165, 0 };
+static const unichar_t str_1170[] = { 0x116e, 0x1166, 0 };
+static const unichar_t str_1171[] = { 0x116e, 0x1175, 0 };
+static const unichar_t str_1174[] = { 0x1173, 0x1175, 0 };
+static const unichar_t str_1176[] = { 0x1161, 0x1169, 0 };
+static const unichar_t str_1177[] = { 0x1161, 0x116e, 0 };
+static const unichar_t str_1178[] = { 0x1163, 0x1169, 0 };
+static const unichar_t str_1179[] = { 0x1163, 0x116d, 0 };
+static const unichar_t str_117a[] = { 0x1165, 0x1169, 0 };
+static const unichar_t str_117b[] = { 0x1165, 0x116e, 0 };
+static const unichar_t str_117c[] = { 0x1165, 0x1173, 0 };
+static const unichar_t str_117d[] = { 0x1167, 0x1169, 0 };
+static const unichar_t str_117e[] = { 0x1167, 0x116e, 0 };
+static const unichar_t str_117f[] = { 0x1169, 0x1165, 0 };
+static const unichar_t str_1180[] = { 0x1169, 0x1166, 0 };
+static const unichar_t str_1181[] = { 0x1169, 0x1168, 0 };
+static const unichar_t str_1182[] = { 0x1169, 0x1169, 0 };
+static const unichar_t str_1183[] = { 0x1169, 0x116e, 0 };
+static const unichar_t str_1184[] = { 0x116d, 0x1163, 0 };
+static const unichar_t str_1185[] = { 0x116d, 0x1164, 0 };
+static const unichar_t str_1186[] = { 0x116d, 0x1167, 0 };
+static const unichar_t str_1187[] = { 0x116d, 0x1169, 0 };
+static const unichar_t str_1188[] = { 0x116d, 0x1175, 0 };
+static const unichar_t str_1189[] = { 0x116e, 0x1161, 0 };
+static const unichar_t str_118a[] = { 0x116e, 0x1162, 0 };
+static const unichar_t str_118b[] = { 0x116e, 0x1165, 0x1173, 0 };
+static const unichar_t str_118c[] = { 0x116e, 0x1168, 0 };
+static const unichar_t str_118d[] = { 0x116e, 0x116e, 0 };
+static const unichar_t str_118e[] = { 0x1172, 0x1161, 0 };
+static const unichar_t str_118f[] = { 0x1172, 0x1165, 0 };
+static const unichar_t str_1190[] = { 0x1172, 0x1166, 0 };
+static const unichar_t str_1191[] = { 0x1172, 0x1167, 0 };
+static const unichar_t str_1192[] = { 0x1172, 0x1168, 0 };
+static const unichar_t str_1193[] = { 0x1172, 0x116e, 0 };
+static const unichar_t str_1194[] = { 0x1172, 0x1175, 0 };
+static const unichar_t str_1195[] = { 0x1173, 0x116e, 0 };
+static const unichar_t str_1196[] = { 0x1173, 0x1173, 0 };
+static const unichar_t str_1197[] = { 0x1174, 0x116e, 0 };
+static const unichar_t str_1198[] = { 0x1175, 0x1161, 0 };
+static const unichar_t str_1199[] = { 0x1175, 0x1163, 0 };
+static const unichar_t str_119a[] = { 0x1175, 0x1169, 0 };
+static const unichar_t str_119b[] = { 0x1175, 0x116e, 0 };
+static const unichar_t str_119c[] = { 0x1175, 0x1173, 0 };
+static const unichar_t str_119d[] = { 0x1175, 0x119e, 0 };
+static const unichar_t str_119f[] = { 0x119e, 0x1165, 0 };
+static const unichar_t str_11a0[] = { 0x119e, 0x116e, 0 };
+static const unichar_t str_11a1[] = { 0x119e, 0x1175, 0 };
+static const unichar_t str_11a2[] = { 0x119e, 0x119e, 0 };
+static const unichar_t str_11a8[] = { 0x1100, 0 };
+static const unichar_t str_11a9[] = { 0x11a8, 0x11a8, 0 };
+static const unichar_t str_11aa[] = { 0x11a8, 0x11ba, 0 };
+static const unichar_t str_11ab[] = { 0x1102, 0 };
+static const unichar_t str_11ac[] = { 0x11ab, 0x11bd, 0 };
+static const unichar_t str_11ad[] = { 0x11ab, 0x11c2, 0 };
+static const unichar_t str_11ae[] = { 0x1103, 0 };
+static const unichar_t str_11af[] = { 0x1105, 0 };
+static const unichar_t str_11b0[] = { 0x11af, 0x11a8, 0 };
+static const unichar_t str_11b1[] = { 0x11af, 0x11b7, 0 };
+static const unichar_t str_11b2[] = { 0x11af, 0x11b8, 0 };
+static const unichar_t str_11b3[] = { 0x11af, 0x11ba, 0 };
+static const unichar_t str_11b4[] = { 0x11af, 0x11c0, 0 };
+static const unichar_t str_11b5[] = { 0x11af, 0x11c1, 0 };
+static const unichar_t str_11b6[] = { 0x11af, 0x11c2, 0 };
+static const unichar_t str_11b7[] = { 0x1106, 0 };
+static const unichar_t str_11b8[] = { 0x1107, 0 };
+static const unichar_t str_11b9[] = { 0x11b8, 0x11ba, 0 };
+static const unichar_t str_11ba[] = { 0x1109, 0 };
+static const unichar_t str_11bb[] = { 0x11ba, 0x11ba, 0 };
+static const unichar_t str_11bc[] = { 0x110b, 0 };
+static const unichar_t str_11bd[] = { 0x110c, 0 };
+static const unichar_t str_11be[] = { 0x110e, 0 };
+static const unichar_t str_11bf[] = { 0x110f, 0 };
+static const unichar_t str_11c0[] = { 0x1110, 0 };
+static const unichar_t str_11c1[] = { 0x1111, 0 };
+static const unichar_t str_11c2[] = { 0x1112, 0 };
+static const unichar_t str_11c3[] = { 0x11a8, 0x11af, 0 };
+static const unichar_t str_11c4[] = { 0x11a8, 0x11ba, 0x11a8, 0 };
+static const unichar_t str_11c5[] = { 0x11ab, 0x11a8, 0 };
+static const unichar_t str_11c6[] = { 0x11ab, 0x11ae, 0 };
+static const unichar_t str_11c7[] = { 0x11ab, 0x11ba, 0 };
+static const unichar_t str_11c8[] = { 0x11ab, 0x11eb, 0 };
+static const unichar_t str_11c9[] = { 0x11ab, 0x11c0, 0 };
+static const unichar_t str_11ca[] = { 0x11ae, 0x11a8, 0 };
+static const unichar_t str_11cb[] = { 0x11ae, 0x11af, 0 };
+static const unichar_t str_11cc[] = { 0x11af, 0x11a8, 0x11ba, 0 };
+static const unichar_t str_11cd[] = { 0x11af, 0x11ab, 0 };
+static const unichar_t str_11ce[] = { 0x11af, 0x11ae, 0 };
+static const unichar_t str_11cf[] = { 0x11af, 0x11ae, 0x11c2, 0 };
+static const unichar_t str_11d0[] = { 0x11af, 0x11af, 0 };
+static const unichar_t str_11d1[] = { 0x11af, 0x11b7, 0x11a8, 0 };
+static const unichar_t str_11d2[] = { 0x11af, 0x11b7, 0x11ba, 0 };
+static const unichar_t str_11d3[] = { 0x11af, 0x11b8, 0x11ba, 0 };
+static const unichar_t str_11d4[] = { 0x11af, 0x11b8, 0x11c2, 0 };
+static const unichar_t str_11d5[] = { 0x11af, 0x11e6, 0 };
+static const unichar_t str_11d6[] = { 0x11af, 0x11ba, 0x11ba, 0 };
+static const unichar_t str_11d7[] = { 0x11af, 0x11eb, 0 };
+static const unichar_t str_11d8[] = { 0x11af, 0x11bf, 0 };
+static const unichar_t str_11d9[] = { 0x11af, 0x11f9, 0 };
+static const unichar_t str_11da[] = { 0x11b7, 0x11a8, 0 };
+static const unichar_t str_11db[] = { 0x11b7, 0x11af, 0 };
+static const unichar_t str_11dc[] = { 0x11b7, 0x11b8, 0 };
+static const unichar_t str_11dd[] = { 0x11b7, 0x11ba, 0 };
+static const unichar_t str_11de[] = { 0x11b7, 0x11ba, 0x11ba, 0 };
+static const unichar_t str_11df[] = { 0x11b7, 0x11eb, 0 };
+static const unichar_t str_11e0[] = { 0x11b7, 0x11be, 0 };
+static const unichar_t str_11e1[] = { 0x11b7, 0x11c2, 0 };
+static const unichar_t str_11e2[] = { 0x11b7, 0x11bc, 0 };
+static const unichar_t str_11e3[] = { 0x11b8, 0x11af, 0 };
+static const unichar_t str_11e4[] = { 0x11b8, 0x11c1, 0 };
+static const unichar_t str_11e5[] = { 0x11b8, 0x11c2, 0 };
+static const unichar_t str_11e6[] = { 0x11b8, 0x11bc, 0 };
+static const unichar_t str_11e7[] = { 0x11ba, 0x11a8, 0 };
+static const unichar_t str_11e8[] = { 0x11ba, 0x11ae, 0 };
+static const unichar_t str_11e9[] = { 0x11ba, 0x11af, 0 };
+static const unichar_t str_11ea[] = { 0x11ba, 0x11b8, 0 };
+static const unichar_t str_11eb[] = { 0x1140, 0 };
+static const unichar_t str_11ec[] = { 0x11bc, 0x11a8, 0 };
+static const unichar_t str_11ed[] = { 0x11bc, 0x11a8, 0x11a8, 0 };
+static const unichar_t str_11ee[] = { 0x11bc, 0x11bc, 0 };
+static const unichar_t str_11ef[] = { 0x11bc, 0x11bf, 0 };
+static const unichar_t str_11f0[] = { 0x114c, 0 };
+static const unichar_t str_11f1[] = { 0x11f0, 0x11ba, 0 };
+static const unichar_t str_11f2[] = { 0x11f0, 0x11eb, 0 };
+static const unichar_t str_11f3[] = { 0x11c1, 0x11b8, 0 };
+static const unichar_t str_11f4[] = { 0x11c1, 0x11bc, 0 };
+static const unichar_t str_11f5[] = { 0x11c2, 0x11ab, 0 };
+static const unichar_t str_11f6[] = { 0x11c2, 0x11af, 0 };
+static const unichar_t str_11f7[] = { 0x11c2, 0x11b7, 0 };
+static const unichar_t str_11f8[] = { 0x11c2, 0x11b8, 0 };
+static const unichar_t str_11f9[] = { 0x1159, 0 };
+static const unichar_t str_13a0[] = { 0x0044, 0 };
+static const unichar_t str_13a1[] = { 0x0052, 0 };
+static const unichar_t str_13a2[] = { 0x0054, 0 };
+static const unichar_t str_13a9[] = { 0x0423, 0 };
+static const unichar_t str_13aa[] = { 0x0041, 0 };
+static const unichar_t str_13ab[] = { 0x004a, 0 };
+static const unichar_t str_13ac[] = { 0x0045, 0 };
+static const unichar_t str_13b1[] = { 0x0393, 0 };
+static const unichar_t str_13b3[] = { 0x0057, 0 };
+static const unichar_t str_13b7[] = { 0x004d, 0 };
+static const unichar_t str_13bb[] = { 0x0048, 0 };
+static const unichar_t str_13be[] = { 0x0398, 0 };
+static const unichar_t str_13c0[] = { 0x0047, 0 };
+static const unichar_t str_13c2[] = { 0x0068, 0 };
+static const unichar_t str_13c3[] = { 0x005a, 0 };
+static const unichar_t str_13cf[] = { 0x042c, 0 };
+static const unichar_t str_13d9[] = { 0x0056, 0 };
+static const unichar_t str_13da[] = { 0x0053, 0 };
+static const unichar_t str_13de[] = { 0x004c, 0 };
+static const unichar_t str_13df[] = { 0x0043, 0 };
+static const unichar_t str_13e2[] = { 0x0050, 0 };
+static const unichar_t str_13e6[] = { 0x004b, 0 };
+static const unichar_t str_13f4[] = { 0x0042, 0 };
+static const unichar_t str_1b06[] = { 0x1b05, 0x1b35, 0 };
+static const unichar_t str_1b08[] = { 0x1b07, 0x1b35, 0 };
+static const unichar_t str_1b0a[] = { 0x1b09, 0x1b35, 0 };
+static const unichar_t str_1b0c[] = { 0x1b0b, 0x1b35, 0 };
+static const unichar_t str_1b0e[] = { 0x1b0d, 0x1b35, 0 };
+static const unichar_t str_1b12[] = { 0x1b11, 0x1b35, 0 };
+static const unichar_t str_1b3b[] = { 0x1b3a, 0x1b35, 0 };
+static const unichar_t str_1b3d[] = { 0x1b3c, 0x1b35, 0 };
+static const unichar_t str_1b40[] = { 0x1b3e, 0x1b35, 0 };
+static const unichar_t str_1b41[] = { 0x1b3f, 0x1b35, 0 };
+static const unichar_t str_1b43[] = { 0x1b42, 0x1b35, 0 };
+static const unichar_t str_1d2c[] = { 0x0041, 0 };
+static const unichar_t str_1d2d[] = { 0x00c6, 0 };
+static const unichar_t str_1d2e[] = { 0x0042, 0 };
+static const unichar_t str_1d30[] = { 0x0044, 0 };
+static const unichar_t str_1d31[] = { 0x0045, 0 };
+static const unichar_t str_1d32[] = { 0x018e, 0 };
+static const unichar_t str_1d33[] = { 0x0047, 0 };
+static const unichar_t str_1d34[] = { 0x0048, 0 };
+static const unichar_t str_1d35[] = { 0x0049, 0 };
+static const unichar_t str_1d36[] = { 0x004a, 0 };
+static const unichar_t str_1d37[] = { 0x004b, 0 };
+static const unichar_t str_1d38[] = { 0x004c, 0 };
+static const unichar_t str_1d39[] = { 0x004d, 0 };
+static const unichar_t str_1d3a[] = { 0x004e, 0 };
+static const unichar_t str_1d3c[] = { 0x004f, 0 };
+static const unichar_t str_1d3d[] = { 0x0222, 0 };
+static const unichar_t str_1d3e[] = { 0x0050, 0 };
+static const unichar_t str_1d3f[] = { 0x0052, 0 };
+static const unichar_t str_1d40[] = { 0x0054, 0 };
+static const unichar_t str_1d41[] = { 0x0055, 0 };
+static const unichar_t str_1d42[] = { 0x0057, 0 };
+static const unichar_t str_1d43[] = { 0x0061, 0 };
+static const unichar_t str_1d44[] = { 0x0250, 0 };
+static const unichar_t str_1d45[] = { 0x0251, 0 };
+static const unichar_t str_1d46[] = { 0x1d02, 0 };
+static const unichar_t str_1d47[] = { 0x0062, 0 };
+static const unichar_t str_1d48[] = { 0x0064, 0 };
+static const unichar_t str_1d49[] = { 0x0065, 0 };
+static const unichar_t str_1d4a[] = { 0x0259, 0 };
+static const unichar_t str_1d4b[] = { 0x025b, 0 };
+static const unichar_t str_1d4c[] = { 0x025c, 0 };
+static const unichar_t str_1d4d[] = { 0x0067, 0 };
+static const unichar_t str_1d4f[] = { 0x006b, 0 };
+static const unichar_t str_1d50[] = { 0x006d, 0 };
+static const unichar_t str_1d51[] = { 0x014b, 0 };
+static const unichar_t str_1d52[] = { 0x006f, 0 };
+static const unichar_t str_1d53[] = { 0x0254, 0 };
+static const unichar_t str_1d54[] = { 0x1d16, 0 };
+static const unichar_t str_1d55[] = { 0x1d17, 0 };
+static const unichar_t str_1d56[] = { 0x0070, 0 };
+static const unichar_t str_1d57[] = { 0x0074, 0 };
+static const unichar_t str_1d58[] = { 0x0075, 0 };
+static const unichar_t str_1d59[] = { 0x1d1d, 0 };
+static const unichar_t str_1d5a[] = { 0x026f, 0 };
+static const unichar_t str_1d5b[] = { 0x0076, 0 };
+static const unichar_t str_1d5c[] = { 0x1d25, 0 };
+static const unichar_t str_1d5d[] = { 0x03b2, 0 };
+static const unichar_t str_1d5e[] = { 0x03b3, 0 };
+static const unichar_t str_1d5f[] = { 0x03b4, 0 };
+static const unichar_t str_1d60[] = { 0x03c6, 0 };
+static const unichar_t str_1d61[] = { 0x03c7, 0 };
+static const unichar_t str_1d62[] = { 0x0069, 0 };
+static const unichar_t str_1d63[] = { 0x0072, 0 };
+static const unichar_t str_1d64[] = { 0x0075, 0 };
+static const unichar_t str_1d65[] = { 0x0076, 0 };
+static const unichar_t str_1d66[] = { 0x03b2, 0 };
+static const unichar_t str_1d67[] = { 0x03b3, 0 };
+static const unichar_t str_1d68[] = { 0x03c1, 0 };
+static const unichar_t str_1d69[] = { 0x03c6, 0 };
+static const unichar_t str_1d6a[] = { 0x03c7, 0 };
+static const unichar_t str_1d78[] = { 0x043d, 0 };
+static const unichar_t str_1d9b[] = { 0x0252, 0 };
+static const unichar_t str_1d9c[] = { 0x0063, 0 };
+static const unichar_t str_1d9d[] = { 0x0255, 0 };
+static const unichar_t str_1d9e[] = { 0x00f0, 0 };
+static const unichar_t str_1d9f[] = { 0x025c, 0 };
+static const unichar_t str_1da0[] = { 0x0066, 0 };
+static const unichar_t str_1da1[] = { 0x025f, 0 };
+static const unichar_t str_1da2[] = { 0x0261, 0 };
+static const unichar_t str_1da3[] = { 0x0265, 0 };
+static const unichar_t str_1da4[] = { 0x0268, 0 };
+static const unichar_t str_1da5[] = { 0x0269, 0 };
+static const unichar_t str_1da6[] = { 0x026a, 0 };
+static const unichar_t str_1da7[] = { 0x1d7b, 0 };
+static const unichar_t str_1da8[] = { 0x029d, 0 };
+static const unichar_t str_1da9[] = { 0x026d, 0 };
+static const unichar_t str_1daa[] = { 0x1d85, 0 };
+static const unichar_t str_1dab[] = { 0x029f, 0 };
+static const unichar_t str_1dac[] = { 0x0271, 0 };
+static const unichar_t str_1dad[] = { 0x0270, 0 };
+static const unichar_t str_1dae[] = { 0x0272, 0 };
+static const unichar_t str_1daf[] = { 0x0273, 0 };
+static const unichar_t str_1db0[] = { 0x0274, 0 };
+static const unichar_t str_1db1[] = { 0x0275, 0 };
+static const unichar_t str_1db2[] = { 0x0278, 0 };
+static const unichar_t str_1db3[] = { 0x0282, 0 };
+static const unichar_t str_1db4[] = { 0x0283, 0 };
+static const unichar_t str_1db5[] = { 0x01ab, 0 };
+static const unichar_t str_1db6[] = { 0x0289, 0 };
+static const unichar_t str_1db7[] = { 0x028a, 0 };
+static const unichar_t str_1db8[] = { 0x1d1c, 0 };
+static const unichar_t str_1db9[] = { 0x028b, 0 };
+static const unichar_t str_1dba[] = { 0x028c, 0 };
+static const unichar_t str_1dbb[] = { 0x007a, 0 };
+static const unichar_t str_1dbc[] = { 0x0290, 0 };
+static const unichar_t str_1dbd[] = { 0x0291, 0 };
+static const unichar_t str_1dbe[] = { 0x0292, 0 };
+static const unichar_t str_1dbf[] = { 0x03b8, 0 };
+static const unichar_t str_1e00[] = { 0x0041, 0x0325, 0 };
+static const unichar_t str_1e01[] = { 0x0061, 0x0325, 0 };
+static const unichar_t str_1e02[] = { 0x0042, 0x0307, 0 };
+static const unichar_t str_1e03[] = { 0x0062, 0x0307, 0 };
+static const unichar_t str_1e04[] = { 0x0042, 0x0323, 0 };
+static const unichar_t str_1e05[] = { 0x0062, 0x0323, 0 };
+static const unichar_t str_1e06[] = { 0x0042, 0x0331, 0 };
+static const unichar_t str_1e07[] = { 0x0062, 0x0331, 0 };
+static const unichar_t str_1e08[] = { 0x00c7, 0x0301, 0 };
+static const unichar_t str_1e09[] = { 0x00e7, 0x0301, 0 };
+static const unichar_t str_1e0a[] = { 0x0044, 0x0307, 0 };
+static const unichar_t str_1e0b[] = { 0x0064, 0x0307, 0 };
+static const unichar_t str_1e0c[] = { 0x0044, 0x0323, 0 };
+static const unichar_t str_1e0d[] = { 0x0064, 0x0323, 0 };
+static const unichar_t str_1e0e[] = { 0x0044, 0x0331, 0 };
+static const unichar_t str_1e0f[] = { 0x0064, 0x0331, 0 };
+static const unichar_t str_1e10[] = { 0x0044, 0x0327, 0 };
+static const unichar_t str_1e11[] = { 0x0064, 0x0327, 0 };
+static const unichar_t str_1e12[] = { 0x0044, 0x032d, 0 };
+static const unichar_t str_1e13[] = { 0x0064, 0x032d, 0 };
+static const unichar_t str_1e14[] = { 0x0112, 0x0300, 0 };
+static const unichar_t str_1e15[] = { 0x0113, 0x0300, 0 };
+static const unichar_t str_1e16[] = { 0x0112, 0x0301, 0 };
+static const unichar_t str_1e17[] = { 0x0113, 0x0301, 0 };
+static const unichar_t str_1e18[] = { 0x0045, 0x032d, 0 };
+static const unichar_t str_1e19[] = { 0x0065, 0x032d, 0 };
+static const unichar_t str_1e1a[] = { 0x0045, 0x0330, 0 };
+static const unichar_t str_1e1b[] = { 0x0065, 0x0330, 0 };
+static const unichar_t str_1e1c[] = { 0x0228, 0x0306, 0 };
+static const unichar_t str_1e1d[] = { 0x0229, 0x0306, 0 };
+static const unichar_t str_1e1e[] = { 0x0046, 0x0307, 0 };
+static const unichar_t str_1e1f[] = { 0x0066, 0x0307, 0 };
+static const unichar_t str_1e20[] = { 0x0047, 0x0304, 0 };
+static const unichar_t str_1e21[] = { 0x0067, 0x0304, 0 };
+static const unichar_t str_1e22[] = { 0x0048, 0x0307, 0 };
+static const unichar_t str_1e23[] = { 0x0068, 0x0307, 0 };
+static const unichar_t str_1e24[] = { 0x0048, 0x0323, 0 };
+static const unichar_t str_1e25[] = { 0x0068, 0x0323, 0 };
+static const unichar_t str_1e26[] = { 0x0048, 0x0308, 0 };
+static const unichar_t str_1e27[] = { 0x0068, 0x0308, 0 };
+static const unichar_t str_1e28[] = { 0x0048, 0x0327, 0 };
+static const unichar_t str_1e29[] = { 0x0068, 0x0327, 0 };
+static const unichar_t str_1e2a[] = { 0x0048, 0x032e, 0 };
+static const unichar_t str_1e2b[] = { 0x0068, 0x032e, 0 };
+static const unichar_t str_1e2c[] = { 0x0049, 0x0330, 0 };
+static const unichar_t str_1e2d[] = { 0x0069, 0x0330, 0 };
+static const unichar_t str_1e2e[] = { 0x00cf, 0x0301, 0 };
+static const unichar_t str_1e2f[] = { 0x00ef, 0x0301, 0 };
+static const unichar_t str_1e30[] = { 0x004b, 0x0301, 0 };
+static const unichar_t str_1e31[] = { 0x006b, 0x0301, 0 };
+static const unichar_t str_1e32[] = { 0x004b, 0x0323, 0 };
+static const unichar_t str_1e33[] = { 0x006b, 0x0323, 0 };
+static const unichar_t str_1e34[] = { 0x004b, 0x0331, 0 };
+static const unichar_t str_1e35[] = { 0x006b, 0x0331, 0 };
+static const unichar_t str_1e36[] = { 0x004c, 0x0323, 0 };
+static const unichar_t str_1e37[] = { 0x006c, 0x0323, 0 };
+static const unichar_t str_1e38[] = { 0x1e36, 0x0304, 0 };
+static const unichar_t str_1e39[] = { 0x1e37, 0x0304, 0 };
+static const unichar_t str_1e3a[] = { 0x004c, 0x0331, 0 };
+static const unichar_t str_1e3b[] = { 0x006c, 0x0331, 0 };
+static const unichar_t str_1e3c[] = { 0x004c, 0x032d, 0 };
+static const unichar_t str_1e3d[] = { 0x006c, 0x032d, 0 };
+static const unichar_t str_1e3e[] = { 0x004d, 0x0301, 0 };
+static const unichar_t str_1e3f[] = { 0x006d, 0x0301, 0 };
+static const unichar_t str_1e40[] = { 0x004d, 0x0307, 0 };
+static const unichar_t str_1e41[] = { 0x006d, 0x0307, 0 };
+static const unichar_t str_1e42[] = { 0x004d, 0x0323, 0 };
+static const unichar_t str_1e43[] = { 0x006d, 0x0323, 0 };
+static const unichar_t str_1e44[] = { 0x004e, 0x0307, 0 };
+static const unichar_t str_1e45[] = { 0x006e, 0x0307, 0 };
+static const unichar_t str_1e46[] = { 0x004e, 0x0323, 0 };
+static const unichar_t str_1e47[] = { 0x006e, 0x0323, 0 };
+static const unichar_t str_1e48[] = { 0x004e, 0x0331, 0 };
+static const unichar_t str_1e49[] = { 0x006e, 0x0331, 0 };
+static const unichar_t str_1e4a[] = { 0x004e, 0x032d, 0 };
+static const unichar_t str_1e4b[] = { 0x006e, 0x032d, 0 };
+static const unichar_t str_1e4c[] = { 0x00d5, 0x0301, 0 };
+static const unichar_t str_1e4d[] = { 0x00f5, 0x0301, 0 };
+static const unichar_t str_1e4e[] = { 0x00d5, 0x0308, 0 };
+static const unichar_t str_1e4f[] = { 0x00f5, 0x0308, 0 };
+static const unichar_t str_1e50[] = { 0x014c, 0x0300, 0 };
+static const unichar_t str_1e51[] = { 0x014d, 0x0300, 0 };
+static const unichar_t str_1e52[] = { 0x014c, 0x0301, 0 };
+static const unichar_t str_1e53[] = { 0x014d, 0x0301, 0 };
+static const unichar_t str_1e54[] = { 0x0050, 0x0301, 0 };
+static const unichar_t str_1e55[] = { 0x0070, 0x0301, 0 };
+static const unichar_t str_1e56[] = { 0x0050, 0x0307, 0 };
+static const unichar_t str_1e57[] = { 0x0070, 0x0307, 0 };
+static const unichar_t str_1e58[] = { 0x0052, 0x0307, 0 };
+static const unichar_t str_1e59[] = { 0x0072, 0x0307, 0 };
+static const unichar_t str_1e5a[] = { 0x0052, 0x0323, 0 };
+static const unichar_t str_1e5b[] = { 0x0072, 0x0323, 0 };
+static const unichar_t str_1e5c[] = { 0x1e5a, 0x0304, 0 };
+static const unichar_t str_1e5d[] = { 0x1e5b, 0x0304, 0 };
+static const unichar_t str_1e5e[] = { 0x0052, 0x0331, 0 };
+static const unichar_t str_1e5f[] = { 0x0072, 0x0331, 0 };
+static const unichar_t str_1e60[] = { 0x0053, 0x0307, 0 };
+static const unichar_t str_1e61[] = { 0x0073, 0x0307, 0 };
+static const unichar_t str_1e62[] = { 0x0053, 0x0323, 0 };
+static const unichar_t str_1e63[] = { 0x0073, 0x0323, 0 };
+static const unichar_t str_1e64[] = { 0x015a, 0x0307, 0 };
+static const unichar_t str_1e65[] = { 0x015b, 0x0307, 0 };
+static const unichar_t str_1e66[] = { 0x0160, 0x0307, 0 };
+static const unichar_t str_1e67[] = { 0x0161, 0x0307, 0 };
+static const unichar_t str_1e68[] = { 0x1e62, 0x0307, 0 };
+static const unichar_t str_1e69[] = { 0x1e63, 0x0307, 0 };
+static const unichar_t str_1e6a[] = { 0x0054, 0x0307, 0 };
+static const unichar_t str_1e6b[] = { 0x0074, 0x0307, 0 };
+static const unichar_t str_1e6c[] = { 0x0054, 0x0323, 0 };
+static const unichar_t str_1e6d[] = { 0x0074, 0x0323, 0 };
+static const unichar_t str_1e6e[] = { 0x0054, 0x0331, 0 };
+static const unichar_t str_1e6f[] = { 0x0074, 0x0331, 0 };
+static const unichar_t str_1e70[] = { 0x0054, 0x032d, 0 };
+static const unichar_t str_1e71[] = { 0x0074, 0x032d, 0 };
+static const unichar_t str_1e72[] = { 0x0055, 0x0324, 0 };
+static const unichar_t str_1e73[] = { 0x0075, 0x0324, 0 };
+static const unichar_t str_1e74[] = { 0x0055, 0x0330, 0 };
+static const unichar_t str_1e75[] = { 0x0075, 0x0330, 0 };
+static const unichar_t str_1e76[] = { 0x0055, 0x032d, 0 };
+static const unichar_t str_1e77[] = { 0x0075, 0x032d, 0 };
+static const unichar_t str_1e78[] = { 0x0168, 0x0301, 0 };
+static const unichar_t str_1e79[] = { 0x0169, 0x0301, 0 };
+static const unichar_t str_1e7a[] = { 0x016a, 0x0308, 0 };
+static const unichar_t str_1e7b[] = { 0x016b, 0x0308, 0 };
+static const unichar_t str_1e7c[] = { 0x0056, 0x0303, 0 };
+static const unichar_t str_1e7d[] = { 0x0076, 0x0303, 0 };
+static const unichar_t str_1e7e[] = { 0x0056, 0x0323, 0 };
+static const unichar_t str_1e7f[] = { 0x0076, 0x0323, 0 };
+static const unichar_t str_1e80[] = { 0x0057, 0x0300, 0 };
+static const unichar_t str_1e81[] = { 0x0077, 0x0300, 0 };
+static const unichar_t str_1e82[] = { 0x0057, 0x0301, 0 };
+static const unichar_t str_1e83[] = { 0x0077, 0x0301, 0 };
+static const unichar_t str_1e84[] = { 0x0057, 0x0308, 0 };
+static const unichar_t str_1e85[] = { 0x0077, 0x0308, 0 };
+static const unichar_t str_1e86[] = { 0x0057, 0x0307, 0 };
+static const unichar_t str_1e87[] = { 0x0077, 0x0307, 0 };
+static const unichar_t str_1e88[] = { 0x0057, 0x0323, 0 };
+static const unichar_t str_1e89[] = { 0x0077, 0x0323, 0 };
+static const unichar_t str_1e8a[] = { 0x0058, 0x0307, 0 };
+static const unichar_t str_1e8b[] = { 0x0078, 0x0307, 0 };
+static const unichar_t str_1e8c[] = { 0x0058, 0x0308, 0 };
+static const unichar_t str_1e8d[] = { 0x0078, 0x0308, 0 };
+static const unichar_t str_1e8e[] = { 0x0059, 0x0307, 0 };
+static const unichar_t str_1e8f[] = { 0x0079, 0x0307, 0 };
+static const unichar_t str_1e90[] = { 0x005a, 0x0302, 0 };
+static const unichar_t str_1e91[] = { 0x007a, 0x0302, 0 };
+static const unichar_t str_1e92[] = { 0x005a, 0x0323, 0 };
+static const unichar_t str_1e93[] = { 0x007a, 0x0323, 0 };
+static const unichar_t str_1e94[] = { 0x005a, 0x0331, 0 };
+static const unichar_t str_1e95[] = { 0x007a, 0x0331, 0 };
+static const unichar_t str_1e96[] = { 0x0068, 0x0331, 0 };
+static const unichar_t str_1e97[] = { 0x0074, 0x0308, 0 };
+static const unichar_t str_1e98[] = { 0x0077, 0x030a, 0 };
+static const unichar_t str_1e99[] = { 0x0079, 0x030a, 0 };
+static const unichar_t str_1e9a[] = { 0x0061, 0x02be, 0 };
+static const unichar_t str_1e9b[] = { 0x017f, 0x0307, 0 };
+static const unichar_t str_1ea0[] = { 0x0041, 0x0323, 0 };
+static const unichar_t str_1ea1[] = { 0x0061, 0x0323, 0 };
+static const unichar_t str_1ea2[] = { 0x0041, 0x0309, 0 };
+static const unichar_t str_1ea3[] = { 0x0061, 0x0309, 0 };
+static const unichar_t str_1ea4[] = { 0x00c2, 0x0301, 0 };
+static const unichar_t str_1ea5[] = { 0x00e2, 0x0301, 0 };
+static const unichar_t str_1ea6[] = { 0x00c2, 0x0300, 0 };
+static const unichar_t str_1ea7[] = { 0x00e2, 0x0300, 0 };
+static const unichar_t str_1ea8[] = { 0x00c2, 0x0309, 0 };
+static const unichar_t str_1ea9[] = { 0x00e2, 0x0309, 0 };
+static const unichar_t str_1eaa[] = { 0x00c2, 0x0303, 0 };
+static const unichar_t str_1eab[] = { 0x00e2, 0x0303, 0 };
+static const unichar_t str_1eac[] = { 0x1ea0, 0x0302, 0 };
+static const unichar_t str_1ead[] = { 0x1ea1, 0x0302, 0 };
+static const unichar_t str_1eae[] = { 0x0102, 0x0301, 0 };
+static const unichar_t str_1eaf[] = { 0x0103, 0x0301, 0 };
+static const unichar_t str_1eb0[] = { 0x0102, 0x0300, 0 };
+static const unichar_t str_1eb1[] = { 0x0103, 0x0300, 0 };
+static const unichar_t str_1eb2[] = { 0x0102, 0x0309, 0 };
+static const unichar_t str_1eb3[] = { 0x0103, 0x0309, 0 };
+static const unichar_t str_1eb4[] = { 0x0102, 0x0303, 0 };
+static const unichar_t str_1eb5[] = { 0x0103, 0x0303, 0 };
+static const unichar_t str_1eb6[] = { 0x1ea0, 0x0306, 0 };
+static const unichar_t str_1eb7[] = { 0x1ea1, 0x0306, 0 };
+static const unichar_t str_1eb8[] = { 0x0045, 0x0323, 0 };
+static const unichar_t str_1eb9[] = { 0x0065, 0x0323, 0 };
+static const unichar_t str_1eba[] = { 0x0045, 0x0309, 0 };
+static const unichar_t str_1ebb[] = { 0x0065, 0x0309, 0 };
+static const unichar_t str_1ebc[] = { 0x0045, 0x0303, 0 };
+static const unichar_t str_1ebd[] = { 0x0065, 0x0303, 0 };
+static const unichar_t str_1ebe[] = { 0x00ca, 0x0301, 0 };
+static const unichar_t str_1ebf[] = { 0x00ea, 0x0301, 0 };
+static const unichar_t str_1ec0[] = { 0x00ca, 0x0300, 0 };
+static const unichar_t str_1ec1[] = { 0x00ea, 0x0300, 0 };
+static const unichar_t str_1ec2[] = { 0x00ca, 0x0309, 0 };
+static const unichar_t str_1ec3[] = { 0x00ea, 0x0309, 0 };
+static const unichar_t str_1ec4[] = { 0x00ca, 0x0303, 0 };
+static const unichar_t str_1ec5[] = { 0x00ea, 0x0303, 0 };
+static const unichar_t str_1ec6[] = { 0x1eb8, 0x0302, 0 };
+static const unichar_t str_1ec7[] = { 0x1eb9, 0x0302, 0 };
+static const unichar_t str_1ec8[] = { 0x0049, 0x0309, 0 };
+static const unichar_t str_1ec9[] = { 0x0069, 0x0309, 0 };
+static const unichar_t str_1eca[] = { 0x0049, 0x0323, 0 };
+static const unichar_t str_1ecb[] = { 0x0069, 0x0323, 0 };
+static const unichar_t str_1ecc[] = { 0x004f, 0x0323, 0 };
+static const unichar_t str_1ecd[] = { 0x006f, 0x0323, 0 };
+static const unichar_t str_1ece[] = { 0x004f, 0x0309, 0 };
+static const unichar_t str_1ecf[] = { 0x006f, 0x0309, 0 };
+static const unichar_t str_1ed0[] = { 0x00d4, 0x0301, 0 };
+static const unichar_t str_1ed1[] = { 0x00f4, 0x0301, 0 };
+static const unichar_t str_1ed2[] = { 0x00d4, 0x0300, 0 };
+static const unichar_t str_1ed3[] = { 0x00f4, 0x0300, 0 };
+static const unichar_t str_1ed4[] = { 0x00d4, 0x0309, 0 };
+static const unichar_t str_1ed5[] = { 0x00f4, 0x0309, 0 };
+static const unichar_t str_1ed6[] = { 0x00d4, 0x0303, 0 };
+static const unichar_t str_1ed7[] = { 0x00f4, 0x0303, 0 };
+static const unichar_t str_1ed8[] = { 0x1ecc, 0x0302, 0 };
+static const unichar_t str_1ed9[] = { 0x1ecd, 0x0302, 0 };
+static const unichar_t str_1eda[] = { 0x01a0, 0x0301, 0 };
+static const unichar_t str_1edb[] = { 0x01a1, 0x0301, 0 };
+static const unichar_t str_1edc[] = { 0x01a0, 0x0300, 0 };
+static const unichar_t str_1edd[] = { 0x01a1, 0x0300, 0 };
+static const unichar_t str_1ede[] = { 0x01a0, 0x0309, 0 };
+static const unichar_t str_1edf[] = { 0x01a1, 0x0309, 0 };
+static const unichar_t str_1ee0[] = { 0x01a0, 0x0303, 0 };
+static const unichar_t str_1ee1[] = { 0x01a1, 0x0303, 0 };
+static const unichar_t str_1ee2[] = { 0x01a0, 0x0323, 0 };
+static const unichar_t str_1ee3[] = { 0x01a1, 0x0323, 0 };
+static const unichar_t str_1ee4[] = { 0x0055, 0x0323, 0 };
+static const unichar_t str_1ee5[] = { 0x0075, 0x0323, 0 };
+static const unichar_t str_1ee6[] = { 0x0055, 0x0309, 0 };
+static const unichar_t str_1ee7[] = { 0x0075, 0x0309, 0 };
+static const unichar_t str_1ee8[] = { 0x01af, 0x0301, 0 };
+static const unichar_t str_1ee9[] = { 0x01b0, 0x0301, 0 };
+static const unichar_t str_1eea[] = { 0x01af, 0x0300, 0 };
+static const unichar_t str_1eeb[] = { 0x01b0, 0x0300, 0 };
+static const unichar_t str_1eec[] = { 0x01af, 0x0309, 0 };
+static const unichar_t str_1eed[] = { 0x01b0, 0x0309, 0 };
+static const unichar_t str_1eee[] = { 0x01af, 0x0303, 0 };
+static const unichar_t str_1eef[] = { 0x01b0, 0x0303, 0 };
+static const unichar_t str_1ef0[] = { 0x01af, 0x0323, 0 };
+static const unichar_t str_1ef1[] = { 0x01b0, 0x0323, 0 };
+static const unichar_t str_1ef2[] = { 0x0059, 0x0300, 0 };
+static const unichar_t str_1ef3[] = { 0x0079, 0x0300, 0 };
+static const unichar_t str_1ef4[] = { 0x0059, 0x0323, 0 };
+static const unichar_t str_1ef5[] = { 0x0079, 0x0323, 0 };
+static const unichar_t str_1ef6[] = { 0x0059, 0x0309, 0 };
+static const unichar_t str_1ef7[] = { 0x0079, 0x0309, 0 };
+static const unichar_t str_1ef8[] = { 0x0059, 0x0303, 0 };
+static const unichar_t str_1ef9[] = { 0x0079, 0x0303, 0 };
+static const unichar_t str_1f00[] = { 0x03b1, 0x0313, 0 };
+static const unichar_t str_1f01[] = { 0x03b1, 0x0314, 0 };
+static const unichar_t str_1f02[] = { 0x1f00, 0x0300, 0 };
+static const unichar_t str_1f03[] = { 0x1f01, 0x0300, 0 };
+static const unichar_t str_1f04[] = { 0x1f00, 0x0301, 0 };
+static const unichar_t str_1f05[] = { 0x1f01, 0x0301, 0 };
+static const unichar_t str_1f06[] = { 0x1f00, 0x0342, 0 };
+static const unichar_t str_1f07[] = { 0x1f01, 0x0342, 0 };
+static const unichar_t str_1f08[] = { 0x0391, 0x0313, 0 };
+static const unichar_t str_1f09[] = { 0x0391, 0x0314, 0 };
+static const unichar_t str_1f0a[] = { 0x1f08, 0x0300, 0 };
+static const unichar_t str_1f0b[] = { 0x1f09, 0x0300, 0 };
+static const unichar_t str_1f0c[] = { 0x1f08, 0x0301, 0 };
+static const unichar_t str_1f0d[] = { 0x1f09, 0x0301, 0 };
+static const unichar_t str_1f0e[] = { 0x1f08, 0x0342, 0 };
+static const unichar_t str_1f0f[] = { 0x1f09, 0x0342, 0 };
+static const unichar_t str_1f10[] = { 0x03b5, 0x0313, 0 };
+static const unichar_t str_1f11[] = { 0x03b5, 0x0314, 0 };
+static const unichar_t str_1f12[] = { 0x1f10, 0x0300, 0 };
+static const unichar_t str_1f13[] = { 0x1f11, 0x0300, 0 };
+static const unichar_t str_1f14[] = { 0x1f10, 0x0301, 0 };
+static const unichar_t str_1f15[] = { 0x1f11, 0x0301, 0 };
+static const unichar_t str_1f18[] = { 0x0395, 0x0313, 0 };
+static const unichar_t str_1f19[] = { 0x0395, 0x0314, 0 };
+static const unichar_t str_1f1a[] = { 0x1f18, 0x0300, 0 };
+static const unichar_t str_1f1b[] = { 0x1f19, 0x0300, 0 };
+static const unichar_t str_1f1c[] = { 0x1f18, 0x0301, 0 };
+static const unichar_t str_1f1d[] = { 0x1f19, 0x0301, 0 };
+static const unichar_t str_1f20[] = { 0x03b7, 0x0313, 0 };
+static const unichar_t str_1f21[] = { 0x03b7, 0x0314, 0 };
+static const unichar_t str_1f22[] = { 0x1f20, 0x0300, 0 };
+static const unichar_t str_1f23[] = { 0x1f21, 0x0300, 0 };
+static const unichar_t str_1f24[] = { 0x1f20, 0x0301, 0 };
+static const unichar_t str_1f25[] = { 0x1f21, 0x0301, 0 };
+static const unichar_t str_1f26[] = { 0x1f20, 0x0342, 0 };
+static const unichar_t str_1f27[] = { 0x1f21, 0x0342, 0 };
+static const unichar_t str_1f28[] = { 0x0397, 0x0313, 0 };
+static const unichar_t str_1f29[] = { 0x0397, 0x0314, 0 };
+static const unichar_t str_1f2a[] = { 0x1f28, 0x0300, 0 };
+static const unichar_t str_1f2b[] = { 0x1f29, 0x0300, 0 };
+static const unichar_t str_1f2c[] = { 0x1f28, 0x0301, 0 };
+static const unichar_t str_1f2d[] = { 0x1f29, 0x0301, 0 };
+static const unichar_t str_1f2e[] = { 0x1f28, 0x0342, 0 };
+static const unichar_t str_1f2f[] = { 0x1f29, 0x0342, 0 };
+static const unichar_t str_1f30[] = { 0x03b9, 0x0313, 0 };
+static const unichar_t str_1f31[] = { 0x03b9, 0x0314, 0 };
+static const unichar_t str_1f32[] = { 0x1f30, 0x0300, 0 };
+static const unichar_t str_1f33[] = { 0x1f31, 0x0300, 0 };
+static const unichar_t str_1f34[] = { 0x1f30, 0x0301, 0 };
+static const unichar_t str_1f35[] = { 0x1f31, 0x0301, 0 };
+static const unichar_t str_1f36[] = { 0x1f30, 0x0342, 0 };
+static const unichar_t str_1f37[] = { 0x1f31, 0x0342, 0 };
+static const unichar_t str_1f38[] = { 0x0399, 0x0313, 0 };
+static const unichar_t str_1f39[] = { 0x0399, 0x0314, 0 };
+static const unichar_t str_1f3a[] = { 0x1f38, 0x0300, 0 };
+static const unichar_t str_1f3b[] = { 0x1f39, 0x0300, 0 };
+static const unichar_t str_1f3c[] = { 0x1f38, 0x0301, 0 };
+static const unichar_t str_1f3d[] = { 0x1f39, 0x0301, 0 };
+static const unichar_t str_1f3e[] = { 0x1f38, 0x0342, 0 };
+static const unichar_t str_1f3f[] = { 0x1f39, 0x0342, 0 };
+static const unichar_t str_1f40[] = { 0x03bf, 0x0313, 0 };
+static const unichar_t str_1f41[] = { 0x03bf, 0x0314, 0 };
+static const unichar_t str_1f42[] = { 0x1f40, 0x0300, 0 };
+static const unichar_t str_1f43[] = { 0x1f41, 0x0300, 0 };
+static const unichar_t str_1f44[] = { 0x1f40, 0x0301, 0 };
+static const unichar_t str_1f45[] = { 0x1f41, 0x0301, 0 };
+static const unichar_t str_1f48[] = { 0x039f, 0x0313, 0 };
+static const unichar_t str_1f49[] = { 0x039f, 0x0314, 0 };
+static const unichar_t str_1f4a[] = { 0x1f48, 0x0300, 0 };
+static const unichar_t str_1f4b[] = { 0x1f49, 0x0300, 0 };
+static const unichar_t str_1f4c[] = { 0x1f48, 0x0301, 0 };
+static const unichar_t str_1f4d[] = { 0x1f49, 0x0301, 0 };
+static const unichar_t str_1f50[] = { 0x03c5, 0x0313, 0 };
+static const unichar_t str_1f51[] = { 0x03c5, 0x0314, 0 };
+static const unichar_t str_1f52[] = { 0x1f50, 0x0300, 0 };
+static const unichar_t str_1f53[] = { 0x1f51, 0x0300, 0 };
+static const unichar_t str_1f54[] = { 0x1f50, 0x0301, 0 };
+static const unichar_t str_1f55[] = { 0x1f51, 0x0301, 0 };
+static const unichar_t str_1f56[] = { 0x1f50, 0x0342, 0 };
+static const unichar_t str_1f57[] = { 0x1f51, 0x0342, 0 };
+static const unichar_t str_1f59[] = { 0x03a5, 0x0314, 0 };
+static const unichar_t str_1f5b[] = { 0x1f59, 0x0300, 0 };
+static const unichar_t str_1f5d[] = { 0x1f59, 0x0301, 0 };
+static const unichar_t str_1f5f[] = { 0x1f59, 0x0342, 0 };
+static const unichar_t str_1f60[] = { 0x03c9, 0x0313, 0 };
+static const unichar_t str_1f61[] = { 0x03c9, 0x0314, 0 };
+static const unichar_t str_1f62[] = { 0x1f60, 0x0300, 0 };
+static const unichar_t str_1f63[] = { 0x1f61, 0x0300, 0 };
+static const unichar_t str_1f64[] = { 0x1f60, 0x0301, 0 };
+static const unichar_t str_1f65[] = { 0x1f61, 0x0301, 0 };
+static const unichar_t str_1f66[] = { 0x1f60, 0x0342, 0 };
+static const unichar_t str_1f67[] = { 0x1f61, 0x0342, 0 };
+static const unichar_t str_1f68[] = { 0x03a9, 0x0313, 0 };
+static const unichar_t str_1f69[] = { 0x03a9, 0x0314, 0 };
+static const unichar_t str_1f6a[] = { 0x1f68, 0x0300, 0 };
+static const unichar_t str_1f6b[] = { 0x1f69, 0x0300, 0 };
+static const unichar_t str_1f6c[] = { 0x1f68, 0x0301, 0 };
+static const unichar_t str_1f6d[] = { 0x1f69, 0x0301, 0 };
+static const unichar_t str_1f6e[] = { 0x1f68, 0x0342, 0 };
+static const unichar_t str_1f6f[] = { 0x1f69, 0x0342, 0 };
+static const unichar_t str_1f70[] = { 0x03b1, 0x0300, 0 };
+static const unichar_t str_1f71[] = { 0x03ac, 0 };
+static const unichar_t str_1f72[] = { 0x03b5, 0x0300, 0 };
+static const unichar_t str_1f73[] = { 0x03ad, 0 };
+static const unichar_t str_1f74[] = { 0x03b7, 0x0300, 0 };
+static const unichar_t str_1f75[] = { 0x03ae, 0 };
+static const unichar_t str_1f76[] = { 0x03b9, 0x0300, 0 };
+static const unichar_t str_1f77[] = { 0x03af, 0 };
+static const unichar_t str_1f78[] = { 0x03bf, 0x0300, 0 };
+static const unichar_t str_1f79[] = { 0x03cc, 0 };
+static const unichar_t str_1f7a[] = { 0x03c5, 0x0300, 0 };
+static const unichar_t str_1f7b[] = { 0x03cd, 0 };
+static const unichar_t str_1f7c[] = { 0x03c9, 0x0300, 0 };
+static const unichar_t str_1f7d[] = { 0x03ce, 0 };
+static const unichar_t str_1f80[] = { 0x1f00, 0x0345, 0 };
+static const unichar_t str_1f81[] = { 0x1f01, 0x0345, 0 };
+static const unichar_t str_1f82[] = { 0x1f02, 0x0345, 0 };
+static const unichar_t str_1f83[] = { 0x1f03, 0x0345, 0 };
+static const unichar_t str_1f84[] = { 0x1f04, 0x0345, 0 };
+static const unichar_t str_1f85[] = { 0x1f05, 0x0345, 0 };
+static const unichar_t str_1f86[] = { 0x1f06, 0x0345, 0 };
+static const unichar_t str_1f87[] = { 0x1f07, 0x0345, 0 };
+static const unichar_t str_1f88[] = { 0x1f08, 0x0345, 0 };
+static const unichar_t str_1f89[] = { 0x1f09, 0x0345, 0 };
+static const unichar_t str_1f8a[] = { 0x1f0a, 0x0345, 0 };
+static const unichar_t str_1f8b[] = { 0x1f0b, 0x0345, 0 };
+static const unichar_t str_1f8c[] = { 0x1f0c, 0x0345, 0 };
+static const unichar_t str_1f8d[] = { 0x1f0d, 0x0345, 0 };
+static const unichar_t str_1f8e[] = { 0x1f0e, 0x0345, 0 };
+static const unichar_t str_1f8f[] = { 0x1f0f, 0x0345, 0 };
+static const unichar_t str_1f90[] = { 0x1f20, 0x0345, 0 };
+static const unichar_t str_1f91[] = { 0x1f21, 0x0345, 0 };
+static const unichar_t str_1f92[] = { 0x1f22, 0x0345, 0 };
+static const unichar_t str_1f93[] = { 0x1f23, 0x0345, 0 };
+static const unichar_t str_1f94[] = { 0x1f24, 0x0345, 0 };
+static const unichar_t str_1f95[] = { 0x1f25, 0x0345, 0 };
+static const unichar_t str_1f96[] = { 0x1f26, 0x0345, 0 };
+static const unichar_t str_1f97[] = { 0x1f27, 0x0345, 0 };
+static const unichar_t str_1f98[] = { 0x1f28, 0x0345, 0 };
+static const unichar_t str_1f99[] = { 0x1f29, 0x0345, 0 };
+static const unichar_t str_1f9a[] = { 0x1f2a, 0x0345, 0 };
+static const unichar_t str_1f9b[] = { 0x1f2b, 0x0345, 0 };
+static const unichar_t str_1f9c[] = { 0x1f2c, 0x0345, 0 };
+static const unichar_t str_1f9d[] = { 0x1f2d, 0x0345, 0 };
+static const unichar_t str_1f9e[] = { 0x1f2e, 0x0345, 0 };
+static const unichar_t str_1f9f[] = { 0x1f2f, 0x0345, 0 };
+static const unichar_t str_1fa0[] = { 0x1f60, 0x0345, 0 };
+static const unichar_t str_1fa1[] = { 0x1f61, 0x0345, 0 };
+static const unichar_t str_1fa2[] = { 0x1f62, 0x0345, 0 };
+static const unichar_t str_1fa3[] = { 0x1f63, 0x0345, 0 };
+static const unichar_t str_1fa4[] = { 0x1f64, 0x0345, 0 };
+static const unichar_t str_1fa5[] = { 0x1f65, 0x0345, 0 };
+static const unichar_t str_1fa6[] = { 0x1f66, 0x0345, 0 };
+static const unichar_t str_1fa7[] = { 0x1f67, 0x0345, 0 };
+static const unichar_t str_1fa8[] = { 0x1f68, 0x0345, 0 };
+static const unichar_t str_1fa9[] = { 0x1f69, 0x0345, 0 };
+static const unichar_t str_1faa[] = { 0x1f6a, 0x0345, 0 };
+static const unichar_t str_1fab[] = { 0x1f6b, 0x0345, 0 };
+static const unichar_t str_1fac[] = { 0x1f6c, 0x0345, 0 };
+static const unichar_t str_1fad[] = { 0x1f6d, 0x0345, 0 };
+static const unichar_t str_1fae[] = { 0x1f6e, 0x0345, 0 };
+static const unichar_t str_1faf[] = { 0x1f6f, 0x0345, 0 };
+static const unichar_t str_1fb0[] = { 0x03b1, 0x0306, 0 };
+static const unichar_t str_1fb1[] = { 0x03b1, 0x0304, 0 };
+static const unichar_t str_1fb2[] = { 0x1f70, 0x0345, 0 };
+static const unichar_t str_1fb3[] = { 0x03b1, 0x0345, 0 };
+static const unichar_t str_1fb4[] = { 0x03ac, 0x0345, 0 };
+static const unichar_t str_1fb6[] = { 0x03b1, 0x0342, 0 };
+static const unichar_t str_1fb7[] = { 0x1fb6, 0x0345, 0 };
+static const unichar_t str_1fb8[] = { 0x0391, 0x0306, 0 };
+static const unichar_t str_1fb9[] = { 0x0391, 0x0304, 0 };
+static const unichar_t str_1fba[] = { 0x0391, 0x0300, 0 };
+static const unichar_t str_1fbb[] = { 0x0386, 0 };
+static const unichar_t str_1fbc[] = { 0x0391, 0x0345, 0 };
+static const unichar_t str_1fbd[] = { 0x0020, 0x0313, 0 };
+static const unichar_t str_1fbe[] = { 0x03b9, 0 };
+static const unichar_t str_1fbf[] = { 0x0020, 0x0313, 0 };
+static const unichar_t str_1fc0[] = { 0x0020, 0x0342, 0 };
+static const unichar_t str_1fc1[] = { 0x00a8, 0x0342, 0 };
+static const unichar_t str_1fc2[] = { 0x1f74, 0x0345, 0 };
+static const unichar_t str_1fc3[] = { 0x03b7, 0x0345, 0 };
+static const unichar_t str_1fc4[] = { 0x03ae, 0x0345, 0 };
+static const unichar_t str_1fc6[] = { 0x03b7, 0x0342, 0 };
+static const unichar_t str_1fc7[] = { 0x1fc6, 0x0345, 0 };
+static const unichar_t str_1fc8[] = { 0x0395, 0x0300, 0 };
+static const unichar_t str_1fc9[] = { 0x0388, 0 };
+static const unichar_t str_1fca[] = { 0x0397, 0x0300, 0 };
+static const unichar_t str_1fcb[] = { 0x0389, 0 };
+static const unichar_t str_1fcc[] = { 0x0397, 0x0345, 0 };
+static const unichar_t str_1fcd[] = { 0x1fbf, 0x0300, 0 };
+static const unichar_t str_1fce[] = { 0x1fbf, 0x0301, 0 };
+static const unichar_t str_1fcf[] = { 0x1fbf, 0x0342, 0 };
+static const unichar_t str_1fd0[] = { 0x03b9, 0x0306, 0 };
+static const unichar_t str_1fd1[] = { 0x03b9, 0x0304, 0 };
+static const unichar_t str_1fd2[] = { 0x03ca, 0x0300, 0 };
+static const unichar_t str_1fd3[] = { 0x0390, 0 };
+static const unichar_t str_1fd6[] = { 0x03b9, 0x0342, 0 };
+static const unichar_t str_1fd7[] = { 0x03ca, 0x0342, 0 };
+static const unichar_t str_1fd8[] = { 0x0399, 0x0306, 0 };
+static const unichar_t str_1fd9[] = { 0x0399, 0x0304, 0 };
+static const unichar_t str_1fda[] = { 0x0399, 0x0300, 0 };
+static const unichar_t str_1fdb[] = { 0x038a, 0 };
+static const unichar_t str_1fdd[] = { 0x1ffe, 0x0300, 0 };
+static const unichar_t str_1fde[] = { 0x1ffe, 0x0301, 0 };
+static const unichar_t str_1fdf[] = { 0x1ffe, 0x0342, 0 };
+static const unichar_t str_1fe0[] = { 0x03c5, 0x0306, 0 };
+static const unichar_t str_1fe1[] = { 0x03c5, 0x0304, 0 };
+static const unichar_t str_1fe2[] = { 0x03cb, 0x0300, 0 };
+static const unichar_t str_1fe3[] = { 0x03b0, 0 };
+static const unichar_t str_1fe4[] = { 0x03c1, 0x0313, 0 };
+static const unichar_t str_1fe5[] = { 0x03c1, 0x0314, 0 };
+static const unichar_t str_1fe6[] = { 0x03c5, 0x0342, 0 };
+static const unichar_t str_1fe7[] = { 0x03cb, 0x0342, 0 };
+static const unichar_t str_1fe8[] = { 0x03a5, 0x0306, 0 };
+static const unichar_t str_1fe9[] = { 0x03a5, 0x0304, 0 };
+static const unichar_t str_1fea[] = { 0x03a5, 0x0300, 0 };
+static const unichar_t str_1feb[] = { 0x038e, 0 };
+static const unichar_t str_1fec[] = { 0x03a1, 0x0314, 0 };
+static const unichar_t str_1fed[] = { 0x00a8, 0x0300, 0 };
+static const unichar_t str_1fee[] = { 0x0385, 0 };
+static const unichar_t str_1fef[] = { 0x0060, 0 };
+static const unichar_t str_1ff2[] = { 0x1f7c, 0x0345, 0 };
+static const unichar_t str_1ff3[] = { 0x03c9, 0x0345, 0 };
+static const unichar_t str_1ff4[] = { 0x03ce, 0x0345, 0 };
+static const unichar_t str_1ff6[] = { 0x03c9, 0x0342, 0 };
+static const unichar_t str_1ff7[] = { 0x1ff6, 0x0345, 0 };
+static const unichar_t str_1ff8[] = { 0x039f, 0x0300, 0 };
+static const unichar_t str_1ff9[] = { 0x038c, 0 };
+static const unichar_t str_1ffa[] = { 0x03a9, 0x0300, 0 };
+static const unichar_t str_1ffb[] = { 0x038f, 0 };
+static const unichar_t str_1ffc[] = { 0x03a9, 0x0345, 0 };
+static const unichar_t str_1ffd[] = { 0x00b4, 0 };
+static const unichar_t str_1ffe[] = { 0x0020, 0x0314, 0 };
+static const unichar_t str_2000[] = { 0x2002, 0 };
+static const unichar_t str_2001[] = { 0x2003, 0 };
+static const unichar_t str_2002[] = { 0x0020, 0 };
+static const unichar_t str_2003[] = { 0x0020, 0 };
+static const unichar_t str_2004[] = { 0x0020, 0 };
+static const unichar_t str_2005[] = { 0x0020, 0 };
+static const unichar_t str_2006[] = { 0x0020, 0 };
+static const unichar_t str_2007[] = { 0x0020, 0 };
+static const unichar_t str_2008[] = { 0x0020, 0 };
+static const unichar_t str_2009[] = { 0x0020, 0 };
+static const unichar_t str_200a[] = { 0x0020, 0 };
+static const unichar_t str_2010[] = { 0x002d, 0 };
+static const unichar_t str_2011[] = { 0x2010, 0 };
+static const unichar_t str_2012[] = { 0x002d, 0 };
+static const unichar_t str_2013[] = { 0x002d, 0 };
+static const unichar_t str_2014[] = { 0x002d, 0 };
+static const unichar_t str_2015[] = { 0x002d, 0 };
+static const unichar_t str_2016[] = { 0x007c, 0x007c, 0 };
+static const unichar_t str_2017[] = { 0x0020, 0x0333, 0 };
+static const unichar_t str_2018[] = { 0x0060, 0 };
+static const unichar_t str_2019[] = { 0x0027, 0 };
+static const unichar_t str_201c[] = { 0x0022, 0 };
+static const unichar_t str_201d[] = { 0x0022, 0 };
+static const unichar_t str_2024[] = { 0x002e, 0 };
+static const unichar_t str_2025[] = { 0x002e, 0x002e, 0 };
+static const unichar_t str_2026[] = { 0x002e, 0x002e, 0x002e, 0 };
+static const unichar_t str_202f[] = { 0x0020, 0 };
+static const unichar_t str_2032[] = { 0x0027, 0 };
+static const unichar_t str_2033[] = { 0x2032, 0x2032, 0 };
+static const unichar_t str_2034[] = { 0x2032, 0x2032, 0x2032, 0 };
+static const unichar_t str_2035[] = { 0x0060, 0 };
+static const unichar_t str_2036[] = { 0x2035, 0x2035, 0 };
+static const unichar_t str_2037[] = { 0x2035, 0x2035, 0x2035, 0 };
+static const unichar_t str_2039[] = { 0x003c, 0 };
+static const unichar_t str_203a[] = { 0x003e, 0 };
+static const unichar_t str_203c[] = { 0x0021, 0x0021, 0 };
+static const unichar_t str_203e[] = { 0x0020, 0x0305, 0 };
+static const unichar_t str_2047[] = { 0x003f, 0x003f, 0 };
+static const unichar_t str_2048[] = { 0x003f, 0x0021, 0 };
+static const unichar_t str_2049[] = { 0x0021, 0x003f, 0 };
+static const unichar_t str_2057[] = { 0x2032, 0x2032, 0x2032, 0x2032, 0 };
+static const unichar_t str_205f[] = { 0x0020, 0 };
+static const unichar_t str_2070[] = { 0x0030, 0 };
+static const unichar_t str_2071[] = { 0x0069, 0 };
+static const unichar_t str_2074[] = { 0x0034, 0 };
+static const unichar_t str_2075[] = { 0x0035, 0 };
+static const unichar_t str_2076[] = { 0x0036, 0 };
+static const unichar_t str_2077[] = { 0x0037, 0 };
+static const unichar_t str_2078[] = { 0x0038, 0 };
+static const unichar_t str_2079[] = { 0x0039, 0 };
+static const unichar_t str_207a[] = { 0x002b, 0 };
+static const unichar_t str_207b[] = { 0x2212, 0 };
+static const unichar_t str_207c[] = { 0x003d, 0 };
+static const unichar_t str_207d[] = { 0x0028, 0 };
+static const unichar_t str_207e[] = { 0x0029, 0 };
+static const unichar_t str_207f[] = { 0x006e, 0 };
+static const unichar_t str_2080[] = { 0x0030, 0 };
+static const unichar_t str_2081[] = { 0x0031, 0 };
+static const unichar_t str_2082[] = { 0x0032, 0 };
+static const unichar_t str_2083[] = { 0x0033, 0 };
+static const unichar_t str_2084[] = { 0x0034, 0 };
+static const unichar_t str_2085[] = { 0x0035, 0 };
+static const unichar_t str_2086[] = { 0x0036, 0 };
+static const unichar_t str_2087[] = { 0x0037, 0 };
+static const unichar_t str_2088[] = { 0x0038, 0 };
+static const unichar_t str_2089[] = { 0x0039, 0 };
+static const unichar_t str_208a[] = { 0x002b, 0 };
+static const unichar_t str_208b[] = { 0x2212, 0 };
+static const unichar_t str_208c[] = { 0x003d, 0 };
+static const unichar_t str_208d[] = { 0x0028, 0 };
+static const unichar_t str_208e[] = { 0x0029, 0 };
+static const unichar_t str_2090[] = { 0x0061, 0 };
+static const unichar_t str_2091[] = { 0x0065, 0 };
+static const unichar_t str_2092[] = { 0x006f, 0 };
+static const unichar_t str_2093[] = { 0x0078, 0 };
+static const unichar_t str_2094[] = { 0x0259, 0 };
+static const unichar_t str_2095[] = { 0x0068, 0 };
+static const unichar_t str_2096[] = { 0x006b, 0 };
+static const unichar_t str_2097[] = { 0x006c, 0 };
+static const unichar_t str_2098[] = { 0x006d, 0 };
+static const unichar_t str_2099[] = { 0x006e, 0 };
+static const unichar_t str_209a[] = { 0x0070, 0 };
+static const unichar_t str_209b[] = { 0x0073, 0 };
+static const unichar_t str_209c[] = { 0x0074, 0 };
+static const unichar_t str_20a8[] = { 0x0052, 0x0073, 0 };
+static const unichar_t str_2100[] = { 0x0061, 0x002f, 0x0063, 0 };
+static const unichar_t str_2101[] = { 0x0061, 0x002f, 0x0073, 0 };
+static const unichar_t str_2102[] = { 0x0043, 0 };
+static const unichar_t str_2103[] = { 0x00b0, 0x0043, 0 };
+static const unichar_t str_2105[] = { 0x0063, 0x002f, 0x006f, 0 };
+static const unichar_t str_2106[] = { 0x0063, 0x002f, 0x0075, 0 };
+static const unichar_t str_2107[] = { 0x0190, 0 };
+static const unichar_t str_2109[] = { 0x00b0, 0x0046, 0 };
+static const unichar_t str_210a[] = { 0x0067, 0 };
+static const unichar_t str_210b[] = { 0x0048, 0 };
+static const unichar_t str_210c[] = { 0x0048, 0 };
+static const unichar_t str_210d[] = { 0x0048, 0 };
+static const unichar_t str_210e[] = { 0x0068, 0 };
+static const unichar_t str_210f[] = { 0x0127, 0 };
+static const unichar_t str_2110[] = { 0x0049, 0 };
+static const unichar_t str_2111[] = { 0x0049, 0 };
+static const unichar_t str_2112[] = { 0x004c, 0 };
+static const unichar_t str_2113[] = { 0x006c, 0 };
+static const unichar_t str_2115[] = { 0x004e, 0 };
+static const unichar_t str_2116[] = { 0x004e, 0x006f, 0 };
+static const unichar_t str_2119[] = { 0x0050, 0 };
+static const unichar_t str_211a[] = { 0x0051, 0 };
+static const unichar_t str_211b[] = { 0x0052, 0 };
+static const unichar_t str_211c[] = { 0x0052, 0 };
+static const unichar_t str_211d[] = { 0x0052, 0 };
+static const unichar_t str_2120[] = { 0x0053, 0x004d, 0 };
+static const unichar_t str_2121[] = { 0x0054, 0x0045, 0x004c, 0 };
+static const unichar_t str_2122[] = { 0x0054, 0x004d, 0 };
+static const unichar_t str_2124[] = { 0x005a, 0 };
+static const unichar_t str_2126[] = { 0x03a9, 0 };
+static const unichar_t str_2128[] = { 0x005a, 0 };
+static const unichar_t str_212a[] = { 0x004b, 0 };
+static const unichar_t str_212b[] = { 0x00c5, 0 };
+static const unichar_t str_212c[] = { 0x0042, 0 };
+static const unichar_t str_212d[] = { 0x0043, 0 };
+static const unichar_t str_212f[] = { 0x0065, 0 };
+static const unichar_t str_2130[] = { 0x0045, 0 };
+static const unichar_t str_2131[] = { 0x0046, 0 };
+static const unichar_t str_2133[] = { 0x004d, 0 };
+static const unichar_t str_2134[] = { 0x006f, 0 };
+static const unichar_t str_2135[] = { 0x05d0, 0 };
+static const unichar_t str_2136[] = { 0x05d1, 0 };
+static const unichar_t str_2137[] = { 0x05d2, 0 };
+static const unichar_t str_2138[] = { 0x05d3, 0 };
+static const unichar_t str_2139[] = { 0x0069, 0 };
+static const unichar_t str_213b[] = { 0x0046, 0x0041, 0x0058, 0 };
+static const unichar_t str_213c[] = { 0x03c0, 0 };
+static const unichar_t str_213d[] = { 0x03b3, 0 };
+static const unichar_t str_213e[] = { 0x0393, 0 };
+static const unichar_t str_213f[] = { 0x03a0, 0 };
+static const unichar_t str_2140[] = { 0x2211, 0 };
+static const unichar_t str_2145[] = { 0x0044, 0 };
+static const unichar_t str_2146[] = { 0x0064, 0 };
+static const unichar_t str_2147[] = { 0x0065, 0 };
+static const unichar_t str_2148[] = { 0x0069, 0 };
+static const unichar_t str_2149[] = { 0x006a, 0 };
+static const unichar_t str_2150[] = { 0x0031, 0x2044, 0x0037, 0 };
+static const unichar_t str_2151[] = { 0x0031, 0x2044, 0x0039, 0 };
+static const unichar_t str_2152[] = { 0x0031, 0x2044, 0x0031, 0x0030, 0 };
+static const unichar_t str_2153[] = { 0x0031, 0x2044, 0x0033, 0 };
+static const unichar_t str_2154[] = { 0x0032, 0x2044, 0x0033, 0 };
+static const unichar_t str_2155[] = { 0x0031, 0x2044, 0x0035, 0 };
+static const unichar_t str_2156[] = { 0x0032, 0x2044, 0x0035, 0 };
+static const unichar_t str_2157[] = { 0x0033, 0x2044, 0x0035, 0 };
+static const unichar_t str_2158[] = { 0x0034, 0x2044, 0x0035, 0 };
+static const unichar_t str_2159[] = { 0x0031, 0x2044, 0x0036, 0 };
+static const unichar_t str_215a[] = { 0x0035, 0x2044, 0x0036, 0 };
+static const unichar_t str_215b[] = { 0x0031, 0x2044, 0x0038, 0 };
+static const unichar_t str_215c[] = { 0x0033, 0x2044, 0x0038, 0 };
+static const unichar_t str_215d[] = { 0x0035, 0x2044, 0x0038, 0 };
+static const unichar_t str_215e[] = { 0x0037, 0x2044, 0x0038, 0 };
+static const unichar_t str_215f[] = { 0x0031, 0x2044, 0 };
+static const unichar_t str_2160[] = { 0x0049, 0 };
+static const unichar_t str_2161[] = { 0x0049, 0x0049, 0 };
+static const unichar_t str_2162[] = { 0x0049, 0x0049, 0x0049, 0 };
+static const unichar_t str_2163[] = { 0x0049, 0x0056, 0 };
+static const unichar_t str_2164[] = { 0x0056, 0 };
+static const unichar_t str_2165[] = { 0x0056, 0x0049, 0 };
+static const unichar_t str_2166[] = { 0x0056, 0x0049, 0x0049, 0 };
+static const unichar_t str_2167[] = { 0x0056, 0x0049, 0x0049, 0x0049, 0 };
+static const unichar_t str_2168[] = { 0x0049, 0x0058, 0 };
+static const unichar_t str_2169[] = { 0x0058, 0 };
+static const unichar_t str_216a[] = { 0x0058, 0x0049, 0 };
+static const unichar_t str_216b[] = { 0x0058, 0x0049, 0x0049, 0 };
+static const unichar_t str_216c[] = { 0x004c, 0 };
+static const unichar_t str_216d[] = { 0x0043, 0 };
+static const unichar_t str_216e[] = { 0x0044, 0 };
+static const unichar_t str_216f[] = { 0x004d, 0 };
+static const unichar_t str_2170[] = { 0x0069, 0 };
+static const unichar_t str_2171[] = { 0x0069, 0x0069, 0 };
+static const unichar_t str_2172[] = { 0x0069, 0x0069, 0x0069, 0 };
+static const unichar_t str_2173[] = { 0x0069, 0x0076, 0 };
+static const unichar_t str_2174[] = { 0x0076, 0 };
+static const unichar_t str_2175[] = { 0x0076, 0x0069, 0 };
+static const unichar_t str_2176[] = { 0x0076, 0x0069, 0x0069, 0 };
+static const unichar_t str_2177[] = { 0x0076, 0x0069, 0x0069, 0x0069, 0 };
+static const unichar_t str_2178[] = { 0x0069, 0x0078, 0 };
+static const unichar_t str_2179[] = { 0x0078, 0 };
+static const unichar_t str_217a[] = { 0x0078, 0x0069, 0 };
+static const unichar_t str_217b[] = { 0x0078, 0x0069, 0x0069, 0 };
+static const unichar_t str_217c[] = { 0x006c, 0 };
+static const unichar_t str_217d[] = { 0x0063, 0 };
+static const unichar_t str_217e[] = { 0x0064, 0 };
+static const unichar_t str_217f[] = { 0x006d, 0 };
+static const unichar_t str_2189[] = { 0x0030, 0x2044, 0x0033, 0 };
+static const unichar_t str_219a[] = { 0x2190, 0x0338, 0 };
+static const unichar_t str_219b[] = { 0x2192, 0x0338, 0 };
+static const unichar_t str_21ae[] = { 0x2194, 0x0338, 0 };
+static const unichar_t str_21cd[] = { 0x21d0, 0x0338, 0 };
+static const unichar_t str_21ce[] = { 0x21d4, 0x0338, 0 };
+static const unichar_t str_21cf[] = { 0x21d2, 0x0338, 0 };
+static const unichar_t str_2204[] = { 0x2203, 0x0338, 0 };
+static const unichar_t str_2205[] = { 0x00d8, 0 };
+static const unichar_t str_2206[] = { 0x0394, 0 };
+static const unichar_t str_2209[] = { 0x2208, 0x0338, 0 };
+static const unichar_t str_220c[] = { 0x220b, 0x0338, 0 };
+static const unichar_t str_220f[] = { 0x03a0, 0 };
+static const unichar_t str_2211[] = { 0x03a3, 0 };
+static const unichar_t str_2212[] = { 0x002d, 0 };
+static const unichar_t str_2215[] = { 0x002f, 0 };
+static const unichar_t str_2216[] = { 0x005c, 0 };
+static const unichar_t str_2217[] = { 0x002a, 0 };
+static const unichar_t str_2218[] = { 0x00b0, 0 };
+static const unichar_t str_2219[] = { 0x00b7, 0 };
+static const unichar_t str_2223[] = { 0x007c, 0 };
+static const unichar_t str_2224[] = { 0x2223, 0x0338, 0 };
+static const unichar_t str_2225[] = { 0x007c, 0x007c, 0 };
+static const unichar_t str_2226[] = { 0x2225, 0x0338, 0 };
+static const unichar_t str_222c[] = { 0x222b, 0x222b, 0 };
+static const unichar_t str_222d[] = { 0x222b, 0x222b, 0x222b, 0 };
+static const unichar_t str_222f[] = { 0x222e, 0x222e, 0 };
+static const unichar_t str_2230[] = { 0x222e, 0x222e, 0x222e, 0 };
+static const unichar_t str_2236[] = { 0x003a, 0 };
+static const unichar_t str_223c[] = { 0x007e, 0 };
+static const unichar_t str_2241[] = { 0x223c, 0x0338, 0 };
+static const unichar_t str_2244[] = { 0x2243, 0x0338, 0 };
+static const unichar_t str_2247[] = { 0x2245, 0x0338, 0 };
+static const unichar_t str_2249[] = { 0x2248, 0x0338, 0 };
+static const unichar_t str_2260[] = { 0x003d, 0x0338, 0 };
+static const unichar_t str_2262[] = { 0x2261, 0x0338, 0 };
+static const unichar_t str_226a[] = { 0x00ab, 0 };
+static const unichar_t str_226b[] = { 0x00bb, 0 };
+static const unichar_t str_226d[] = { 0x224d, 0x0338, 0 };
+static const unichar_t str_226e[] = { 0x003c, 0x0338, 0 };
+static const unichar_t str_226f[] = { 0x003e, 0x0338, 0 };
+static const unichar_t str_2270[] = { 0x2264, 0x0338, 0 };
+static const unichar_t str_2271[] = { 0x2265, 0x0338, 0 };
+static const unichar_t str_2274[] = { 0x2272, 0x0338, 0 };
+static const unichar_t str_2275[] = { 0x2273, 0x0338, 0 };
+static const unichar_t str_2278[] = { 0x2276, 0x0338, 0 };
+static const unichar_t str_2279[] = { 0x2277, 0x0338, 0 };
+static const unichar_t str_2280[] = { 0x227a, 0x0338, 0 };
+static const unichar_t str_2281[] = { 0x227b, 0x0338, 0 };
+static const unichar_t str_2284[] = { 0x2282, 0x0338, 0 };
+static const unichar_t str_2285[] = { 0x2283, 0x0338, 0 };
+static const unichar_t str_2288[] = { 0x2286, 0x0338, 0 };
+static const unichar_t str_2289[] = { 0x2287, 0x0338, 0 };
+static const unichar_t str_2299[] = { 0x0298, 0 };
+static const unichar_t str_22ac[] = { 0x22a2, 0x0338, 0 };
+static const unichar_t str_22ad[] = { 0x22a8, 0x0338, 0 };
+static const unichar_t str_22ae[] = { 0x22a9, 0x0338, 0 };
+static const unichar_t str_22af[] = { 0x22ab, 0x0338, 0 };
+static const unichar_t str_22c4[] = { 0x25ca, 0 };
+static const unichar_t str_22c5[] = { 0x00b7, 0 };
+static const unichar_t str_22e0[] = { 0x227c, 0x0338, 0 };
+static const unichar_t str_22e1[] = { 0x227d, 0x0338, 0 };
+static const unichar_t str_22e2[] = { 0x2291, 0x0338, 0 };
+static const unichar_t str_22e3[] = { 0x2292, 0x0338, 0 };
+static const unichar_t str_22ea[] = { 0x22b2, 0x0338, 0 };
+static const unichar_t str_22eb[] = { 0x22b3, 0x0338, 0 };
+static const unichar_t str_22ec[] = { 0x22b4, 0x0338, 0 };
+static const unichar_t str_22ed[] = { 0x22b5, 0x0338, 0 };
+static const unichar_t str_22ef[] = { 0x00b7, 0x00b7, 0x00b7, 0 };
+static const unichar_t str_2303[] = { 0x005e, 0 };
+static const unichar_t str_2329[] = { 0x3008, 0 };
+static const unichar_t str_232a[] = { 0x3009, 0 };
+static const unichar_t str_2373[] = { 0x03b9, 0 };
+static const unichar_t str_2374[] = { 0x03c1, 0 };
+static const unichar_t str_2375[] = { 0x03c9, 0 };
+static const unichar_t str_237a[] = { 0x03b1, 0 };
+static const unichar_t str_2400[] = { 0x004e, 0x0055, 0x004c, 0 };
+static const unichar_t str_2401[] = { 0x0053, 0x004f, 0x0048, 0 };
+static const unichar_t str_2402[] = { 0x0053, 0x0054, 0x0058, 0 };
+static const unichar_t str_2403[] = { 0x0045, 0x0054, 0x0058, 0 };
+static const unichar_t str_2404[] = { 0x0045, 0x004f, 0x0054, 0 };
+static const unichar_t str_2405[] = { 0x0045, 0x004e, 0x0041, 0 };
+static const unichar_t str_2406[] = { 0x0041, 0x0043, 0x004b, 0 };
+static const unichar_t str_2407[] = { 0x0042, 0x0045, 0x004c, 0 };
+static const unichar_t str_2408[] = { 0x0042, 0x0053, 0 };
+static const unichar_t str_2409[] = { 0x0048, 0x0054, 0 };
+static const unichar_t str_240a[] = { 0x004c, 0x0046, 0 };
+static const unichar_t str_240b[] = { 0x0056, 0x0054, 0 };
+static const unichar_t str_240c[] = { 0x0046, 0x0046, 0 };
+static const unichar_t str_240d[] = { 0x0043, 0x0052, 0 };
+static const unichar_t str_240e[] = { 0x0053, 0x004f, 0 };
+static const unichar_t str_240f[] = { 0x0053, 0x0049, 0 };
+static const unichar_t str_2410[] = { 0x0044, 0x004c, 0x0045, 0 };
+static const unichar_t str_2411[] = { 0x0044, 0x0043, 0x0031, 0 };
+static const unichar_t str_2412[] = { 0x0044, 0x0043, 0x0032, 0 };
+static const unichar_t str_2413[] = { 0x0044, 0x0043, 0x0033, 0 };
+static const unichar_t str_2414[] = { 0x0044, 0x0043, 0x0034, 0 };
+static const unichar_t str_2415[] = { 0x004e, 0x0041, 0x004b, 0 };
+static const unichar_t str_2416[] = { 0x0053, 0x0059, 0x004e, 0 };
+static const unichar_t str_2417[] = { 0x0045, 0x0054, 0x0042, 0 };
+static const unichar_t str_2418[] = { 0x0043, 0x0041, 0x004e, 0 };
+static const unichar_t str_2419[] = { 0x0045, 0x004d, 0 };
+static const unichar_t str_241a[] = { 0x0053, 0x0055, 0x0042, 0 };
+static const unichar_t str_241b[] = { 0x0045, 0x0053, 0x0043, 0 };
+static const unichar_t str_241c[] = { 0x0046, 0x0053, 0 };
+static const unichar_t str_241d[] = { 0x0047, 0x0053, 0 };
+static const unichar_t str_241e[] = { 0x0052, 0x0053, 0 };
+static const unichar_t str_241f[] = { 0x0055, 0x0053, 0 };
+static const unichar_t str_2420[] = { 0x0053, 0x0050, 0 };
+static const unichar_t str_2421[] = { 0x0044, 0x0045, 0x004c, 0 };
+static const unichar_t str_2422[] = { 0x0180, 0 };
+static const unichar_t str_2460[] = { 0x0031, 0x20dd, 0 };
+static const unichar_t str_2461[] = { 0x0032, 0x20dd, 0 };
+static const unichar_t str_2462[] = { 0x0033, 0x20dd, 0 };
+static const unichar_t str_2463[] = { 0x0034, 0x20dd, 0 };
+static const unichar_t str_2464[] = { 0x0035, 0x20dd, 0 };
+static const unichar_t str_2465[] = { 0x0036, 0x20dd, 0 };
+static const unichar_t str_2466[] = { 0x0037, 0x20dd, 0 };
+static const unichar_t str_2467[] = { 0x0038, 0x20dd, 0 };
+static const unichar_t str_2468[] = { 0x0039, 0x20dd, 0 };
+static const unichar_t str_2469[] = { 0x0031, 0x0030, 0x20dd, 0 };
+static const unichar_t str_246a[] = { 0x0031, 0x0031, 0x20dd, 0 };
+static const unichar_t str_246b[] = { 0x0031, 0x0032, 0x20dd, 0 };
+static const unichar_t str_246c[] = { 0x0031, 0x0033, 0x20dd, 0 };
+static const unichar_t str_246d[] = { 0x0031, 0x0034, 0x20dd, 0 };
+static const unichar_t str_246e[] = { 0x0031, 0x0035, 0x20dd, 0 };
+static const unichar_t str_246f[] = { 0x0031, 0x0036, 0x20dd, 0 };
+static const unichar_t str_2470[] = { 0x0031, 0x0037, 0x20dd, 0 };
+static const unichar_t str_2471[] = { 0x0031, 0x0038, 0x20dd, 0 };
+static const unichar_t str_2472[] = { 0x0031, 0x0039, 0x20dd, 0 };
+static const unichar_t str_2473[] = { 0x0032, 0x0030, 0x20dd, 0 };
+static const unichar_t str_2474[] = { 0x0028, 0x0031, 0x0029, 0 };
+static const unichar_t str_2475[] = { 0x0028, 0x0032, 0x0029, 0 };
+static const unichar_t str_2476[] = { 0x0028, 0x0033, 0x0029, 0 };
+static const unichar_t str_2477[] = { 0x0028, 0x0034, 0x0029, 0 };
+static const unichar_t str_2478[] = { 0x0028, 0x0035, 0x0029, 0 };
+static const unichar_t str_2479[] = { 0x0028, 0x0036, 0x0029, 0 };
+static const unichar_t str_247a[] = { 0x0028, 0x0037, 0x0029, 0 };
+static const unichar_t str_247b[] = { 0x0028, 0x0038, 0x0029, 0 };
+static const unichar_t str_247c[] = { 0x0028, 0x0039, 0x0029, 0 };
+static const unichar_t str_247d[] = { 0x0028, 0x0031, 0x0030, 0x0029, 0 };
+static const unichar_t str_247e[] = { 0x0028, 0x0031, 0x0031, 0x0029, 0 };
+static const unichar_t str_247f[] = { 0x0028, 0x0031, 0x0032, 0x0029, 0 };
+static const unichar_t str_2480[] = { 0x0028, 0x0031, 0x0033, 0x0029, 0 };
+static const unichar_t str_2481[] = { 0x0028, 0x0031, 0x0034, 0x0029, 0 };
+static const unichar_t str_2482[] = { 0x0028, 0x0031, 0x0035, 0x0029, 0 };
+static const unichar_t str_2483[] = { 0x0028, 0x0031, 0x0036, 0x0029, 0 };
+static const unichar_t str_2484[] = { 0x0028, 0x0031, 0x0037, 0x0029, 0 };
+static const unichar_t str_2485[] = { 0x0028, 0x0031, 0x0038, 0x0029, 0 };
+static const unichar_t str_2486[] = { 0x0028, 0x0031, 0x0039, 0x0029, 0 };
+static const unichar_t str_2487[] = { 0x0028, 0x0032, 0x0030, 0x0029, 0 };
+static const unichar_t str_2488[] = { 0x0031, 0x002e, 0 };
+static const unichar_t str_2489[] = { 0x0032, 0x002e, 0 };
+static const unichar_t str_248a[] = { 0x0033, 0x002e, 0 };
+static const unichar_t str_248b[] = { 0x0034, 0x002e, 0 };
+static const unichar_t str_248c[] = { 0x0035, 0x002e, 0 };
+static const unichar_t str_248d[] = { 0x0036, 0x002e, 0 };
+static const unichar_t str_248e[] = { 0x0037, 0x002e, 0 };
+static const unichar_t str_248f[] = { 0x0038, 0x002e, 0 };
+static const unichar_t str_2490[] = { 0x0039, 0x002e, 0 };
+static const unichar_t str_2491[] = { 0x0031, 0x0030, 0x002e, 0 };
+static const unichar_t str_2492[] = { 0x0031, 0x0031, 0x002e, 0 };
+static const unichar_t str_2493[] = { 0x0031, 0x0032, 0x002e, 0 };
+static const unichar_t str_2494[] = { 0x0031, 0x0033, 0x002e, 0 };
+static const unichar_t str_2495[] = { 0x0031, 0x0034, 0x002e, 0 };
+static const unichar_t str_2496[] = { 0x0031, 0x0035, 0x002e, 0 };
+static const unichar_t str_2497[] = { 0x0031, 0x0036, 0x002e, 0 };
+static const unichar_t str_2498[] = { 0x0031, 0x0037, 0x002e, 0 };
+static const unichar_t str_2499[] = { 0x0031, 0x0038, 0x002e, 0 };
+static const unichar_t str_249a[] = { 0x0031, 0x0039, 0x002e, 0 };
+static const unichar_t str_249b[] = { 0x0032, 0x0030, 0x002e, 0 };
+static const unichar_t str_249c[] = { 0x0028, 0x0061, 0x0029, 0 };
+static const unichar_t str_249d[] = { 0x0028, 0x0062, 0x0029, 0 };
+static const unichar_t str_249e[] = { 0x0028, 0x0063, 0x0029, 0 };
+static const unichar_t str_249f[] = { 0x0028, 0x0064, 0x0029, 0 };
+static const unichar_t str_24a0[] = { 0x0028, 0x0065, 0x0029, 0 };
+static const unichar_t str_24a1[] = { 0x0028, 0x0066, 0x0029, 0 };
+static const unichar_t str_24a2[] = { 0x0028, 0x0067, 0x0029, 0 };
+static const unichar_t str_24a3[] = { 0x0028, 0x0068, 0x0029, 0 };
+static const unichar_t str_24a4[] = { 0x0028, 0x0069, 0x0029, 0 };
+static const unichar_t str_24a5[] = { 0x0028, 0x006a, 0x0029, 0 };
+static const unichar_t str_24a6[] = { 0x0028, 0x006b, 0x0029, 0 };
+static const unichar_t str_24a7[] = { 0x0028, 0x006c, 0x0029, 0 };
+static const unichar_t str_24a8[] = { 0x0028, 0x006d, 0x0029, 0 };
+static const unichar_t str_24a9[] = { 0x0028, 0x006e, 0x0029, 0 };
+static const unichar_t str_24aa[] = { 0x0028, 0x006f, 0x0029, 0 };
+static const unichar_t str_24ab[] = { 0x0028, 0x0070, 0x0029, 0 };
+static const unichar_t str_24ac[] = { 0x0028, 0x0071, 0x0029, 0 };
+static const unichar_t str_24ad[] = { 0x0028, 0x0072, 0x0029, 0 };
+static const unichar_t str_24ae[] = { 0x0028, 0x0073, 0x0029, 0 };
+static const unichar_t str_24af[] = { 0x0028, 0x0074, 0x0029, 0 };
+static const unichar_t str_24b0[] = { 0x0028, 0x0075, 0x0029, 0 };
+static const unichar_t str_24b1[] = { 0x0028, 0x0076, 0x0029, 0 };
+static const unichar_t str_24b2[] = { 0x0028, 0x0077, 0x0029, 0 };
+static const unichar_t str_24b3[] = { 0x0028, 0x0078, 0x0029, 0 };
+static const unichar_t str_24b4[] = { 0x0028, 0x0079, 0x0029, 0 };
+static const unichar_t str_24b5[] = { 0x0028, 0x007a, 0x0029, 0 };
+static const unichar_t str_24b6[] = { 0x0041, 0x20dd, 0 };
+static const unichar_t str_24b7[] = { 0x0042, 0x20dd, 0 };
+static const unichar_t str_24b8[] = { 0x0043, 0x20dd, 0 };
+static const unichar_t str_24b9[] = { 0x0044, 0x20dd, 0 };
+static const unichar_t str_24ba[] = { 0x0045, 0x20dd, 0 };
+static const unichar_t str_24bb[] = { 0x0046, 0x20dd, 0 };
+static const unichar_t str_24bc[] = { 0x0047, 0x20dd, 0 };
+static const unichar_t str_24bd[] = { 0x0048, 0x20dd, 0 };
+static const unichar_t str_24be[] = { 0x0049, 0x20dd, 0 };
+static const unichar_t str_24bf[] = { 0x004a, 0x20dd, 0 };
+static const unichar_t str_24c0[] = { 0x004b, 0x20dd, 0 };
+static const unichar_t str_24c1[] = { 0x004c, 0x20dd, 0 };
+static const unichar_t str_24c2[] = { 0x004d, 0x20dd, 0 };
+static const unichar_t str_24c3[] = { 0x004e, 0x20dd, 0 };
+static const unichar_t str_24c4[] = { 0x004f, 0x20dd, 0 };
+static const unichar_t str_24c5[] = { 0x0050, 0x20dd, 0 };
+static const unichar_t str_24c6[] = { 0x0051, 0x20dd, 0 };
+static const unichar_t str_24c7[] = { 0x0052, 0x20dd, 0 };
+static const unichar_t str_24c8[] = { 0x0053, 0x20dd, 0 };
+static const unichar_t str_24c9[] = { 0x0054, 0x20dd, 0 };
+static const unichar_t str_24ca[] = { 0x0055, 0x20dd, 0 };
+static const unichar_t str_24cb[] = { 0x0056, 0x20dd, 0 };
+static const unichar_t str_24cc[] = { 0x0057, 0x20dd, 0 };
+static const unichar_t str_24cd[] = { 0x0058, 0x20dd, 0 };
+static const unichar_t str_24ce[] = { 0x0059, 0x20dd, 0 };
+static const unichar_t str_24cf[] = { 0x005a, 0x20dd, 0 };
+static const unichar_t str_24d0[] = { 0x0061, 0x20dd, 0 };
+static const unichar_t str_24d1[] = { 0x0062, 0x20dd, 0 };
+static const unichar_t str_24d2[] = { 0x0063, 0x20dd, 0 };
+static const unichar_t str_24d3[] = { 0x0064, 0x20dd, 0 };
+static const unichar_t str_24d4[] = { 0x0065, 0x20dd, 0 };
+static const unichar_t str_24d5[] = { 0x0066, 0x20dd, 0 };
+static const unichar_t str_24d6[] = { 0x0067, 0x20dd, 0 };
+static const unichar_t str_24d7[] = { 0x0068, 0x20dd, 0 };
+static const unichar_t str_24d8[] = { 0x0069, 0x20dd, 0 };
+static const unichar_t str_24d9[] = { 0x006a, 0x20dd, 0 };
+static const unichar_t str_24da[] = { 0x006b, 0x20dd, 0 };
+static const unichar_t str_24db[] = { 0x006c, 0x20dd, 0 };
+static const unichar_t str_24dc[] = { 0x006d, 0x20dd, 0 };
+static const unichar_t str_24dd[] = { 0x006e, 0x20dd, 0 };
+static const unichar_t str_24de[] = { 0x006f, 0x20dd, 0 };
+static const unichar_t str_24df[] = { 0x0070, 0x20dd, 0 };
+static const unichar_t str_24e0[] = { 0x0071, 0x20dd, 0 };
+static const unichar_t str_24e1[] = { 0x0072, 0x20dd, 0 };
+static const unichar_t str_24e2[] = { 0x0073, 0x20dd, 0 };
+static const unichar_t str_24e3[] = { 0x0074, 0x20dd, 0 };
+static const unichar_t str_24e4[] = { 0x0075, 0x20dd, 0 };
+static const unichar_t str_24e5[] = { 0x0076, 0x20dd, 0 };
+static const unichar_t str_24e6[] = { 0x0077, 0x20dd, 0 };
+static const unichar_t str_24e7[] = { 0x0078, 0x20dd, 0 };
+static const unichar_t str_24e8[] = { 0x0079, 0x20dd, 0 };
+static const unichar_t str_24e9[] = { 0x007a, 0x20dd, 0 };
+static const unichar_t str_24ea[] = { 0x0030, 0x20dd, 0 };
+static const unichar_t str_2500[] = { 0x2014, 0 };
+static const unichar_t str_2502[] = { 0x007c, 0 };
+static const unichar_t str_25b3[] = { 0x2206, 0 };
+static const unichar_t str_25b8[] = { 0x2023, 0 };
+static const unichar_t str_25bd[] = { 0x2207, 0 };
+static const unichar_t str_25c7[] = { 0x25ca, 0 };
+static const unichar_t str_25e6[] = { 0x00b0, 0 };
+static const unichar_t str_2662[] = { 0x25ca, 0 };
+static const unichar_t str_2731[] = { 0x002a, 0 };
+static const unichar_t str_2758[] = { 0x007c, 0 };
+static const unichar_t str_2762[] = { 0x0021, 0 };
+static const unichar_t str_2a0c[] = { 0x222b, 0x222b, 0x222b, 0x222b, 0 };
+static const unichar_t str_2a74[] = { 0x003a, 0x003a, 0x003d, 0 };
+static const unichar_t str_2a75[] = { 0x003d, 0x003d, 0 };
+static const unichar_t str_2a76[] = { 0x003d, 0x003d, 0x003d, 0 };
+static const unichar_t str_2adc[] = { 0x2add, 0x0338, 0 };
+static const unichar_t str_2c7c[] = { 0x006a, 0 };
+static const unichar_t str_2c7d[] = { 0x0056, 0 };
+static const unichar_t str_2d6f[] = { 0x2d61, 0 };
+static const unichar_t str_2e28[] = { 0xff5f, 0 };
+static const unichar_t str_2e29[] = { 0xff60, 0 };
+static const unichar_t str_2e9f[] = { 0x6bcd, 0 };
+static const unichar_t str_2ef3[] = { 0x9f9f, 0 };
+static const unichar_t str_2f00[] = { 0x4e00, 0 };
+static const unichar_t str_2f01[] = { 0x4e28, 0 };
+static const unichar_t str_2f02[] = { 0x4e36, 0 };
+static const unichar_t str_2f03[] = { 0x4e3f, 0 };
+static const unichar_t str_2f04[] = { 0x4e59, 0 };
+static const unichar_t str_2f05[] = { 0x4e85, 0 };
+static const unichar_t str_2f06[] = { 0x4e8c, 0 };
+static const unichar_t str_2f07[] = { 0x4ea0, 0 };
+static const unichar_t str_2f08[] = { 0x4eba, 0 };
+static const unichar_t str_2f09[] = { 0x513f, 0 };
+static const unichar_t str_2f0a[] = { 0x5165, 0 };
+static const unichar_t str_2f0b[] = { 0x516b, 0 };
+static const unichar_t str_2f0c[] = { 0x5182, 0 };
+static const unichar_t str_2f0d[] = { 0x5196, 0 };
+static const unichar_t str_2f0e[] = { 0x51ab, 0 };
+static const unichar_t str_2f0f[] = { 0x51e0, 0 };
+static const unichar_t str_2f10[] = { 0x51f5, 0 };
+static const unichar_t str_2f11[] = { 0x5200, 0 };
+static const unichar_t str_2f12[] = { 0x529b, 0 };
+static const unichar_t str_2f13[] = { 0x52f9, 0 };
+static const unichar_t str_2f14[] = { 0x5315, 0 };
+static const unichar_t str_2f15[] = { 0x531a, 0 };
+static const unichar_t str_2f16[] = { 0x5338, 0 };
+static const unichar_t str_2f17[] = { 0x5341, 0 };
+static const unichar_t str_2f18[] = { 0x535c, 0 };
+static const unichar_t str_2f19[] = { 0x5369, 0 };
+static const unichar_t str_2f1a[] = { 0x5382, 0 };
+static const unichar_t str_2f1b[] = { 0x53b6, 0 };
+static const unichar_t str_2f1c[] = { 0x53c8, 0 };
+static const unichar_t str_2f1d[] = { 0x53e3, 0 };
+static const unichar_t str_2f1e[] = { 0x56d7, 0 };
+static const unichar_t str_2f1f[] = { 0x571f, 0 };
+static const unichar_t str_2f20[] = { 0x58eb, 0 };
+static const unichar_t str_2f21[] = { 0x5902, 0 };
+static const unichar_t str_2f22[] = { 0x590a, 0 };
+static const unichar_t str_2f23[] = { 0x5915, 0 };
+static const unichar_t str_2f24[] = { 0x5927, 0 };
+static const unichar_t str_2f25[] = { 0x5973, 0 };
+static const unichar_t str_2f26[] = { 0x5b50, 0 };
+static const unichar_t str_2f27[] = { 0x5b80, 0 };
+static const unichar_t str_2f28[] = { 0x5bf8, 0 };
+static const unichar_t str_2f29[] = { 0x5c0f, 0 };
+static const unichar_t str_2f2a[] = { 0x5c22, 0 };
+static const unichar_t str_2f2b[] = { 0x5c38, 0 };
+static const unichar_t str_2f2c[] = { 0x5c6e, 0 };
+static const unichar_t str_2f2d[] = { 0x5c71, 0 };
+static const unichar_t str_2f2e[] = { 0x5ddb, 0 };
+static const unichar_t str_2f2f[] = { 0x5de5, 0 };
+static const unichar_t str_2f30[] = { 0x5df1, 0 };
+static const unichar_t str_2f31[] = { 0x5dfe, 0 };
+static const unichar_t str_2f32[] = { 0x5e72, 0 };
+static const unichar_t str_2f33[] = { 0x5e7a, 0 };
+static const unichar_t str_2f34[] = { 0x5e7f, 0 };
+static const unichar_t str_2f35[] = { 0x5ef4, 0 };
+static const unichar_t str_2f36[] = { 0x5efe, 0 };
+static const unichar_t str_2f37[] = { 0x5f0b, 0 };
+static const unichar_t str_2f38[] = { 0x5f13, 0 };
+static const unichar_t str_2f39[] = { 0x5f50, 0 };
+static const unichar_t str_2f3a[] = { 0x5f61, 0 };
+static const unichar_t str_2f3b[] = { 0x5f73, 0 };
+static const unichar_t str_2f3c[] = { 0x5fc3, 0 };
+static const unichar_t str_2f3d[] = { 0x6208, 0 };
+static const unichar_t str_2f3e[] = { 0x6236, 0 };
+static const unichar_t str_2f3f[] = { 0x624b, 0 };
+static const unichar_t str_2f40[] = { 0x652f, 0 };
+static const unichar_t str_2f41[] = { 0x6534, 0 };
+static const unichar_t str_2f42[] = { 0x6587, 0 };
+static const unichar_t str_2f43[] = { 0x6597, 0 };
+static const unichar_t str_2f44[] = { 0x65a4, 0 };
+static const unichar_t str_2f45[] = { 0x65b9, 0 };
+static const unichar_t str_2f46[] = { 0x65e0, 0 };
+static const unichar_t str_2f47[] = { 0x65e5, 0 };
+static const unichar_t str_2f48[] = { 0x66f0, 0 };
+static const unichar_t str_2f49[] = { 0x6708, 0 };
+static const unichar_t str_2f4a[] = { 0x6728, 0 };
+static const unichar_t str_2f4b[] = { 0x6b20, 0 };
+static const unichar_t str_2f4c[] = { 0x6b62, 0 };
+static const unichar_t str_2f4d[] = { 0x6b79, 0 };
+static const unichar_t str_2f4e[] = { 0x6bb3, 0 };
+static const unichar_t str_2f4f[] = { 0x6bcb, 0 };
+static const unichar_t str_2f50[] = { 0x6bd4, 0 };
+static const unichar_t str_2f51[] = { 0x6bdb, 0 };
+static const unichar_t str_2f52[] = { 0x6c0f, 0 };
+static const unichar_t str_2f53[] = { 0x6c14, 0 };
+static const unichar_t str_2f54[] = { 0x6c34, 0 };
+static const unichar_t str_2f55[] = { 0x706b, 0 };
+static const unichar_t str_2f56[] = { 0x722a, 0 };
+static const unichar_t str_2f57[] = { 0x7236, 0 };
+static const unichar_t str_2f58[] = { 0x723b, 0 };
+static const unichar_t str_2f59[] = { 0x723f, 0 };
+static const unichar_t str_2f5a[] = { 0x7247, 0 };
+static const unichar_t str_2f5b[] = { 0x7259, 0 };
+static const unichar_t str_2f5c[] = { 0x725b, 0 };
+static const unichar_t str_2f5d[] = { 0x72ac, 0 };
+static const unichar_t str_2f5e[] = { 0x7384, 0 };
+static const unichar_t str_2f5f[] = { 0x7389, 0 };
+static const unichar_t str_2f60[] = { 0x74dc, 0 };
+static const unichar_t str_2f61[] = { 0x74e6, 0 };
+static const unichar_t str_2f62[] = { 0x7518, 0 };
+static const unichar_t str_2f63[] = { 0x751f, 0 };
+static const unichar_t str_2f64[] = { 0x7528, 0 };
+static const unichar_t str_2f65[] = { 0x7530, 0 };
+static const unichar_t str_2f66[] = { 0x758b, 0 };
+static const unichar_t str_2f67[] = { 0x7592, 0 };
+static const unichar_t str_2f68[] = { 0x7676, 0 };
+static const unichar_t str_2f69[] = { 0x767d, 0 };
+static const unichar_t str_2f6a[] = { 0x76ae, 0 };
+static const unichar_t str_2f6b[] = { 0x76bf, 0 };
+static const unichar_t str_2f6c[] = { 0x76ee, 0 };
+static const unichar_t str_2f6d[] = { 0x77db, 0 };
+static const unichar_t str_2f6e[] = { 0x77e2, 0 };
+static const unichar_t str_2f6f[] = { 0x77f3, 0 };
+static const unichar_t str_2f70[] = { 0x793a, 0 };
+static const unichar_t str_2f71[] = { 0x79b8, 0 };
+static const unichar_t str_2f72[] = { 0x79be, 0 };
+static const unichar_t str_2f73[] = { 0x7a74, 0 };
+static const unichar_t str_2f74[] = { 0x7acb, 0 };
+static const unichar_t str_2f75[] = { 0x7af9, 0 };
+static const unichar_t str_2f76[] = { 0x7c73, 0 };
+static const unichar_t str_2f77[] = { 0x7cf8, 0 };
+static const unichar_t str_2f78[] = { 0x7f36, 0 };
+static const unichar_t str_2f79[] = { 0x7f51, 0 };
+static const unichar_t str_2f7a[] = { 0x7f8a, 0 };
+static const unichar_t str_2f7b[] = { 0x7fbd, 0 };
+static const unichar_t str_2f7c[] = { 0x8001, 0 };
+static const unichar_t str_2f7d[] = { 0x800c, 0 };
+static const unichar_t str_2f7e[] = { 0x8012, 0 };
+static const unichar_t str_2f7f[] = { 0x8033, 0 };
+static const unichar_t str_2f80[] = { 0x807f, 0 };
+static const unichar_t str_2f81[] = { 0x8089, 0 };
+static const unichar_t str_2f82[] = { 0x81e3, 0 };
+static const unichar_t str_2f83[] = { 0x81ea, 0 };
+static const unichar_t str_2f84[] = { 0x81f3, 0 };
+static const unichar_t str_2f85[] = { 0x81fc, 0 };
+static const unichar_t str_2f86[] = { 0x820c, 0 };
+static const unichar_t str_2f87[] = { 0x821b, 0 };
+static const unichar_t str_2f88[] = { 0x821f, 0 };
+static const unichar_t str_2f89[] = { 0x826e, 0 };
+static const unichar_t str_2f8a[] = { 0x8272, 0 };
+static const unichar_t str_2f8b[] = { 0x8278, 0 };
+static const unichar_t str_2f8c[] = { 0x864d, 0 };
+static const unichar_t str_2f8d[] = { 0x866b, 0 };
+static const unichar_t str_2f8e[] = { 0x8840, 0 };
+static const unichar_t str_2f8f[] = { 0x884c, 0 };
+static const unichar_t str_2f90[] = { 0x8863, 0 };
+static const unichar_t str_2f91[] = { 0x897e, 0 };
+static const unichar_t str_2f92[] = { 0x898b, 0 };
+static const unichar_t str_2f93[] = { 0x89d2, 0 };
+static const unichar_t str_2f94[] = { 0x8a00, 0 };
+static const unichar_t str_2f95[] = { 0x8c37, 0 };
+static const unichar_t str_2f96[] = { 0x8c46, 0 };
+static const unichar_t str_2f97[] = { 0x8c55, 0 };
+static const unichar_t str_2f98[] = { 0x8c78, 0 };
+static const unichar_t str_2f99[] = { 0x8c9d, 0 };
+static const unichar_t str_2f9a[] = { 0x8d64, 0 };
+static const unichar_t str_2f9b[] = { 0x8d70, 0 };
+static const unichar_t str_2f9c[] = { 0x8db3, 0 };
+static const unichar_t str_2f9d[] = { 0x8eab, 0 };
+static const unichar_t str_2f9e[] = { 0x8eca, 0 };
+static const unichar_t str_2f9f[] = { 0x8f9b, 0 };
+static const unichar_t str_2fa0[] = { 0x8fb0, 0 };
+static const unichar_t str_2fa1[] = { 0x8fb5, 0 };
+static const unichar_t str_2fa2[] = { 0x9091, 0 };
+static const unichar_t str_2fa3[] = { 0x9149, 0 };
+static const unichar_t str_2fa4[] = { 0x91c6, 0 };
+static const unichar_t str_2fa5[] = { 0x91cc, 0 };
+static const unichar_t str_2fa6[] = { 0x91d1, 0 };
+static const unichar_t str_2fa7[] = { 0x9577, 0 };
+static const unichar_t str_2fa8[] = { 0x9580, 0 };
+static const unichar_t str_2fa9[] = { 0x961c, 0 };
+static const unichar_t str_2faa[] = { 0x96b6, 0 };
+static const unichar_t str_2fab[] = { 0x96b9, 0 };
+static const unichar_t str_2fac[] = { 0x96e8, 0 };
+static const unichar_t str_2fad[] = { 0x9751, 0 };
+static const unichar_t str_2fae[] = { 0x975e, 0 };
+static const unichar_t str_2faf[] = { 0x9762, 0 };
+static const unichar_t str_2fb0[] = { 0x9769, 0 };
+static const unichar_t str_2fb1[] = { 0x97cb, 0 };
+static const unichar_t str_2fb2[] = { 0x97ed, 0 };
+static const unichar_t str_2fb3[] = { 0x97f3, 0 };
+static const unichar_t str_2fb4[] = { 0x9801, 0 };
+static const unichar_t str_2fb5[] = { 0x98a8, 0 };
+static const unichar_t str_2fb6[] = { 0x98db, 0 };
+static const unichar_t str_2fb7[] = { 0x98df, 0 };
+static const unichar_t str_2fb8[] = { 0x9996, 0 };
+static const unichar_t str_2fb9[] = { 0x9999, 0 };
+static const unichar_t str_2fba[] = { 0x99ac, 0 };
+static const unichar_t str_2fbb[] = { 0x9aa8, 0 };
+static const unichar_t str_2fbc[] = { 0x9ad8, 0 };
+static const unichar_t str_2fbd[] = { 0x9adf, 0 };
+static const unichar_t str_2fbe[] = { 0x9b25, 0 };
+static const unichar_t str_2fbf[] = { 0x9b2f, 0 };
+static const unichar_t str_2fc0[] = { 0x9b32, 0 };
+static const unichar_t str_2fc1[] = { 0x9b3c, 0 };
+static const unichar_t str_2fc2[] = { 0x9b5a, 0 };
+static const unichar_t str_2fc3[] = { 0x9ce5, 0 };
+static const unichar_t str_2fc4[] = { 0x9e75, 0 };
+static const unichar_t str_2fc5[] = { 0x9e7f, 0 };
+static const unichar_t str_2fc6[] = { 0x9ea5, 0 };
+static const unichar_t str_2fc7[] = { 0x9ebb, 0 };
+static const unichar_t str_2fc8[] = { 0x9ec3, 0 };
+static const unichar_t str_2fc9[] = { 0x9ecd, 0 };
+static const unichar_t str_2fca[] = { 0x9ed1, 0 };
+static const unichar_t str_2fcb[] = { 0x9ef9, 0 };
+static const unichar_t str_2fcc[] = { 0x9efd, 0 };
+static const unichar_t str_2fcd[] = { 0x9f0e, 0 };
+static const unichar_t str_2fce[] = { 0x9f13, 0 };
+static const unichar_t str_2fcf[] = { 0x9f20, 0 };
+static const unichar_t str_2fd0[] = { 0x9f3b, 0 };
+static const unichar_t str_2fd1[] = { 0x9f4a, 0 };
+static const unichar_t str_2fd2[] = { 0x9f52, 0 };
+static const unichar_t str_2fd3[] = { 0x9f8d, 0 };
+static const unichar_t str_2fd4[] = { 0x9f9c, 0 };
+static const unichar_t str_2fd5[] = { 0x9fa0, 0 };
+static const unichar_t str_3000[] = { 0x0020, 0 };
+static const unichar_t str_3001[] = { 0x002c, 0 };
+static const unichar_t str_3008[] = { 0x003c, 0 };
+static const unichar_t str_3009[] = { 0x003e, 0 };
+static const unichar_t str_300a[] = { 0x00ab, 0 };
+static const unichar_t str_300b[] = { 0x00bb, 0 };
+static const unichar_t str_3036[] = { 0x3012, 0 };
+static const unichar_t str_3038[] = { 0x5341, 0 };
+static const unichar_t str_3039[] = { 0x5344, 0 };
+static const unichar_t str_303a[] = { 0x5345, 0 };
+static const unichar_t str_304c[] = { 0x304b, 0x3099, 0 };
+static const unichar_t str_304e[] = { 0x304d, 0x3099, 0 };
+static const unichar_t str_3050[] = { 0x304f, 0x3099, 0 };
+static const unichar_t str_3052[] = { 0x3051, 0x3099, 0 };
+static const unichar_t str_3054[] = { 0x3053, 0x3099, 0 };
+static const unichar_t str_3056[] = { 0x3055, 0x3099, 0 };
+static const unichar_t str_3058[] = { 0x3057, 0x3099, 0 };
+static const unichar_t str_305a[] = { 0x3059, 0x3099, 0 };
+static const unichar_t str_305c[] = { 0x305b, 0x3099, 0 };
+static const unichar_t str_305e[] = { 0x305d, 0x3099, 0 };
+static const unichar_t str_3060[] = { 0x305f, 0x3099, 0 };
+static const unichar_t str_3062[] = { 0x3061, 0x3099, 0 };
+static const unichar_t str_3065[] = { 0x3064, 0x3099, 0 };
+static const unichar_t str_3067[] = { 0x3066, 0x3099, 0 };
+static const unichar_t str_3069[] = { 0x3068, 0x3099, 0 };
+static const unichar_t str_3070[] = { 0x306f, 0x3099, 0 };
+static const unichar_t str_3071[] = { 0x306f, 0x309a, 0 };
+static const unichar_t str_3073[] = { 0x3072, 0x3099, 0 };
+static const unichar_t str_3074[] = { 0x3072, 0x309a, 0 };
+static const unichar_t str_3076[] = { 0x3075, 0x3099, 0 };
+static const unichar_t str_3077[] = { 0x3075, 0x309a, 0 };
+static const unichar_t str_3079[] = { 0x3078, 0x3099, 0 };
+static const unichar_t str_307a[] = { 0x3078, 0x309a, 0 };
+static const unichar_t str_307c[] = { 0x307b, 0x3099, 0 };
+static const unichar_t str_307d[] = { 0x307b, 0x309a, 0 };
+static const unichar_t str_3094[] = { 0x3046, 0x3099, 0 };
+static const unichar_t str_309b[] = { 0x0020, 0x3099, 0 };
+static const unichar_t str_309c[] = { 0x0020, 0x309a, 0 };
+static const unichar_t str_309e[] = { 0x309d, 0x3099, 0 };
+static const unichar_t str_309f[] = { 0x3088, 0x308a, 0 };
+static const unichar_t str_30ac[] = { 0x30ab, 0x3099, 0 };
+static const unichar_t str_30ae[] = { 0x30ad, 0x3099, 0 };
+static const unichar_t str_30b0[] = { 0x30af, 0x3099, 0 };
+static const unichar_t str_30b2[] = { 0x30b1, 0x3099, 0 };
+static const unichar_t str_30b4[] = { 0x30b3, 0x3099, 0 };
+static const unichar_t str_30b6[] = { 0x30b5, 0x3099, 0 };
+static const unichar_t str_30b8[] = { 0x30b7, 0x3099, 0 };
+static const unichar_t str_30ba[] = { 0x30b9, 0x3099, 0 };
+static const unichar_t str_30bc[] = { 0x30bb, 0x3099, 0 };
+static const unichar_t str_30be[] = { 0x30bd, 0x3099, 0 };
+static const unichar_t str_30c0[] = { 0x30bf, 0x3099, 0 };
+static const unichar_t str_30c2[] = { 0x30c1, 0x3099, 0 };
+static const unichar_t str_30c5[] = { 0x30c4, 0x3099, 0 };
+static const unichar_t str_30c7[] = { 0x30c6, 0x3099, 0 };
+static const unichar_t str_30c9[] = { 0x30c8, 0x3099, 0 };
+static const unichar_t str_30d0[] = { 0x30cf, 0x3099, 0 };
+static const unichar_t str_30d1[] = { 0x30cf, 0x309a, 0 };
+static const unichar_t str_30d3[] = { 0x30d2, 0x3099, 0 };
+static const unichar_t str_30d4[] = { 0x30d2, 0x309a, 0 };
+static const unichar_t str_30d6[] = { 0x30d5, 0x3099, 0 };
+static const unichar_t str_30d7[] = { 0x30d5, 0x309a, 0 };
+static const unichar_t str_30d9[] = { 0x30d8, 0x3099, 0 };
+static const unichar_t str_30da[] = { 0x30d8, 0x309a, 0 };
+static const unichar_t str_30dc[] = { 0x30db, 0x3099, 0 };
+static const unichar_t str_30dd[] = { 0x30db, 0x309a, 0 };
+static const unichar_t str_30f4[] = { 0x30a6, 0x3099, 0 };
+static const unichar_t str_30f7[] = { 0x30ef, 0x3099, 0 };
+static const unichar_t str_30f8[] = { 0x30f0, 0x3099, 0 };
+static const unichar_t str_30f9[] = { 0x30f1, 0x3099, 0 };
+static const unichar_t str_30fa[] = { 0x30f2, 0x3099, 0 };
+static const unichar_t str_30fe[] = { 0x30fd, 0x3099, 0 };
+static const unichar_t str_30ff[] = { 0x30b3, 0x30c8, 0 };
+static const unichar_t str_3131[] = { 0x1100, 0 };
+static const unichar_t str_3132[] = { 0x1101, 0 };
+static const unichar_t str_3133[] = { 0x11aa, 0 };
+static const unichar_t str_3134[] = { 0x1102, 0 };
+static const unichar_t str_3135[] = { 0x11ac, 0 };
+static const unichar_t str_3136[] = { 0x11ad, 0 };
+static const unichar_t str_3137[] = { 0x1103, 0 };
+static const unichar_t str_3138[] = { 0x1104, 0 };
+static const unichar_t str_3139[] = { 0x1105, 0 };
+static const unichar_t str_313a[] = { 0x11b0, 0 };
+static const unichar_t str_313b[] = { 0x11b1, 0 };
+static const unichar_t str_313c[] = { 0x11b2, 0 };
+static const unichar_t str_313d[] = { 0x11b3, 0 };
+static const unichar_t str_313e[] = { 0x11b4, 0 };
+static const unichar_t str_313f[] = { 0x11b5, 0 };
+static const unichar_t str_3140[] = { 0x111a, 0 };
+static const unichar_t str_3141[] = { 0x1106, 0 };
+static const unichar_t str_3142[] = { 0x1107, 0 };
+static const unichar_t str_3143[] = { 0x1108, 0 };
+static const unichar_t str_3144[] = { 0x1121, 0 };
+static const unichar_t str_3145[] = { 0x1109, 0 };
+static const unichar_t str_3146[] = { 0x110a, 0 };
+static const unichar_t str_3147[] = { 0x110b, 0 };
+static const unichar_t str_3148[] = { 0x110c, 0 };
+static const unichar_t str_3149[] = { 0x110d, 0 };
+static const unichar_t str_314a[] = { 0x110e, 0 };
+static const unichar_t str_314b[] = { 0x110f, 0 };
+static const unichar_t str_314c[] = { 0x1110, 0 };
+static const unichar_t str_314d[] = { 0x1111, 0 };
+static const unichar_t str_314e[] = { 0x1112, 0 };
+static const unichar_t str_314f[] = { 0x1161, 0 };
+static const unichar_t str_3150[] = { 0x1162, 0 };
+static const unichar_t str_3151[] = { 0x1163, 0 };
+static const unichar_t str_3152[] = { 0x1164, 0 };
+static const unichar_t str_3153[] = { 0x1165, 0 };
+static const unichar_t str_3154[] = { 0x1166, 0 };
+static const unichar_t str_3155[] = { 0x1167, 0 };
+static const unichar_t str_3156[] = { 0x1168, 0 };
+static const unichar_t str_3157[] = { 0x1169, 0 };
+static const unichar_t str_3158[] = { 0x116a, 0 };
+static const unichar_t str_3159[] = { 0x116b, 0 };
+static const unichar_t str_315a[] = { 0x116c, 0 };
+static const unichar_t str_315b[] = { 0x116d, 0 };
+static const unichar_t str_315c[] = { 0x116e, 0 };
+static const unichar_t str_315d[] = { 0x116f, 0 };
+static const unichar_t str_315e[] = { 0x1170, 0 };
+static const unichar_t str_315f[] = { 0x1171, 0 };
+static const unichar_t str_3160[] = { 0x1172, 0 };
+static const unichar_t str_3161[] = { 0x1173, 0 };
+static const unichar_t str_3162[] = { 0x1174, 0 };
+static const unichar_t str_3163[] = { 0x1175, 0 };
+static const unichar_t str_3164[] = { 0x1160, 0 };
+static const unichar_t str_3165[] = { 0x1114, 0 };
+static const unichar_t str_3166[] = { 0x1115, 0 };
+static const unichar_t str_3167[] = { 0x11c7, 0 };
+static const unichar_t str_3168[] = { 0x11c8, 0 };
+static const unichar_t str_3169[] = { 0x11cc, 0 };
+static const unichar_t str_316a[] = { 0x11ce, 0 };
+static const unichar_t str_316b[] = { 0x11d3, 0 };
+static const unichar_t str_316c[] = { 0x11d7, 0 };
+static const unichar_t str_316d[] = { 0x11d9, 0 };
+static const unichar_t str_316e[] = { 0x111c, 0 };
+static const unichar_t str_316f[] = { 0x11dd, 0 };
+static const unichar_t str_3170[] = { 0x11df, 0 };
+static const unichar_t str_3171[] = { 0x111d, 0 };
+static const unichar_t str_3172[] = { 0x111e, 0 };
+static const unichar_t str_3173[] = { 0x1120, 0 };
+static const unichar_t str_3174[] = { 0x1122, 0 };
+static const unichar_t str_3175[] = { 0x1123, 0 };
+static const unichar_t str_3176[] = { 0x1127, 0 };
+static const unichar_t str_3177[] = { 0x1129, 0 };
+static const unichar_t str_3178[] = { 0x112b, 0 };
+static const unichar_t str_3179[] = { 0x112c, 0 };
+static const unichar_t str_317a[] = { 0x112d, 0 };
+static const unichar_t str_317b[] = { 0x112e, 0 };
+static const unichar_t str_317c[] = { 0x112f, 0 };
+static const unichar_t str_317d[] = { 0x1132, 0 };
+static const unichar_t str_317e[] = { 0x1136, 0 };
+static const unichar_t str_317f[] = { 0x1140, 0 };
+static const unichar_t str_3180[] = { 0x1147, 0 };
+static const unichar_t str_3181[] = { 0x114c, 0 };
+static const unichar_t str_3182[] = { 0x11f1, 0 };
+static const unichar_t str_3183[] = { 0x11f2, 0 };
+static const unichar_t str_3184[] = { 0x1157, 0 };
+static const unichar_t str_3185[] = { 0x1158, 0 };
+static const unichar_t str_3186[] = { 0x1159, 0 };
+static const unichar_t str_3187[] = { 0x1184, 0 };
+static const unichar_t str_3188[] = { 0x1185, 0 };
+static const unichar_t str_3189[] = { 0x1188, 0 };
+static const unichar_t str_318a[] = { 0x1191, 0 };
+static const unichar_t str_318b[] = { 0x1192, 0 };
+static const unichar_t str_318c[] = { 0x1194, 0 };
+static const unichar_t str_318d[] = { 0x119e, 0 };
+static const unichar_t str_318e[] = { 0x11a1, 0 };
+static const unichar_t str_3192[] = { 0x4e00, 0 };
+static const unichar_t str_3193[] = { 0x4e8c, 0 };
+static const unichar_t str_3194[] = { 0x4e09, 0 };
+static const unichar_t str_3195[] = { 0x56db, 0 };
+static const unichar_t str_3196[] = { 0x4e0a, 0 };
+static const unichar_t str_3197[] = { 0x4e2d, 0 };
+static const unichar_t str_3198[] = { 0x4e0b, 0 };
+static const unichar_t str_3199[] = { 0x7532, 0 };
+static const unichar_t str_319a[] = { 0x4e59, 0 };
+static const unichar_t str_319b[] = { 0x4e19, 0 };
+static const unichar_t str_319c[] = { 0x4e01, 0 };
+static const unichar_t str_319d[] = { 0x5929, 0 };
+static const unichar_t str_319e[] = { 0x5730, 0 };
+static const unichar_t str_319f[] = { 0x4eba, 0 };
+static const unichar_t str_3200[] = { 0x0028, 0x1100, 0x0029, 0 };
+static const unichar_t str_3201[] = { 0x0028, 0x1102, 0x0029, 0 };
+static const unichar_t str_3202[] = { 0x0028, 0x1103, 0x0029, 0 };
+static const unichar_t str_3203[] = { 0x0028, 0x1105, 0x0029, 0 };
+static const unichar_t str_3204[] = { 0x0028, 0x1106, 0x0029, 0 };
+static const unichar_t str_3205[] = { 0x0028, 0x1107, 0x0029, 0 };
+static const unichar_t str_3206[] = { 0x0028, 0x1109, 0x0029, 0 };
+static const unichar_t str_3207[] = { 0x0028, 0x110b, 0x0029, 0 };
+static const unichar_t str_3208[] = { 0x0028, 0x110c, 0x0029, 0 };
+static const unichar_t str_3209[] = { 0x0028, 0x110e, 0x0029, 0 };
+static const unichar_t str_320a[] = { 0x0028, 0x110f, 0x0029, 0 };
+static const unichar_t str_320b[] = { 0x0028, 0x1110, 0x0029, 0 };
+static const unichar_t str_320c[] = { 0x0028, 0x1111, 0x0029, 0 };
+static const unichar_t str_320d[] = { 0x0028, 0x1112, 0x0029, 0 };
+static const unichar_t str_320e[] = { 0x0028, 0x1100, 0x1161, 0x0029, 0 };
+static const unichar_t str_320f[] = { 0x0028, 0x1102, 0x1161, 0x0029, 0 };
+static const unichar_t str_3210[] = { 0x0028, 0x1103, 0x1161, 0x0029, 0 };
+static const unichar_t str_3211[] = { 0x0028, 0x1105, 0x1161, 0x0029, 0 };
+static const unichar_t str_3212[] = { 0x0028, 0x1106, 0x1161, 0x0029, 0 };
+static const unichar_t str_3213[] = { 0x0028, 0x1107, 0x1161, 0x0029, 0 };
+static const unichar_t str_3214[] = { 0x0028, 0x1109, 0x1161, 0x0029, 0 };
+static const unichar_t str_3215[] = { 0x0028, 0x110b, 0x1161, 0x0029, 0 };
+static const unichar_t str_3216[] = { 0x0028, 0x110c, 0x1161, 0x0029, 0 };
+static const unichar_t str_3217[] = { 0x0028, 0x110e, 0x1161, 0x0029, 0 };
+static const unichar_t str_3218[] = { 0x0028, 0x110f, 0x1161, 0x0029, 0 };
+static const unichar_t str_3219[] = { 0x0028, 0x1110, 0x1161, 0x0029, 0 };
+static const unichar_t str_321a[] = { 0x0028, 0x1111, 0x1161, 0x0029, 0 };
+static const unichar_t str_321b[] = { 0x0028, 0x1112, 0x1161, 0x0029, 0 };
+static const unichar_t str_321c[] = { 0x0028, 0x110c, 0x116e, 0x0029, 0 };
+static const unichar_t str_321d[] = { 0x0028, 0x110b, 0x1169, 0x110c, 0x1165, 0x11ab, 0x0029, 0 };
+static const unichar_t str_321e[] = { 0x0028, 0x110b, 0x1169, 0x1112, 0x116e, 0x0029, 0 };
+static const unichar_t str_3220[] = { 0x0028, 0x4e00, 0x0029, 0 };
+static const unichar_t str_3221[] = { 0x0028, 0x4e8c, 0x0029, 0 };
+static const unichar_t str_3222[] = { 0x0028, 0x4e09, 0x0029, 0 };
+static const unichar_t str_3223[] = { 0x0028, 0x56db, 0x0029, 0 };
+static const unichar_t str_3224[] = { 0x0028, 0x4e94, 0x0029, 0 };
+static const unichar_t str_3225[] = { 0x0028, 0x516d, 0x0029, 0 };
+static const unichar_t str_3226[] = { 0x0028, 0x4e03, 0x0029, 0 };
+static const unichar_t str_3227[] = { 0x0028, 0x516b, 0x0029, 0 };
+static const unichar_t str_3228[] = { 0x0028, 0x4e5d, 0x0029, 0 };
+static const unichar_t str_3229[] = { 0x0028, 0x5341, 0x0029, 0 };
+static const unichar_t str_322a[] = { 0x0028, 0x6708, 0x0029, 0 };
+static const unichar_t str_322b[] = { 0x0028, 0x706b, 0x0029, 0 };
+static const unichar_t str_322c[] = { 0x0028, 0x6c34, 0x0029, 0 };
+static const unichar_t str_322d[] = { 0x0028, 0x6728, 0x0029, 0 };
+static const unichar_t str_322e[] = { 0x0028, 0x91d1, 0x0029, 0 };
+static const unichar_t str_322f[] = { 0x0028, 0x571f, 0x0029, 0 };
+static const unichar_t str_3230[] = { 0x0028, 0x65e5, 0x0029, 0 };
+static const unichar_t str_3231[] = { 0x0028, 0x682a, 0x0029, 0 };
+static const unichar_t str_3232[] = { 0x0028, 0x6709, 0x0029, 0 };
+static const unichar_t str_3233[] = { 0x0028, 0x793e, 0x0029, 0 };
+static const unichar_t str_3234[] = { 0x0028, 0x540d, 0x0029, 0 };
+static const unichar_t str_3235[] = { 0x0028, 0x7279, 0x0029, 0 };
+static const unichar_t str_3236[] = { 0x0028, 0x8ca1, 0x0029, 0 };
+static const unichar_t str_3237[] = { 0x0028, 0x795d, 0x0029, 0 };
+static const unichar_t str_3238[] = { 0x0028, 0x52b4, 0x0029, 0 };
+static const unichar_t str_3239[] = { 0x0028, 0x4ee3, 0x0029, 0 };
+static const unichar_t str_323a[] = { 0x0028, 0x547c, 0x0029, 0 };
+static const unichar_t str_323b[] = { 0x0028, 0x5b66, 0x0029, 0 };
+static const unichar_t str_323c[] = { 0x0028, 0x76e3, 0x0029, 0 };
+static const unichar_t str_323d[] = { 0x0028, 0x4f01, 0x0029, 0 };
+static const unichar_t str_323e[] = { 0x0028, 0x8cc7, 0x0029, 0 };
+static const unichar_t str_323f[] = { 0x0028, 0x5354, 0x0029, 0 };
+static const unichar_t str_3240[] = { 0x0028, 0x796d, 0x0029, 0 };
+static const unichar_t str_3241[] = { 0x0028, 0x4f11, 0x0029, 0 };
+static const unichar_t str_3242[] = { 0x0028, 0x81ea, 0x0029, 0 };
+static const unichar_t str_3243[] = { 0x0028, 0x81f3, 0x0029, 0 };
+static const unichar_t str_3244[] = { 0x554f, 0x20dd, 0 };
+static const unichar_t str_3245[] = { 0x5e7c, 0x20dd, 0 };
+static const unichar_t str_3246[] = { 0x6587, 0x20dd, 0 };
+static const unichar_t str_3247[] = { 0x7b8f, 0x20dd, 0 };
+static const unichar_t str_3250[] = { 0x0050, 0x0054, 0x0045, 0 };
+static const unichar_t str_3251[] = { 0x0032, 0x0031, 0x20dd, 0 };
+static const unichar_t str_3252[] = { 0x0032, 0x0032, 0x20dd, 0 };
+static const unichar_t str_3253[] = { 0x0032, 0x0033, 0x20dd, 0 };
+static const unichar_t str_3254[] = { 0x0032, 0x0034, 0x20dd, 0 };
+static const unichar_t str_3255[] = { 0x0032, 0x0035, 0x20dd, 0 };
+static const unichar_t str_3256[] = { 0x0032, 0x0036, 0x20dd, 0 };
+static const unichar_t str_3257[] = { 0x0032, 0x0037, 0x20dd, 0 };
+static const unichar_t str_3258[] = { 0x0032, 0x0038, 0x20dd, 0 };
+static const unichar_t str_3259[] = { 0x0032, 0x0039, 0x20dd, 0 };
+static const unichar_t str_325a[] = { 0x0033, 0x0030, 0x20dd, 0 };
+static const unichar_t str_325b[] = { 0x0033, 0x0031, 0x20dd, 0 };
+static const unichar_t str_325c[] = { 0x0033, 0x0032, 0x20dd, 0 };
+static const unichar_t str_325d[] = { 0x0033, 0x0033, 0x20dd, 0 };
+static const unichar_t str_325e[] = { 0x0033, 0x0034, 0x20dd, 0 };
+static const unichar_t str_325f[] = { 0x0033, 0x0035, 0x20dd, 0 };
+static const unichar_t str_3260[] = { 0x1100, 0x20dd, 0 };
+static const unichar_t str_3261[] = { 0x1102, 0x20dd, 0 };
+static const unichar_t str_3262[] = { 0x1103, 0x20dd, 0 };
+static const unichar_t str_3263[] = { 0x1105, 0x20dd, 0 };
+static const unichar_t str_3264[] = { 0x1106, 0x20dd, 0 };
+static const unichar_t str_3265[] = { 0x1107, 0x20dd, 0 };
+static const unichar_t str_3266[] = { 0x1109, 0x20dd, 0 };
+static const unichar_t str_3267[] = { 0x110b, 0x20dd, 0 };
+static const unichar_t str_3268[] = { 0x110c, 0x20dd, 0 };
+static const unichar_t str_3269[] = { 0x110e, 0x20dd, 0 };
+static const unichar_t str_326a[] = { 0x110f, 0x20dd, 0 };
+static const unichar_t str_326b[] = { 0x1110, 0x20dd, 0 };
+static const unichar_t str_326c[] = { 0x1111, 0x20dd, 0 };
+static const unichar_t str_326d[] = { 0x1112, 0x20dd, 0 };
+static const unichar_t str_326e[] = { 0x1100, 0x1161, 0x20dd, 0 };
+static const unichar_t str_326f[] = { 0x1102, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3270[] = { 0x1103, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3271[] = { 0x1105, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3272[] = { 0x1106, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3273[] = { 0x1107, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3274[] = { 0x1109, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3275[] = { 0x110b, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3276[] = { 0x110c, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3277[] = { 0x110e, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3278[] = { 0x110f, 0x1161, 0x20dd, 0 };
+static const unichar_t str_3279[] = { 0x1110, 0x1161, 0x20dd, 0 };
+static const unichar_t str_327a[] = { 0x1111, 0x1161, 0x20dd, 0 };
+static const unichar_t str_327b[] = { 0x1112, 0x1161, 0x20dd, 0 };
+static const unichar_t str_327c[] = { 0x110e, 0x1161, 0x11b7, 0x1100, 0x1169, 0x20dd, 0 };
+static const unichar_t str_327d[] = { 0x110c, 0x116e, 0x110b, 0x1174, 0x20dd, 0 };
+static const unichar_t str_327e[] = { 0x110b, 0x116e, 0x20dd, 0 };
+static const unichar_t str_3280[] = { 0x4e00, 0x20dd, 0 };
+static const unichar_t str_3281[] = { 0x4e8c, 0x20dd, 0 };
+static const unichar_t str_3282[] = { 0x4e09, 0x20dd, 0 };
+static const unichar_t str_3283[] = { 0x56db, 0x20dd, 0 };
+static const unichar_t str_3284[] = { 0x4e94, 0x20dd, 0 };
+static const unichar_t str_3285[] = { 0x516d, 0x20dd, 0 };
+static const unichar_t str_3286[] = { 0x4e03, 0x20dd, 0 };
+static const unichar_t str_3287[] = { 0x516b, 0x20dd, 0 };
+static const unichar_t str_3288[] = { 0x4e5d, 0x20dd, 0 };
+static const unichar_t str_3289[] = { 0x5341, 0x20dd, 0 };
+static const unichar_t str_328a[] = { 0x6708, 0x20dd, 0 };
+static const unichar_t str_328b[] = { 0x706b, 0x20dd, 0 };
+static const unichar_t str_328c[] = { 0x6c34, 0x20dd, 0 };
+static const unichar_t str_328d[] = { 0x6728, 0x20dd, 0 };
+static const unichar_t str_328e[] = { 0x91d1, 0x20dd, 0 };
+static const unichar_t str_328f[] = { 0x571f, 0x20dd, 0 };
+static const unichar_t str_3290[] = { 0x65e5, 0x20dd, 0 };
+static const unichar_t str_3291[] = { 0x682a, 0x20dd, 0 };
+static const unichar_t str_3292[] = { 0x6709, 0x20dd, 0 };
+static const unichar_t str_3293[] = { 0x793e, 0x20dd, 0 };
+static const unichar_t str_3294[] = { 0x540d, 0x20dd, 0 };
+static const unichar_t str_3295[] = { 0x7279, 0x20dd, 0 };
+static const unichar_t str_3296[] = { 0x8ca1, 0x20dd, 0 };
+static const unichar_t str_3297[] = { 0x795d, 0x20dd, 0 };
+static const unichar_t str_3298[] = { 0x52b4, 0x20dd, 0 };
+static const unichar_t str_3299[] = { 0x79d8, 0x20dd, 0 };
+static const unichar_t str_329a[] = { 0x7537, 0x20dd, 0 };
+static const unichar_t str_329b[] = { 0x5973, 0x20dd, 0 };
+static const unichar_t str_329c[] = { 0x9069, 0x20dd, 0 };
+static const unichar_t str_329d[] = { 0x512a, 0x20dd, 0 };
+static const unichar_t str_329e[] = { 0x5370, 0x20dd, 0 };
+static const unichar_t str_329f[] = { 0x6ce8, 0x20dd, 0 };
+static const unichar_t str_32a0[] = { 0x9805, 0x20dd, 0 };
+static const unichar_t str_32a1[] = { 0x4f11, 0x20dd, 0 };
+static const unichar_t str_32a2[] = { 0x5199, 0x20dd, 0 };
+static const unichar_t str_32a3[] = { 0x6b63, 0x20dd, 0 };
+static const unichar_t str_32a4[] = { 0x4e0a, 0x20dd, 0 };
+static const unichar_t str_32a5[] = { 0x4e2d, 0x20dd, 0 };
+static const unichar_t str_32a6[] = { 0x4e0b, 0x20dd, 0 };
+static const unichar_t str_32a7[] = { 0x5de6, 0x20dd, 0 };
+static const unichar_t str_32a8[] = { 0x53f3, 0x20dd, 0 };
+static const unichar_t str_32a9[] = { 0x533b, 0x20dd, 0 };
+static const unichar_t str_32aa[] = { 0x5b97, 0x20dd, 0 };
+static const unichar_t str_32ab[] = { 0x5b66, 0x20dd, 0 };
+static const unichar_t str_32ac[] = { 0x76e3, 0x20dd, 0 };
+static const unichar_t str_32ad[] = { 0x4f01, 0x20dd, 0 };
+static const unichar_t str_32ae[] = { 0x8cc7, 0x20dd, 0 };
+static const unichar_t str_32af[] = { 0x5354, 0x20dd, 0 };
+static const unichar_t str_32b0[] = { 0x591c, 0x20dd, 0 };
+static const unichar_t str_32b1[] = { 0x0033, 0x0036, 0x20dd, 0 };
+static const unichar_t str_32b2[] = { 0x0033, 0x0037, 0x20dd, 0 };
+static const unichar_t str_32b3[] = { 0x0033, 0x0038, 0x20dd, 0 };
+static const unichar_t str_32b4[] = { 0x0033, 0x0039, 0x20dd, 0 };
+static const unichar_t str_32b5[] = { 0x0034, 0x0030, 0x20dd, 0 };
+static const unichar_t str_32b6[] = { 0x0034, 0x0031, 0x20dd, 0 };
+static const unichar_t str_32b7[] = { 0x0034, 0x0032, 0x20dd, 0 };
+static const unichar_t str_32b8[] = { 0x0034, 0x0033, 0x20dd, 0 };
+static const unichar_t str_32b9[] = { 0x0034, 0x0034, 0x20dd, 0 };
+static const unichar_t str_32ba[] = { 0x0034, 0x0035, 0x20dd, 0 };
+static const unichar_t str_32bb[] = { 0x0034, 0x0036, 0x20dd, 0 };
+static const unichar_t str_32bc[] = { 0x0034, 0x0037, 0x20dd, 0 };
+static const unichar_t str_32bd[] = { 0x0034, 0x0038, 0x20dd, 0 };
+static const unichar_t str_32be[] = { 0x0034, 0x0039, 0x20dd, 0 };
+static const unichar_t str_32bf[] = { 0x0035, 0x0030, 0x20dd, 0 };
+static const unichar_t str_32c0[] = { 0x0031, 0x6708, 0 };
+static const unichar_t str_32c1[] = { 0x0032, 0x6708, 0 };
+static const unichar_t str_32c2[] = { 0x0033, 0x6708, 0 };
+static const unichar_t str_32c3[] = { 0x0034, 0x6708, 0 };
+static const unichar_t str_32c4[] = { 0x0035, 0x6708, 0 };
+static const unichar_t str_32c5[] = { 0x0036, 0x6708, 0 };
+static const unichar_t str_32c6[] = { 0x0037, 0x6708, 0 };
+static const unichar_t str_32c7[] = { 0x0038, 0x6708, 0 };
+static const unichar_t str_32c8[] = { 0x0039, 0x6708, 0 };
+static const unichar_t str_32c9[] = { 0x0031, 0x0030, 0x6708, 0 };
+static const unichar_t str_32ca[] = { 0x0031, 0x0031, 0x6708, 0 };
+static const unichar_t str_32cb[] = { 0x0031, 0x0032, 0x6708, 0 };
+static const unichar_t str_32cc[] = { 0x0048, 0x0067, 0 };
+static const unichar_t str_32cd[] = { 0x0065, 0x0072, 0x0067, 0 };
+static const unichar_t str_32ce[] = { 0x0065, 0x0056, 0 };
+static const unichar_t str_32cf[] = { 0x004c, 0x0054, 0x0044, 0 };
+static const unichar_t str_32d0[] = { 0x30a2, 0x20dd, 0 };
+static const unichar_t str_32d1[] = { 0x30a4, 0x20dd, 0 };
+static const unichar_t str_32d2[] = { 0x30a6, 0x20dd, 0 };
+static const unichar_t str_32d3[] = { 0x30a8, 0x20dd, 0 };
+static const unichar_t str_32d4[] = { 0x30aa, 0x20dd, 0 };
+static const unichar_t str_32d5[] = { 0x30ab, 0x20dd, 0 };
+static const unichar_t str_32d6[] = { 0x30ad, 0x20dd, 0 };
+static const unichar_t str_32d7[] = { 0x30af, 0x20dd, 0 };
+static const unichar_t str_32d8[] = { 0x30b1, 0x20dd, 0 };
+static const unichar_t str_32d9[] = { 0x30b3, 0x20dd, 0 };
+static const unichar_t str_32da[] = { 0x30b5, 0x20dd, 0 };
+static const unichar_t str_32db[] = { 0x30b7, 0x20dd, 0 };
+static const unichar_t str_32dc[] = { 0x30b9, 0x20dd, 0 };
+static const unichar_t str_32dd[] = { 0x30bb, 0x20dd, 0 };
+static const unichar_t str_32de[] = { 0x30bd, 0x20dd, 0 };
+static const unichar_t str_32df[] = { 0x30bf, 0x20dd, 0 };
+static const unichar_t str_32e0[] = { 0x30c1, 0x20dd, 0 };
+static const unichar_t str_32e1[] = { 0x30c4, 0x20dd, 0 };
+static const unichar_t str_32e2[] = { 0x30c6, 0x20dd, 0 };
+static const unichar_t str_32e3[] = { 0x30c8, 0x20dd, 0 };
+static const unichar_t str_32e4[] = { 0x30ca, 0x20dd, 0 };
+static const unichar_t str_32e5[] = { 0x30cb, 0x20dd, 0 };
+static const unichar_t str_32e6[] = { 0x30cc, 0x20dd, 0 };
+static const unichar_t str_32e7[] = { 0x30cd, 0x20dd, 0 };
+static const unichar_t str_32e8[] = { 0x30ce, 0x20dd, 0 };
+static const unichar_t str_32e9[] = { 0x30cf, 0x20dd, 0 };
+static const unichar_t str_32ea[] = { 0x30d2, 0x20dd, 0 };
+static const unichar_t str_32eb[] = { 0x30d5, 0x20dd, 0 };
+static const unichar_t str_32ec[] = { 0x30d8, 0x20dd, 0 };
+static const unichar_t str_32ed[] = { 0x30db, 0x20dd, 0 };
+static const unichar_t str_32ee[] = { 0x30de, 0x20dd, 0 };
+static const unichar_t str_32ef[] = { 0x30df, 0x20dd, 0 };
+static const unichar_t str_32f0[] = { 0x30e0, 0x20dd, 0 };
+static const unichar_t str_32f1[] = { 0x30e1, 0x20dd, 0 };
+static const unichar_t str_32f2[] = { 0x30e2, 0x20dd, 0 };
+static const unichar_t str_32f3[] = { 0x30e4, 0x20dd, 0 };
+static const unichar_t str_32f4[] = { 0x30e6, 0x20dd, 0 };
+static const unichar_t str_32f5[] = { 0x30e8, 0x20dd, 0 };
+static const unichar_t str_32f6[] = { 0x30e9, 0x20dd, 0 };
+static const unichar_t str_32f7[] = { 0x30ea, 0x20dd, 0 };
+static const unichar_t str_32f8[] = { 0x30eb, 0x20dd, 0 };
+static const unichar_t str_32f9[] = { 0x30ec, 0x20dd, 0 };
+static const unichar_t str_32fa[] = { 0x30ed, 0x20dd, 0 };
+static const unichar_t str_32fb[] = { 0x30ef, 0x20dd, 0 };
+static const unichar_t str_32fc[] = { 0x30f0, 0x20dd, 0 };
+static const unichar_t str_32fd[] = { 0x30f1, 0x20dd, 0 };
+static const unichar_t str_32fe[] = { 0x30f2, 0x20dd, 0 };
+static const unichar_t str_3300[] = { 0x30a2, 0x30d1, 0x30fc, 0x30c8, 0 };
+static const unichar_t str_3301[] = { 0x30a2, 0x30eb, 0x30d5, 0x30a1, 0 };
+static const unichar_t str_3302[] = { 0x30a2, 0x30f3, 0x30da, 0x30a2, 0 };
+static const unichar_t str_3303[] = { 0x30a2, 0x30fc, 0x30eb, 0 };
+static const unichar_t str_3304[] = { 0x30a4, 0x30cb, 0x30f3, 0x30b0, 0 };
+static const unichar_t str_3305[] = { 0x30a4, 0x30f3, 0x30c1, 0 };
+static const unichar_t str_3306[] = { 0x30a6, 0x30a9, 0x30f3, 0 };
+static const unichar_t str_3307[] = { 0x30a8, 0x30b9, 0x30af, 0x30fc, 0x30c9, 0 };
+static const unichar_t str_3308[] = { 0x30a8, 0x30fc, 0x30ab, 0x30fc, 0 };
+static const unichar_t str_3309[] = { 0x30aa, 0x30f3, 0x30b9, 0 };
+static const unichar_t str_330a[] = { 0x30aa, 0x30fc, 0x30e0, 0 };
+static const unichar_t str_330b[] = { 0x30ab, 0x30a4, 0x30ea, 0 };
+static const unichar_t str_330c[] = { 0x30ab, 0x30e9, 0x30c3, 0x30c8, 0 };
+static const unichar_t str_330d[] = { 0x30ab, 0x30ed, 0x30ea, 0x30fc, 0 };
+static const unichar_t str_330e[] = { 0x30ac, 0x30ed, 0x30f3, 0 };
+static const unichar_t str_330f[] = { 0x30ac, 0x30f3, 0x30de, 0 };
+static const unichar_t str_3310[] = { 0x30ae, 0x30ac, 0 };
+static const unichar_t str_3311[] = { 0x30ae, 0x30cb, 0x30fc, 0 };
+static const unichar_t str_3312[] = { 0x30ad, 0x30e5, 0x30ea, 0x30fc, 0 };
+static const unichar_t str_3313[] = { 0x30ae, 0x30eb, 0x30c0, 0x30fc, 0 };
+static const unichar_t str_3314[] = { 0x30ad, 0x30ed, 0 };
+static const unichar_t str_3315[] = { 0x30ad, 0x30ed, 0x30b0, 0x30e9, 0x30e0, 0 };
+static const unichar_t str_3316[] = { 0x30ad, 0x30ed, 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0 };
+static const unichar_t str_3317[] = { 0x30ad, 0x30ed, 0x30ef, 0x30c3, 0x30c8, 0 };
+static const unichar_t str_3318[] = { 0x30b0, 0x30e9, 0x30e0, 0 };
+static const unichar_t str_3319[] = { 0x30b0, 0x30e9, 0x30e0, 0x30c8, 0x30f3, 0 };
+static const unichar_t str_331a[] = { 0x30af, 0x30eb, 0x30bc, 0x30a4, 0x30ed, 0 };
+static const unichar_t str_331b[] = { 0x30af, 0x30ed, 0x30fc, 0x30cd, 0 };
+static const unichar_t str_331c[] = { 0x30b1, 0x30fc, 0x30b9, 0 };
+static const unichar_t str_331d[] = { 0x30b3, 0x30eb, 0x30ca, 0 };
+static const unichar_t str_331e[] = { 0x30b3, 0x30fc, 0x30dd, 0 };
+static const unichar_t str_331f[] = { 0x30b5, 0x30a4, 0x30af, 0x30eb, 0 };
+static const unichar_t str_3320[] = { 0x30b5, 0x30f3, 0x30c1, 0x30fc, 0x30e0, 0 };
+static const unichar_t str_3321[] = { 0x30b7, 0x30ea, 0x30f3, 0x30b0, 0 };
+static const unichar_t str_3322[] = { 0x30bb, 0x30f3, 0x30c1, 0 };
+static const unichar_t str_3323[] = { 0x30bb, 0x30f3, 0x30c8, 0 };
+static const unichar_t str_3324[] = { 0x30c0, 0x30fc, 0x30b9, 0 };
+static const unichar_t str_3325[] = { 0x30c7, 0x30b7, 0 };
+static const unichar_t str_3326[] = { 0x30c9, 0x30eb, 0 };
+static const unichar_t str_3327[] = { 0x30c8, 0x30f3, 0 };
+static const unichar_t str_3328[] = { 0x30ca, 0x30ce, 0 };
+static const unichar_t str_3329[] = { 0x30ce, 0x30c3, 0x30c8, 0 };
+static const unichar_t str_332a[] = { 0x30cf, 0x30a4, 0x30c4, 0 };
+static const unichar_t str_332b[] = { 0x30d1, 0x30fc, 0x30bb, 0x30f3, 0x30c8, 0 };
+static const unichar_t str_332c[] = { 0x30d1, 0x30fc, 0x30c4, 0 };
+static const unichar_t str_332d[] = { 0x30d0, 0x30fc, 0x30ec, 0x30eb, 0 };
+static const unichar_t str_332e[] = { 0x30d4, 0x30a2, 0x30b9, 0x30c8, 0x30eb, 0 };
+static const unichar_t str_332f[] = { 0x30d4, 0x30af, 0x30eb, 0 };
+static const unichar_t str_3330[] = { 0x30d4, 0x30b3, 0 };
+static const unichar_t str_3331[] = { 0x30d3, 0x30eb, 0 };
+static const unichar_t str_3332[] = { 0x30d5, 0x30a1, 0x30e9, 0x30c3, 0x30c9, 0 };
+static const unichar_t str_3333[] = { 0x30d5, 0x30a3, 0x30fc, 0x30c8, 0 };
+static const unichar_t str_3334[] = { 0x30d6, 0x30c3, 0x30b7, 0x30a7, 0x30eb, 0 };
+static const unichar_t str_3335[] = { 0x30d5, 0x30e9, 0x30f3, 0 };
+static const unichar_t str_3336[] = { 0x30d8, 0x30af, 0x30bf, 0x30fc, 0x30eb, 0 };
+static const unichar_t str_3337[] = { 0x30da, 0x30bd, 0 };
+static const unichar_t str_3338[] = { 0x30da, 0x30cb, 0x30d2, 0 };
+static const unichar_t str_3339[] = { 0x30d8, 0x30eb, 0x30c4, 0 };
+static const unichar_t str_333a[] = { 0x30da, 0x30f3, 0x30b9, 0 };
+static const unichar_t str_333b[] = { 0x30da, 0x30fc, 0x30b8, 0 };
+static const unichar_t str_333c[] = { 0x30d9, 0x30fc, 0x30bf, 0 };
+static const unichar_t str_333d[] = { 0x30dd, 0x30a4, 0x30f3, 0x30c8, 0 };
+static const unichar_t str_333e[] = { 0x30dc, 0x30eb, 0x30c8, 0 };
+static const unichar_t str_333f[] = { 0x30db, 0x30f3, 0 };
+static const unichar_t str_3340[] = { 0x30dd, 0x30f3, 0x30c9, 0 };
+static const unichar_t str_3341[] = { 0x30db, 0x30fc, 0x30eb, 0 };
+static const unichar_t str_3342[] = { 0x30db, 0x30fc, 0x30f3, 0 };
+static const unichar_t str_3343[] = { 0x30de, 0x30a4, 0x30af, 0x30ed, 0 };
+static const unichar_t str_3344[] = { 0x30de, 0x30a4, 0x30eb, 0 };
+static const unichar_t str_3345[] = { 0x30de, 0x30c3, 0x30cf, 0 };
+static const unichar_t str_3346[] = { 0x30de, 0x30eb, 0x30af, 0 };
+static const unichar_t str_3347[] = { 0x30de, 0x30f3, 0x30b7, 0x30e7, 0x30f3, 0 };
+static const unichar_t str_3348[] = { 0x30df, 0x30af, 0x30ed, 0x30f3, 0 };
+static const unichar_t str_3349[] = { 0x30df, 0x30ea, 0 };
+static const unichar_t str_334a[] = { 0x30df, 0x30ea, 0x30d0, 0x30fc, 0x30eb, 0 };
+static const unichar_t str_334b[] = { 0x30e1, 0x30ac, 0 };
+static const unichar_t str_334c[] = { 0x30e1, 0x30ac, 0x30c8, 0x30f3, 0 };
+static const unichar_t str_334d[] = { 0x30e1, 0x30fc, 0x30c8, 0x30eb, 0 };
+static const unichar_t str_334e[] = { 0x30e4, 0x30fc, 0x30c9, 0 };
+static const unichar_t str_334f[] = { 0x30e4, 0x30fc, 0x30eb, 0 };
+static const unichar_t str_3350[] = { 0x30e6, 0x30a2, 0x30f3, 0 };
+static const unichar_t str_3351[] = { 0x30ea, 0x30c3, 0x30c8, 0x30eb, 0 };
+static const unichar_t str_3352[] = { 0x30ea, 0x30e9, 0 };
+static const unichar_t str_3353[] = { 0x30eb, 0x30d4, 0x30fc, 0 };
+static const unichar_t str_3354[] = { 0x30eb, 0x30fc, 0x30d6, 0x30eb, 0 };
+static const unichar_t str_3355[] = { 0x30ec, 0x30e0, 0 };
+static const unichar_t str_3356[] = { 0x30ec, 0x30f3, 0x30c8, 0x30b2, 0x30f3, 0 };
+static const unichar_t str_3357[] = { 0x30ef, 0x30c3, 0x30c8, 0 };
+static const unichar_t str_3358[] = { 0x0030, 0x70b9, 0 };
+static const unichar_t str_3359[] = { 0x0031, 0x70b9, 0 };
+static const unichar_t str_335a[] = { 0x0032, 0x70b9, 0 };
+static const unichar_t str_335b[] = { 0x0033, 0x70b9, 0 };
+static const unichar_t str_335c[] = { 0x0034, 0x70b9, 0 };
+static const unichar_t str_335d[] = { 0x0035, 0x70b9, 0 };
+static const unichar_t str_335e[] = { 0x0036, 0x70b9, 0 };
+static const unichar_t str_335f[] = { 0x0037, 0x70b9, 0 };
+static const unichar_t str_3360[] = { 0x0038, 0x70b9, 0 };
+static const unichar_t str_3361[] = { 0x0039, 0x70b9, 0 };
+static const unichar_t str_3362[] = { 0x0031, 0x0030, 0x70b9, 0 };
+static const unichar_t str_3363[] = { 0x0031, 0x0031, 0x70b9, 0 };
+static const unichar_t str_3364[] = { 0x0031, 0x0032, 0x70b9, 0 };
+static const unichar_t str_3365[] = { 0x0031, 0x0033, 0x70b9, 0 };
+static const unichar_t str_3366[] = { 0x0031, 0x0034, 0x70b9, 0 };
+static const unichar_t str_3367[] = { 0x0031, 0x0035, 0x70b9, 0 };
+static const unichar_t str_3368[] = { 0x0031, 0x0036, 0x70b9, 0 };
+static const unichar_t str_3369[] = { 0x0031, 0x0037, 0x70b9, 0 };
+static const unichar_t str_336a[] = { 0x0031, 0x0038, 0x70b9, 0 };
+static const unichar_t str_336b[] = { 0x0031, 0x0039, 0x70b9, 0 };
+static const unichar_t str_336c[] = { 0x0032, 0x0030, 0x70b9, 0 };
+static const unichar_t str_336d[] = { 0x0032, 0x0031, 0x70b9, 0 };
+static const unichar_t str_336e[] = { 0x0032, 0x0032, 0x70b9, 0 };
+static const unichar_t str_336f[] = { 0x0032, 0x0033, 0x70b9, 0 };
+static const unichar_t str_3370[] = { 0x0032, 0x0034, 0x70b9, 0 };
+static const unichar_t str_3371[] = { 0x0068, 0x0050, 0x0061, 0 };
+static const unichar_t str_3372[] = { 0x0064, 0x0061, 0 };
+static const unichar_t str_3373[] = { 0x0041, 0x0055, 0 };
+static const unichar_t str_3374[] = { 0x0062, 0x0061, 0x0072, 0 };
+static const unichar_t str_3375[] = { 0x006f, 0x0056, 0 };
+static const unichar_t str_3376[] = { 0x0070, 0x0063, 0 };
+static const unichar_t str_3377[] = { 0x0064, 0x006d, 0 };
+static const unichar_t str_3378[] = { 0x0064, 0x006d, 0x00b2, 0 };
+static const unichar_t str_3379[] = { 0x0064, 0x006d, 0x00b3, 0 };
+static const unichar_t str_337a[] = { 0x0049, 0x0055, 0 };
+static const unichar_t str_337b[] = { 0x5e73, 0x6210, 0 };
+static const unichar_t str_337c[] = { 0x662d, 0x548c, 0 };
+static const unichar_t str_337d[] = { 0x5927, 0x6b63, 0 };
+static const unichar_t str_337e[] = { 0x660e, 0x6cbb, 0 };
+static const unichar_t str_337f[] = { 0x682a, 0x5f0f, 0x4f1a, 0x793e, 0 };
+static const unichar_t str_3380[] = { 0x0070, 0x0041, 0 };
+static const unichar_t str_3381[] = { 0x006e, 0x0041, 0 };
+static const unichar_t str_3382[] = { 0x03bc, 0x0041, 0 };
+static const unichar_t str_3383[] = { 0x006d, 0x0041, 0 };
+static const unichar_t str_3384[] = { 0x006b, 0x0041, 0 };
+static const unichar_t str_3385[] = { 0x004b, 0x0042, 0 };
+static const unichar_t str_3386[] = { 0x004d, 0x0042, 0 };
+static const unichar_t str_3387[] = { 0x0047, 0x0042, 0 };
+static const unichar_t str_3388[] = { 0x0063, 0x0061, 0x006c, 0 };
+static const unichar_t str_3389[] = { 0x006b, 0x0063, 0x0061, 0x006c, 0 };
+static const unichar_t str_338a[] = { 0x0070, 0x0046, 0 };
+static const unichar_t str_338b[] = { 0x006e, 0x0046, 0 };
+static const unichar_t str_338c[] = { 0x03bc, 0x0046, 0 };
+static const unichar_t str_338d[] = { 0x03bc, 0x0067, 0 };
+static const unichar_t str_338e[] = { 0x006d, 0x0067, 0 };
+static const unichar_t str_338f[] = { 0x006b, 0x0067, 0 };
+static const unichar_t str_3390[] = { 0x0048, 0x007a, 0 };
+static const unichar_t str_3391[] = { 0x006b, 0x0048, 0x007a, 0 };
+static const unichar_t str_3392[] = { 0x004d, 0x0048, 0x007a, 0 };
+static const unichar_t str_3393[] = { 0x0047, 0x0048, 0x007a, 0 };
+static const unichar_t str_3394[] = { 0x0054, 0x0048, 0x007a, 0 };
+static const unichar_t str_3395[] = { 0x03bc, 0x2113, 0 };
+static const unichar_t str_3396[] = { 0x006d, 0x2113, 0 };
+static const unichar_t str_3397[] = { 0x0064, 0x2113, 0 };
+static const unichar_t str_3398[] = { 0x006b, 0x2113, 0 };
+static const unichar_t str_3399[] = { 0x0066, 0x006d, 0 };
+static const unichar_t str_339a[] = { 0x006e, 0x006d, 0 };
+static const unichar_t str_339b[] = { 0x03bc, 0x006d, 0 };
+static const unichar_t str_339c[] = { 0x006d, 0x006d, 0 };
+static const unichar_t str_339d[] = { 0x0063, 0x006d, 0 };
+static const unichar_t str_339e[] = { 0x006b, 0x006d, 0 };
+static const unichar_t str_339f[] = { 0x006d, 0x006d, 0x00b2, 0 };
+static const unichar_t str_33a0[] = { 0x0063, 0x006d, 0x00b2, 0 };
+static const unichar_t str_33a1[] = { 0x006d, 0x00b2, 0 };
+static const unichar_t str_33a2[] = { 0x006b, 0x006d, 0x00b2, 0 };
+static const unichar_t str_33a3[] = { 0x006d, 0x006d, 0x00b3, 0 };
+static const unichar_t str_33a4[] = { 0x0063, 0x006d, 0x00b3, 0 };
+static const unichar_t str_33a5[] = { 0x006d, 0x00b3, 0 };
+static const unichar_t str_33a6[] = { 0x006b, 0x006d, 0x00b3, 0 };
+static const unichar_t str_33a7[] = { 0x006d, 0x2215, 0x0073, 0 };
+static const unichar_t str_33a8[] = { 0x006d, 0x2215, 0x0073, 0x00b2, 0 };
+static const unichar_t str_33a9[] = { 0x0050, 0x0061, 0 };
+static const unichar_t str_33aa[] = { 0x006b, 0x0050, 0x0061, 0 };
+static const unichar_t str_33ab[] = { 0x004d, 0x0050, 0x0061, 0 };
+static const unichar_t str_33ac[] = { 0x0047, 0x0050, 0x0061, 0 };
+static const unichar_t str_33ad[] = { 0x0072, 0x0061, 0x0064, 0 };
+static const unichar_t str_33ae[] = { 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0 };
+static const unichar_t str_33af[] = { 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00b2, 0 };
+static const unichar_t str_33b0[] = { 0x0070, 0x0073, 0 };
+static const unichar_t str_33b1[] = { 0x006e, 0x0073, 0 };
+static const unichar_t str_33b2[] = { 0x03bc, 0x0073, 0 };
+static const unichar_t str_33b3[] = { 0x006d, 0x0073, 0 };
+static const unichar_t str_33b4[] = { 0x0070, 0x0056, 0 };
+static const unichar_t str_33b5[] = { 0x006e, 0x0056, 0 };
+static const unichar_t str_33b6[] = { 0x03bc, 0x0056, 0 };
+static const unichar_t str_33b7[] = { 0x006d, 0x0056, 0 };
+static const unichar_t str_33b8[] = { 0x006b, 0x0056, 0 };
+static const unichar_t str_33b9[] = { 0x004d, 0x0056, 0 };
+static const unichar_t str_33ba[] = { 0x0070, 0x0057, 0 };
+static const unichar_t str_33bb[] = { 0x006e, 0x0057, 0 };
+static const unichar_t str_33bc[] = { 0x03bc, 0x0057, 0 };
+static const unichar_t str_33bd[] = { 0x006d, 0x0057, 0 };
+static const unichar_t str_33be[] = { 0x006b, 0x0057, 0 };
+static const unichar_t str_33bf[] = { 0x004d, 0x0057, 0 };
+static const unichar_t str_33c0[] = { 0x006b, 0x03a9, 0 };
+static const unichar_t str_33c1[] = { 0x004d, 0x03a9, 0 };
+static const unichar_t str_33c2[] = { 0x0061, 0x002e, 0x006d, 0x002e, 0 };
+static const unichar_t str_33c3[] = { 0x0042, 0x0071, 0 };
+static const unichar_t str_33c4[] = { 0x0063, 0x0063, 0 };
+static const unichar_t str_33c5[] = { 0x0063, 0x0064, 0 };
+static const unichar_t str_33c6[] = { 0x0043, 0x2215, 0x006b, 0x0067, 0 };
+static const unichar_t str_33c7[] = { 0x0043, 0x006f, 0x002e, 0 };
+static const unichar_t str_33c8[] = { 0x0064, 0x0042, 0 };
+static const unichar_t str_33c9[] = { 0x0047, 0x0079, 0 };
+static const unichar_t str_33ca[] = { 0x0068, 0x0061, 0 };
+static const unichar_t str_33cb[] = { 0x0048, 0x0050, 0 };
+static const unichar_t str_33cc[] = { 0x0069, 0x006e, 0 };
+static const unichar_t str_33cd[] = { 0x004b, 0x004b, 0 };
+static const unichar_t str_33ce[] = { 0x004b, 0x004d, 0 };
+static const unichar_t str_33cf[] = { 0x006b, 0x0074, 0 };
+static const unichar_t str_33d0[] = { 0x006c, 0x006d, 0 };
+static const unichar_t str_33d1[] = { 0x006c, 0x006e, 0 };
+static const unichar_t str_33d2[] = { 0x006c, 0x006f, 0x0067, 0 };
+static const unichar_t str_33d3[] = { 0x006c, 0x0078, 0 };
+static const unichar_t str_33d4[] = { 0x006d, 0x0062, 0 };
+static const unichar_t str_33d5[] = { 0x006d, 0x0069, 0x006c, 0 };
+static const unichar_t str_33d6[] = { 0x006d, 0x006f, 0x006c, 0 };
+static const unichar_t str_33d7[] = { 0x0050, 0x0048, 0 };
+static const unichar_t str_33d8[] = { 0x0070, 0x002e, 0x006d, 0x002e, 0 };
+static const unichar_t str_33d9[] = { 0x0050, 0x0050, 0x004d, 0 };
+static const unichar_t str_33da[] = { 0x0050, 0x0052, 0 };
+static const unichar_t str_33db[] = { 0x0073, 0x0072, 0 };
+static const unichar_t str_33dc[] = { 0x0053, 0x0076, 0 };
+static const unichar_t str_33dd[] = { 0x0057, 0x0062, 0 };
+static const unichar_t str_33de[] = { 0x0056, 0x2215, 0x006d, 0 };
+static const unichar_t str_33df[] = { 0x0041, 0x2215, 0x006d, 0 };
+static const unichar_t str_33e0[] = { 0x0031, 0x65e5, 0 };
+static const unichar_t str_33e1[] = { 0x0032, 0x65e5, 0 };
+static const unichar_t str_33e2[] = { 0x0033, 0x65e5, 0 };
+static const unichar_t str_33e3[] = { 0x0034, 0x65e5, 0 };
+static const unichar_t str_33e4[] = { 0x0035, 0x65e5, 0 };
+static const unichar_t str_33e5[] = { 0x0036, 0x65e5, 0 };
+static const unichar_t str_33e6[] = { 0x0037, 0x65e5, 0 };
+static const unichar_t str_33e7[] = { 0x0038, 0x65e5, 0 };
+static const unichar_t str_33e8[] = { 0x0039, 0x65e5, 0 };
+static const unichar_t str_33e9[] = { 0x0031, 0x0030, 0x65e5, 0 };
+static const unichar_t str_33ea[] = { 0x0031, 0x0031, 0x65e5, 0 };
+static const unichar_t str_33eb[] = { 0x0031, 0x0032, 0x65e5, 0 };
+static const unichar_t str_33ec[] = { 0x0031, 0x0033, 0x65e5, 0 };
+static const unichar_t str_33ed[] = { 0x0031, 0x0034, 0x65e5, 0 };
+static const unichar_t str_33ee[] = { 0x0031, 0x0035, 0x65e5, 0 };
+static const unichar_t str_33ef[] = { 0x0031, 0x0036, 0x65e5, 0 };
+static const unichar_t str_33f0[] = { 0x0031, 0x0037, 0x65e5, 0 };
+static const unichar_t str_33f1[] = { 0x0031, 0x0038, 0x65e5, 0 };
+static const unichar_t str_33f2[] = { 0x0031, 0x0039, 0x65e5, 0 };
+static const unichar_t str_33f3[] = { 0x0032, 0x0030, 0x65e5, 0 };
+static const unichar_t str_33f4[] = { 0x0032, 0x0031, 0x65e5, 0 };
+static const unichar_t str_33f5[] = { 0x0032, 0x0032, 0x65e5, 0 };
+static const unichar_t str_33f6[] = { 0x0032, 0x0033, 0x65e5, 0 };
+static const unichar_t str_33f7[] = { 0x0032, 0x0034, 0x65e5, 0 };
+static const unichar_t str_33f8[] = { 0x0032, 0x0035, 0x65e5, 0 };
+static const unichar_t str_33f9[] = { 0x0032, 0x0036, 0x65e5, 0 };
+static const unichar_t str_33fa[] = { 0x0032, 0x0037, 0x65e5, 0 };
+static const unichar_t str_33fb[] = { 0x0032, 0x0038, 0x65e5, 0 };
+static const unichar_t str_33fc[] = { 0x0032, 0x0039, 0x65e5, 0 };
+static const unichar_t str_33fd[] = { 0x0033, 0x0030, 0x65e5, 0 };
+static const unichar_t str_33fe[] = { 0x0033, 0x0031, 0x65e5, 0 };
+static const unichar_t str_33ff[] = { 0x0067, 0x0061, 0x006c, 0 };
+static const unichar_t str_a770[] = { 0xa76f, 0 };
+static const unichar_t str_a7f8[] = { 0x0126, 0 };
+static const unichar_t str_a7f9[] = { 0x0153, 0 };
+static const unichar_t str_f900[] = { 0x8c48, 0 };
+static const unichar_t str_f901[] = { 0x66f4, 0 };
+static const unichar_t str_f902[] = { 0x8eca, 0 };
+static const unichar_t str_f903[] = { 0x8cc8, 0 };
+static const unichar_t str_f904[] = { 0x6ed1, 0 };
+static const unichar_t str_f905[] = { 0x4e32, 0 };
+static const unichar_t str_f906[] = { 0x53e5, 0 };
+static const unichar_t str_f907[] = { 0x9f9c, 0 };
+static const unichar_t str_f908[] = { 0x9f9c, 0 };
+static const unichar_t str_f909[] = { 0x5951, 0 };
+static const unichar_t str_f90a[] = { 0x91d1, 0 };
+static const unichar_t str_f90b[] = { 0x5587, 0 };
+static const unichar_t str_f90c[] = { 0x5948, 0 };
+static const unichar_t str_f90d[] = { 0x61f6, 0 };
+static const unichar_t str_f90e[] = { 0x7669, 0 };
+static const unichar_t str_f90f[] = { 0x7f85, 0 };
+static const unichar_t str_f910[] = { 0x863f, 0 };
+static const unichar_t str_f911[] = { 0x87ba, 0 };
+static const unichar_t str_f912[] = { 0x88f8, 0 };
+static const unichar_t str_f913[] = { 0x908f, 0 };
+static const unichar_t str_f914[] = { 0x6a02, 0 };
+static const unichar_t str_f915[] = { 0x6d1b, 0 };
+static const unichar_t str_f916[] = { 0x70d9, 0 };
+static const unichar_t str_f917[] = { 0x73de, 0 };
+static const unichar_t str_f918[] = { 0x843d, 0 };
+static const unichar_t str_f919[] = { 0x916a, 0 };
+static const unichar_t str_f91a[] = { 0x99f1, 0 };
+static const unichar_t str_f91b[] = { 0x4e82, 0 };
+static const unichar_t str_f91c[] = { 0x5375, 0 };
+static const unichar_t str_f91d[] = { 0x6b04, 0 };
+static const unichar_t str_f91e[] = { 0x721b, 0 };
+static const unichar_t str_f91f[] = { 0x862d, 0 };
+static const unichar_t str_f920[] = { 0x9e1e, 0 };
+static const unichar_t str_f921[] = { 0x5d50, 0 };
+static const unichar_t str_f922[] = { 0x6feb, 0 };
+static const unichar_t str_f923[] = { 0x85cd, 0 };
+static const unichar_t str_f924[] = { 0x8964, 0 };
+static const unichar_t str_f925[] = { 0x62c9, 0 };
+static const unichar_t str_f926[] = { 0x81d8, 0 };
+static const unichar_t str_f927[] = { 0x881f, 0 };
+static const unichar_t str_f928[] = { 0x5eca, 0 };
+static const unichar_t str_f929[] = { 0x6717, 0 };
+static const unichar_t str_f92a[] = { 0x6d6a, 0 };
+static const unichar_t str_f92b[] = { 0x72fc, 0 };
+static const unichar_t str_f92c[] = { 0x90ce, 0 };
+static const unichar_t str_f92d[] = { 0x4f86, 0 };
+static const unichar_t str_f92e[] = { 0x51b7, 0 };
+static const unichar_t str_f92f[] = { 0x52de, 0 };
+static const unichar_t str_f930[] = { 0x64c4, 0 };
+static const unichar_t str_f931[] = { 0x6ad3, 0 };
+static const unichar_t str_f932[] = { 0x7210, 0 };
+static const unichar_t str_f933[] = { 0x76e7, 0 };
+static const unichar_t str_f934[] = { 0x8001, 0 };
+static const unichar_t str_f935[] = { 0x8606, 0 };
+static const unichar_t str_f936[] = { 0x865c, 0 };
+static const unichar_t str_f937[] = { 0x8def, 0 };
+static const unichar_t str_f938[] = { 0x9732, 0 };
+static const unichar_t str_f939[] = { 0x9b6f, 0 };
+static const unichar_t str_f93a[] = { 0x9dfa, 0 };
+static const unichar_t str_f93b[] = { 0x788c, 0 };
+static const unichar_t str_f93c[] = { 0x797f, 0 };
+static const unichar_t str_f93d[] = { 0x7da0, 0 };
+static const unichar_t str_f93e[] = { 0x83c9, 0 };
+static const unichar_t str_f93f[] = { 0x9304, 0 };
+static const unichar_t str_f940[] = { 0x9e7f, 0 };
+static const unichar_t str_f941[] = { 0x8ad6, 0 };
+static const unichar_t str_f942[] = { 0x58df, 0 };
+static const unichar_t str_f943[] = { 0x5f04, 0 };
+static const unichar_t str_f944[] = { 0x7c60, 0 };
+static const unichar_t str_f945[] = { 0x807e, 0 };
+static const unichar_t str_f946[] = { 0x7262, 0 };
+static const unichar_t str_f947[] = { 0x78ca, 0 };
+static const unichar_t str_f948[] = { 0x8cc2, 0 };
+static const unichar_t str_f949[] = { 0x96f7, 0 };
+static const unichar_t str_f94a[] = { 0x58d8, 0 };
+static const unichar_t str_f94b[] = { 0x5c62, 0 };
+static const unichar_t str_f94c[] = { 0x6a13, 0 };
+static const unichar_t str_f94d[] = { 0x6dda, 0 };
+static const unichar_t str_f94e[] = { 0x6f0f, 0 };
+static const unichar_t str_f94f[] = { 0x7d2f, 0 };
+static const unichar_t str_f950[] = { 0x7e37, 0 };
+static const unichar_t str_f951[] = { 0x964b, 0 };
+static const unichar_t str_f952[] = { 0x52d2, 0 };
+static const unichar_t str_f953[] = { 0x808b, 0 };
+static const unichar_t str_f954[] = { 0x51dc, 0 };
+static const unichar_t str_f955[] = { 0x51cc, 0 };
+static const unichar_t str_f956[] = { 0x7a1c, 0 };
+static const unichar_t str_f957[] = { 0x7dbe, 0 };
+static const unichar_t str_f958[] = { 0x83f1, 0 };
+static const unichar_t str_f959[] = { 0x9675, 0 };
+static const unichar_t str_f95a[] = { 0x8b80, 0 };
+static const unichar_t str_f95b[] = { 0x62cf, 0 };
+static const unichar_t str_f95c[] = { 0x6a02, 0 };
+static const unichar_t str_f95d[] = { 0x8afe, 0 };
+static const unichar_t str_f95e[] = { 0x4e39, 0 };
+static const unichar_t str_f95f[] = { 0x5be7, 0 };
+static const unichar_t str_f960[] = { 0x6012, 0 };
+static const unichar_t str_f961[] = { 0x7387, 0 };
+static const unichar_t str_f962[] = { 0x7570, 0 };
+static const unichar_t str_f963[] = { 0x5317, 0 };
+static const unichar_t str_f964[] = { 0x78fb, 0 };
+static const unichar_t str_f965[] = { 0x4fbf, 0 };
+static const unichar_t str_f966[] = { 0x5fa9, 0 };
+static const unichar_t str_f967[] = { 0x4e0d, 0 };
+static const unichar_t str_f968[] = { 0x6ccc, 0 };
+static const unichar_t str_f969[] = { 0x6578, 0 };
+static const unichar_t str_f96a[] = { 0x7d22, 0 };
+static const unichar_t str_f96b[] = { 0x53c3, 0 };
+static const unichar_t str_f96c[] = { 0x585e, 0 };
+static const unichar_t str_f96d[] = { 0x7701, 0 };
+static const unichar_t str_f96e[] = { 0x8449, 0 };
+static const unichar_t str_f96f[] = { 0x8aaa, 0 };
+static const unichar_t str_f970[] = { 0x6bba, 0 };
+static const unichar_t str_f971[] = { 0x8fb0, 0 };
+static const unichar_t str_f972[] = { 0x6c88, 0 };
+static const unichar_t str_f973[] = { 0x62fe, 0 };
+static const unichar_t str_f974[] = { 0x82e5, 0 };
+static const unichar_t str_f975[] = { 0x63a0, 0 };
+static const unichar_t str_f976[] = { 0x7565, 0 };
+static const unichar_t str_f977[] = { 0x4eae, 0 };
+static const unichar_t str_f978[] = { 0x5169, 0 };
+static const unichar_t str_f979[] = { 0x51c9, 0 };
+static const unichar_t str_f97a[] = { 0x6881, 0 };
+static const unichar_t str_f97b[] = { 0x7ce7, 0 };
+static const unichar_t str_f97c[] = { 0x826f, 0 };
+static const unichar_t str_f97d[] = { 0x8ad2, 0 };
+static const unichar_t str_f97e[] = { 0x91cf, 0 };
+static const unichar_t str_f97f[] = { 0x52f5, 0 };
+static const unichar_t str_f980[] = { 0x5442, 0 };
+static const unichar_t str_f981[] = { 0x5973, 0 };
+static const unichar_t str_f982[] = { 0x5eec, 0 };
+static const unichar_t str_f983[] = { 0x65c5, 0 };
+static const unichar_t str_f984[] = { 0x6ffe, 0 };
+static const unichar_t str_f985[] = { 0x792a, 0 };
+static const unichar_t str_f986[] = { 0x95ad, 0 };
+static const unichar_t str_f987[] = { 0x9a6a, 0 };
+static const unichar_t str_f988[] = { 0x9e97, 0 };
+static const unichar_t str_f989[] = { 0x9ece, 0 };
+static const unichar_t str_f98a[] = { 0x529b, 0 };
+static const unichar_t str_f98b[] = { 0x66c6, 0 };
+static const unichar_t str_f98c[] = { 0x6b77, 0 };
+static const unichar_t str_f98d[] = { 0x8f62, 0 };
+static const unichar_t str_f98e[] = { 0x5e74, 0 };
+static const unichar_t str_f98f[] = { 0x6190, 0 };
+static const unichar_t str_f990[] = { 0x6200, 0 };
+static const unichar_t str_f991[] = { 0x649a, 0 };
+static const unichar_t str_f992[] = { 0x6f23, 0 };
+static const unichar_t str_f993[] = { 0x7149, 0 };
+static const unichar_t str_f994[] = { 0x7489, 0 };
+static const unichar_t str_f995[] = { 0x79ca, 0 };
+static const unichar_t str_f996[] = { 0x7df4, 0 };
+static const unichar_t str_f997[] = { 0x806f, 0 };
+static const unichar_t str_f998[] = { 0x8f26, 0 };
+static const unichar_t str_f999[] = { 0x84ee, 0 };
+static const unichar_t str_f99a[] = { 0x9023, 0 };
+static const unichar_t str_f99b[] = { 0x934a, 0 };
+static const unichar_t str_f99c[] = { 0x5217, 0 };
+static const unichar_t str_f99d[] = { 0x52a3, 0 };
+static const unichar_t str_f99e[] = { 0x54bd, 0 };
+static const unichar_t str_f99f[] = { 0x70c8, 0 };
+static const unichar_t str_f9a0[] = { 0x88c2, 0 };
+static const unichar_t str_f9a1[] = { 0x8aaa, 0 };
+static const unichar_t str_f9a2[] = { 0x5ec9, 0 };
+static const unichar_t str_f9a3[] = { 0x5ff5, 0 };
+static const unichar_t str_f9a4[] = { 0x637b, 0 };
+static const unichar_t str_f9a5[] = { 0x6bae, 0 };
+static const unichar_t str_f9a6[] = { 0x7c3e, 0 };
+static const unichar_t str_f9a7[] = { 0x7375, 0 };
+static const unichar_t str_f9a8[] = { 0x4ee4, 0 };
+static const unichar_t str_f9a9[] = { 0x56f9, 0 };
+static const unichar_t str_f9aa[] = { 0x5be7, 0 };
+static const unichar_t str_f9ab[] = { 0x5dba, 0 };
+static const unichar_t str_f9ac[] = { 0x601c, 0 };
+static const unichar_t str_f9ad[] = { 0x73b2, 0 };
+static const unichar_t str_f9ae[] = { 0x7469, 0 };
+static const unichar_t str_f9af[] = { 0x7f9a, 0 };
+static const unichar_t str_f9b0[] = { 0x8046, 0 };
+static const unichar_t str_f9b1[] = { 0x9234, 0 };
+static const unichar_t str_f9b2[] = { 0x96f6, 0 };
+static const unichar_t str_f9b3[] = { 0x9748, 0 };
+static const unichar_t str_f9b4[] = { 0x9818, 0 };
+static const unichar_t str_f9b5[] = { 0x4f8b, 0 };
+static const unichar_t str_f9b6[] = { 0x79ae, 0 };
+static const unichar_t str_f9b7[] = { 0x91b4, 0 };
+static const unichar_t str_f9b8[] = { 0x96b8, 0 };
+static const unichar_t str_f9b9[] = { 0x60e1, 0 };
+static const unichar_t str_f9ba[] = { 0x4e86, 0 };
+static const unichar_t str_f9bb[] = { 0x50da, 0 };
+static const unichar_t str_f9bc[] = { 0x5bee, 0 };
+static const unichar_t str_f9bd[] = { 0x5c3f, 0 };
+static const unichar_t str_f9be[] = { 0x6599, 0 };
+static const unichar_t str_f9bf[] = { 0x6a02, 0 };
+static const unichar_t str_f9c0[] = { 0x71ce, 0 };
+static const unichar_t str_f9c1[] = { 0x7642, 0 };
+static const unichar_t str_f9c2[] = { 0x84fc, 0 };
+static const unichar_t str_f9c3[] = { 0x907c, 0 };
+static const unichar_t str_f9c4[] = { 0x9f8d, 0 };
+static const unichar_t str_f9c5[] = { 0x6688, 0 };
+static const unichar_t str_f9c6[] = { 0x962e, 0 };
+static const unichar_t str_f9c7[] = { 0x5289, 0 };
+static const unichar_t str_f9c8[] = { 0x677b, 0 };
+static const unichar_t str_f9c9[] = { 0x67f3, 0 };
+static const unichar_t str_f9ca[] = { 0x6d41, 0 };
+static const unichar_t str_f9cb[] = { 0x6e9c, 0 };
+static const unichar_t str_f9cc[] = { 0x7409, 0 };
+static const unichar_t str_f9cd[] = { 0x7559, 0 };
+static const unichar_t str_f9ce[] = { 0x786b, 0 };
+static const unichar_t str_f9cf[] = { 0x7d10, 0 };
+static const unichar_t str_f9d0[] = { 0x985e, 0 };
+static const unichar_t str_f9d1[] = { 0x516d, 0 };
+static const unichar_t str_f9d2[] = { 0x622e, 0 };
+static const unichar_t str_f9d3[] = { 0x9678, 0 };
+static const unichar_t str_f9d4[] = { 0x502b, 0 };
+static const unichar_t str_f9d5[] = { 0x5d19, 0 };
+static const unichar_t str_f9d6[] = { 0x6dea, 0 };
+static const unichar_t str_f9d7[] = { 0x8f2a, 0 };
+static const unichar_t str_f9d8[] = { 0x5f8b, 0 };
+static const unichar_t str_f9d9[] = { 0x6144, 0 };
+static const unichar_t str_f9da[] = { 0x6817, 0 };
+static const unichar_t str_f9db[] = { 0x7387, 0 };
+static const unichar_t str_f9dc[] = { 0x9686, 0 };
+static const unichar_t str_f9dd[] = { 0x5229, 0 };
+static const unichar_t str_f9de[] = { 0x540f, 0 };
+static const unichar_t str_f9df[] = { 0x5c65, 0 };
+static const unichar_t str_f9e0[] = { 0x6613, 0 };
+static const unichar_t str_f9e1[] = { 0x674e, 0 };
+static const unichar_t str_f9e2[] = { 0x68a8, 0 };
+static const unichar_t str_f9e3[] = { 0x6ce5, 0 };
+static const unichar_t str_f9e4[] = { 0x7406, 0 };
+static const unichar_t str_f9e5[] = { 0x75e2, 0 };
+static const unichar_t str_f9e6[] = { 0x7f79, 0 };
+static const unichar_t str_f9e7[] = { 0x88cf, 0 };
+static const unichar_t str_f9e8[] = { 0x88e1, 0 };
+static const unichar_t str_f9e9[] = { 0x91cc, 0 };
+static const unichar_t str_f9ea[] = { 0x96e2, 0 };
+static const unichar_t str_f9eb[] = { 0x533f, 0 };
+static const unichar_t str_f9ec[] = { 0x6eba, 0 };
+static const unichar_t str_f9ed[] = { 0x541d, 0 };
+static const unichar_t str_f9ee[] = { 0x71d0, 0 };
+static const unichar_t str_f9ef[] = { 0x7498, 0 };
+static const unichar_t str_f9f0[] = { 0x85fa, 0 };
+static const unichar_t str_f9f1[] = { 0x96a3, 0 };
+static const unichar_t str_f9f2[] = { 0x9c57, 0 };
+static const unichar_t str_f9f3[] = { 0x9e9f, 0 };
+static const unichar_t str_f9f4[] = { 0x6797, 0 };
+static const unichar_t str_f9f5[] = { 0x6dcb, 0 };
+static const unichar_t str_f9f6[] = { 0x81e8, 0 };
+static const unichar_t str_f9f7[] = { 0x7acb, 0 };
+static const unichar_t str_f9f8[] = { 0x7b20, 0 };
+static const unichar_t str_f9f9[] = { 0x7c92, 0 };
+static const unichar_t str_f9fa[] = { 0x72c0, 0 };
+static const unichar_t str_f9fb[] = { 0x7099, 0 };
+static const unichar_t str_f9fc[] = { 0x8b58, 0 };
+static const unichar_t str_f9fd[] = { 0x4ec0, 0 };
+static const unichar_t str_f9fe[] = { 0x8336, 0 };
+static const unichar_t str_f9ff[] = { 0x523a, 0 };
+static const unichar_t str_fa00[] = { 0x5207, 0 };
+static const unichar_t str_fa01[] = { 0x5ea6, 0 };
+static const unichar_t str_fa02[] = { 0x62d3, 0 };
+static const unichar_t str_fa03[] = { 0x7cd6, 0 };
+static const unichar_t str_fa04[] = { 0x5b85, 0 };
+static const unichar_t str_fa05[] = { 0x6d1e, 0 };
+static const unichar_t str_fa06[] = { 0x66b4, 0 };
+static const unichar_t str_fa07[] = { 0x8f3b, 0 };
+static const unichar_t str_fa08[] = { 0x884c, 0 };
+static const unichar_t str_fa09[] = { 0x964d, 0 };
+static const unichar_t str_fa0a[] = { 0x898b, 0 };
+static const unichar_t str_fa0b[] = { 0x5ed3, 0 };
+static const unichar_t str_fa0c[] = { 0x5140, 0 };
+static const unichar_t str_fa0d[] = { 0x55c0, 0 };
+static const unichar_t str_fa10[] = { 0x585a, 0 };
+static const unichar_t str_fa12[] = { 0x6674, 0 };
+static const unichar_t str_fa15[] = { 0x51de, 0 };
+static const unichar_t str_fa16[] = { 0x732a, 0 };
+static const unichar_t str_fa17[] = { 0x76ca, 0 };
+static const unichar_t str_fa18[] = { 0x793c, 0 };
+static const unichar_t str_fa19[] = { 0x795e, 0 };
+static const unichar_t str_fa1a[] = { 0x7965, 0 };
+static const unichar_t str_fa1b[] = { 0x798f, 0 };
+static const unichar_t str_fa1c[] = { 0x9756, 0 };
+static const unichar_t str_fa1d[] = { 0x7cbe, 0 };
+static const unichar_t str_fa1e[] = { 0x7fbd, 0 };
+static const unichar_t str_fa20[] = { 0x8612, 0 };
+static const unichar_t str_fa22[] = { 0x8af8, 0 };
+static const unichar_t str_fa25[] = { 0x9038, 0 };
+static const unichar_t str_fa26[] = { 0x90fd, 0 };
+static const unichar_t str_fa2a[] = { 0x98ef, 0 };
+static const unichar_t str_fa2b[] = { 0x98fc, 0 };
+static const unichar_t str_fa2c[] = { 0x9928, 0 };
+static const unichar_t str_fa2d[] = { 0x9db4, 0 };
+static const unichar_t str_fa2e[] = { 0x90de, 0 };
+static const unichar_t str_fa2f[] = { 0x96b7, 0 };
+static const unichar_t str_fa30[] = { 0x4fae, 0 };
+static const unichar_t str_fa31[] = { 0x50e7, 0 };
+static const unichar_t str_fa32[] = { 0x514d, 0 };
+static const unichar_t str_fa33[] = { 0x52c9, 0 };
+static const unichar_t str_fa34[] = { 0x52e4, 0 };
+static const unichar_t str_fa35[] = { 0x5351, 0 };
+static const unichar_t str_fa36[] = { 0x559d, 0 };
+static const unichar_t str_fa37[] = { 0x5606, 0 };
+static const unichar_t str_fa38[] = { 0x5668, 0 };
+static const unichar_t str_fa39[] = { 0x5840, 0 };
+static const unichar_t str_fa3a[] = { 0x58a8, 0 };
+static const unichar_t str_fa3b[] = { 0x5c64, 0 };
+static const unichar_t str_fa3c[] = { 0x5c6e, 0 };
+static const unichar_t str_fa3d[] = { 0x6094, 0 };
+static const unichar_t str_fa3e[] = { 0x6168, 0 };
+static const unichar_t str_fa3f[] = { 0x618e, 0 };
+static const unichar_t str_fa40[] = { 0x61f2, 0 };
+static const unichar_t str_fa41[] = { 0x654f, 0 };
+static const unichar_t str_fa42[] = { 0x65e2, 0 };
+static const unichar_t str_fa43[] = { 0x6691, 0 };
+static const unichar_t str_fa44[] = { 0x6885, 0 };
+static const unichar_t str_fa45[] = { 0x6d77, 0 };
+static const unichar_t str_fa46[] = { 0x6e1a, 0 };
+static const unichar_t str_fa47[] = { 0x6f22, 0 };
+static const unichar_t str_fa48[] = { 0x716e, 0 };
+static const unichar_t str_fa49[] = { 0x722b, 0 };
+static const unichar_t str_fa4a[] = { 0x7422, 0 };
+static const unichar_t str_fa4b[] = { 0x7891, 0 };
+static const unichar_t str_fa4c[] = { 0x793e, 0 };
+static const unichar_t str_fa4d[] = { 0x7949, 0 };
+static const unichar_t str_fa4e[] = { 0x7948, 0 };
+static const unichar_t str_fa4f[] = { 0x7950, 0 };
+static const unichar_t str_fa50[] = { 0x7956, 0 };
+static const unichar_t str_fa51[] = { 0x795d, 0 };
+static const unichar_t str_fa52[] = { 0x798d, 0 };
+static const unichar_t str_fa53[] = { 0x798e, 0 };
+static const unichar_t str_fa54[] = { 0x7a40, 0 };
+static const unichar_t str_fa55[] = { 0x7a81, 0 };
+static const unichar_t str_fa56[] = { 0x7bc0, 0 };
+static const unichar_t str_fa57[] = { 0x7df4, 0 };
+static const unichar_t str_fa58[] = { 0x7e09, 0 };
+static const unichar_t str_fa59[] = { 0x7e41, 0 };
+static const unichar_t str_fa5a[] = { 0x7f72, 0 };
+static const unichar_t str_fa5b[] = { 0x8005, 0 };
+static const unichar_t str_fa5c[] = { 0x81ed, 0 };
+static const unichar_t str_fa5d[] = { 0x8279, 0 };
+static const unichar_t str_fa5e[] = { 0x8279, 0 };
+static const unichar_t str_fa5f[] = { 0x8457, 0 };
+static const unichar_t str_fa60[] = { 0x8910, 0 };
+static const unichar_t str_fa61[] = { 0x8996, 0 };
+static const unichar_t str_fa62[] = { 0x8b01, 0 };
+static const unichar_t str_fa63[] = { 0x8b39, 0 };
+static const unichar_t str_fa64[] = { 0x8cd3, 0 };
+static const unichar_t str_fa65[] = { 0x8d08, 0 };
+static const unichar_t str_fa66[] = { 0x8fb6, 0 };
+static const unichar_t str_fa67[] = { 0x9038, 0 };
+static const unichar_t str_fa68[] = { 0x96e3, 0 };
+static const unichar_t str_fa69[] = { 0x97ff, 0 };
+static const unichar_t str_fa6a[] = { 0x983b, 0 };
+static const unichar_t str_fa6b[] = { 0x6075, 0 };
+static const unichar_t str_fa6c[] = { 0x242ee, 0 };
+static const unichar_t str_fa6d[] = { 0x8218, 0 };
+static const unichar_t str_fa70[] = { 0x4e26, 0 };
+static const unichar_t str_fa71[] = { 0x51b5, 0 };
+static const unichar_t str_fa72[] = { 0x5168, 0 };
+static const unichar_t str_fa73[] = { 0x4f80, 0 };
+static const unichar_t str_fa74[] = { 0x5145, 0 };
+static const unichar_t str_fa75[] = { 0x5180, 0 };
+static const unichar_t str_fa76[] = { 0x52c7, 0 };
+static const unichar_t str_fa77[] = { 0x52fa, 0 };
+static const unichar_t str_fa78[] = { 0x559d, 0 };
+static const unichar_t str_fa79[] = { 0x5555, 0 };
+static const unichar_t str_fa7a[] = { 0x5599, 0 };
+static const unichar_t str_fa7b[] = { 0x55e2, 0 };
+static const unichar_t str_fa7c[] = { 0x585a, 0 };
+static const unichar_t str_fa7d[] = { 0x58b3, 0 };
+static const unichar_t str_fa7e[] = { 0x5944, 0 };
+static const unichar_t str_fa7f[] = { 0x5954, 0 };
+static const unichar_t str_fa80[] = { 0x5a62, 0 };
+static const unichar_t str_fa81[] = { 0x5b28, 0 };
+static const unichar_t str_fa82[] = { 0x5ed2, 0 };
+static const unichar_t str_fa83[] = { 0x5ed9, 0 };
+static const unichar_t str_fa84[] = { 0x5f69, 0 };
+static const unichar_t str_fa85[] = { 0x5fad, 0 };
+static const unichar_t str_fa86[] = { 0x60d8, 0 };
+static const unichar_t str_fa87[] = { 0x614e, 0 };
+static const unichar_t str_fa88[] = { 0x6108, 0 };
+static const unichar_t str_fa89[] = { 0x618e, 0 };
+static const unichar_t str_fa8a[] = { 0x6160, 0 };
+static const unichar_t str_fa8b[] = { 0x61f2, 0 };
+static const unichar_t str_fa8c[] = { 0x6234, 0 };
+static const unichar_t str_fa8d[] = { 0x63c4, 0 };
+static const unichar_t str_fa8e[] = { 0x641c, 0 };
+static const unichar_t str_fa8f[] = { 0x6452, 0 };
+static const unichar_t str_fa90[] = { 0x6556, 0 };
+static const unichar_t str_fa91[] = { 0x6674, 0 };
+static const unichar_t str_fa92[] = { 0x6717, 0 };
+static const unichar_t str_fa93[] = { 0x671b, 0 };
+static const unichar_t str_fa94[] = { 0x6756, 0 };
+static const unichar_t str_fa95[] = { 0x6b79, 0 };
+static const unichar_t str_fa96[] = { 0x6bba, 0 };
+static const unichar_t str_fa97[] = { 0x6d41, 0 };
+static const unichar_t str_fa98[] = { 0x6edb, 0 };
+static const unichar_t str_fa99[] = { 0x6ecb, 0 };
+static const unichar_t str_fa9a[] = { 0x6f22, 0 };
+static const unichar_t str_fa9b[] = { 0x701e, 0 };
+static const unichar_t str_fa9c[] = { 0x716e, 0 };
+static const unichar_t str_fa9d[] = { 0x77a7, 0 };
+static const unichar_t str_fa9e[] = { 0x7235, 0 };
+static const unichar_t str_fa9f[] = { 0x72af, 0 };
+static const unichar_t str_faa0[] = { 0x732a, 0 };
+static const unichar_t str_faa1[] = { 0x7471, 0 };
+static const unichar_t str_faa2[] = { 0x7506, 0 };
+static const unichar_t str_faa3[] = { 0x753b, 0 };
+static const unichar_t str_faa4[] = { 0x761d, 0 };
+static const unichar_t str_faa5[] = { 0x761f, 0 };
+static const unichar_t str_faa6[] = { 0x76ca, 0 };
+static const unichar_t str_faa7[] = { 0x76db, 0 };
+static const unichar_t str_faa8[] = { 0x76f4, 0 };
+static const unichar_t str_faa9[] = { 0x774a, 0 };
+static const unichar_t str_faaa[] = { 0x7740, 0 };
+static const unichar_t str_faab[] = { 0x78cc, 0 };
+static const unichar_t str_faac[] = { 0x7ab1, 0 };
+static const unichar_t str_faad[] = { 0x7bc0, 0 };
+static const unichar_t str_faae[] = { 0x7c7b, 0 };
+static const unichar_t str_faaf[] = { 0x7d5b, 0 };
+static const unichar_t str_fab0[] = { 0x7df4, 0 };
+static const unichar_t str_fab1[] = { 0x7f3e, 0 };
+static const unichar_t str_fab2[] = { 0x8005, 0 };
+static const unichar_t str_fab3[] = { 0x8352, 0 };
+static const unichar_t str_fab4[] = { 0x83ef, 0 };
+static const unichar_t str_fab5[] = { 0x8779, 0 };
+static const unichar_t str_fab6[] = { 0x8941, 0 };
+static const unichar_t str_fab7[] = { 0x8986, 0 };
+static const unichar_t str_fab8[] = { 0x8996, 0 };
+static const unichar_t str_fab9[] = { 0x8abf, 0 };
+static const unichar_t str_faba[] = { 0x8af8, 0 };
+static const unichar_t str_fabb[] = { 0x8acb, 0 };
+static const unichar_t str_fabc[] = { 0x8b01, 0 };
+static const unichar_t str_fabd[] = { 0x8afe, 0 };
+static const unichar_t str_fabe[] = { 0x8aed, 0 };
+static const unichar_t str_fabf[] = { 0x8b39, 0 };
+static const unichar_t str_fac0[] = { 0x8b8a, 0 };
+static const unichar_t str_fac1[] = { 0x8d08, 0 };
+static const unichar_t str_fac2[] = { 0x8f38, 0 };
+static const unichar_t str_fac3[] = { 0x9072, 0 };
+static const unichar_t str_fac4[] = { 0x9199, 0 };
+static const unichar_t str_fac5[] = { 0x9276, 0 };
+static const unichar_t str_fac6[] = { 0x967c, 0 };
+static const unichar_t str_fac7[] = { 0x96e3, 0 };
+static const unichar_t str_fac8[] = { 0x9756, 0 };
+static const unichar_t str_fac9[] = { 0x97db, 0 };
+static const unichar_t str_faca[] = { 0x97ff, 0 };
+static const unichar_t str_facb[] = { 0x980b, 0 };
+static const unichar_t str_facc[] = { 0x983b, 0 };
+static const unichar_t str_facd[] = { 0x9b12, 0 };
+static const unichar_t str_face[] = { 0x9f9c, 0 };
+static const unichar_t str_facf[] = { 0x2284a, 0 };
+static const unichar_t str_fad0[] = { 0x22844, 0 };
+static const unichar_t str_fad1[] = { 0x233d5, 0 };
+static const unichar_t str_fad2[] = { 0x3b9d, 0 };
+static const unichar_t str_fad3[] = { 0x4018, 0 };
+static const unichar_t str_fad4[] = { 0x4039, 0 };
+static const unichar_t str_fad5[] = { 0x25249, 0 };
+static const unichar_t str_fad6[] = { 0x25cd0, 0 };
+static const unichar_t str_fad7[] = { 0x27ed3, 0 };
+static const unichar_t str_fad8[] = { 0x9f43, 0 };
+static const unichar_t str_fad9[] = { 0x9f8e, 0 };
+static const unichar_t str_fb00[] = { 0x0066, 0x0066, 0 };
+static const unichar_t str_fb01[] = { 0x0066, 0x0069, 0 };
+static const unichar_t str_fb02[] = { 0x0066, 0x006c, 0 };
+static const unichar_t str_fb03[] = { 0x0066, 0x0066, 0x0069, 0 };
+static const unichar_t str_fb04[] = { 0x0066, 0x0066, 0x006c, 0 };
+static const unichar_t str_fb05[] = { 0x017f, 0x0074, 0 };
+static const unichar_t str_fb06[] = { 0x0073, 0x0074, 0 };
+static const unichar_t str_fb13[] = { 0x0574, 0x0576, 0 };
+static const unichar_t str_fb14[] = { 0x0574, 0x0565, 0 };
+static const unichar_t str_fb15[] = { 0x0574, 0x056b, 0 };
+static const unichar_t str_fb16[] = { 0x057e, 0x0576, 0 };
+static const unichar_t str_fb17[] = { 0x0574, 0x056d, 0 };
+static const unichar_t str_fb1d[] = { 0x05d9, 0x05b4, 0 };
+static const unichar_t str_fb1f[] = { 0x05f2, 0x05b7, 0 };
+static const unichar_t str_fb20[] = { 0x05e2, 0 };
+static const unichar_t str_fb21[] = { 0x05d0, 0 };
+static const unichar_t str_fb22[] = { 0x05d3, 0 };
+static const unichar_t str_fb23[] = { 0x05d4, 0 };
+static const unichar_t str_fb24[] = { 0x05db, 0 };
+static const unichar_t str_fb25[] = { 0x05dc, 0 };
+static const unichar_t str_fb26[] = { 0x05dd, 0 };
+static const unichar_t str_fb27[] = { 0x05e8, 0 };
+static const unichar_t str_fb28[] = { 0x05ea, 0 };
+static const unichar_t str_fb29[] = { 0x002b, 0 };
+static const unichar_t str_fb2a[] = { 0x05e9, 0x05c1, 0 };
+static const unichar_t str_fb2b[] = { 0x05e9, 0x05c2, 0 };
+static const unichar_t str_fb2c[] = { 0xfb49, 0x05c1, 0 };
+static const unichar_t str_fb2d[] = { 0xfb49, 0x05c2, 0 };
+static const unichar_t str_fb2e[] = { 0x05d0, 0x05b7, 0 };
+static const unichar_t str_fb2f[] = { 0x05d0, 0x05b8, 0 };
+static const unichar_t str_fb30[] = { 0x05d0, 0x05bc, 0 };
+static const unichar_t str_fb31[] = { 0x05d1, 0x05bc, 0 };
+static const unichar_t str_fb32[] = { 0x05d2, 0x05bc, 0 };
+static const unichar_t str_fb33[] = { 0x05d3, 0x05bc, 0 };
+static const unichar_t str_fb34[] = { 0x05d4, 0x05bc, 0 };
+static const unichar_t str_fb35[] = { 0x05d5, 0x05bc, 0 };
+static const unichar_t str_fb36[] = { 0x05d6, 0x05bc, 0 };
+static const unichar_t str_fb38[] = { 0x05d8, 0x05bc, 0 };
+static const unichar_t str_fb39[] = { 0x05d9, 0x05bc, 0 };
+static const unichar_t str_fb3a[] = { 0x05da, 0x05bc, 0 };
+static const unichar_t str_fb3b[] = { 0x05db, 0x05bc, 0 };
+static const unichar_t str_fb3c[] = { 0x05dc, 0x05bc, 0 };
+static const unichar_t str_fb3e[] = { 0x05de, 0x05bc, 0 };
+static const unichar_t str_fb40[] = { 0x05e0, 0x05bc, 0 };
+static const unichar_t str_fb41[] = { 0x05e1, 0x05bc, 0 };
+static const unichar_t str_fb43[] = { 0x05e3, 0x05bc, 0 };
+static const unichar_t str_fb44[] = { 0x05e4, 0x05bc, 0 };
+static const unichar_t str_fb46[] = { 0x05e6, 0x05bc, 0 };
+static const unichar_t str_fb47[] = { 0x05e7, 0x05bc, 0 };
+static const unichar_t str_fb48[] = { 0x05e8, 0x05bc, 0 };
+static const unichar_t str_fb49[] = { 0x05e9, 0x05bc, 0 };
+static const unichar_t str_fb4a[] = { 0x05ea, 0x05bc, 0 };
+static const unichar_t str_fb4b[] = { 0x05d5, 0x05b9, 0 };
+static const unichar_t str_fb4c[] = { 0x05d1, 0x05bf, 0 };
+static const unichar_t str_fb4d[] = { 0x05db, 0x05bf, 0 };
+static const unichar_t str_fb4e[] = { 0x05e4, 0x05bf, 0 };
+static const unichar_t str_fb4f[] = { 0x05d0, 0x05dc, 0 };
+static const unichar_t str_fb50[] = { 0x0671, 0 };
+static const unichar_t str_fb51[] = { 0x0671, 0 };
+static const unichar_t str_fb52[] = { 0x067b, 0 };
+static const unichar_t str_fb53[] = { 0x067b, 0 };
+static const unichar_t str_fb54[] = { 0x067b, 0 };
+static const unichar_t str_fb55[] = { 0x067b, 0 };
+static const unichar_t str_fb56[] = { 0x067e, 0 };
+static const unichar_t str_fb57[] = { 0x067e, 0 };
+static const unichar_t str_fb58[] = { 0x067e, 0 };
+static const unichar_t str_fb59[] = { 0x067e, 0 };
+static const unichar_t str_fb5a[] = { 0x0680, 0 };
+static const unichar_t str_fb5b[] = { 0x0680, 0 };
+static const unichar_t str_fb5c[] = { 0x0680, 0 };
+static const unichar_t str_fb5d[] = { 0x0680, 0 };
+static const unichar_t str_fb5e[] = { 0x067a, 0 };
+static const unichar_t str_fb5f[] = { 0x067a, 0 };
+static const unichar_t str_fb60[] = { 0x067a, 0 };
+static const unichar_t str_fb61[] = { 0x067a, 0 };
+static const unichar_t str_fb62[] = { 0x067f, 0 };
+static const unichar_t str_fb63[] = { 0x067f, 0 };
+static const unichar_t str_fb64[] = { 0x067f, 0 };
+static const unichar_t str_fb65[] = { 0x067f, 0 };
+static const unichar_t str_fb66[] = { 0x0679, 0 };
+static const unichar_t str_fb67[] = { 0x0679, 0 };
+static const unichar_t str_fb68[] = { 0x0679, 0 };
+static const unichar_t str_fb69[] = { 0x0679, 0 };
+static const unichar_t str_fb6a[] = { 0x06a4, 0 };
+static const unichar_t str_fb6b[] = { 0x06a4, 0 };
+static const unichar_t str_fb6c[] = { 0x06a4, 0 };
+static const unichar_t str_fb6d[] = { 0x06a4, 0 };
+static const unichar_t str_fb6e[] = { 0x06a6, 0 };
+static const unichar_t str_fb6f[] = { 0x06a6, 0 };
+static const unichar_t str_fb70[] = { 0x06a6, 0 };
+static const unichar_t str_fb71[] = { 0x06a6, 0 };
+static const unichar_t str_fb72[] = { 0x0684, 0 };
+static const unichar_t str_fb73[] = { 0x0684, 0 };
+static const unichar_t str_fb74[] = { 0x0684, 0 };
+static const unichar_t str_fb75[] = { 0x0684, 0 };
+static const unichar_t str_fb76[] = { 0x0683, 0 };
+static const unichar_t str_fb77[] = { 0x0683, 0 };
+static const unichar_t str_fb78[] = { 0x0683, 0 };
+static const unichar_t str_fb79[] = { 0x0683, 0 };
+static const unichar_t str_fb7a[] = { 0x0686, 0 };
+static const unichar_t str_fb7b[] = { 0x0686, 0 };
+static const unichar_t str_fb7c[] = { 0x0686, 0 };
+static const unichar_t str_fb7d[] = { 0x0686, 0 };
+static const unichar_t str_fb7e[] = { 0x0687, 0 };
+static const unichar_t str_fb7f[] = { 0x0687, 0 };
+static const unichar_t str_fb80[] = { 0x0687, 0 };
+static const unichar_t str_fb81[] = { 0x0687, 0 };
+static const unichar_t str_fb82[] = { 0x068d, 0 };
+static const unichar_t str_fb83[] = { 0x068d, 0 };
+static const unichar_t str_fb84[] = { 0x068c, 0 };
+static const unichar_t str_fb85[] = { 0x068c, 0 };
+static const unichar_t str_fb86[] = { 0x068e, 0 };
+static const unichar_t str_fb87[] = { 0x068e, 0 };
+static const unichar_t str_fb88[] = { 0x0688, 0 };
+static const unichar_t str_fb89[] = { 0x0688, 0 };
+static const unichar_t str_fb8a[] = { 0x0698, 0 };
+static const unichar_t str_fb8b[] = { 0x0698, 0 };
+static const unichar_t str_fb8c[] = { 0x0691, 0 };
+static const unichar_t str_fb8d[] = { 0x0691, 0 };
+static const unichar_t str_fb8e[] = { 0x06a9, 0 };
+static const unichar_t str_fb8f[] = { 0x06a9, 0 };
+static const unichar_t str_fb90[] = { 0x06a9, 0 };
+static const unichar_t str_fb91[] = { 0x06a9, 0 };
+static const unichar_t str_fb92[] = { 0x06af, 0 };
+static const unichar_t str_fb93[] = { 0x06af, 0 };
+static const unichar_t str_fb94[] = { 0x06af, 0 };
+static const unichar_t str_fb95[] = { 0x06af, 0 };
+static const unichar_t str_fb96[] = { 0x06b3, 0 };
+static const unichar_t str_fb97[] = { 0x06b3, 0 };
+static const unichar_t str_fb98[] = { 0x06b3, 0 };
+static const unichar_t str_fb99[] = { 0x06b3, 0 };
+static const unichar_t str_fb9a[] = { 0x06b1, 0 };
+static const unichar_t str_fb9b[] = { 0x06b1, 0 };
+static const unichar_t str_fb9c[] = { 0x06b1, 0 };
+static const unichar_t str_fb9d[] = { 0x06b1, 0 };
+static const unichar_t str_fb9e[] = { 0x06ba, 0 };
+static const unichar_t str_fb9f[] = { 0x06ba, 0 };
+static const unichar_t str_fba0[] = { 0x06bb, 0 };
+static const unichar_t str_fba1[] = { 0x06bb, 0 };
+static const unichar_t str_fba2[] = { 0x06bb, 0 };
+static const unichar_t str_fba3[] = { 0x06bb, 0 };
+static const unichar_t str_fba4[] = { 0x06c0, 0 };
+static const unichar_t str_fba5[] = { 0x06c0, 0 };
+static const unichar_t str_fba6[] = { 0x06c1, 0 };
+static const unichar_t str_fba7[] = { 0x06c1, 0 };
+static const unichar_t str_fba8[] = { 0x06c1, 0 };
+static const unichar_t str_fba9[] = { 0x06c1, 0 };
+static const unichar_t str_fbaa[] = { 0x06be, 0 };
+static const unichar_t str_fbab[] = { 0x06be, 0 };
+static const unichar_t str_fbac[] = { 0x06be, 0 };
+static const unichar_t str_fbad[] = { 0x06be, 0 };
+static const unichar_t str_fbae[] = { 0x06d2, 0 };
+static const unichar_t str_fbaf[] = { 0x06d2, 0 };
+static const unichar_t str_fbb0[] = { 0x06d3, 0 };
+static const unichar_t str_fbb1[] = { 0x06d3, 0 };
+static const unichar_t str_fbd3[] = { 0x06ad, 0 };
+static const unichar_t str_fbd4[] = { 0x06ad, 0 };
+static const unichar_t str_fbd5[] = { 0x06ad, 0 };
+static const unichar_t str_fbd6[] = { 0x06ad, 0 };
+static const unichar_t str_fbd7[] = { 0x06c7, 0 };
+static const unichar_t str_fbd8[] = { 0x06c7, 0 };
+static const unichar_t str_fbd9[] = { 0x06c6, 0 };
+static const unichar_t str_fbda[] = { 0x06c6, 0 };
+static const unichar_t str_fbdb[] = { 0x06c8, 0 };
+static const unichar_t str_fbdc[] = { 0x06c8, 0 };
+static const unichar_t str_fbdd[] = { 0x0677, 0 };
+static const unichar_t str_fbde[] = { 0x06cb, 0 };
+static const unichar_t str_fbdf[] = { 0x06cb, 0 };
+static const unichar_t str_fbe0[] = { 0x06c5, 0 };
+static const unichar_t str_fbe1[] = { 0x06c5, 0 };
+static const unichar_t str_fbe2[] = { 0x06c9, 0 };
+static const unichar_t str_fbe3[] = { 0x06c9, 0 };
+static const unichar_t str_fbe4[] = { 0x06d0, 0 };
+static const unichar_t str_fbe5[] = { 0x06d0, 0 };
+static const unichar_t str_fbe6[] = { 0x06d0, 0 };
+static const unichar_t str_fbe7[] = { 0x06d0, 0 };
+static const unichar_t str_fbe8[] = { 0x0649, 0 };
+static const unichar_t str_fbe9[] = { 0x0649, 0 };
+static const unichar_t str_fbea[] = { 0x0626, 0x0627, 0 };
+static const unichar_t str_fbeb[] = { 0x0626, 0x0627, 0 };
+static const unichar_t str_fbec[] = { 0x0626, 0x06d5, 0 };
+static const unichar_t str_fbed[] = { 0x0626, 0x06d5, 0 };
+static const unichar_t str_fbee[] = { 0x0626, 0x0648, 0 };
+static const unichar_t str_fbef[] = { 0x0626, 0x0648, 0 };
+static const unichar_t str_fbf0[] = { 0x0626, 0x06c7, 0 };
+static const unichar_t str_fbf1[] = { 0x0626, 0x06c7, 0 };
+static const unichar_t str_fbf2[] = { 0x0626, 0x06c6, 0 };
+static const unichar_t str_fbf3[] = { 0x0626, 0x06c6, 0 };
+static const unichar_t str_fbf4[] = { 0x0626, 0x06c8, 0 };
+static const unichar_t str_fbf5[] = { 0x0626, 0x06c8, 0 };
+static const unichar_t str_fbf6[] = { 0x0626, 0x06d0, 0 };
+static const unichar_t str_fbf7[] = { 0x0626, 0x06d0, 0 };
+static const unichar_t str_fbf8[] = { 0x0626, 0x06d0, 0 };
+static const unichar_t str_fbf9[] = { 0x0626, 0x0649, 0 };
+static const unichar_t str_fbfa[] = { 0x0626, 0x0649, 0 };
+static const unichar_t str_fbfb[] = { 0x0626, 0x0649, 0 };
+static const unichar_t str_fbfc[] = { 0x06cc, 0 };
+static const unichar_t str_fbfd[] = { 0x06cc, 0 };
+static const unichar_t str_fbfe[] = { 0x06cc, 0 };
+static const unichar_t str_fbff[] = { 0x06cc, 0 };
+static const unichar_t str_fc00[] = { 0x0626, 0x062c, 0 };
+static const unichar_t str_fc01[] = { 0x0626, 0x062d, 0 };
+static const unichar_t str_fc02[] = { 0x0626, 0x0645, 0 };
+static const unichar_t str_fc03[] = { 0x0626, 0x0649, 0 };
+static const unichar_t str_fc04[] = { 0x0626, 0x064a, 0 };
+static const unichar_t str_fc05[] = { 0x0628, 0x062c, 0 };
+static const unichar_t str_fc06[] = { 0x0628, 0x062d, 0 };
+static const unichar_t str_fc07[] = { 0x0628, 0x062e, 0 };
+static const unichar_t str_fc08[] = { 0x0628, 0x0645, 0 };
+static const unichar_t str_fc09[] = { 0x0628, 0x0649, 0 };
+static const unichar_t str_fc0a[] = { 0x0628, 0x064a, 0 };
+static const unichar_t str_fc0b[] = { 0x062a, 0x062c, 0 };
+static const unichar_t str_fc0c[] = { 0x062a, 0x062d, 0 };
+static const unichar_t str_fc0d[] = { 0x062a, 0x062e, 0 };
+static const unichar_t str_fc0e[] = { 0x062a, 0x0645, 0 };
+static const unichar_t str_fc0f[] = { 0x062a, 0x0649, 0 };
+static const unichar_t str_fc10[] = { 0x062a, 0x064a, 0 };
+static const unichar_t str_fc11[] = { 0x062b, 0x062c, 0 };
+static const unichar_t str_fc12[] = { 0x062b, 0x0645, 0 };
+static const unichar_t str_fc13[] = { 0x062b, 0x0649, 0 };
+static const unichar_t str_fc14[] = { 0x062b, 0x064a, 0 };
+static const unichar_t str_fc15[] = { 0x062c, 0x062d, 0 };
+static const unichar_t str_fc16[] = { 0x062c, 0x0645, 0 };
+static const unichar_t str_fc17[] = { 0x062d, 0x062c, 0 };
+static const unichar_t str_fc18[] = { 0x062d, 0x0645, 0 };
+static const unichar_t str_fc19[] = { 0x062e, 0x062c, 0 };
+static const unichar_t str_fc1a[] = { 0x062e, 0x062d, 0 };
+static const unichar_t str_fc1b[] = { 0x062e, 0x0645, 0 };
+static const unichar_t str_fc1c[] = { 0x0633, 0x062c, 0 };
+static const unichar_t str_fc1d[] = { 0x0633, 0x062d, 0 };
+static const unichar_t str_fc1e[] = { 0x0633, 0x062e, 0 };
+static const unichar_t str_fc1f[] = { 0x0633, 0x0645, 0 };
+static const unichar_t str_fc20[] = { 0x0635, 0x062d, 0 };
+static const unichar_t str_fc21[] = { 0x0635, 0x0645, 0 };
+static const unichar_t str_fc22[] = { 0x0636, 0x062c, 0 };
+static const unichar_t str_fc23[] = { 0x0636, 0x062d, 0 };
+static const unichar_t str_fc24[] = { 0x0636, 0x062e, 0 };
+static const unichar_t str_fc25[] = { 0x0636, 0x0645, 0 };
+static const unichar_t str_fc26[] = { 0x0637, 0x062d, 0 };
+static const unichar_t str_fc27[] = { 0x0637, 0x0645, 0 };
+static const unichar_t str_fc28[] = { 0x0638, 0x0645, 0 };
+static const unichar_t str_fc29[] = { 0x0639, 0x062c, 0 };
+static const unichar_t str_fc2a[] = { 0x0639, 0x0645, 0 };
+static const unichar_t str_fc2b[] = { 0x063a, 0x062c, 0 };
+static const unichar_t str_fc2c[] = { 0x063a, 0x0645, 0 };
+static const unichar_t str_fc2d[] = { 0x0641, 0x062c, 0 };
+static const unichar_t str_fc2e[] = { 0x0641, 0x062d, 0 };
+static const unichar_t str_fc2f[] = { 0x0641, 0x062e, 0 };
+static const unichar_t str_fc30[] = { 0x0641, 0x0645, 0 };
+static const unichar_t str_fc31[] = { 0x0641, 0x0649, 0 };
+static const unichar_t str_fc32[] = { 0x0641, 0x064a, 0 };
+static const unichar_t str_fc33[] = { 0x0642, 0x062d, 0 };
+static const unichar_t str_fc34[] = { 0x0642, 0x0645, 0 };
+static const unichar_t str_fc35[] = { 0x0642, 0x0649, 0 };
+static const unichar_t str_fc36[] = { 0x0642, 0x064a, 0 };
+static const unichar_t str_fc37[] = { 0x0643, 0x0627, 0 };
+static const unichar_t str_fc38[] = { 0x0643, 0x062c, 0 };
+static const unichar_t str_fc39[] = { 0x0643, 0x062d, 0 };
+static const unichar_t str_fc3a[] = { 0x0643, 0x062e, 0 };
+static const unichar_t str_fc3b[] = { 0x0643, 0x0644, 0 };
+static const unichar_t str_fc3c[] = { 0x0643, 0x0645, 0 };
+static const unichar_t str_fc3d[] = { 0x0643, 0x0649, 0 };
+static const unichar_t str_fc3e[] = { 0x0643, 0x064a, 0 };
+static const unichar_t str_fc3f[] = { 0x0644, 0x062c, 0 };
+static const unichar_t str_fc40[] = { 0x0644, 0x062d, 0 };
+static const unichar_t str_fc41[] = { 0x0644, 0x062e, 0 };
+static const unichar_t str_fc42[] = { 0x0644, 0x0645, 0 };
+static const unichar_t str_fc43[] = { 0x0644, 0x0649, 0 };
+static const unichar_t str_fc44[] = { 0x0644, 0x064a, 0 };
+static const unichar_t str_fc45[] = { 0x0645, 0x062c, 0 };
+static const unichar_t str_fc46[] = { 0x0645, 0x062d, 0 };
+static const unichar_t str_fc47[] = { 0x0645, 0x062e, 0 };
+static const unichar_t str_fc48[] = { 0x0645, 0x0645, 0 };
+static const unichar_t str_fc49[] = { 0x0645, 0x0649, 0 };
+static const unichar_t str_fc4a[] = { 0x0645, 0x064a, 0 };
+static const unichar_t str_fc4b[] = { 0x0646, 0x062c, 0 };
+static const unichar_t str_fc4c[] = { 0x0646, 0x062d, 0 };
+static const unichar_t str_fc4d[] = { 0x0646, 0x062e, 0 };
+static const unichar_t str_fc4e[] = { 0x0646, 0x0645, 0 };
+static const unichar_t str_fc4f[] = { 0x0646, 0x0649, 0 };
+static const unichar_t str_fc50[] = { 0x0646, 0x064a, 0 };
+static const unichar_t str_fc51[] = { 0x0647, 0x062c, 0 };
+static const unichar_t str_fc52[] = { 0x0647, 0x0645, 0 };
+static const unichar_t str_fc53[] = { 0x0647, 0x0649, 0 };
+static const unichar_t str_fc54[] = { 0x0647, 0x064a, 0 };
+static const unichar_t str_fc55[] = { 0x064a, 0x062c, 0 };
+static const unichar_t str_fc56[] = { 0x064a, 0x062d, 0 };
+static const unichar_t str_fc57[] = { 0x064a, 0x062e, 0 };
+static const unichar_t str_fc58[] = { 0x064a, 0x0645, 0 };
+static const unichar_t str_fc59[] = { 0x064a, 0x0649, 0 };
+static const unichar_t str_fc5a[] = { 0x064a, 0x064a, 0 };
+static const unichar_t str_fc5b[] = { 0x0630, 0x0670, 0 };
+static const unichar_t str_fc5c[] = { 0x0631, 0x0670, 0 };
+static const unichar_t str_fc5d[] = { 0x0649, 0x0670, 0 };
+static const unichar_t str_fc5e[] = { 0x0020, 0x064c, 0x0651, 0 };
+static const unichar_t str_fc5f[] = { 0x0020, 0x064d, 0x0651, 0 };
+static const unichar_t str_fc60[] = { 0x0020, 0x064e, 0x0651, 0 };
+static const unichar_t str_fc61[] = { 0x0020, 0x064f, 0x0651, 0 };
+static const unichar_t str_fc62[] = { 0x0020, 0x0650, 0x0651, 0 };
+static const unichar_t str_fc63[] = { 0x0020, 0x0651, 0x0670, 0 };
+static const unichar_t str_fc64[] = { 0x0626, 0x0631, 0 };
+static const unichar_t str_fc65[] = { 0x0626, 0x0632, 0 };
+static const unichar_t str_fc66[] = { 0x0626, 0x0645, 0 };
+static const unichar_t str_fc67[] = { 0x0626, 0x0646, 0 };
+static const unichar_t str_fc68[] = { 0x0626, 0x0649, 0 };
+static const unichar_t str_fc69[] = { 0x0626, 0x064a, 0 };
+static const unichar_t str_fc6a[] = { 0x0628, 0x0631, 0 };
+static const unichar_t str_fc6b[] = { 0x0628, 0x0632, 0 };
+static const unichar_t str_fc6c[] = { 0x0628, 0x0645, 0 };
+static const unichar_t str_fc6d[] = { 0x0628, 0x0646, 0 };
+static const unichar_t str_fc6e[] = { 0x0628, 0x0649, 0 };
+static const unichar_t str_fc6f[] = { 0x0628, 0x064a, 0 };
+static const unichar_t str_fc70[] = { 0x062a, 0x0631, 0 };
+static const unichar_t str_fc71[] = { 0x062a, 0x0632, 0 };
+static const unichar_t str_fc72[] = { 0x062a, 0x0645, 0 };
+static const unichar_t str_fc73[] = { 0x062a, 0x0646, 0 };
+static const unichar_t str_fc74[] = { 0x062a, 0x0649, 0 };
+static const unichar_t str_fc75[] = { 0x062a, 0x064a, 0 };
+static const unichar_t str_fc76[] = { 0x062b, 0x0631, 0 };
+static const unichar_t str_fc77[] = { 0x062b, 0x0632, 0 };
+static const unichar_t str_fc78[] = { 0x062b, 0x0645, 0 };
+static const unichar_t str_fc79[] = { 0x062b, 0x0646, 0 };
+static const unichar_t str_fc7a[] = { 0x062b, 0x0649, 0 };
+static const unichar_t str_fc7b[] = { 0x062b, 0x064a, 0 };
+static const unichar_t str_fc7c[] = { 0x0641, 0x0649, 0 };
+static const unichar_t str_fc7d[] = { 0x0641, 0x064a, 0 };
+static const unichar_t str_fc7e[] = { 0x0642, 0x0649, 0 };
+static const unichar_t str_fc7f[] = { 0x0642, 0x064a, 0 };
+static const unichar_t str_fc80[] = { 0x0643, 0x0627, 0 };
+static const unichar_t str_fc81[] = { 0x0643, 0x0644, 0 };
+static const unichar_t str_fc82[] = { 0x0643, 0x0645, 0 };
+static const unichar_t str_fc83[] = { 0x0643, 0x0649, 0 };
+static const unichar_t str_fc84[] = { 0x0643, 0x064a, 0 };
+static const unichar_t str_fc85[] = { 0x0644, 0x0645, 0 };
+static const unichar_t str_fc86[] = { 0x0644, 0x0649, 0 };
+static const unichar_t str_fc87[] = { 0x0644, 0x064a, 0 };
+static const unichar_t str_fc88[] = { 0x0645, 0x0627, 0 };
+static const unichar_t str_fc89[] = { 0x0645, 0x0645, 0 };
+static const unichar_t str_fc8a[] = { 0x0646, 0x0631, 0 };
+static const unichar_t str_fc8b[] = { 0x0646, 0x0632, 0 };
+static const unichar_t str_fc8c[] = { 0x0646, 0x0645, 0 };
+static const unichar_t str_fc8d[] = { 0x0646, 0x0646, 0 };
+static const unichar_t str_fc8e[] = { 0x0646, 0x0649, 0 };
+static const unichar_t str_fc8f[] = { 0x0646, 0x064a, 0 };
+static const unichar_t str_fc90[] = { 0x0649, 0x0670, 0 };
+static const unichar_t str_fc91[] = { 0x064a, 0x0631, 0 };
+static const unichar_t str_fc92[] = { 0x064a, 0x0632, 0 };
+static const unichar_t str_fc93[] = { 0x064a, 0x0645, 0 };
+static const unichar_t str_fc94[] = { 0x064a, 0x0646, 0 };
+static const unichar_t str_fc95[] = { 0x064a, 0x0649, 0 };
+static const unichar_t str_fc96[] = { 0x064a, 0x064a, 0 };
+static const unichar_t str_fc97[] = { 0x0626, 0x062c, 0 };
+static const unichar_t str_fc98[] = { 0x0626, 0x062d, 0 };
+static const unichar_t str_fc99[] = { 0x0626, 0x062e, 0 };
+static const unichar_t str_fc9a[] = { 0x0626, 0x0645, 0 };
+static const unichar_t str_fc9b[] = { 0x0626, 0x0647, 0 };
+static const unichar_t str_fc9c[] = { 0x0628, 0x062c, 0 };
+static const unichar_t str_fc9d[] = { 0x0628, 0x062d, 0 };
+static const unichar_t str_fc9e[] = { 0x0628, 0x062e, 0 };
+static const unichar_t str_fc9f[] = { 0x0628, 0x0645, 0 };
+static const unichar_t str_fca0[] = { 0x0628, 0x0647, 0 };
+static const unichar_t str_fca1[] = { 0x062a, 0x062c, 0 };
+static const unichar_t str_fca2[] = { 0x062a, 0x062d, 0 };
+static const unichar_t str_fca3[] = { 0x062a, 0x062e, 0 };
+static const unichar_t str_fca4[] = { 0x062a, 0x0645, 0 };
+static const unichar_t str_fca5[] = { 0x062a, 0x0647, 0 };
+static const unichar_t str_fca6[] = { 0x062b, 0x0645, 0 };
+static const unichar_t str_fca7[] = { 0x062c, 0x062d, 0 };
+static const unichar_t str_fca8[] = { 0x062c, 0x0645, 0 };
+static const unichar_t str_fca9[] = { 0x062d, 0x062c, 0 };
+static const unichar_t str_fcaa[] = { 0x062d, 0x0645, 0 };
+static const unichar_t str_fcab[] = { 0x062e, 0x062c, 0 };
+static const unichar_t str_fcac[] = { 0x062e, 0x0645, 0 };
+static const unichar_t str_fcad[] = { 0x0633, 0x062c, 0 };
+static const unichar_t str_fcae[] = { 0x0633, 0x062d, 0 };
+static const unichar_t str_fcaf[] = { 0x0633, 0x062e, 0 };
+static const unichar_t str_fcb0[] = { 0x0633, 0x0645, 0 };
+static const unichar_t str_fcb1[] = { 0x0635, 0x062d, 0 };
+static const unichar_t str_fcb2[] = { 0x0635, 0x062e, 0 };
+static const unichar_t str_fcb3[] = { 0x0635, 0x0645, 0 };
+static const unichar_t str_fcb4[] = { 0x0636, 0x062c, 0 };
+static const unichar_t str_fcb5[] = { 0x0636, 0x062d, 0 };
+static const unichar_t str_fcb6[] = { 0x0636, 0x062e, 0 };
+static const unichar_t str_fcb7[] = { 0x0636, 0x0645, 0 };
+static const unichar_t str_fcb8[] = { 0x0637, 0x062d, 0 };
+static const unichar_t str_fcb9[] = { 0x0638, 0x0645, 0 };
+static const unichar_t str_fcba[] = { 0x0639, 0x062c, 0 };
+static const unichar_t str_fcbb[] = { 0x0639, 0x0645, 0 };
+static const unichar_t str_fcbc[] = { 0x063a, 0x062c, 0 };
+static const unichar_t str_fcbd[] = { 0x063a, 0x0645, 0 };
+static const unichar_t str_fcbe[] = { 0x0641, 0x062c, 0 };
+static const unichar_t str_fcbf[] = { 0x0641, 0x062d, 0 };
+static const unichar_t str_fcc0[] = { 0x0641, 0x062e, 0 };
+static const unichar_t str_fcc1[] = { 0x0641, 0x0645, 0 };
+static const unichar_t str_fcc2[] = { 0x0642, 0x062d, 0 };
+static const unichar_t str_fcc3[] = { 0x0642, 0x0645, 0 };
+static const unichar_t str_fcc4[] = { 0x0643, 0x062c, 0 };
+static const unichar_t str_fcc5[] = { 0x0643, 0x062d, 0 };
+static const unichar_t str_fcc6[] = { 0x0643, 0x062e, 0 };
+static const unichar_t str_fcc7[] = { 0x0643, 0x0644, 0 };
+static const unichar_t str_fcc8[] = { 0x0643, 0x0645, 0 };
+static const unichar_t str_fcc9[] = { 0x0644, 0x062c, 0 };
+static const unichar_t str_fcca[] = { 0x0644, 0x062d, 0 };
+static const unichar_t str_fccb[] = { 0x0644, 0x062e, 0 };
+static const unichar_t str_fccc[] = { 0x0644, 0x0645, 0 };
+static const unichar_t str_fccd[] = { 0x0644, 0x0647, 0 };
+static const unichar_t str_fcce[] = { 0x0645, 0x062c, 0 };
+static const unichar_t str_fccf[] = { 0x0645, 0x062d, 0 };
+static const unichar_t str_fcd0[] = { 0x0645, 0x062e, 0 };
+static const unichar_t str_fcd1[] = { 0x0645, 0x0645, 0 };
+static const unichar_t str_fcd2[] = { 0x0646, 0x062c, 0 };
+static const unichar_t str_fcd3[] = { 0x0646, 0x062d, 0 };
+static const unichar_t str_fcd4[] = { 0x0646, 0x062e, 0 };
+static const unichar_t str_fcd5[] = { 0x0646, 0x0645, 0 };
+static const unichar_t str_fcd6[] = { 0x0646, 0x0647, 0 };
+static const unichar_t str_fcd7[] = { 0x0647, 0x062c, 0 };
+static const unichar_t str_fcd8[] = { 0x0647, 0x0645, 0 };
+static const unichar_t str_fcd9[] = { 0x0647, 0x0670, 0 };
+static const unichar_t str_fcda[] = { 0x064a, 0x062c, 0 };
+static const unichar_t str_fcdb[] = { 0x064a, 0x062d, 0 };
+static const unichar_t str_fcdc[] = { 0x064a, 0x062e, 0 };
+static const unichar_t str_fcdd[] = { 0x064a, 0x0645, 0 };
+static const unichar_t str_fcde[] = { 0x064a, 0x0647, 0 };
+static const unichar_t str_fcdf[] = { 0x0626, 0x0645, 0 };
+static const unichar_t str_fce0[] = { 0x0626, 0x0647, 0 };
+static const unichar_t str_fce1[] = { 0x0628, 0x0645, 0 };
+static const unichar_t str_fce2[] = { 0x0628, 0x0647, 0 };
+static const unichar_t str_fce3[] = { 0x062a, 0x0645, 0 };
+static const unichar_t str_fce4[] = { 0x062a, 0x0647, 0 };
+static const unichar_t str_fce5[] = { 0x062b, 0x0645, 0 };
+static const unichar_t str_fce6[] = { 0x062b, 0x0647, 0 };
+static const unichar_t str_fce7[] = { 0x0633, 0x0645, 0 };
+static const unichar_t str_fce8[] = { 0x0633, 0x0647, 0 };
+static const unichar_t str_fce9[] = { 0x0634, 0x0645, 0 };
+static const unichar_t str_fcea[] = { 0x0634, 0x0647, 0 };
+static const unichar_t str_fceb[] = { 0x0643, 0x0644, 0 };
+static const unichar_t str_fcec[] = { 0x0643, 0x0645, 0 };
+static const unichar_t str_fced[] = { 0x0644, 0x0645, 0 };
+static const unichar_t str_fcee[] = { 0x0646, 0x0645, 0 };
+static const unichar_t str_fcef[] = { 0x0646, 0x0647, 0 };
+static const unichar_t str_fcf0[] = { 0x064a, 0x0645, 0 };
+static const unichar_t str_fcf1[] = { 0x064a, 0x0647, 0 };
+static const unichar_t str_fcf2[] = { 0x0640, 0x064e, 0x0651, 0 };
+static const unichar_t str_fcf3[] = { 0x0640, 0x064f, 0x0651, 0 };
+static const unichar_t str_fcf4[] = { 0x0640, 0x0650, 0x0651, 0 };
+static const unichar_t str_fcf5[] = { 0x0637, 0x0649, 0 };
+static const unichar_t str_fcf6[] = { 0x0637, 0x064a, 0 };
+static const unichar_t str_fcf7[] = { 0x0639, 0x0649, 0 };
+static const unichar_t str_fcf8[] = { 0x0639, 0x064a, 0 };
+static const unichar_t str_fcf9[] = { 0x063a, 0x0649, 0 };
+static const unichar_t str_fcfa[] = { 0x063a, 0x064a, 0 };
+static const unichar_t str_fcfb[] = { 0x0633, 0x0649, 0 };
+static const unichar_t str_fcfc[] = { 0x0633, 0x064a, 0 };
+static const unichar_t str_fcfd[] = { 0x0634, 0x0649, 0 };
+static const unichar_t str_fcfe[] = { 0x0634, 0x064a, 0 };
+static const unichar_t str_fcff[] = { 0x062d, 0x0649, 0 };
+static const unichar_t str_fd00[] = { 0x062d, 0x064a, 0 };
+static const unichar_t str_fd01[] = { 0x062c, 0x0649, 0 };
+static const unichar_t str_fd02[] = { 0x062c, 0x064a, 0 };
+static const unichar_t str_fd03[] = { 0x062e, 0x0649, 0 };
+static const unichar_t str_fd04[] = { 0x062e, 0x064a, 0 };
+static const unichar_t str_fd05[] = { 0x0635, 0x0649, 0 };
+static const unichar_t str_fd06[] = { 0x0635, 0x064a, 0 };
+static const unichar_t str_fd07[] = { 0x0636, 0x0649, 0 };
+static const unichar_t str_fd08[] = { 0x0636, 0x064a, 0 };
+static const unichar_t str_fd09[] = { 0x0634, 0x062c, 0 };
+static const unichar_t str_fd0a[] = { 0x0634, 0x062d, 0 };
+static const unichar_t str_fd0b[] = { 0x0634, 0x062e, 0 };
+static const unichar_t str_fd0c[] = { 0x0634, 0x0645, 0 };
+static const unichar_t str_fd0d[] = { 0x0634, 0x0631, 0 };
+static const unichar_t str_fd0e[] = { 0x0633, 0x0631, 0 };
+static const unichar_t str_fd0f[] = { 0x0635, 0x0631, 0 };
+static const unichar_t str_fd10[] = { 0x0636, 0x0631, 0 };
+static const unichar_t str_fd11[] = { 0x0637, 0x0649, 0 };
+static const unichar_t str_fd12[] = { 0x0637, 0x064a, 0 };
+static const unichar_t str_fd13[] = { 0x0639, 0x0649, 0 };
+static const unichar_t str_fd14[] = { 0x0639, 0x064a, 0 };
+static const unichar_t str_fd15[] = { 0x063a, 0x0649, 0 };
+static const unichar_t str_fd16[] = { 0x063a, 0x064a, 0 };
+static const unichar_t str_fd17[] = { 0x0633, 0x0649, 0 };
+static const unichar_t str_fd18[] = { 0x0633, 0x064a, 0 };
+static const unichar_t str_fd19[] = { 0x0634, 0x0649, 0 };
+static const unichar_t str_fd1a[] = { 0x0634, 0x064a, 0 };
+static const unichar_t str_fd1b[] = { 0x062d, 0x0649, 0 };
+static const unichar_t str_fd1c[] = { 0x062d, 0x064a, 0 };
+static const unichar_t str_fd1d[] = { 0x062c, 0x0649, 0 };
+static const unichar_t str_fd1e[] = { 0x062c, 0x064a, 0 };
+static const unichar_t str_fd1f[] = { 0x062e, 0x0649, 0 };
+static const unichar_t str_fd20[] = { 0x062e, 0x064a, 0 };
+static const unichar_t str_fd21[] = { 0x0635, 0x0649, 0 };
+static const unichar_t str_fd22[] = { 0x0635, 0x064a, 0 };
+static const unichar_t str_fd23[] = { 0x0636, 0x0649, 0 };
+static const unichar_t str_fd24[] = { 0x0636, 0x064a, 0 };
+static const unichar_t str_fd25[] = { 0x0634, 0x062c, 0 };
+static const unichar_t str_fd26[] = { 0x0634, 0x062d, 0 };
+static const unichar_t str_fd27[] = { 0x0634, 0x062e, 0 };
+static const unichar_t str_fd28[] = { 0x0634, 0x0645, 0 };
+static const unichar_t str_fd29[] = { 0x0634, 0x0631, 0 };
+static const unichar_t str_fd2a[] = { 0x0633, 0x0631, 0 };
+static const unichar_t str_fd2b[] = { 0x0635, 0x0631, 0 };
+static const unichar_t str_fd2c[] = { 0x0636, 0x0631, 0 };
+static const unichar_t str_fd2d[] = { 0x0634, 0x062c, 0 };
+static const unichar_t str_fd2e[] = { 0x0634, 0x062d, 0 };
+static const unichar_t str_fd2f[] = { 0x0634, 0x062e, 0 };
+static const unichar_t str_fd30[] = { 0x0634, 0x0645, 0 };
+static const unichar_t str_fd31[] = { 0x0633, 0x0647, 0 };
+static const unichar_t str_fd32[] = { 0x0634, 0x0647, 0 };
+static const unichar_t str_fd33[] = { 0x0637, 0x0645, 0 };
+static const unichar_t str_fd34[] = { 0x0633, 0x062c, 0 };
+static const unichar_t str_fd35[] = { 0x0633, 0x062d, 0 };
+static const unichar_t str_fd36[] = { 0x0633, 0x062e, 0 };
+static const unichar_t str_fd37[] = { 0x0634, 0x062c, 0 };
+static const unichar_t str_fd38[] = { 0x0634, 0x062d, 0 };
+static const unichar_t str_fd39[] = { 0x0634, 0x062e, 0 };
+static const unichar_t str_fd3a[] = { 0x0637, 0x0645, 0 };
+static const unichar_t str_fd3b[] = { 0x0638, 0x0645, 0 };
+static const unichar_t str_fd3c[] = { 0x0627, 0x064b, 0 };
+static const unichar_t str_fd3d[] = { 0x0627, 0x064b, 0 };
+static const unichar_t str_fd50[] = { 0x062a, 0x062c, 0x0645, 0 };
+static const unichar_t str_fd51[] = { 0x062a, 0x062d, 0x062c, 0 };
+static const unichar_t str_fd52[] = { 0x062a, 0x062d, 0x062c, 0 };
+static const unichar_t str_fd53[] = { 0x062a, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd54[] = { 0x062a, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd55[] = { 0x062a, 0x0645, 0x062c, 0 };
+static const unichar_t str_fd56[] = { 0x062a, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd57[] = { 0x062a, 0x0645, 0x062e, 0 };
+static const unichar_t str_fd58[] = { 0x062c, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd59[] = { 0x062c, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd5a[] = { 0x062d, 0x0645, 0x064a, 0 };
+static const unichar_t str_fd5b[] = { 0x062d, 0x0645, 0x0649, 0 };
+static const unichar_t str_fd5c[] = { 0x0633, 0x062d, 0x062c, 0 };
+static const unichar_t str_fd5d[] = { 0x0633, 0x062c, 0x062d, 0 };
+static const unichar_t str_fd5e[] = { 0x0633, 0x062c, 0x0649, 0 };
+static const unichar_t str_fd5f[] = { 0x0633, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd60[] = { 0x0633, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd61[] = { 0x0633, 0x0645, 0x062c, 0 };
+static const unichar_t str_fd62[] = { 0x0633, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd63[] = { 0x0633, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd64[] = { 0x0635, 0x062d, 0x062d, 0 };
+static const unichar_t str_fd65[] = { 0x0635, 0x062d, 0x062d, 0 };
+static const unichar_t str_fd66[] = { 0x0635, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd67[] = { 0x0634, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd68[] = { 0x0634, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd69[] = { 0x0634, 0x062c, 0x064a, 0 };
+static const unichar_t str_fd6a[] = { 0x0634, 0x0645, 0x062e, 0 };
+static const unichar_t str_fd6b[] = { 0x0634, 0x0645, 0x062e, 0 };
+static const unichar_t str_fd6c[] = { 0x0634, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd6d[] = { 0x0634, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd6e[] = { 0x0636, 0x062d, 0x0649, 0 };
+static const unichar_t str_fd6f[] = { 0x0636, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd70[] = { 0x0636, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd71[] = { 0x0637, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd72[] = { 0x0637, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd73[] = { 0x0637, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd74[] = { 0x0637, 0x0645, 0x064a, 0 };
+static const unichar_t str_fd75[] = { 0x0639, 0x062c, 0x0645, 0 };
+static const unichar_t str_fd76[] = { 0x0639, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd77[] = { 0x0639, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd78[] = { 0x0639, 0x0645, 0x0649, 0 };
+static const unichar_t str_fd79[] = { 0x063a, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd7a[] = { 0x063a, 0x0645, 0x064a, 0 };
+static const unichar_t str_fd7b[] = { 0x063a, 0x0645, 0x0649, 0 };
+static const unichar_t str_fd7c[] = { 0x0641, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd7d[] = { 0x0641, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd7e[] = { 0x0642, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd7f[] = { 0x0642, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd80[] = { 0x0644, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd81[] = { 0x0644, 0x062d, 0x064a, 0 };
+static const unichar_t str_fd82[] = { 0x0644, 0x062d, 0x0649, 0 };
+static const unichar_t str_fd83[] = { 0x0644, 0x062c, 0x062c, 0 };
+static const unichar_t str_fd84[] = { 0x0644, 0x062c, 0x062c, 0 };
+static const unichar_t str_fd85[] = { 0x0644, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd86[] = { 0x0644, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd87[] = { 0x0644, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd88[] = { 0x0644, 0x0645, 0x062d, 0 };
+static const unichar_t str_fd89[] = { 0x0645, 0x062d, 0x062c, 0 };
+static const unichar_t str_fd8a[] = { 0x0645, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd8b[] = { 0x0645, 0x062d, 0x064a, 0 };
+static const unichar_t str_fd8c[] = { 0x0645, 0x062c, 0x062d, 0 };
+static const unichar_t str_fd8d[] = { 0x0645, 0x062c, 0x0645, 0 };
+static const unichar_t str_fd8e[] = { 0x0645, 0x062e, 0x062c, 0 };
+static const unichar_t str_fd8f[] = { 0x0645, 0x062e, 0x0645, 0 };
+static const unichar_t str_fd92[] = { 0x0645, 0x062c, 0x062e, 0 };
+static const unichar_t str_fd93[] = { 0x0647, 0x0645, 0x062c, 0 };
+static const unichar_t str_fd94[] = { 0x0647, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd95[] = { 0x0646, 0x062d, 0x0645, 0 };
+static const unichar_t str_fd96[] = { 0x0646, 0x062d, 0x0649, 0 };
+static const unichar_t str_fd97[] = { 0x0646, 0x062c, 0x0645, 0 };
+static const unichar_t str_fd98[] = { 0x0646, 0x062c, 0x0645, 0 };
+static const unichar_t str_fd99[] = { 0x0646, 0x062c, 0x0649, 0 };
+static const unichar_t str_fd9a[] = { 0x0646, 0x0645, 0x064a, 0 };
+static const unichar_t str_fd9b[] = { 0x0646, 0x0645, 0x0649, 0 };
+static const unichar_t str_fd9c[] = { 0x064a, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd9d[] = { 0x064a, 0x0645, 0x0645, 0 };
+static const unichar_t str_fd9e[] = { 0x0628, 0x062e, 0x064a, 0 };
+static const unichar_t str_fd9f[] = { 0x062a, 0x062c, 0x064a, 0 };
+static const unichar_t str_fda0[] = { 0x062a, 0x062c, 0x0649, 0 };
+static const unichar_t str_fda1[] = { 0x062a, 0x062e, 0x064a, 0 };
+static const unichar_t str_fda2[] = { 0x062a, 0x062e, 0x0649, 0 };
+static const unichar_t str_fda3[] = { 0x062a, 0x0645, 0x064a, 0 };
+static const unichar_t str_fda4[] = { 0x062a, 0x0645, 0x0649, 0 };
+static const unichar_t str_fda5[] = { 0x062c, 0x0645, 0x064a, 0 };
+static const unichar_t str_fda6[] = { 0x062c, 0x062d, 0x0649, 0 };
+static const unichar_t str_fda7[] = { 0x062c, 0x0645, 0x0649, 0 };
+static const unichar_t str_fda8[] = { 0x0633, 0x062e, 0x0649, 0 };
+static const unichar_t str_fda9[] = { 0x0635, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdaa[] = { 0x0634, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdab[] = { 0x0636, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdac[] = { 0x0644, 0x062c, 0x064a, 0 };
+static const unichar_t str_fdad[] = { 0x0644, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdae[] = { 0x064a, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdaf[] = { 0x064a, 0x062c, 0x064a, 0 };
+static const unichar_t str_fdb0[] = { 0x064a, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdb1[] = { 0x0645, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdb2[] = { 0x0642, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdb3[] = { 0x0646, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdb4[] = { 0x0642, 0x0645, 0x062d, 0 };
+static const unichar_t str_fdb5[] = { 0x0644, 0x062d, 0x0645, 0 };
+static const unichar_t str_fdb6[] = { 0x0639, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdb7[] = { 0x0643, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdb8[] = { 0x0646, 0x062c, 0x062d, 0 };
+static const unichar_t str_fdb9[] = { 0x0645, 0x062e, 0x064a, 0 };
+static const unichar_t str_fdba[] = { 0x0644, 0x062c, 0x0645, 0 };
+static const unichar_t str_fdbb[] = { 0x0643, 0x0645, 0x0645, 0 };
+static const unichar_t str_fdbc[] = { 0x0644, 0x062c, 0x0645, 0 };
+static const unichar_t str_fdbd[] = { 0x0646, 0x062c, 0x062d, 0 };
+static const unichar_t str_fdbe[] = { 0x062c, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdbf[] = { 0x062d, 0x062c, 0x064a, 0 };
+static const unichar_t str_fdc0[] = { 0x0645, 0x062c, 0x064a, 0 };
+static const unichar_t str_fdc1[] = { 0x0641, 0x0645, 0x064a, 0 };
+static const unichar_t str_fdc2[] = { 0x0628, 0x062d, 0x064a, 0 };
+static const unichar_t str_fdc3[] = { 0x0643, 0x0645, 0x0645, 0 };
+static const unichar_t str_fdc4[] = { 0x0639, 0x062c, 0x0645, 0 };
+static const unichar_t str_fdc5[] = { 0x0635, 0x0645, 0x0645, 0 };
+static const unichar_t str_fdc6[] = { 0x0633, 0x062e, 0x064a, 0 };
+static const unichar_t str_fdc7[] = { 0x0646, 0x062c, 0x064a, 0 };
+static const unichar_t str_fdf0[] = { 0x0635, 0x0644, 0x06d2, 0 };
+static const unichar_t str_fdf1[] = { 0x0642, 0x0644, 0x06d2, 0 };
+static const unichar_t str_fdf2[] = { 0x0627, 0x0644, 0x0644, 0x0647, 0 };
+static const unichar_t str_fdf3[] = { 0x0627, 0x0643, 0x0628, 0x0631, 0 };
+static const unichar_t str_fdf4[] = { 0x0645, 0x062d, 0x0645, 0x062f, 0 };
+static const unichar_t str_fdf5[] = { 0x0635, 0x0644, 0x0639, 0x0645, 0 };
+static const unichar_t str_fdf6[] = { 0x0631, 0x0633, 0x0648, 0x0644, 0 };
+static const unichar_t str_fdf7[] = { 0x0639, 0x0644, 0x064a, 0x0647, 0 };
+static const unichar_t str_fdf8[] = { 0x0648, 0x0633, 0x0644, 0x0645, 0 };
+static const unichar_t str_fdf9[] = { 0x0635, 0x0644, 0x0649, 0 };
+static const unichar_t str_fdfa[] = { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064a, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645, 0 };
+static const unichar_t str_fdfb[] = { 0x062c, 0x0644, 0x0020, 0x062c, 0x0644, 0x0627, 0x0644, 0x0647, 0 };
+static const unichar_t str_fdfc[] = { 0x0631, 0x06cc, 0x0627, 0x0644, 0 };
+static const unichar_t str_fe10[] = { 0x002c, 0 };
+static const unichar_t str_fe11[] = { 0x3001, 0 };
+static const unichar_t str_fe12[] = { 0x3002, 0 };
+static const unichar_t str_fe13[] = { 0x003a, 0 };
+static const unichar_t str_fe14[] = { 0x003b, 0 };
+static const unichar_t str_fe15[] = { 0x0021, 0 };
+static const unichar_t str_fe16[] = { 0x003f, 0 };
+static const unichar_t str_fe17[] = { 0x3016, 0 };
+static const unichar_t str_fe18[] = { 0x3017, 0 };
+static const unichar_t str_fe19[] = { 0x2026, 0 };
+static const unichar_t str_fe30[] = { 0x2025, 0 };
+static const unichar_t str_fe31[] = { 0x2014, 0 };
+static const unichar_t str_fe32[] = { 0x2013, 0 };
+static const unichar_t str_fe33[] = { 0x005f, 0 };
+static const unichar_t str_fe34[] = { 0x005f, 0 };
+static const unichar_t str_fe35[] = { 0x0028, 0 };
+static const unichar_t str_fe36[] = { 0x0029, 0 };
+static const unichar_t str_fe37[] = { 0x007b, 0 };
+static const unichar_t str_fe38[] = { 0x007d, 0 };
+static const unichar_t str_fe39[] = { 0x3014, 0 };
+static const unichar_t str_fe3a[] = { 0x3015, 0 };
+static const unichar_t str_fe3b[] = { 0x3010, 0 };
+static const unichar_t str_fe3c[] = { 0x3011, 0 };
+static const unichar_t str_fe3d[] = { 0x300a, 0 };
+static const unichar_t str_fe3e[] = { 0x300b, 0 };
+static const unichar_t str_fe3f[] = { 0x3008, 0 };
+static const unichar_t str_fe40[] = { 0x3009, 0 };
+static const unichar_t str_fe41[] = { 0x300c, 0 };
+static const unichar_t str_fe42[] = { 0x300d, 0 };
+static const unichar_t str_fe43[] = { 0x300e, 0 };
+static const unichar_t str_fe44[] = { 0x300f, 0 };
+static const unichar_t str_fe47[] = { 0x005b, 0 };
+static const unichar_t str_fe48[] = { 0x005d, 0 };
+static const unichar_t str_fe49[] = { 0x203e, 0 };
+static const unichar_t str_fe4a[] = { 0x203e, 0 };
+static const unichar_t str_fe4b[] = { 0x203e, 0 };
+static const unichar_t str_fe4c[] = { 0x203e, 0 };
+static const unichar_t str_fe4d[] = { 0x005f, 0 };
+static const unichar_t str_fe4e[] = { 0x005f, 0 };
+static const unichar_t str_fe4f[] = { 0x005f, 0 };
+static const unichar_t str_fe50[] = { 0x002c, 0 };
+static const unichar_t str_fe51[] = { 0x3001, 0 };
+static const unichar_t str_fe52[] = { 0x002e, 0 };
+static const unichar_t str_fe54[] = { 0x003b, 0 };
+static const unichar_t str_fe55[] = { 0x003a, 0 };
+static const unichar_t str_fe56[] = { 0x003f, 0 };
+static const unichar_t str_fe57[] = { 0x0021, 0 };
+static const unichar_t str_fe58[] = { 0x2014, 0 };
+static const unichar_t str_fe59[] = { 0x0028, 0 };
+static const unichar_t str_fe5a[] = { 0x0029, 0 };
+static const unichar_t str_fe5b[] = { 0x007b, 0 };
+static const unichar_t str_fe5c[] = { 0x007d, 0 };
+static const unichar_t str_fe5d[] = { 0x3014, 0 };
+static const unichar_t str_fe5e[] = { 0x3015, 0 };
+static const unichar_t str_fe5f[] = { 0x0023, 0 };
+static const unichar_t str_fe60[] = { 0x0026, 0 };
+static const unichar_t str_fe61[] = { 0x002a, 0 };
+static const unichar_t str_fe62[] = { 0x002b, 0 };
+static const unichar_t str_fe63[] = { 0x002d, 0 };
+static const unichar_t str_fe64[] = { 0x003c, 0 };
+static const unichar_t str_fe65[] = { 0x003e, 0 };
+static const unichar_t str_fe66[] = { 0x003d, 0 };
+static const unichar_t str_fe68[] = { 0x005c, 0 };
+static const unichar_t str_fe69[] = { 0x0024, 0 };
+static const unichar_t str_fe6a[] = { 0x0025, 0 };
+static const unichar_t str_fe6b[] = { 0x0040, 0 };
+static const unichar_t str_fe70[] = { 0x0020, 0x064b, 0 };
+static const unichar_t str_fe71[] = { 0x0640, 0x064b, 0 };
+static const unichar_t str_fe72[] = { 0x0020, 0x064c, 0 };
+static const unichar_t str_fe74[] = { 0x0020, 0x064d, 0 };
+static const unichar_t str_fe76[] = { 0x0020, 0x064e, 0 };
+static const unichar_t str_fe77[] = { 0x0640, 0x064e, 0 };
+static const unichar_t str_fe78[] = { 0x0020, 0x064f, 0 };
+static const unichar_t str_fe79[] = { 0x0640, 0x064f, 0 };
+static const unichar_t str_fe7a[] = { 0x0020, 0x0650, 0 };
+static const unichar_t str_fe7b[] = { 0x0640, 0x0650, 0 };
+static const unichar_t str_fe7c[] = { 0x0020, 0x0651, 0 };
+static const unichar_t str_fe7d[] = { 0x0640, 0x0651, 0 };
+static const unichar_t str_fe7e[] = { 0x0020, 0x0652, 0 };
+static const unichar_t str_fe7f[] = { 0x0640, 0x0652, 0 };
+static const unichar_t str_fe80[] = { 0x0621, 0 };
+static const unichar_t str_fe81[] = { 0x0622, 0 };
+static const unichar_t str_fe82[] = { 0x0622, 0 };
+static const unichar_t str_fe83[] = { 0x0623, 0 };
+static const unichar_t str_fe84[] = { 0x0623, 0 };
+static const unichar_t str_fe85[] = { 0x0624, 0 };
+static const unichar_t str_fe86[] = { 0x0624, 0 };
+static const unichar_t str_fe87[] = { 0x0625, 0 };
+static const unichar_t str_fe88[] = { 0x0625, 0 };
+static const unichar_t str_fe89[] = { 0x0626, 0 };
+static const unichar_t str_fe8a[] = { 0x0626, 0 };
+static const unichar_t str_fe8b[] = { 0x0626, 0 };
+static const unichar_t str_fe8c[] = { 0x0626, 0 };
+static const unichar_t str_fe8d[] = { 0x0627, 0 };
+static const unichar_t str_fe8e[] = { 0x0627, 0 };
+static const unichar_t str_fe8f[] = { 0x0628, 0 };
+static const unichar_t str_fe90[] = { 0x0628, 0 };
+static const unichar_t str_fe91[] = { 0x0628, 0 };
+static const unichar_t str_fe92[] = { 0x0628, 0 };
+static const unichar_t str_fe93[] = { 0x0629, 0 };
+static const unichar_t str_fe94[] = { 0x0629, 0 };
+static const unichar_t str_fe95[] = { 0x062a, 0 };
+static const unichar_t str_fe96[] = { 0x062a, 0 };
+static const unichar_t str_fe97[] = { 0x062a, 0 };
+static const unichar_t str_fe98[] = { 0x062a, 0 };
+static const unichar_t str_fe99[] = { 0x062b, 0 };
+static const unichar_t str_fe9a[] = { 0x062b, 0 };
+static const unichar_t str_fe9b[] = { 0x062b, 0 };
+static const unichar_t str_fe9c[] = { 0x062b, 0 };
+static const unichar_t str_fe9d[] = { 0x062c, 0 };
+static const unichar_t str_fe9e[] = { 0x062c, 0 };
+static const unichar_t str_fe9f[] = { 0x062c, 0 };
+static const unichar_t str_fea0[] = { 0x062c, 0 };
+static const unichar_t str_fea1[] = { 0x062d, 0 };
+static const unichar_t str_fea2[] = { 0x062d, 0 };
+static const unichar_t str_fea3[] = { 0x062d, 0 };
+static const unichar_t str_fea4[] = { 0x062d, 0 };
+static const unichar_t str_fea5[] = { 0x062e, 0 };
+static const unichar_t str_fea6[] = { 0x062e, 0 };
+static const unichar_t str_fea7[] = { 0x062e, 0 };
+static const unichar_t str_fea8[] = { 0x062e, 0 };
+static const unichar_t str_fea9[] = { 0x062f, 0 };
+static const unichar_t str_feaa[] = { 0x062f, 0 };
+static const unichar_t str_feab[] = { 0x0630, 0 };
+static const unichar_t str_feac[] = { 0x0630, 0 };
+static const unichar_t str_fead[] = { 0x0631, 0 };
+static const unichar_t str_feae[] = { 0x0631, 0 };
+static const unichar_t str_feaf[] = { 0x0632, 0 };
+static const unichar_t str_feb0[] = { 0x0632, 0 };
+static const unichar_t str_feb1[] = { 0x0633, 0 };
+static const unichar_t str_feb2[] = { 0x0633, 0 };
+static const unichar_t str_feb3[] = { 0x0633, 0 };
+static const unichar_t str_feb4[] = { 0x0633, 0 };
+static const unichar_t str_feb5[] = { 0x0634, 0 };
+static const unichar_t str_feb6[] = { 0x0634, 0 };
+static const unichar_t str_feb7[] = { 0x0634, 0 };
+static const unichar_t str_feb8[] = { 0x0634, 0 };
+static const unichar_t str_feb9[] = { 0x0635, 0 };
+static const unichar_t str_feba[] = { 0x0635, 0 };
+static const unichar_t str_febb[] = { 0x0635, 0 };
+static const unichar_t str_febc[] = { 0x0635, 0 };
+static const unichar_t str_febd[] = { 0x0636, 0 };
+static const unichar_t str_febe[] = { 0x0636, 0 };
+static const unichar_t str_febf[] = { 0x0636, 0 };
+static const unichar_t str_fec0[] = { 0x0636, 0 };
+static const unichar_t str_fec1[] = { 0x0637, 0 };
+static const unichar_t str_fec2[] = { 0x0637, 0 };
+static const unichar_t str_fec3[] = { 0x0637, 0 };
+static const unichar_t str_fec4[] = { 0x0637, 0 };
+static const unichar_t str_fec5[] = { 0x0638, 0 };
+static const unichar_t str_fec6[] = { 0x0638, 0 };
+static const unichar_t str_fec7[] = { 0x0638, 0 };
+static const unichar_t str_fec8[] = { 0x0638, 0 };
+static const unichar_t str_fec9[] = { 0x0639, 0 };
+static const unichar_t str_feca[] = { 0x0639, 0 };
+static const unichar_t str_fecb[] = { 0x0639, 0 };
+static const unichar_t str_fecc[] = { 0x0639, 0 };
+static const unichar_t str_fecd[] = { 0x063a, 0 };
+static const unichar_t str_fece[] = { 0x063a, 0 };
+static const unichar_t str_fecf[] = { 0x063a, 0 };
+static const unichar_t str_fed0[] = { 0x063a, 0 };
+static const unichar_t str_fed1[] = { 0x0641, 0 };
+static const unichar_t str_fed2[] = { 0x0641, 0 };
+static const unichar_t str_fed3[] = { 0x0641, 0 };
+static const unichar_t str_fed4[] = { 0x0641, 0 };
+static const unichar_t str_fed5[] = { 0x0642, 0 };
+static const unichar_t str_fed6[] = { 0x0642, 0 };
+static const unichar_t str_fed7[] = { 0x0642, 0 };
+static const unichar_t str_fed8[] = { 0x0642, 0 };
+static const unichar_t str_fed9[] = { 0x0643, 0 };
+static const unichar_t str_feda[] = { 0x0643, 0 };
+static const unichar_t str_fedb[] = { 0x0643, 0 };
+static const unichar_t str_fedc[] = { 0x0643, 0 };
+static const unichar_t str_fedd[] = { 0x0644, 0 };
+static const unichar_t str_fede[] = { 0x0644, 0 };
+static const unichar_t str_fedf[] = { 0x0644, 0 };
+static const unichar_t str_fee0[] = { 0x0644, 0 };
+static const unichar_t str_fee1[] = { 0x0645, 0 };
+static const unichar_t str_fee2[] = { 0x0645, 0 };
+static const unichar_t str_fee3[] = { 0x0645, 0 };
+static const unichar_t str_fee4[] = { 0x0645, 0 };
+static const unichar_t str_fee5[] = { 0x0646, 0 };
+static const unichar_t str_fee6[] = { 0x0646, 0 };
+static const unichar_t str_fee7[] = { 0x0646, 0 };
+static const unichar_t str_fee8[] = { 0x0646, 0 };
+static const unichar_t str_fee9[] = { 0x0647, 0 };
+static const unichar_t str_feea[] = { 0x0647, 0 };
+static const unichar_t str_feeb[] = { 0x0647, 0 };
+static const unichar_t str_feec[] = { 0x0647, 0 };
+static const unichar_t str_feed[] = { 0x0648, 0 };
+static const unichar_t str_feee[] = { 0x0648, 0 };
+static const unichar_t str_feef[] = { 0x0649, 0 };
+static const unichar_t str_fef0[] = { 0x0649, 0 };
+static const unichar_t str_fef1[] = { 0x064a, 0 };
+static const unichar_t str_fef2[] = { 0x064a, 0 };
+static const unichar_t str_fef3[] = { 0x064a, 0 };
+static const unichar_t str_fef4[] = { 0x064a, 0 };
+static const unichar_t str_fef5[] = { 0x0644, 0x0622, 0 };
+static const unichar_t str_fef6[] = { 0x0644, 0x0622, 0 };
+static const unichar_t str_fef7[] = { 0x0644, 0x0623, 0 };
+static const unichar_t str_fef8[] = { 0x0644, 0x0623, 0 };
+static const unichar_t str_fef9[] = { 0x0644, 0x0625, 0 };
+static const unichar_t str_fefa[] = { 0x0644, 0x0625, 0 };
+static const unichar_t str_fefb[] = { 0x0644, 0x0627, 0 };
+static const unichar_t str_fefc[] = { 0x0644, 0x0627, 0 };
+static const unichar_t str_ff01[] = { 0x0021, 0 };
+static const unichar_t str_ff02[] = { 0x0022, 0 };
+static const unichar_t str_ff03[] = { 0x0023, 0 };
+static const unichar_t str_ff04[] = { 0x0024, 0 };
+static const unichar_t str_ff05[] = { 0x0025, 0 };
+static const unichar_t str_ff06[] = { 0x0026, 0 };
+static const unichar_t str_ff07[] = { 0x0027, 0 };
+static const unichar_t str_ff08[] = { 0x0028, 0 };
+static const unichar_t str_ff09[] = { 0x0029, 0 };
+static const unichar_t str_ff0a[] = { 0x002a, 0 };
+static const unichar_t str_ff0b[] = { 0x002b, 0 };
+static const unichar_t str_ff0c[] = { 0x002c, 0 };
+static const unichar_t str_ff0d[] = { 0x002d, 0 };
+static const unichar_t str_ff0e[] = { 0x002e, 0 };
+static const unichar_t str_ff0f[] = { 0x002f, 0 };
+static const unichar_t str_ff10[] = { 0x0030, 0 };
+static const unichar_t str_ff11[] = { 0x0031, 0 };
+static const unichar_t str_ff12[] = { 0x0032, 0 };
+static const unichar_t str_ff13[] = { 0x0033, 0 };
+static const unichar_t str_ff14[] = { 0x0034, 0 };
+static const unichar_t str_ff15[] = { 0x0035, 0 };
+static const unichar_t str_ff16[] = { 0x0036, 0 };
+static const unichar_t str_ff17[] = { 0x0037, 0 };
+static const unichar_t str_ff18[] = { 0x0038, 0 };
+static const unichar_t str_ff19[] = { 0x0039, 0 };
+static const unichar_t str_ff1a[] = { 0x003a, 0 };
+static const unichar_t str_ff1b[] = { 0x003b, 0 };
+static const unichar_t str_ff1c[] = { 0x003c, 0 };
+static const unichar_t str_ff1d[] = { 0x003d, 0 };
+static const unichar_t str_ff1e[] = { 0x003e, 0 };
+static const unichar_t str_ff1f[] = { 0x003f, 0 };
+static const unichar_t str_ff20[] = { 0x0040, 0 };
+static const unichar_t str_ff21[] = { 0x0041, 0 };
+static const unichar_t str_ff22[] = { 0x0042, 0 };
+static const unichar_t str_ff23[] = { 0x0043, 0 };
+static const unichar_t str_ff24[] = { 0x0044, 0 };
+static const unichar_t str_ff25[] = { 0x0045, 0 };
+static const unichar_t str_ff26[] = { 0x0046, 0 };
+static const unichar_t str_ff27[] = { 0x0047, 0 };
+static const unichar_t str_ff28[] = { 0x0048, 0 };
+static const unichar_t str_ff29[] = { 0x0049, 0 };
+static const unichar_t str_ff2a[] = { 0x004a, 0 };
+static const unichar_t str_ff2b[] = { 0x004b, 0 };
+static const unichar_t str_ff2c[] = { 0x004c, 0 };
+static const unichar_t str_ff2d[] = { 0x004d, 0 };
+static const unichar_t str_ff2e[] = { 0x004e, 0 };
+static const unichar_t str_ff2f[] = { 0x004f, 0 };
+static const unichar_t str_ff30[] = { 0x0050, 0 };
+static const unichar_t str_ff31[] = { 0x0051, 0 };
+static const unichar_t str_ff32[] = { 0x0052, 0 };
+static const unichar_t str_ff33[] = { 0x0053, 0 };
+static const unichar_t str_ff34[] = { 0x0054, 0 };
+static const unichar_t str_ff35[] = { 0x0055, 0 };
+static const unichar_t str_ff36[] = { 0x0056, 0 };
+static const unichar_t str_ff37[] = { 0x0057, 0 };
+static const unichar_t str_ff38[] = { 0x0058, 0 };
+static const unichar_t str_ff39[] = { 0x0059, 0 };
+static const unichar_t str_ff3a[] = { 0x005a, 0 };
+static const unichar_t str_ff3b[] = { 0x005b, 0 };
+static const unichar_t str_ff3c[] = { 0x005c, 0 };
+static const unichar_t str_ff3d[] = { 0x005d, 0 };
+static const unichar_t str_ff3e[] = { 0x005e, 0 };
+static const unichar_t str_ff3f[] = { 0x005f, 0 };
+static const unichar_t str_ff40[] = { 0x0060, 0 };
+static const unichar_t str_ff41[] = { 0x0061, 0 };
+static const unichar_t str_ff42[] = { 0x0062, 0 };
+static const unichar_t str_ff43[] = { 0x0063, 0 };
+static const unichar_t str_ff44[] = { 0x0064, 0 };
+static const unichar_t str_ff45[] = { 0x0065, 0 };
+static const unichar_t str_ff46[] = { 0x0066, 0 };
+static const unichar_t str_ff47[] = { 0x0067, 0 };
+static const unichar_t str_ff48[] = { 0x0068, 0 };
+static const unichar_t str_ff49[] = { 0x0069, 0 };
+static const unichar_t str_ff4a[] = { 0x006a, 0 };
+static const unichar_t str_ff4b[] = { 0x006b, 0 };
+static const unichar_t str_ff4c[] = { 0x006c, 0 };
+static const unichar_t str_ff4d[] = { 0x006d, 0 };
+static const unichar_t str_ff4e[] = { 0x006e, 0 };
+static const unichar_t str_ff4f[] = { 0x006f, 0 };
+static const unichar_t str_ff50[] = { 0x0070, 0 };
+static const unichar_t str_ff51[] = { 0x0071, 0 };
+static const unichar_t str_ff52[] = { 0x0072, 0 };
+static const unichar_t str_ff53[] = { 0x0073, 0 };
+static const unichar_t str_ff54[] = { 0x0074, 0 };
+static const unichar_t str_ff55[] = { 0x0075, 0 };
+static const unichar_t str_ff56[] = { 0x0076, 0 };
+static const unichar_t str_ff57[] = { 0x0077, 0 };
+static const unichar_t str_ff58[] = { 0x0078, 0 };
+static const unichar_t str_ff59[] = { 0x0079, 0 };
+static const unichar_t str_ff5a[] = { 0x007a, 0 };
+static const unichar_t str_ff5b[] = { 0x007b, 0 };
+static const unichar_t str_ff5c[] = { 0x007c, 0 };
+static const unichar_t str_ff5d[] = { 0x007d, 0 };
+static const unichar_t str_ff5e[] = { 0x007e, 0 };
+static const unichar_t str_ff5f[] = { 0x2985, 0 };
+static const unichar_t str_ff60[] = { 0x2986, 0 };
+static const unichar_t str_ff61[] = { 0x3002, 0 };
+static const unichar_t str_ff62[] = { 0x300c, 0 };
+static const unichar_t str_ff63[] = { 0x300d, 0 };
+static const unichar_t str_ff64[] = { 0x3001, 0 };
+static const unichar_t str_ff65[] = { 0x30fb, 0 };
+static const unichar_t str_ff66[] = { 0x30f2, 0 };
+static const unichar_t str_ff67[] = { 0x30a1, 0 };
+static const unichar_t str_ff68[] = { 0x30a3, 0 };
+static const unichar_t str_ff69[] = { 0x30a5, 0 };
+static const unichar_t str_ff6a[] = { 0x30a7, 0 };
+static const unichar_t str_ff6b[] = { 0x30a9, 0 };
+static const unichar_t str_ff6c[] = { 0x30e3, 0 };
+static const unichar_t str_ff6d[] = { 0x30e5, 0 };
+static const unichar_t str_ff6e[] = { 0x30e7, 0 };
+static const unichar_t str_ff6f[] = { 0x30c3, 0 };
+static const unichar_t str_ff70[] = { 0x30fc, 0 };
+static const unichar_t str_ff71[] = { 0x30a2, 0 };
+static const unichar_t str_ff72[] = { 0x30a4, 0 };
+static const unichar_t str_ff73[] = { 0x30a6, 0 };
+static const unichar_t str_ff74[] = { 0x30a8, 0 };
+static const unichar_t str_ff75[] = { 0x30aa, 0 };
+static const unichar_t str_ff76[] = { 0x30ab, 0 };
+static const unichar_t str_ff77[] = { 0x30ad, 0 };
+static const unichar_t str_ff78[] = { 0x30af, 0 };
+static const unichar_t str_ff79[] = { 0x30b1, 0 };
+static const unichar_t str_ff7a[] = { 0x30b3, 0 };
+static const unichar_t str_ff7b[] = { 0x30b5, 0 };
+static const unichar_t str_ff7c[] = { 0x30b7, 0 };
+static const unichar_t str_ff7d[] = { 0x30b9, 0 };
+static const unichar_t str_ff7e[] = { 0x30bb, 0 };
+static const unichar_t str_ff7f[] = { 0x30bd, 0 };
+static const unichar_t str_ff80[] = { 0x30bf, 0 };
+static const unichar_t str_ff81[] = { 0x30c1, 0 };
+static const unichar_t str_ff82[] = { 0x30c4, 0 };
+static const unichar_t str_ff83[] = { 0x30c6, 0 };
+static const unichar_t str_ff84[] = { 0x30c8, 0 };
+static const unichar_t str_ff85[] = { 0x30ca, 0 };
+static const unichar_t str_ff86[] = { 0x30cb, 0 };
+static const unichar_t str_ff87[] = { 0x30cc, 0 };
+static const unichar_t str_ff88[] = { 0x30cd, 0 };
+static const unichar_t str_ff89[] = { 0x30ce, 0 };
+static const unichar_t str_ff8a[] = { 0x30cf, 0 };
+static const unichar_t str_ff8b[] = { 0x30d2, 0 };
+static const unichar_t str_ff8c[] = { 0x30d5, 0 };
+static const unichar_t str_ff8d[] = { 0x30d8, 0 };
+static const unichar_t str_ff8e[] = { 0x30db, 0 };
+static const unichar_t str_ff8f[] = { 0x30de, 0 };
+static const unichar_t str_ff90[] = { 0x30df, 0 };
+static const unichar_t str_ff91[] = { 0x30e0, 0 };
+static const unichar_t str_ff92[] = { 0x30e1, 0 };
+static const unichar_t str_ff93[] = { 0x30e2, 0 };
+static const unichar_t str_ff94[] = { 0x30e4, 0 };
+static const unichar_t str_ff95[] = { 0x30e6, 0 };
+static const unichar_t str_ff96[] = { 0x30e8, 0 };
+static const unichar_t str_ff97[] = { 0x30e9, 0 };
+static const unichar_t str_ff98[] = { 0x30ea, 0 };
+static const unichar_t str_ff99[] = { 0x30eb, 0 };
+static const unichar_t str_ff9a[] = { 0x30ec, 0 };
+static const unichar_t str_ff9b[] = { 0x30ed, 0 };
+static const unichar_t str_ff9c[] = { 0x30ef, 0 };
+static const unichar_t str_ff9d[] = { 0x30f3, 0 };
+static const unichar_t str_ff9e[] = { 0x3099, 0 };
+static const unichar_t str_ff9f[] = { 0x309a, 0 };
+static const unichar_t str_ffa0[] = { 0x3164, 0 };
+static const unichar_t str_ffa1[] = { 0x3131, 0 };
+static const unichar_t str_ffa2[] = { 0x3132, 0 };
+static const unichar_t str_ffa3[] = { 0x3133, 0 };
+static const unichar_t str_ffa4[] = { 0x3134, 0 };
+static const unichar_t str_ffa5[] = { 0x3135, 0 };
+static const unichar_t str_ffa6[] = { 0x3136, 0 };
+static const unichar_t str_ffa7[] = { 0x3137, 0 };
+static const unichar_t str_ffa8[] = { 0x3138, 0 };
+static const unichar_t str_ffa9[] = { 0x3139, 0 };
+static const unichar_t str_ffaa[] = { 0x313a, 0 };
+static const unichar_t str_ffab[] = { 0x313b, 0 };
+static const unichar_t str_ffac[] = { 0x313c, 0 };
+static const unichar_t str_ffad[] = { 0x313d, 0 };
+static const unichar_t str_ffae[] = { 0x313e, 0 };
+static const unichar_t str_ffaf[] = { 0x313f, 0 };
+static const unichar_t str_ffb0[] = { 0x3140, 0 };
+static const unichar_t str_ffb1[] = { 0x3141, 0 };
+static const unichar_t str_ffb2[] = { 0x3142, 0 };
+static const unichar_t str_ffb3[] = { 0x3143, 0 };
+static const unichar_t str_ffb4[] = { 0x3144, 0 };
+static const unichar_t str_ffb5[] = { 0x3145, 0 };
+static const unichar_t str_ffb6[] = { 0x3146, 0 };
+static const unichar_t str_ffb7[] = { 0x3147, 0 };
+static const unichar_t str_ffb8[] = { 0x3148, 0 };
+static const unichar_t str_ffb9[] = { 0x3149, 0 };
+static const unichar_t str_ffba[] = { 0x314a, 0 };
+static const unichar_t str_ffbb[] = { 0x314b, 0 };
+static const unichar_t str_ffbc[] = { 0x314c, 0 };
+static const unichar_t str_ffbd[] = { 0x314d, 0 };
+static const unichar_t str_ffbe[] = { 0x314e, 0 };
+static const unichar_t str_ffc2[] = { 0x314f, 0 };
+static const unichar_t str_ffc3[] = { 0x3150, 0 };
+static const unichar_t str_ffc4[] = { 0x3151, 0 };
+static const unichar_t str_ffc5[] = { 0x3152, 0 };
+static const unichar_t str_ffc6[] = { 0x3153, 0 };
+static const unichar_t str_ffc7[] = { 0x3154, 0 };
+static const unichar_t str_ffca[] = { 0x3155, 0 };
+static const unichar_t str_ffcb[] = { 0x3156, 0 };
+static const unichar_t str_ffcc[] = { 0x3157, 0 };
+static const unichar_t str_ffcd[] = { 0x3158, 0 };
+static const unichar_t str_ffce[] = { 0x3159, 0 };
+static const unichar_t str_ffcf[] = { 0x315a, 0 };
+static const unichar_t str_ffd2[] = { 0x315b, 0 };
+static const unichar_t str_ffd3[] = { 0x315c, 0 };
+static const unichar_t str_ffd4[] = { 0x315d, 0 };
+static const unichar_t str_ffd5[] = { 0x315e, 0 };
+static const unichar_t str_ffd6[] = { 0x315f, 0 };
+static const unichar_t str_ffd7[] = { 0x3160, 0 };
+static const unichar_t str_ffda[] = { 0x3161, 0 };
+static const unichar_t str_ffdb[] = { 0x3162, 0 };
+static const unichar_t str_ffdc[] = { 0x3163, 0 };
+static const unichar_t str_ffe0[] = { 0x00a2, 0 };
+static const unichar_t str_ffe1[] = { 0x00a3, 0 };
+static const unichar_t str_ffe2[] = { 0x00ac, 0 };
+static const unichar_t str_ffe3[] = { 0x00af, 0 };
+static const unichar_t str_ffe4[] = { 0x00a6, 0 };
+static const unichar_t str_ffe5[] = { 0x00a5, 0 };
+static const unichar_t str_ffe6[] = { 0x20a9, 0 };
+static const unichar_t str_ffe8[] = { 0x2502, 0 };
+static const unichar_t str_ffe9[] = { 0x2190, 0 };
+static const unichar_t str_ffea[] = { 0x2191, 0 };
+static const unichar_t str_ffeb[] = { 0x2192, 0 };
+static const unichar_t str_ffec[] = { 0x2193, 0 };
+static const unichar_t str_ffed[] = { 0x25a0, 0 };
+static const unichar_t str_ffee[] = { 0x25cb, 0 };
+
+static const unichar_t *const up_allzeros[256] = { NULL };
+
+static const unichar_t * const tab_0[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_a0,
+0, 0, 0, 0, 0, 0, 0, str_a8,
+0, str_aa,
+0, 0, 0, 0, str_af,
+0, 0, str_b2,
+str_b3,
+str_b4,
+str_b5,
+0, 0, str_b8,
+str_b9,
+str_ba,
+0, str_bc,
+str_bd,
+str_be,
+0, str_c0,
+str_c1,
+str_c2,
+str_c3,
+str_c4,
+str_c5,
+0, str_c7,
+str_c8,
+str_c9,
+str_ca,
+str_cb,
+str_cc,
+str_cd,
+str_ce,
+str_cf,
+0, str_d1,
+str_d2,
+str_d3,
+str_d4,
+str_d5,
+str_d6,
+0, 0, str_d9,
+str_da,
+str_db,
+str_dc,
+str_dd,
+0, 0, str_e0,
+str_e1,
+str_e2,
+str_e3,
+str_e4,
+str_e5,
+0, str_e7,
+str_e8,
+str_e9,
+str_ea,
+str_eb,
+str_ec,
+str_ed,
+str_ee,
+str_ef,
+0, str_f1,
+str_f2,
+str_f3,
+str_f4,
+str_f5,
+str_f6,
+0, 0, str_f9,
+str_fa,
+str_fb,
+str_fc,
+str_fd,
+0, str_ff,
+0};
+
+static const unichar_t * const tab_1[] = {
+str_100,
+str_101,
+str_102,
+str_103,
+str_104,
+str_105,
+str_106,
+str_107,
+str_108,
+str_109,
+str_10a,
+str_10b,
+str_10c,
+str_10d,
+str_10e,
+str_10f,
+str_110,
+0, str_112,
+str_113,
+str_114,
+str_115,
+str_116,
+str_117,
+str_118,
+str_119,
+str_11a,
+str_11b,
+str_11c,
+str_11d,
+str_11e,
+str_11f,
+str_120,
+str_121,
+str_122,
+str_123,
+str_124,
+str_125,
+0, 0, str_128,
+str_129,
+str_12a,
+str_12b,
+str_12c,
+str_12d,
+str_12e,
+str_12f,
+str_130,
+0, str_132,
+str_133,
+str_134,
+str_135,
+str_136,
+str_137,
+str_138,
+str_139,
+str_13a,
+str_13b,
+str_13c,
+str_13d,
+str_13e,
+str_13f,
+str_140,
+0, 0, str_143,
+str_144,
+str_145,
+str_146,
+str_147,
+str_148,
+str_149,
+0, 0, str_14c,
+str_14d,
+str_14e,
+str_14f,
+str_150,
+str_151,
+str_152,
+str_153,
+str_154,
+str_155,
+str_156,
+str_157,
+str_158,
+str_159,
+str_15a,
+str_15b,
+str_15c,
+str_15d,
+str_15e,
+str_15f,
+str_160,
+str_161,
+str_162,
+str_163,
+str_164,
+str_165,
+0, 0, str_168,
+str_169,
+str_16a,
+str_16b,
+str_16c,
+str_16d,
+str_16e,
+str_16f,
+str_170,
+str_171,
+str_172,
+str_173,
+str_174,
+str_175,
+str_176,
+str_177,
+str_178,
+str_179,
+str_17a,
+str_17b,
+str_17c,
+str_17d,
+str_17e,
+str_17f,
+0, 0, str_182,
+0, 0, 0, 0, 0, 0, str_189,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_19e,
+str_19f,
+str_1a0,
+str_1a1,
+0, 0, 0, 0, 0, 0, 0, str_1a9,
+0, 0, 0, 0, 0, str_1af,
+str_1b0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1c0,
+str_1c1,
+0, 0, str_1c4,
+str_1c5,
+str_1c6,
+str_1c7,
+str_1c8,
+str_1c9,
+str_1ca,
+str_1cb,
+str_1cc,
+str_1cd,
+str_1ce,
+str_1cf,
+str_1d0,
+str_1d1,
+str_1d2,
+str_1d3,
+str_1d4,
+str_1d5,
+str_1d6,
+str_1d7,
+str_1d8,
+str_1d9,
+str_1da,
+str_1db,
+str_1dc,
+0, str_1de,
+str_1df,
+str_1e0,
+str_1e1,
+str_1e2,
+str_1e3,
+0, 0, str_1e6,
+str_1e7,
+str_1e8,
+str_1e9,
+str_1ea,
+str_1eb,
+str_1ec,
+str_1ed,
+str_1ee,
+str_1ef,
+str_1f0,
+str_1f1,
+str_1f2,
+str_1f3,
+str_1f4,
+str_1f5,
+0, 0, str_1f8,
+str_1f9,
+str_1fa,
+str_1fb,
+str_1fc,
+str_1fd,
+str_1fe,
+str_1ff,
+0};
+
+static const unichar_t * const tab_2[] = {
+str_200,
+str_201,
+str_202,
+str_203,
+str_204,
+str_205,
+str_206,
+str_207,
+str_208,
+str_209,
+str_20a,
+str_20b,
+str_20c,
+str_20d,
+str_20e,
+str_20f,
+str_210,
+str_211,
+str_212,
+str_213,
+str_214,
+str_215,
+str_216,
+str_217,
+str_218,
+str_219,
+str_21a,
+str_21b,
+0, 0, str_21e,
+str_21f,
+0, 0, 0, 0, 0, 0, str_226,
+str_227,
+str_228,
+str_229,
+str_22a,
+str_22b,
+str_22c,
+str_22d,
+str_22e,
+str_22f,
+str_230,
+str_231,
+str_232,
+str_233,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_269,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_278,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_292,
+0, 0, 0, 0, 0, 0, str_299,
+0, 0, str_29c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2b0,
+str_2b1,
+str_2b2,
+str_2b3,
+str_2b4,
+str_2b5,
+str_2b6,
+str_2b7,
+str_2b8,
+str_2b9,
+str_2ba,
+0, str_2bc,
+0, 0, 0, 0, 0, 0, 0, str_2c4,
+0, str_2c6,
+0, str_2c8,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2d8,
+str_2d9,
+str_2da,
+str_2db,
+str_2dc,
+str_2dd,
+0, 0, str_2e0,
+str_2e1,
+str_2e2,
+str_2e3,
+str_2e4,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_3[] = {
+0, str_301,
+str_302,
+str_303,
+0, 0, 0, 0, str_308,
+0, str_30a,
+str_30b,
+0, 0, str_30e,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_327,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_340,
+str_341,
+0, str_343,
+str_344,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_374,
+str_375,
+0, 0, 0, 0, str_37a,
+0, 0, 0, str_37e,
+0, 0, 0, 0, 0, str_384,
+str_385,
+str_386,
+str_387,
+str_388,
+str_389,
+str_38a,
+0, str_38c,
+0, str_38e,
+str_38f,
+str_390,
+str_391,
+str_392,
+str_393,
+0, str_395,
+str_396,
+str_397,
+0, str_399,
+str_39a,
+0, str_39c,
+str_39d,
+0, str_39f,
+0, str_3a1,
+0, 0, str_3a4,
+str_3a5,
+0, str_3a7,
+0, 0, str_3aa,
+str_3ab,
+str_3ac,
+str_3ad,
+str_3ae,
+str_3af,
+str_3b0,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_3ba,
+0, 0, 0, 0, str_3bf,
+0, str_3c1,
+0, 0, 0, 0, 0, str_3c7,
+0, 0, str_3ca,
+str_3cb,
+str_3cc,
+str_3cd,
+str_3ce,
+0, str_3d0,
+str_3d1,
+str_3d2,
+str_3d3,
+str_3d4,
+str_3d5,
+str_3d6,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_3f0,
+str_3f1,
+str_3f2,
+0, str_3f4,
+str_3f5,
+0, 0, 0, str_3f9,
+0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_4[] = {
+str_400,
+str_401,
+0, str_403,
+0, str_405,
+str_406,
+str_407,
+str_408,
+0, 0, 0, str_40c,
+str_40d,
+str_40e,
+0, str_410,
+0, str_412,
+str_413,
+0, str_415,
+0, 0, 0, str_419,
+str_41a,
+0, str_41c,
+str_41d,
+str_41e,
+str_41f,
+str_420,
+str_421,
+str_422,
+0, str_424,
+str_425,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_430,
+0, 0, 0, 0, str_435,
+0, 0, 0, str_439,
+str_43a,
+0, 0, 0, str_43e,
+str_43f,
+str_440,
+str_441,
+0, str_443,
+0, str_445,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_450,
+str_451,
+0, str_453,
+0, str_455,
+str_456,
+str_457,
+str_458,
+0, 0, 0, str_45c,
+str_45d,
+str_45e,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_470,
+str_471,
+0, 0, 0, 0, str_476,
+str_477,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_4ae,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_4c0,
+str_4c1,
+str_4c2,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_4d0,
+str_4d1,
+str_4d2,
+str_4d3,
+str_4d4,
+str_4d5,
+str_4d6,
+str_4d7,
+0, 0, str_4da,
+str_4db,
+str_4dc,
+str_4dd,
+str_4de,
+str_4df,
+str_4e0,
+str_4e1,
+str_4e2,
+str_4e3,
+str_4e4,
+str_4e5,
+str_4e6,
+str_4e7,
+str_4e8,
+str_4e9,
+str_4ea,
+str_4eb,
+str_4ec,
+str_4ed,
+str_4ee,
+str_4ef,
+str_4f0,
+str_4f1,
+str_4f2,
+str_4f3,
+str_4f4,
+str_4f5,
+0, 0, str_4f8,
+str_4f9,
+0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_5[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_54f,
+0, 0, 0, 0, 0, str_555,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_570,
+0, 0, 0, 0, 0, 0, 0, str_578,
+0, str_57a,
+0, 0, str_57d,
+0, 0, 0, str_581,
+str_582,
+0, str_584,
+str_585,
+0, str_587,
+0, str_589,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_5f0,
+str_5f1,
+str_5f2,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_6[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_60c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_621,
+str_622,
+str_623,
+str_624,
+str_625,
+str_626,
+str_627,
+str_628,
+str_629,
+str_62a,
+str_62b,
+str_62c,
+str_62d,
+str_62e,
+str_62f,
+str_630,
+str_631,
+str_632,
+str_633,
+str_634,
+str_635,
+str_636,
+str_637,
+str_638,
+str_639,
+str_63a,
+0, 0, 0, 0, 0, 0, str_641,
+str_642,
+str_643,
+str_644,
+str_645,
+str_646,
+str_647,
+str_648,
+str_649,
+str_64a,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_66a,
+0, str_66c,
+str_66d,
+0, 0, 0, str_671,
+0, 0, 0, str_675,
+str_676,
+str_677,
+str_678,
+str_679,
+str_67a,
+str_67b,
+0, 0, str_67e,
+str_67f,
+str_680,
+0, 0, str_683,
+str_684,
+0, str_686,
+str_687,
+str_688,
+0, 0, 0, str_68c,
+str_68d,
+str_68e,
+0, 0, str_691,
+0, 0, 0, 0, 0, 0, str_698,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_6a4,
+0, str_6a6,
+0, 0, str_6a9,
+0, 0, 0, str_6ad,
+0, str_6af,
+0, str_6b1,
+0, str_6b3,
+0, 0, 0, 0, 0, 0, str_6ba,
+str_6bb,
+0, 0, str_6be,
+0, str_6c0,
+str_6c1,
+str_6c2,
+0, 0, str_6c5,
+str_6c6,
+str_6c7,
+str_6c8,
+str_6c9,
+0, str_6cb,
+str_6cc,
+0, 0, 0, str_6d0,
+0, str_6d2,
+str_6d3,
+str_6d4,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_9[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_929,
+0, 0, 0, 0, 0, 0, 0, str_931,
+0, 0, str_934,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_958,
+str_959,
+str_95a,
+str_95b,
+str_95c,
+str_95d,
+str_95e,
+str_95f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_9cb,
+str_9cc,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_9dc,
+str_9dd,
+0, str_9df,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_a[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_a33,
+0, 0, str_a36,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_a59,
+str_a5a,
+str_a5b,
+0, 0, str_a5e,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_b[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_b48,
+0, 0, str_b4b,
+str_b4c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_b5c,
+str_b5d,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_b94,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_bca,
+str_bcb,
+str_bcc,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_c[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_c48,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_cc0,
+0, 0, 0, 0, 0, 0, str_cc7,
+str_cc8,
+0, str_cca,
+str_ccb,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_d[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_d4a,
+str_d4b,
+str_d4c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_dda,
+0, str_ddc,
+str_ddd,
+str_dde,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_e[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_e33,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_eb3,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_edc,
+str_edd,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_f[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_f0c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_f43,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_f4d,
+0, 0, 0, 0, str_f52,
+0, 0, 0, 0, str_f57,
+0, 0, 0, 0, str_f5c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_f69,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_f73,
+0, str_f75,
+str_f76,
+str_f77,
+str_f78,
+str_f79,
+0, 0, 0, 0, 0, 0, 0, str_f81,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_f93,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_f9d,
+0, 0, 0, 0, str_fa2,
+0, 0, 0, 0, str_fa7,
+0, 0, 0, 0, str_fac,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fb9,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_10[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1026,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_10fc,
+0, 0, 0, 0};
+
+static const unichar_t * const tab_11[] = {
+0, str_1101,
+0, 0, str_1104,
+0, 0, 0, str_1108,
+0, str_110a,
+0, 0, str_110d,
+0, 0, 0, 0, 0, str_1113,
+str_1114,
+str_1115,
+str_1116,
+str_1117,
+str_1118,
+str_1119,
+str_111a,
+str_111b,
+str_111c,
+str_111d,
+str_111e,
+str_111f,
+str_1120,
+str_1121,
+str_1122,
+str_1123,
+str_1124,
+str_1125,
+str_1126,
+str_1127,
+str_1128,
+str_1129,
+str_112a,
+str_112b,
+str_112c,
+str_112d,
+str_112e,
+str_112f,
+str_1130,
+str_1131,
+str_1132,
+str_1133,
+str_1134,
+str_1135,
+str_1136,
+str_1137,
+str_1138,
+str_1139,
+str_113a,
+str_113b,
+0, str_113d,
+0, str_113f,
+0, str_1141,
+str_1142,
+str_1143,
+str_1144,
+str_1145,
+str_1146,
+str_1147,
+str_1148,
+str_1149,
+str_114a,
+str_114b,
+0, str_114d,
+0, str_114f,
+0, str_1151,
+str_1152,
+str_1153,
+0, 0, str_1156,
+str_1157,
+str_1158,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_1162,
+0, str_1164,
+0, str_1166,
+0, str_1168,
+0, str_116a,
+str_116b,
+str_116c,
+0, 0, str_116f,
+str_1170,
+str_1171,
+0, 0, str_1174,
+0, str_1176,
+str_1177,
+str_1178,
+str_1179,
+str_117a,
+str_117b,
+str_117c,
+str_117d,
+str_117e,
+str_117f,
+str_1180,
+str_1181,
+str_1182,
+str_1183,
+str_1184,
+str_1185,
+str_1186,
+str_1187,
+str_1188,
+str_1189,
+str_118a,
+str_118b,
+str_118c,
+str_118d,
+str_118e,
+str_118f,
+str_1190,
+str_1191,
+str_1192,
+str_1193,
+str_1194,
+str_1195,
+str_1196,
+str_1197,
+str_1198,
+str_1199,
+str_119a,
+str_119b,
+str_119c,
+str_119d,
+0, str_119f,
+str_11a0,
+str_11a1,
+str_11a2,
+0, 0, 0, 0, 0, str_11a8,
+str_11a9,
+str_11aa,
+str_11ab,
+str_11ac,
+str_11ad,
+str_11ae,
+str_11af,
+str_11b0,
+str_11b1,
+str_11b2,
+str_11b3,
+str_11b4,
+str_11b5,
+str_11b6,
+str_11b7,
+str_11b8,
+str_11b9,
+str_11ba,
+str_11bb,
+str_11bc,
+str_11bd,
+str_11be,
+str_11bf,
+str_11c0,
+str_11c1,
+str_11c2,
+str_11c3,
+str_11c4,
+str_11c5,
+str_11c6,
+str_11c7,
+str_11c8,
+str_11c9,
+str_11ca,
+str_11cb,
+str_11cc,
+str_11cd,
+str_11ce,
+str_11cf,
+str_11d0,
+str_11d1,
+str_11d2,
+str_11d3,
+str_11d4,
+str_11d5,
+str_11d6,
+str_11d7,
+str_11d8,
+str_11d9,
+str_11da,
+str_11db,
+str_11dc,
+str_11dd,
+str_11de,
+str_11df,
+str_11e0,
+str_11e1,
+str_11e2,
+str_11e3,
+str_11e4,
+str_11e5,
+str_11e6,
+str_11e7,
+str_11e8,
+str_11e9,
+str_11ea,
+str_11eb,
+str_11ec,
+str_11ed,
+str_11ee,
+str_11ef,
+str_11f0,
+str_11f1,
+str_11f2,
+str_11f3,
+str_11f4,
+str_11f5,
+str_11f6,
+str_11f7,
+str_11f8,
+str_11f9,
+0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_13[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_13a0,
+str_13a1,
+str_13a2,
+0, 0, 0, 0, 0, 0, str_13a9,
+str_13aa,
+str_13ab,
+str_13ac,
+0, 0, 0, 0, str_13b1,
+0, str_13b3,
+0, 0, 0, str_13b7,
+0, 0, 0, str_13bb,
+0, 0, str_13be,
+0, str_13c0,
+0, str_13c2,
+str_13c3,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_13cf,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_13d9,
+str_13da,
+0, 0, 0, str_13de,
+str_13df,
+0, 0, str_13e2,
+0, 0, 0, str_13e6,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_13f4,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_1b[] = {
+0, 0, 0, 0, 0, 0, str_1b06,
+0, str_1b08,
+0, str_1b0a,
+0, str_1b0c,
+0, str_1b0e,
+0, 0, 0, str_1b12,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1b3b,
+0, str_1b3d,
+0, 0, str_1b40,
+str_1b41,
+0, str_1b43,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_1d[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1d2c,
+str_1d2d,
+str_1d2e,
+0, str_1d30,
+str_1d31,
+str_1d32,
+str_1d33,
+str_1d34,
+str_1d35,
+str_1d36,
+str_1d37,
+str_1d38,
+str_1d39,
+str_1d3a,
+0, str_1d3c,
+str_1d3d,
+str_1d3e,
+str_1d3f,
+str_1d40,
+str_1d41,
+str_1d42,
+str_1d43,
+str_1d44,
+str_1d45,
+str_1d46,
+str_1d47,
+str_1d48,
+str_1d49,
+str_1d4a,
+str_1d4b,
+str_1d4c,
+str_1d4d,
+0, str_1d4f,
+str_1d50,
+str_1d51,
+str_1d52,
+str_1d53,
+str_1d54,
+str_1d55,
+str_1d56,
+str_1d57,
+str_1d58,
+str_1d59,
+str_1d5a,
+str_1d5b,
+str_1d5c,
+str_1d5d,
+str_1d5e,
+str_1d5f,
+str_1d60,
+str_1d61,
+str_1d62,
+str_1d63,
+str_1d64,
+str_1d65,
+str_1d66,
+str_1d67,
+str_1d68,
+str_1d69,
+str_1d6a,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1d78,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_1d9b,
+str_1d9c,
+str_1d9d,
+str_1d9e,
+str_1d9f,
+str_1da0,
+str_1da1,
+str_1da2,
+str_1da3,
+str_1da4,
+str_1da5,
+str_1da6,
+str_1da7,
+str_1da8,
+str_1da9,
+str_1daa,
+str_1dab,
+str_1dac,
+str_1dad,
+str_1dae,
+str_1daf,
+str_1db0,
+str_1db1,
+str_1db2,
+str_1db3,
+str_1db4,
+str_1db5,
+str_1db6,
+str_1db7,
+str_1db8,
+str_1db9,
+str_1dba,
+str_1dbb,
+str_1dbc,
+str_1dbd,
+str_1dbe,
+str_1dbf,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_1e[] = {
+str_1e00,
+str_1e01,
+str_1e02,
+str_1e03,
+str_1e04,
+str_1e05,
+str_1e06,
+str_1e07,
+str_1e08,
+str_1e09,
+str_1e0a,
+str_1e0b,
+str_1e0c,
+str_1e0d,
+str_1e0e,
+str_1e0f,
+str_1e10,
+str_1e11,
+str_1e12,
+str_1e13,
+str_1e14,
+str_1e15,
+str_1e16,
+str_1e17,
+str_1e18,
+str_1e19,
+str_1e1a,
+str_1e1b,
+str_1e1c,
+str_1e1d,
+str_1e1e,
+str_1e1f,
+str_1e20,
+str_1e21,
+str_1e22,
+str_1e23,
+str_1e24,
+str_1e25,
+str_1e26,
+str_1e27,
+str_1e28,
+str_1e29,
+str_1e2a,
+str_1e2b,
+str_1e2c,
+str_1e2d,
+str_1e2e,
+str_1e2f,
+str_1e30,
+str_1e31,
+str_1e32,
+str_1e33,
+str_1e34,
+str_1e35,
+str_1e36,
+str_1e37,
+str_1e38,
+str_1e39,
+str_1e3a,
+str_1e3b,
+str_1e3c,
+str_1e3d,
+str_1e3e,
+str_1e3f,
+str_1e40,
+str_1e41,
+str_1e42,
+str_1e43,
+str_1e44,
+str_1e45,
+str_1e46,
+str_1e47,
+str_1e48,
+str_1e49,
+str_1e4a,
+str_1e4b,
+str_1e4c,
+str_1e4d,
+str_1e4e,
+str_1e4f,
+str_1e50,
+str_1e51,
+str_1e52,
+str_1e53,
+str_1e54,
+str_1e55,
+str_1e56,
+str_1e57,
+str_1e58,
+str_1e59,
+str_1e5a,
+str_1e5b,
+str_1e5c,
+str_1e5d,
+str_1e5e,
+str_1e5f,
+str_1e60,
+str_1e61,
+str_1e62,
+str_1e63,
+str_1e64,
+str_1e65,
+str_1e66,
+str_1e67,
+str_1e68,
+str_1e69,
+str_1e6a,
+str_1e6b,
+str_1e6c,
+str_1e6d,
+str_1e6e,
+str_1e6f,
+str_1e70,
+str_1e71,
+str_1e72,
+str_1e73,
+str_1e74,
+str_1e75,
+str_1e76,
+str_1e77,
+str_1e78,
+str_1e79,
+str_1e7a,
+str_1e7b,
+str_1e7c,
+str_1e7d,
+str_1e7e,
+str_1e7f,
+str_1e80,
+str_1e81,
+str_1e82,
+str_1e83,
+str_1e84,
+str_1e85,
+str_1e86,
+str_1e87,
+str_1e88,
+str_1e89,
+str_1e8a,
+str_1e8b,
+str_1e8c,
+str_1e8d,
+str_1e8e,
+str_1e8f,
+str_1e90,
+str_1e91,
+str_1e92,
+str_1e93,
+str_1e94,
+str_1e95,
+str_1e96,
+str_1e97,
+str_1e98,
+str_1e99,
+str_1e9a,
+str_1e9b,
+0, 0, 0, 0, str_1ea0,
+str_1ea1,
+str_1ea2,
+str_1ea3,
+str_1ea4,
+str_1ea5,
+str_1ea6,
+str_1ea7,
+str_1ea8,
+str_1ea9,
+str_1eaa,
+str_1eab,
+str_1eac,
+str_1ead,
+str_1eae,
+str_1eaf,
+str_1eb0,
+str_1eb1,
+str_1eb2,
+str_1eb3,
+str_1eb4,
+str_1eb5,
+str_1eb6,
+str_1eb7,
+str_1eb8,
+str_1eb9,
+str_1eba,
+str_1ebb,
+str_1ebc,
+str_1ebd,
+str_1ebe,
+str_1ebf,
+str_1ec0,
+str_1ec1,
+str_1ec2,
+str_1ec3,
+str_1ec4,
+str_1ec5,
+str_1ec6,
+str_1ec7,
+str_1ec8,
+str_1ec9,
+str_1eca,
+str_1ecb,
+str_1ecc,
+str_1ecd,
+str_1ece,
+str_1ecf,
+str_1ed0,
+str_1ed1,
+str_1ed2,
+str_1ed3,
+str_1ed4,
+str_1ed5,
+str_1ed6,
+str_1ed7,
+str_1ed8,
+str_1ed9,
+str_1eda,
+str_1edb,
+str_1edc,
+str_1edd,
+str_1ede,
+str_1edf,
+str_1ee0,
+str_1ee1,
+str_1ee2,
+str_1ee3,
+str_1ee4,
+str_1ee5,
+str_1ee6,
+str_1ee7,
+str_1ee8,
+str_1ee9,
+str_1eea,
+str_1eeb,
+str_1eec,
+str_1eed,
+str_1eee,
+str_1eef,
+str_1ef0,
+str_1ef1,
+str_1ef2,
+str_1ef3,
+str_1ef4,
+str_1ef5,
+str_1ef6,
+str_1ef7,
+str_1ef8,
+str_1ef9,
+0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_1f[] = {
+str_1f00,
+str_1f01,
+str_1f02,
+str_1f03,
+str_1f04,
+str_1f05,
+str_1f06,
+str_1f07,
+str_1f08,
+str_1f09,
+str_1f0a,
+str_1f0b,
+str_1f0c,
+str_1f0d,
+str_1f0e,
+str_1f0f,
+str_1f10,
+str_1f11,
+str_1f12,
+str_1f13,
+str_1f14,
+str_1f15,
+0, 0, str_1f18,
+str_1f19,
+str_1f1a,
+str_1f1b,
+str_1f1c,
+str_1f1d,
+0, 0, str_1f20,
+str_1f21,
+str_1f22,
+str_1f23,
+str_1f24,
+str_1f25,
+str_1f26,
+str_1f27,
+str_1f28,
+str_1f29,
+str_1f2a,
+str_1f2b,
+str_1f2c,
+str_1f2d,
+str_1f2e,
+str_1f2f,
+str_1f30,
+str_1f31,
+str_1f32,
+str_1f33,
+str_1f34,
+str_1f35,
+str_1f36,
+str_1f37,
+str_1f38,
+str_1f39,
+str_1f3a,
+str_1f3b,
+str_1f3c,
+str_1f3d,
+str_1f3e,
+str_1f3f,
+str_1f40,
+str_1f41,
+str_1f42,
+str_1f43,
+str_1f44,
+str_1f45,
+0, 0, str_1f48,
+str_1f49,
+str_1f4a,
+str_1f4b,
+str_1f4c,
+str_1f4d,
+0, 0, str_1f50,
+str_1f51,
+str_1f52,
+str_1f53,
+str_1f54,
+str_1f55,
+str_1f56,
+str_1f57,
+0, str_1f59,
+0, str_1f5b,
+0, str_1f5d,
+0, str_1f5f,
+str_1f60,
+str_1f61,
+str_1f62,
+str_1f63,
+str_1f64,
+str_1f65,
+str_1f66,
+str_1f67,
+str_1f68,
+str_1f69,
+str_1f6a,
+str_1f6b,
+str_1f6c,
+str_1f6d,
+str_1f6e,
+str_1f6f,
+str_1f70,
+str_1f71,
+str_1f72,
+str_1f73,
+str_1f74,
+str_1f75,
+str_1f76,
+str_1f77,
+str_1f78,
+str_1f79,
+str_1f7a,
+str_1f7b,
+str_1f7c,
+str_1f7d,
+0, 0, str_1f80,
+str_1f81,
+str_1f82,
+str_1f83,
+str_1f84,
+str_1f85,
+str_1f86,
+str_1f87,
+str_1f88,
+str_1f89,
+str_1f8a,
+str_1f8b,
+str_1f8c,
+str_1f8d,
+str_1f8e,
+str_1f8f,
+str_1f90,
+str_1f91,
+str_1f92,
+str_1f93,
+str_1f94,
+str_1f95,
+str_1f96,
+str_1f97,
+str_1f98,
+str_1f99,
+str_1f9a,
+str_1f9b,
+str_1f9c,
+str_1f9d,
+str_1f9e,
+str_1f9f,
+str_1fa0,
+str_1fa1,
+str_1fa2,
+str_1fa3,
+str_1fa4,
+str_1fa5,
+str_1fa6,
+str_1fa7,
+str_1fa8,
+str_1fa9,
+str_1faa,
+str_1fab,
+str_1fac,
+str_1fad,
+str_1fae,
+str_1faf,
+str_1fb0,
+str_1fb1,
+str_1fb2,
+str_1fb3,
+str_1fb4,
+0, str_1fb6,
+str_1fb7,
+str_1fb8,
+str_1fb9,
+str_1fba,
+str_1fbb,
+str_1fbc,
+str_1fbd,
+str_1fbe,
+str_1fbf,
+str_1fc0,
+str_1fc1,
+str_1fc2,
+str_1fc3,
+str_1fc4,
+0, str_1fc6,
+str_1fc7,
+str_1fc8,
+str_1fc9,
+str_1fca,
+str_1fcb,
+str_1fcc,
+str_1fcd,
+str_1fce,
+str_1fcf,
+str_1fd0,
+str_1fd1,
+str_1fd2,
+str_1fd3,
+0, 0, str_1fd6,
+str_1fd7,
+str_1fd8,
+str_1fd9,
+str_1fda,
+str_1fdb,
+0, str_1fdd,
+str_1fde,
+str_1fdf,
+str_1fe0,
+str_1fe1,
+str_1fe2,
+str_1fe3,
+str_1fe4,
+str_1fe5,
+str_1fe6,
+str_1fe7,
+str_1fe8,
+str_1fe9,
+str_1fea,
+str_1feb,
+str_1fec,
+str_1fed,
+str_1fee,
+str_1fef,
+0, 0, str_1ff2,
+str_1ff3,
+str_1ff4,
+0, str_1ff6,
+str_1ff7,
+str_1ff8,
+str_1ff9,
+str_1ffa,
+str_1ffb,
+str_1ffc,
+str_1ffd,
+str_1ffe,
+0, 0};
+
+static const unichar_t * const tab_20[] = {
+str_2000,
+str_2001,
+str_2002,
+str_2003,
+str_2004,
+str_2005,
+str_2006,
+str_2007,
+str_2008,
+str_2009,
+str_200a,
+0, 0, 0, 0, 0, str_2010,
+str_2011,
+str_2012,
+str_2013,
+str_2014,
+str_2015,
+str_2016,
+str_2017,
+str_2018,
+str_2019,
+0, 0, str_201c,
+str_201d,
+0, 0, 0, 0, 0, 0, str_2024,
+str_2025,
+str_2026,
+0, 0, 0, 0, 0, 0, 0, 0, str_202f,
+0, 0, str_2032,
+str_2033,
+str_2034,
+str_2035,
+str_2036,
+str_2037,
+0, str_2039,
+str_203a,
+0, str_203c,
+0, str_203e,
+0, 0, 0, 0, 0, 0, 0, 0, str_2047,
+str_2048,
+str_2049,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2057,
+0, 0, 0, 0, 0, 0, 0, str_205f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2070,
+str_2071,
+0, 0, str_2074,
+str_2075,
+str_2076,
+str_2077,
+str_2078,
+str_2079,
+str_207a,
+str_207b,
+str_207c,
+str_207d,
+str_207e,
+str_207f,
+str_2080,
+str_2081,
+str_2082,
+str_2083,
+str_2084,
+str_2085,
+str_2086,
+str_2087,
+str_2088,
+str_2089,
+str_208a,
+str_208b,
+str_208c,
+str_208d,
+str_208e,
+0, str_2090,
+str_2091,
+str_2092,
+str_2093,
+str_2094,
+str_2095,
+str_2096,
+str_2097,
+str_2098,
+str_2099,
+str_209a,
+str_209b,
+str_209c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_20a8,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_21[] = {
+str_2100,
+str_2101,
+str_2102,
+str_2103,
+0, str_2105,
+str_2106,
+str_2107,
+0, str_2109,
+str_210a,
+str_210b,
+str_210c,
+str_210d,
+str_210e,
+str_210f,
+str_2110,
+str_2111,
+str_2112,
+str_2113,
+0, str_2115,
+str_2116,
+0, 0, str_2119,
+str_211a,
+str_211b,
+str_211c,
+str_211d,
+0, 0, str_2120,
+str_2121,
+str_2122,
+0, str_2124,
+0, str_2126,
+0, str_2128,
+0, str_212a,
+str_212b,
+str_212c,
+str_212d,
+0, str_212f,
+str_2130,
+str_2131,
+0, str_2133,
+str_2134,
+str_2135,
+str_2136,
+str_2137,
+str_2138,
+str_2139,
+0, str_213b,
+str_213c,
+str_213d,
+str_213e,
+str_213f,
+str_2140,
+0, 0, 0, 0, str_2145,
+str_2146,
+str_2147,
+str_2148,
+str_2149,
+0, 0, 0, 0, 0, 0, str_2150,
+str_2151,
+str_2152,
+str_2153,
+str_2154,
+str_2155,
+str_2156,
+str_2157,
+str_2158,
+str_2159,
+str_215a,
+str_215b,
+str_215c,
+str_215d,
+str_215e,
+str_215f,
+str_2160,
+str_2161,
+str_2162,
+str_2163,
+str_2164,
+str_2165,
+str_2166,
+str_2167,
+str_2168,
+str_2169,
+str_216a,
+str_216b,
+str_216c,
+str_216d,
+str_216e,
+str_216f,
+str_2170,
+str_2171,
+str_2172,
+str_2173,
+str_2174,
+str_2175,
+str_2176,
+str_2177,
+str_2178,
+str_2179,
+str_217a,
+str_217b,
+str_217c,
+str_217d,
+str_217e,
+str_217f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_2189,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_219a,
+str_219b,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_21ae,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_21cd,
+str_21ce,
+str_21cf,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_22[] = {
+0, 0, 0, 0, str_2204,
+str_2205,
+str_2206,
+0, 0, str_2209,
+0, 0, str_220c,
+0, 0, str_220f,
+0, str_2211,
+str_2212,
+0, 0, str_2215,
+str_2216,
+str_2217,
+str_2218,
+str_2219,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_2223,
+str_2224,
+str_2225,
+str_2226,
+0, 0, 0, 0, 0, str_222c,
+str_222d,
+0, str_222f,
+str_2230,
+0, 0, 0, 0, 0, str_2236,
+0, 0, 0, 0, 0, str_223c,
+0, 0, 0, 0, str_2241,
+0, 0, str_2244,
+0, 0, str_2247,
+0, str_2249,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2260,
+0, str_2262,
+0, 0, 0, 0, 0, 0, 0, str_226a,
+str_226b,
+0, str_226d,
+str_226e,
+str_226f,
+str_2270,
+str_2271,
+0, 0, str_2274,
+str_2275,
+0, 0, str_2278,
+str_2279,
+0, 0, 0, 0, 0, 0, str_2280,
+str_2281,
+0, 0, str_2284,
+str_2285,
+0, 0, str_2288,
+str_2289,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2299,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_22ac,
+str_22ad,
+str_22ae,
+str_22af,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_22c4,
+str_22c5,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_22e0,
+str_22e1,
+str_22e2,
+str_22e3,
+0, 0, 0, 0, 0, 0, str_22ea,
+str_22eb,
+str_22ec,
+str_22ed,
+0, str_22ef,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_23[] = {
+0, 0, 0, str_2303,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2329,
+str_232a,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2373,
+str_2374,
+str_2375,
+0, 0, 0, 0, str_237a,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_24[] = {
+str_2400,
+str_2401,
+str_2402,
+str_2403,
+str_2404,
+str_2405,
+str_2406,
+str_2407,
+str_2408,
+str_2409,
+str_240a,
+str_240b,
+str_240c,
+str_240d,
+str_240e,
+str_240f,
+str_2410,
+str_2411,
+str_2412,
+str_2413,
+str_2414,
+str_2415,
+str_2416,
+str_2417,
+str_2418,
+str_2419,
+str_241a,
+str_241b,
+str_241c,
+str_241d,
+str_241e,
+str_241f,
+str_2420,
+str_2421,
+str_2422,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2460,
+str_2461,
+str_2462,
+str_2463,
+str_2464,
+str_2465,
+str_2466,
+str_2467,
+str_2468,
+str_2469,
+str_246a,
+str_246b,
+str_246c,
+str_246d,
+str_246e,
+str_246f,
+str_2470,
+str_2471,
+str_2472,
+str_2473,
+str_2474,
+str_2475,
+str_2476,
+str_2477,
+str_2478,
+str_2479,
+str_247a,
+str_247b,
+str_247c,
+str_247d,
+str_247e,
+str_247f,
+str_2480,
+str_2481,
+str_2482,
+str_2483,
+str_2484,
+str_2485,
+str_2486,
+str_2487,
+str_2488,
+str_2489,
+str_248a,
+str_248b,
+str_248c,
+str_248d,
+str_248e,
+str_248f,
+str_2490,
+str_2491,
+str_2492,
+str_2493,
+str_2494,
+str_2495,
+str_2496,
+str_2497,
+str_2498,
+str_2499,
+str_249a,
+str_249b,
+str_249c,
+str_249d,
+str_249e,
+str_249f,
+str_24a0,
+str_24a1,
+str_24a2,
+str_24a3,
+str_24a4,
+str_24a5,
+str_24a6,
+str_24a7,
+str_24a8,
+str_24a9,
+str_24aa,
+str_24ab,
+str_24ac,
+str_24ad,
+str_24ae,
+str_24af,
+str_24b0,
+str_24b1,
+str_24b2,
+str_24b3,
+str_24b4,
+str_24b5,
+str_24b6,
+str_24b7,
+str_24b8,
+str_24b9,
+str_24ba,
+str_24bb,
+str_24bc,
+str_24bd,
+str_24be,
+str_24bf,
+str_24c0,
+str_24c1,
+str_24c2,
+str_24c3,
+str_24c4,
+str_24c5,
+str_24c6,
+str_24c7,
+str_24c8,
+str_24c9,
+str_24ca,
+str_24cb,
+str_24cc,
+str_24cd,
+str_24ce,
+str_24cf,
+str_24d0,
+str_24d1,
+str_24d2,
+str_24d3,
+str_24d4,
+str_24d5,
+str_24d6,
+str_24d7,
+str_24d8,
+str_24d9,
+str_24da,
+str_24db,
+str_24dc,
+str_24dd,
+str_24de,
+str_24df,
+str_24e0,
+str_24e1,
+str_24e2,
+str_24e3,
+str_24e4,
+str_24e5,
+str_24e6,
+str_24e7,
+str_24e8,
+str_24e9,
+str_24ea,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_25[] = {
+str_2500,
+0, str_2502,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_25b3,
+0, 0, 0, 0, str_25b8,
+0, 0, 0, 0, str_25bd,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_25c7,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_25e6,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_26[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2662,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_27[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2731,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2758,
+0, 0, 0, 0, 0, 0, 0, 0, 0, str_2762,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_2a[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2a0c,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2a74,
+str_2a75,
+str_2a76,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2adc,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_2c[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2c7c,
+str_2c7d,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_2d[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2d6f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_2e[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2e28,
+str_2e29,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2e9f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_2ef3,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_2f[] = {
+str_2f00,
+str_2f01,
+str_2f02,
+str_2f03,
+str_2f04,
+str_2f05,
+str_2f06,
+str_2f07,
+str_2f08,
+str_2f09,
+str_2f0a,
+str_2f0b,
+str_2f0c,
+str_2f0d,
+str_2f0e,
+str_2f0f,
+str_2f10,
+str_2f11,
+str_2f12,
+str_2f13,
+str_2f14,
+str_2f15,
+str_2f16,
+str_2f17,
+str_2f18,
+str_2f19,
+str_2f1a,
+str_2f1b,
+str_2f1c,
+str_2f1d,
+str_2f1e,
+str_2f1f,
+str_2f20,
+str_2f21,
+str_2f22,
+str_2f23,
+str_2f24,
+str_2f25,
+str_2f26,
+str_2f27,
+str_2f28,
+str_2f29,
+str_2f2a,
+str_2f2b,
+str_2f2c,
+str_2f2d,
+str_2f2e,
+str_2f2f,
+str_2f30,
+str_2f31,
+str_2f32,
+str_2f33,
+str_2f34,
+str_2f35,
+str_2f36,
+str_2f37,
+str_2f38,
+str_2f39,
+str_2f3a,
+str_2f3b,
+str_2f3c,
+str_2f3d,
+str_2f3e,
+str_2f3f,
+str_2f40,
+str_2f41,
+str_2f42,
+str_2f43,
+str_2f44,
+str_2f45,
+str_2f46,
+str_2f47,
+str_2f48,
+str_2f49,
+str_2f4a,
+str_2f4b,
+str_2f4c,
+str_2f4d,
+str_2f4e,
+str_2f4f,
+str_2f50,
+str_2f51,
+str_2f52,
+str_2f53,
+str_2f54,
+str_2f55,
+str_2f56,
+str_2f57,
+str_2f58,
+str_2f59,
+str_2f5a,
+str_2f5b,
+str_2f5c,
+str_2f5d,
+str_2f5e,
+str_2f5f,
+str_2f60,
+str_2f61,
+str_2f62,
+str_2f63,
+str_2f64,
+str_2f65,
+str_2f66,
+str_2f67,
+str_2f68,
+str_2f69,
+str_2f6a,
+str_2f6b,
+str_2f6c,
+str_2f6d,
+str_2f6e,
+str_2f6f,
+str_2f70,
+str_2f71,
+str_2f72,
+str_2f73,
+str_2f74,
+str_2f75,
+str_2f76,
+str_2f77,
+str_2f78,
+str_2f79,
+str_2f7a,
+str_2f7b,
+str_2f7c,
+str_2f7d,
+str_2f7e,
+str_2f7f,
+str_2f80,
+str_2f81,
+str_2f82,
+str_2f83,
+str_2f84,
+str_2f85,
+str_2f86,
+str_2f87,
+str_2f88,
+str_2f89,
+str_2f8a,
+str_2f8b,
+str_2f8c,
+str_2f8d,
+str_2f8e,
+str_2f8f,
+str_2f90,
+str_2f91,
+str_2f92,
+str_2f93,
+str_2f94,
+str_2f95,
+str_2f96,
+str_2f97,
+str_2f98,
+str_2f99,
+str_2f9a,
+str_2f9b,
+str_2f9c,
+str_2f9d,
+str_2f9e,
+str_2f9f,
+str_2fa0,
+str_2fa1,
+str_2fa2,
+str_2fa3,
+str_2fa4,
+str_2fa5,
+str_2fa6,
+str_2fa7,
+str_2fa8,
+str_2fa9,
+str_2faa,
+str_2fab,
+str_2fac,
+str_2fad,
+str_2fae,
+str_2faf,
+str_2fb0,
+str_2fb1,
+str_2fb2,
+str_2fb3,
+str_2fb4,
+str_2fb5,
+str_2fb6,
+str_2fb7,
+str_2fb8,
+str_2fb9,
+str_2fba,
+str_2fbb,
+str_2fbc,
+str_2fbd,
+str_2fbe,
+str_2fbf,
+str_2fc0,
+str_2fc1,
+str_2fc2,
+str_2fc3,
+str_2fc4,
+str_2fc5,
+str_2fc6,
+str_2fc7,
+str_2fc8,
+str_2fc9,
+str_2fca,
+str_2fcb,
+str_2fcc,
+str_2fcd,
+str_2fce,
+str_2fcf,
+str_2fd0,
+str_2fd1,
+str_2fd2,
+str_2fd3,
+str_2fd4,
+str_2fd5,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_30[] = {
+str_3000,
+str_3001,
+0, 0, 0, 0, 0, 0, str_3008,
+str_3009,
+str_300a,
+str_300b,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_3036,
+0, str_3038,
+str_3039,
+str_303a,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_304c,
+0, str_304e,
+0, str_3050,
+0, str_3052,
+0, str_3054,
+0, str_3056,
+0, str_3058,
+0, str_305a,
+0, str_305c,
+0, str_305e,
+0, str_3060,
+0, str_3062,
+0, 0, str_3065,
+0, str_3067,
+0, str_3069,
+0, 0, 0, 0, 0, 0, str_3070,
+str_3071,
+0, str_3073,
+str_3074,
+0, str_3076,
+str_3077,
+0, str_3079,
+str_307a,
+0, str_307c,
+str_307d,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_3094,
+0, 0, 0, 0, 0, 0, str_309b,
+str_309c,
+0, str_309e,
+str_309f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_30ac,
+0, str_30ae,
+0, str_30b0,
+0, str_30b2,
+0, str_30b4,
+0, str_30b6,
+0, str_30b8,
+0, str_30ba,
+0, str_30bc,
+0, str_30be,
+0, str_30c0,
+0, str_30c2,
+0, 0, str_30c5,
+0, str_30c7,
+0, str_30c9,
+0, 0, 0, 0, 0, 0, str_30d0,
+str_30d1,
+0, str_30d3,
+str_30d4,
+0, str_30d6,
+str_30d7,
+0, str_30d9,
+str_30da,
+0, str_30dc,
+str_30dd,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_30f4,
+0, 0, str_30f7,
+str_30f8,
+str_30f9,
+str_30fa,
+0, 0, 0, str_30fe,
+str_30ff,
+0};
+
+static const unichar_t * const tab_31[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_3131,
+str_3132,
+str_3133,
+str_3134,
+str_3135,
+str_3136,
+str_3137,
+str_3138,
+str_3139,
+str_313a,
+str_313b,
+str_313c,
+str_313d,
+str_313e,
+str_313f,
+str_3140,
+str_3141,
+str_3142,
+str_3143,
+str_3144,
+str_3145,
+str_3146,
+str_3147,
+str_3148,
+str_3149,
+str_314a,
+str_314b,
+str_314c,
+str_314d,
+str_314e,
+str_314f,
+str_3150,
+str_3151,
+str_3152,
+str_3153,
+str_3154,
+str_3155,
+str_3156,
+str_3157,
+str_3158,
+str_3159,
+str_315a,
+str_315b,
+str_315c,
+str_315d,
+str_315e,
+str_315f,
+str_3160,
+str_3161,
+str_3162,
+str_3163,
+str_3164,
+str_3165,
+str_3166,
+str_3167,
+str_3168,
+str_3169,
+str_316a,
+str_316b,
+str_316c,
+str_316d,
+str_316e,
+str_316f,
+str_3170,
+str_3171,
+str_3172,
+str_3173,
+str_3174,
+str_3175,
+str_3176,
+str_3177,
+str_3178,
+str_3179,
+str_317a,
+str_317b,
+str_317c,
+str_317d,
+str_317e,
+str_317f,
+str_3180,
+str_3181,
+str_3182,
+str_3183,
+str_3184,
+str_3185,
+str_3186,
+str_3187,
+str_3188,
+str_3189,
+str_318a,
+str_318b,
+str_318c,
+str_318d,
+str_318e,
+0, 0, 0, str_3192,
+str_3193,
+str_3194,
+str_3195,
+str_3196,
+str_3197,
+str_3198,
+str_3199,
+str_319a,
+str_319b,
+str_319c,
+str_319d,
+str_319e,
+str_319f,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_32[] = {
+str_3200,
+str_3201,
+str_3202,
+str_3203,
+str_3204,
+str_3205,
+str_3206,
+str_3207,
+str_3208,
+str_3209,
+str_320a,
+str_320b,
+str_320c,
+str_320d,
+str_320e,
+str_320f,
+str_3210,
+str_3211,
+str_3212,
+str_3213,
+str_3214,
+str_3215,
+str_3216,
+str_3217,
+str_3218,
+str_3219,
+str_321a,
+str_321b,
+str_321c,
+str_321d,
+str_321e,
+0, str_3220,
+str_3221,
+str_3222,
+str_3223,
+str_3224,
+str_3225,
+str_3226,
+str_3227,
+str_3228,
+str_3229,
+str_322a,
+str_322b,
+str_322c,
+str_322d,
+str_322e,
+str_322f,
+str_3230,
+str_3231,
+str_3232,
+str_3233,
+str_3234,
+str_3235,
+str_3236,
+str_3237,
+str_3238,
+str_3239,
+str_323a,
+str_323b,
+str_323c,
+str_323d,
+str_323e,
+str_323f,
+str_3240,
+str_3241,
+str_3242,
+str_3243,
+str_3244,
+str_3245,
+str_3246,
+str_3247,
+0, 0, 0, 0, 0, 0, 0, 0, str_3250,
+str_3251,
+str_3252,
+str_3253,
+str_3254,
+str_3255,
+str_3256,
+str_3257,
+str_3258,
+str_3259,
+str_325a,
+str_325b,
+str_325c,
+str_325d,
+str_325e,
+str_325f,
+str_3260,
+str_3261,
+str_3262,
+str_3263,
+str_3264,
+str_3265,
+str_3266,
+str_3267,
+str_3268,
+str_3269,
+str_326a,
+str_326b,
+str_326c,
+str_326d,
+str_326e,
+str_326f,
+str_3270,
+str_3271,
+str_3272,
+str_3273,
+str_3274,
+str_3275,
+str_3276,
+str_3277,
+str_3278,
+str_3279,
+str_327a,
+str_327b,
+str_327c,
+str_327d,
+str_327e,
+0, str_3280,
+str_3281,
+str_3282,
+str_3283,
+str_3284,
+str_3285,
+str_3286,
+str_3287,
+str_3288,
+str_3289,
+str_328a,
+str_328b,
+str_328c,
+str_328d,
+str_328e,
+str_328f,
+str_3290,
+str_3291,
+str_3292,
+str_3293,
+str_3294,
+str_3295,
+str_3296,
+str_3297,
+str_3298,
+str_3299,
+str_329a,
+str_329b,
+str_329c,
+str_329d,
+str_329e,
+str_329f,
+str_32a0,
+str_32a1,
+str_32a2,
+str_32a3,
+str_32a4,
+str_32a5,
+str_32a6,
+str_32a7,
+str_32a8,
+str_32a9,
+str_32aa,
+str_32ab,
+str_32ac,
+str_32ad,
+str_32ae,
+str_32af,
+str_32b0,
+str_32b1,
+str_32b2,
+str_32b3,
+str_32b4,
+str_32b5,
+str_32b6,
+str_32b7,
+str_32b8,
+str_32b9,
+str_32ba,
+str_32bb,
+str_32bc,
+str_32bd,
+str_32be,
+str_32bf,
+str_32c0,
+str_32c1,
+str_32c2,
+str_32c3,
+str_32c4,
+str_32c5,
+str_32c6,
+str_32c7,
+str_32c8,
+str_32c9,
+str_32ca,
+str_32cb,
+str_32cc,
+str_32cd,
+str_32ce,
+str_32cf,
+str_32d0,
+str_32d1,
+str_32d2,
+str_32d3,
+str_32d4,
+str_32d5,
+str_32d6,
+str_32d7,
+str_32d8,
+str_32d9,
+str_32da,
+str_32db,
+str_32dc,
+str_32dd,
+str_32de,
+str_32df,
+str_32e0,
+str_32e1,
+str_32e2,
+str_32e3,
+str_32e4,
+str_32e5,
+str_32e6,
+str_32e7,
+str_32e8,
+str_32e9,
+str_32ea,
+str_32eb,
+str_32ec,
+str_32ed,
+str_32ee,
+str_32ef,
+str_32f0,
+str_32f1,
+str_32f2,
+str_32f3,
+str_32f4,
+str_32f5,
+str_32f6,
+str_32f7,
+str_32f8,
+str_32f9,
+str_32fa,
+str_32fb,
+str_32fc,
+str_32fd,
+str_32fe,
+0, 0};
+
+static const unichar_t * const tab_33[] = {
+str_3300,
+str_3301,
+str_3302,
+str_3303,
+str_3304,
+str_3305,
+str_3306,
+str_3307,
+str_3308,
+str_3309,
+str_330a,
+str_330b,
+str_330c,
+str_330d,
+str_330e,
+str_330f,
+str_3310,
+str_3311,
+str_3312,
+str_3313,
+str_3314,
+str_3315,
+str_3316,
+str_3317,
+str_3318,
+str_3319,
+str_331a,
+str_331b,
+str_331c,
+str_331d,
+str_331e,
+str_331f,
+str_3320,
+str_3321,
+str_3322,
+str_3323,
+str_3324,
+str_3325,
+str_3326,
+str_3327,
+str_3328,
+str_3329,
+str_332a,
+str_332b,
+str_332c,
+str_332d,
+str_332e,
+str_332f,
+str_3330,
+str_3331,
+str_3332,
+str_3333,
+str_3334,
+str_3335,
+str_3336,
+str_3337,
+str_3338,
+str_3339,
+str_333a,
+str_333b,
+str_333c,
+str_333d,
+str_333e,
+str_333f,
+str_3340,
+str_3341,
+str_3342,
+str_3343,
+str_3344,
+str_3345,
+str_3346,
+str_3347,
+str_3348,
+str_3349,
+str_334a,
+str_334b,
+str_334c,
+str_334d,
+str_334e,
+str_334f,
+str_3350,
+str_3351,
+str_3352,
+str_3353,
+str_3354,
+str_3355,
+str_3356,
+str_3357,
+str_3358,
+str_3359,
+str_335a,
+str_335b,
+str_335c,
+str_335d,
+str_335e,
+str_335f,
+str_3360,
+str_3361,
+str_3362,
+str_3363,
+str_3364,
+str_3365,
+str_3366,
+str_3367,
+str_3368,
+str_3369,
+str_336a,
+str_336b,
+str_336c,
+str_336d,
+str_336e,
+str_336f,
+str_3370,
+str_3371,
+str_3372,
+str_3373,
+str_3374,
+str_3375,
+str_3376,
+str_3377,
+str_3378,
+str_3379,
+str_337a,
+str_337b,
+str_337c,
+str_337d,
+str_337e,
+str_337f,
+str_3380,
+str_3381,
+str_3382,
+str_3383,
+str_3384,
+str_3385,
+str_3386,
+str_3387,
+str_3388,
+str_3389,
+str_338a,
+str_338b,
+str_338c,
+str_338d,
+str_338e,
+str_338f,
+str_3390,
+str_3391,
+str_3392,
+str_3393,
+str_3394,
+str_3395,
+str_3396,
+str_3397,
+str_3398,
+str_3399,
+str_339a,
+str_339b,
+str_339c,
+str_339d,
+str_339e,
+str_339f,
+str_33a0,
+str_33a1,
+str_33a2,
+str_33a3,
+str_33a4,
+str_33a5,
+str_33a6,
+str_33a7,
+str_33a8,
+str_33a9,
+str_33aa,
+str_33ab,
+str_33ac,
+str_33ad,
+str_33ae,
+str_33af,
+str_33b0,
+str_33b1,
+str_33b2,
+str_33b3,
+str_33b4,
+str_33b5,
+str_33b6,
+str_33b7,
+str_33b8,
+str_33b9,
+str_33ba,
+str_33bb,
+str_33bc,
+str_33bd,
+str_33be,
+str_33bf,
+str_33c0,
+str_33c1,
+str_33c2,
+str_33c3,
+str_33c4,
+str_33c5,
+str_33c6,
+str_33c7,
+str_33c8,
+str_33c9,
+str_33ca,
+str_33cb,
+str_33cc,
+str_33cd,
+str_33ce,
+str_33cf,
+str_33d0,
+str_33d1,
+str_33d2,
+str_33d3,
+str_33d4,
+str_33d5,
+str_33d6,
+str_33d7,
+str_33d8,
+str_33d9,
+str_33da,
+str_33db,
+str_33dc,
+str_33dd,
+str_33de,
+str_33df,
+str_33e0,
+str_33e1,
+str_33e2,
+str_33e3,
+str_33e4,
+str_33e5,
+str_33e6,
+str_33e7,
+str_33e8,
+str_33e9,
+str_33ea,
+str_33eb,
+str_33ec,
+str_33ed,
+str_33ee,
+str_33ef,
+str_33f0,
+str_33f1,
+str_33f2,
+str_33f3,
+str_33f4,
+str_33f5,
+str_33f6,
+str_33f7,
+str_33f8,
+str_33f9,
+str_33fa,
+str_33fb,
+str_33fc,
+str_33fd,
+str_33fe,
+str_33ff,
+0};
+
+static const unichar_t * const tab_a7[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_a770,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_a7f8,
+str_a7f9,
+0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_f9[] = {
+str_f900,
+str_f901,
+str_f902,
+str_f903,
+str_f904,
+str_f905,
+str_f906,
+str_f907,
+str_f908,
+str_f909,
+str_f90a,
+str_f90b,
+str_f90c,
+str_f90d,
+str_f90e,
+str_f90f,
+str_f910,
+str_f911,
+str_f912,
+str_f913,
+str_f914,
+str_f915,
+str_f916,
+str_f917,
+str_f918,
+str_f919,
+str_f91a,
+str_f91b,
+str_f91c,
+str_f91d,
+str_f91e,
+str_f91f,
+str_f920,
+str_f921,
+str_f922,
+str_f923,
+str_f924,
+str_f925,
+str_f926,
+str_f927,
+str_f928,
+str_f929,
+str_f92a,
+str_f92b,
+str_f92c,
+str_f92d,
+str_f92e,
+str_f92f,
+str_f930,
+str_f931,
+str_f932,
+str_f933,
+str_f934,
+str_f935,
+str_f936,
+str_f937,
+str_f938,
+str_f939,
+str_f93a,
+str_f93b,
+str_f93c,
+str_f93d,
+str_f93e,
+str_f93f,
+str_f940,
+str_f941,
+str_f942,
+str_f943,
+str_f944,
+str_f945,
+str_f946,
+str_f947,
+str_f948,
+str_f949,
+str_f94a,
+str_f94b,
+str_f94c,
+str_f94d,
+str_f94e,
+str_f94f,
+str_f950,
+str_f951,
+str_f952,
+str_f953,
+str_f954,
+str_f955,
+str_f956,
+str_f957,
+str_f958,
+str_f959,
+str_f95a,
+str_f95b,
+str_f95c,
+str_f95d,
+str_f95e,
+str_f95f,
+str_f960,
+str_f961,
+str_f962,
+str_f963,
+str_f964,
+str_f965,
+str_f966,
+str_f967,
+str_f968,
+str_f969,
+str_f96a,
+str_f96b,
+str_f96c,
+str_f96d,
+str_f96e,
+str_f96f,
+str_f970,
+str_f971,
+str_f972,
+str_f973,
+str_f974,
+str_f975,
+str_f976,
+str_f977,
+str_f978,
+str_f979,
+str_f97a,
+str_f97b,
+str_f97c,
+str_f97d,
+str_f97e,
+str_f97f,
+str_f980,
+str_f981,
+str_f982,
+str_f983,
+str_f984,
+str_f985,
+str_f986,
+str_f987,
+str_f988,
+str_f989,
+str_f98a,
+str_f98b,
+str_f98c,
+str_f98d,
+str_f98e,
+str_f98f,
+str_f990,
+str_f991,
+str_f992,
+str_f993,
+str_f994,
+str_f995,
+str_f996,
+str_f997,
+str_f998,
+str_f999,
+str_f99a,
+str_f99b,
+str_f99c,
+str_f99d,
+str_f99e,
+str_f99f,
+str_f9a0,
+str_f9a1,
+str_f9a2,
+str_f9a3,
+str_f9a4,
+str_f9a5,
+str_f9a6,
+str_f9a7,
+str_f9a8,
+str_f9a9,
+str_f9aa,
+str_f9ab,
+str_f9ac,
+str_f9ad,
+str_f9ae,
+str_f9af,
+str_f9b0,
+str_f9b1,
+str_f9b2,
+str_f9b3,
+str_f9b4,
+str_f9b5,
+str_f9b6,
+str_f9b7,
+str_f9b8,
+str_f9b9,
+str_f9ba,
+str_f9bb,
+str_f9bc,
+str_f9bd,
+str_f9be,
+str_f9bf,
+str_f9c0,
+str_f9c1,
+str_f9c2,
+str_f9c3,
+str_f9c4,
+str_f9c5,
+str_f9c6,
+str_f9c7,
+str_f9c8,
+str_f9c9,
+str_f9ca,
+str_f9cb,
+str_f9cc,
+str_f9cd,
+str_f9ce,
+str_f9cf,
+str_f9d0,
+str_f9d1,
+str_f9d2,
+str_f9d3,
+str_f9d4,
+str_f9d5,
+str_f9d6,
+str_f9d7,
+str_f9d8,
+str_f9d9,
+str_f9da,
+str_f9db,
+str_f9dc,
+str_f9dd,
+str_f9de,
+str_f9df,
+str_f9e0,
+str_f9e1,
+str_f9e2,
+str_f9e3,
+str_f9e4,
+str_f9e5,
+str_f9e6,
+str_f9e7,
+str_f9e8,
+str_f9e9,
+str_f9ea,
+str_f9eb,
+str_f9ec,
+str_f9ed,
+str_f9ee,
+str_f9ef,
+str_f9f0,
+str_f9f1,
+str_f9f2,
+str_f9f3,
+str_f9f4,
+str_f9f5,
+str_f9f6,
+str_f9f7,
+str_f9f8,
+str_f9f9,
+str_f9fa,
+str_f9fb,
+str_f9fc,
+str_f9fd,
+str_f9fe,
+str_f9ff,
+0};
+
+static const unichar_t * const tab_fa[] = {
+str_fa00,
+str_fa01,
+str_fa02,
+str_fa03,
+str_fa04,
+str_fa05,
+str_fa06,
+str_fa07,
+str_fa08,
+str_fa09,
+str_fa0a,
+str_fa0b,
+str_fa0c,
+str_fa0d,
+0, 0, str_fa10,
+0, str_fa12,
+0, 0, str_fa15,
+str_fa16,
+str_fa17,
+str_fa18,
+str_fa19,
+str_fa1a,
+str_fa1b,
+str_fa1c,
+str_fa1d,
+str_fa1e,
+0, str_fa20,
+0, str_fa22,
+0, 0, str_fa25,
+str_fa26,
+0, 0, 0, str_fa2a,
+str_fa2b,
+str_fa2c,
+str_fa2d,
+str_fa2e,
+str_fa2f,
+str_fa30,
+str_fa31,
+str_fa32,
+str_fa33,
+str_fa34,
+str_fa35,
+str_fa36,
+str_fa37,
+str_fa38,
+str_fa39,
+str_fa3a,
+str_fa3b,
+str_fa3c,
+str_fa3d,
+str_fa3e,
+str_fa3f,
+str_fa40,
+str_fa41,
+str_fa42,
+str_fa43,
+str_fa44,
+str_fa45,
+str_fa46,
+str_fa47,
+str_fa48,
+str_fa49,
+str_fa4a,
+str_fa4b,
+str_fa4c,
+str_fa4d,
+str_fa4e,
+str_fa4f,
+str_fa50,
+str_fa51,
+str_fa52,
+str_fa53,
+str_fa54,
+str_fa55,
+str_fa56,
+str_fa57,
+str_fa58,
+str_fa59,
+str_fa5a,
+str_fa5b,
+str_fa5c,
+str_fa5d,
+str_fa5e,
+str_fa5f,
+str_fa60,
+str_fa61,
+str_fa62,
+str_fa63,
+str_fa64,
+str_fa65,
+str_fa66,
+str_fa67,
+str_fa68,
+str_fa69,
+str_fa6a,
+str_fa6b,
+str_fa6c,
+str_fa6d,
+0, 0, str_fa70,
+str_fa71,
+str_fa72,
+str_fa73,
+str_fa74,
+str_fa75,
+str_fa76,
+str_fa77,
+str_fa78,
+str_fa79,
+str_fa7a,
+str_fa7b,
+str_fa7c,
+str_fa7d,
+str_fa7e,
+str_fa7f,
+str_fa80,
+str_fa81,
+str_fa82,
+str_fa83,
+str_fa84,
+str_fa85,
+str_fa86,
+str_fa87,
+str_fa88,
+str_fa89,
+str_fa8a,
+str_fa8b,
+str_fa8c,
+str_fa8d,
+str_fa8e,
+str_fa8f,
+str_fa90,
+str_fa91,
+str_fa92,
+str_fa93,
+str_fa94,
+str_fa95,
+str_fa96,
+str_fa97,
+str_fa98,
+str_fa99,
+str_fa9a,
+str_fa9b,
+str_fa9c,
+str_fa9d,
+str_fa9e,
+str_fa9f,
+str_faa0,
+str_faa1,
+str_faa2,
+str_faa3,
+str_faa4,
+str_faa5,
+str_faa6,
+str_faa7,
+str_faa8,
+str_faa9,
+str_faaa,
+str_faab,
+str_faac,
+str_faad,
+str_faae,
+str_faaf,
+str_fab0,
+str_fab1,
+str_fab2,
+str_fab3,
+str_fab4,
+str_fab5,
+str_fab6,
+str_fab7,
+str_fab8,
+str_fab9,
+str_faba,
+str_fabb,
+str_fabc,
+str_fabd,
+str_fabe,
+str_fabf,
+str_fac0,
+str_fac1,
+str_fac2,
+str_fac3,
+str_fac4,
+str_fac5,
+str_fac6,
+str_fac7,
+str_fac8,
+str_fac9,
+str_faca,
+str_facb,
+str_facc,
+str_facd,
+str_face,
+str_facf,
+str_fad0,
+str_fad1,
+str_fad2,
+str_fad3,
+str_fad4,
+str_fad5,
+str_fad6,
+str_fad7,
+str_fad8,
+str_fad9,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static const unichar_t * const tab_fb[] = {
+str_fb00,
+str_fb01,
+str_fb02,
+str_fb03,
+str_fb04,
+str_fb05,
+str_fb06,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fb13,
+str_fb14,
+str_fb15,
+str_fb16,
+str_fb17,
+0, 0, 0, 0, 0, str_fb1d,
+0, str_fb1f,
+str_fb20,
+str_fb21,
+str_fb22,
+str_fb23,
+str_fb24,
+str_fb25,
+str_fb26,
+str_fb27,
+str_fb28,
+str_fb29,
+str_fb2a,
+str_fb2b,
+str_fb2c,
+str_fb2d,
+str_fb2e,
+str_fb2f,
+str_fb30,
+str_fb31,
+str_fb32,
+str_fb33,
+str_fb34,
+str_fb35,
+str_fb36,
+0, str_fb38,
+str_fb39,
+str_fb3a,
+str_fb3b,
+str_fb3c,
+0, str_fb3e,
+0, str_fb40,
+str_fb41,
+0, str_fb43,
+str_fb44,
+0, str_fb46,
+str_fb47,
+str_fb48,
+str_fb49,
+str_fb4a,
+str_fb4b,
+str_fb4c,
+str_fb4d,
+str_fb4e,
+str_fb4f,
+str_fb50,
+str_fb51,
+str_fb52,
+str_fb53,
+str_fb54,
+str_fb55,
+str_fb56,
+str_fb57,
+str_fb58,
+str_fb59,
+str_fb5a,
+str_fb5b,
+str_fb5c,
+str_fb5d,
+str_fb5e,
+str_fb5f,
+str_fb60,
+str_fb61,
+str_fb62,
+str_fb63,
+str_fb64,
+str_fb65,
+str_fb66,
+str_fb67,
+str_fb68,
+str_fb69,
+str_fb6a,
+str_fb6b,
+str_fb6c,
+str_fb6d,
+str_fb6e,
+str_fb6f,
+str_fb70,
+str_fb71,
+str_fb72,
+str_fb73,
+str_fb74,
+str_fb75,
+str_fb76,
+str_fb77,
+str_fb78,
+str_fb79,
+str_fb7a,
+str_fb7b,
+str_fb7c,
+str_fb7d,
+str_fb7e,
+str_fb7f,
+str_fb80,
+str_fb81,
+str_fb82,
+str_fb83,
+str_fb84,
+str_fb85,
+str_fb86,
+str_fb87,
+str_fb88,
+str_fb89,
+str_fb8a,
+str_fb8b,
+str_fb8c,
+str_fb8d,
+str_fb8e,
+str_fb8f,
+str_fb90,
+str_fb91,
+str_fb92,
+str_fb93,
+str_fb94,
+str_fb95,
+str_fb96,
+str_fb97,
+str_fb98,
+str_fb99,
+str_fb9a,
+str_fb9b,
+str_fb9c,
+str_fb9d,
+str_fb9e,
+str_fb9f,
+str_fba0,
+str_fba1,
+str_fba2,
+str_fba3,
+str_fba4,
+str_fba5,
+str_fba6,
+str_fba7,
+str_fba8,
+str_fba9,
+str_fbaa,
+str_fbab,
+str_fbac,
+str_fbad,
+str_fbae,
+str_fbaf,
+str_fbb0,
+str_fbb1,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fbd3,
+str_fbd4,
+str_fbd5,
+str_fbd6,
+str_fbd7,
+str_fbd8,
+str_fbd9,
+str_fbda,
+str_fbdb,
+str_fbdc,
+str_fbdd,
+str_fbde,
+str_fbdf,
+str_fbe0,
+str_fbe1,
+str_fbe2,
+str_fbe3,
+str_fbe4,
+str_fbe5,
+str_fbe6,
+str_fbe7,
+str_fbe8,
+str_fbe9,
+str_fbea,
+str_fbeb,
+str_fbec,
+str_fbed,
+str_fbee,
+str_fbef,
+str_fbf0,
+str_fbf1,
+str_fbf2,
+str_fbf3,
+str_fbf4,
+str_fbf5,
+str_fbf6,
+str_fbf7,
+str_fbf8,
+str_fbf9,
+str_fbfa,
+str_fbfb,
+str_fbfc,
+str_fbfd,
+str_fbfe,
+str_fbff,
+0};
+
+static const unichar_t * const tab_fc[] = {
+str_fc00,
+str_fc01,
+str_fc02,
+str_fc03,
+str_fc04,
+str_fc05,
+str_fc06,
+str_fc07,
+str_fc08,
+str_fc09,
+str_fc0a,
+str_fc0b,
+str_fc0c,
+str_fc0d,
+str_fc0e,
+str_fc0f,
+str_fc10,
+str_fc11,
+str_fc12,
+str_fc13,
+str_fc14,
+str_fc15,
+str_fc16,
+str_fc17,
+str_fc18,
+str_fc19,
+str_fc1a,
+str_fc1b,
+str_fc1c,
+str_fc1d,
+str_fc1e,
+str_fc1f,
+str_fc20,
+str_fc21,
+str_fc22,
+str_fc23,
+str_fc24,
+str_fc25,
+str_fc26,
+str_fc27,
+str_fc28,
+str_fc29,
+str_fc2a,
+str_fc2b,
+str_fc2c,
+str_fc2d,
+str_fc2e,
+str_fc2f,
+str_fc30,
+str_fc31,
+str_fc32,
+str_fc33,
+str_fc34,
+str_fc35,
+str_fc36,
+str_fc37,
+str_fc38,
+str_fc39,
+str_fc3a,
+str_fc3b,
+str_fc3c,
+str_fc3d,
+str_fc3e,
+str_fc3f,
+str_fc40,
+str_fc41,
+str_fc42,
+str_fc43,
+str_fc44,
+str_fc45,
+str_fc46,
+str_fc47,
+str_fc48,
+str_fc49,
+str_fc4a,
+str_fc4b,
+str_fc4c,
+str_fc4d,
+str_fc4e,
+str_fc4f,
+str_fc50,
+str_fc51,
+str_fc52,
+str_fc53,
+str_fc54,
+str_fc55,
+str_fc56,
+str_fc57,
+str_fc58,
+str_fc59,
+str_fc5a,
+str_fc5b,
+str_fc5c,
+str_fc5d,
+str_fc5e,
+str_fc5f,
+str_fc60,
+str_fc61,
+str_fc62,
+str_fc63,
+str_fc64,
+str_fc65,
+str_fc66,
+str_fc67,
+str_fc68,
+str_fc69,
+str_fc6a,
+str_fc6b,
+str_fc6c,
+str_fc6d,
+str_fc6e,
+str_fc6f,
+str_fc70,
+str_fc71,
+str_fc72,
+str_fc73,
+str_fc74,
+str_fc75,
+str_fc76,
+str_fc77,
+str_fc78,
+str_fc79,
+str_fc7a,
+str_fc7b,
+str_fc7c,
+str_fc7d,
+str_fc7e,
+str_fc7f,
+str_fc80,
+str_fc81,
+str_fc82,
+str_fc83,
+str_fc84,
+str_fc85,
+str_fc86,
+str_fc87,
+str_fc88,
+str_fc89,
+str_fc8a,
+str_fc8b,
+str_fc8c,
+str_fc8d,
+str_fc8e,
+str_fc8f,
+str_fc90,
+str_fc91,
+str_fc92,
+str_fc93,
+str_fc94,
+str_fc95,
+str_fc96,
+str_fc97,
+str_fc98,
+str_fc99,
+str_fc9a,
+str_fc9b,
+str_fc9c,
+str_fc9d,
+str_fc9e,
+str_fc9f,
+str_fca0,
+str_fca1,
+str_fca2,
+str_fca3,
+str_fca4,
+str_fca5,
+str_fca6,
+str_fca7,
+str_fca8,
+str_fca9,
+str_fcaa,
+str_fcab,
+str_fcac,
+str_fcad,
+str_fcae,
+str_fcaf,
+str_fcb0,
+str_fcb1,
+str_fcb2,
+str_fcb3,
+str_fcb4,
+str_fcb5,
+str_fcb6,
+str_fcb7,
+str_fcb8,
+str_fcb9,
+str_fcba,
+str_fcbb,
+str_fcbc,
+str_fcbd,
+str_fcbe,
+str_fcbf,
+str_fcc0,
+str_fcc1,
+str_fcc2,
+str_fcc3,
+str_fcc4,
+str_fcc5,
+str_fcc6,
+str_fcc7,
+str_fcc8,
+str_fcc9,
+str_fcca,
+str_fccb,
+str_fccc,
+str_fccd,
+str_fcce,
+str_fccf,
+str_fcd0,
+str_fcd1,
+str_fcd2,
+str_fcd3,
+str_fcd4,
+str_fcd5,
+str_fcd6,
+str_fcd7,
+str_fcd8,
+str_fcd9,
+str_fcda,
+str_fcdb,
+str_fcdc,
+str_fcdd,
+str_fcde,
+str_fcdf,
+str_fce0,
+str_fce1,
+str_fce2,
+str_fce3,
+str_fce4,
+str_fce5,
+str_fce6,
+str_fce7,
+str_fce8,
+str_fce9,
+str_fcea,
+str_fceb,
+str_fcec,
+str_fced,
+str_fcee,
+str_fcef,
+str_fcf0,
+str_fcf1,
+str_fcf2,
+str_fcf3,
+str_fcf4,
+str_fcf5,
+str_fcf6,
+str_fcf7,
+str_fcf8,
+str_fcf9,
+str_fcfa,
+str_fcfb,
+str_fcfc,
+str_fcfd,
+str_fcfe,
+str_fcff,
+0};
+
+static const unichar_t * const tab_fd[] = {
+str_fd00,
+str_fd01,
+str_fd02,
+str_fd03,
+str_fd04,
+str_fd05,
+str_fd06,
+str_fd07,
+str_fd08,
+str_fd09,
+str_fd0a,
+str_fd0b,
+str_fd0c,
+str_fd0d,
+str_fd0e,
+str_fd0f,
+str_fd10,
+str_fd11,
+str_fd12,
+str_fd13,
+str_fd14,
+str_fd15,
+str_fd16,
+str_fd17,
+str_fd18,
+str_fd19,
+str_fd1a,
+str_fd1b,
+str_fd1c,
+str_fd1d,
+str_fd1e,
+str_fd1f,
+str_fd20,
+str_fd21,
+str_fd22,
+str_fd23,
+str_fd24,
+str_fd25,
+str_fd26,
+str_fd27,
+str_fd28,
+str_fd29,
+str_fd2a,
+str_fd2b,
+str_fd2c,
+str_fd2d,
+str_fd2e,
+str_fd2f,
+str_fd30,
+str_fd31,
+str_fd32,
+str_fd33,
+str_fd34,
+str_fd35,
+str_fd36,
+str_fd37,
+str_fd38,
+str_fd39,
+str_fd3a,
+str_fd3b,
+str_fd3c,
+str_fd3d,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fd50,
+str_fd51,
+str_fd52,
+str_fd53,
+str_fd54,
+str_fd55,
+str_fd56,
+str_fd57,
+str_fd58,
+str_fd59,
+str_fd5a,
+str_fd5b,
+str_fd5c,
+str_fd5d,
+str_fd5e,
+str_fd5f,
+str_fd60,
+str_fd61,
+str_fd62,
+str_fd63,
+str_fd64,
+str_fd65,
+str_fd66,
+str_fd67,
+str_fd68,
+str_fd69,
+str_fd6a,
+str_fd6b,
+str_fd6c,
+str_fd6d,
+str_fd6e,
+str_fd6f,
+str_fd70,
+str_fd71,
+str_fd72,
+str_fd73,
+str_fd74,
+str_fd75,
+str_fd76,
+str_fd77,
+str_fd78,
+str_fd79,
+str_fd7a,
+str_fd7b,
+str_fd7c,
+str_fd7d,
+str_fd7e,
+str_fd7f,
+str_fd80,
+str_fd81,
+str_fd82,
+str_fd83,
+str_fd84,
+str_fd85,
+str_fd86,
+str_fd87,
+str_fd88,
+str_fd89,
+str_fd8a,
+str_fd8b,
+str_fd8c,
+str_fd8d,
+str_fd8e,
+str_fd8f,
+0, 0, str_fd92,
+str_fd93,
+str_fd94,
+str_fd95,
+str_fd96,
+str_fd97,
+str_fd98,
+str_fd99,
+str_fd9a,
+str_fd9b,
+str_fd9c,
+str_fd9d,
+str_fd9e,
+str_fd9f,
+str_fda0,
+str_fda1,
+str_fda2,
+str_fda3,
+str_fda4,
+str_fda5,
+str_fda6,
+str_fda7,
+str_fda8,
+str_fda9,
+str_fdaa,
+str_fdab,
+str_fdac,
+str_fdad,
+str_fdae,
+str_fdaf,
+str_fdb0,
+str_fdb1,
+str_fdb2,
+str_fdb3,
+str_fdb4,
+str_fdb5,
+str_fdb6,
+str_fdb7,
+str_fdb8,
+str_fdb9,
+str_fdba,
+str_fdbb,
+str_fdbc,
+str_fdbd,
+str_fdbe,
+str_fdbf,
+str_fdc0,
+str_fdc1,
+str_fdc2,
+str_fdc3,
+str_fdc4,
+str_fdc5,
+str_fdc6,
+str_fdc7,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fdf0,
+str_fdf1,
+str_fdf2,
+str_fdf3,
+str_fdf4,
+str_fdf5,
+str_fdf6,
+str_fdf7,
+str_fdf8,
+str_fdf9,
+str_fdfa,
+str_fdfb,
+str_fdfc,
+0, 0, 0, 0};
+
+static const unichar_t * const tab_fe[] = {
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fe10,
+str_fe11,
+str_fe12,
+str_fe13,
+str_fe14,
+str_fe15,
+str_fe16,
+str_fe17,
+str_fe18,
+str_fe19,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, str_fe30,
+str_fe31,
+str_fe32,
+str_fe33,
+str_fe34,
+str_fe35,
+str_fe36,
+str_fe37,
+str_fe38,
+str_fe39,
+str_fe3a,
+str_fe3b,
+str_fe3c,
+str_fe3d,
+str_fe3e,
+str_fe3f,
+str_fe40,
+str_fe41,
+str_fe42,
+str_fe43,
+str_fe44,
+0, 0, str_fe47,
+str_fe48,
+str_fe49,
+str_fe4a,
+str_fe4b,
+str_fe4c,
+str_fe4d,
+str_fe4e,
+str_fe4f,
+str_fe50,
+str_fe51,
+str_fe52,
+0, str_fe54,
+str_fe55,
+str_fe56,
+str_fe57,
+str_fe58,
+str_fe59,
+str_fe5a,
+str_fe5b,
+str_fe5c,
+str_fe5d,
+str_fe5e,
+str_fe5f,
+str_fe60,
+str_fe61,
+str_fe62,
+str_fe63,
+str_fe64,
+str_fe65,
+str_fe66,
+0, str_fe68,
+str_fe69,
+str_fe6a,
+str_fe6b,
+0, 0, 0, 0, str_fe70,
+str_fe71,
+str_fe72,
+0, str_fe74,
+0, str_fe76,
+str_fe77,
+str_fe78,
+str_fe79,
+str_fe7a,
+str_fe7b,
+str_fe7c,
+str_fe7d,
+str_fe7e,
+str_fe7f,
+str_fe80,
+str_fe81,
+str_fe82,
+str_fe83,
+str_fe84,
+str_fe85,
+str_fe86,
+str_fe87,
+str_fe88,
+str_fe89,
+str_fe8a,
+str_fe8b,
+str_fe8c,
+str_fe8d,
+str_fe8e,
+str_fe8f,
+str_fe90,
+str_fe91,
+str_fe92,
+str_fe93,
+str_fe94,
+str_fe95,
+str_fe96,
+str_fe97,
+str_fe98,
+str_fe99,
+str_fe9a,
+str_fe9b,
+str_fe9c,
+str_fe9d,
+str_fe9e,
+str_fe9f,
+str_fea0,
+str_fea1,
+str_fea2,
+str_fea3,
+str_fea4,
+str_fea5,
+str_fea6,
+str_fea7,
+str_fea8,
+str_fea9,
+str_feaa,
+str_feab,
+str_feac,
+str_fead,
+str_feae,
+str_feaf,
+str_feb0,
+str_feb1,
+str_feb2,
+str_feb3,
+str_feb4,
+str_feb5,
+str_feb6,
+str_feb7,
+str_feb8,
+str_feb9,
+str_feba,
+str_febb,
+str_febc,
+str_febd,
+str_febe,
+str_febf,
+str_fec0,
+str_fec1,
+str_fec2,
+str_fec3,
+str_fec4,
+str_fec5,
+str_fec6,
+str_fec7,
+str_fec8,
+str_fec9,
+str_feca,
+str_fecb,
+str_fecc,
+str_fecd,
+str_fece,
+str_fecf,
+str_fed0,
+str_fed1,
+str_fed2,
+str_fed3,
+str_fed4,
+str_fed5,
+str_fed6,
+str_fed7,
+str_fed8,
+str_fed9,
+str_feda,
+str_fedb,
+str_fedc,
+str_fedd,
+str_fede,
+str_fedf,
+str_fee0,
+str_fee1,
+str_fee2,
+str_fee3,
+str_fee4,
+str_fee5,
+str_fee6,
+str_fee7,
+str_fee8,
+str_fee9,
+str_feea,
+str_feeb,
+str_feec,
+str_feed,
+str_feee,
+str_feef,
+str_fef0,
+str_fef1,
+str_fef2,
+str_fef3,
+str_fef4,
+str_fef5,
+str_fef6,
+str_fef7,
+str_fef8,
+str_fef9,
+str_fefa,
+str_fefb,
+str_fefc,
+0, 0, 0, 0};
+
+static const unichar_t * const tab_ff[] = {
+0, str_ff01,
+str_ff02,
+str_ff03,
+str_ff04,
+str_ff05,
+str_ff06,
+str_ff07,
+str_ff08,
+str_ff09,
+str_ff0a,
+str_ff0b,
+str_ff0c,
+str_ff0d,
+str_ff0e,
+str_ff0f,
+str_ff10,
+str_ff11,
+str_ff12,
+str_ff13,
+str_ff14,
+str_ff15,
+str_ff16,
+str_ff17,
+str_ff18,
+str_ff19,
+str_ff1a,
+str_ff1b,
+str_ff1c,
+str_ff1d,
+str_ff1e,
+str_ff1f,
+str_ff20,
+str_ff21,
+str_ff22,
+str_ff23,
+str_ff24,
+str_ff25,
+str_ff26,
+str_ff27,
+str_ff28,
+str_ff29,
+str_ff2a,
+str_ff2b,
+str_ff2c,
+str_ff2d,
+str_ff2e,
+str_ff2f,
+str_ff30,
+str_ff31,
+str_ff32,
+str_ff33,
+str_ff34,
+str_ff35,
+str_ff36,
+str_ff37,
+str_ff38,
+str_ff39,
+str_ff3a,
+str_ff3b,
+str_ff3c,
+str_ff3d,
+str_ff3e,
+str_ff3f,
+str_ff40,
+str_ff41,
+str_ff42,
+str_ff43,
+str_ff44,
+str_ff45,
+str_ff46,
+str_ff47,
+str_ff48,
+str_ff49,
+str_ff4a,
+str_ff4b,
+str_ff4c,
+str_ff4d,
+str_ff4e,
+str_ff4f,
+str_ff50,
+str_ff51,
+str_ff52,
+str_ff53,
+str_ff54,
+str_ff55,
+str_ff56,
+str_ff57,
+str_ff58,
+str_ff59,
+str_ff5a,
+str_ff5b,
+str_ff5c,
+str_ff5d,
+str_ff5e,
+str_ff5f,
+str_ff60,
+str_ff61,
+str_ff62,
+str_ff63,
+str_ff64,
+str_ff65,
+str_ff66,
+str_ff67,
+str_ff68,
+str_ff69,
+str_ff6a,
+str_ff6b,
+str_ff6c,
+str_ff6d,
+str_ff6e,
+str_ff6f,
+str_ff70,
+str_ff71,
+str_ff72,
+str_ff73,
+str_ff74,
+str_ff75,
+str_ff76,
+str_ff77,
+str_ff78,
+str_ff79,
+str_ff7a,
+str_ff7b,
+str_ff7c,
+str_ff7d,
+str_ff7e,
+str_ff7f,
+str_ff80,
+str_ff81,
+str_ff82,
+str_ff83,
+str_ff84,
+str_ff85,
+str_ff86,
+str_ff87,
+str_ff88,
+str_ff89,
+str_ff8a,
+str_ff8b,
+str_ff8c,
+str_ff8d,
+str_ff8e,
+str_ff8f,
+str_ff90,
+str_ff91,
+str_ff92,
+str_ff93,
+str_ff94,
+str_ff95,
+str_ff96,
+str_ff97,
+str_ff98,
+str_ff99,
+str_ff9a,
+str_ff9b,
+str_ff9c,
+str_ff9d,
+str_ff9e,
+str_ff9f,
+str_ffa0,
+str_ffa1,
+str_ffa2,
+str_ffa3,
+str_ffa4,
+str_ffa5,
+str_ffa6,
+str_ffa7,
+str_ffa8,
+str_ffa9,
+str_ffaa,
+str_ffab,
+str_ffac,
+str_ffad,
+str_ffae,
+str_ffaf,
+str_ffb0,
+str_ffb1,
+str_ffb2,
+str_ffb3,
+str_ffb4,
+str_ffb5,
+str_ffb6,
+str_ffb7,
+str_ffb8,
+str_ffb9,
+str_ffba,
+str_ffbb,
+str_ffbc,
+str_ffbd,
+str_ffbe,
+0, 0, 0, str_ffc2,
+str_ffc3,
+str_ffc4,
+str_ffc5,
+str_ffc6,
+str_ffc7,
+0, 0, str_ffca,
+str_ffcb,
+str_ffcc,
+str_ffcd,
+str_ffce,
+str_ffcf,
+0, 0, str_ffd2,
+str_ffd3,
+str_ffd4,
+str_ffd5,
+str_ffd6,
+str_ffd7,
+0, 0, str_ffda,
+str_ffdb,
+str_ffdc,
+0, 0, 0, str_ffe0,
+str_ffe1,
+str_ffe2,
+str_ffe3,
+str_ffe4,
+str_ffe5,
+str_ffe6,
+0, str_ffe8,
+str_ffe9,
+str_ffea,
+str_ffeb,
+str_ffec,
+str_ffed,
+str_ffee,
+0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+const unichar_t *const * const unicode_alternates[] = {
+tab_0,
+tab_1,
+tab_2,
+tab_3,
+tab_4,
+tab_5,
+tab_6,
+up_allzeros, up_allzeros, tab_9,
+tab_a,
+tab_b,
+tab_c,
+tab_d,
+tab_e,
+tab_f,
+tab_10,
+tab_11,
+up_allzeros, tab_13,
+up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, tab_1b,
+up_allzeros, tab_1d,
+tab_1e,
+tab_1f,
+tab_20,
+tab_21,
+tab_22,
+tab_23,
+tab_24,
+tab_25,
+tab_26,
+tab_27,
+up_allzeros, up_allzeros, tab_2a,
+up_allzeros, tab_2c,
+tab_2d,
+tab_2e,
+tab_2f,
+tab_30,
+tab_31,
+tab_32,
+tab_33,
+up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, tab_a7,
+up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, up_allzeros, tab_f9,
+tab_fa,
+tab_fb,
+tab_fc,
+tab_fd,
+tab_fe,
+tab_ff,
+0};
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/ustring.c b/dviware/dvisvgm/libs/ff-woff/fontforge/ustring.c
new file mode 100644
index 0000000000..c67cffe25c
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/ustring.c
@@ -0,0 +1,225 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <fontforge-config.h>
+
+#include "ustring.h"
+
+int u_strlen(register const unichar_t *str) {
+ register int len = 0;
+
+ while ( *str++!='\0' )
+ ++len;
+return( len );
+}
+
+unichar_t *utf82u_strncpy(unichar_t *ubuf,const char *utf8buf,int len) {
+ unichar_t *upt=ubuf, *uend=ubuf+len-1;
+ const uint8 *pt = (const uint8 *) utf8buf, *end = pt+strlen(utf8buf);
+ int w, w2;
+
+ while ( pt<end && *pt!='\0' && upt<uend ) {
+ if ( *pt<=127 )
+ *upt = *pt++;
+ else if ( *pt<=0xdf ) {
+ *upt = ((*pt&0x1f)<<6) | (pt[1]&0x3f);
+ pt += 2;
+ } else if ( *pt<=0xef ) {
+ *upt = ((*pt&0xf)<<12) | ((pt[1]&0x3f)<<6) | (pt[2]&0x3f);
+ pt += 3;
+ } else {
+ w = ( ((*pt&0x7)<<2) | ((pt[1]&0x30)>>4) )-1;
+ w = (w<<6) | ((pt[1]&0xf)<<2) | ((pt[2]&0x30)>>4);
+ w2 = ((pt[2]&0xf)<<6) | (pt[3]&0x3f);
+ *upt = w*0x400 + w2 + 0x10000;
+ pt += 4;
+ }
+ ++upt;
+ }
+ *upt = '\0';
+return( ubuf );
+}
+
+unichar_t *utf82u_copy(const char *utf8buf) {
+ int len;
+ unichar_t *ubuf;
+
+ if ( utf8buf==NULL )
+return( NULL );
+
+ len = strlen(utf8buf);
+ ubuf = (unichar_t *) malloc((len+1)*sizeof(unichar_t));
+return( utf82u_strncpy(ubuf,utf8buf,len+1));
+}
+
+char *latin1_2_utf8_strcpy(char *utf8buf,const char *lbuf) {
+ char *pt = utf8buf;
+ const unsigned char *lpt = (const unsigned char *) lbuf;
+
+ while ( *lpt ) {
+ if ( *lpt<0x80 )
+ *pt++ = *lpt;
+ else {
+ *pt++ = 0xc0 | (*lpt>>6);
+ *pt++ = 0x80 | (*lpt&0x3f);
+ }
+ ++lpt;
+ }
+ *pt = '\0';
+return( utf8buf );
+}
+
+char *latin1_2_utf8_copy(const char *lbuf) {
+ int len;
+ char *utf8buf;
+
+ if ( lbuf==NULL )
+return( NULL );
+
+ len = strlen(lbuf);
+ utf8buf = (char *) malloc(2*len+1);
+return( latin1_2_utf8_strcpy(utf8buf,lbuf));
+}
+
+int32 utf8_ildb(const char **_text) {
+ int32 val= -1;
+ int ch;
+ const uint8 *text = (const uint8 *) *_text;
+ /* Increment and load character */
+
+ if ( text==NULL )
+ return( val );
+ else if ( (ch = *text++)<0x80 ) {
+ val = ch;
+ } else if ( ch<=0xbf ) {
+ /* error */
+ } else if ( ch<=0xdf ) {
+ if ( *text>=0x80 && *text<0xc0 )
+ val = ((ch&0x1f)<<6) | (*text++&0x3f);
+ } else if ( ch<=0xef ) {
+ if ( *text>=0x80 && *text<0xc0 && text[1]>=0x80 && text[1]<0xc0 ) {
+ val = ((ch&0xf)<<12) | ((text[0]&0x3f)<<6) | (text[1]&0x3f);
+ text += 2;
+ }
+ } else {
+ int w = ( ((ch&0x7)<<2) | ((text[0]&0x30)>>4) )-1, w2;
+ w = (w<<6) | ((text[0]&0xf)<<2) | ((text[1]&0x30)>>4);
+ w2 = ((text[1]&0xf)<<6) | (text[2]&0x3f);
+ val = w*0x400 + w2 + 0x10000;
+ if ( *text<0x80 || text[1]<0x80 || text[2]<0x80 ||
+ *text>=0xc0 || text[1]>=0xc0 || text[2]>=0xc0 )
+ val = -1;
+ else
+ text += 3;
+ }
+ *_text = (const char *) text;
+return( val );
+}
+
+char *utf8_idpb(char *utf8_text,uint32 ch,int flags) {
+/* Increment and deposit character, no '\0' appended */
+/* NOTE: Unicode only needs range of 17x65535 values */
+/* and strings must be long enough to hold +4 chars. */
+/* ISO/IEC 10646 description of UTF8 allows encoding */
+/* character values up to U+7FFFFFFF before RFC3629. */
+
+ if ( ch>0x7fffffff || \
+ (!(flags&UTF8IDPB_OLDLIMIT) && ((ch>=0xd800 && ch<=0xdfff) || ch>=17*65536)) )
+ return( 0 ); /* Error, ch is out of range */
+
+ if ( (flags&(UTF8IDPB_UCS2|UTF8IDPB_UTF16|UTF8IDPB_UTF32)) ) {
+ if ( (flags&UTF8IDPB_UCS2) && ch>0xffff )
+ return( 0 ); /* Error, ch is out of range */
+ if ( (flags&UTF8IDPB_UTF32) ) {
+ *utf8_text++ = ((ch>>24)&0xff);
+ *utf8_text++ = ((ch>>16)&0xff);
+ ch &= 0xffff;
+ }
+ if ( ch>0xffff ) {
+ /* ...here if a utf16 encoded value */
+ unsigned long us;
+ ch -= 0x10000;
+ us = (ch>>10)+0xd800;
+ *utf8_text++ = us>>8;
+ *utf8_text++ = us&0xff;
+ ch = (ch&0x3ff)+0xdc00;
+ }
+ *utf8_text++ = ch>>8;
+ ch &= 0xff;
+ } else if ( ch>127 || (ch==0 && (flags&UTF8IDPB_NOZERO)) ) {
+ if ( ch<=0x7ff )
+ /* ch>=0x80 && ch<=0x7ff */
+ *utf8_text++ = 0xc0 | (ch>>6);
+ else {
+ if ( ch<=0xffff )
+ /* ch>=0x800 && ch<=0xffff */
+ *utf8_text++ = 0xe0 | (ch>>12);
+ else {
+ if ( ch<=0x1fffff )
+ /* ch>=0x10000 && ch<=0x1fffff */
+ *utf8_text++ = 0xf0 | (ch>>18);
+ else {
+ if ( ch<=0x3ffffff )
+ /* ch>=0x200000 && ch<=0x3ffffff */
+ *utf8_text++ = 0xf8 | (ch>>24);
+ else {
+ /* ch>=0x4000000 && ch<=0x7fffffff */
+ *utf8_text++ = 0xfc | (ch>>30);
+ *utf8_text++ = 0x80 | ((ch>>24)&0x3f);
+ }
+ *utf8_text++ = 0x80 | ((ch>>18)&0x3f);
+ }
+ *utf8_text++ = 0x80 | ((ch>>12)&0x3f);
+ }
+ *utf8_text++ = 0x80 | ((ch>>6)&0x3f);
+ }
+ ch = 0x80 | (ch&0x3f);
+ }
+ *utf8_text++ = ch;
+ return( utf8_text );
+}
+
+int utf8_valid(const char *str) {
+ /* Is this a valid utf8 string? */
+ int ch;
+
+ while ( (ch=utf8_ildb(&str))!='\0' )
+ if ( ch==-1 )
+return( false );
+
+return( true );
+}
+
+long utf82u_strlen(const char *utf8_str) {
+/* Count how many shorts needed to represent in UCS2 */
+ int32 ch;
+ long len = 0;
+
+ while ( (ch = utf8_ildb(&utf8_str))>0 && ++len>0 )
+ if ( ch>=0x10000 )
+ ++len;
+ return( len );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/utype.c b/dviware/dvisvgm/libs/ff-woff/fontforge/utype.c
new file mode 100644
index 0000000000..a438d4536a
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/utype.c
@@ -0,0 +1,24592 @@
+/* Copyright: 2001 George Williams */
+/* License: BSD-3-clause */
+/* Contributions: Werner Lemberg, Khaled Hosny, Joe Da Silva */
+
+#include "utype.h"
+
+/* This file was generated using the program 'makeutype' */
+
+const unsigned short ____tolower[]= { 0,
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, /* 0x0000 */
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+ 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, /* 0x0040 */
+ 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007a, 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, /* 0x0080 */
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+ 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, /* 0x00c0 */
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df,
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff,
+ 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, /* 0x0100 */
+ 0x0109, 0x0109, 0x010b, 0x010b, 0x010d, 0x010d, 0x010f, 0x010f,
+ 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
+ 0x0119, 0x0119, 0x011b, 0x011b, 0x011d, 0x011d, 0x011f, 0x011f,
+ 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
+ 0x0129, 0x0129, 0x012b, 0x012b, 0x012d, 0x012d, 0x012f, 0x012f,
+ 0x0069, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137,
+ 0x0138, 0x013a, 0x013a, 0x013c, 0x013c, 0x013e, 0x013e, 0x0140,
+ 0x0140, 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, /* 0x0140 */
+ 0x0148, 0x0149, 0x014b, 0x014b, 0x014d, 0x014d, 0x014f, 0x014f,
+ 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157,
+ 0x0159, 0x0159, 0x015b, 0x015b, 0x015d, 0x015d, 0x015f, 0x015f,
+ 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167,
+ 0x0169, 0x0169, 0x016b, 0x016b, 0x016d, 0x016d, 0x016f, 0x016f,
+ 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177,
+ 0x00ff, 0x017a, 0x017a, 0x017c, 0x017c, 0x017e, 0x017e, 0x017f,
+ 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, /* 0x0180 */
+ 0x0188, 0x0256, 0x0257, 0x018c, 0x018c, 0x018d, 0x01dd, 0x0259,
+ 0x025b, 0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268,
+ 0x0199, 0x0199, 0x019a, 0x019b, 0x026f, 0x0272, 0x019e, 0x0275,
+ 0x01a1, 0x01a1, 0x01a3, 0x01a3, 0x01a5, 0x01a5, 0x0280, 0x01a8,
+ 0x01a8, 0x0283, 0x01aa, 0x01ab, 0x01ad, 0x01ad, 0x0288, 0x01b0,
+ 0x01b0, 0x028a, 0x028b, 0x01b4, 0x01b4, 0x01b6, 0x01b6, 0x0292,
+ 0x01b9, 0x01b9, 0x01ba, 0x01bb, 0x01bd, 0x01bd, 0x01be, 0x01bf,
+ 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c6, 0x01c6, 0x01c6, 0x01c9, /* 0x01c0 */
+ 0x01c9, 0x01c9, 0x01cc, 0x01cc, 0x01cc, 0x01ce, 0x01ce, 0x01d0,
+ 0x01d0, 0x01d2, 0x01d2, 0x01d4, 0x01d4, 0x01d6, 0x01d6, 0x01d8,
+ 0x01d8, 0x01da, 0x01da, 0x01dc, 0x01dc, 0x01dd, 0x01df, 0x01df,
+ 0x01e1, 0x01e1, 0x01e3, 0x01e3, 0x01e5, 0x01e5, 0x01e7, 0x01e7,
+ 0x01e9, 0x01e9, 0x01eb, 0x01eb, 0x01ed, 0x01ed, 0x01ef, 0x01ef,
+ 0x01f0, 0x01f3, 0x01f3, 0x01f3, 0x01f5, 0x01f5, 0x0195, 0x01bf,
+ 0x01f9, 0x01f9, 0x01fb, 0x01fb, 0x01fd, 0x01fd, 0x01ff, 0x01ff,
+ 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, /* 0x0200 */
+ 0x0209, 0x0209, 0x020b, 0x020b, 0x020d, 0x020d, 0x020f, 0x020f,
+ 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217,
+ 0x0219, 0x0219, 0x021b, 0x021b, 0x021d, 0x021d, 0x021f, 0x021f,
+ 0x019e, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227,
+ 0x0229, 0x0229, 0x022b, 0x022b, 0x022d, 0x022d, 0x022f, 0x022f,
+ 0x0231, 0x0231, 0x0233, 0x0233, 0x0234, 0x0235, 0x0236, 0x0237,
+ 0x0238, 0x0239, 0x2c65, 0x023c, 0x023c, 0x019a, 0x2c66, 0x023f,
+ 0x0240, 0x0242, 0x0242, 0x0180, 0x0289, 0x028c, 0x0247, 0x0247, /* 0x0240 */
+ 0x0249, 0x0249, 0x024b, 0x024b, 0x024d, 0x024d, 0x024f, 0x024f,
+ 0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256, 0x0257,
+ 0x0258, 0x0259, 0x025a, 0x025b, 0x025c, 0x025d, 0x025e, 0x025f,
+ 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0267,
+ 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, 0x026f,
+ 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275, 0x0276, 0x0277,
+ 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x027d, 0x027e, 0x027f,
+ 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, /* 0x0280 */
+ 0x0288, 0x0289, 0x028a, 0x028b, 0x028c, 0x028d, 0x028e, 0x028f,
+ 0x0290, 0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297,
+ 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f,
+ 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7,
+ 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad, 0x02ae, 0x02af,
+ 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7,
+ 0x02b8, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf,
+ 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, /* 0x02c0 */
+ 0x02c8, 0x02c9, 0x02ca, 0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf,
+ 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7,
+ 0x02d8, 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df,
+ 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7,
+ 0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef,
+ 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7,
+ 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff,
+ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, /* 0x0300 */
+ 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f,
+ 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317,
+ 0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f,
+ 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327,
+ 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f,
+ 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337,
+ 0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f,
+ 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345, 0x0346, 0x0347, /* 0x0340 */
+ 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f,
+ 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357,
+ 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f,
+ 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367,
+ 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f,
+ 0x0371, 0x0371, 0x0373, 0x0373, 0x0374, 0x0375, 0x0377, 0x0377,
+ 0x0000, 0x0000, 0x037a, 0x037b, 0x037c, 0x037d, 0x037e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0384, 0x0385, 0x03ac, 0x0387, /* 0x0380 */
+ 0x03ad, 0x03ae, 0x03af, 0x0000, 0x03cc, 0x0000, 0x03cd, 0x03ce,
+ 0x0390, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
+ 0x03c0, 0x03c1, 0x0000, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
+ 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03ac, 0x03ad, 0x03ae, 0x03af,
+ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
+ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, /* 0x03c0 */
+ 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x03d7,
+ 0x03d0, 0x03d1, 0x03d2, 0x03d3, 0x03d4, 0x03d5, 0x03d6, 0x03d7,
+ 0x03d9, 0x03d9, 0x03db, 0x03db, 0x03dd, 0x03dd, 0x03df, 0x03df,
+ 0x03e1, 0x03e1, 0x03e3, 0x03e3, 0x03e5, 0x03e5, 0x03e7, 0x03e7,
+ 0x03e9, 0x03e9, 0x03eb, 0x03eb, 0x03ed, 0x03ed, 0x03ef, 0x03ef,
+ 0x03f0, 0x03f1, 0x03f2, 0x03f3, 0x03b8, 0x03f5, 0x03f6, 0x03f8,
+ 0x03f8, 0x03f2, 0x03fb, 0x03fb, 0x03fc, 0x037b, 0x037c, 0x037d,
+ 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x0400 */
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, /* 0x0440 */
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+ 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f,
+ 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467,
+ 0x0469, 0x0469, 0x046b, 0x046b, 0x046d, 0x046d, 0x046f, 0x046f,
+ 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477,
+ 0x0479, 0x0479, 0x047b, 0x047b, 0x047d, 0x047d, 0x047f, 0x047f,
+ 0x0481, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, /* 0x0480 */
+ 0x0488, 0x0489, 0x048b, 0x048b, 0x048d, 0x048d, 0x048f, 0x048f,
+ 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497,
+ 0x0499, 0x0499, 0x049b, 0x049b, 0x049d, 0x049d, 0x049f, 0x049f,
+ 0x04a1, 0x04a1, 0x04a3, 0x04a3, 0x04a5, 0x04a5, 0x04a7, 0x04a7,
+ 0x04a9, 0x04a9, 0x04ab, 0x04ab, 0x04ad, 0x04ad, 0x04af, 0x04af,
+ 0x04b1, 0x04b1, 0x04b3, 0x04b3, 0x04b5, 0x04b5, 0x04b7, 0x04b7,
+ 0x04b9, 0x04b9, 0x04bb, 0x04bb, 0x04bd, 0x04bd, 0x04bf, 0x04bf,
+ 0x04cf, 0x04c2, 0x04c2, 0x04c4, 0x04c4, 0x04c6, 0x04c6, 0x04c8, /* 0x04c0 */
+ 0x04c8, 0x04ca, 0x04ca, 0x04cc, 0x04cc, 0x04ce, 0x04ce, 0x04cf,
+ 0x04d1, 0x04d1, 0x04d3, 0x04d3, 0x04d5, 0x04d5, 0x04d7, 0x04d7,
+ 0x04d9, 0x04d9, 0x04db, 0x04db, 0x04dd, 0x04dd, 0x04df, 0x04df,
+ 0x04e1, 0x04e1, 0x04e3, 0x04e3, 0x04e5, 0x04e5, 0x04e7, 0x04e7,
+ 0x04e9, 0x04e9, 0x04eb, 0x04eb, 0x04ed, 0x04ed, 0x04ef, 0x04ef,
+ 0x04f1, 0x04f1, 0x04f3, 0x04f3, 0x04f5, 0x04f5, 0x04f7, 0x04f7,
+ 0x04f9, 0x04f9, 0x04fb, 0x04fb, 0x04fd, 0x04fd, 0x04ff, 0x04ff,
+ 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507, /* 0x0500 */
+ 0x0509, 0x0509, 0x050b, 0x050b, 0x050d, 0x050d, 0x050f, 0x050f,
+ 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, 0x0517, 0x0517,
+ 0x0519, 0x0519, 0x051b, 0x051b, 0x051d, 0x051d, 0x051f, 0x051f,
+ 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, 0x0527, 0x0527,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567,
+ 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f,
+ 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, /* 0x0540 */
+ 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f,
+ 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0000,
+ 0x0000, 0x0559, 0x055a, 0x055b, 0x055c, 0x055d, 0x055e, 0x055f,
+ 0x0000, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567,
+ 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f,
+ 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577,
+ 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f,
+ 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, /* 0x0580 */
+ 0x0000, 0x0589, 0x058a, 0x0000, 0x0000, 0x0000, 0x0000, 0x058f,
+ 0x0000, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597,
+ 0x0598, 0x0599, 0x059a, 0x059b, 0x059c, 0x059d, 0x059e, 0x059f,
+ 0x05a0, 0x05a1, 0x05a2, 0x05a3, 0x05a4, 0x05a5, 0x05a6, 0x05a7,
+ 0x05a8, 0x05a9, 0x05aa, 0x05ab, 0x05ac, 0x05ad, 0x05ae, 0x05af,
+ 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7,
+ 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
+ 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, /* 0x05c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0600, 0x0601, 0x0602, 0x0603, 0x0604, 0x0000, 0x0606, 0x0607, /* 0x0600 */
+ 0x0608, 0x0609, 0x060a, 0x060b, 0x060c, 0x060d, 0x060e, 0x060f,
+ 0x0610, 0x0611, 0x0612, 0x0613, 0x0614, 0x0615, 0x0616, 0x0617,
+ 0x0618, 0x0619, 0x061a, 0x061b, 0x061c, 0x0000, 0x061e, 0x061f,
+ 0x0620, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
+ 0x0638, 0x0639, 0x063a, 0x063b, 0x063c, 0x063d, 0x063e, 0x063f,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0x0640 */
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
+ 0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, 0x0656, 0x0657,
+ 0x0658, 0x0659, 0x065a, 0x065b, 0x065c, 0x065d, 0x065e, 0x065f,
+ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667,
+ 0x0668, 0x0669, 0x066a, 0x066b, 0x066c, 0x066d, 0x066e, 0x066f,
+ 0x0670, 0x0671, 0x0672, 0x0673, 0x0674, 0x0675, 0x0676, 0x0677,
+ 0x0678, 0x0679, 0x067a, 0x067b, 0x067c, 0x067d, 0x067e, 0x067f,
+ 0x0680, 0x0681, 0x0682, 0x0683, 0x0684, 0x0685, 0x0686, 0x0687, /* 0x0680 */
+ 0x0688, 0x0689, 0x068a, 0x068b, 0x068c, 0x068d, 0x068e, 0x068f,
+ 0x0690, 0x0691, 0x0692, 0x0693, 0x0694, 0x0695, 0x0696, 0x0697,
+ 0x0698, 0x0699, 0x069a, 0x069b, 0x069c, 0x069d, 0x069e, 0x069f,
+ 0x06a0, 0x06a1, 0x06a2, 0x06a3, 0x06a4, 0x06a5, 0x06a6, 0x06a7,
+ 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ad, 0x06ae, 0x06af,
+ 0x06b0, 0x06b1, 0x06b2, 0x06b3, 0x06b4, 0x06b5, 0x06b6, 0x06b7,
+ 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc, 0x06bd, 0x06be, 0x06bf,
+ 0x06c0, 0x06c1, 0x06c2, 0x06c3, 0x06c4, 0x06c5, 0x06c6, 0x06c7, /* 0x06c0 */
+ 0x06c8, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce, 0x06cf,
+ 0x06d0, 0x06d1, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06d6, 0x06d7,
+ 0x06d8, 0x06d9, 0x06da, 0x06db, 0x06dc, 0x06dd, 0x06de, 0x06df,
+ 0x06e0, 0x06e1, 0x06e2, 0x06e3, 0x06e4, 0x06e5, 0x06e6, 0x06e7,
+ 0x06e8, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee, 0x06ef,
+ 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7,
+ 0x06f8, 0x06f9, 0x06fa, 0x06fb, 0x06fc, 0x06fd, 0x06fe, 0x06ff,
+ 0x0700, 0x0701, 0x0702, 0x0703, 0x0704, 0x0705, 0x0706, 0x0707, /* 0x0700 */
+ 0x0708, 0x0709, 0x070a, 0x070b, 0x070c, 0x070d, 0x0000, 0x070f,
+ 0x0710, 0x0711, 0x0712, 0x0713, 0x0714, 0x0715, 0x0716, 0x0717,
+ 0x0718, 0x0719, 0x071a, 0x071b, 0x071c, 0x071d, 0x071e, 0x071f,
+ 0x0720, 0x0721, 0x0722, 0x0723, 0x0724, 0x0725, 0x0726, 0x0727,
+ 0x0728, 0x0729, 0x072a, 0x072b, 0x072c, 0x072d, 0x072e, 0x072f,
+ 0x0730, 0x0731, 0x0732, 0x0733, 0x0734, 0x0735, 0x0736, 0x0737,
+ 0x0738, 0x0739, 0x073a, 0x073b, 0x073c, 0x073d, 0x073e, 0x073f,
+ 0x0740, 0x0741, 0x0742, 0x0743, 0x0744, 0x0745, 0x0746, 0x0747, /* 0x0740 */
+ 0x0748, 0x0749, 0x074a, 0x0000, 0x0000, 0x074d, 0x074e, 0x074f,
+ 0x0750, 0x0751, 0x0752, 0x0753, 0x0754, 0x0755, 0x0756, 0x0757,
+ 0x0758, 0x0759, 0x075a, 0x075b, 0x075c, 0x075d, 0x075e, 0x075f,
+ 0x0760, 0x0761, 0x0762, 0x0763, 0x0764, 0x0765, 0x0766, 0x0767,
+ 0x0768, 0x0769, 0x076a, 0x076b, 0x076c, 0x076d, 0x076e, 0x076f,
+ 0x0770, 0x0771, 0x0772, 0x0773, 0x0774, 0x0775, 0x0776, 0x0777,
+ 0x0778, 0x0779, 0x077a, 0x077b, 0x077c, 0x077d, 0x077e, 0x077f,
+ 0x0780, 0x0781, 0x0782, 0x0783, 0x0784, 0x0785, 0x0786, 0x0787, /* 0x0780 */
+ 0x0788, 0x0789, 0x078a, 0x078b, 0x078c, 0x078d, 0x078e, 0x078f,
+ 0x0790, 0x0791, 0x0792, 0x0793, 0x0794, 0x0795, 0x0796, 0x0797,
+ 0x0798, 0x0799, 0x079a, 0x079b, 0x079c, 0x079d, 0x079e, 0x079f,
+ 0x07a0, 0x07a1, 0x07a2, 0x07a3, 0x07a4, 0x07a5, 0x07a6, 0x07a7,
+ 0x07a8, 0x07a9, 0x07aa, 0x07ab, 0x07ac, 0x07ad, 0x07ae, 0x07af,
+ 0x07b0, 0x07b1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x07c0, 0x07c1, 0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, /* 0x07c0 */
+ 0x07c8, 0x07c9, 0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf,
+ 0x07d0, 0x07d1, 0x07d2, 0x07d3, 0x07d4, 0x07d5, 0x07d6, 0x07d7,
+ 0x07d8, 0x07d9, 0x07da, 0x07db, 0x07dc, 0x07dd, 0x07de, 0x07df,
+ 0x07e0, 0x07e1, 0x07e2, 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7,
+ 0x07e8, 0x07e9, 0x07ea, 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef,
+ 0x07f0, 0x07f1, 0x07f2, 0x07f3, 0x07f4, 0x07f5, 0x07f6, 0x07f7,
+ 0x07f8, 0x07f9, 0x07fa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0800, 0x0801, 0x0802, 0x0803, 0x0804, 0x0805, 0x0806, 0x0807, /* 0x0800 */
+ 0x0808, 0x0809, 0x080a, 0x080b, 0x080c, 0x080d, 0x080e, 0x080f,
+ 0x0810, 0x0811, 0x0812, 0x0813, 0x0814, 0x0815, 0x0816, 0x0817,
+ 0x0818, 0x0819, 0x081a, 0x081b, 0x081c, 0x081d, 0x081e, 0x081f,
+ 0x0820, 0x0821, 0x0822, 0x0823, 0x0824, 0x0825, 0x0826, 0x0827,
+ 0x0828, 0x0829, 0x082a, 0x082b, 0x082c, 0x082d, 0x0000, 0x0000,
+ 0x0830, 0x0831, 0x0832, 0x0833, 0x0834, 0x0835, 0x0836, 0x0837,
+ 0x0838, 0x0839, 0x083a, 0x083b, 0x083c, 0x083d, 0x083e, 0x0000,
+ 0x0840, 0x0841, 0x0842, 0x0843, 0x0844, 0x0845, 0x0846, 0x0847, /* 0x0840 */
+ 0x0848, 0x0849, 0x084a, 0x084b, 0x084c, 0x084d, 0x084e, 0x084f,
+ 0x0850, 0x0851, 0x0852, 0x0853, 0x0854, 0x0855, 0x0856, 0x0857,
+ 0x0858, 0x0859, 0x085a, 0x085b, 0x0000, 0x0000, 0x085e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x08a0, 0x0000, 0x08a2, 0x08a3, 0x08a4, 0x08a5, 0x08a6, 0x08a7,
+ 0x08a8, 0x08a9, 0x08aa, 0x08ab, 0x08ac, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x08e4, 0x08e5, 0x08e6, 0x08e7,
+ 0x08e8, 0x08e9, 0x08ea, 0x08eb, 0x08ec, 0x08ed, 0x08ee, 0x08ef,
+ 0x08f0, 0x08f1, 0x08f2, 0x08f3, 0x08f4, 0x08f5, 0x08f6, 0x08f7,
+ 0x08f8, 0x08f9, 0x08fa, 0x08fb, 0x08fc, 0x08fd, 0x08fe, 0x0000,
+ 0x0900, 0x0901, 0x0902, 0x0903, 0x0904, 0x0905, 0x0906, 0x0907, /* 0x0900 */
+ 0x0908, 0x0909, 0x090a, 0x090b, 0x090c, 0x090d, 0x090e, 0x090f,
+ 0x0910, 0x0911, 0x0912, 0x0913, 0x0914, 0x0915, 0x0916, 0x0917,
+ 0x0918, 0x0919, 0x091a, 0x091b, 0x091c, 0x091d, 0x091e, 0x091f,
+ 0x0920, 0x0921, 0x0922, 0x0923, 0x0924, 0x0925, 0x0926, 0x0927,
+ 0x0928, 0x0929, 0x092a, 0x092b, 0x092c, 0x092d, 0x092e, 0x092f,
+ 0x0930, 0x0931, 0x0932, 0x0933, 0x0934, 0x0935, 0x0936, 0x0937,
+ 0x0938, 0x0939, 0x093a, 0x093b, 0x093c, 0x093d, 0x093e, 0x093f,
+ 0x0940, 0x0941, 0x0942, 0x0943, 0x0944, 0x0945, 0x0946, 0x0947, /* 0x0940 */
+ 0x0948, 0x0949, 0x094a, 0x094b, 0x094c, 0x094d, 0x094e, 0x094f,
+ 0x0950, 0x0951, 0x0952, 0x0953, 0x0954, 0x0955, 0x0956, 0x0957,
+ 0x0958, 0x0959, 0x095a, 0x095b, 0x095c, 0x095d, 0x095e, 0x095f,
+ 0x0960, 0x0961, 0x0962, 0x0963, 0x0964, 0x0965, 0x0966, 0x0967,
+ 0x0968, 0x0969, 0x096a, 0x096b, 0x096c, 0x096d, 0x096e, 0x096f,
+ 0x0970, 0x0971, 0x0972, 0x0973, 0x0974, 0x0975, 0x0976, 0x0977,
+ 0x0000, 0x0979, 0x097a, 0x097b, 0x097c, 0x097d, 0x097e, 0x097f,
+ 0x0000, 0x0981, 0x0982, 0x0983, 0x0000, 0x0985, 0x0986, 0x0987, /* 0x0980 */
+ 0x0988, 0x0989, 0x098a, 0x098b, 0x098c, 0x0000, 0x0000, 0x098f,
+ 0x0990, 0x0000, 0x0000, 0x0993, 0x0994, 0x0995, 0x0996, 0x0997,
+ 0x0998, 0x0999, 0x099a, 0x099b, 0x099c, 0x099d, 0x099e, 0x099f,
+ 0x09a0, 0x09a1, 0x09a2, 0x09a3, 0x09a4, 0x09a5, 0x09a6, 0x09a7,
+ 0x09a8, 0x0000, 0x09aa, 0x09ab, 0x09ac, 0x09ad, 0x09ae, 0x09af,
+ 0x09b0, 0x0000, 0x09b2, 0x0000, 0x0000, 0x0000, 0x09b6, 0x09b7,
+ 0x09b8, 0x09b9, 0x0000, 0x0000, 0x09bc, 0x09bd, 0x09be, 0x09bf,
+ 0x09c0, 0x09c1, 0x09c2, 0x09c3, 0x09c4, 0x0000, 0x0000, 0x09c7, /* 0x09c0 */
+ 0x09c8, 0x0000, 0x0000, 0x09cb, 0x09cc, 0x09cd, 0x09ce, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09d7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x09dc, 0x09dd, 0x0000, 0x09df,
+ 0x09e0, 0x09e1, 0x09e2, 0x09e3, 0x0000, 0x0000, 0x09e6, 0x09e7,
+ 0x09e8, 0x09e9, 0x09ea, 0x09eb, 0x09ec, 0x09ed, 0x09ee, 0x09ef,
+ 0x09f0, 0x09f1, 0x09f2, 0x09f3, 0x09f4, 0x09f5, 0x09f6, 0x09f7,
+ 0x09f8, 0x09f9, 0x09fa, 0x09fb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0a01, 0x0a02, 0x0a03, 0x0000, 0x0a05, 0x0a06, 0x0a07, /* 0x0a00 */
+ 0x0a08, 0x0a09, 0x0a0a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a0f,
+ 0x0a10, 0x0000, 0x0000, 0x0a13, 0x0a14, 0x0a15, 0x0a16, 0x0a17,
+ 0x0a18, 0x0a19, 0x0a1a, 0x0a1b, 0x0a1c, 0x0a1d, 0x0a1e, 0x0a1f,
+ 0x0a20, 0x0a21, 0x0a22, 0x0a23, 0x0a24, 0x0a25, 0x0a26, 0x0a27,
+ 0x0a28, 0x0000, 0x0a2a, 0x0a2b, 0x0a2c, 0x0a2d, 0x0a2e, 0x0a2f,
+ 0x0a30, 0x0000, 0x0a32, 0x0a33, 0x0000, 0x0a35, 0x0a36, 0x0000,
+ 0x0a38, 0x0a39, 0x0000, 0x0000, 0x0a3c, 0x0000, 0x0a3e, 0x0a3f,
+ 0x0a40, 0x0a41, 0x0a42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a47, /* 0x0a40 */
+ 0x0a48, 0x0000, 0x0000, 0x0a4b, 0x0a4c, 0x0a4d, 0x0000, 0x0000,
+ 0x0000, 0x0a51, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0a59, 0x0a5a, 0x0a5b, 0x0a5c, 0x0000, 0x0a5e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a66, 0x0a67,
+ 0x0a68, 0x0a69, 0x0a6a, 0x0a6b, 0x0a6c, 0x0a6d, 0x0a6e, 0x0a6f,
+ 0x0a70, 0x0a71, 0x0a72, 0x0a73, 0x0a74, 0x0a75, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0a81, 0x0a82, 0x0a83, 0x0000, 0x0a85, 0x0a86, 0x0a87, /* 0x0a80 */
+ 0x0a88, 0x0a89, 0x0a8a, 0x0a8b, 0x0a8c, 0x0a8d, 0x0000, 0x0a8f,
+ 0x0a90, 0x0a91, 0x0000, 0x0a93, 0x0a94, 0x0a95, 0x0a96, 0x0a97,
+ 0x0a98, 0x0a99, 0x0a9a, 0x0a9b, 0x0a9c, 0x0a9d, 0x0a9e, 0x0a9f,
+ 0x0aa0, 0x0aa1, 0x0aa2, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7,
+ 0x0aa8, 0x0000, 0x0aaa, 0x0aab, 0x0aac, 0x0aad, 0x0aae, 0x0aaf,
+ 0x0ab0, 0x0000, 0x0ab2, 0x0ab3, 0x0000, 0x0ab5, 0x0ab6, 0x0ab7,
+ 0x0ab8, 0x0ab9, 0x0000, 0x0000, 0x0abc, 0x0abd, 0x0abe, 0x0abf,
+ 0x0ac0, 0x0ac1, 0x0ac2, 0x0ac3, 0x0ac4, 0x0ac5, 0x0000, 0x0ac7, /* 0x0ac0 */
+ 0x0ac8, 0x0ac9, 0x0000, 0x0acb, 0x0acc, 0x0acd, 0x0000, 0x0000,
+ 0x0ad0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0ae0, 0x0ae1, 0x0ae2, 0x0ae3, 0x0000, 0x0000, 0x0ae6, 0x0ae7,
+ 0x0ae8, 0x0ae9, 0x0aea, 0x0aeb, 0x0aec, 0x0aed, 0x0aee, 0x0aef,
+ 0x0af0, 0x0af1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0b01, 0x0b02, 0x0b03, 0x0000, 0x0b05, 0x0b06, 0x0b07, /* 0x0b00 */
+ 0x0b08, 0x0b09, 0x0b0a, 0x0b0b, 0x0b0c, 0x0000, 0x0000, 0x0b0f,
+ 0x0b10, 0x0000, 0x0000, 0x0b13, 0x0b14, 0x0b15, 0x0b16, 0x0b17,
+ 0x0b18, 0x0b19, 0x0b1a, 0x0b1b, 0x0b1c, 0x0b1d, 0x0b1e, 0x0b1f,
+ 0x0b20, 0x0b21, 0x0b22, 0x0b23, 0x0b24, 0x0b25, 0x0b26, 0x0b27,
+ 0x0b28, 0x0000, 0x0b2a, 0x0b2b, 0x0b2c, 0x0b2d, 0x0b2e, 0x0b2f,
+ 0x0b30, 0x0000, 0x0b32, 0x0b33, 0x0000, 0x0b35, 0x0b36, 0x0b37,
+ 0x0b38, 0x0b39, 0x0000, 0x0000, 0x0b3c, 0x0b3d, 0x0b3e, 0x0b3f,
+ 0x0b40, 0x0b41, 0x0b42, 0x0b43, 0x0b44, 0x0000, 0x0000, 0x0b47, /* 0x0b40 */
+ 0x0b48, 0x0000, 0x0000, 0x0b4b, 0x0b4c, 0x0b4d, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0b56, 0x0b57,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0b5c, 0x0b5d, 0x0000, 0x0b5f,
+ 0x0b60, 0x0b61, 0x0b62, 0x0b63, 0x0000, 0x0000, 0x0b66, 0x0b67,
+ 0x0b68, 0x0b69, 0x0b6a, 0x0b6b, 0x0b6c, 0x0b6d, 0x0b6e, 0x0b6f,
+ 0x0b70, 0x0b71, 0x0b72, 0x0b73, 0x0b74, 0x0b75, 0x0b76, 0x0b77,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0b82, 0x0b83, 0x0000, 0x0b85, 0x0b86, 0x0b87, /* 0x0b80 */
+ 0x0b88, 0x0b89, 0x0b8a, 0x0000, 0x0000, 0x0000, 0x0b8e, 0x0b8f,
+ 0x0b90, 0x0000, 0x0b92, 0x0b93, 0x0b94, 0x0b95, 0x0000, 0x0000,
+ 0x0000, 0x0b99, 0x0b9a, 0x0000, 0x0b9c, 0x0000, 0x0b9e, 0x0b9f,
+ 0x0000, 0x0000, 0x0000, 0x0ba3, 0x0ba4, 0x0000, 0x0000, 0x0000,
+ 0x0ba8, 0x0ba9, 0x0baa, 0x0000, 0x0000, 0x0000, 0x0bae, 0x0baf,
+ 0x0bb0, 0x0bb1, 0x0bb2, 0x0bb3, 0x0bb4, 0x0bb5, 0x0bb6, 0x0bb7,
+ 0x0bb8, 0x0bb9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bbe, 0x0bbf,
+ 0x0bc0, 0x0bc1, 0x0bc2, 0x0000, 0x0000, 0x0000, 0x0bc6, 0x0bc7, /* 0x0bc0 */
+ 0x0bc8, 0x0000, 0x0bca, 0x0bcb, 0x0bcc, 0x0bcd, 0x0000, 0x0000,
+ 0x0bd0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0bd7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0be6, 0x0be7,
+ 0x0be8, 0x0be9, 0x0bea, 0x0beb, 0x0bec, 0x0bed, 0x0bee, 0x0bef,
+ 0x0bf0, 0x0bf1, 0x0bf2, 0x0bf3, 0x0bf4, 0x0bf5, 0x0bf6, 0x0bf7,
+ 0x0bf8, 0x0bf9, 0x0bfa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0c01, 0x0c02, 0x0c03, 0x0000, 0x0c05, 0x0c06, 0x0c07, /* 0x0c00 */
+ 0x0c08, 0x0c09, 0x0c0a, 0x0c0b, 0x0c0c, 0x0000, 0x0c0e, 0x0c0f,
+ 0x0c10, 0x0000, 0x0c12, 0x0c13, 0x0c14, 0x0c15, 0x0c16, 0x0c17,
+ 0x0c18, 0x0c19, 0x0c1a, 0x0c1b, 0x0c1c, 0x0c1d, 0x0c1e, 0x0c1f,
+ 0x0c20, 0x0c21, 0x0c22, 0x0c23, 0x0c24, 0x0c25, 0x0c26, 0x0c27,
+ 0x0c28, 0x0000, 0x0c2a, 0x0c2b, 0x0c2c, 0x0c2d, 0x0c2e, 0x0c2f,
+ 0x0c30, 0x0c31, 0x0c32, 0x0c33, 0x0000, 0x0c35, 0x0c36, 0x0c37,
+ 0x0c38, 0x0c39, 0x0000, 0x0000, 0x0000, 0x0c3d, 0x0c3e, 0x0c3f,
+ 0x0c40, 0x0c41, 0x0c42, 0x0c43, 0x0c44, 0x0000, 0x0c46, 0x0c47, /* 0x0c40 */
+ 0x0c48, 0x0000, 0x0c4a, 0x0c4b, 0x0c4c, 0x0c4d, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0c55, 0x0c56, 0x0000,
+ 0x0c58, 0x0c59, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0c60, 0x0c61, 0x0c62, 0x0c63, 0x0000, 0x0000, 0x0c66, 0x0c67,
+ 0x0c68, 0x0c69, 0x0c6a, 0x0c6b, 0x0c6c, 0x0c6d, 0x0c6e, 0x0c6f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0c78, 0x0c79, 0x0c7a, 0x0c7b, 0x0c7c, 0x0c7d, 0x0c7e, 0x0c7f,
+ 0x0000, 0x0000, 0x0c82, 0x0c83, 0x0000, 0x0c85, 0x0c86, 0x0c87, /* 0x0c80 */
+ 0x0c88, 0x0c89, 0x0c8a, 0x0c8b, 0x0c8c, 0x0000, 0x0c8e, 0x0c8f,
+ 0x0c90, 0x0000, 0x0c92, 0x0c93, 0x0c94, 0x0c95, 0x0c96, 0x0c97,
+ 0x0c98, 0x0c99, 0x0c9a, 0x0c9b, 0x0c9c, 0x0c9d, 0x0c9e, 0x0c9f,
+ 0x0ca0, 0x0ca1, 0x0ca2, 0x0ca3, 0x0ca4, 0x0ca5, 0x0ca6, 0x0ca7,
+ 0x0ca8, 0x0000, 0x0caa, 0x0cab, 0x0cac, 0x0cad, 0x0cae, 0x0caf,
+ 0x0cb0, 0x0cb1, 0x0cb2, 0x0cb3, 0x0000, 0x0cb5, 0x0cb6, 0x0cb7,
+ 0x0cb8, 0x0cb9, 0x0000, 0x0000, 0x0cbc, 0x0cbd, 0x0cbe, 0x0cbf,
+ 0x0cc0, 0x0cc1, 0x0cc2, 0x0cc3, 0x0cc4, 0x0000, 0x0cc6, 0x0cc7, /* 0x0cc0 */
+ 0x0cc8, 0x0000, 0x0cca, 0x0ccb, 0x0ccc, 0x0ccd, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cd5, 0x0cd6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0cde, 0x0000,
+ 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0000, 0x0000, 0x0ce6, 0x0ce7,
+ 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced, 0x0cee, 0x0cef,
+ 0x0000, 0x0cf1, 0x0cf2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0d02, 0x0d03, 0x0000, 0x0d05, 0x0d06, 0x0d07, /* 0x0d00 */
+ 0x0d08, 0x0d09, 0x0d0a, 0x0d0b, 0x0d0c, 0x0000, 0x0d0e, 0x0d0f,
+ 0x0d10, 0x0000, 0x0d12, 0x0d13, 0x0d14, 0x0d15, 0x0d16, 0x0d17,
+ 0x0d18, 0x0d19, 0x0d1a, 0x0d1b, 0x0d1c, 0x0d1d, 0x0d1e, 0x0d1f,
+ 0x0d20, 0x0d21, 0x0d22, 0x0d23, 0x0d24, 0x0d25, 0x0d26, 0x0d27,
+ 0x0d28, 0x0d29, 0x0d2a, 0x0d2b, 0x0d2c, 0x0d2d, 0x0d2e, 0x0d2f,
+ 0x0d30, 0x0d31, 0x0d32, 0x0d33, 0x0d34, 0x0d35, 0x0d36, 0x0d37,
+ 0x0d38, 0x0d39, 0x0d3a, 0x0000, 0x0000, 0x0d3d, 0x0d3e, 0x0d3f,
+ 0x0d40, 0x0d41, 0x0d42, 0x0d43, 0x0d44, 0x0000, 0x0d46, 0x0d47, /* 0x0d40 */
+ 0x0d48, 0x0000, 0x0d4a, 0x0d4b, 0x0d4c, 0x0d4d, 0x0d4e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d57,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0d60, 0x0d61, 0x0d62, 0x0d63, 0x0000, 0x0000, 0x0d66, 0x0d67,
+ 0x0d68, 0x0d69, 0x0d6a, 0x0d6b, 0x0d6c, 0x0d6d, 0x0d6e, 0x0d6f,
+ 0x0d70, 0x0d71, 0x0d72, 0x0d73, 0x0d74, 0x0d75, 0x0000, 0x0000,
+ 0x0000, 0x0d79, 0x0d7a, 0x0d7b, 0x0d7c, 0x0d7d, 0x0d7e, 0x0d7f,
+ 0x0000, 0x0000, 0x0d82, 0x0d83, 0x0000, 0x0d85, 0x0d86, 0x0d87, /* 0x0d80 */
+ 0x0d88, 0x0d89, 0x0d8a, 0x0d8b, 0x0d8c, 0x0d8d, 0x0d8e, 0x0d8f,
+ 0x0d90, 0x0d91, 0x0d92, 0x0d93, 0x0d94, 0x0d95, 0x0d96, 0x0000,
+ 0x0000, 0x0000, 0x0d9a, 0x0d9b, 0x0d9c, 0x0d9d, 0x0d9e, 0x0d9f,
+ 0x0da0, 0x0da1, 0x0da2, 0x0da3, 0x0da4, 0x0da5, 0x0da6, 0x0da7,
+ 0x0da8, 0x0da9, 0x0daa, 0x0dab, 0x0dac, 0x0dad, 0x0dae, 0x0daf,
+ 0x0db0, 0x0db1, 0x0000, 0x0db3, 0x0db4, 0x0db5, 0x0db6, 0x0db7,
+ 0x0db8, 0x0db9, 0x0dba, 0x0dbb, 0x0000, 0x0dbd, 0x0000, 0x0000,
+ 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, 0x0dc4, 0x0dc5, 0x0dc6, 0x0000, /* 0x0dc0 */
+ 0x0000, 0x0000, 0x0dca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0dcf,
+ 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3, 0x0dd4, 0x0000, 0x0dd6, 0x0000,
+ 0x0dd8, 0x0dd9, 0x0dda, 0x0ddb, 0x0ddc, 0x0ddd, 0x0dde, 0x0ddf,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0df2, 0x0df3, 0x0df4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, /* 0x0e00 */
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
+ 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f,
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, /* 0x0e40 */
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0e81, 0x0e82, 0x0000, 0x0e84, 0x0000, 0x0000, 0x0e87, /* 0x0e80 */
+ 0x0e88, 0x0000, 0x0e8a, 0x0000, 0x0000, 0x0e8d, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0e94, 0x0e95, 0x0e96, 0x0e97,
+ 0x0000, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f,
+ 0x0000, 0x0ea1, 0x0ea2, 0x0ea3, 0x0000, 0x0ea5, 0x0000, 0x0ea7,
+ 0x0000, 0x0000, 0x0eaa, 0x0eab, 0x0000, 0x0ead, 0x0eae, 0x0eaf,
+ 0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7,
+ 0x0eb8, 0x0eb9, 0x0000, 0x0ebb, 0x0ebc, 0x0ebd, 0x0000, 0x0000,
+ 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0000, 0x0ec6, 0x0000, /* 0x0ec0 */
+ 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0x0000, 0x0000,
+ 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
+ 0x0ed8, 0x0ed9, 0x0000, 0x0000, 0x0edc, 0x0edd, 0x0ede, 0x0edf,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0f00, 0x0f01, 0x0f02, 0x0f03, 0x0f04, 0x0f05, 0x0f06, 0x0f07, /* 0x0f00 */
+ 0x0f08, 0x0f09, 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0d, 0x0f0e, 0x0f0f,
+ 0x0f10, 0x0f11, 0x0f12, 0x0f13, 0x0f14, 0x0f15, 0x0f16, 0x0f17,
+ 0x0f18, 0x0f19, 0x0f1a, 0x0f1b, 0x0f1c, 0x0f1d, 0x0f1e, 0x0f1f,
+ 0x0f20, 0x0f21, 0x0f22, 0x0f23, 0x0f24, 0x0f25, 0x0f26, 0x0f27,
+ 0x0f28, 0x0f29, 0x0f2a, 0x0f2b, 0x0f2c, 0x0f2d, 0x0f2e, 0x0f2f,
+ 0x0f30, 0x0f31, 0x0f32, 0x0f33, 0x0f34, 0x0f35, 0x0f36, 0x0f37,
+ 0x0f38, 0x0f39, 0x0f3a, 0x0f3b, 0x0f3c, 0x0f3d, 0x0f3e, 0x0f3f,
+ 0x0f40, 0x0f41, 0x0f42, 0x0f43, 0x0f44, 0x0f45, 0x0f46, 0x0f47, /* 0x0f40 */
+ 0x0000, 0x0f49, 0x0f4a, 0x0f4b, 0x0f4c, 0x0f4d, 0x0f4e, 0x0f4f,
+ 0x0f50, 0x0f51, 0x0f52, 0x0f53, 0x0f54, 0x0f55, 0x0f56, 0x0f57,
+ 0x0f58, 0x0f59, 0x0f5a, 0x0f5b, 0x0f5c, 0x0f5d, 0x0f5e, 0x0f5f,
+ 0x0f60, 0x0f61, 0x0f62, 0x0f63, 0x0f64, 0x0f65, 0x0f66, 0x0f67,
+ 0x0f68, 0x0f69, 0x0f6a, 0x0f6b, 0x0f6c, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0f71, 0x0f72, 0x0f73, 0x0f74, 0x0f75, 0x0f76, 0x0f77,
+ 0x0f78, 0x0f79, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f7e, 0x0f7f,
+ 0x0f80, 0x0f81, 0x0f82, 0x0f83, 0x0f84, 0x0f85, 0x0f86, 0x0f87, /* 0x0f80 */
+ 0x0f88, 0x0f89, 0x0f8a, 0x0f8b, 0x0f8c, 0x0f8d, 0x0f8e, 0x0f8f,
+ 0x0f90, 0x0f91, 0x0f92, 0x0f93, 0x0f94, 0x0f95, 0x0f96, 0x0f97,
+ 0x0000, 0x0f99, 0x0f9a, 0x0f9b, 0x0f9c, 0x0f9d, 0x0f9e, 0x0f9f,
+ 0x0fa0, 0x0fa1, 0x0fa2, 0x0fa3, 0x0fa4, 0x0fa5, 0x0fa6, 0x0fa7,
+ 0x0fa8, 0x0fa9, 0x0faa, 0x0fab, 0x0fac, 0x0fad, 0x0fae, 0x0faf,
+ 0x0fb0, 0x0fb1, 0x0fb2, 0x0fb3, 0x0fb4, 0x0fb5, 0x0fb6, 0x0fb7,
+ 0x0fb8, 0x0fb9, 0x0fba, 0x0fbb, 0x0fbc, 0x0000, 0x0fbe, 0x0fbf,
+ 0x0fc0, 0x0fc1, 0x0fc2, 0x0fc3, 0x0fc4, 0x0fc5, 0x0fc6, 0x0fc7, /* 0x0fc0 */
+ 0x0fc8, 0x0fc9, 0x0fca, 0x0fcb, 0x0fcc, 0x0000, 0x0fce, 0x0fcf,
+ 0x0fd0, 0x0fd1, 0x0fd2, 0x0fd3, 0x0fd4, 0x0fd5, 0x0fd6, 0x0fd7,
+ 0x0fd8, 0x0fd9, 0x0fda, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1005, 0x1006, 0x1007, /* 0x1000 */
+ 0x1008, 0x1009, 0x100a, 0x100b, 0x100c, 0x100d, 0x100e, 0x100f,
+ 0x1010, 0x1011, 0x1012, 0x1013, 0x1014, 0x1015, 0x1016, 0x1017,
+ 0x1018, 0x1019, 0x101a, 0x101b, 0x101c, 0x101d, 0x101e, 0x101f,
+ 0x1020, 0x1021, 0x1022, 0x1023, 0x1024, 0x1025, 0x1026, 0x1027,
+ 0x1028, 0x1029, 0x102a, 0x102b, 0x102c, 0x102d, 0x102e, 0x102f,
+ 0x1030, 0x1031, 0x1032, 0x1033, 0x1034, 0x1035, 0x1036, 0x1037,
+ 0x1038, 0x1039, 0x103a, 0x103b, 0x103c, 0x103d, 0x103e, 0x103f,
+ 0x1040, 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047, /* 0x1040 */
+ 0x1048, 0x1049, 0x104a, 0x104b, 0x104c, 0x104d, 0x104e, 0x104f,
+ 0x1050, 0x1051, 0x1052, 0x1053, 0x1054, 0x1055, 0x1056, 0x1057,
+ 0x1058, 0x1059, 0x105a, 0x105b, 0x105c, 0x105d, 0x105e, 0x105f,
+ 0x1060, 0x1061, 0x1062, 0x1063, 0x1064, 0x1065, 0x1066, 0x1067,
+ 0x1068, 0x1069, 0x106a, 0x106b, 0x106c, 0x106d, 0x106e, 0x106f,
+ 0x1070, 0x1071, 0x1072, 0x1073, 0x1074, 0x1075, 0x1076, 0x1077,
+ 0x1078, 0x1079, 0x107a, 0x107b, 0x107c, 0x107d, 0x107e, 0x107f,
+ 0x1080, 0x1081, 0x1082, 0x1083, 0x1084, 0x1085, 0x1086, 0x1087, /* 0x1080 */
+ 0x1088, 0x1089, 0x108a, 0x108b, 0x108c, 0x108d, 0x108e, 0x108f,
+ 0x1090, 0x1091, 0x1092, 0x1093, 0x1094, 0x1095, 0x1096, 0x1097,
+ 0x1098, 0x1099, 0x109a, 0x109b, 0x109c, 0x109d, 0x109e, 0x109f,
+ 0x2d00, 0x2d01, 0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07,
+ 0x2d08, 0x2d09, 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f,
+ 0x2d10, 0x2d11, 0x2d12, 0x2d13, 0x2d14, 0x2d15, 0x2d16, 0x2d17,
+ 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c, 0x2d1d, 0x2d1e, 0x2d1f,
+ 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 0x0000, 0x2d27, /* 0x10c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d2d, 0x0000, 0x0000,
+ 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7,
+ 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df,
+ 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7,
+ 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef,
+ 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6, 0x10f7,
+ 0x10f8, 0x10f9, 0x10fa, 0x10fb, 0x10fc, 0x10fd, 0x10fe, 0x10ff,
+ 0x1100, 0x1101, 0x1102, 0x1103, 0x1104, 0x1105, 0x1106, 0x1107, /* 0x1100 */
+ 0x1108, 0x1109, 0x110a, 0x110b, 0x110c, 0x110d, 0x110e, 0x110f,
+ 0x1110, 0x1111, 0x1112, 0x1113, 0x1114, 0x1115, 0x1116, 0x1117,
+ 0x1118, 0x1119, 0x111a, 0x111b, 0x111c, 0x111d, 0x111e, 0x111f,
+ 0x1120, 0x1121, 0x1122, 0x1123, 0x1124, 0x1125, 0x1126, 0x1127,
+ 0x1128, 0x1129, 0x112a, 0x112b, 0x112c, 0x112d, 0x112e, 0x112f,
+ 0x1130, 0x1131, 0x1132, 0x1133, 0x1134, 0x1135, 0x1136, 0x1137,
+ 0x1138, 0x1139, 0x113a, 0x113b, 0x113c, 0x113d, 0x113e, 0x113f,
+ 0x1140, 0x1141, 0x1142, 0x1143, 0x1144, 0x1145, 0x1146, 0x1147, /* 0x1140 */
+ 0x1148, 0x1149, 0x114a, 0x114b, 0x114c, 0x114d, 0x114e, 0x114f,
+ 0x1150, 0x1151, 0x1152, 0x1153, 0x1154, 0x1155, 0x1156, 0x1157,
+ 0x1158, 0x1159, 0x115a, 0x115b, 0x115c, 0x115d, 0x115e, 0x115f,
+ 0x1160, 0x1161, 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167,
+ 0x1168, 0x1169, 0x116a, 0x116b, 0x116c, 0x116d, 0x116e, 0x116f,
+ 0x1170, 0x1171, 0x1172, 0x1173, 0x1174, 0x1175, 0x1176, 0x1177,
+ 0x1178, 0x1179, 0x117a, 0x117b, 0x117c, 0x117d, 0x117e, 0x117f,
+ 0x1180, 0x1181, 0x1182, 0x1183, 0x1184, 0x1185, 0x1186, 0x1187, /* 0x1180 */
+ 0x1188, 0x1189, 0x118a, 0x118b, 0x118c, 0x118d, 0x118e, 0x118f,
+ 0x1190, 0x1191, 0x1192, 0x1193, 0x1194, 0x1195, 0x1196, 0x1197,
+ 0x1198, 0x1199, 0x119a, 0x119b, 0x119c, 0x119d, 0x119e, 0x119f,
+ 0x11a0, 0x11a1, 0x11a2, 0x11a3, 0x11a4, 0x11a5, 0x11a6, 0x11a7,
+ 0x11a8, 0x11a9, 0x11aa, 0x11ab, 0x11ac, 0x11ad, 0x11ae, 0x11af,
+ 0x11b0, 0x11b1, 0x11b2, 0x11b3, 0x11b4, 0x11b5, 0x11b6, 0x11b7,
+ 0x11b8, 0x11b9, 0x11ba, 0x11bb, 0x11bc, 0x11bd, 0x11be, 0x11bf,
+ 0x11c0, 0x11c1, 0x11c2, 0x11c3, 0x11c4, 0x11c5, 0x11c6, 0x11c7, /* 0x11c0 */
+ 0x11c8, 0x11c9, 0x11ca, 0x11cb, 0x11cc, 0x11cd, 0x11ce, 0x11cf,
+ 0x11d0, 0x11d1, 0x11d2, 0x11d3, 0x11d4, 0x11d5, 0x11d6, 0x11d7,
+ 0x11d8, 0x11d9, 0x11da, 0x11db, 0x11dc, 0x11dd, 0x11de, 0x11df,
+ 0x11e0, 0x11e1, 0x11e2, 0x11e3, 0x11e4, 0x11e5, 0x11e6, 0x11e7,
+ 0x11e8, 0x11e9, 0x11ea, 0x11eb, 0x11ec, 0x11ed, 0x11ee, 0x11ef,
+ 0x11f0, 0x11f1, 0x11f2, 0x11f3, 0x11f4, 0x11f5, 0x11f6, 0x11f7,
+ 0x11f8, 0x11f9, 0x11fa, 0x11fb, 0x11fc, 0x11fd, 0x11fe, 0x11ff,
+ 0x1200, 0x1201, 0x1202, 0x1203, 0x1204, 0x1205, 0x1206, 0x1207, /* 0x1200 */
+ 0x1208, 0x1209, 0x120a, 0x120b, 0x120c, 0x120d, 0x120e, 0x120f,
+ 0x1210, 0x1211, 0x1212, 0x1213, 0x1214, 0x1215, 0x1216, 0x1217,
+ 0x1218, 0x1219, 0x121a, 0x121b, 0x121c, 0x121d, 0x121e, 0x121f,
+ 0x1220, 0x1221, 0x1222, 0x1223, 0x1224, 0x1225, 0x1226, 0x1227,
+ 0x1228, 0x1229, 0x122a, 0x122b, 0x122c, 0x122d, 0x122e, 0x122f,
+ 0x1230, 0x1231, 0x1232, 0x1233, 0x1234, 0x1235, 0x1236, 0x1237,
+ 0x1238, 0x1239, 0x123a, 0x123b, 0x123c, 0x123d, 0x123e, 0x123f,
+ 0x1240, 0x1241, 0x1242, 0x1243, 0x1244, 0x1245, 0x1246, 0x1247, /* 0x1240 */
+ 0x1248, 0x0000, 0x124a, 0x124b, 0x124c, 0x124d, 0x0000, 0x0000,
+ 0x1250, 0x1251, 0x1252, 0x1253, 0x1254, 0x1255, 0x1256, 0x0000,
+ 0x1258, 0x0000, 0x125a, 0x125b, 0x125c, 0x125d, 0x0000, 0x0000,
+ 0x1260, 0x1261, 0x1262, 0x1263, 0x1264, 0x1265, 0x1266, 0x1267,
+ 0x1268, 0x1269, 0x126a, 0x126b, 0x126c, 0x126d, 0x126e, 0x126f,
+ 0x1270, 0x1271, 0x1272, 0x1273, 0x1274, 0x1275, 0x1276, 0x1277,
+ 0x1278, 0x1279, 0x127a, 0x127b, 0x127c, 0x127d, 0x127e, 0x127f,
+ 0x1280, 0x1281, 0x1282, 0x1283, 0x1284, 0x1285, 0x1286, 0x1287, /* 0x1280 */
+ 0x1288, 0x0000, 0x128a, 0x128b, 0x128c, 0x128d, 0x0000, 0x0000,
+ 0x1290, 0x1291, 0x1292, 0x1293, 0x1294, 0x1295, 0x1296, 0x1297,
+ 0x1298, 0x1299, 0x129a, 0x129b, 0x129c, 0x129d, 0x129e, 0x129f,
+ 0x12a0, 0x12a1, 0x12a2, 0x12a3, 0x12a4, 0x12a5, 0x12a6, 0x12a7,
+ 0x12a8, 0x12a9, 0x12aa, 0x12ab, 0x12ac, 0x12ad, 0x12ae, 0x12af,
+ 0x12b0, 0x0000, 0x12b2, 0x12b3, 0x12b4, 0x12b5, 0x0000, 0x0000,
+ 0x12b8, 0x12b9, 0x12ba, 0x12bb, 0x12bc, 0x12bd, 0x12be, 0x0000,
+ 0x12c0, 0x0000, 0x12c2, 0x12c3, 0x12c4, 0x12c5, 0x0000, 0x0000, /* 0x12c0 */
+ 0x12c8, 0x12c9, 0x12ca, 0x12cb, 0x12cc, 0x12cd, 0x12ce, 0x12cf,
+ 0x12d0, 0x12d1, 0x12d2, 0x12d3, 0x12d4, 0x12d5, 0x12d6, 0x0000,
+ 0x12d8, 0x12d9, 0x12da, 0x12db, 0x12dc, 0x12dd, 0x12de, 0x12df,
+ 0x12e0, 0x12e1, 0x12e2, 0x12e3, 0x12e4, 0x12e5, 0x12e6, 0x12e7,
+ 0x12e8, 0x12e9, 0x12ea, 0x12eb, 0x12ec, 0x12ed, 0x12ee, 0x12ef,
+ 0x12f0, 0x12f1, 0x12f2, 0x12f3, 0x12f4, 0x12f5, 0x12f6, 0x12f7,
+ 0x12f8, 0x12f9, 0x12fa, 0x12fb, 0x12fc, 0x12fd, 0x12fe, 0x12ff,
+ 0x1300, 0x1301, 0x1302, 0x1303, 0x1304, 0x1305, 0x1306, 0x1307, /* 0x1300 */
+ 0x1308, 0x1309, 0x130a, 0x130b, 0x130c, 0x130d, 0x130e, 0x130f,
+ 0x1310, 0x0000, 0x1312, 0x1313, 0x1314, 0x1315, 0x0000, 0x0000,
+ 0x1318, 0x1319, 0x131a, 0x131b, 0x131c, 0x131d, 0x131e, 0x131f,
+ 0x1320, 0x1321, 0x1322, 0x1323, 0x1324, 0x1325, 0x1326, 0x1327,
+ 0x1328, 0x1329, 0x132a, 0x132b, 0x132c, 0x132d, 0x132e, 0x132f,
+ 0x1330, 0x1331, 0x1332, 0x1333, 0x1334, 0x1335, 0x1336, 0x1337,
+ 0x1338, 0x1339, 0x133a, 0x133b, 0x133c, 0x133d, 0x133e, 0x133f,
+ 0x1340, 0x1341, 0x1342, 0x1343, 0x1344, 0x1345, 0x1346, 0x1347, /* 0x1340 */
+ 0x1348, 0x1349, 0x134a, 0x134b, 0x134c, 0x134d, 0x134e, 0x134f,
+ 0x1350, 0x1351, 0x1352, 0x1353, 0x1354, 0x1355, 0x1356, 0x1357,
+ 0x1358, 0x1359, 0x135a, 0x0000, 0x0000, 0x135d, 0x135e, 0x135f,
+ 0x1360, 0x1361, 0x1362, 0x1363, 0x1364, 0x1365, 0x1366, 0x1367,
+ 0x1368, 0x1369, 0x136a, 0x136b, 0x136c, 0x136d, 0x136e, 0x136f,
+ 0x1370, 0x1371, 0x1372, 0x1373, 0x1374, 0x1375, 0x1376, 0x1377,
+ 0x1378, 0x1379, 0x137a, 0x137b, 0x137c, 0x0000, 0x0000, 0x0000,
+ 0x1380, 0x1381, 0x1382, 0x1383, 0x1384, 0x1385, 0x1386, 0x1387, /* 0x1380 */
+ 0x1388, 0x1389, 0x138a, 0x138b, 0x138c, 0x138d, 0x138e, 0x138f,
+ 0x1390, 0x1391, 0x1392, 0x1393, 0x1394, 0x1395, 0x1396, 0x1397,
+ 0x1398, 0x1399, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x13a0, 0x13a1, 0x13a2, 0x13a3, 0x13a4, 0x13a5, 0x13a6, 0x13a7,
+ 0x13a8, 0x13a9, 0x13aa, 0x13ab, 0x13ac, 0x13ad, 0x13ae, 0x13af,
+ 0x13b0, 0x13b1, 0x13b2, 0x13b3, 0x13b4, 0x13b5, 0x13b6, 0x13b7,
+ 0x13b8, 0x13b9, 0x13ba, 0x13bb, 0x13bc, 0x13bd, 0x13be, 0x13bf,
+ 0x13c0, 0x13c1, 0x13c2, 0x13c3, 0x13c4, 0x13c5, 0x13c6, 0x13c7, /* 0x13c0 */
+ 0x13c8, 0x13c9, 0x13ca, 0x13cb, 0x13cc, 0x13cd, 0x13ce, 0x13cf,
+ 0x13d0, 0x13d1, 0x13d2, 0x13d3, 0x13d4, 0x13d5, 0x13d6, 0x13d7,
+ 0x13d8, 0x13d9, 0x13da, 0x13db, 0x13dc, 0x13dd, 0x13de, 0x13df,
+ 0x13e0, 0x13e1, 0x13e2, 0x13e3, 0x13e4, 0x13e5, 0x13e6, 0x13e7,
+ 0x13e8, 0x13e9, 0x13ea, 0x13eb, 0x13ec, 0x13ed, 0x13ee, 0x13ef,
+ 0x13f0, 0x13f1, 0x13f2, 0x13f3, 0x13f4, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1400, 0x1401, 0x1402, 0x1403, 0x1404, 0x1405, 0x1406, 0x1407, /* 0x1400 */
+ 0x1408, 0x1409, 0x140a, 0x140b, 0x140c, 0x140d, 0x140e, 0x140f,
+ 0x1410, 0x1411, 0x1412, 0x1413, 0x1414, 0x1415, 0x1416, 0x1417,
+ 0x1418, 0x1419, 0x141a, 0x141b, 0x141c, 0x141d, 0x141e, 0x141f,
+ 0x1420, 0x1421, 0x1422, 0x1423, 0x1424, 0x1425, 0x1426, 0x1427,
+ 0x1428, 0x1429, 0x142a, 0x142b, 0x142c, 0x142d, 0x142e, 0x142f,
+ 0x1430, 0x1431, 0x1432, 0x1433, 0x1434, 0x1435, 0x1436, 0x1437,
+ 0x1438, 0x1439, 0x143a, 0x143b, 0x143c, 0x143d, 0x143e, 0x143f,
+ 0x1440, 0x1441, 0x1442, 0x1443, 0x1444, 0x1445, 0x1446, 0x1447, /* 0x1440 */
+ 0x1448, 0x1449, 0x144a, 0x144b, 0x144c, 0x144d, 0x144e, 0x144f,
+ 0x1450, 0x1451, 0x1452, 0x1453, 0x1454, 0x1455, 0x1456, 0x1457,
+ 0x1458, 0x1459, 0x145a, 0x145b, 0x145c, 0x145d, 0x145e, 0x145f,
+ 0x1460, 0x1461, 0x1462, 0x1463, 0x1464, 0x1465, 0x1466, 0x1467,
+ 0x1468, 0x1469, 0x146a, 0x146b, 0x146c, 0x146d, 0x146e, 0x146f,
+ 0x1470, 0x1471, 0x1472, 0x1473, 0x1474, 0x1475, 0x1476, 0x1477,
+ 0x1478, 0x1479, 0x147a, 0x147b, 0x147c, 0x147d, 0x147e, 0x147f,
+ 0x1480, 0x1481, 0x1482, 0x1483, 0x1484, 0x1485, 0x1486, 0x1487, /* 0x1480 */
+ 0x1488, 0x1489, 0x148a, 0x148b, 0x148c, 0x148d, 0x148e, 0x148f,
+ 0x1490, 0x1491, 0x1492, 0x1493, 0x1494, 0x1495, 0x1496, 0x1497,
+ 0x1498, 0x1499, 0x149a, 0x149b, 0x149c, 0x149d, 0x149e, 0x149f,
+ 0x14a0, 0x14a1, 0x14a2, 0x14a3, 0x14a4, 0x14a5, 0x14a6, 0x14a7,
+ 0x14a8, 0x14a9, 0x14aa, 0x14ab, 0x14ac, 0x14ad, 0x14ae, 0x14af,
+ 0x14b0, 0x14b1, 0x14b2, 0x14b3, 0x14b4, 0x14b5, 0x14b6, 0x14b7,
+ 0x14b8, 0x14b9, 0x14ba, 0x14bb, 0x14bc, 0x14bd, 0x14be, 0x14bf,
+ 0x14c0, 0x14c1, 0x14c2, 0x14c3, 0x14c4, 0x14c5, 0x14c6, 0x14c7, /* 0x14c0 */
+ 0x14c8, 0x14c9, 0x14ca, 0x14cb, 0x14cc, 0x14cd, 0x14ce, 0x14cf,
+ 0x14d0, 0x14d1, 0x14d2, 0x14d3, 0x14d4, 0x14d5, 0x14d6, 0x14d7,
+ 0x14d8, 0x14d9, 0x14da, 0x14db, 0x14dc, 0x14dd, 0x14de, 0x14df,
+ 0x14e0, 0x14e1, 0x14e2, 0x14e3, 0x14e4, 0x14e5, 0x14e6, 0x14e7,
+ 0x14e8, 0x14e9, 0x14ea, 0x14eb, 0x14ec, 0x14ed, 0x14ee, 0x14ef,
+ 0x14f0, 0x14f1, 0x14f2, 0x14f3, 0x14f4, 0x14f5, 0x14f6, 0x14f7,
+ 0x14f8, 0x14f9, 0x14fa, 0x14fb, 0x14fc, 0x14fd, 0x14fe, 0x14ff,
+ 0x1500, 0x1501, 0x1502, 0x1503, 0x1504, 0x1505, 0x1506, 0x1507, /* 0x1500 */
+ 0x1508, 0x1509, 0x150a, 0x150b, 0x150c, 0x150d, 0x150e, 0x150f,
+ 0x1510, 0x1511, 0x1512, 0x1513, 0x1514, 0x1515, 0x1516, 0x1517,
+ 0x1518, 0x1519, 0x151a, 0x151b, 0x151c, 0x151d, 0x151e, 0x151f,
+ 0x1520, 0x1521, 0x1522, 0x1523, 0x1524, 0x1525, 0x1526, 0x1527,
+ 0x1528, 0x1529, 0x152a, 0x152b, 0x152c, 0x152d, 0x152e, 0x152f,
+ 0x1530, 0x1531, 0x1532, 0x1533, 0x1534, 0x1535, 0x1536, 0x1537,
+ 0x1538, 0x1539, 0x153a, 0x153b, 0x153c, 0x153d, 0x153e, 0x153f,
+ 0x1540, 0x1541, 0x1542, 0x1543, 0x1544, 0x1545, 0x1546, 0x1547, /* 0x1540 */
+ 0x1548, 0x1549, 0x154a, 0x154b, 0x154c, 0x154d, 0x154e, 0x154f,
+ 0x1550, 0x1551, 0x1552, 0x1553, 0x1554, 0x1555, 0x1556, 0x1557,
+ 0x1558, 0x1559, 0x155a, 0x155b, 0x155c, 0x155d, 0x155e, 0x155f,
+ 0x1560, 0x1561, 0x1562, 0x1563, 0x1564, 0x1565, 0x1566, 0x1567,
+ 0x1568, 0x1569, 0x156a, 0x156b, 0x156c, 0x156d, 0x156e, 0x156f,
+ 0x1570, 0x1571, 0x1572, 0x1573, 0x1574, 0x1575, 0x1576, 0x1577,
+ 0x1578, 0x1579, 0x157a, 0x157b, 0x157c, 0x157d, 0x157e, 0x157f,
+ 0x1580, 0x1581, 0x1582, 0x1583, 0x1584, 0x1585, 0x1586, 0x1587, /* 0x1580 */
+ 0x1588, 0x1589, 0x158a, 0x158b, 0x158c, 0x158d, 0x158e, 0x158f,
+ 0x1590, 0x1591, 0x1592, 0x1593, 0x1594, 0x1595, 0x1596, 0x1597,
+ 0x1598, 0x1599, 0x159a, 0x159b, 0x159c, 0x159d, 0x159e, 0x159f,
+ 0x15a0, 0x15a1, 0x15a2, 0x15a3, 0x15a4, 0x15a5, 0x15a6, 0x15a7,
+ 0x15a8, 0x15a9, 0x15aa, 0x15ab, 0x15ac, 0x15ad, 0x15ae, 0x15af,
+ 0x15b0, 0x15b1, 0x15b2, 0x15b3, 0x15b4, 0x15b5, 0x15b6, 0x15b7,
+ 0x15b8, 0x15b9, 0x15ba, 0x15bb, 0x15bc, 0x15bd, 0x15be, 0x15bf,
+ 0x15c0, 0x15c1, 0x15c2, 0x15c3, 0x15c4, 0x15c5, 0x15c6, 0x15c7, /* 0x15c0 */
+ 0x15c8, 0x15c9, 0x15ca, 0x15cb, 0x15cc, 0x15cd, 0x15ce, 0x15cf,
+ 0x15d0, 0x15d1, 0x15d2, 0x15d3, 0x15d4, 0x15d5, 0x15d6, 0x15d7,
+ 0x15d8, 0x15d9, 0x15da, 0x15db, 0x15dc, 0x15dd, 0x15de, 0x15df,
+ 0x15e0, 0x15e1, 0x15e2, 0x15e3, 0x15e4, 0x15e5, 0x15e6, 0x15e7,
+ 0x15e8, 0x15e9, 0x15ea, 0x15eb, 0x15ec, 0x15ed, 0x15ee, 0x15ef,
+ 0x15f0, 0x15f1, 0x15f2, 0x15f3, 0x15f4, 0x15f5, 0x15f6, 0x15f7,
+ 0x15f8, 0x15f9, 0x15fa, 0x15fb, 0x15fc, 0x15fd, 0x15fe, 0x15ff,
+ 0x1600, 0x1601, 0x1602, 0x1603, 0x1604, 0x1605, 0x1606, 0x1607, /* 0x1600 */
+ 0x1608, 0x1609, 0x160a, 0x160b, 0x160c, 0x160d, 0x160e, 0x160f,
+ 0x1610, 0x1611, 0x1612, 0x1613, 0x1614, 0x1615, 0x1616, 0x1617,
+ 0x1618, 0x1619, 0x161a, 0x161b, 0x161c, 0x161d, 0x161e, 0x161f,
+ 0x1620, 0x1621, 0x1622, 0x1623, 0x1624, 0x1625, 0x1626, 0x1627,
+ 0x1628, 0x1629, 0x162a, 0x162b, 0x162c, 0x162d, 0x162e, 0x162f,
+ 0x1630, 0x1631, 0x1632, 0x1633, 0x1634, 0x1635, 0x1636, 0x1637,
+ 0x1638, 0x1639, 0x163a, 0x163b, 0x163c, 0x163d, 0x163e, 0x163f,
+ 0x1640, 0x1641, 0x1642, 0x1643, 0x1644, 0x1645, 0x1646, 0x1647, /* 0x1640 */
+ 0x1648, 0x1649, 0x164a, 0x164b, 0x164c, 0x164d, 0x164e, 0x164f,
+ 0x1650, 0x1651, 0x1652, 0x1653, 0x1654, 0x1655, 0x1656, 0x1657,
+ 0x1658, 0x1659, 0x165a, 0x165b, 0x165c, 0x165d, 0x165e, 0x165f,
+ 0x1660, 0x1661, 0x1662, 0x1663, 0x1664, 0x1665, 0x1666, 0x1667,
+ 0x1668, 0x1669, 0x166a, 0x166b, 0x166c, 0x166d, 0x166e, 0x166f,
+ 0x1670, 0x1671, 0x1672, 0x1673, 0x1674, 0x1675, 0x1676, 0x1677,
+ 0x1678, 0x1679, 0x167a, 0x167b, 0x167c, 0x167d, 0x167e, 0x167f,
+ 0x1680, 0x1681, 0x1682, 0x1683, 0x1684, 0x1685, 0x1686, 0x1687, /* 0x1680 */
+ 0x1688, 0x1689, 0x168a, 0x168b, 0x168c, 0x168d, 0x168e, 0x168f,
+ 0x1690, 0x1691, 0x1692, 0x1693, 0x1694, 0x1695, 0x1696, 0x1697,
+ 0x1698, 0x1699, 0x169a, 0x169b, 0x169c, 0x0000, 0x0000, 0x0000,
+ 0x16a0, 0x16a1, 0x16a2, 0x16a3, 0x16a4, 0x16a5, 0x16a6, 0x16a7,
+ 0x16a8, 0x16a9, 0x16aa, 0x16ab, 0x16ac, 0x16ad, 0x16ae, 0x16af,
+ 0x16b0, 0x16b1, 0x16b2, 0x16b3, 0x16b4, 0x16b5, 0x16b6, 0x16b7,
+ 0x16b8, 0x16b9, 0x16ba, 0x16bb, 0x16bc, 0x16bd, 0x16be, 0x16bf,
+ 0x16c0, 0x16c1, 0x16c2, 0x16c3, 0x16c4, 0x16c5, 0x16c6, 0x16c7, /* 0x16c0 */
+ 0x16c8, 0x16c9, 0x16ca, 0x16cb, 0x16cc, 0x16cd, 0x16ce, 0x16cf,
+ 0x16d0, 0x16d1, 0x16d2, 0x16d3, 0x16d4, 0x16d5, 0x16d6, 0x16d7,
+ 0x16d8, 0x16d9, 0x16da, 0x16db, 0x16dc, 0x16dd, 0x16de, 0x16df,
+ 0x16e0, 0x16e1, 0x16e2, 0x16e3, 0x16e4, 0x16e5, 0x16e6, 0x16e7,
+ 0x16e8, 0x16e9, 0x16ea, 0x16eb, 0x16ec, 0x16ed, 0x16ee, 0x16ef,
+ 0x16f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1700, 0x1701, 0x1702, 0x1703, 0x1704, 0x1705, 0x1706, 0x1707, /* 0x1700 */
+ 0x1708, 0x1709, 0x170a, 0x170b, 0x170c, 0x0000, 0x170e, 0x170f,
+ 0x1710, 0x1711, 0x1712, 0x1713, 0x1714, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1720, 0x1721, 0x1722, 0x1723, 0x1724, 0x1725, 0x1726, 0x1727,
+ 0x1728, 0x1729, 0x172a, 0x172b, 0x172c, 0x172d, 0x172e, 0x172f,
+ 0x1730, 0x1731, 0x1732, 0x1733, 0x1734, 0x1735, 0x1736, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1740, 0x1741, 0x1742, 0x1743, 0x1744, 0x1745, 0x1746, 0x1747, /* 0x1740 */
+ 0x1748, 0x1749, 0x174a, 0x174b, 0x174c, 0x174d, 0x174e, 0x174f,
+ 0x1750, 0x1751, 0x1752, 0x1753, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1760, 0x1761, 0x1762, 0x1763, 0x1764, 0x1765, 0x1766, 0x1767,
+ 0x1768, 0x1769, 0x176a, 0x176b, 0x176c, 0x0000, 0x176e, 0x176f,
+ 0x1770, 0x0000, 0x1772, 0x1773, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1780, 0x1781, 0x1782, 0x1783, 0x1784, 0x1785, 0x1786, 0x1787, /* 0x1780 */
+ 0x1788, 0x1789, 0x178a, 0x178b, 0x178c, 0x178d, 0x178e, 0x178f,
+ 0x1790, 0x1791, 0x1792, 0x1793, 0x1794, 0x1795, 0x1796, 0x1797,
+ 0x1798, 0x1799, 0x179a, 0x179b, 0x179c, 0x179d, 0x179e, 0x179f,
+ 0x17a0, 0x17a1, 0x17a2, 0x17a3, 0x17a4, 0x17a5, 0x17a6, 0x17a7,
+ 0x17a8, 0x17a9, 0x17aa, 0x17ab, 0x17ac, 0x17ad, 0x17ae, 0x17af,
+ 0x17b0, 0x17b1, 0x17b2, 0x17b3, 0x17b4, 0x17b5, 0x17b6, 0x17b7,
+ 0x17b8, 0x17b9, 0x17ba, 0x17bb, 0x17bc, 0x17bd, 0x17be, 0x17bf,
+ 0x17c0, 0x17c1, 0x17c2, 0x17c3, 0x17c4, 0x17c5, 0x17c6, 0x17c7, /* 0x17c0 */
+ 0x17c8, 0x17c9, 0x17ca, 0x17cb, 0x17cc, 0x17cd, 0x17ce, 0x17cf,
+ 0x17d0, 0x17d1, 0x17d2, 0x17d3, 0x17d4, 0x17d5, 0x17d6, 0x17d7,
+ 0x17d8, 0x17d9, 0x17da, 0x17db, 0x17dc, 0x17dd, 0x0000, 0x0000,
+ 0x17e0, 0x17e1, 0x17e2, 0x17e3, 0x17e4, 0x17e5, 0x17e6, 0x17e7,
+ 0x17e8, 0x17e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x17f0, 0x17f1, 0x17f2, 0x17f3, 0x17f4, 0x17f5, 0x17f6, 0x17f7,
+ 0x17f8, 0x17f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1800, 0x1801, 0x1802, 0x1803, 0x1804, 0x1805, 0x1806, 0x1807, /* 0x1800 */
+ 0x1808, 0x1809, 0x180a, 0x180b, 0x180c, 0x180d, 0x180e, 0x0000,
+ 0x1810, 0x1811, 0x1812, 0x1813, 0x1814, 0x1815, 0x1816, 0x1817,
+ 0x1818, 0x1819, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1820, 0x1821, 0x1822, 0x1823, 0x1824, 0x1825, 0x1826, 0x1827,
+ 0x1828, 0x1829, 0x182a, 0x182b, 0x182c, 0x182d, 0x182e, 0x182f,
+ 0x1830, 0x1831, 0x1832, 0x1833, 0x1834, 0x1835, 0x1836, 0x1837,
+ 0x1838, 0x1839, 0x183a, 0x183b, 0x183c, 0x183d, 0x183e, 0x183f,
+ 0x1840, 0x1841, 0x1842, 0x1843, 0x1844, 0x1845, 0x1846, 0x1847, /* 0x1840 */
+ 0x1848, 0x1849, 0x184a, 0x184b, 0x184c, 0x184d, 0x184e, 0x184f,
+ 0x1850, 0x1851, 0x1852, 0x1853, 0x1854, 0x1855, 0x1856, 0x1857,
+ 0x1858, 0x1859, 0x185a, 0x185b, 0x185c, 0x185d, 0x185e, 0x185f,
+ 0x1860, 0x1861, 0x1862, 0x1863, 0x1864, 0x1865, 0x1866, 0x1867,
+ 0x1868, 0x1869, 0x186a, 0x186b, 0x186c, 0x186d, 0x186e, 0x186f,
+ 0x1870, 0x1871, 0x1872, 0x1873, 0x1874, 0x1875, 0x1876, 0x1877,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1880, 0x1881, 0x1882, 0x1883, 0x1884, 0x1885, 0x1886, 0x1887, /* 0x1880 */
+ 0x1888, 0x1889, 0x188a, 0x188b, 0x188c, 0x188d, 0x188e, 0x188f,
+ 0x1890, 0x1891, 0x1892, 0x1893, 0x1894, 0x1895, 0x1896, 0x1897,
+ 0x1898, 0x1899, 0x189a, 0x189b, 0x189c, 0x189d, 0x189e, 0x189f,
+ 0x18a0, 0x18a1, 0x18a2, 0x18a3, 0x18a4, 0x18a5, 0x18a6, 0x18a7,
+ 0x18a8, 0x18a9, 0x18aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x18b0, 0x18b1, 0x18b2, 0x18b3, 0x18b4, 0x18b5, 0x18b6, 0x18b7,
+ 0x18b8, 0x18b9, 0x18ba, 0x18bb, 0x18bc, 0x18bd, 0x18be, 0x18bf,
+ 0x18c0, 0x18c1, 0x18c2, 0x18c3, 0x18c4, 0x18c5, 0x18c6, 0x18c7, /* 0x18c0 */
+ 0x18c8, 0x18c9, 0x18ca, 0x18cb, 0x18cc, 0x18cd, 0x18ce, 0x18cf,
+ 0x18d0, 0x18d1, 0x18d2, 0x18d3, 0x18d4, 0x18d5, 0x18d6, 0x18d7,
+ 0x18d8, 0x18d9, 0x18da, 0x18db, 0x18dc, 0x18dd, 0x18de, 0x18df,
+ 0x18e0, 0x18e1, 0x18e2, 0x18e3, 0x18e4, 0x18e5, 0x18e6, 0x18e7,
+ 0x18e8, 0x18e9, 0x18ea, 0x18eb, 0x18ec, 0x18ed, 0x18ee, 0x18ef,
+ 0x18f0, 0x18f1, 0x18f2, 0x18f3, 0x18f4, 0x18f5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1900, 0x1901, 0x1902, 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, /* 0x1900 */
+ 0x1908, 0x1909, 0x190a, 0x190b, 0x190c, 0x190d, 0x190e, 0x190f,
+ 0x1910, 0x1911, 0x1912, 0x1913, 0x1914, 0x1915, 0x1916, 0x1917,
+ 0x1918, 0x1919, 0x191a, 0x191b, 0x191c, 0x0000, 0x0000, 0x0000,
+ 0x1920, 0x1921, 0x1922, 0x1923, 0x1924, 0x1925, 0x1926, 0x1927,
+ 0x1928, 0x1929, 0x192a, 0x192b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1930, 0x1931, 0x1932, 0x1933, 0x1934, 0x1935, 0x1936, 0x1937,
+ 0x1938, 0x1939, 0x193a, 0x193b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1940, 0x0000, 0x0000, 0x0000, 0x1944, 0x1945, 0x1946, 0x1947, /* 0x1940 */
+ 0x1948, 0x1949, 0x194a, 0x194b, 0x194c, 0x194d, 0x194e, 0x194f,
+ 0x1950, 0x1951, 0x1952, 0x1953, 0x1954, 0x1955, 0x1956, 0x1957,
+ 0x1958, 0x1959, 0x195a, 0x195b, 0x195c, 0x195d, 0x195e, 0x195f,
+ 0x1960, 0x1961, 0x1962, 0x1963, 0x1964, 0x1965, 0x1966, 0x1967,
+ 0x1968, 0x1969, 0x196a, 0x196b, 0x196c, 0x196d, 0x0000, 0x0000,
+ 0x1970, 0x1971, 0x1972, 0x1973, 0x1974, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1980, 0x1981, 0x1982, 0x1983, 0x1984, 0x1985, 0x1986, 0x1987, /* 0x1980 */
+ 0x1988, 0x1989, 0x198a, 0x198b, 0x198c, 0x198d, 0x198e, 0x198f,
+ 0x1990, 0x1991, 0x1992, 0x1993, 0x1994, 0x1995, 0x1996, 0x1997,
+ 0x1998, 0x1999, 0x199a, 0x199b, 0x199c, 0x199d, 0x199e, 0x199f,
+ 0x19a0, 0x19a1, 0x19a2, 0x19a3, 0x19a4, 0x19a5, 0x19a6, 0x19a7,
+ 0x19a8, 0x19a9, 0x19aa, 0x19ab, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x19b0, 0x19b1, 0x19b2, 0x19b3, 0x19b4, 0x19b5, 0x19b6, 0x19b7,
+ 0x19b8, 0x19b9, 0x19ba, 0x19bb, 0x19bc, 0x19bd, 0x19be, 0x19bf,
+ 0x19c0, 0x19c1, 0x19c2, 0x19c3, 0x19c4, 0x19c5, 0x19c6, 0x19c7, /* 0x19c0 */
+ 0x19c8, 0x19c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x19d0, 0x19d1, 0x19d2, 0x19d3, 0x19d4, 0x19d5, 0x19d6, 0x19d7,
+ 0x19d8, 0x19d9, 0x19da, 0x0000, 0x0000, 0x0000, 0x19de, 0x19df,
+ 0x19e0, 0x19e1, 0x19e2, 0x19e3, 0x19e4, 0x19e5, 0x19e6, 0x19e7,
+ 0x19e8, 0x19e9, 0x19ea, 0x19eb, 0x19ec, 0x19ed, 0x19ee, 0x19ef,
+ 0x19f0, 0x19f1, 0x19f2, 0x19f3, 0x19f4, 0x19f5, 0x19f6, 0x19f7,
+ 0x19f8, 0x19f9, 0x19fa, 0x19fb, 0x19fc, 0x19fd, 0x19fe, 0x19ff,
+ 0x1a00, 0x1a01, 0x1a02, 0x1a03, 0x1a04, 0x1a05, 0x1a06, 0x1a07, /* 0x1a00 */
+ 0x1a08, 0x1a09, 0x1a0a, 0x1a0b, 0x1a0c, 0x1a0d, 0x1a0e, 0x1a0f,
+ 0x1a10, 0x1a11, 0x1a12, 0x1a13, 0x1a14, 0x1a15, 0x1a16, 0x1a17,
+ 0x1a18, 0x1a19, 0x1a1a, 0x1a1b, 0x0000, 0x0000, 0x1a1e, 0x1a1f,
+ 0x1a20, 0x1a21, 0x1a22, 0x1a23, 0x1a24, 0x1a25, 0x1a26, 0x1a27,
+ 0x1a28, 0x1a29, 0x1a2a, 0x1a2b, 0x1a2c, 0x1a2d, 0x1a2e, 0x1a2f,
+ 0x1a30, 0x1a31, 0x1a32, 0x1a33, 0x1a34, 0x1a35, 0x1a36, 0x1a37,
+ 0x1a38, 0x1a39, 0x1a3a, 0x1a3b, 0x1a3c, 0x1a3d, 0x1a3e, 0x1a3f,
+ 0x1a40, 0x1a41, 0x1a42, 0x1a43, 0x1a44, 0x1a45, 0x1a46, 0x1a47, /* 0x1a40 */
+ 0x1a48, 0x1a49, 0x1a4a, 0x1a4b, 0x1a4c, 0x1a4d, 0x1a4e, 0x1a4f,
+ 0x1a50, 0x1a51, 0x1a52, 0x1a53, 0x1a54, 0x1a55, 0x1a56, 0x1a57,
+ 0x1a58, 0x1a59, 0x1a5a, 0x1a5b, 0x1a5c, 0x1a5d, 0x1a5e, 0x0000,
+ 0x1a60, 0x1a61, 0x1a62, 0x1a63, 0x1a64, 0x1a65, 0x1a66, 0x1a67,
+ 0x1a68, 0x1a69, 0x1a6a, 0x1a6b, 0x1a6c, 0x1a6d, 0x1a6e, 0x1a6f,
+ 0x1a70, 0x1a71, 0x1a72, 0x1a73, 0x1a74, 0x1a75, 0x1a76, 0x1a77,
+ 0x1a78, 0x1a79, 0x1a7a, 0x1a7b, 0x1a7c, 0x0000, 0x0000, 0x1a7f,
+ 0x1a80, 0x1a81, 0x1a82, 0x1a83, 0x1a84, 0x1a85, 0x1a86, 0x1a87, /* 0x1a80 */
+ 0x1a88, 0x1a89, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1a90, 0x1a91, 0x1a92, 0x1a93, 0x1a94, 0x1a95, 0x1a96, 0x1a97,
+ 0x1a98, 0x1a99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1aa0, 0x1aa1, 0x1aa2, 0x1aa3, 0x1aa4, 0x1aa5, 0x1aa6, 0x1aa7,
+ 0x1aa8, 0x1aa9, 0x1aaa, 0x1aab, 0x1aac, 0x1aad, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1b00, 0x1b01, 0x1b02, 0x1b03, 0x1b04, 0x1b05, 0x1b06, 0x1b07, /* 0x1b00 */
+ 0x1b08, 0x1b09, 0x1b0a, 0x1b0b, 0x1b0c, 0x1b0d, 0x1b0e, 0x1b0f,
+ 0x1b10, 0x1b11, 0x1b12, 0x1b13, 0x1b14, 0x1b15, 0x1b16, 0x1b17,
+ 0x1b18, 0x1b19, 0x1b1a, 0x1b1b, 0x1b1c, 0x1b1d, 0x1b1e, 0x1b1f,
+ 0x1b20, 0x1b21, 0x1b22, 0x1b23, 0x1b24, 0x1b25, 0x1b26, 0x1b27,
+ 0x1b28, 0x1b29, 0x1b2a, 0x1b2b, 0x1b2c, 0x1b2d, 0x1b2e, 0x1b2f,
+ 0x1b30, 0x1b31, 0x1b32, 0x1b33, 0x1b34, 0x1b35, 0x1b36, 0x1b37,
+ 0x1b38, 0x1b39, 0x1b3a, 0x1b3b, 0x1b3c, 0x1b3d, 0x1b3e, 0x1b3f,
+ 0x1b40, 0x1b41, 0x1b42, 0x1b43, 0x1b44, 0x1b45, 0x1b46, 0x1b47, /* 0x1b40 */
+ 0x1b48, 0x1b49, 0x1b4a, 0x1b4b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1b50, 0x1b51, 0x1b52, 0x1b53, 0x1b54, 0x1b55, 0x1b56, 0x1b57,
+ 0x1b58, 0x1b59, 0x1b5a, 0x1b5b, 0x1b5c, 0x1b5d, 0x1b5e, 0x1b5f,
+ 0x1b60, 0x1b61, 0x1b62, 0x1b63, 0x1b64, 0x1b65, 0x1b66, 0x1b67,
+ 0x1b68, 0x1b69, 0x1b6a, 0x1b6b, 0x1b6c, 0x1b6d, 0x1b6e, 0x1b6f,
+ 0x1b70, 0x1b71, 0x1b72, 0x1b73, 0x1b74, 0x1b75, 0x1b76, 0x1b77,
+ 0x1b78, 0x1b79, 0x1b7a, 0x1b7b, 0x1b7c, 0x0000, 0x0000, 0x0000,
+ 0x1b80, 0x1b81, 0x1b82, 0x1b83, 0x1b84, 0x1b85, 0x1b86, 0x1b87, /* 0x1b80 */
+ 0x1b88, 0x1b89, 0x1b8a, 0x1b8b, 0x1b8c, 0x1b8d, 0x1b8e, 0x1b8f,
+ 0x1b90, 0x1b91, 0x1b92, 0x1b93, 0x1b94, 0x1b95, 0x1b96, 0x1b97,
+ 0x1b98, 0x1b99, 0x1b9a, 0x1b9b, 0x1b9c, 0x1b9d, 0x1b9e, 0x1b9f,
+ 0x1ba0, 0x1ba1, 0x1ba2, 0x1ba3, 0x1ba4, 0x1ba5, 0x1ba6, 0x1ba7,
+ 0x1ba8, 0x1ba9, 0x1baa, 0x1bab, 0x1bac, 0x1bad, 0x1bae, 0x1baf,
+ 0x1bb0, 0x1bb1, 0x1bb2, 0x1bb3, 0x1bb4, 0x1bb5, 0x1bb6, 0x1bb7,
+ 0x1bb8, 0x1bb9, 0x1bba, 0x1bbb, 0x1bbc, 0x1bbd, 0x1bbe, 0x1bbf,
+ 0x1bc0, 0x1bc1, 0x1bc2, 0x1bc3, 0x1bc4, 0x1bc5, 0x1bc6, 0x1bc7, /* 0x1bc0 */
+ 0x1bc8, 0x1bc9, 0x1bca, 0x1bcb, 0x1bcc, 0x1bcd, 0x1bce, 0x1bcf,
+ 0x1bd0, 0x1bd1, 0x1bd2, 0x1bd3, 0x1bd4, 0x1bd5, 0x1bd6, 0x1bd7,
+ 0x1bd8, 0x1bd9, 0x1bda, 0x1bdb, 0x1bdc, 0x1bdd, 0x1bde, 0x1bdf,
+ 0x1be0, 0x1be1, 0x1be2, 0x1be3, 0x1be4, 0x1be5, 0x1be6, 0x1be7,
+ 0x1be8, 0x1be9, 0x1bea, 0x1beb, 0x1bec, 0x1bed, 0x1bee, 0x1bef,
+ 0x1bf0, 0x1bf1, 0x1bf2, 0x1bf3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1bfc, 0x1bfd, 0x1bfe, 0x1bff,
+ 0x1c00, 0x1c01, 0x1c02, 0x1c03, 0x1c04, 0x1c05, 0x1c06, 0x1c07, /* 0x1c00 */
+ 0x1c08, 0x1c09, 0x1c0a, 0x1c0b, 0x1c0c, 0x1c0d, 0x1c0e, 0x1c0f,
+ 0x1c10, 0x1c11, 0x1c12, 0x1c13, 0x1c14, 0x1c15, 0x1c16, 0x1c17,
+ 0x1c18, 0x1c19, 0x1c1a, 0x1c1b, 0x1c1c, 0x1c1d, 0x1c1e, 0x1c1f,
+ 0x1c20, 0x1c21, 0x1c22, 0x1c23, 0x1c24, 0x1c25, 0x1c26, 0x1c27,
+ 0x1c28, 0x1c29, 0x1c2a, 0x1c2b, 0x1c2c, 0x1c2d, 0x1c2e, 0x1c2f,
+ 0x1c30, 0x1c31, 0x1c32, 0x1c33, 0x1c34, 0x1c35, 0x1c36, 0x1c37,
+ 0x0000, 0x0000, 0x0000, 0x1c3b, 0x1c3c, 0x1c3d, 0x1c3e, 0x1c3f,
+ 0x1c40, 0x1c41, 0x1c42, 0x1c43, 0x1c44, 0x1c45, 0x1c46, 0x1c47, /* 0x1c40 */
+ 0x1c48, 0x1c49, 0x0000, 0x0000, 0x0000, 0x1c4d, 0x1c4e, 0x1c4f,
+ 0x1c50, 0x1c51, 0x1c52, 0x1c53, 0x1c54, 0x1c55, 0x1c56, 0x1c57,
+ 0x1c58, 0x1c59, 0x1c5a, 0x1c5b, 0x1c5c, 0x1c5d, 0x1c5e, 0x1c5f,
+ 0x1c60, 0x1c61, 0x1c62, 0x1c63, 0x1c64, 0x1c65, 0x1c66, 0x1c67,
+ 0x1c68, 0x1c69, 0x1c6a, 0x1c6b, 0x1c6c, 0x1c6d, 0x1c6e, 0x1c6f,
+ 0x1c70, 0x1c71, 0x1c72, 0x1c73, 0x1c74, 0x1c75, 0x1c76, 0x1c77,
+ 0x1c78, 0x1c79, 0x1c7a, 0x1c7b, 0x1c7c, 0x1c7d, 0x1c7e, 0x1c7f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1cc0, 0x1cc1, 0x1cc2, 0x1cc3, 0x1cc4, 0x1cc5, 0x1cc6, 0x1cc7, /* 0x1cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1cd0, 0x1cd1, 0x1cd2, 0x1cd3, 0x1cd4, 0x1cd5, 0x1cd6, 0x1cd7,
+ 0x1cd8, 0x1cd9, 0x1cda, 0x1cdb, 0x1cdc, 0x1cdd, 0x1cde, 0x1cdf,
+ 0x1ce0, 0x1ce1, 0x1ce2, 0x1ce3, 0x1ce4, 0x1ce5, 0x1ce6, 0x1ce7,
+ 0x1ce8, 0x1ce9, 0x1cea, 0x1ceb, 0x1cec, 0x1ced, 0x1cee, 0x1cef,
+ 0x1cf0, 0x1cf1, 0x1cf2, 0x1cf3, 0x1cf4, 0x1cf5, 0x1cf6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x1d00, 0x1d01, 0x1d02, 0x1d03, 0x1d04, 0x1d05, 0x1d06, 0x1d07, /* 0x1d00 */
+ 0x1d08, 0x1d09, 0x1d0a, 0x1d0b, 0x1d0c, 0x1d0d, 0x1d0e, 0x1d0f,
+ 0x1d10, 0x1d11, 0x1d12, 0x1d13, 0x1d14, 0x1d15, 0x1d16, 0x1d17,
+ 0x1d18, 0x1d19, 0x1d1a, 0x1d1b, 0x1d1c, 0x1d1d, 0x1d1e, 0x1d1f,
+ 0x1d20, 0x1d21, 0x1d22, 0x1d23, 0x1d24, 0x1d25, 0x1d26, 0x1d27,
+ 0x1d28, 0x1d29, 0x1d2a, 0x1d2b, 0x1d2c, 0x1d2d, 0x1d2e, 0x1d2f,
+ 0x1d30, 0x1d31, 0x1d32, 0x1d33, 0x1d34, 0x1d35, 0x1d36, 0x1d37,
+ 0x1d38, 0x1d39, 0x1d3a, 0x1d3b, 0x1d3c, 0x1d3d, 0x1d3e, 0x1d3f,
+ 0x1d40, 0x1d41, 0x1d42, 0x1d43, 0x1d44, 0x1d45, 0x1d46, 0x1d47, /* 0x1d40 */
+ 0x1d48, 0x1d49, 0x1d4a, 0x1d4b, 0x1d4c, 0x1d4d, 0x1d4e, 0x1d4f,
+ 0x1d50, 0x1d51, 0x1d52, 0x1d53, 0x1d54, 0x1d55, 0x1d56, 0x1d57,
+ 0x1d58, 0x1d59, 0x1d5a, 0x1d5b, 0x1d5c, 0x1d5d, 0x1d5e, 0x1d5f,
+ 0x1d60, 0x1d61, 0x1d62, 0x1d63, 0x1d64, 0x1d65, 0x1d66, 0x1d67,
+ 0x1d68, 0x1d69, 0x1d6a, 0x1d6b, 0x1d6c, 0x1d6d, 0x1d6e, 0x1d6f,
+ 0x1d70, 0x1d71, 0x1d72, 0x1d73, 0x1d74, 0x1d75, 0x1d76, 0x1d77,
+ 0x1d78, 0x1d79, 0x1d7a, 0x1d7b, 0x1d7c, 0x1d7d, 0x1d7e, 0x1d7f,
+ 0x1d80, 0x1d81, 0x1d82, 0x1d83, 0x1d84, 0x1d85, 0x1d86, 0x1d87, /* 0x1d80 */
+ 0x1d88, 0x1d89, 0x1d8a, 0x1d8b, 0x1d8c, 0x1d8d, 0x1d8e, 0x1d8f,
+ 0x1d90, 0x1d91, 0x1d92, 0x1d93, 0x1d94, 0x1d95, 0x1d96, 0x1d97,
+ 0x1d98, 0x1d99, 0x1d9a, 0x1d9b, 0x1d9c, 0x1d9d, 0x1d9e, 0x1d9f,
+ 0x1da0, 0x1da1, 0x1da2, 0x1da3, 0x1da4, 0x1da5, 0x1da6, 0x1da7,
+ 0x1da8, 0x1da9, 0x1daa, 0x1dab, 0x1dac, 0x1dad, 0x1dae, 0x1daf,
+ 0x1db0, 0x1db1, 0x1db2, 0x1db3, 0x1db4, 0x1db5, 0x1db6, 0x1db7,
+ 0x1db8, 0x1db9, 0x1dba, 0x1dbb, 0x1dbc, 0x1dbd, 0x1dbe, 0x1dbf,
+ 0x1dc0, 0x1dc1, 0x1dc2, 0x1dc3, 0x1dc4, 0x1dc5, 0x1dc6, 0x1dc7, /* 0x1dc0 */
+ 0x1dc8, 0x1dc9, 0x1dca, 0x1dcb, 0x1dcc, 0x1dcd, 0x1dce, 0x1dcf,
+ 0x1dd0, 0x1dd1, 0x1dd2, 0x1dd3, 0x1dd4, 0x1dd5, 0x1dd6, 0x1dd7,
+ 0x1dd8, 0x1dd9, 0x1dda, 0x1ddb, 0x1ddc, 0x1ddd, 0x1dde, 0x1ddf,
+ 0x1de0, 0x1de1, 0x1de2, 0x1de3, 0x1de4, 0x1de5, 0x1de6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x1dfc, 0x1dfd, 0x1dfe, 0x1dff,
+ 0x1e01, 0x1e01, 0x1e03, 0x1e03, 0x1e05, 0x1e05, 0x1e07, 0x1e07, /* 0x1e00 */
+ 0x1e09, 0x1e09, 0x1e0b, 0x1e0b, 0x1e0d, 0x1e0d, 0x1e0f, 0x1e0f,
+ 0x1e11, 0x1e11, 0x1e13, 0x1e13, 0x1e15, 0x1e15, 0x1e17, 0x1e17,
+ 0x1e19, 0x1e19, 0x1e1b, 0x1e1b, 0x1e1d, 0x1e1d, 0x1e1f, 0x1e1f,
+ 0x1e21, 0x1e21, 0x1e23, 0x1e23, 0x1e25, 0x1e25, 0x1e27, 0x1e27,
+ 0x1e29, 0x1e29, 0x1e2b, 0x1e2b, 0x1e2d, 0x1e2d, 0x1e2f, 0x1e2f,
+ 0x1e31, 0x1e31, 0x1e33, 0x1e33, 0x1e35, 0x1e35, 0x1e37, 0x1e37,
+ 0x1e39, 0x1e39, 0x1e3b, 0x1e3b, 0x1e3d, 0x1e3d, 0x1e3f, 0x1e3f,
+ 0x1e41, 0x1e41, 0x1e43, 0x1e43, 0x1e45, 0x1e45, 0x1e47, 0x1e47, /* 0x1e40 */
+ 0x1e49, 0x1e49, 0x1e4b, 0x1e4b, 0x1e4d, 0x1e4d, 0x1e4f, 0x1e4f,
+ 0x1e51, 0x1e51, 0x1e53, 0x1e53, 0x1e55, 0x1e55, 0x1e57, 0x1e57,
+ 0x1e59, 0x1e59, 0x1e5b, 0x1e5b, 0x1e5d, 0x1e5d, 0x1e5f, 0x1e5f,
+ 0x1e61, 0x1e61, 0x1e63, 0x1e63, 0x1e65, 0x1e65, 0x1e67, 0x1e67,
+ 0x1e69, 0x1e69, 0x1e6b, 0x1e6b, 0x1e6d, 0x1e6d, 0x1e6f, 0x1e6f,
+ 0x1e71, 0x1e71, 0x1e73, 0x1e73, 0x1e75, 0x1e75, 0x1e77, 0x1e77,
+ 0x1e79, 0x1e79, 0x1e7b, 0x1e7b, 0x1e7d, 0x1e7d, 0x1e7f, 0x1e7f,
+ 0x1e81, 0x1e81, 0x1e83, 0x1e83, 0x1e85, 0x1e85, 0x1e87, 0x1e87, /* 0x1e80 */
+ 0x1e89, 0x1e89, 0x1e8b, 0x1e8b, 0x1e8d, 0x1e8d, 0x1e8f, 0x1e8f,
+ 0x1e91, 0x1e91, 0x1e93, 0x1e93, 0x1e95, 0x1e95, 0x1e96, 0x1e97,
+ 0x1e98, 0x1e99, 0x1e9a, 0x1e9b, 0x1e9c, 0x1e9d, 0x00df, 0x1e9f,
+ 0x1ea1, 0x1ea1, 0x1ea3, 0x1ea3, 0x1ea5, 0x1ea5, 0x1ea7, 0x1ea7,
+ 0x1ea9, 0x1ea9, 0x1eab, 0x1eab, 0x1ead, 0x1ead, 0x1eaf, 0x1eaf,
+ 0x1eb1, 0x1eb1, 0x1eb3, 0x1eb3, 0x1eb5, 0x1eb5, 0x1eb7, 0x1eb7,
+ 0x1eb9, 0x1eb9, 0x1ebb, 0x1ebb, 0x1ebd, 0x1ebd, 0x1ebf, 0x1ebf,
+ 0x1ec1, 0x1ec1, 0x1ec3, 0x1ec3, 0x1ec5, 0x1ec5, 0x1ec7, 0x1ec7, /* 0x1ec0 */
+ 0x1ec9, 0x1ec9, 0x1ecb, 0x1ecb, 0x1ecd, 0x1ecd, 0x1ecf, 0x1ecf,
+ 0x1ed1, 0x1ed1, 0x1ed3, 0x1ed3, 0x1ed5, 0x1ed5, 0x1ed7, 0x1ed7,
+ 0x1ed9, 0x1ed9, 0x1edb, 0x1edb, 0x1edd, 0x1edd, 0x1edf, 0x1edf,
+ 0x1ee1, 0x1ee1, 0x1ee3, 0x1ee3, 0x1ee5, 0x1ee5, 0x1ee7, 0x1ee7,
+ 0x1ee9, 0x1ee9, 0x1eeb, 0x1eeb, 0x1eed, 0x1eed, 0x1eef, 0x1eef,
+ 0x1ef1, 0x1ef1, 0x1ef3, 0x1ef3, 0x1ef5, 0x1ef5, 0x1ef7, 0x1ef7,
+ 0x1ef9, 0x1ef9, 0x1efb, 0x1efb, 0x1efd, 0x1efd, 0x1eff, 0x1eff,
+ 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, /* 0x1f00 */
+ 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07,
+ 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000,
+ 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x0000, 0x0000,
+ 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27,
+ 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27,
+ 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37,
+ 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37,
+ 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000, /* 0x1f40 */
+ 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x0000, 0x0000,
+ 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56, 0x1f57,
+ 0x0000, 0x1f51, 0x0000, 0x1f53, 0x0000, 0x1f55, 0x0000, 0x1f57,
+ 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67,
+ 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67,
+ 0x1f70, 0x1f71, 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1f76, 0x1f77,
+ 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x0000, 0x0000,
+ 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, /* 0x1f80 */
+ 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87,
+ 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
+ 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97,
+ 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
+ 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7,
+ 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x0000, 0x1fb6, 0x1fb7,
+ 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1fbd, 0x1fbe, 0x1fbf,
+ 0x1fc0, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x0000, 0x1fc6, 0x1fc7, /* 0x1fc0 */
+ 0x1f72, 0x1f73, 0x1f74, 0x1f75, 0x1fc3, 0x1fcd, 0x1fce, 0x1fcf,
+ 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3, 0x0000, 0x0000, 0x1fd6, 0x1fd7,
+ 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x0000, 0x1fdd, 0x1fde, 0x1fdf,
+ 0x1fe0, 0x1fe1, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe5, 0x1fe6, 0x1fe7,
+ 0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1fed, 0x1fee, 0x1fef,
+ 0x0000, 0x0000, 0x1ff2, 0x1ff3, 0x1ff4, 0x0000, 0x1ff6, 0x1ff7,
+ 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x1ffd, 0x1ffe, 0x0000,
+ 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, /* 0x2000 */
+ 0x2008, 0x2009, 0x200a, 0x200b, 0x200c, 0x200d, 0x200e, 0x200f,
+ 0x2010, 0x2011, 0x2012, 0x2013, 0x2014, 0x2015, 0x2016, 0x2017,
+ 0x2018, 0x2019, 0x201a, 0x201b, 0x201c, 0x201d, 0x201e, 0x201f,
+ 0x2020, 0x2021, 0x2022, 0x2023, 0x2024, 0x2025, 0x2026, 0x2027,
+ 0x2028, 0x2029, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e, 0x202f,
+ 0x2030, 0x2031, 0x2032, 0x2033, 0x2034, 0x2035, 0x2036, 0x2037,
+ 0x2038, 0x2039, 0x203a, 0x203b, 0x203c, 0x203d, 0x203e, 0x203f,
+ 0x2040, 0x2041, 0x2042, 0x2043, 0x2044, 0x2045, 0x2046, 0x2047, /* 0x2040 */
+ 0x2048, 0x2049, 0x204a, 0x204b, 0x204c, 0x204d, 0x204e, 0x204f,
+ 0x2050, 0x2051, 0x2052, 0x2053, 0x2054, 0x2055, 0x2056, 0x2057,
+ 0x2058, 0x2059, 0x205a, 0x205b, 0x205c, 0x205d, 0x205e, 0x205f,
+ 0x2060, 0x2061, 0x2062, 0x2063, 0x2064, 0x0000, 0x2066, 0x2067,
+ 0x2068, 0x2069, 0x206a, 0x206b, 0x206c, 0x206d, 0x206e, 0x206f,
+ 0x2070, 0x2071, 0x0000, 0x0000, 0x2074, 0x2075, 0x2076, 0x2077,
+ 0x2078, 0x2079, 0x207a, 0x207b, 0x207c, 0x207d, 0x207e, 0x207f,
+ 0x2080, 0x2081, 0x2082, 0x2083, 0x2084, 0x2085, 0x2086, 0x2087, /* 0x2080 */
+ 0x2088, 0x2089, 0x208a, 0x208b, 0x208c, 0x208d, 0x208e, 0x0000,
+ 0x2090, 0x2091, 0x2092, 0x2093, 0x2094, 0x2095, 0x2096, 0x2097,
+ 0x2098, 0x2099, 0x209a, 0x209b, 0x209c, 0x0000, 0x0000, 0x0000,
+ 0x20a0, 0x20a1, 0x20a2, 0x20a3, 0x20a4, 0x20a5, 0x20a6, 0x20a7,
+ 0x20a8, 0x20a9, 0x20aa, 0x20ab, 0x20ac, 0x20ad, 0x20ae, 0x20af,
+ 0x20b0, 0x20b1, 0x20b2, 0x20b3, 0x20b4, 0x20b5, 0x20b6, 0x20b7,
+ 0x20b8, 0x20b9, 0x20ba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x20c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x20d0, 0x20d1, 0x20d2, 0x20d3, 0x20d4, 0x20d5, 0x20d6, 0x20d7,
+ 0x20d8, 0x20d9, 0x20da, 0x20db, 0x20dc, 0x20dd, 0x20de, 0x20df,
+ 0x20e0, 0x20e1, 0x20e2, 0x20e3, 0x20e4, 0x20e5, 0x20e6, 0x20e7,
+ 0x20e8, 0x20e9, 0x20ea, 0x20eb, 0x20ec, 0x20ed, 0x20ee, 0x20ef,
+ 0x20f0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, /* 0x2100 */
+ 0x2108, 0x2109, 0x210a, 0x210b, 0x210c, 0x210d, 0x210e, 0x210f,
+ 0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117,
+ 0x2118, 0x2119, 0x211a, 0x211b, 0x211c, 0x211d, 0x211e, 0x211f,
+ 0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x03c9, 0x2127,
+ 0x2128, 0x2129, 0x006b, 0x00e5, 0x212c, 0x212d, 0x212e, 0x212f,
+ 0x2130, 0x2131, 0x214e, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137,
+ 0x2138, 0x2139, 0x213a, 0x213b, 0x213c, 0x213d, 0x213e, 0x213f,
+ 0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, /* 0x2140 */
+ 0x2148, 0x2149, 0x214a, 0x214b, 0x214c, 0x214d, 0x214e, 0x214f,
+ 0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157,
+ 0x2158, 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x215f,
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
+ 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f,
+ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
+ 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f,
+ 0x2180, 0x2181, 0x2182, 0x2184, 0x2184, 0x2185, 0x2186, 0x2187, /* 0x2180 */
+ 0x2188, 0x2189, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2190, 0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197,
+ 0x2198, 0x2199, 0x219a, 0x219b, 0x219c, 0x219d, 0x219e, 0x219f,
+ 0x21a0, 0x21a1, 0x21a2, 0x21a3, 0x21a4, 0x21a5, 0x21a6, 0x21a7,
+ 0x21a8, 0x21a9, 0x21aa, 0x21ab, 0x21ac, 0x21ad, 0x21ae, 0x21af,
+ 0x21b0, 0x21b1, 0x21b2, 0x21b3, 0x21b4, 0x21b5, 0x21b6, 0x21b7,
+ 0x21b8, 0x21b9, 0x21ba, 0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf,
+ 0x21c0, 0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, /* 0x21c0 */
+ 0x21c8, 0x21c9, 0x21ca, 0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf,
+ 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x21d5, 0x21d6, 0x21d7,
+ 0x21d8, 0x21d9, 0x21da, 0x21db, 0x21dc, 0x21dd, 0x21de, 0x21df,
+ 0x21e0, 0x21e1, 0x21e2, 0x21e3, 0x21e4, 0x21e5, 0x21e6, 0x21e7,
+ 0x21e8, 0x21e9, 0x21ea, 0x21eb, 0x21ec, 0x21ed, 0x21ee, 0x21ef,
+ 0x21f0, 0x21f1, 0x21f2, 0x21f3, 0x21f4, 0x21f5, 0x21f6, 0x21f7,
+ 0x21f8, 0x21f9, 0x21fa, 0x21fb, 0x21fc, 0x21fd, 0x21fe, 0x21ff,
+ 0x2200, 0x2201, 0x2202, 0x2203, 0x2204, 0x2205, 0x2206, 0x2207, /* 0x2200 */
+ 0x2208, 0x2209, 0x220a, 0x220b, 0x220c, 0x220d, 0x220e, 0x220f,
+ 0x2210, 0x2211, 0x2212, 0x2213, 0x2214, 0x2215, 0x2216, 0x2217,
+ 0x2218, 0x2219, 0x221a, 0x221b, 0x221c, 0x221d, 0x221e, 0x221f,
+ 0x2220, 0x2221, 0x2222, 0x2223, 0x2224, 0x2225, 0x2226, 0x2227,
+ 0x2228, 0x2229, 0x222a, 0x222b, 0x222c, 0x222d, 0x222e, 0x222f,
+ 0x2230, 0x2231, 0x2232, 0x2233, 0x2234, 0x2235, 0x2236, 0x2237,
+ 0x2238, 0x2239, 0x223a, 0x223b, 0x223c, 0x223d, 0x223e, 0x223f,
+ 0x2240, 0x2241, 0x2242, 0x2243, 0x2244, 0x2245, 0x2246, 0x2247, /* 0x2240 */
+ 0x2248, 0x2249, 0x224a, 0x224b, 0x224c, 0x224d, 0x224e, 0x224f,
+ 0x2250, 0x2251, 0x2252, 0x2253, 0x2254, 0x2255, 0x2256, 0x2257,
+ 0x2258, 0x2259, 0x225a, 0x225b, 0x225c, 0x225d, 0x225e, 0x225f,
+ 0x2260, 0x2261, 0x2262, 0x2263, 0x2264, 0x2265, 0x2266, 0x2267,
+ 0x2268, 0x2269, 0x226a, 0x226b, 0x226c, 0x226d, 0x226e, 0x226f,
+ 0x2270, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 0x2276, 0x2277,
+ 0x2278, 0x2279, 0x227a, 0x227b, 0x227c, 0x227d, 0x227e, 0x227f,
+ 0x2280, 0x2281, 0x2282, 0x2283, 0x2284, 0x2285, 0x2286, 0x2287, /* 0x2280 */
+ 0x2288, 0x2289, 0x228a, 0x228b, 0x228c, 0x228d, 0x228e, 0x228f,
+ 0x2290, 0x2291, 0x2292, 0x2293, 0x2294, 0x2295, 0x2296, 0x2297,
+ 0x2298, 0x2299, 0x229a, 0x229b, 0x229c, 0x229d, 0x229e, 0x229f,
+ 0x22a0, 0x22a1, 0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x22a6, 0x22a7,
+ 0x22a8, 0x22a9, 0x22aa, 0x22ab, 0x22ac, 0x22ad, 0x22ae, 0x22af,
+ 0x22b0, 0x22b1, 0x22b2, 0x22b3, 0x22b4, 0x22b5, 0x22b6, 0x22b7,
+ 0x22b8, 0x22b9, 0x22ba, 0x22bb, 0x22bc, 0x22bd, 0x22be, 0x22bf,
+ 0x22c0, 0x22c1, 0x22c2, 0x22c3, 0x22c4, 0x22c5, 0x22c6, 0x22c7, /* 0x22c0 */
+ 0x22c8, 0x22c9, 0x22ca, 0x22cb, 0x22cc, 0x22cd, 0x22ce, 0x22cf,
+ 0x22d0, 0x22d1, 0x22d2, 0x22d3, 0x22d4, 0x22d5, 0x22d6, 0x22d7,
+ 0x22d8, 0x22d9, 0x22da, 0x22db, 0x22dc, 0x22dd, 0x22de, 0x22df,
+ 0x22e0, 0x22e1, 0x22e2, 0x22e3, 0x22e4, 0x22e5, 0x22e6, 0x22e7,
+ 0x22e8, 0x22e9, 0x22ea, 0x22eb, 0x22ec, 0x22ed, 0x22ee, 0x22ef,
+ 0x22f0, 0x22f1, 0x22f2, 0x22f3, 0x22f4, 0x22f5, 0x22f6, 0x22f7,
+ 0x22f8, 0x22f9, 0x22fa, 0x22fb, 0x22fc, 0x22fd, 0x22fe, 0x22ff,
+ 0x2300, 0x2301, 0x2302, 0x2303, 0x2304, 0x2305, 0x2306, 0x2307, /* 0x2300 */
+ 0x2308, 0x2309, 0x230a, 0x230b, 0x230c, 0x230d, 0x230e, 0x230f,
+ 0x2310, 0x2311, 0x2312, 0x2313, 0x2314, 0x2315, 0x2316, 0x2317,
+ 0x2318, 0x2319, 0x231a, 0x231b, 0x231c, 0x231d, 0x231e, 0x231f,
+ 0x2320, 0x2321, 0x2322, 0x2323, 0x2324, 0x2325, 0x2326, 0x2327,
+ 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d, 0x232e, 0x232f,
+ 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337,
+ 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d, 0x233e, 0x233f,
+ 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, /* 0x2340 */
+ 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f,
+ 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357,
+ 0x2358, 0x2359, 0x235a, 0x235b, 0x235c, 0x235d, 0x235e, 0x235f,
+ 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367,
+ 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f,
+ 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377,
+ 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d, 0x237e, 0x237f,
+ 0x2380, 0x2381, 0x2382, 0x2383, 0x2384, 0x2385, 0x2386, 0x2387, /* 0x2380 */
+ 0x2388, 0x2389, 0x238a, 0x238b, 0x238c, 0x238d, 0x238e, 0x238f,
+ 0x2390, 0x2391, 0x2392, 0x2393, 0x2394, 0x2395, 0x2396, 0x2397,
+ 0x2398, 0x2399, 0x239a, 0x239b, 0x239c, 0x239d, 0x239e, 0x239f,
+ 0x23a0, 0x23a1, 0x23a2, 0x23a3, 0x23a4, 0x23a5, 0x23a6, 0x23a7,
+ 0x23a8, 0x23a9, 0x23aa, 0x23ab, 0x23ac, 0x23ad, 0x23ae, 0x23af,
+ 0x23b0, 0x23b1, 0x23b2, 0x23b3, 0x23b4, 0x23b5, 0x23b6, 0x23b7,
+ 0x23b8, 0x23b9, 0x23ba, 0x23bb, 0x23bc, 0x23bd, 0x23be, 0x23bf,
+ 0x23c0, 0x23c1, 0x23c2, 0x23c3, 0x23c4, 0x23c5, 0x23c6, 0x23c7, /* 0x23c0 */
+ 0x23c8, 0x23c9, 0x23ca, 0x23cb, 0x23cc, 0x23cd, 0x23ce, 0x23cf,
+ 0x23d0, 0x23d1, 0x23d2, 0x23d3, 0x23d4, 0x23d5, 0x23d6, 0x23d7,
+ 0x23d8, 0x23d9, 0x23da, 0x23db, 0x23dc, 0x23dd, 0x23de, 0x23df,
+ 0x23e0, 0x23e1, 0x23e2, 0x23e3, 0x23e4, 0x23e5, 0x23e6, 0x23e7,
+ 0x23e8, 0x23e9, 0x23ea, 0x23eb, 0x23ec, 0x23ed, 0x23ee, 0x23ef,
+ 0x23f0, 0x23f1, 0x23f2, 0x23f3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, /* 0x2400 */
+ 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f,
+ 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417,
+ 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f,
+ 0x2420, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, /* 0x2440 */
+ 0x2448, 0x2449, 0x244a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
+ 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f,
+ 0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477,
+ 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f,
+ 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, /* 0x2480 */
+ 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f,
+ 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497,
+ 0x2498, 0x2499, 0x249a, 0x249b, 0x249c, 0x249d, 0x249e, 0x249f,
+ 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7,
+ 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af,
+ 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x24d0, 0x24d1,
+ 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9,
+ 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, /* 0x24c0 */
+ 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9,
+ 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7,
+ 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df,
+ 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7,
+ 0x24e8, 0x24e9, 0x24ea, 0x24eb, 0x24ec, 0x24ed, 0x24ee, 0x24ef,
+ 0x24f0, 0x24f1, 0x24f2, 0x24f3, 0x24f4, 0x24f5, 0x24f6, 0x24f7,
+ 0x24f8, 0x24f9, 0x24fa, 0x24fb, 0x24fc, 0x24fd, 0x24fe, 0x24ff,
+ 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, 0x2505, 0x2506, 0x2507, /* 0x2500 */
+ 0x2508, 0x2509, 0x250a, 0x250b, 0x250c, 0x250d, 0x250e, 0x250f,
+ 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, 0x2515, 0x2516, 0x2517,
+ 0x2518, 0x2519, 0x251a, 0x251b, 0x251c, 0x251d, 0x251e, 0x251f,
+ 0x2520, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527,
+ 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f,
+ 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537,
+ 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f,
+ 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, /* 0x2540 */
+ 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f,
+ 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557,
+ 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, 0x255f,
+ 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567,
+ 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f,
+ 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2577,
+ 0x2578, 0x2579, 0x257a, 0x257b, 0x257c, 0x257d, 0x257e, 0x257f,
+ 0x2580, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, /* 0x2580 */
+ 0x2588, 0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f,
+ 0x2590, 0x2591, 0x2592, 0x2593, 0x2594, 0x2595, 0x2596, 0x2597,
+ 0x2598, 0x2599, 0x259a, 0x259b, 0x259c, 0x259d, 0x259e, 0x259f,
+ 0x25a0, 0x25a1, 0x25a2, 0x25a3, 0x25a4, 0x25a5, 0x25a6, 0x25a7,
+ 0x25a8, 0x25a9, 0x25aa, 0x25ab, 0x25ac, 0x25ad, 0x25ae, 0x25af,
+ 0x25b0, 0x25b1, 0x25b2, 0x25b3, 0x25b4, 0x25b5, 0x25b6, 0x25b7,
+ 0x25b8, 0x25b9, 0x25ba, 0x25bb, 0x25bc, 0x25bd, 0x25be, 0x25bf,
+ 0x25c0, 0x25c1, 0x25c2, 0x25c3, 0x25c4, 0x25c5, 0x25c6, 0x25c7, /* 0x25c0 */
+ 0x25c8, 0x25c9, 0x25ca, 0x25cb, 0x25cc, 0x25cd, 0x25ce, 0x25cf,
+ 0x25d0, 0x25d1, 0x25d2, 0x25d3, 0x25d4, 0x25d5, 0x25d6, 0x25d7,
+ 0x25d8, 0x25d9, 0x25da, 0x25db, 0x25dc, 0x25dd, 0x25de, 0x25df,
+ 0x25e0, 0x25e1, 0x25e2, 0x25e3, 0x25e4, 0x25e5, 0x25e6, 0x25e7,
+ 0x25e8, 0x25e9, 0x25ea, 0x25eb, 0x25ec, 0x25ed, 0x25ee, 0x25ef,
+ 0x25f0, 0x25f1, 0x25f2, 0x25f3, 0x25f4, 0x25f5, 0x25f6, 0x25f7,
+ 0x25f8, 0x25f9, 0x25fa, 0x25fb, 0x25fc, 0x25fd, 0x25fe, 0x25ff,
+ 0x2600, 0x2601, 0x2602, 0x2603, 0x2604, 0x2605, 0x2606, 0x2607, /* 0x2600 */
+ 0x2608, 0x2609, 0x260a, 0x260b, 0x260c, 0x260d, 0x260e, 0x260f,
+ 0x2610, 0x2611, 0x2612, 0x2613, 0x2614, 0x2615, 0x2616, 0x2617,
+ 0x2618, 0x2619, 0x261a, 0x261b, 0x261c, 0x261d, 0x261e, 0x261f,
+ 0x2620, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627,
+ 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, 0x262e, 0x262f,
+ 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637,
+ 0x2638, 0x2639, 0x263a, 0x263b, 0x263c, 0x263d, 0x263e, 0x263f,
+ 0x2640, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, /* 0x2640 */
+ 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f,
+ 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, 0x2657,
+ 0x2658, 0x2659, 0x265a, 0x265b, 0x265c, 0x265d, 0x265e, 0x265f,
+ 0x2660, 0x2661, 0x2662, 0x2663, 0x2664, 0x2665, 0x2666, 0x2667,
+ 0x2668, 0x2669, 0x266a, 0x266b, 0x266c, 0x266d, 0x266e, 0x266f,
+ 0x2670, 0x2671, 0x2672, 0x2673, 0x2674, 0x2675, 0x2676, 0x2677,
+ 0x2678, 0x2679, 0x267a, 0x267b, 0x267c, 0x267d, 0x267e, 0x267f,
+ 0x2680, 0x2681, 0x2682, 0x2683, 0x2684, 0x2685, 0x2686, 0x2687, /* 0x2680 */
+ 0x2688, 0x2689, 0x268a, 0x268b, 0x268c, 0x268d, 0x268e, 0x268f,
+ 0x2690, 0x2691, 0x2692, 0x2693, 0x2694, 0x2695, 0x2696, 0x2697,
+ 0x2698, 0x2699, 0x269a, 0x269b, 0x269c, 0x269d, 0x269e, 0x269f,
+ 0x26a0, 0x26a1, 0x26a2, 0x26a3, 0x26a4, 0x26a5, 0x26a6, 0x26a7,
+ 0x26a8, 0x26a9, 0x26aa, 0x26ab, 0x26ac, 0x26ad, 0x26ae, 0x26af,
+ 0x26b0, 0x26b1, 0x26b2, 0x26b3, 0x26b4, 0x26b5, 0x26b6, 0x26b7,
+ 0x26b8, 0x26b9, 0x26ba, 0x26bb, 0x26bc, 0x26bd, 0x26be, 0x26bf,
+ 0x26c0, 0x26c1, 0x26c2, 0x26c3, 0x26c4, 0x26c5, 0x26c6, 0x26c7, /* 0x26c0 */
+ 0x26c8, 0x26c9, 0x26ca, 0x26cb, 0x26cc, 0x26cd, 0x26ce, 0x26cf,
+ 0x26d0, 0x26d1, 0x26d2, 0x26d3, 0x26d4, 0x26d5, 0x26d6, 0x26d7,
+ 0x26d8, 0x26d9, 0x26da, 0x26db, 0x26dc, 0x26dd, 0x26de, 0x26df,
+ 0x26e0, 0x26e1, 0x26e2, 0x26e3, 0x26e4, 0x26e5, 0x26e6, 0x26e7,
+ 0x26e8, 0x26e9, 0x26ea, 0x26eb, 0x26ec, 0x26ed, 0x26ee, 0x26ef,
+ 0x26f0, 0x26f1, 0x26f2, 0x26f3, 0x26f4, 0x26f5, 0x26f6, 0x26f7,
+ 0x26f8, 0x26f9, 0x26fa, 0x26fb, 0x26fc, 0x26fd, 0x26fe, 0x26ff,
+ 0x0000, 0x2701, 0x2702, 0x2703, 0x2704, 0x2705, 0x2706, 0x2707, /* 0x2700 */
+ 0x2708, 0x2709, 0x270a, 0x270b, 0x270c, 0x270d, 0x270e, 0x270f,
+ 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717,
+ 0x2718, 0x2719, 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f,
+ 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727,
+ 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f,
+ 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737,
+ 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f,
+ 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, /* 0x2740 */
+ 0x2748, 0x2749, 0x274a, 0x274b, 0x274c, 0x274d, 0x274e, 0x274f,
+ 0x2750, 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2757,
+ 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 0x275f,
+ 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767,
+ 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, 0x276e, 0x276f,
+ 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776, 0x2777,
+ 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e, 0x277f,
+ 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, /* 0x2780 */
+ 0x2788, 0x2789, 0x278a, 0x278b, 0x278c, 0x278d, 0x278e, 0x278f,
+ 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2795, 0x2796, 0x2797,
+ 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e, 0x279f,
+ 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7,
+ 0x27a8, 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af,
+ 0x27b0, 0x27b1, 0x27b2, 0x27b3, 0x27b4, 0x27b5, 0x27b6, 0x27b7,
+ 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd, 0x27be, 0x27bf,
+ 0x27c0, 0x27c1, 0x27c2, 0x27c3, 0x27c4, 0x27c5, 0x27c6, 0x27c7, /* 0x27c0 */
+ 0x27c8, 0x27c9, 0x27ca, 0x27cb, 0x27cc, 0x27cd, 0x27ce, 0x27cf,
+ 0x27d0, 0x27d1, 0x27d2, 0x27d3, 0x27d4, 0x27d5, 0x27d6, 0x27d7,
+ 0x27d8, 0x27d9, 0x27da, 0x27db, 0x27dc, 0x27dd, 0x27de, 0x27df,
+ 0x27e0, 0x27e1, 0x27e2, 0x27e3, 0x27e4, 0x27e5, 0x27e6, 0x27e7,
+ 0x27e8, 0x27e9, 0x27ea, 0x27eb, 0x27ec, 0x27ed, 0x27ee, 0x27ef,
+ 0x27f0, 0x27f1, 0x27f2, 0x27f3, 0x27f4, 0x27f5, 0x27f6, 0x27f7,
+ 0x27f8, 0x27f9, 0x27fa, 0x27fb, 0x27fc, 0x27fd, 0x27fe, 0x27ff,
+ 0x2800, 0x2801, 0x2802, 0x2803, 0x2804, 0x2805, 0x2806, 0x2807, /* 0x2800 */
+ 0x2808, 0x2809, 0x280a, 0x280b, 0x280c, 0x280d, 0x280e, 0x280f,
+ 0x2810, 0x2811, 0x2812, 0x2813, 0x2814, 0x2815, 0x2816, 0x2817,
+ 0x2818, 0x2819, 0x281a, 0x281b, 0x281c, 0x281d, 0x281e, 0x281f,
+ 0x2820, 0x2821, 0x2822, 0x2823, 0x2824, 0x2825, 0x2826, 0x2827,
+ 0x2828, 0x2829, 0x282a, 0x282b, 0x282c, 0x282d, 0x282e, 0x282f,
+ 0x2830, 0x2831, 0x2832, 0x2833, 0x2834, 0x2835, 0x2836, 0x2837,
+ 0x2838, 0x2839, 0x283a, 0x283b, 0x283c, 0x283d, 0x283e, 0x283f,
+ 0x2840, 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, 0x2846, 0x2847, /* 0x2840 */
+ 0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x284d, 0x284e, 0x284f,
+ 0x2850, 0x2851, 0x2852, 0x2853, 0x2854, 0x2855, 0x2856, 0x2857,
+ 0x2858, 0x2859, 0x285a, 0x285b, 0x285c, 0x285d, 0x285e, 0x285f,
+ 0x2860, 0x2861, 0x2862, 0x2863, 0x2864, 0x2865, 0x2866, 0x2867,
+ 0x2868, 0x2869, 0x286a, 0x286b, 0x286c, 0x286d, 0x286e, 0x286f,
+ 0x2870, 0x2871, 0x2872, 0x2873, 0x2874, 0x2875, 0x2876, 0x2877,
+ 0x2878, 0x2879, 0x287a, 0x287b, 0x287c, 0x287d, 0x287e, 0x287f,
+ 0x2880, 0x2881, 0x2882, 0x2883, 0x2884, 0x2885, 0x2886, 0x2887, /* 0x2880 */
+ 0x2888, 0x2889, 0x288a, 0x288b, 0x288c, 0x288d, 0x288e, 0x288f,
+ 0x2890, 0x2891, 0x2892, 0x2893, 0x2894, 0x2895, 0x2896, 0x2897,
+ 0x2898, 0x2899, 0x289a, 0x289b, 0x289c, 0x289d, 0x289e, 0x289f,
+ 0x28a0, 0x28a1, 0x28a2, 0x28a3, 0x28a4, 0x28a5, 0x28a6, 0x28a7,
+ 0x28a8, 0x28a9, 0x28aa, 0x28ab, 0x28ac, 0x28ad, 0x28ae, 0x28af,
+ 0x28b0, 0x28b1, 0x28b2, 0x28b3, 0x28b4, 0x28b5, 0x28b6, 0x28b7,
+ 0x28b8, 0x28b9, 0x28ba, 0x28bb, 0x28bc, 0x28bd, 0x28be, 0x28bf,
+ 0x28c0, 0x28c1, 0x28c2, 0x28c3, 0x28c4, 0x28c5, 0x28c6, 0x28c7, /* 0x28c0 */
+ 0x28c8, 0x28c9, 0x28ca, 0x28cb, 0x28cc, 0x28cd, 0x28ce, 0x28cf,
+ 0x28d0, 0x28d1, 0x28d2, 0x28d3, 0x28d4, 0x28d5, 0x28d6, 0x28d7,
+ 0x28d8, 0x28d9, 0x28da, 0x28db, 0x28dc, 0x28dd, 0x28de, 0x28df,
+ 0x28e0, 0x28e1, 0x28e2, 0x28e3, 0x28e4, 0x28e5, 0x28e6, 0x28e7,
+ 0x28e8, 0x28e9, 0x28ea, 0x28eb, 0x28ec, 0x28ed, 0x28ee, 0x28ef,
+ 0x28f0, 0x28f1, 0x28f2, 0x28f3, 0x28f4, 0x28f5, 0x28f6, 0x28f7,
+ 0x28f8, 0x28f9, 0x28fa, 0x28fb, 0x28fc, 0x28fd, 0x28fe, 0x28ff,
+ 0x2900, 0x2901, 0x2902, 0x2903, 0x2904, 0x2905, 0x2906, 0x2907, /* 0x2900 */
+ 0x2908, 0x2909, 0x290a, 0x290b, 0x290c, 0x290d, 0x290e, 0x290f,
+ 0x2910, 0x2911, 0x2912, 0x2913, 0x2914, 0x2915, 0x2916, 0x2917,
+ 0x2918, 0x2919, 0x291a, 0x291b, 0x291c, 0x291d, 0x291e, 0x291f,
+ 0x2920, 0x2921, 0x2922, 0x2923, 0x2924, 0x2925, 0x2926, 0x2927,
+ 0x2928, 0x2929, 0x292a, 0x292b, 0x292c, 0x292d, 0x292e, 0x292f,
+ 0x2930, 0x2931, 0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937,
+ 0x2938, 0x2939, 0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f,
+ 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, /* 0x2940 */
+ 0x2948, 0x2949, 0x294a, 0x294b, 0x294c, 0x294d, 0x294e, 0x294f,
+ 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957,
+ 0x2958, 0x2959, 0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f,
+ 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x2967,
+ 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f,
+ 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, 0x2975, 0x2976, 0x2977,
+ 0x2978, 0x2979, 0x297a, 0x297b, 0x297c, 0x297d, 0x297e, 0x297f,
+ 0x2980, 0x2981, 0x2982, 0x2983, 0x2984, 0x2985, 0x2986, 0x2987, /* 0x2980 */
+ 0x2988, 0x2989, 0x298a, 0x298b, 0x298c, 0x298d, 0x298e, 0x298f,
+ 0x2990, 0x2991, 0x2992, 0x2993, 0x2994, 0x2995, 0x2996, 0x2997,
+ 0x2998, 0x2999, 0x299a, 0x299b, 0x299c, 0x299d, 0x299e, 0x299f,
+ 0x29a0, 0x29a1, 0x29a2, 0x29a3, 0x29a4, 0x29a5, 0x29a6, 0x29a7,
+ 0x29a8, 0x29a9, 0x29aa, 0x29ab, 0x29ac, 0x29ad, 0x29ae, 0x29af,
+ 0x29b0, 0x29b1, 0x29b2, 0x29b3, 0x29b4, 0x29b5, 0x29b6, 0x29b7,
+ 0x29b8, 0x29b9, 0x29ba, 0x29bb, 0x29bc, 0x29bd, 0x29be, 0x29bf,
+ 0x29c0, 0x29c1, 0x29c2, 0x29c3, 0x29c4, 0x29c5, 0x29c6, 0x29c7, /* 0x29c0 */
+ 0x29c8, 0x29c9, 0x29ca, 0x29cb, 0x29cc, 0x29cd, 0x29ce, 0x29cf,
+ 0x29d0, 0x29d1, 0x29d2, 0x29d3, 0x29d4, 0x29d5, 0x29d6, 0x29d7,
+ 0x29d8, 0x29d9, 0x29da, 0x29db, 0x29dc, 0x29dd, 0x29de, 0x29df,
+ 0x29e0, 0x29e1, 0x29e2, 0x29e3, 0x29e4, 0x29e5, 0x29e6, 0x29e7,
+ 0x29e8, 0x29e9, 0x29ea, 0x29eb, 0x29ec, 0x29ed, 0x29ee, 0x29ef,
+ 0x29f0, 0x29f1, 0x29f2, 0x29f3, 0x29f4, 0x29f5, 0x29f6, 0x29f7,
+ 0x29f8, 0x29f9, 0x29fa, 0x29fb, 0x29fc, 0x29fd, 0x29fe, 0x29ff,
+ 0x2a00, 0x2a01, 0x2a02, 0x2a03, 0x2a04, 0x2a05, 0x2a06, 0x2a07, /* 0x2a00 */
+ 0x2a08, 0x2a09, 0x2a0a, 0x2a0b, 0x2a0c, 0x2a0d, 0x2a0e, 0x2a0f,
+ 0x2a10, 0x2a11, 0x2a12, 0x2a13, 0x2a14, 0x2a15, 0x2a16, 0x2a17,
+ 0x2a18, 0x2a19, 0x2a1a, 0x2a1b, 0x2a1c, 0x2a1d, 0x2a1e, 0x2a1f,
+ 0x2a20, 0x2a21, 0x2a22, 0x2a23, 0x2a24, 0x2a25, 0x2a26, 0x2a27,
+ 0x2a28, 0x2a29, 0x2a2a, 0x2a2b, 0x2a2c, 0x2a2d, 0x2a2e, 0x2a2f,
+ 0x2a30, 0x2a31, 0x2a32, 0x2a33, 0x2a34, 0x2a35, 0x2a36, 0x2a37,
+ 0x2a38, 0x2a39, 0x2a3a, 0x2a3b, 0x2a3c, 0x2a3d, 0x2a3e, 0x2a3f,
+ 0x2a40, 0x2a41, 0x2a42, 0x2a43, 0x2a44, 0x2a45, 0x2a46, 0x2a47, /* 0x2a40 */
+ 0x2a48, 0x2a49, 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f,
+ 0x2a50, 0x2a51, 0x2a52, 0x2a53, 0x2a54, 0x2a55, 0x2a56, 0x2a57,
+ 0x2a58, 0x2a59, 0x2a5a, 0x2a5b, 0x2a5c, 0x2a5d, 0x2a5e, 0x2a5f,
+ 0x2a60, 0x2a61, 0x2a62, 0x2a63, 0x2a64, 0x2a65, 0x2a66, 0x2a67,
+ 0x2a68, 0x2a69, 0x2a6a, 0x2a6b, 0x2a6c, 0x2a6d, 0x2a6e, 0x2a6f,
+ 0x2a70, 0x2a71, 0x2a72, 0x2a73, 0x2a74, 0x2a75, 0x2a76, 0x2a77,
+ 0x2a78, 0x2a79, 0x2a7a, 0x2a7b, 0x2a7c, 0x2a7d, 0x2a7e, 0x2a7f,
+ 0x2a80, 0x2a81, 0x2a82, 0x2a83, 0x2a84, 0x2a85, 0x2a86, 0x2a87, /* 0x2a80 */
+ 0x2a88, 0x2a89, 0x2a8a, 0x2a8b, 0x2a8c, 0x2a8d, 0x2a8e, 0x2a8f,
+ 0x2a90, 0x2a91, 0x2a92, 0x2a93, 0x2a94, 0x2a95, 0x2a96, 0x2a97,
+ 0x2a98, 0x2a99, 0x2a9a, 0x2a9b, 0x2a9c, 0x2a9d, 0x2a9e, 0x2a9f,
+ 0x2aa0, 0x2aa1, 0x2aa2, 0x2aa3, 0x2aa4, 0x2aa5, 0x2aa6, 0x2aa7,
+ 0x2aa8, 0x2aa9, 0x2aaa, 0x2aab, 0x2aac, 0x2aad, 0x2aae, 0x2aaf,
+ 0x2ab0, 0x2ab1, 0x2ab2, 0x2ab3, 0x2ab4, 0x2ab5, 0x2ab6, 0x2ab7,
+ 0x2ab8, 0x2ab9, 0x2aba, 0x2abb, 0x2abc, 0x2abd, 0x2abe, 0x2abf,
+ 0x2ac0, 0x2ac1, 0x2ac2, 0x2ac3, 0x2ac4, 0x2ac5, 0x2ac6, 0x2ac7, /* 0x2ac0 */
+ 0x2ac8, 0x2ac9, 0x2aca, 0x2acb, 0x2acc, 0x2acd, 0x2ace, 0x2acf,
+ 0x2ad0, 0x2ad1, 0x2ad2, 0x2ad3, 0x2ad4, 0x2ad5, 0x2ad6, 0x2ad7,
+ 0x2ad8, 0x2ad9, 0x2ada, 0x2adb, 0x2adc, 0x2add, 0x2ade, 0x2adf,
+ 0x2ae0, 0x2ae1, 0x2ae2, 0x2ae3, 0x2ae4, 0x2ae5, 0x2ae6, 0x2ae7,
+ 0x2ae8, 0x2ae9, 0x2aea, 0x2aeb, 0x2aec, 0x2aed, 0x2aee, 0x2aef,
+ 0x2af0, 0x2af1, 0x2af2, 0x2af3, 0x2af4, 0x2af5, 0x2af6, 0x2af7,
+ 0x2af8, 0x2af9, 0x2afa, 0x2afb, 0x2afc, 0x2afd, 0x2afe, 0x2aff,
+ 0x2b00, 0x2b01, 0x2b02, 0x2b03, 0x2b04, 0x2b05, 0x2b06, 0x2b07, /* 0x2b00 */
+ 0x2b08, 0x2b09, 0x2b0a, 0x2b0b, 0x2b0c, 0x2b0d, 0x2b0e, 0x2b0f,
+ 0x2b10, 0x2b11, 0x2b12, 0x2b13, 0x2b14, 0x2b15, 0x2b16, 0x2b17,
+ 0x2b18, 0x2b19, 0x2b1a, 0x2b1b, 0x2b1c, 0x2b1d, 0x2b1e, 0x2b1f,
+ 0x2b20, 0x2b21, 0x2b22, 0x2b23, 0x2b24, 0x2b25, 0x2b26, 0x2b27,
+ 0x2b28, 0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e, 0x2b2f,
+ 0x2b30, 0x2b31, 0x2b32, 0x2b33, 0x2b34, 0x2b35, 0x2b36, 0x2b37,
+ 0x2b38, 0x2b39, 0x2b3a, 0x2b3b, 0x2b3c, 0x2b3d, 0x2b3e, 0x2b3f,
+ 0x2b40, 0x2b41, 0x2b42, 0x2b43, 0x2b44, 0x2b45, 0x2b46, 0x2b47, /* 0x2b40 */
+ 0x2b48, 0x2b49, 0x2b4a, 0x2b4b, 0x2b4c, 0x0000, 0x0000, 0x0000,
+ 0x2b50, 0x2b51, 0x2b52, 0x2b53, 0x2b54, 0x2b55, 0x2b56, 0x2b57,
+ 0x2b58, 0x2b59, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, /* 0x2c00 */
+ 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f,
+ 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47,
+ 0x2c48, 0x2c49, 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f,
+ 0x2c50, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c57,
+ 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x0000,
+ 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37,
+ 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f,
+ 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c44, 0x2c45, 0x2c46, 0x2c47, /* 0x2c40 */
+ 0x2c48, 0x2c49, 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4d, 0x2c4e, 0x2c4f,
+ 0x2c50, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c57,
+ 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x0000,
+ 0x2c61, 0x2c61, 0x026b, 0x1d7d, 0x027d, 0x2c65, 0x2c66, 0x2c68,
+ 0x2c68, 0x2c6a, 0x2c6a, 0x2c6c, 0x2c6c, 0x0251, 0x0271, 0x0250,
+ 0x0252, 0x2c71, 0x2c73, 0x2c73, 0x2c74, 0x2c76, 0x2c76, 0x2c77,
+ 0x2c78, 0x2c79, 0x2c7a, 0x2c7b, 0x2c7c, 0x2c7d, 0x023f, 0x0240,
+ 0x2c81, 0x2c81, 0x2c83, 0x2c83, 0x2c85, 0x2c85, 0x2c87, 0x2c87, /* 0x2c80 */
+ 0x2c89, 0x2c89, 0x2c8b, 0x2c8b, 0x2c8d, 0x2c8d, 0x2c8f, 0x2c8f,
+ 0x2c91, 0x2c91, 0x2c93, 0x2c93, 0x2c95, 0x2c95, 0x2c97, 0x2c97,
+ 0x2c99, 0x2c99, 0x2c9b, 0x2c9b, 0x2c9d, 0x2c9d, 0x2c9f, 0x2c9f,
+ 0x2ca1, 0x2ca1, 0x2ca3, 0x2ca3, 0x2ca5, 0x2ca5, 0x2ca7, 0x2ca7,
+ 0x2ca9, 0x2ca9, 0x2cab, 0x2cab, 0x2cad, 0x2cad, 0x2caf, 0x2caf,
+ 0x2cb1, 0x2cb1, 0x2cb3, 0x2cb3, 0x2cb5, 0x2cb5, 0x2cb7, 0x2cb7,
+ 0x2cb9, 0x2cb9, 0x2cbb, 0x2cbb, 0x2cbd, 0x2cbd, 0x2cbf, 0x2cbf,
+ 0x2cc1, 0x2cc1, 0x2cc3, 0x2cc3, 0x2cc5, 0x2cc5, 0x2cc7, 0x2cc7, /* 0x2cc0 */
+ 0x2cc9, 0x2cc9, 0x2ccb, 0x2ccb, 0x2ccd, 0x2ccd, 0x2ccf, 0x2ccf,
+ 0x2cd1, 0x2cd1, 0x2cd3, 0x2cd3, 0x2cd5, 0x2cd5, 0x2cd7, 0x2cd7,
+ 0x2cd9, 0x2cd9, 0x2cdb, 0x2cdb, 0x2cdd, 0x2cdd, 0x2cdf, 0x2cdf,
+ 0x2ce1, 0x2ce1, 0x2ce3, 0x2ce3, 0x2ce4, 0x2ce5, 0x2ce6, 0x2ce7,
+ 0x2ce8, 0x2ce9, 0x2cea, 0x2cec, 0x2cec, 0x2cee, 0x2cee, 0x2cef,
+ 0x2cf0, 0x2cf1, 0x2cf3, 0x2cf3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2cf9, 0x2cfa, 0x2cfb, 0x2cfc, 0x2cfd, 0x2cfe, 0x2cff,
+ 0x2d00, 0x2d01, 0x2d02, 0x2d03, 0x2d04, 0x2d05, 0x2d06, 0x2d07, /* 0x2d00 */
+ 0x2d08, 0x2d09, 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0d, 0x2d0e, 0x2d0f,
+ 0x2d10, 0x2d11, 0x2d12, 0x2d13, 0x2d14, 0x2d15, 0x2d16, 0x2d17,
+ 0x2d18, 0x2d19, 0x2d1a, 0x2d1b, 0x2d1c, 0x2d1d, 0x2d1e, 0x2d1f,
+ 0x2d20, 0x2d21, 0x2d22, 0x2d23, 0x2d24, 0x2d25, 0x0000, 0x2d27,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d2d, 0x0000, 0x0000,
+ 0x2d30, 0x2d31, 0x2d32, 0x2d33, 0x2d34, 0x2d35, 0x2d36, 0x2d37,
+ 0x2d38, 0x2d39, 0x2d3a, 0x2d3b, 0x2d3c, 0x2d3d, 0x2d3e, 0x2d3f,
+ 0x2d40, 0x2d41, 0x2d42, 0x2d43, 0x2d44, 0x2d45, 0x2d46, 0x2d47, /* 0x2d40 */
+ 0x2d48, 0x2d49, 0x2d4a, 0x2d4b, 0x2d4c, 0x2d4d, 0x2d4e, 0x2d4f,
+ 0x2d50, 0x2d51, 0x2d52, 0x2d53, 0x2d54, 0x2d55, 0x2d56, 0x2d57,
+ 0x2d58, 0x2d59, 0x2d5a, 0x2d5b, 0x2d5c, 0x2d5d, 0x2d5e, 0x2d5f,
+ 0x2d60, 0x2d61, 0x2d62, 0x2d63, 0x2d64, 0x2d65, 0x2d66, 0x2d67,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d6f,
+ 0x2d70, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2d7f,
+ 0x2d80, 0x2d81, 0x2d82, 0x2d83, 0x2d84, 0x2d85, 0x2d86, 0x2d87, /* 0x2d80 */
+ 0x2d88, 0x2d89, 0x2d8a, 0x2d8b, 0x2d8c, 0x2d8d, 0x2d8e, 0x2d8f,
+ 0x2d90, 0x2d91, 0x2d92, 0x2d93, 0x2d94, 0x2d95, 0x2d96, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2da0, 0x2da1, 0x2da2, 0x2da3, 0x2da4, 0x2da5, 0x2da6, 0x0000,
+ 0x2da8, 0x2da9, 0x2daa, 0x2dab, 0x2dac, 0x2dad, 0x2dae, 0x0000,
+ 0x2db0, 0x2db1, 0x2db2, 0x2db3, 0x2db4, 0x2db5, 0x2db6, 0x0000,
+ 0x2db8, 0x2db9, 0x2dba, 0x2dbb, 0x2dbc, 0x2dbd, 0x2dbe, 0x0000,
+ 0x2dc0, 0x2dc1, 0x2dc2, 0x2dc3, 0x2dc4, 0x2dc5, 0x2dc6, 0x0000, /* 0x2dc0 */
+ 0x2dc8, 0x2dc9, 0x2dca, 0x2dcb, 0x2dcc, 0x2dcd, 0x2dce, 0x0000,
+ 0x2dd0, 0x2dd1, 0x2dd2, 0x2dd3, 0x2dd4, 0x2dd5, 0x2dd6, 0x0000,
+ 0x2dd8, 0x2dd9, 0x2dda, 0x2ddb, 0x2ddc, 0x2ddd, 0x2dde, 0x0000,
+ 0x2de0, 0x2de1, 0x2de2, 0x2de3, 0x2de4, 0x2de5, 0x2de6, 0x2de7,
+ 0x2de8, 0x2de9, 0x2dea, 0x2deb, 0x2dec, 0x2ded, 0x2dee, 0x2def,
+ 0x2df0, 0x2df1, 0x2df2, 0x2df3, 0x2df4, 0x2df5, 0x2df6, 0x2df7,
+ 0x2df8, 0x2df9, 0x2dfa, 0x2dfb, 0x2dfc, 0x2dfd, 0x2dfe, 0x2dff,
+ 0x2e00, 0x2e01, 0x2e02, 0x2e03, 0x2e04, 0x2e05, 0x2e06, 0x2e07, /* 0x2e00 */
+ 0x2e08, 0x2e09, 0x2e0a, 0x2e0b, 0x2e0c, 0x2e0d, 0x2e0e, 0x2e0f,
+ 0x2e10, 0x2e11, 0x2e12, 0x2e13, 0x2e14, 0x2e15, 0x2e16, 0x2e17,
+ 0x2e18, 0x2e19, 0x2e1a, 0x2e1b, 0x2e1c, 0x2e1d, 0x2e1e, 0x2e1f,
+ 0x2e20, 0x2e21, 0x2e22, 0x2e23, 0x2e24, 0x2e25, 0x2e26, 0x2e27,
+ 0x2e28, 0x2e29, 0x2e2a, 0x2e2b, 0x2e2c, 0x2e2d, 0x2e2e, 0x2e2f,
+ 0x2e30, 0x2e31, 0x2e32, 0x2e33, 0x2e34, 0x2e35, 0x2e36, 0x2e37,
+ 0x2e38, 0x2e39, 0x2e3a, 0x2e3b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2e80, 0x2e81, 0x2e82, 0x2e83, 0x2e84, 0x2e85, 0x2e86, 0x2e87, /* 0x2e80 */
+ 0x2e88, 0x2e89, 0x2e8a, 0x2e8b, 0x2e8c, 0x2e8d, 0x2e8e, 0x2e8f,
+ 0x2e90, 0x2e91, 0x2e92, 0x2e93, 0x2e94, 0x2e95, 0x2e96, 0x2e97,
+ 0x2e98, 0x2e99, 0x0000, 0x2e9b, 0x2e9c, 0x2e9d, 0x2e9e, 0x2e9f,
+ 0x2ea0, 0x2ea1, 0x2ea2, 0x2ea3, 0x2ea4, 0x2ea5, 0x2ea6, 0x2ea7,
+ 0x2ea8, 0x2ea9, 0x2eaa, 0x2eab, 0x2eac, 0x2ead, 0x2eae, 0x2eaf,
+ 0x2eb0, 0x2eb1, 0x2eb2, 0x2eb3, 0x2eb4, 0x2eb5, 0x2eb6, 0x2eb7,
+ 0x2eb8, 0x2eb9, 0x2eba, 0x2ebb, 0x2ebc, 0x2ebd, 0x2ebe, 0x2ebf,
+ 0x2ec0, 0x2ec1, 0x2ec2, 0x2ec3, 0x2ec4, 0x2ec5, 0x2ec6, 0x2ec7, /* 0x2ec0 */
+ 0x2ec8, 0x2ec9, 0x2eca, 0x2ecb, 0x2ecc, 0x2ecd, 0x2ece, 0x2ecf,
+ 0x2ed0, 0x2ed1, 0x2ed2, 0x2ed3, 0x2ed4, 0x2ed5, 0x2ed6, 0x2ed7,
+ 0x2ed8, 0x2ed9, 0x2eda, 0x2edb, 0x2edc, 0x2edd, 0x2ede, 0x2edf,
+ 0x2ee0, 0x2ee1, 0x2ee2, 0x2ee3, 0x2ee4, 0x2ee5, 0x2ee6, 0x2ee7,
+ 0x2ee8, 0x2ee9, 0x2eea, 0x2eeb, 0x2eec, 0x2eed, 0x2eee, 0x2eef,
+ 0x2ef0, 0x2ef1, 0x2ef2, 0x2ef3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2f00, 0x2f01, 0x2f02, 0x2f03, 0x2f04, 0x2f05, 0x2f06, 0x2f07, /* 0x2f00 */
+ 0x2f08, 0x2f09, 0x2f0a, 0x2f0b, 0x2f0c, 0x2f0d, 0x2f0e, 0x2f0f,
+ 0x2f10, 0x2f11, 0x2f12, 0x2f13, 0x2f14, 0x2f15, 0x2f16, 0x2f17,
+ 0x2f18, 0x2f19, 0x2f1a, 0x2f1b, 0x2f1c, 0x2f1d, 0x2f1e, 0x2f1f,
+ 0x2f20, 0x2f21, 0x2f22, 0x2f23, 0x2f24, 0x2f25, 0x2f26, 0x2f27,
+ 0x2f28, 0x2f29, 0x2f2a, 0x2f2b, 0x2f2c, 0x2f2d, 0x2f2e, 0x2f2f,
+ 0x2f30, 0x2f31, 0x2f32, 0x2f33, 0x2f34, 0x2f35, 0x2f36, 0x2f37,
+ 0x2f38, 0x2f39, 0x2f3a, 0x2f3b, 0x2f3c, 0x2f3d, 0x2f3e, 0x2f3f,
+ 0x2f40, 0x2f41, 0x2f42, 0x2f43, 0x2f44, 0x2f45, 0x2f46, 0x2f47, /* 0x2f40 */
+ 0x2f48, 0x2f49, 0x2f4a, 0x2f4b, 0x2f4c, 0x2f4d, 0x2f4e, 0x2f4f,
+ 0x2f50, 0x2f51, 0x2f52, 0x2f53, 0x2f54, 0x2f55, 0x2f56, 0x2f57,
+ 0x2f58, 0x2f59, 0x2f5a, 0x2f5b, 0x2f5c, 0x2f5d, 0x2f5e, 0x2f5f,
+ 0x2f60, 0x2f61, 0x2f62, 0x2f63, 0x2f64, 0x2f65, 0x2f66, 0x2f67,
+ 0x2f68, 0x2f69, 0x2f6a, 0x2f6b, 0x2f6c, 0x2f6d, 0x2f6e, 0x2f6f,
+ 0x2f70, 0x2f71, 0x2f72, 0x2f73, 0x2f74, 0x2f75, 0x2f76, 0x2f77,
+ 0x2f78, 0x2f79, 0x2f7a, 0x2f7b, 0x2f7c, 0x2f7d, 0x2f7e, 0x2f7f,
+ 0x2f80, 0x2f81, 0x2f82, 0x2f83, 0x2f84, 0x2f85, 0x2f86, 0x2f87, /* 0x2f80 */
+ 0x2f88, 0x2f89, 0x2f8a, 0x2f8b, 0x2f8c, 0x2f8d, 0x2f8e, 0x2f8f,
+ 0x2f90, 0x2f91, 0x2f92, 0x2f93, 0x2f94, 0x2f95, 0x2f96, 0x2f97,
+ 0x2f98, 0x2f99, 0x2f9a, 0x2f9b, 0x2f9c, 0x2f9d, 0x2f9e, 0x2f9f,
+ 0x2fa0, 0x2fa1, 0x2fa2, 0x2fa3, 0x2fa4, 0x2fa5, 0x2fa6, 0x2fa7,
+ 0x2fa8, 0x2fa9, 0x2faa, 0x2fab, 0x2fac, 0x2fad, 0x2fae, 0x2faf,
+ 0x2fb0, 0x2fb1, 0x2fb2, 0x2fb3, 0x2fb4, 0x2fb5, 0x2fb6, 0x2fb7,
+ 0x2fb8, 0x2fb9, 0x2fba, 0x2fbb, 0x2fbc, 0x2fbd, 0x2fbe, 0x2fbf,
+ 0x2fc0, 0x2fc1, 0x2fc2, 0x2fc3, 0x2fc4, 0x2fc5, 0x2fc6, 0x2fc7, /* 0x2fc0 */
+ 0x2fc8, 0x2fc9, 0x2fca, 0x2fcb, 0x2fcc, 0x2fcd, 0x2fce, 0x2fcf,
+ 0x2fd0, 0x2fd1, 0x2fd2, 0x2fd3, 0x2fd4, 0x2fd5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x2ff0, 0x2ff1, 0x2ff2, 0x2ff3, 0x2ff4, 0x2ff5, 0x2ff6, 0x2ff7,
+ 0x2ff8, 0x2ff9, 0x2ffa, 0x2ffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x3000, 0x3001, 0x3002, 0x3003, 0x3004, 0x3005, 0x3006, 0x3007, /* 0x3000 */
+ 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f,
+ 0x3010, 0x3011, 0x3012, 0x3013, 0x3014, 0x3015, 0x3016, 0x3017,
+ 0x3018, 0x3019, 0x301a, 0x301b, 0x301c, 0x301d, 0x301e, 0x301f,
+ 0x3020, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
+ 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e, 0x302f,
+ 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037,
+ 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e, 0x303f,
+ 0x0000, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, /* 0x3040 */
+ 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f,
+ 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057,
+ 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f,
+ 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
+ 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f,
+ 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077,
+ 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f,
+ 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, /* 0x3080 */
+ 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f,
+ 0x3090, 0x3091, 0x3092, 0x3093, 0x3094, 0x3095, 0x3096, 0x0000,
+ 0x0000, 0x3099, 0x309a, 0x309b, 0x309c, 0x309d, 0x309e, 0x309f,
+ 0x30a0, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7,
+ 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af,
+ 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
+ 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf,
+ 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, /* 0x30c0 */
+ 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
+ 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7,
+ 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df,
+ 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7,
+ 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef,
+ 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x30f7,
+ 0x30f8, 0x30f9, 0x30fa, 0x30fb, 0x30fc, 0x30fd, 0x30fe, 0x30ff,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3105, 0x3106, 0x3107, /* 0x3100 */
+ 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f,
+ 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117,
+ 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f,
+ 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127,
+ 0x3128, 0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x0000, 0x0000,
+ 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137,
+ 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
+ 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, /* 0x3140 */
+ 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f,
+ 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157,
+ 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f,
+ 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167,
+ 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f,
+ 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177,
+ 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f,
+ 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, /* 0x3180 */
+ 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 0x0000,
+ 0x3190, 0x3191, 0x3192, 0x3193, 0x3194, 0x3195, 0x3196, 0x3197,
+ 0x3198, 0x3199, 0x319a, 0x319b, 0x319c, 0x319d, 0x319e, 0x319f,
+ 0x31a0, 0x31a1, 0x31a2, 0x31a3, 0x31a4, 0x31a5, 0x31a6, 0x31a7,
+ 0x31a8, 0x31a9, 0x31aa, 0x31ab, 0x31ac, 0x31ad, 0x31ae, 0x31af,
+ 0x31b0, 0x31b1, 0x31b2, 0x31b3, 0x31b4, 0x31b5, 0x31b6, 0x31b7,
+ 0x31b8, 0x31b9, 0x31ba, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x31c0, 0x31c1, 0x31c2, 0x31c3, 0x31c4, 0x31c5, 0x31c6, 0x31c7, /* 0x31c0 */
+ 0x31c8, 0x31c9, 0x31ca, 0x31cb, 0x31cc, 0x31cd, 0x31ce, 0x31cf,
+ 0x31d0, 0x31d1, 0x31d2, 0x31d3, 0x31d4, 0x31d5, 0x31d6, 0x31d7,
+ 0x31d8, 0x31d9, 0x31da, 0x31db, 0x31dc, 0x31dd, 0x31de, 0x31df,
+ 0x31e0, 0x31e1, 0x31e2, 0x31e3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x31f0, 0x31f1, 0x31f2, 0x31f3, 0x31f4, 0x31f5, 0x31f6, 0x31f7,
+ 0x31f8, 0x31f9, 0x31fa, 0x31fb, 0x31fc, 0x31fd, 0x31fe, 0x31ff,
+ 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, /* 0x3200 */
+ 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f,
+ 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217,
+ 0x3218, 0x3219, 0x321a, 0x321b, 0x321c, 0x321d, 0x321e, 0x0000,
+ 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227,
+ 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f,
+ 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237,
+ 0x3238, 0x3239, 0x323a, 0x323b, 0x323c, 0x323d, 0x323e, 0x323f,
+ 0x3240, 0x3241, 0x3242, 0x3243, 0x3244, 0x3245, 0x3246, 0x3247, /* 0x3240 */
+ 0x3248, 0x3249, 0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f,
+ 0x3250, 0x3251, 0x3252, 0x3253, 0x3254, 0x3255, 0x3256, 0x3257,
+ 0x3258, 0x3259, 0x325a, 0x325b, 0x325c, 0x325d, 0x325e, 0x325f,
+ 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267,
+ 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f,
+ 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277,
+ 0x3278, 0x3279, 0x327a, 0x327b, 0x327c, 0x327d, 0x327e, 0x327f,
+ 0x3280, 0x3281, 0x3282, 0x3283, 0x3284, 0x3285, 0x3286, 0x3287, /* 0x3280 */
+ 0x3288, 0x3289, 0x328a, 0x328b, 0x328c, 0x328d, 0x328e, 0x328f,
+ 0x3290, 0x3291, 0x3292, 0x3293, 0x3294, 0x3295, 0x3296, 0x3297,
+ 0x3298, 0x3299, 0x329a, 0x329b, 0x329c, 0x329d, 0x329e, 0x329f,
+ 0x32a0, 0x32a1, 0x32a2, 0x32a3, 0x32a4, 0x32a5, 0x32a6, 0x32a7,
+ 0x32a8, 0x32a9, 0x32aa, 0x32ab, 0x32ac, 0x32ad, 0x32ae, 0x32af,
+ 0x32b0, 0x32b1, 0x32b2, 0x32b3, 0x32b4, 0x32b5, 0x32b6, 0x32b7,
+ 0x32b8, 0x32b9, 0x32ba, 0x32bb, 0x32bc, 0x32bd, 0x32be, 0x32bf,
+ 0x32c0, 0x32c1, 0x32c2, 0x32c3, 0x32c4, 0x32c5, 0x32c6, 0x32c7, /* 0x32c0 */
+ 0x32c8, 0x32c9, 0x32ca, 0x32cb, 0x32cc, 0x32cd, 0x32ce, 0x32cf,
+ 0x32d0, 0x32d1, 0x32d2, 0x32d3, 0x32d4, 0x32d5, 0x32d6, 0x32d7,
+ 0x32d8, 0x32d9, 0x32da, 0x32db, 0x32dc, 0x32dd, 0x32de, 0x32df,
+ 0x32e0, 0x32e1, 0x32e2, 0x32e3, 0x32e4, 0x32e5, 0x32e6, 0x32e7,
+ 0x32e8, 0x32e9, 0x32ea, 0x32eb, 0x32ec, 0x32ed, 0x32ee, 0x32ef,
+ 0x32f0, 0x32f1, 0x32f2, 0x32f3, 0x32f4, 0x32f5, 0x32f6, 0x32f7,
+ 0x32f8, 0x32f9, 0x32fa, 0x32fb, 0x32fc, 0x32fd, 0x32fe, 0x0000,
+ 0x3300, 0x3301, 0x3302, 0x3303, 0x3304, 0x3305, 0x3306, 0x3307, /* 0x3300 */
+ 0x3308, 0x3309, 0x330a, 0x330b, 0x330c, 0x330d, 0x330e, 0x330f,
+ 0x3310, 0x3311, 0x3312, 0x3313, 0x3314, 0x3315, 0x3316, 0x3317,
+ 0x3318, 0x3319, 0x331a, 0x331b, 0x331c, 0x331d, 0x331e, 0x331f,
+ 0x3320, 0x3321, 0x3322, 0x3323, 0x3324, 0x3325, 0x3326, 0x3327,
+ 0x3328, 0x3329, 0x332a, 0x332b, 0x332c, 0x332d, 0x332e, 0x332f,
+ 0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337,
+ 0x3338, 0x3339, 0x333a, 0x333b, 0x333c, 0x333d, 0x333e, 0x333f,
+ 0x3340, 0x3341, 0x3342, 0x3343, 0x3344, 0x3345, 0x3346, 0x3347, /* 0x3340 */
+ 0x3348, 0x3349, 0x334a, 0x334b, 0x334c, 0x334d, 0x334e, 0x334f,
+ 0x3350, 0x3351, 0x3352, 0x3353, 0x3354, 0x3355, 0x3356, 0x3357,
+ 0x3358, 0x3359, 0x335a, 0x335b, 0x335c, 0x335d, 0x335e, 0x335f,
+ 0x3360, 0x3361, 0x3362, 0x3363, 0x3364, 0x3365, 0x3366, 0x3367,
+ 0x3368, 0x3369, 0x336a, 0x336b, 0x336c, 0x336d, 0x336e, 0x336f,
+ 0x3370, 0x3371, 0x3372, 0x3373, 0x3374, 0x3375, 0x3376, 0x3377,
+ 0x3378, 0x3379, 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x337f,
+ 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x3385, 0x3386, 0x3387, /* 0x3380 */
+ 0x3388, 0x3389, 0x338a, 0x338b, 0x338c, 0x338d, 0x338e, 0x338f,
+ 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, 0x3395, 0x3396, 0x3397,
+ 0x3398, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e, 0x339f,
+ 0x33a0, 0x33a1, 0x33a2, 0x33a3, 0x33a4, 0x33a5, 0x33a6, 0x33a7,
+ 0x33a8, 0x33a9, 0x33aa, 0x33ab, 0x33ac, 0x33ad, 0x33ae, 0x33af,
+ 0x33b0, 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7,
+ 0x33b8, 0x33b9, 0x33ba, 0x33bb, 0x33bc, 0x33bd, 0x33be, 0x33bf,
+ 0x33c0, 0x33c1, 0x33c2, 0x33c3, 0x33c4, 0x33c5, 0x33c6, 0x33c7, /* 0x33c0 */
+ 0x33c8, 0x33c9, 0x33ca, 0x33cb, 0x33cc, 0x33cd, 0x33ce, 0x33cf,
+ 0x33d0, 0x33d1, 0x33d2, 0x33d3, 0x33d4, 0x33d5, 0x33d6, 0x33d7,
+ 0x33d8, 0x33d9, 0x33da, 0x33db, 0x33dc, 0x33dd, 0x33de, 0x33df,
+ 0x33e0, 0x33e1, 0x33e2, 0x33e3, 0x33e4, 0x33e5, 0x33e6, 0x33e7,
+ 0x33e8, 0x33e9, 0x33ea, 0x33eb, 0x33ec, 0x33ed, 0x33ee, 0x33ef,
+ 0x33f0, 0x33f1, 0x33f2, 0x33f3, 0x33f4, 0x33f5, 0x33f6, 0x33f7,
+ 0x33f8, 0x33f9, 0x33fa, 0x33fb, 0x33fc, 0x33fd, 0x33fe, 0x33ff,
+ 0x3400, 0x3401, 0x3402, 0x3403, 0x3404, 0x3405, 0x3406, 0x3407, /* 0x3400 */
+ 0x3408, 0x3409, 0x340a, 0x340b, 0x340c, 0x340d, 0x340e, 0x340f,
+ 0x3410, 0x3411, 0x3412, 0x3413, 0x3414, 0x3415, 0x3416, 0x3417,
+ 0x3418, 0x3419, 0x341a, 0x341b, 0x341c, 0x341d, 0x341e, 0x341f,
+ 0x3420, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426, 0x3427,
+ 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e, 0x342f,
+ 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3437,
+ 0x3438, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e, 0x343f,
+ 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446, 0x3447, /* 0x3440 */
+ 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e, 0x344f,
+ 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456, 0x3457,
+ 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e, 0x345f,
+ 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466, 0x3467,
+ 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e, 0x346f,
+ 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476, 0x3477,
+ 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e, 0x347f,
+ 0x3480, 0x3481, 0x3482, 0x3483, 0x3484, 0x3485, 0x3486, 0x3487, /* 0x3480 */
+ 0x3488, 0x3489, 0x348a, 0x348b, 0x348c, 0x348d, 0x348e, 0x348f,
+ 0x3490, 0x3491, 0x3492, 0x3493, 0x3494, 0x3495, 0x3496, 0x3497,
+ 0x3498, 0x3499, 0x349a, 0x349b, 0x349c, 0x349d, 0x349e, 0x349f,
+ 0x34a0, 0x34a1, 0x34a2, 0x34a3, 0x34a4, 0x34a5, 0x34a6, 0x34a7,
+ 0x34a8, 0x34a9, 0x34aa, 0x34ab, 0x34ac, 0x34ad, 0x34ae, 0x34af,
+ 0x34b0, 0x34b1, 0x34b2, 0x34b3, 0x34b4, 0x34b5, 0x34b6, 0x34b7,
+ 0x34b8, 0x34b9, 0x34ba, 0x34bb, 0x34bc, 0x34bd, 0x34be, 0x34bf,
+ 0x34c0, 0x34c1, 0x34c2, 0x34c3, 0x34c4, 0x34c5, 0x34c6, 0x34c7, /* 0x34c0 */
+ 0x34c8, 0x34c9, 0x34ca, 0x34cb, 0x34cc, 0x34cd, 0x34ce, 0x34cf,
+ 0x34d0, 0x34d1, 0x34d2, 0x34d3, 0x34d4, 0x34d5, 0x34d6, 0x34d7,
+ 0x34d8, 0x34d9, 0x34da, 0x34db, 0x34dc, 0x34dd, 0x34de, 0x34df,
+ 0x34e0, 0x34e1, 0x34e2, 0x34e3, 0x34e4, 0x34e5, 0x34e6, 0x34e7,
+ 0x34e8, 0x34e9, 0x34ea, 0x34eb, 0x34ec, 0x34ed, 0x34ee, 0x34ef,
+ 0x34f0, 0x34f1, 0x34f2, 0x34f3, 0x34f4, 0x34f5, 0x34f6, 0x34f7,
+ 0x34f8, 0x34f9, 0x34fa, 0x34fb, 0x34fc, 0x34fd, 0x34fe, 0x34ff,
+ 0x3500, 0x3501, 0x3502, 0x3503, 0x3504, 0x3505, 0x3506, 0x3507, /* 0x3500 */
+ 0x3508, 0x3509, 0x350a, 0x350b, 0x350c, 0x350d, 0x350e, 0x350f,
+ 0x3510, 0x3511, 0x3512, 0x3513, 0x3514, 0x3515, 0x3516, 0x3517,
+ 0x3518, 0x3519, 0x351a, 0x351b, 0x351c, 0x351d, 0x351e, 0x351f,
+ 0x3520, 0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527,
+ 0x3528, 0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f,
+ 0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537,
+ 0x3538, 0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f,
+ 0x3540, 0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, /* 0x3540 */
+ 0x3548, 0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f,
+ 0x3550, 0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557,
+ 0x3558, 0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f,
+ 0x3560, 0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567,
+ 0x3568, 0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f,
+ 0x3570, 0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577,
+ 0x3578, 0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x357f,
+ 0x3580, 0x3581, 0x3582, 0x3583, 0x3584, 0x3585, 0x3586, 0x3587, /* 0x3580 */
+ 0x3588, 0x3589, 0x358a, 0x358b, 0x358c, 0x358d, 0x358e, 0x358f,
+ 0x3590, 0x3591, 0x3592, 0x3593, 0x3594, 0x3595, 0x3596, 0x3597,
+ 0x3598, 0x3599, 0x359a, 0x359b, 0x359c, 0x359d, 0x359e, 0x359f,
+ 0x35a0, 0x35a1, 0x35a2, 0x35a3, 0x35a4, 0x35a5, 0x35a6, 0x35a7,
+ 0x35a8, 0x35a9, 0x35aa, 0x35ab, 0x35ac, 0x35ad, 0x35ae, 0x35af,
+ 0x35b0, 0x35b1, 0x35b2, 0x35b3, 0x35b4, 0x35b5, 0x35b6, 0x35b7,
+ 0x35b8, 0x35b9, 0x35ba, 0x35bb, 0x35bc, 0x35bd, 0x35be, 0x35bf,
+ 0x35c0, 0x35c1, 0x35c2, 0x35c3, 0x35c4, 0x35c5, 0x35c6, 0x35c7, /* 0x35c0 */
+ 0x35c8, 0x35c9, 0x35ca, 0x35cb, 0x35cc, 0x35cd, 0x35ce, 0x35cf,
+ 0x35d0, 0x35d1, 0x35d2, 0x35d3, 0x35d4, 0x35d5, 0x35d6, 0x35d7,
+ 0x35d8, 0x35d9, 0x35da, 0x35db, 0x35dc, 0x35dd, 0x35de, 0x35df,
+ 0x35e0, 0x35e1, 0x35e2, 0x35e3, 0x35e4, 0x35e5, 0x35e6, 0x35e7,
+ 0x35e8, 0x35e9, 0x35ea, 0x35eb, 0x35ec, 0x35ed, 0x35ee, 0x35ef,
+ 0x35f0, 0x35f1, 0x35f2, 0x35f3, 0x35f4, 0x35f5, 0x35f6, 0x35f7,
+ 0x35f8, 0x35f9, 0x35fa, 0x35fb, 0x35fc, 0x35fd, 0x35fe, 0x35ff,
+ 0x3600, 0x3601, 0x3602, 0x3603, 0x3604, 0x3605, 0x3606, 0x3607, /* 0x3600 */
+ 0x3608, 0x3609, 0x360a, 0x360b, 0x360c, 0x360d, 0x360e, 0x360f,
+ 0x3610, 0x3611, 0x3612, 0x3613, 0x3614, 0x3615, 0x3616, 0x3617,
+ 0x3618, 0x3619, 0x361a, 0x361b, 0x361c, 0x361d, 0x361e, 0x361f,
+ 0x3620, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627,
+ 0x3628, 0x3629, 0x362a, 0x362b, 0x362c, 0x362d, 0x362e, 0x362f,
+ 0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637,
+ 0x3638, 0x3639, 0x363a, 0x363b, 0x363c, 0x363d, 0x363e, 0x363f,
+ 0x3640, 0x3641, 0x3642, 0x3643, 0x3644, 0x3645, 0x3646, 0x3647, /* 0x3640 */
+ 0x3648, 0x3649, 0x364a, 0x364b, 0x364c, 0x364d, 0x364e, 0x364f,
+ 0x3650, 0x3651, 0x3652, 0x3653, 0x3654, 0x3655, 0x3656, 0x3657,
+ 0x3658, 0x3659, 0x365a, 0x365b, 0x365c, 0x365d, 0x365e, 0x365f,
+ 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666, 0x3667,
+ 0x3668, 0x3669, 0x366a, 0x366b, 0x366c, 0x366d, 0x366e, 0x366f,
+ 0x3670, 0x3671, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677,
+ 0x3678, 0x3679, 0x367a, 0x367b, 0x367c, 0x367d, 0x367e, 0x367f,
+ 0x3680, 0x3681, 0x3682, 0x3683, 0x3684, 0x3685, 0x3686, 0x3687, /* 0x3680 */
+ 0x3688, 0x3689, 0x368a, 0x368b, 0x368c, 0x368d, 0x368e, 0x368f,
+ 0x3690, 0x3691, 0x3692, 0x3693, 0x3694, 0x3695, 0x3696, 0x3697,
+ 0x3698, 0x3699, 0x369a, 0x369b, 0x369c, 0x369d, 0x369e, 0x369f,
+ 0x36a0, 0x36a1, 0x36a2, 0x36a3, 0x36a4, 0x36a5, 0x36a6, 0x36a7,
+ 0x36a8, 0x36a9, 0x36aa, 0x36ab, 0x36ac, 0x36ad, 0x36ae, 0x36af,
+ 0x36b0, 0x36b1, 0x36b2, 0x36b3, 0x36b4, 0x36b5, 0x36b6, 0x36b7,
+ 0x36b8, 0x36b9, 0x36ba, 0x36bb, 0x36bc, 0x36bd, 0x36be, 0x36bf,
+ 0x36c0, 0x36c1, 0x36c2, 0x36c3, 0x36c4, 0x36c5, 0x36c6, 0x36c7, /* 0x36c0 */
+ 0x36c8, 0x36c9, 0x36ca, 0x36cb, 0x36cc, 0x36cd, 0x36ce, 0x36cf,
+ 0x36d0, 0x36d1, 0x36d2, 0x36d3, 0x36d4, 0x36d5, 0x36d6, 0x36d7,
+ 0x36d8, 0x36d9, 0x36da, 0x36db, 0x36dc, 0x36dd, 0x36de, 0x36df,
+ 0x36e0, 0x36e1, 0x36e2, 0x36e3, 0x36e4, 0x36e5, 0x36e6, 0x36e7,
+ 0x36e8, 0x36e9, 0x36ea, 0x36eb, 0x36ec, 0x36ed, 0x36ee, 0x36ef,
+ 0x36f0, 0x36f1, 0x36f2, 0x36f3, 0x36f4, 0x36f5, 0x36f6, 0x36f7,
+ 0x36f8, 0x36f9, 0x36fa, 0x36fb, 0x36fc, 0x36fd, 0x36fe, 0x36ff,
+ 0x3700, 0x3701, 0x3702, 0x3703, 0x3704, 0x3705, 0x3706, 0x3707, /* 0x3700 */
+ 0x3708, 0x3709, 0x370a, 0x370b, 0x370c, 0x370d, 0x370e, 0x370f,
+ 0x3710, 0x3711, 0x3712, 0x3713, 0x3714, 0x3715, 0x3716, 0x3717,
+ 0x3718, 0x3719, 0x371a, 0x371b, 0x371c, 0x371d, 0x371e, 0x371f,
+ 0x3720, 0x3721, 0x3722, 0x3723, 0x3724, 0x3725, 0x3726, 0x3727,
+ 0x3728, 0x3729, 0x372a, 0x372b, 0x372c, 0x372d, 0x372e, 0x372f,
+ 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737,
+ 0x3738, 0x3739, 0x373a, 0x373b, 0x373c, 0x373d, 0x373e, 0x373f,
+ 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747, /* 0x3740 */
+ 0x3748, 0x3749, 0x374a, 0x374b, 0x374c, 0x374d, 0x374e, 0x374f,
+ 0x3750, 0x3751, 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757,
+ 0x3758, 0x3759, 0x375a, 0x375b, 0x375c, 0x375d, 0x375e, 0x375f,
+ 0x3760, 0x3761, 0x3762, 0x3763, 0x3764, 0x3765, 0x3766, 0x3767,
+ 0x3768, 0x3769, 0x376a, 0x376b, 0x376c, 0x376d, 0x376e, 0x376f,
+ 0x3770, 0x3771, 0x3772, 0x3773, 0x3774, 0x3775, 0x3776, 0x3777,
+ 0x3778, 0x3779, 0x377a, 0x377b, 0x377c, 0x377d, 0x377e, 0x377f,
+ 0x3780, 0x3781, 0x3782, 0x3783, 0x3784, 0x3785, 0x3786, 0x3787, /* 0x3780 */
+ 0x3788, 0x3789, 0x378a, 0x378b, 0x378c, 0x378d, 0x378e, 0x378f,
+ 0x3790, 0x3791, 0x3792, 0x3793, 0x3794, 0x3795, 0x3796, 0x3797,
+ 0x3798, 0x3799, 0x379a, 0x379b, 0x379c, 0x379d, 0x379e, 0x379f,
+ 0x37a0, 0x37a1, 0x37a2, 0x37a3, 0x37a4, 0x37a5, 0x37a6, 0x37a7,
+ 0x37a8, 0x37a9, 0x37aa, 0x37ab, 0x37ac, 0x37ad, 0x37ae, 0x37af,
+ 0x37b0, 0x37b1, 0x37b2, 0x37b3, 0x37b4, 0x37b5, 0x37b6, 0x37b7,
+ 0x37b8, 0x37b9, 0x37ba, 0x37bb, 0x37bc, 0x37bd, 0x37be, 0x37bf,
+ 0x37c0, 0x37c1, 0x37c2, 0x37c3, 0x37c4, 0x37c5, 0x37c6, 0x37c7, /* 0x37c0 */
+ 0x37c8, 0x37c9, 0x37ca, 0x37cb, 0x37cc, 0x37cd, 0x37ce, 0x37cf,
+ 0x37d0, 0x37d1, 0x37d2, 0x37d3, 0x37d4, 0x37d5, 0x37d6, 0x37d7,
+ 0x37d8, 0x37d9, 0x37da, 0x37db, 0x37dc, 0x37dd, 0x37de, 0x37df,
+ 0x37e0, 0x37e1, 0x37e2, 0x37e3, 0x37e4, 0x37e5, 0x37e6, 0x37e7,
+ 0x37e8, 0x37e9, 0x37ea, 0x37eb, 0x37ec, 0x37ed, 0x37ee, 0x37ef,
+ 0x37f0, 0x37f1, 0x37f2, 0x37f3, 0x37f4, 0x37f5, 0x37f6, 0x37f7,
+ 0x37f8, 0x37f9, 0x37fa, 0x37fb, 0x37fc, 0x37fd, 0x37fe, 0x37ff,
+ 0x3800, 0x3801, 0x3802, 0x3803, 0x3804, 0x3805, 0x3806, 0x3807, /* 0x3800 */
+ 0x3808, 0x3809, 0x380a, 0x380b, 0x380c, 0x380d, 0x380e, 0x380f,
+ 0x3810, 0x3811, 0x3812, 0x3813, 0x3814, 0x3815, 0x3816, 0x3817,
+ 0x3818, 0x3819, 0x381a, 0x381b, 0x381c, 0x381d, 0x381e, 0x381f,
+ 0x3820, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827,
+ 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e, 0x382f,
+ 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837,
+ 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e, 0x383f,
+ 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846, 0x3847, /* 0x3840 */
+ 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e, 0x384f,
+ 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856, 0x3857,
+ 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e, 0x385f,
+ 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866, 0x3867,
+ 0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f,
+ 0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877,
+ 0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x387f,
+ 0x3880, 0x3881, 0x3882, 0x3883, 0x3884, 0x3885, 0x3886, 0x3887, /* 0x3880 */
+ 0x3888, 0x3889, 0x388a, 0x388b, 0x388c, 0x388d, 0x388e, 0x388f,
+ 0x3890, 0x3891, 0x3892, 0x3893, 0x3894, 0x3895, 0x3896, 0x3897,
+ 0x3898, 0x3899, 0x389a, 0x389b, 0x389c, 0x389d, 0x389e, 0x389f,
+ 0x38a0, 0x38a1, 0x38a2, 0x38a3, 0x38a4, 0x38a5, 0x38a6, 0x38a7,
+ 0x38a8, 0x38a9, 0x38aa, 0x38ab, 0x38ac, 0x38ad, 0x38ae, 0x38af,
+ 0x38b0, 0x38b1, 0x38b2, 0x38b3, 0x38b4, 0x38b5, 0x38b6, 0x38b7,
+ 0x38b8, 0x38b9, 0x38ba, 0x38bb, 0x38bc, 0x38bd, 0x38be, 0x38bf,
+ 0x38c0, 0x38c1, 0x38c2, 0x38c3, 0x38c4, 0x38c5, 0x38c6, 0x38c7, /* 0x38c0 */
+ 0x38c8, 0x38c9, 0x38ca, 0x38cb, 0x38cc, 0x38cd, 0x38ce, 0x38cf,
+ 0x38d0, 0x38d1, 0x38d2, 0x38d3, 0x38d4, 0x38d5, 0x38d6, 0x38d7,
+ 0x38d8, 0x38d9, 0x38da, 0x38db, 0x38dc, 0x38dd, 0x38de, 0x38df,
+ 0x38e0, 0x38e1, 0x38e2, 0x38e3, 0x38e4, 0x38e5, 0x38e6, 0x38e7,
+ 0x38e8, 0x38e9, 0x38ea, 0x38eb, 0x38ec, 0x38ed, 0x38ee, 0x38ef,
+ 0x38f0, 0x38f1, 0x38f2, 0x38f3, 0x38f4, 0x38f5, 0x38f6, 0x38f7,
+ 0x38f8, 0x38f9, 0x38fa, 0x38fb, 0x38fc, 0x38fd, 0x38fe, 0x38ff,
+ 0x3900, 0x3901, 0x3902, 0x3903, 0x3904, 0x3905, 0x3906, 0x3907, /* 0x3900 */
+ 0x3908, 0x3909, 0x390a, 0x390b, 0x390c, 0x390d, 0x390e, 0x390f,
+ 0x3910, 0x3911, 0x3912, 0x3913, 0x3914, 0x3915, 0x3916, 0x3917,
+ 0x3918, 0x3919, 0x391a, 0x391b, 0x391c, 0x391d, 0x391e, 0x391f,
+ 0x3920, 0x3921, 0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927,
+ 0x3928, 0x3929, 0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f,
+ 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937,
+ 0x3938, 0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f,
+ 0x3940, 0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, /* 0x3940 */
+ 0x3948, 0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f,
+ 0x3950, 0x3951, 0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957,
+ 0x3958, 0x3959, 0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f,
+ 0x3960, 0x3961, 0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967,
+ 0x3968, 0x3969, 0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f,
+ 0x3970, 0x3971, 0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977,
+ 0x3978, 0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x397f,
+ 0x3980, 0x3981, 0x3982, 0x3983, 0x3984, 0x3985, 0x3986, 0x3987, /* 0x3980 */
+ 0x3988, 0x3989, 0x398a, 0x398b, 0x398c, 0x398d, 0x398e, 0x398f,
+ 0x3990, 0x3991, 0x3992, 0x3993, 0x3994, 0x3995, 0x3996, 0x3997,
+ 0x3998, 0x3999, 0x399a, 0x399b, 0x399c, 0x399d, 0x399e, 0x399f,
+ 0x39a0, 0x39a1, 0x39a2, 0x39a3, 0x39a4, 0x39a5, 0x39a6, 0x39a7,
+ 0x39a8, 0x39a9, 0x39aa, 0x39ab, 0x39ac, 0x39ad, 0x39ae, 0x39af,
+ 0x39b0, 0x39b1, 0x39b2, 0x39b3, 0x39b4, 0x39b5, 0x39b6, 0x39b7,
+ 0x39b8, 0x39b9, 0x39ba, 0x39bb, 0x39bc, 0x39bd, 0x39be, 0x39bf,
+ 0x39c0, 0x39c1, 0x39c2, 0x39c3, 0x39c4, 0x39c5, 0x39c6, 0x39c7, /* 0x39c0 */
+ 0x39c8, 0x39c9, 0x39ca, 0x39cb, 0x39cc, 0x39cd, 0x39ce, 0x39cf,
+ 0x39d0, 0x39d1, 0x39d2, 0x39d3, 0x39d4, 0x39d5, 0x39d6, 0x39d7,
+ 0x39d8, 0x39d9, 0x39da, 0x39db, 0x39dc, 0x39dd, 0x39de, 0x39df,
+ 0x39e0, 0x39e1, 0x39e2, 0x39e3, 0x39e4, 0x39e5, 0x39e6, 0x39e7,
+ 0x39e8, 0x39e9, 0x39ea, 0x39eb, 0x39ec, 0x39ed, 0x39ee, 0x39ef,
+ 0x39f0, 0x39f1, 0x39f2, 0x39f3, 0x39f4, 0x39f5, 0x39f6, 0x39f7,
+ 0x39f8, 0x39f9, 0x39fa, 0x39fb, 0x39fc, 0x39fd, 0x39fe, 0x39ff,
+ 0x3a00, 0x3a01, 0x3a02, 0x3a03, 0x3a04, 0x3a05, 0x3a06, 0x3a07, /* 0x3a00 */
+ 0x3a08, 0x3a09, 0x3a0a, 0x3a0b, 0x3a0c, 0x3a0d, 0x3a0e, 0x3a0f,
+ 0x3a10, 0x3a11, 0x3a12, 0x3a13, 0x3a14, 0x3a15, 0x3a16, 0x3a17,
+ 0x3a18, 0x3a19, 0x3a1a, 0x3a1b, 0x3a1c, 0x3a1d, 0x3a1e, 0x3a1f,
+ 0x3a20, 0x3a21, 0x3a22, 0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27,
+ 0x3a28, 0x3a29, 0x3a2a, 0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f,
+ 0x3a30, 0x3a31, 0x3a32, 0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37,
+ 0x3a38, 0x3a39, 0x3a3a, 0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f,
+ 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, /* 0x3a40 */
+ 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f,
+ 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57,
+ 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f,
+ 0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67,
+ 0x3a68, 0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f,
+ 0x3a70, 0x3a71, 0x3a72, 0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77,
+ 0x3a78, 0x3a79, 0x3a7a, 0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3a7f,
+ 0x3a80, 0x3a81, 0x3a82, 0x3a83, 0x3a84, 0x3a85, 0x3a86, 0x3a87, /* 0x3a80 */
+ 0x3a88, 0x3a89, 0x3a8a, 0x3a8b, 0x3a8c, 0x3a8d, 0x3a8e, 0x3a8f,
+ 0x3a90, 0x3a91, 0x3a92, 0x3a93, 0x3a94, 0x3a95, 0x3a96, 0x3a97,
+ 0x3a98, 0x3a99, 0x3a9a, 0x3a9b, 0x3a9c, 0x3a9d, 0x3a9e, 0x3a9f,
+ 0x3aa0, 0x3aa1, 0x3aa2, 0x3aa3, 0x3aa4, 0x3aa5, 0x3aa6, 0x3aa7,
+ 0x3aa8, 0x3aa9, 0x3aaa, 0x3aab, 0x3aac, 0x3aad, 0x3aae, 0x3aaf,
+ 0x3ab0, 0x3ab1, 0x3ab2, 0x3ab3, 0x3ab4, 0x3ab5, 0x3ab6, 0x3ab7,
+ 0x3ab8, 0x3ab9, 0x3aba, 0x3abb, 0x3abc, 0x3abd, 0x3abe, 0x3abf,
+ 0x3ac0, 0x3ac1, 0x3ac2, 0x3ac3, 0x3ac4, 0x3ac5, 0x3ac6, 0x3ac7, /* 0x3ac0 */
+ 0x3ac8, 0x3ac9, 0x3aca, 0x3acb, 0x3acc, 0x3acd, 0x3ace, 0x3acf,
+ 0x3ad0, 0x3ad1, 0x3ad2, 0x3ad3, 0x3ad4, 0x3ad5, 0x3ad6, 0x3ad7,
+ 0x3ad8, 0x3ad9, 0x3ada, 0x3adb, 0x3adc, 0x3add, 0x3ade, 0x3adf,
+ 0x3ae0, 0x3ae1, 0x3ae2, 0x3ae3, 0x3ae4, 0x3ae5, 0x3ae6, 0x3ae7,
+ 0x3ae8, 0x3ae9, 0x3aea, 0x3aeb, 0x3aec, 0x3aed, 0x3aee, 0x3aef,
+ 0x3af0, 0x3af1, 0x3af2, 0x3af3, 0x3af4, 0x3af5, 0x3af6, 0x3af7,
+ 0x3af8, 0x3af9, 0x3afa, 0x3afb, 0x3afc, 0x3afd, 0x3afe, 0x3aff,
+ 0x3b00, 0x3b01, 0x3b02, 0x3b03, 0x3b04, 0x3b05, 0x3b06, 0x3b07, /* 0x3b00 */
+ 0x3b08, 0x3b09, 0x3b0a, 0x3b0b, 0x3b0c, 0x3b0d, 0x3b0e, 0x3b0f,
+ 0x3b10, 0x3b11, 0x3b12, 0x3b13, 0x3b14, 0x3b15, 0x3b16, 0x3b17,
+ 0x3b18, 0x3b19, 0x3b1a, 0x3b1b, 0x3b1c, 0x3b1d, 0x3b1e, 0x3b1f,
+ 0x3b20, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25, 0x3b26, 0x3b27,
+ 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e, 0x3b2f,
+ 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, 0x3b37,
+ 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3c, 0x3b3d, 0x3b3e, 0x3b3f,
+ 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b46, 0x3b47, /* 0x3b40 */
+ 0x3b48, 0x3b49, 0x3b4a, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f,
+ 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b54, 0x3b55, 0x3b56, 0x3b57,
+ 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d, 0x3b5e, 0x3b5f,
+ 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65, 0x3b66, 0x3b67,
+ 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d, 0x3b6e, 0x3b6f,
+ 0x3b70, 0x3b71, 0x3b72, 0x3b73, 0x3b74, 0x3b75, 0x3b76, 0x3b77,
+ 0x3b78, 0x3b79, 0x3b7a, 0x3b7b, 0x3b7c, 0x3b7d, 0x3b7e, 0x3b7f,
+ 0x3b80, 0x3b81, 0x3b82, 0x3b83, 0x3b84, 0x3b85, 0x3b86, 0x3b87, /* 0x3b80 */
+ 0x3b88, 0x3b89, 0x3b8a, 0x3b8b, 0x3b8c, 0x3b8d, 0x3b8e, 0x3b8f,
+ 0x3b90, 0x3b91, 0x3b92, 0x3b93, 0x3b94, 0x3b95, 0x3b96, 0x3b97,
+ 0x3b98, 0x3b99, 0x3b9a, 0x3b9b, 0x3b9c, 0x3b9d, 0x3b9e, 0x3b9f,
+ 0x3ba0, 0x3ba1, 0x3ba2, 0x3ba3, 0x3ba4, 0x3ba5, 0x3ba6, 0x3ba7,
+ 0x3ba8, 0x3ba9, 0x3baa, 0x3bab, 0x3bac, 0x3bad, 0x3bae, 0x3baf,
+ 0x3bb0, 0x3bb1, 0x3bb2, 0x3bb3, 0x3bb4, 0x3bb5, 0x3bb6, 0x3bb7,
+ 0x3bb8, 0x3bb9, 0x3bba, 0x3bbb, 0x3bbc, 0x3bbd, 0x3bbe, 0x3bbf,
+ 0x3bc0, 0x3bc1, 0x3bc2, 0x3bc3, 0x3bc4, 0x3bc5, 0x3bc6, 0x3bc7, /* 0x3bc0 */
+ 0x3bc8, 0x3bc9, 0x3bca, 0x3bcb, 0x3bcc, 0x3bcd, 0x3bce, 0x3bcf,
+ 0x3bd0, 0x3bd1, 0x3bd2, 0x3bd3, 0x3bd4, 0x3bd5, 0x3bd6, 0x3bd7,
+ 0x3bd8, 0x3bd9, 0x3bda, 0x3bdb, 0x3bdc, 0x3bdd, 0x3bde, 0x3bdf,
+ 0x3be0, 0x3be1, 0x3be2, 0x3be3, 0x3be4, 0x3be5, 0x3be6, 0x3be7,
+ 0x3be8, 0x3be9, 0x3bea, 0x3beb, 0x3bec, 0x3bed, 0x3bee, 0x3bef,
+ 0x3bf0, 0x3bf1, 0x3bf2, 0x3bf3, 0x3bf4, 0x3bf5, 0x3bf6, 0x3bf7,
+ 0x3bf8, 0x3bf9, 0x3bfa, 0x3bfb, 0x3bfc, 0x3bfd, 0x3bfe, 0x3bff,
+ 0x3c00, 0x3c01, 0x3c02, 0x3c03, 0x3c04, 0x3c05, 0x3c06, 0x3c07, /* 0x3c00 */
+ 0x3c08, 0x3c09, 0x3c0a, 0x3c0b, 0x3c0c, 0x3c0d, 0x3c0e, 0x3c0f,
+ 0x3c10, 0x3c11, 0x3c12, 0x3c13, 0x3c14, 0x3c15, 0x3c16, 0x3c17,
+ 0x3c18, 0x3c19, 0x3c1a, 0x3c1b, 0x3c1c, 0x3c1d, 0x3c1e, 0x3c1f,
+ 0x3c20, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26, 0x3c27,
+ 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2d, 0x3c2e, 0x3c2f,
+ 0x3c30, 0x3c31, 0x3c32, 0x3c33, 0x3c34, 0x3c35, 0x3c36, 0x3c37,
+ 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e, 0x3c3f,
+ 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46, 0x3c47, /* 0x3c40 */
+ 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e, 0x3c4f,
+ 0x3c50, 0x3c51, 0x3c52, 0x3c53, 0x3c54, 0x3c55, 0x3c56, 0x3c57,
+ 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f,
+ 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66, 0x3c67,
+ 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f,
+ 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76, 0x3c77,
+ 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e, 0x3c7f,
+ 0x3c80, 0x3c81, 0x3c82, 0x3c83, 0x3c84, 0x3c85, 0x3c86, 0x3c87, /* 0x3c80 */
+ 0x3c88, 0x3c89, 0x3c8a, 0x3c8b, 0x3c8c, 0x3c8d, 0x3c8e, 0x3c8f,
+ 0x3c90, 0x3c91, 0x3c92, 0x3c93, 0x3c94, 0x3c95, 0x3c96, 0x3c97,
+ 0x3c98, 0x3c99, 0x3c9a, 0x3c9b, 0x3c9c, 0x3c9d, 0x3c9e, 0x3c9f,
+ 0x3ca0, 0x3ca1, 0x3ca2, 0x3ca3, 0x3ca4, 0x3ca5, 0x3ca6, 0x3ca7,
+ 0x3ca8, 0x3ca9, 0x3caa, 0x3cab, 0x3cac, 0x3cad, 0x3cae, 0x3caf,
+ 0x3cb0, 0x3cb1, 0x3cb2, 0x3cb3, 0x3cb4, 0x3cb5, 0x3cb6, 0x3cb7,
+ 0x3cb8, 0x3cb9, 0x3cba, 0x3cbb, 0x3cbc, 0x3cbd, 0x3cbe, 0x3cbf,
+ 0x3cc0, 0x3cc1, 0x3cc2, 0x3cc3, 0x3cc4, 0x3cc5, 0x3cc6, 0x3cc7, /* 0x3cc0 */
+ 0x3cc8, 0x3cc9, 0x3cca, 0x3ccb, 0x3ccc, 0x3ccd, 0x3cce, 0x3ccf,
+ 0x3cd0, 0x3cd1, 0x3cd2, 0x3cd3, 0x3cd4, 0x3cd5, 0x3cd6, 0x3cd7,
+ 0x3cd8, 0x3cd9, 0x3cda, 0x3cdb, 0x3cdc, 0x3cdd, 0x3cde, 0x3cdf,
+ 0x3ce0, 0x3ce1, 0x3ce2, 0x3ce3, 0x3ce4, 0x3ce5, 0x3ce6, 0x3ce7,
+ 0x3ce8, 0x3ce9, 0x3cea, 0x3ceb, 0x3cec, 0x3ced, 0x3cee, 0x3cef,
+ 0x3cf0, 0x3cf1, 0x3cf2, 0x3cf3, 0x3cf4, 0x3cf5, 0x3cf6, 0x3cf7,
+ 0x3cf8, 0x3cf9, 0x3cfa, 0x3cfb, 0x3cfc, 0x3cfd, 0x3cfe, 0x3cff,
+ 0x3d00, 0x3d01, 0x3d02, 0x3d03, 0x3d04, 0x3d05, 0x3d06, 0x3d07, /* 0x3d00 */
+ 0x3d08, 0x3d09, 0x3d0a, 0x3d0b, 0x3d0c, 0x3d0d, 0x3d0e, 0x3d0f,
+ 0x3d10, 0x3d11, 0x3d12, 0x3d13, 0x3d14, 0x3d15, 0x3d16, 0x3d17,
+ 0x3d18, 0x3d19, 0x3d1a, 0x3d1b, 0x3d1c, 0x3d1d, 0x3d1e, 0x3d1f,
+ 0x3d20, 0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27,
+ 0x3d28, 0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f,
+ 0x3d30, 0x3d31, 0x3d32, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37,
+ 0x3d38, 0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f,
+ 0x3d40, 0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, /* 0x3d40 */
+ 0x3d48, 0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f,
+ 0x3d50, 0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57,
+ 0x3d58, 0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f,
+ 0x3d60, 0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67,
+ 0x3d68, 0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f,
+ 0x3d70, 0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77,
+ 0x3d78, 0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3d7f,
+ 0x3d80, 0x3d81, 0x3d82, 0x3d83, 0x3d84, 0x3d85, 0x3d86, 0x3d87, /* 0x3d80 */
+ 0x3d88, 0x3d89, 0x3d8a, 0x3d8b, 0x3d8c, 0x3d8d, 0x3d8e, 0x3d8f,
+ 0x3d90, 0x3d91, 0x3d92, 0x3d93, 0x3d94, 0x3d95, 0x3d96, 0x3d97,
+ 0x3d98, 0x3d99, 0x3d9a, 0x3d9b, 0x3d9c, 0x3d9d, 0x3d9e, 0x3d9f,
+ 0x3da0, 0x3da1, 0x3da2, 0x3da3, 0x3da4, 0x3da5, 0x3da6, 0x3da7,
+ 0x3da8, 0x3da9, 0x3daa, 0x3dab, 0x3dac, 0x3dad, 0x3dae, 0x3daf,
+ 0x3db0, 0x3db1, 0x3db2, 0x3db3, 0x3db4, 0x3db5, 0x3db6, 0x3db7,
+ 0x3db8, 0x3db9, 0x3dba, 0x3dbb, 0x3dbc, 0x3dbd, 0x3dbe, 0x3dbf,
+ 0x3dc0, 0x3dc1, 0x3dc2, 0x3dc3, 0x3dc4, 0x3dc5, 0x3dc6, 0x3dc7, /* 0x3dc0 */
+ 0x3dc8, 0x3dc9, 0x3dca, 0x3dcb, 0x3dcc, 0x3dcd, 0x3dce, 0x3dcf,
+ 0x3dd0, 0x3dd1, 0x3dd2, 0x3dd3, 0x3dd4, 0x3dd5, 0x3dd6, 0x3dd7,
+ 0x3dd8, 0x3dd9, 0x3dda, 0x3ddb, 0x3ddc, 0x3ddd, 0x3dde, 0x3ddf,
+ 0x3de0, 0x3de1, 0x3de2, 0x3de3, 0x3de4, 0x3de5, 0x3de6, 0x3de7,
+ 0x3de8, 0x3de9, 0x3dea, 0x3deb, 0x3dec, 0x3ded, 0x3dee, 0x3def,
+ 0x3df0, 0x3df1, 0x3df2, 0x3df3, 0x3df4, 0x3df5, 0x3df6, 0x3df7,
+ 0x3df8, 0x3df9, 0x3dfa, 0x3dfb, 0x3dfc, 0x3dfd, 0x3dfe, 0x3dff,
+ 0x3e00, 0x3e01, 0x3e02, 0x3e03, 0x3e04, 0x3e05, 0x3e06, 0x3e07, /* 0x3e00 */
+ 0x3e08, 0x3e09, 0x3e0a, 0x3e0b, 0x3e0c, 0x3e0d, 0x3e0e, 0x3e0f,
+ 0x3e10, 0x3e11, 0x3e12, 0x3e13, 0x3e14, 0x3e15, 0x3e16, 0x3e17,
+ 0x3e18, 0x3e19, 0x3e1a, 0x3e1b, 0x3e1c, 0x3e1d, 0x3e1e, 0x3e1f,
+ 0x3e20, 0x3e21, 0x3e22, 0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27,
+ 0x3e28, 0x3e29, 0x3e2a, 0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f,
+ 0x3e30, 0x3e31, 0x3e32, 0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37,
+ 0x3e38, 0x3e39, 0x3e3a, 0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f,
+ 0x3e40, 0x3e41, 0x3e42, 0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, /* 0x3e40 */
+ 0x3e48, 0x3e49, 0x3e4a, 0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f,
+ 0x3e50, 0x3e51, 0x3e52, 0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57,
+ 0x3e58, 0x3e59, 0x3e5a, 0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f,
+ 0x3e60, 0x3e61, 0x3e62, 0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67,
+ 0x3e68, 0x3e69, 0x3e6a, 0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f,
+ 0x3e70, 0x3e71, 0x3e72, 0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77,
+ 0x3e78, 0x3e79, 0x3e7a, 0x3e7b, 0x3e7c, 0x3e7d, 0x3e7e, 0x3e7f,
+ 0x3e80, 0x3e81, 0x3e82, 0x3e83, 0x3e84, 0x3e85, 0x3e86, 0x3e87, /* 0x3e80 */
+ 0x3e88, 0x3e89, 0x3e8a, 0x3e8b, 0x3e8c, 0x3e8d, 0x3e8e, 0x3e8f,
+ 0x3e90, 0x3e91, 0x3e92, 0x3e93, 0x3e94, 0x3e95, 0x3e96, 0x3e97,
+ 0x3e98, 0x3e99, 0x3e9a, 0x3e9b, 0x3e9c, 0x3e9d, 0x3e9e, 0x3e9f,
+ 0x3ea0, 0x3ea1, 0x3ea2, 0x3ea3, 0x3ea4, 0x3ea5, 0x3ea6, 0x3ea7,
+ 0x3ea8, 0x3ea9, 0x3eaa, 0x3eab, 0x3eac, 0x3ead, 0x3eae, 0x3eaf,
+ 0x3eb0, 0x3eb1, 0x3eb2, 0x3eb3, 0x3eb4, 0x3eb5, 0x3eb6, 0x3eb7,
+ 0x3eb8, 0x3eb9, 0x3eba, 0x3ebb, 0x3ebc, 0x3ebd, 0x3ebe, 0x3ebf,
+ 0x3ec0, 0x3ec1, 0x3ec2, 0x3ec3, 0x3ec4, 0x3ec5, 0x3ec6, 0x3ec7, /* 0x3ec0 */
+ 0x3ec8, 0x3ec9, 0x3eca, 0x3ecb, 0x3ecc, 0x3ecd, 0x3ece, 0x3ecf,
+ 0x3ed0, 0x3ed1, 0x3ed2, 0x3ed3, 0x3ed4, 0x3ed5, 0x3ed6, 0x3ed7,
+ 0x3ed8, 0x3ed9, 0x3eda, 0x3edb, 0x3edc, 0x3edd, 0x3ede, 0x3edf,
+ 0x3ee0, 0x3ee1, 0x3ee2, 0x3ee3, 0x3ee4, 0x3ee5, 0x3ee6, 0x3ee7,
+ 0x3ee8, 0x3ee9, 0x3eea, 0x3eeb, 0x3eec, 0x3eed, 0x3eee, 0x3eef,
+ 0x3ef0, 0x3ef1, 0x3ef2, 0x3ef3, 0x3ef4, 0x3ef5, 0x3ef6, 0x3ef7,
+ 0x3ef8, 0x3ef9, 0x3efa, 0x3efb, 0x3efc, 0x3efd, 0x3efe, 0x3eff,
+ 0x3f00, 0x3f01, 0x3f02, 0x3f03, 0x3f04, 0x3f05, 0x3f06, 0x3f07, /* 0x3f00 */
+ 0x3f08, 0x3f09, 0x3f0a, 0x3f0b, 0x3f0c, 0x3f0d, 0x3f0e, 0x3f0f,
+ 0x3f10, 0x3f11, 0x3f12, 0x3f13, 0x3f14, 0x3f15, 0x3f16, 0x3f17,
+ 0x3f18, 0x3f19, 0x3f1a, 0x3f1b, 0x3f1c, 0x3f1d, 0x3f1e, 0x3f1f,
+ 0x3f20, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27,
+ 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f,
+ 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, 0x3f37,
+ 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e, 0x3f3f,
+ 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47, /* 0x3f40 */
+ 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f,
+ 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57,
+ 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f,
+ 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67,
+ 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f,
+ 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77,
+ 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x3f7f,
+ 0x3f80, 0x3f81, 0x3f82, 0x3f83, 0x3f84, 0x3f85, 0x3f86, 0x3f87, /* 0x3f80 */
+ 0x3f88, 0x3f89, 0x3f8a, 0x3f8b, 0x3f8c, 0x3f8d, 0x3f8e, 0x3f8f,
+ 0x3f90, 0x3f91, 0x3f92, 0x3f93, 0x3f94, 0x3f95, 0x3f96, 0x3f97,
+ 0x3f98, 0x3f99, 0x3f9a, 0x3f9b, 0x3f9c, 0x3f9d, 0x3f9e, 0x3f9f,
+ 0x3fa0, 0x3fa1, 0x3fa2, 0x3fa3, 0x3fa4, 0x3fa5, 0x3fa6, 0x3fa7,
+ 0x3fa8, 0x3fa9, 0x3faa, 0x3fab, 0x3fac, 0x3fad, 0x3fae, 0x3faf,
+ 0x3fb0, 0x3fb1, 0x3fb2, 0x3fb3, 0x3fb4, 0x3fb5, 0x3fb6, 0x3fb7,
+ 0x3fb8, 0x3fb9, 0x3fba, 0x3fbb, 0x3fbc, 0x3fbd, 0x3fbe, 0x3fbf,
+ 0x3fc0, 0x3fc1, 0x3fc2, 0x3fc3, 0x3fc4, 0x3fc5, 0x3fc6, 0x3fc7, /* 0x3fc0 */
+ 0x3fc8, 0x3fc9, 0x3fca, 0x3fcb, 0x3fcc, 0x3fcd, 0x3fce, 0x3fcf,
+ 0x3fd0, 0x3fd1, 0x3fd2, 0x3fd3, 0x3fd4, 0x3fd5, 0x3fd6, 0x3fd7,
+ 0x3fd8, 0x3fd9, 0x3fda, 0x3fdb, 0x3fdc, 0x3fdd, 0x3fde, 0x3fdf,
+ 0x3fe0, 0x3fe1, 0x3fe2, 0x3fe3, 0x3fe4, 0x3fe5, 0x3fe6, 0x3fe7,
+ 0x3fe8, 0x3fe9, 0x3fea, 0x3feb, 0x3fec, 0x3fed, 0x3fee, 0x3fef,
+ 0x3ff0, 0x3ff1, 0x3ff2, 0x3ff3, 0x3ff4, 0x3ff5, 0x3ff6, 0x3ff7,
+ 0x3ff8, 0x3ff9, 0x3ffa, 0x3ffb, 0x3ffc, 0x3ffd, 0x3ffe, 0x3fff,
+ 0x4000, 0x4001, 0x4002, 0x4003, 0x4004, 0x4005, 0x4006, 0x4007, /* 0x4000 */
+ 0x4008, 0x4009, 0x400a, 0x400b, 0x400c, 0x400d, 0x400e, 0x400f,
+ 0x4010, 0x4011, 0x4012, 0x4013, 0x4014, 0x4015, 0x4016, 0x4017,
+ 0x4018, 0x4019, 0x401a, 0x401b, 0x401c, 0x401d, 0x401e, 0x401f,
+ 0x4020, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026, 0x4027,
+ 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e, 0x402f,
+ 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036, 0x4037,
+ 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e, 0x403f,
+ 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047, /* 0x4040 */
+ 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e, 0x404f,
+ 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056, 0x4057,
+ 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e, 0x405f,
+ 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066, 0x4067,
+ 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e, 0x406f,
+ 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076, 0x4077,
+ 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e, 0x407f,
+ 0x4080, 0x4081, 0x4082, 0x4083, 0x4084, 0x4085, 0x4086, 0x4087, /* 0x4080 */
+ 0x4088, 0x4089, 0x408a, 0x408b, 0x408c, 0x408d, 0x408e, 0x408f,
+ 0x4090, 0x4091, 0x4092, 0x4093, 0x4094, 0x4095, 0x4096, 0x4097,
+ 0x4098, 0x4099, 0x409a, 0x409b, 0x409c, 0x409d, 0x409e, 0x409f,
+ 0x40a0, 0x40a1, 0x40a2, 0x40a3, 0x40a4, 0x40a5, 0x40a6, 0x40a7,
+ 0x40a8, 0x40a9, 0x40aa, 0x40ab, 0x40ac, 0x40ad, 0x40ae, 0x40af,
+ 0x40b0, 0x40b1, 0x40b2, 0x40b3, 0x40b4, 0x40b5, 0x40b6, 0x40b7,
+ 0x40b8, 0x40b9, 0x40ba, 0x40bb, 0x40bc, 0x40bd, 0x40be, 0x40bf,
+ 0x40c0, 0x40c1, 0x40c2, 0x40c3, 0x40c4, 0x40c5, 0x40c6, 0x40c7, /* 0x40c0 */
+ 0x40c8, 0x40c9, 0x40ca, 0x40cb, 0x40cc, 0x40cd, 0x40ce, 0x40cf,
+ 0x40d0, 0x40d1, 0x40d2, 0x40d3, 0x40d4, 0x40d5, 0x40d6, 0x40d7,
+ 0x40d8, 0x40d9, 0x40da, 0x40db, 0x40dc, 0x40dd, 0x40de, 0x40df,
+ 0x40e0, 0x40e1, 0x40e2, 0x40e3, 0x40e4, 0x40e5, 0x40e6, 0x40e7,
+ 0x40e8, 0x40e9, 0x40ea, 0x40eb, 0x40ec, 0x40ed, 0x40ee, 0x40ef,
+ 0x40f0, 0x40f1, 0x40f2, 0x40f3, 0x40f4, 0x40f5, 0x40f6, 0x40f7,
+ 0x40f8, 0x40f9, 0x40fa, 0x40fb, 0x40fc, 0x40fd, 0x40fe, 0x40ff,
+ 0x4100, 0x4101, 0x4102, 0x4103, 0x4104, 0x4105, 0x4106, 0x4107, /* 0x4100 */
+ 0x4108, 0x4109, 0x410a, 0x410b, 0x410c, 0x410d, 0x410e, 0x410f,
+ 0x4110, 0x4111, 0x4112, 0x4113, 0x4114, 0x4115, 0x4116, 0x4117,
+ 0x4118, 0x4119, 0x411a, 0x411b, 0x411c, 0x411d, 0x411e, 0x411f,
+ 0x4120, 0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127,
+ 0x4128, 0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f,
+ 0x4130, 0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137,
+ 0x4138, 0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f,
+ 0x4140, 0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, /* 0x4140 */
+ 0x4148, 0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f,
+ 0x4150, 0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157,
+ 0x4158, 0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f,
+ 0x4160, 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167,
+ 0x4168, 0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f,
+ 0x4170, 0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177,
+ 0x4178, 0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x417f,
+ 0x4180, 0x4181, 0x4182, 0x4183, 0x4184, 0x4185, 0x4186, 0x4187, /* 0x4180 */
+ 0x4188, 0x4189, 0x418a, 0x418b, 0x418c, 0x418d, 0x418e, 0x418f,
+ 0x4190, 0x4191, 0x4192, 0x4193, 0x4194, 0x4195, 0x4196, 0x4197,
+ 0x4198, 0x4199, 0x419a, 0x419b, 0x419c, 0x419d, 0x419e, 0x419f,
+ 0x41a0, 0x41a1, 0x41a2, 0x41a3, 0x41a4, 0x41a5, 0x41a6, 0x41a7,
+ 0x41a8, 0x41a9, 0x41aa, 0x41ab, 0x41ac, 0x41ad, 0x41ae, 0x41af,
+ 0x41b0, 0x41b1, 0x41b2, 0x41b3, 0x41b4, 0x41b5, 0x41b6, 0x41b7,
+ 0x41b8, 0x41b9, 0x41ba, 0x41bb, 0x41bc, 0x41bd, 0x41be, 0x41bf,
+ 0x41c0, 0x41c1, 0x41c2, 0x41c3, 0x41c4, 0x41c5, 0x41c6, 0x41c7, /* 0x41c0 */
+ 0x41c8, 0x41c9, 0x41ca, 0x41cb, 0x41cc, 0x41cd, 0x41ce, 0x41cf,
+ 0x41d0, 0x41d1, 0x41d2, 0x41d3, 0x41d4, 0x41d5, 0x41d6, 0x41d7,
+ 0x41d8, 0x41d9, 0x41da, 0x41db, 0x41dc, 0x41dd, 0x41de, 0x41df,
+ 0x41e0, 0x41e1, 0x41e2, 0x41e3, 0x41e4, 0x41e5, 0x41e6, 0x41e7,
+ 0x41e8, 0x41e9, 0x41ea, 0x41eb, 0x41ec, 0x41ed, 0x41ee, 0x41ef,
+ 0x41f0, 0x41f1, 0x41f2, 0x41f3, 0x41f4, 0x41f5, 0x41f6, 0x41f7,
+ 0x41f8, 0x41f9, 0x41fa, 0x41fb, 0x41fc, 0x41fd, 0x41fe, 0x41ff,
+ 0x4200, 0x4201, 0x4202, 0x4203, 0x4204, 0x4205, 0x4206, 0x4207, /* 0x4200 */
+ 0x4208, 0x4209, 0x420a, 0x420b, 0x420c, 0x420d, 0x420e, 0x420f,
+ 0x4210, 0x4211, 0x4212, 0x4213, 0x4214, 0x4215, 0x4216, 0x4217,
+ 0x4218, 0x4219, 0x421a, 0x421b, 0x421c, 0x421d, 0x421e, 0x421f,
+ 0x4220, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226, 0x4227,
+ 0x4228, 0x4229, 0x422a, 0x422b, 0x422c, 0x422d, 0x422e, 0x422f,
+ 0x4230, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4236, 0x4237,
+ 0x4238, 0x4239, 0x423a, 0x423b, 0x423c, 0x423d, 0x423e, 0x423f,
+ 0x4240, 0x4241, 0x4242, 0x4243, 0x4244, 0x4245, 0x4246, 0x4247, /* 0x4240 */
+ 0x4248, 0x4249, 0x424a, 0x424b, 0x424c, 0x424d, 0x424e, 0x424f,
+ 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, 0x4255, 0x4256, 0x4257,
+ 0x4258, 0x4259, 0x425a, 0x425b, 0x425c, 0x425d, 0x425e, 0x425f,
+ 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265, 0x4266, 0x4267,
+ 0x4268, 0x4269, 0x426a, 0x426b, 0x426c, 0x426d, 0x426e, 0x426f,
+ 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276, 0x4277,
+ 0x4278, 0x4279, 0x427a, 0x427b, 0x427c, 0x427d, 0x427e, 0x427f,
+ 0x4280, 0x4281, 0x4282, 0x4283, 0x4284, 0x4285, 0x4286, 0x4287, /* 0x4280 */
+ 0x4288, 0x4289, 0x428a, 0x428b, 0x428c, 0x428d, 0x428e, 0x428f,
+ 0x4290, 0x4291, 0x4292, 0x4293, 0x4294, 0x4295, 0x4296, 0x4297,
+ 0x4298, 0x4299, 0x429a, 0x429b, 0x429c, 0x429d, 0x429e, 0x429f,
+ 0x42a0, 0x42a1, 0x42a2, 0x42a3, 0x42a4, 0x42a5, 0x42a6, 0x42a7,
+ 0x42a8, 0x42a9, 0x42aa, 0x42ab, 0x42ac, 0x42ad, 0x42ae, 0x42af,
+ 0x42b0, 0x42b1, 0x42b2, 0x42b3, 0x42b4, 0x42b5, 0x42b6, 0x42b7,
+ 0x42b8, 0x42b9, 0x42ba, 0x42bb, 0x42bc, 0x42bd, 0x42be, 0x42bf,
+ 0x42c0, 0x42c1, 0x42c2, 0x42c3, 0x42c4, 0x42c5, 0x42c6, 0x42c7, /* 0x42c0 */
+ 0x42c8, 0x42c9, 0x42ca, 0x42cb, 0x42cc, 0x42cd, 0x42ce, 0x42cf,
+ 0x42d0, 0x42d1, 0x42d2, 0x42d3, 0x42d4, 0x42d5, 0x42d6, 0x42d7,
+ 0x42d8, 0x42d9, 0x42da, 0x42db, 0x42dc, 0x42dd, 0x42de, 0x42df,
+ 0x42e0, 0x42e1, 0x42e2, 0x42e3, 0x42e4, 0x42e5, 0x42e6, 0x42e7,
+ 0x42e8, 0x42e9, 0x42ea, 0x42eb, 0x42ec, 0x42ed, 0x42ee, 0x42ef,
+ 0x42f0, 0x42f1, 0x42f2, 0x42f3, 0x42f4, 0x42f5, 0x42f6, 0x42f7,
+ 0x42f8, 0x42f9, 0x42fa, 0x42fb, 0x42fc, 0x42fd, 0x42fe, 0x42ff,
+ 0x4300, 0x4301, 0x4302, 0x4303, 0x4304, 0x4305, 0x4306, 0x4307, /* 0x4300 */
+ 0x4308, 0x4309, 0x430a, 0x430b, 0x430c, 0x430d, 0x430e, 0x430f,
+ 0x4310, 0x4311, 0x4312, 0x4313, 0x4314, 0x4315, 0x4316, 0x4317,
+ 0x4318, 0x4319, 0x431a, 0x431b, 0x431c, 0x431d, 0x431e, 0x431f,
+ 0x4320, 0x4321, 0x4322, 0x4323, 0x4324, 0x4325, 0x4326, 0x4327,
+ 0x4328, 0x4329, 0x432a, 0x432b, 0x432c, 0x432d, 0x432e, 0x432f,
+ 0x4330, 0x4331, 0x4332, 0x4333, 0x4334, 0x4335, 0x4336, 0x4337,
+ 0x4338, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d, 0x433e, 0x433f,
+ 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345, 0x4346, 0x4347, /* 0x4340 */
+ 0x4348, 0x4349, 0x434a, 0x434b, 0x434c, 0x434d, 0x434e, 0x434f,
+ 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355, 0x4356, 0x4357,
+ 0x4358, 0x4359, 0x435a, 0x435b, 0x435c, 0x435d, 0x435e, 0x435f,
+ 0x4360, 0x4361, 0x4362, 0x4363, 0x4364, 0x4365, 0x4366, 0x4367,
+ 0x4368, 0x4369, 0x436a, 0x436b, 0x436c, 0x436d, 0x436e, 0x436f,
+ 0x4370, 0x4371, 0x4372, 0x4373, 0x4374, 0x4375, 0x4376, 0x4377,
+ 0x4378, 0x4379, 0x437a, 0x437b, 0x437c, 0x437d, 0x437e, 0x437f,
+ 0x4380, 0x4381, 0x4382, 0x4383, 0x4384, 0x4385, 0x4386, 0x4387, /* 0x4380 */
+ 0x4388, 0x4389, 0x438a, 0x438b, 0x438c, 0x438d, 0x438e, 0x438f,
+ 0x4390, 0x4391, 0x4392, 0x4393, 0x4394, 0x4395, 0x4396, 0x4397,
+ 0x4398, 0x4399, 0x439a, 0x439b, 0x439c, 0x439d, 0x439e, 0x439f,
+ 0x43a0, 0x43a1, 0x43a2, 0x43a3, 0x43a4, 0x43a5, 0x43a6, 0x43a7,
+ 0x43a8, 0x43a9, 0x43aa, 0x43ab, 0x43ac, 0x43ad, 0x43ae, 0x43af,
+ 0x43b0, 0x43b1, 0x43b2, 0x43b3, 0x43b4, 0x43b5, 0x43b6, 0x43b7,
+ 0x43b8, 0x43b9, 0x43ba, 0x43bb, 0x43bc, 0x43bd, 0x43be, 0x43bf,
+ 0x43c0, 0x43c1, 0x43c2, 0x43c3, 0x43c4, 0x43c5, 0x43c6, 0x43c7, /* 0x43c0 */
+ 0x43c8, 0x43c9, 0x43ca, 0x43cb, 0x43cc, 0x43cd, 0x43ce, 0x43cf,
+ 0x43d0, 0x43d1, 0x43d2, 0x43d3, 0x43d4, 0x43d5, 0x43d6, 0x43d7,
+ 0x43d8, 0x43d9, 0x43da, 0x43db, 0x43dc, 0x43dd, 0x43de, 0x43df,
+ 0x43e0, 0x43e1, 0x43e2, 0x43e3, 0x43e4, 0x43e5, 0x43e6, 0x43e7,
+ 0x43e8, 0x43e9, 0x43ea, 0x43eb, 0x43ec, 0x43ed, 0x43ee, 0x43ef,
+ 0x43f0, 0x43f1, 0x43f2, 0x43f3, 0x43f4, 0x43f5, 0x43f6, 0x43f7,
+ 0x43f8, 0x43f9, 0x43fa, 0x43fb, 0x43fc, 0x43fd, 0x43fe, 0x43ff,
+ 0x4400, 0x4401, 0x4402, 0x4403, 0x4404, 0x4405, 0x4406, 0x4407, /* 0x4400 */
+ 0x4408, 0x4409, 0x440a, 0x440b, 0x440c, 0x440d, 0x440e, 0x440f,
+ 0x4410, 0x4411, 0x4412, 0x4413, 0x4414, 0x4415, 0x4416, 0x4417,
+ 0x4418, 0x4419, 0x441a, 0x441b, 0x441c, 0x441d, 0x441e, 0x441f,
+ 0x4420, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426, 0x4427,
+ 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, 0x442f,
+ 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436, 0x4437,
+ 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e, 0x443f,
+ 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446, 0x4447, /* 0x4440 */
+ 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, 0x444f,
+ 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457,
+ 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e, 0x445f,
+ 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467,
+ 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f,
+ 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476, 0x4477,
+ 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e, 0x447f,
+ 0x4480, 0x4481, 0x4482, 0x4483, 0x4484, 0x4485, 0x4486, 0x4487, /* 0x4480 */
+ 0x4488, 0x4489, 0x448a, 0x448b, 0x448c, 0x448d, 0x448e, 0x448f,
+ 0x4490, 0x4491, 0x4492, 0x4493, 0x4494, 0x4495, 0x4496, 0x4497,
+ 0x4498, 0x4499, 0x449a, 0x449b, 0x449c, 0x449d, 0x449e, 0x449f,
+ 0x44a0, 0x44a1, 0x44a2, 0x44a3, 0x44a4, 0x44a5, 0x44a6, 0x44a7,
+ 0x44a8, 0x44a9, 0x44aa, 0x44ab, 0x44ac, 0x44ad, 0x44ae, 0x44af,
+ 0x44b0, 0x44b1, 0x44b2, 0x44b3, 0x44b4, 0x44b5, 0x44b6, 0x44b7,
+ 0x44b8, 0x44b9, 0x44ba, 0x44bb, 0x44bc, 0x44bd, 0x44be, 0x44bf,
+ 0x44c0, 0x44c1, 0x44c2, 0x44c3, 0x44c4, 0x44c5, 0x44c6, 0x44c7, /* 0x44c0 */
+ 0x44c8, 0x44c9, 0x44ca, 0x44cb, 0x44cc, 0x44cd, 0x44ce, 0x44cf,
+ 0x44d0, 0x44d1, 0x44d2, 0x44d3, 0x44d4, 0x44d5, 0x44d6, 0x44d7,
+ 0x44d8, 0x44d9, 0x44da, 0x44db, 0x44dc, 0x44dd, 0x44de, 0x44df,
+ 0x44e0, 0x44e1, 0x44e2, 0x44e3, 0x44e4, 0x44e5, 0x44e6, 0x44e7,
+ 0x44e8, 0x44e9, 0x44ea, 0x44eb, 0x44ec, 0x44ed, 0x44ee, 0x44ef,
+ 0x44f0, 0x44f1, 0x44f2, 0x44f3, 0x44f4, 0x44f5, 0x44f6, 0x44f7,
+ 0x44f8, 0x44f9, 0x44fa, 0x44fb, 0x44fc, 0x44fd, 0x44fe, 0x44ff,
+ 0x4500, 0x4501, 0x4502, 0x4503, 0x4504, 0x4505, 0x4506, 0x4507, /* 0x4500 */
+ 0x4508, 0x4509, 0x450a, 0x450b, 0x450c, 0x450d, 0x450e, 0x450f,
+ 0x4510, 0x4511, 0x4512, 0x4513, 0x4514, 0x4515, 0x4516, 0x4517,
+ 0x4518, 0x4519, 0x451a, 0x451b, 0x451c, 0x451d, 0x451e, 0x451f,
+ 0x4520, 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527,
+ 0x4528, 0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f,
+ 0x4530, 0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537,
+ 0x4538, 0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f,
+ 0x4540, 0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, /* 0x4540 */
+ 0x4548, 0x4549, 0x454a, 0x454b, 0x454c, 0x454d, 0x454e, 0x454f,
+ 0x4550, 0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557,
+ 0x4558, 0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f,
+ 0x4560, 0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567,
+ 0x4568, 0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f,
+ 0x4570, 0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577,
+ 0x4578, 0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x457f,
+ 0x4580, 0x4581, 0x4582, 0x4583, 0x4584, 0x4585, 0x4586, 0x4587, /* 0x4580 */
+ 0x4588, 0x4589, 0x458a, 0x458b, 0x458c, 0x458d, 0x458e, 0x458f,
+ 0x4590, 0x4591, 0x4592, 0x4593, 0x4594, 0x4595, 0x4596, 0x4597,
+ 0x4598, 0x4599, 0x459a, 0x459b, 0x459c, 0x459d, 0x459e, 0x459f,
+ 0x45a0, 0x45a1, 0x45a2, 0x45a3, 0x45a4, 0x45a5, 0x45a6, 0x45a7,
+ 0x45a8, 0x45a9, 0x45aa, 0x45ab, 0x45ac, 0x45ad, 0x45ae, 0x45af,
+ 0x45b0, 0x45b1, 0x45b2, 0x45b3, 0x45b4, 0x45b5, 0x45b6, 0x45b7,
+ 0x45b8, 0x45b9, 0x45ba, 0x45bb, 0x45bc, 0x45bd, 0x45be, 0x45bf,
+ 0x45c0, 0x45c1, 0x45c2, 0x45c3, 0x45c4, 0x45c5, 0x45c6, 0x45c7, /* 0x45c0 */
+ 0x45c8, 0x45c9, 0x45ca, 0x45cb, 0x45cc, 0x45cd, 0x45ce, 0x45cf,
+ 0x45d0, 0x45d1, 0x45d2, 0x45d3, 0x45d4, 0x45d5, 0x45d6, 0x45d7,
+ 0x45d8, 0x45d9, 0x45da, 0x45db, 0x45dc, 0x45dd, 0x45de, 0x45df,
+ 0x45e0, 0x45e1, 0x45e2, 0x45e3, 0x45e4, 0x45e5, 0x45e6, 0x45e7,
+ 0x45e8, 0x45e9, 0x45ea, 0x45eb, 0x45ec, 0x45ed, 0x45ee, 0x45ef,
+ 0x45f0, 0x45f1, 0x45f2, 0x45f3, 0x45f4, 0x45f5, 0x45f6, 0x45f7,
+ 0x45f8, 0x45f9, 0x45fa, 0x45fb, 0x45fc, 0x45fd, 0x45fe, 0x45ff,
+ 0x4600, 0x4601, 0x4602, 0x4603, 0x4604, 0x4605, 0x4606, 0x4607, /* 0x4600 */
+ 0x4608, 0x4609, 0x460a, 0x460b, 0x460c, 0x460d, 0x460e, 0x460f,
+ 0x4610, 0x4611, 0x4612, 0x4613, 0x4614, 0x4615, 0x4616, 0x4617,
+ 0x4618, 0x4619, 0x461a, 0x461b, 0x461c, 0x461d, 0x461e, 0x461f,
+ 0x4620, 0x4621, 0x4622, 0x4623, 0x4624, 0x4625, 0x4626, 0x4627,
+ 0x4628, 0x4629, 0x462a, 0x462b, 0x462c, 0x462d, 0x462e, 0x462f,
+ 0x4630, 0x4631, 0x4632, 0x4633, 0x4634, 0x4635, 0x4636, 0x4637,
+ 0x4638, 0x4639, 0x463a, 0x463b, 0x463c, 0x463d, 0x463e, 0x463f,
+ 0x4640, 0x4641, 0x4642, 0x4643, 0x4644, 0x4645, 0x4646, 0x4647, /* 0x4640 */
+ 0x4648, 0x4649, 0x464a, 0x464b, 0x464c, 0x464d, 0x464e, 0x464f,
+ 0x4650, 0x4651, 0x4652, 0x4653, 0x4654, 0x4655, 0x4656, 0x4657,
+ 0x4658, 0x4659, 0x465a, 0x465b, 0x465c, 0x465d, 0x465e, 0x465f,
+ 0x4660, 0x4661, 0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667,
+ 0x4668, 0x4669, 0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f,
+ 0x4670, 0x4671, 0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677,
+ 0x4678, 0x4679, 0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x467f,
+ 0x4680, 0x4681, 0x4682, 0x4683, 0x4684, 0x4685, 0x4686, 0x4687, /* 0x4680 */
+ 0x4688, 0x4689, 0x468a, 0x468b, 0x468c, 0x468d, 0x468e, 0x468f,
+ 0x4690, 0x4691, 0x4692, 0x4693, 0x4694, 0x4695, 0x4696, 0x4697,
+ 0x4698, 0x4699, 0x469a, 0x469b, 0x469c, 0x469d, 0x469e, 0x469f,
+ 0x46a0, 0x46a1, 0x46a2, 0x46a3, 0x46a4, 0x46a5, 0x46a6, 0x46a7,
+ 0x46a8, 0x46a9, 0x46aa, 0x46ab, 0x46ac, 0x46ad, 0x46ae, 0x46af,
+ 0x46b0, 0x46b1, 0x46b2, 0x46b3, 0x46b4, 0x46b5, 0x46b6, 0x46b7,
+ 0x46b8, 0x46b9, 0x46ba, 0x46bb, 0x46bc, 0x46bd, 0x46be, 0x46bf,
+ 0x46c0, 0x46c1, 0x46c2, 0x46c3, 0x46c4, 0x46c5, 0x46c6, 0x46c7, /* 0x46c0 */
+ 0x46c8, 0x46c9, 0x46ca, 0x46cb, 0x46cc, 0x46cd, 0x46ce, 0x46cf,
+ 0x46d0, 0x46d1, 0x46d2, 0x46d3, 0x46d4, 0x46d5, 0x46d6, 0x46d7,
+ 0x46d8, 0x46d9, 0x46da, 0x46db, 0x46dc, 0x46dd, 0x46de, 0x46df,
+ 0x46e0, 0x46e1, 0x46e2, 0x46e3, 0x46e4, 0x46e5, 0x46e6, 0x46e7,
+ 0x46e8, 0x46e9, 0x46ea, 0x46eb, 0x46ec, 0x46ed, 0x46ee, 0x46ef,
+ 0x46f0, 0x46f1, 0x46f2, 0x46f3, 0x46f4, 0x46f5, 0x46f6, 0x46f7,
+ 0x46f8, 0x46f9, 0x46fa, 0x46fb, 0x46fc, 0x46fd, 0x46fe, 0x46ff,
+ 0x4700, 0x4701, 0x4702, 0x4703, 0x4704, 0x4705, 0x4706, 0x4707, /* 0x4700 */
+ 0x4708, 0x4709, 0x470a, 0x470b, 0x470c, 0x470d, 0x470e, 0x470f,
+ 0x4710, 0x4711, 0x4712, 0x4713, 0x4714, 0x4715, 0x4716, 0x4717,
+ 0x4718, 0x4719, 0x471a, 0x471b, 0x471c, 0x471d, 0x471e, 0x471f,
+ 0x4720, 0x4721, 0x4722, 0x4723, 0x4724, 0x4725, 0x4726, 0x4727,
+ 0x4728, 0x4729, 0x472a, 0x472b, 0x472c, 0x472d, 0x472e, 0x472f,
+ 0x4730, 0x4731, 0x4732, 0x4733, 0x4734, 0x4735, 0x4736, 0x4737,
+ 0x4738, 0x4739, 0x473a, 0x473b, 0x473c, 0x473d, 0x473e, 0x473f,
+ 0x4740, 0x4741, 0x4742, 0x4743, 0x4744, 0x4745, 0x4746, 0x4747, /* 0x4740 */
+ 0x4748, 0x4749, 0x474a, 0x474b, 0x474c, 0x474d, 0x474e, 0x474f,
+ 0x4750, 0x4751, 0x4752, 0x4753, 0x4754, 0x4755, 0x4756, 0x4757,
+ 0x4758, 0x4759, 0x475a, 0x475b, 0x475c, 0x475d, 0x475e, 0x475f,
+ 0x4760, 0x4761, 0x4762, 0x4763, 0x4764, 0x4765, 0x4766, 0x4767,
+ 0x4768, 0x4769, 0x476a, 0x476b, 0x476c, 0x476d, 0x476e, 0x476f,
+ 0x4770, 0x4771, 0x4772, 0x4773, 0x4774, 0x4775, 0x4776, 0x4777,
+ 0x4778, 0x4779, 0x477a, 0x477b, 0x477c, 0x477d, 0x477e, 0x477f,
+ 0x4780, 0x4781, 0x4782, 0x4783, 0x4784, 0x4785, 0x4786, 0x4787, /* 0x4780 */
+ 0x4788, 0x4789, 0x478a, 0x478b, 0x478c, 0x478d, 0x478e, 0x478f,
+ 0x4790, 0x4791, 0x4792, 0x4793, 0x4794, 0x4795, 0x4796, 0x4797,
+ 0x4798, 0x4799, 0x479a, 0x479b, 0x479c, 0x479d, 0x479e, 0x479f,
+ 0x47a0, 0x47a1, 0x47a2, 0x47a3, 0x47a4, 0x47a5, 0x47a6, 0x47a7,
+ 0x47a8, 0x47a9, 0x47aa, 0x47ab, 0x47ac, 0x47ad, 0x47ae, 0x47af,
+ 0x47b0, 0x47b1, 0x47b2, 0x47b3, 0x47b4, 0x47b5, 0x47b6, 0x47b7,
+ 0x47b8, 0x47b9, 0x47ba, 0x47bb, 0x47bc, 0x47bd, 0x47be, 0x47bf,
+ 0x47c0, 0x47c1, 0x47c2, 0x47c3, 0x47c4, 0x47c5, 0x47c6, 0x47c7, /* 0x47c0 */
+ 0x47c8, 0x47c9, 0x47ca, 0x47cb, 0x47cc, 0x47cd, 0x47ce, 0x47cf,
+ 0x47d0, 0x47d1, 0x47d2, 0x47d3, 0x47d4, 0x47d5, 0x47d6, 0x47d7,
+ 0x47d8, 0x47d9, 0x47da, 0x47db, 0x47dc, 0x47dd, 0x47de, 0x47df,
+ 0x47e0, 0x47e1, 0x47e2, 0x47e3, 0x47e4, 0x47e5, 0x47e6, 0x47e7,
+ 0x47e8, 0x47e9, 0x47ea, 0x47eb, 0x47ec, 0x47ed, 0x47ee, 0x47ef,
+ 0x47f0, 0x47f1, 0x47f2, 0x47f3, 0x47f4, 0x47f5, 0x47f6, 0x47f7,
+ 0x47f8, 0x47f9, 0x47fa, 0x47fb, 0x47fc, 0x47fd, 0x47fe, 0x47ff,
+ 0x4800, 0x4801, 0x4802, 0x4803, 0x4804, 0x4805, 0x4806, 0x4807, /* 0x4800 */
+ 0x4808, 0x4809, 0x480a, 0x480b, 0x480c, 0x480d, 0x480e, 0x480f,
+ 0x4810, 0x4811, 0x4812, 0x4813, 0x4814, 0x4815, 0x4816, 0x4817,
+ 0x4818, 0x4819, 0x481a, 0x481b, 0x481c, 0x481d, 0x481e, 0x481f,
+ 0x4820, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826, 0x4827,
+ 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e, 0x482f,
+ 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836, 0x4837,
+ 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e, 0x483f,
+ 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846, 0x4847, /* 0x4840 */
+ 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x484d, 0x484e, 0x484f,
+ 0x4850, 0x4851, 0x4852, 0x4853, 0x4854, 0x4855, 0x4856, 0x4857,
+ 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e, 0x485f,
+ 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867,
+ 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e, 0x486f,
+ 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876, 0x4877,
+ 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e, 0x487f,
+ 0x4880, 0x4881, 0x4882, 0x4883, 0x4884, 0x4885, 0x4886, 0x4887, /* 0x4880 */
+ 0x4888, 0x4889, 0x488a, 0x488b, 0x488c, 0x488d, 0x488e, 0x488f,
+ 0x4890, 0x4891, 0x4892, 0x4893, 0x4894, 0x4895, 0x4896, 0x4897,
+ 0x4898, 0x4899, 0x489a, 0x489b, 0x489c, 0x489d, 0x489e, 0x489f,
+ 0x48a0, 0x48a1, 0x48a2, 0x48a3, 0x48a4, 0x48a5, 0x48a6, 0x48a7,
+ 0x48a8, 0x48a9, 0x48aa, 0x48ab, 0x48ac, 0x48ad, 0x48ae, 0x48af,
+ 0x48b0, 0x48b1, 0x48b2, 0x48b3, 0x48b4, 0x48b5, 0x48b6, 0x48b7,
+ 0x48b8, 0x48b9, 0x48ba, 0x48bb, 0x48bc, 0x48bd, 0x48be, 0x48bf,
+ 0x48c0, 0x48c1, 0x48c2, 0x48c3, 0x48c4, 0x48c5, 0x48c6, 0x48c7, /* 0x48c0 */
+ 0x48c8, 0x48c9, 0x48ca, 0x48cb, 0x48cc, 0x48cd, 0x48ce, 0x48cf,
+ 0x48d0, 0x48d1, 0x48d2, 0x48d3, 0x48d4, 0x48d5, 0x48d6, 0x48d7,
+ 0x48d8, 0x48d9, 0x48da, 0x48db, 0x48dc, 0x48dd, 0x48de, 0x48df,
+ 0x48e0, 0x48e1, 0x48e2, 0x48e3, 0x48e4, 0x48e5, 0x48e6, 0x48e7,
+ 0x48e8, 0x48e9, 0x48ea, 0x48eb, 0x48ec, 0x48ed, 0x48ee, 0x48ef,
+ 0x48f0, 0x48f1, 0x48f2, 0x48f3, 0x48f4, 0x48f5, 0x48f6, 0x48f7,
+ 0x48f8, 0x48f9, 0x48fa, 0x48fb, 0x48fc, 0x48fd, 0x48fe, 0x48ff,
+ 0x4900, 0x4901, 0x4902, 0x4903, 0x4904, 0x4905, 0x4906, 0x4907, /* 0x4900 */
+ 0x4908, 0x4909, 0x490a, 0x490b, 0x490c, 0x490d, 0x490e, 0x490f,
+ 0x4910, 0x4911, 0x4912, 0x4913, 0x4914, 0x4915, 0x4916, 0x4917,
+ 0x4918, 0x4919, 0x491a, 0x491b, 0x491c, 0x491d, 0x491e, 0x491f,
+ 0x4920, 0x4921, 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927,
+ 0x4928, 0x4929, 0x492a, 0x492b, 0x492c, 0x492d, 0x492e, 0x492f,
+ 0x4930, 0x4931, 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937,
+ 0x4938, 0x4939, 0x493a, 0x493b, 0x493c, 0x493d, 0x493e, 0x493f,
+ 0x4940, 0x4941, 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 0x4947, /* 0x4940 */
+ 0x4948, 0x4949, 0x494a, 0x494b, 0x494c, 0x494d, 0x494e, 0x494f,
+ 0x4950, 0x4951, 0x4952, 0x4953, 0x4954, 0x4955, 0x4956, 0x4957,
+ 0x4958, 0x4959, 0x495a, 0x495b, 0x495c, 0x495d, 0x495e, 0x495f,
+ 0x4960, 0x4961, 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, 0x4967,
+ 0x4968, 0x4969, 0x496a, 0x496b, 0x496c, 0x496d, 0x496e, 0x496f,
+ 0x4970, 0x4971, 0x4972, 0x4973, 0x4974, 0x4975, 0x4976, 0x4977,
+ 0x4978, 0x4979, 0x497a, 0x497b, 0x497c, 0x497d, 0x497e, 0x497f,
+ 0x4980, 0x4981, 0x4982, 0x4983, 0x4984, 0x4985, 0x4986, 0x4987, /* 0x4980 */
+ 0x4988, 0x4989, 0x498a, 0x498b, 0x498c, 0x498d, 0x498e, 0x498f,
+ 0x4990, 0x4991, 0x4992, 0x4993, 0x4994, 0x4995, 0x4996, 0x4997,
+ 0x4998, 0x4999, 0x499a, 0x499b, 0x499c, 0x499d, 0x499e, 0x499f,
+ 0x49a0, 0x49a1, 0x49a2, 0x49a3, 0x49a4, 0x49a5, 0x49a6, 0x49a7,
+ 0x49a8, 0x49a9, 0x49aa, 0x49ab, 0x49ac, 0x49ad, 0x49ae, 0x49af,
+ 0x49b0, 0x49b1, 0x49b2, 0x49b3, 0x49b4, 0x49b5, 0x49b6, 0x49b7,
+ 0x49b8, 0x49b9, 0x49ba, 0x49bb, 0x49bc, 0x49bd, 0x49be, 0x49bf,
+ 0x49c0, 0x49c1, 0x49c2, 0x49c3, 0x49c4, 0x49c5, 0x49c6, 0x49c7, /* 0x49c0 */
+ 0x49c8, 0x49c9, 0x49ca, 0x49cb, 0x49cc, 0x49cd, 0x49ce, 0x49cf,
+ 0x49d0, 0x49d1, 0x49d2, 0x49d3, 0x49d4, 0x49d5, 0x49d6, 0x49d7,
+ 0x49d8, 0x49d9, 0x49da, 0x49db, 0x49dc, 0x49dd, 0x49de, 0x49df,
+ 0x49e0, 0x49e1, 0x49e2, 0x49e3, 0x49e4, 0x49e5, 0x49e6, 0x49e7,
+ 0x49e8, 0x49e9, 0x49ea, 0x49eb, 0x49ec, 0x49ed, 0x49ee, 0x49ef,
+ 0x49f0, 0x49f1, 0x49f2, 0x49f3, 0x49f4, 0x49f5, 0x49f6, 0x49f7,
+ 0x49f8, 0x49f9, 0x49fa, 0x49fb, 0x49fc, 0x49fd, 0x49fe, 0x49ff,
+ 0x4a00, 0x4a01, 0x4a02, 0x4a03, 0x4a04, 0x4a05, 0x4a06, 0x4a07, /* 0x4a00 */
+ 0x4a08, 0x4a09, 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0d, 0x4a0e, 0x4a0f,
+ 0x4a10, 0x4a11, 0x4a12, 0x4a13, 0x4a14, 0x4a15, 0x4a16, 0x4a17,
+ 0x4a18, 0x4a19, 0x4a1a, 0x4a1b, 0x4a1c, 0x4a1d, 0x4a1e, 0x4a1f,
+ 0x4a20, 0x4a21, 0x4a22, 0x4a23, 0x4a24, 0x4a25, 0x4a26, 0x4a27,
+ 0x4a28, 0x4a29, 0x4a2a, 0x4a2b, 0x4a2c, 0x4a2d, 0x4a2e, 0x4a2f,
+ 0x4a30, 0x4a31, 0x4a32, 0x4a33, 0x4a34, 0x4a35, 0x4a36, 0x4a37,
+ 0x4a38, 0x4a39, 0x4a3a, 0x4a3b, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f,
+ 0x4a40, 0x4a41, 0x4a42, 0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a47, /* 0x4a40 */
+ 0x4a48, 0x4a49, 0x4a4a, 0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f,
+ 0x4a50, 0x4a51, 0x4a52, 0x4a53, 0x4a54, 0x4a55, 0x4a56, 0x4a57,
+ 0x4a58, 0x4a59, 0x4a5a, 0x4a5b, 0x4a5c, 0x4a5d, 0x4a5e, 0x4a5f,
+ 0x4a60, 0x4a61, 0x4a62, 0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a67,
+ 0x4a68, 0x4a69, 0x4a6a, 0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6f,
+ 0x4a70, 0x4a71, 0x4a72, 0x4a73, 0x4a74, 0x4a75, 0x4a76, 0x4a77,
+ 0x4a78, 0x4a79, 0x4a7a, 0x4a7b, 0x4a7c, 0x4a7d, 0x4a7e, 0x4a7f,
+ 0x4a80, 0x4a81, 0x4a82, 0x4a83, 0x4a84, 0x4a85, 0x4a86, 0x4a87, /* 0x4a80 */
+ 0x4a88, 0x4a89, 0x4a8a, 0x4a8b, 0x4a8c, 0x4a8d, 0x4a8e, 0x4a8f,
+ 0x4a90, 0x4a91, 0x4a92, 0x4a93, 0x4a94, 0x4a95, 0x4a96, 0x4a97,
+ 0x4a98, 0x4a99, 0x4a9a, 0x4a9b, 0x4a9c, 0x4a9d, 0x4a9e, 0x4a9f,
+ 0x4aa0, 0x4aa1, 0x4aa2, 0x4aa3, 0x4aa4, 0x4aa5, 0x4aa6, 0x4aa7,
+ 0x4aa8, 0x4aa9, 0x4aaa, 0x4aab, 0x4aac, 0x4aad, 0x4aae, 0x4aaf,
+ 0x4ab0, 0x4ab1, 0x4ab2, 0x4ab3, 0x4ab4, 0x4ab5, 0x4ab6, 0x4ab7,
+ 0x4ab8, 0x4ab9, 0x4aba, 0x4abb, 0x4abc, 0x4abd, 0x4abe, 0x4abf,
+ 0x4ac0, 0x4ac1, 0x4ac2, 0x4ac3, 0x4ac4, 0x4ac5, 0x4ac6, 0x4ac7, /* 0x4ac0 */
+ 0x4ac8, 0x4ac9, 0x4aca, 0x4acb, 0x4acc, 0x4acd, 0x4ace, 0x4acf,
+ 0x4ad0, 0x4ad1, 0x4ad2, 0x4ad3, 0x4ad4, 0x4ad5, 0x4ad6, 0x4ad7,
+ 0x4ad8, 0x4ad9, 0x4ada, 0x4adb, 0x4adc, 0x4add, 0x4ade, 0x4adf,
+ 0x4ae0, 0x4ae1, 0x4ae2, 0x4ae3, 0x4ae4, 0x4ae5, 0x4ae6, 0x4ae7,
+ 0x4ae8, 0x4ae9, 0x4aea, 0x4aeb, 0x4aec, 0x4aed, 0x4aee, 0x4aef,
+ 0x4af0, 0x4af1, 0x4af2, 0x4af3, 0x4af4, 0x4af5, 0x4af6, 0x4af7,
+ 0x4af8, 0x4af9, 0x4afa, 0x4afb, 0x4afc, 0x4afd, 0x4afe, 0x4aff,
+ 0x4b00, 0x4b01, 0x4b02, 0x4b03, 0x4b04, 0x4b05, 0x4b06, 0x4b07, /* 0x4b00 */
+ 0x4b08, 0x4b09, 0x4b0a, 0x4b0b, 0x4b0c, 0x4b0d, 0x4b0e, 0x4b0f,
+ 0x4b10, 0x4b11, 0x4b12, 0x4b13, 0x4b14, 0x4b15, 0x4b16, 0x4b17,
+ 0x4b18, 0x4b19, 0x4b1a, 0x4b1b, 0x4b1c, 0x4b1d, 0x4b1e, 0x4b1f,
+ 0x4b20, 0x4b21, 0x4b22, 0x4b23, 0x4b24, 0x4b25, 0x4b26, 0x4b27,
+ 0x4b28, 0x4b29, 0x4b2a, 0x4b2b, 0x4b2c, 0x4b2d, 0x4b2e, 0x4b2f,
+ 0x4b30, 0x4b31, 0x4b32, 0x4b33, 0x4b34, 0x4b35, 0x4b36, 0x4b37,
+ 0x4b38, 0x4b39, 0x4b3a, 0x4b3b, 0x4b3c, 0x4b3d, 0x4b3e, 0x4b3f,
+ 0x4b40, 0x4b41, 0x4b42, 0x4b43, 0x4b44, 0x4b45, 0x4b46, 0x4b47, /* 0x4b40 */
+ 0x4b48, 0x4b49, 0x4b4a, 0x4b4b, 0x4b4c, 0x4b4d, 0x4b4e, 0x4b4f,
+ 0x4b50, 0x4b51, 0x4b52, 0x4b53, 0x4b54, 0x4b55, 0x4b56, 0x4b57,
+ 0x4b58, 0x4b59, 0x4b5a, 0x4b5b, 0x4b5c, 0x4b5d, 0x4b5e, 0x4b5f,
+ 0x4b60, 0x4b61, 0x4b62, 0x4b63, 0x4b64, 0x4b65, 0x4b66, 0x4b67,
+ 0x4b68, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6c, 0x4b6d, 0x4b6e, 0x4b6f,
+ 0x4b70, 0x4b71, 0x4b72, 0x4b73, 0x4b74, 0x4b75, 0x4b76, 0x4b77,
+ 0x4b78, 0x4b79, 0x4b7a, 0x4b7b, 0x4b7c, 0x4b7d, 0x4b7e, 0x4b7f,
+ 0x4b80, 0x4b81, 0x4b82, 0x4b83, 0x4b84, 0x4b85, 0x4b86, 0x4b87, /* 0x4b80 */
+ 0x4b88, 0x4b89, 0x4b8a, 0x4b8b, 0x4b8c, 0x4b8d, 0x4b8e, 0x4b8f,
+ 0x4b90, 0x4b91, 0x4b92, 0x4b93, 0x4b94, 0x4b95, 0x4b96, 0x4b97,
+ 0x4b98, 0x4b99, 0x4b9a, 0x4b9b, 0x4b9c, 0x4b9d, 0x4b9e, 0x4b9f,
+ 0x4ba0, 0x4ba1, 0x4ba2, 0x4ba3, 0x4ba4, 0x4ba5, 0x4ba6, 0x4ba7,
+ 0x4ba8, 0x4ba9, 0x4baa, 0x4bab, 0x4bac, 0x4bad, 0x4bae, 0x4baf,
+ 0x4bb0, 0x4bb1, 0x4bb2, 0x4bb3, 0x4bb4, 0x4bb5, 0x4bb6, 0x4bb7,
+ 0x4bb8, 0x4bb9, 0x4bba, 0x4bbb, 0x4bbc, 0x4bbd, 0x4bbe, 0x4bbf,
+ 0x4bc0, 0x4bc1, 0x4bc2, 0x4bc3, 0x4bc4, 0x4bc5, 0x4bc6, 0x4bc7, /* 0x4bc0 */
+ 0x4bc8, 0x4bc9, 0x4bca, 0x4bcb, 0x4bcc, 0x4bcd, 0x4bce, 0x4bcf,
+ 0x4bd0, 0x4bd1, 0x4bd2, 0x4bd3, 0x4bd4, 0x4bd5, 0x4bd6, 0x4bd7,
+ 0x4bd8, 0x4bd9, 0x4bda, 0x4bdb, 0x4bdc, 0x4bdd, 0x4bde, 0x4bdf,
+ 0x4be0, 0x4be1, 0x4be2, 0x4be3, 0x4be4, 0x4be5, 0x4be6, 0x4be7,
+ 0x4be8, 0x4be9, 0x4bea, 0x4beb, 0x4bec, 0x4bed, 0x4bee, 0x4bef,
+ 0x4bf0, 0x4bf1, 0x4bf2, 0x4bf3, 0x4bf4, 0x4bf5, 0x4bf6, 0x4bf7,
+ 0x4bf8, 0x4bf9, 0x4bfa, 0x4bfb, 0x4bfc, 0x4bfd, 0x4bfe, 0x4bff,
+ 0x4c00, 0x4c01, 0x4c02, 0x4c03, 0x4c04, 0x4c05, 0x4c06, 0x4c07, /* 0x4c00 */
+ 0x4c08, 0x4c09, 0x4c0a, 0x4c0b, 0x4c0c, 0x4c0d, 0x4c0e, 0x4c0f,
+ 0x4c10, 0x4c11, 0x4c12, 0x4c13, 0x4c14, 0x4c15, 0x4c16, 0x4c17,
+ 0x4c18, 0x4c19, 0x4c1a, 0x4c1b, 0x4c1c, 0x4c1d, 0x4c1e, 0x4c1f,
+ 0x4c20, 0x4c21, 0x4c22, 0x4c23, 0x4c24, 0x4c25, 0x4c26, 0x4c27,
+ 0x4c28, 0x4c29, 0x4c2a, 0x4c2b, 0x4c2c, 0x4c2d, 0x4c2e, 0x4c2f,
+ 0x4c30, 0x4c31, 0x4c32, 0x4c33, 0x4c34, 0x4c35, 0x4c36, 0x4c37,
+ 0x4c38, 0x4c39, 0x4c3a, 0x4c3b, 0x4c3c, 0x4c3d, 0x4c3e, 0x4c3f,
+ 0x4c40, 0x4c41, 0x4c42, 0x4c43, 0x4c44, 0x4c45, 0x4c46, 0x4c47, /* 0x4c40 */
+ 0x4c48, 0x4c49, 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4d, 0x4c4e, 0x4c4f,
+ 0x4c50, 0x4c51, 0x4c52, 0x4c53, 0x4c54, 0x4c55, 0x4c56, 0x4c57,
+ 0x4c58, 0x4c59, 0x4c5a, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c5e, 0x4c5f,
+ 0x4c60, 0x4c61, 0x4c62, 0x4c63, 0x4c64, 0x4c65, 0x4c66, 0x4c67,
+ 0x4c68, 0x4c69, 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6d, 0x4c6e, 0x4c6f,
+ 0x4c70, 0x4c71, 0x4c72, 0x4c73, 0x4c74, 0x4c75, 0x4c76, 0x4c77,
+ 0x4c78, 0x4c79, 0x4c7a, 0x4c7b, 0x4c7c, 0x4c7d, 0x4c7e, 0x4c7f,
+ 0x4c80, 0x4c81, 0x4c82, 0x4c83, 0x4c84, 0x4c85, 0x4c86, 0x4c87, /* 0x4c80 */
+ 0x4c88, 0x4c89, 0x4c8a, 0x4c8b, 0x4c8c, 0x4c8d, 0x4c8e, 0x4c8f,
+ 0x4c90, 0x4c91, 0x4c92, 0x4c93, 0x4c94, 0x4c95, 0x4c96, 0x4c97,
+ 0x4c98, 0x4c99, 0x4c9a, 0x4c9b, 0x4c9c, 0x4c9d, 0x4c9e, 0x4c9f,
+ 0x4ca0, 0x4ca1, 0x4ca2, 0x4ca3, 0x4ca4, 0x4ca5, 0x4ca6, 0x4ca7,
+ 0x4ca8, 0x4ca9, 0x4caa, 0x4cab, 0x4cac, 0x4cad, 0x4cae, 0x4caf,
+ 0x4cb0, 0x4cb1, 0x4cb2, 0x4cb3, 0x4cb4, 0x4cb5, 0x4cb6, 0x4cb7,
+ 0x4cb8, 0x4cb9, 0x4cba, 0x4cbb, 0x4cbc, 0x4cbd, 0x4cbe, 0x4cbf,
+ 0x4cc0, 0x4cc1, 0x4cc2, 0x4cc3, 0x4cc4, 0x4cc5, 0x4cc6, 0x4cc7, /* 0x4cc0 */
+ 0x4cc8, 0x4cc9, 0x4cca, 0x4ccb, 0x4ccc, 0x4ccd, 0x4cce, 0x4ccf,
+ 0x4cd0, 0x4cd1, 0x4cd2, 0x4cd3, 0x4cd4, 0x4cd5, 0x4cd6, 0x4cd7,
+ 0x4cd8, 0x4cd9, 0x4cda, 0x4cdb, 0x4cdc, 0x4cdd, 0x4cde, 0x4cdf,
+ 0x4ce0, 0x4ce1, 0x4ce2, 0x4ce3, 0x4ce4, 0x4ce5, 0x4ce6, 0x4ce7,
+ 0x4ce8, 0x4ce9, 0x4cea, 0x4ceb, 0x4cec, 0x4ced, 0x4cee, 0x4cef,
+ 0x4cf0, 0x4cf1, 0x4cf2, 0x4cf3, 0x4cf4, 0x4cf5, 0x4cf6, 0x4cf7,
+ 0x4cf8, 0x4cf9, 0x4cfa, 0x4cfb, 0x4cfc, 0x4cfd, 0x4cfe, 0x4cff,
+ 0x4d00, 0x4d01, 0x4d02, 0x4d03, 0x4d04, 0x4d05, 0x4d06, 0x4d07, /* 0x4d00 */
+ 0x4d08, 0x4d09, 0x4d0a, 0x4d0b, 0x4d0c, 0x4d0d, 0x4d0e, 0x4d0f,
+ 0x4d10, 0x4d11, 0x4d12, 0x4d13, 0x4d14, 0x4d15, 0x4d16, 0x4d17,
+ 0x4d18, 0x4d19, 0x4d1a, 0x4d1b, 0x4d1c, 0x4d1d, 0x4d1e, 0x4d1f,
+ 0x4d20, 0x4d21, 0x4d22, 0x4d23, 0x4d24, 0x4d25, 0x4d26, 0x4d27,
+ 0x4d28, 0x4d29, 0x4d2a, 0x4d2b, 0x4d2c, 0x4d2d, 0x4d2e, 0x4d2f,
+ 0x4d30, 0x4d31, 0x4d32, 0x4d33, 0x4d34, 0x4d35, 0x4d36, 0x4d37,
+ 0x4d38, 0x4d39, 0x4d3a, 0x4d3b, 0x4d3c, 0x4d3d, 0x4d3e, 0x4d3f,
+ 0x4d40, 0x4d41, 0x4d42, 0x4d43, 0x4d44, 0x4d45, 0x4d46, 0x4d47, /* 0x4d40 */
+ 0x4d48, 0x4d49, 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4d, 0x4d4e, 0x4d4f,
+ 0x4d50, 0x4d51, 0x4d52, 0x4d53, 0x4d54, 0x4d55, 0x4d56, 0x4d57,
+ 0x4d58, 0x4d59, 0x4d5a, 0x4d5b, 0x4d5c, 0x4d5d, 0x4d5e, 0x4d5f,
+ 0x4d60, 0x4d61, 0x4d62, 0x4d63, 0x4d64, 0x4d65, 0x4d66, 0x4d67,
+ 0x4d68, 0x4d69, 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6d, 0x4d6e, 0x4d6f,
+ 0x4d70, 0x4d71, 0x4d72, 0x4d73, 0x4d74, 0x4d75, 0x4d76, 0x4d77,
+ 0x4d78, 0x4d79, 0x4d7a, 0x4d7b, 0x4d7c, 0x4d7d, 0x4d7e, 0x4d7f,
+ 0x4d80, 0x4d81, 0x4d82, 0x4d83, 0x4d84, 0x4d85, 0x4d86, 0x4d87, /* 0x4d80 */
+ 0x4d88, 0x4d89, 0x4d8a, 0x4d8b, 0x4d8c, 0x4d8d, 0x4d8e, 0x4d8f,
+ 0x4d90, 0x4d91, 0x4d92, 0x4d93, 0x4d94, 0x4d95, 0x4d96, 0x4d97,
+ 0x4d98, 0x4d99, 0x4d9a, 0x4d9b, 0x4d9c, 0x4d9d, 0x4d9e, 0x4d9f,
+ 0x4da0, 0x4da1, 0x4da2, 0x4da3, 0x4da4, 0x4da5, 0x4da6, 0x4da7,
+ 0x4da8, 0x4da9, 0x4daa, 0x4dab, 0x4dac, 0x4dad, 0x4dae, 0x4daf,
+ 0x4db0, 0x4db1, 0x4db2, 0x4db3, 0x4db4, 0x4db5, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x4dc0, 0x4dc1, 0x4dc2, 0x4dc3, 0x4dc4, 0x4dc5, 0x4dc6, 0x4dc7, /* 0x4dc0 */
+ 0x4dc8, 0x4dc9, 0x4dca, 0x4dcb, 0x4dcc, 0x4dcd, 0x4dce, 0x4dcf,
+ 0x4dd0, 0x4dd1, 0x4dd2, 0x4dd3, 0x4dd4, 0x4dd5, 0x4dd6, 0x4dd7,
+ 0x4dd8, 0x4dd9, 0x4dda, 0x4ddb, 0x4ddc, 0x4ddd, 0x4dde, 0x4ddf,
+ 0x4de0, 0x4de1, 0x4de2, 0x4de3, 0x4de4, 0x4de5, 0x4de6, 0x4de7,
+ 0x4de8, 0x4de9, 0x4dea, 0x4deb, 0x4dec, 0x4ded, 0x4dee, 0x4def,
+ 0x4df0, 0x4df1, 0x4df2, 0x4df3, 0x4df4, 0x4df5, 0x4df6, 0x4df7,
+ 0x4df8, 0x4df9, 0x4dfa, 0x4dfb, 0x4dfc, 0x4dfd, 0x4dfe, 0x4dff,
+ 0x4e00, 0x4e01, 0x4e02, 0x4e03, 0x4e04, 0x4e05, 0x4e06, 0x4e07, /* 0x4e00 */
+ 0x4e08, 0x4e09, 0x4e0a, 0x4e0b, 0x4e0c, 0x4e0d, 0x4e0e, 0x4e0f,
+ 0x4e10, 0x4e11, 0x4e12, 0x4e13, 0x4e14, 0x4e15, 0x4e16, 0x4e17,
+ 0x4e18, 0x4e19, 0x4e1a, 0x4e1b, 0x4e1c, 0x4e1d, 0x4e1e, 0x4e1f,
+ 0x4e20, 0x4e21, 0x4e22, 0x4e23, 0x4e24, 0x4e25, 0x4e26, 0x4e27,
+ 0x4e28, 0x4e29, 0x4e2a, 0x4e2b, 0x4e2c, 0x4e2d, 0x4e2e, 0x4e2f,
+ 0x4e30, 0x4e31, 0x4e32, 0x4e33, 0x4e34, 0x4e35, 0x4e36, 0x4e37,
+ 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, 0x4e3c, 0x4e3d, 0x4e3e, 0x4e3f,
+ 0x4e40, 0x4e41, 0x4e42, 0x4e43, 0x4e44, 0x4e45, 0x4e46, 0x4e47, /* 0x4e40 */
+ 0x4e48, 0x4e49, 0x4e4a, 0x4e4b, 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f,
+ 0x4e50, 0x4e51, 0x4e52, 0x4e53, 0x4e54, 0x4e55, 0x4e56, 0x4e57,
+ 0x4e58, 0x4e59, 0x4e5a, 0x4e5b, 0x4e5c, 0x4e5d, 0x4e5e, 0x4e5f,
+ 0x4e60, 0x4e61, 0x4e62, 0x4e63, 0x4e64, 0x4e65, 0x4e66, 0x4e67,
+ 0x4e68, 0x4e69, 0x4e6a, 0x4e6b, 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f,
+ 0x4e70, 0x4e71, 0x4e72, 0x4e73, 0x4e74, 0x4e75, 0x4e76, 0x4e77,
+ 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7e, 0x4e7f,
+ 0x4e80, 0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e86, 0x4e87, /* 0x4e80 */
+ 0x4e88, 0x4e89, 0x4e8a, 0x4e8b, 0x4e8c, 0x4e8d, 0x4e8e, 0x4e8f,
+ 0x4e90, 0x4e91, 0x4e92, 0x4e93, 0x4e94, 0x4e95, 0x4e96, 0x4e97,
+ 0x4e98, 0x4e99, 0x4e9a, 0x4e9b, 0x4e9c, 0x4e9d, 0x4e9e, 0x4e9f,
+ 0x4ea0, 0x4ea1, 0x4ea2, 0x4ea3, 0x4ea4, 0x4ea5, 0x4ea6, 0x4ea7,
+ 0x4ea8, 0x4ea9, 0x4eaa, 0x4eab, 0x4eac, 0x4ead, 0x4eae, 0x4eaf,
+ 0x4eb0, 0x4eb1, 0x4eb2, 0x4eb3, 0x4eb4, 0x4eb5, 0x4eb6, 0x4eb7,
+ 0x4eb8, 0x4eb9, 0x4eba, 0x4ebb, 0x4ebc, 0x4ebd, 0x4ebe, 0x4ebf,
+ 0x4ec0, 0x4ec1, 0x4ec2, 0x4ec3, 0x4ec4, 0x4ec5, 0x4ec6, 0x4ec7, /* 0x4ec0 */
+ 0x4ec8, 0x4ec9, 0x4eca, 0x4ecb, 0x4ecc, 0x4ecd, 0x4ece, 0x4ecf,
+ 0x4ed0, 0x4ed1, 0x4ed2, 0x4ed3, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7,
+ 0x4ed8, 0x4ed9, 0x4eda, 0x4edb, 0x4edc, 0x4edd, 0x4ede, 0x4edf,
+ 0x4ee0, 0x4ee1, 0x4ee2, 0x4ee3, 0x4ee4, 0x4ee5, 0x4ee6, 0x4ee7,
+ 0x4ee8, 0x4ee9, 0x4eea, 0x4eeb, 0x4eec, 0x4eed, 0x4eee, 0x4eef,
+ 0x4ef0, 0x4ef1, 0x4ef2, 0x4ef3, 0x4ef4, 0x4ef5, 0x4ef6, 0x4ef7,
+ 0x4ef8, 0x4ef9, 0x4efa, 0x4efb, 0x4efc, 0x4efd, 0x4efe, 0x4eff,
+ 0x4f00, 0x4f01, 0x4f02, 0x4f03, 0x4f04, 0x4f05, 0x4f06, 0x4f07, /* 0x4f00 */
+ 0x4f08, 0x4f09, 0x4f0a, 0x4f0b, 0x4f0c, 0x4f0d, 0x4f0e, 0x4f0f,
+ 0x4f10, 0x4f11, 0x4f12, 0x4f13, 0x4f14, 0x4f15, 0x4f16, 0x4f17,
+ 0x4f18, 0x4f19, 0x4f1a, 0x4f1b, 0x4f1c, 0x4f1d, 0x4f1e, 0x4f1f,
+ 0x4f20, 0x4f21, 0x4f22, 0x4f23, 0x4f24, 0x4f25, 0x4f26, 0x4f27,
+ 0x4f28, 0x4f29, 0x4f2a, 0x4f2b, 0x4f2c, 0x4f2d, 0x4f2e, 0x4f2f,
+ 0x4f30, 0x4f31, 0x4f32, 0x4f33, 0x4f34, 0x4f35, 0x4f36, 0x4f37,
+ 0x4f38, 0x4f39, 0x4f3a, 0x4f3b, 0x4f3c, 0x4f3d, 0x4f3e, 0x4f3f,
+ 0x4f40, 0x4f41, 0x4f42, 0x4f43, 0x4f44, 0x4f45, 0x4f46, 0x4f47, /* 0x4f40 */
+ 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f4d, 0x4f4e, 0x4f4f,
+ 0x4f50, 0x4f51, 0x4f52, 0x4f53, 0x4f54, 0x4f55, 0x4f56, 0x4f57,
+ 0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c, 0x4f5d, 0x4f5e, 0x4f5f,
+ 0x4f60, 0x4f61, 0x4f62, 0x4f63, 0x4f64, 0x4f65, 0x4f66, 0x4f67,
+ 0x4f68, 0x4f69, 0x4f6a, 0x4f6b, 0x4f6c, 0x4f6d, 0x4f6e, 0x4f6f,
+ 0x4f70, 0x4f71, 0x4f72, 0x4f73, 0x4f74, 0x4f75, 0x4f76, 0x4f77,
+ 0x4f78, 0x4f79, 0x4f7a, 0x4f7b, 0x4f7c, 0x4f7d, 0x4f7e, 0x4f7f,
+ 0x4f80, 0x4f81, 0x4f82, 0x4f83, 0x4f84, 0x4f85, 0x4f86, 0x4f87, /* 0x4f80 */
+ 0x4f88, 0x4f89, 0x4f8a, 0x4f8b, 0x4f8c, 0x4f8d, 0x4f8e, 0x4f8f,
+ 0x4f90, 0x4f91, 0x4f92, 0x4f93, 0x4f94, 0x4f95, 0x4f96, 0x4f97,
+ 0x4f98, 0x4f99, 0x4f9a, 0x4f9b, 0x4f9c, 0x4f9d, 0x4f9e, 0x4f9f,
+ 0x4fa0, 0x4fa1, 0x4fa2, 0x4fa3, 0x4fa4, 0x4fa5, 0x4fa6, 0x4fa7,
+ 0x4fa8, 0x4fa9, 0x4faa, 0x4fab, 0x4fac, 0x4fad, 0x4fae, 0x4faf,
+ 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4, 0x4fb5, 0x4fb6, 0x4fb7,
+ 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fbf,
+ 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc3, 0x4fc4, 0x4fc5, 0x4fc6, 0x4fc7, /* 0x4fc0 */
+ 0x4fc8, 0x4fc9, 0x4fca, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fce, 0x4fcf,
+ 0x4fd0, 0x4fd1, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6, 0x4fd7,
+ 0x4fd8, 0x4fd9, 0x4fda, 0x4fdb, 0x4fdc, 0x4fdd, 0x4fde, 0x4fdf,
+ 0x4fe0, 0x4fe1, 0x4fe2, 0x4fe3, 0x4fe4, 0x4fe5, 0x4fe6, 0x4fe7,
+ 0x4fe8, 0x4fe9, 0x4fea, 0x4feb, 0x4fec, 0x4fed, 0x4fee, 0x4fef,
+ 0x4ff0, 0x4ff1, 0x4ff2, 0x4ff3, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7,
+ 0x4ff8, 0x4ff9, 0x4ffa, 0x4ffb, 0x4ffc, 0x4ffd, 0x4ffe, 0x4fff,
+ 0x5000, 0x5001, 0x5002, 0x5003, 0x5004, 0x5005, 0x5006, 0x5007, /* 0x5000 */
+ 0x5008, 0x5009, 0x500a, 0x500b, 0x500c, 0x500d, 0x500e, 0x500f,
+ 0x5010, 0x5011, 0x5012, 0x5013, 0x5014, 0x5015, 0x5016, 0x5017,
+ 0x5018, 0x5019, 0x501a, 0x501b, 0x501c, 0x501d, 0x501e, 0x501f,
+ 0x5020, 0x5021, 0x5022, 0x5023, 0x5024, 0x5025, 0x5026, 0x5027,
+ 0x5028, 0x5029, 0x502a, 0x502b, 0x502c, 0x502d, 0x502e, 0x502f,
+ 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036, 0x5037,
+ 0x5038, 0x5039, 0x503a, 0x503b, 0x503c, 0x503d, 0x503e, 0x503f,
+ 0x5040, 0x5041, 0x5042, 0x5043, 0x5044, 0x5045, 0x5046, 0x5047, /* 0x5040 */
+ 0x5048, 0x5049, 0x504a, 0x504b, 0x504c, 0x504d, 0x504e, 0x504f,
+ 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5055, 0x5056, 0x5057,
+ 0x5058, 0x5059, 0x505a, 0x505b, 0x505c, 0x505d, 0x505e, 0x505f,
+ 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5065, 0x5066, 0x5067,
+ 0x5068, 0x5069, 0x506a, 0x506b, 0x506c, 0x506d, 0x506e, 0x506f,
+ 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5076, 0x5077,
+ 0x5078, 0x5079, 0x507a, 0x507b, 0x507c, 0x507d, 0x507e, 0x507f,
+ 0x5080, 0x5081, 0x5082, 0x5083, 0x5084, 0x5085, 0x5086, 0x5087, /* 0x5080 */
+ 0x5088, 0x5089, 0x508a, 0x508b, 0x508c, 0x508d, 0x508e, 0x508f,
+ 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095, 0x5096, 0x5097,
+ 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, 0x509d, 0x509e, 0x509f,
+ 0x50a0, 0x50a1, 0x50a2, 0x50a3, 0x50a4, 0x50a5, 0x50a6, 0x50a7,
+ 0x50a8, 0x50a9, 0x50aa, 0x50ab, 0x50ac, 0x50ad, 0x50ae, 0x50af,
+ 0x50b0, 0x50b1, 0x50b2, 0x50b3, 0x50b4, 0x50b5, 0x50b6, 0x50b7,
+ 0x50b8, 0x50b9, 0x50ba, 0x50bb, 0x50bc, 0x50bd, 0x50be, 0x50bf,
+ 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4, 0x50c5, 0x50c6, 0x50c7, /* 0x50c0 */
+ 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc, 0x50cd, 0x50ce, 0x50cf,
+ 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5, 0x50d6, 0x50d7,
+ 0x50d8, 0x50d9, 0x50da, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df,
+ 0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e6, 0x50e7,
+ 0x50e8, 0x50e9, 0x50ea, 0x50eb, 0x50ec, 0x50ed, 0x50ee, 0x50ef,
+ 0x50f0, 0x50f1, 0x50f2, 0x50f3, 0x50f4, 0x50f5, 0x50f6, 0x50f7,
+ 0x50f8, 0x50f9, 0x50fa, 0x50fb, 0x50fc, 0x50fd, 0x50fe, 0x50ff,
+ 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5106, 0x5107, /* 0x5100 */
+ 0x5108, 0x5109, 0x510a, 0x510b, 0x510c, 0x510d, 0x510e, 0x510f,
+ 0x5110, 0x5111, 0x5112, 0x5113, 0x5114, 0x5115, 0x5116, 0x5117,
+ 0x5118, 0x5119, 0x511a, 0x511b, 0x511c, 0x511d, 0x511e, 0x511f,
+ 0x5120, 0x5121, 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127,
+ 0x5128, 0x5129, 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f,
+ 0x5130, 0x5131, 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137,
+ 0x5138, 0x5139, 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x513f,
+ 0x5140, 0x5141, 0x5142, 0x5143, 0x5144, 0x5145, 0x5146, 0x5147, /* 0x5140 */
+ 0x5148, 0x5149, 0x514a, 0x514b, 0x514c, 0x514d, 0x514e, 0x514f,
+ 0x5150, 0x5151, 0x5152, 0x5153, 0x5154, 0x5155, 0x5156, 0x5157,
+ 0x5158, 0x5159, 0x515a, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f,
+ 0x5160, 0x5161, 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5167,
+ 0x5168, 0x5169, 0x516a, 0x516b, 0x516c, 0x516d, 0x516e, 0x516f,
+ 0x5170, 0x5171, 0x5172, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177,
+ 0x5178, 0x5179, 0x517a, 0x517b, 0x517c, 0x517d, 0x517e, 0x517f,
+ 0x5180, 0x5181, 0x5182, 0x5183, 0x5184, 0x5185, 0x5186, 0x5187, /* 0x5180 */
+ 0x5188, 0x5189, 0x518a, 0x518b, 0x518c, 0x518d, 0x518e, 0x518f,
+ 0x5190, 0x5191, 0x5192, 0x5193, 0x5194, 0x5195, 0x5196, 0x5197,
+ 0x5198, 0x5199, 0x519a, 0x519b, 0x519c, 0x519d, 0x519e, 0x519f,
+ 0x51a0, 0x51a1, 0x51a2, 0x51a3, 0x51a4, 0x51a5, 0x51a6, 0x51a7,
+ 0x51a8, 0x51a9, 0x51aa, 0x51ab, 0x51ac, 0x51ad, 0x51ae, 0x51af,
+ 0x51b0, 0x51b1, 0x51b2, 0x51b3, 0x51b4, 0x51b5, 0x51b6, 0x51b7,
+ 0x51b8, 0x51b9, 0x51ba, 0x51bb, 0x51bc, 0x51bd, 0x51be, 0x51bf,
+ 0x51c0, 0x51c1, 0x51c2, 0x51c3, 0x51c4, 0x51c5, 0x51c6, 0x51c7, /* 0x51c0 */
+ 0x51c8, 0x51c9, 0x51ca, 0x51cb, 0x51cc, 0x51cd, 0x51ce, 0x51cf,
+ 0x51d0, 0x51d1, 0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7,
+ 0x51d8, 0x51d9, 0x51da, 0x51db, 0x51dc, 0x51dd, 0x51de, 0x51df,
+ 0x51e0, 0x51e1, 0x51e2, 0x51e3, 0x51e4, 0x51e5, 0x51e6, 0x51e7,
+ 0x51e8, 0x51e9, 0x51ea, 0x51eb, 0x51ec, 0x51ed, 0x51ee, 0x51ef,
+ 0x51f0, 0x51f1, 0x51f2, 0x51f3, 0x51f4, 0x51f5, 0x51f6, 0x51f7,
+ 0x51f8, 0x51f9, 0x51fa, 0x51fb, 0x51fc, 0x51fd, 0x51fe, 0x51ff,
+ 0x5200, 0x5201, 0x5202, 0x5203, 0x5204, 0x5205, 0x5206, 0x5207, /* 0x5200 */
+ 0x5208, 0x5209, 0x520a, 0x520b, 0x520c, 0x520d, 0x520e, 0x520f,
+ 0x5210, 0x5211, 0x5212, 0x5213, 0x5214, 0x5215, 0x5216, 0x5217,
+ 0x5218, 0x5219, 0x521a, 0x521b, 0x521c, 0x521d, 0x521e, 0x521f,
+ 0x5220, 0x5221, 0x5222, 0x5223, 0x5224, 0x5225, 0x5226, 0x5227,
+ 0x5228, 0x5229, 0x522a, 0x522b, 0x522c, 0x522d, 0x522e, 0x522f,
+ 0x5230, 0x5231, 0x5232, 0x5233, 0x5234, 0x5235, 0x5236, 0x5237,
+ 0x5238, 0x5239, 0x523a, 0x523b, 0x523c, 0x523d, 0x523e, 0x523f,
+ 0x5240, 0x5241, 0x5242, 0x5243, 0x5244, 0x5245, 0x5246, 0x5247, /* 0x5240 */
+ 0x5248, 0x5249, 0x524a, 0x524b, 0x524c, 0x524d, 0x524e, 0x524f,
+ 0x5250, 0x5251, 0x5252, 0x5253, 0x5254, 0x5255, 0x5256, 0x5257,
+ 0x5258, 0x5259, 0x525a, 0x525b, 0x525c, 0x525d, 0x525e, 0x525f,
+ 0x5260, 0x5261, 0x5262, 0x5263, 0x5264, 0x5265, 0x5266, 0x5267,
+ 0x5268, 0x5269, 0x526a, 0x526b, 0x526c, 0x526d, 0x526e, 0x526f,
+ 0x5270, 0x5271, 0x5272, 0x5273, 0x5274, 0x5275, 0x5276, 0x5277,
+ 0x5278, 0x5279, 0x527a, 0x527b, 0x527c, 0x527d, 0x527e, 0x527f,
+ 0x5280, 0x5281, 0x5282, 0x5283, 0x5284, 0x5285, 0x5286, 0x5287, /* 0x5280 */
+ 0x5288, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, 0x528f,
+ 0x5290, 0x5291, 0x5292, 0x5293, 0x5294, 0x5295, 0x5296, 0x5297,
+ 0x5298, 0x5299, 0x529a, 0x529b, 0x529c, 0x529d, 0x529e, 0x529f,
+ 0x52a0, 0x52a1, 0x52a2, 0x52a3, 0x52a4, 0x52a5, 0x52a6, 0x52a7,
+ 0x52a8, 0x52a9, 0x52aa, 0x52ab, 0x52ac, 0x52ad, 0x52ae, 0x52af,
+ 0x52b0, 0x52b1, 0x52b2, 0x52b3, 0x52b4, 0x52b5, 0x52b6, 0x52b7,
+ 0x52b8, 0x52b9, 0x52ba, 0x52bb, 0x52bc, 0x52bd, 0x52be, 0x52bf,
+ 0x52c0, 0x52c1, 0x52c2, 0x52c3, 0x52c4, 0x52c5, 0x52c6, 0x52c7, /* 0x52c0 */
+ 0x52c8, 0x52c9, 0x52ca, 0x52cb, 0x52cc, 0x52cd, 0x52ce, 0x52cf,
+ 0x52d0, 0x52d1, 0x52d2, 0x52d3, 0x52d4, 0x52d5, 0x52d6, 0x52d7,
+ 0x52d8, 0x52d9, 0x52da, 0x52db, 0x52dc, 0x52dd, 0x52de, 0x52df,
+ 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e4, 0x52e5, 0x52e6, 0x52e7,
+ 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, 0x52ee, 0x52ef,
+ 0x52f0, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, 0x52f7,
+ 0x52f8, 0x52f9, 0x52fa, 0x52fb, 0x52fc, 0x52fd, 0x52fe, 0x52ff,
+ 0x5300, 0x5301, 0x5302, 0x5303, 0x5304, 0x5305, 0x5306, 0x5307, /* 0x5300 */
+ 0x5308, 0x5309, 0x530a, 0x530b, 0x530c, 0x530d, 0x530e, 0x530f,
+ 0x5310, 0x5311, 0x5312, 0x5313, 0x5314, 0x5315, 0x5316, 0x5317,
+ 0x5318, 0x5319, 0x531a, 0x531b, 0x531c, 0x531d, 0x531e, 0x531f,
+ 0x5320, 0x5321, 0x5322, 0x5323, 0x5324, 0x5325, 0x5326, 0x5327,
+ 0x5328, 0x5329, 0x532a, 0x532b, 0x532c, 0x532d, 0x532e, 0x532f,
+ 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, 0x5335, 0x5336, 0x5337,
+ 0x5338, 0x5339, 0x533a, 0x533b, 0x533c, 0x533d, 0x533e, 0x533f,
+ 0x5340, 0x5341, 0x5342, 0x5343, 0x5344, 0x5345, 0x5346, 0x5347, /* 0x5340 */
+ 0x5348, 0x5349, 0x534a, 0x534b, 0x534c, 0x534d, 0x534e, 0x534f,
+ 0x5350, 0x5351, 0x5352, 0x5353, 0x5354, 0x5355, 0x5356, 0x5357,
+ 0x5358, 0x5359, 0x535a, 0x535b, 0x535c, 0x535d, 0x535e, 0x535f,
+ 0x5360, 0x5361, 0x5362, 0x5363, 0x5364, 0x5365, 0x5366, 0x5367,
+ 0x5368, 0x5369, 0x536a, 0x536b, 0x536c, 0x536d, 0x536e, 0x536f,
+ 0x5370, 0x5371, 0x5372, 0x5373, 0x5374, 0x5375, 0x5376, 0x5377,
+ 0x5378, 0x5379, 0x537a, 0x537b, 0x537c, 0x537d, 0x537e, 0x537f,
+ 0x5380, 0x5381, 0x5382, 0x5383, 0x5384, 0x5385, 0x5386, 0x5387, /* 0x5380 */
+ 0x5388, 0x5389, 0x538a, 0x538b, 0x538c, 0x538d, 0x538e, 0x538f,
+ 0x5390, 0x5391, 0x5392, 0x5393, 0x5394, 0x5395, 0x5396, 0x5397,
+ 0x5398, 0x5399, 0x539a, 0x539b, 0x539c, 0x539d, 0x539e, 0x539f,
+ 0x53a0, 0x53a1, 0x53a2, 0x53a3, 0x53a4, 0x53a5, 0x53a6, 0x53a7,
+ 0x53a8, 0x53a9, 0x53aa, 0x53ab, 0x53ac, 0x53ad, 0x53ae, 0x53af,
+ 0x53b0, 0x53b1, 0x53b2, 0x53b3, 0x53b4, 0x53b5, 0x53b6, 0x53b7,
+ 0x53b8, 0x53b9, 0x53ba, 0x53bb, 0x53bc, 0x53bd, 0x53be, 0x53bf,
+ 0x53c0, 0x53c1, 0x53c2, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, /* 0x53c0 */
+ 0x53c8, 0x53c9, 0x53ca, 0x53cb, 0x53cc, 0x53cd, 0x53ce, 0x53cf,
+ 0x53d0, 0x53d1, 0x53d2, 0x53d3, 0x53d4, 0x53d5, 0x53d6, 0x53d7,
+ 0x53d8, 0x53d9, 0x53da, 0x53db, 0x53dc, 0x53dd, 0x53de, 0x53df,
+ 0x53e0, 0x53e1, 0x53e2, 0x53e3, 0x53e4, 0x53e5, 0x53e6, 0x53e7,
+ 0x53e8, 0x53e9, 0x53ea, 0x53eb, 0x53ec, 0x53ed, 0x53ee, 0x53ef,
+ 0x53f0, 0x53f1, 0x53f2, 0x53f3, 0x53f4, 0x53f5, 0x53f6, 0x53f7,
+ 0x53f8, 0x53f9, 0x53fa, 0x53fb, 0x53fc, 0x53fd, 0x53fe, 0x53ff,
+ 0x5400, 0x5401, 0x5402, 0x5403, 0x5404, 0x5405, 0x5406, 0x5407, /* 0x5400 */
+ 0x5408, 0x5409, 0x540a, 0x540b, 0x540c, 0x540d, 0x540e, 0x540f,
+ 0x5410, 0x5411, 0x5412, 0x5413, 0x5414, 0x5415, 0x5416, 0x5417,
+ 0x5418, 0x5419, 0x541a, 0x541b, 0x541c, 0x541d, 0x541e, 0x541f,
+ 0x5420, 0x5421, 0x5422, 0x5423, 0x5424, 0x5425, 0x5426, 0x5427,
+ 0x5428, 0x5429, 0x542a, 0x542b, 0x542c, 0x542d, 0x542e, 0x542f,
+ 0x5430, 0x5431, 0x5432, 0x5433, 0x5434, 0x5435, 0x5436, 0x5437,
+ 0x5438, 0x5439, 0x543a, 0x543b, 0x543c, 0x543d, 0x543e, 0x543f,
+ 0x5440, 0x5441, 0x5442, 0x5443, 0x5444, 0x5445, 0x5446, 0x5447, /* 0x5440 */
+ 0x5448, 0x5449, 0x544a, 0x544b, 0x544c, 0x544d, 0x544e, 0x544f,
+ 0x5450, 0x5451, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456, 0x5457,
+ 0x5458, 0x5459, 0x545a, 0x545b, 0x545c, 0x545d, 0x545e, 0x545f,
+ 0x5460, 0x5461, 0x5462, 0x5463, 0x5464, 0x5465, 0x5466, 0x5467,
+ 0x5468, 0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f,
+ 0x5470, 0x5471, 0x5472, 0x5473, 0x5474, 0x5475, 0x5476, 0x5477,
+ 0x5478, 0x5479, 0x547a, 0x547b, 0x547c, 0x547d, 0x547e, 0x547f,
+ 0x5480, 0x5481, 0x5482, 0x5483, 0x5484, 0x5485, 0x5486, 0x5487, /* 0x5480 */
+ 0x5488, 0x5489, 0x548a, 0x548b, 0x548c, 0x548d, 0x548e, 0x548f,
+ 0x5490, 0x5491, 0x5492, 0x5493, 0x5494, 0x5495, 0x5496, 0x5497,
+ 0x5498, 0x5499, 0x549a, 0x549b, 0x549c, 0x549d, 0x549e, 0x549f,
+ 0x54a0, 0x54a1, 0x54a2, 0x54a3, 0x54a4, 0x54a5, 0x54a6, 0x54a7,
+ 0x54a8, 0x54a9, 0x54aa, 0x54ab, 0x54ac, 0x54ad, 0x54ae, 0x54af,
+ 0x54b0, 0x54b1, 0x54b2, 0x54b3, 0x54b4, 0x54b5, 0x54b6, 0x54b7,
+ 0x54b8, 0x54b9, 0x54ba, 0x54bb, 0x54bc, 0x54bd, 0x54be, 0x54bf,
+ 0x54c0, 0x54c1, 0x54c2, 0x54c3, 0x54c4, 0x54c5, 0x54c6, 0x54c7, /* 0x54c0 */
+ 0x54c8, 0x54c9, 0x54ca, 0x54cb, 0x54cc, 0x54cd, 0x54ce, 0x54cf,
+ 0x54d0, 0x54d1, 0x54d2, 0x54d3, 0x54d4, 0x54d5, 0x54d6, 0x54d7,
+ 0x54d8, 0x54d9, 0x54da, 0x54db, 0x54dc, 0x54dd, 0x54de, 0x54df,
+ 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4, 0x54e5, 0x54e6, 0x54e7,
+ 0x54e8, 0x54e9, 0x54ea, 0x54eb, 0x54ec, 0x54ed, 0x54ee, 0x54ef,
+ 0x54f0, 0x54f1, 0x54f2, 0x54f3, 0x54f4, 0x54f5, 0x54f6, 0x54f7,
+ 0x54f8, 0x54f9, 0x54fa, 0x54fb, 0x54fc, 0x54fd, 0x54fe, 0x54ff,
+ 0x5500, 0x5501, 0x5502, 0x5503, 0x5504, 0x5505, 0x5506, 0x5507, /* 0x5500 */
+ 0x5508, 0x5509, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e, 0x550f,
+ 0x5510, 0x5511, 0x5512, 0x5513, 0x5514, 0x5515, 0x5516, 0x5517,
+ 0x5518, 0x5519, 0x551a, 0x551b, 0x551c, 0x551d, 0x551e, 0x551f,
+ 0x5520, 0x5521, 0x5522, 0x5523, 0x5524, 0x5525, 0x5526, 0x5527,
+ 0x5528, 0x5529, 0x552a, 0x552b, 0x552c, 0x552d, 0x552e, 0x552f,
+ 0x5530, 0x5531, 0x5532, 0x5533, 0x5534, 0x5535, 0x5536, 0x5537,
+ 0x5538, 0x5539, 0x553a, 0x553b, 0x553c, 0x553d, 0x553e, 0x553f,
+ 0x5540, 0x5541, 0x5542, 0x5543, 0x5544, 0x5545, 0x5546, 0x5547, /* 0x5540 */
+ 0x5548, 0x5549, 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f,
+ 0x5550, 0x5551, 0x5552, 0x5553, 0x5554, 0x5555, 0x5556, 0x5557,
+ 0x5558, 0x5559, 0x555a, 0x555b, 0x555c, 0x555d, 0x555e, 0x555f,
+ 0x5560, 0x5561, 0x5562, 0x5563, 0x5564, 0x5565, 0x5566, 0x5567,
+ 0x5568, 0x5569, 0x556a, 0x556b, 0x556c, 0x556d, 0x556e, 0x556f,
+ 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5575, 0x5576, 0x5577,
+ 0x5578, 0x5579, 0x557a, 0x557b, 0x557c, 0x557d, 0x557e, 0x557f,
+ 0x5580, 0x5581, 0x5582, 0x5583, 0x5584, 0x5585, 0x5586, 0x5587, /* 0x5580 */
+ 0x5588, 0x5589, 0x558a, 0x558b, 0x558c, 0x558d, 0x558e, 0x558f,
+ 0x5590, 0x5591, 0x5592, 0x5593, 0x5594, 0x5595, 0x5596, 0x5597,
+ 0x5598, 0x5599, 0x559a, 0x559b, 0x559c, 0x559d, 0x559e, 0x559f,
+ 0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, 0x55a7,
+ 0x55a8, 0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af,
+ 0x55b0, 0x55b1, 0x55b2, 0x55b3, 0x55b4, 0x55b5, 0x55b6, 0x55b7,
+ 0x55b8, 0x55b9, 0x55ba, 0x55bb, 0x55bc, 0x55bd, 0x55be, 0x55bf,
+ 0x55c0, 0x55c1, 0x55c2, 0x55c3, 0x55c4, 0x55c5, 0x55c6, 0x55c7, /* 0x55c0 */
+ 0x55c8, 0x55c9, 0x55ca, 0x55cb, 0x55cc, 0x55cd, 0x55ce, 0x55cf,
+ 0x55d0, 0x55d1, 0x55d2, 0x55d3, 0x55d4, 0x55d5, 0x55d6, 0x55d7,
+ 0x55d8, 0x55d9, 0x55da, 0x55db, 0x55dc, 0x55dd, 0x55de, 0x55df,
+ 0x55e0, 0x55e1, 0x55e2, 0x55e3, 0x55e4, 0x55e5, 0x55e6, 0x55e7,
+ 0x55e8, 0x55e9, 0x55ea, 0x55eb, 0x55ec, 0x55ed, 0x55ee, 0x55ef,
+ 0x55f0, 0x55f1, 0x55f2, 0x55f3, 0x55f4, 0x55f5, 0x55f6, 0x55f7,
+ 0x55f8, 0x55f9, 0x55fa, 0x55fb, 0x55fc, 0x55fd, 0x55fe, 0x55ff,
+ 0x5600, 0x5601, 0x5602, 0x5603, 0x5604, 0x5605, 0x5606, 0x5607, /* 0x5600 */
+ 0x5608, 0x5609, 0x560a, 0x560b, 0x560c, 0x560d, 0x560e, 0x560f,
+ 0x5610, 0x5611, 0x5612, 0x5613, 0x5614, 0x5615, 0x5616, 0x5617,
+ 0x5618, 0x5619, 0x561a, 0x561b, 0x561c, 0x561d, 0x561e, 0x561f,
+ 0x5620, 0x5621, 0x5622, 0x5623, 0x5624, 0x5625, 0x5626, 0x5627,
+ 0x5628, 0x5629, 0x562a, 0x562b, 0x562c, 0x562d, 0x562e, 0x562f,
+ 0x5630, 0x5631, 0x5632, 0x5633, 0x5634, 0x5635, 0x5636, 0x5637,
+ 0x5638, 0x5639, 0x563a, 0x563b, 0x563c, 0x563d, 0x563e, 0x563f,
+ 0x5640, 0x5641, 0x5642, 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, /* 0x5640 */
+ 0x5648, 0x5649, 0x564a, 0x564b, 0x564c, 0x564d, 0x564e, 0x564f,
+ 0x5650, 0x5651, 0x5652, 0x5653, 0x5654, 0x5655, 0x5656, 0x5657,
+ 0x5658, 0x5659, 0x565a, 0x565b, 0x565c, 0x565d, 0x565e, 0x565f,
+ 0x5660, 0x5661, 0x5662, 0x5663, 0x5664, 0x5665, 0x5666, 0x5667,
+ 0x5668, 0x5669, 0x566a, 0x566b, 0x566c, 0x566d, 0x566e, 0x566f,
+ 0x5670, 0x5671, 0x5672, 0x5673, 0x5674, 0x5675, 0x5676, 0x5677,
+ 0x5678, 0x5679, 0x567a, 0x567b, 0x567c, 0x567d, 0x567e, 0x567f,
+ 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, 0x5685, 0x5686, 0x5687, /* 0x5680 */
+ 0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x568e, 0x568f,
+ 0x5690, 0x5691, 0x5692, 0x5693, 0x5694, 0x5695, 0x5696, 0x5697,
+ 0x5698, 0x5699, 0x569a, 0x569b, 0x569c, 0x569d, 0x569e, 0x569f,
+ 0x56a0, 0x56a1, 0x56a2, 0x56a3, 0x56a4, 0x56a5, 0x56a6, 0x56a7,
+ 0x56a8, 0x56a9, 0x56aa, 0x56ab, 0x56ac, 0x56ad, 0x56ae, 0x56af,
+ 0x56b0, 0x56b1, 0x56b2, 0x56b3, 0x56b4, 0x56b5, 0x56b6, 0x56b7,
+ 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bc, 0x56bd, 0x56be, 0x56bf,
+ 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, 0x56c6, 0x56c7, /* 0x56c0 */
+ 0x56c8, 0x56c9, 0x56ca, 0x56cb, 0x56cc, 0x56cd, 0x56ce, 0x56cf,
+ 0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d4, 0x56d5, 0x56d6, 0x56d7,
+ 0x56d8, 0x56d9, 0x56da, 0x56db, 0x56dc, 0x56dd, 0x56de, 0x56df,
+ 0x56e0, 0x56e1, 0x56e2, 0x56e3, 0x56e4, 0x56e5, 0x56e6, 0x56e7,
+ 0x56e8, 0x56e9, 0x56ea, 0x56eb, 0x56ec, 0x56ed, 0x56ee, 0x56ef,
+ 0x56f0, 0x56f1, 0x56f2, 0x56f3, 0x56f4, 0x56f5, 0x56f6, 0x56f7,
+ 0x56f8, 0x56f9, 0x56fa, 0x56fb, 0x56fc, 0x56fd, 0x56fe, 0x56ff,
+ 0x5700, 0x5701, 0x5702, 0x5703, 0x5704, 0x5705, 0x5706, 0x5707, /* 0x5700 */
+ 0x5708, 0x5709, 0x570a, 0x570b, 0x570c, 0x570d, 0x570e, 0x570f,
+ 0x5710, 0x5711, 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717,
+ 0x5718, 0x5719, 0x571a, 0x571b, 0x571c, 0x571d, 0x571e, 0x571f,
+ 0x5720, 0x5721, 0x5722, 0x5723, 0x5724, 0x5725, 0x5726, 0x5727,
+ 0x5728, 0x5729, 0x572a, 0x572b, 0x572c, 0x572d, 0x572e, 0x572f,
+ 0x5730, 0x5731, 0x5732, 0x5733, 0x5734, 0x5735, 0x5736, 0x5737,
+ 0x5738, 0x5739, 0x573a, 0x573b, 0x573c, 0x573d, 0x573e, 0x573f,
+ 0x5740, 0x5741, 0x5742, 0x5743, 0x5744, 0x5745, 0x5746, 0x5747, /* 0x5740 */
+ 0x5748, 0x5749, 0x574a, 0x574b, 0x574c, 0x574d, 0x574e, 0x574f,
+ 0x5750, 0x5751, 0x5752, 0x5753, 0x5754, 0x5755, 0x5756, 0x5757,
+ 0x5758, 0x5759, 0x575a, 0x575b, 0x575c, 0x575d, 0x575e, 0x575f,
+ 0x5760, 0x5761, 0x5762, 0x5763, 0x5764, 0x5765, 0x5766, 0x5767,
+ 0x5768, 0x5769, 0x576a, 0x576b, 0x576c, 0x576d, 0x576e, 0x576f,
+ 0x5770, 0x5771, 0x5772, 0x5773, 0x5774, 0x5775, 0x5776, 0x5777,
+ 0x5778, 0x5779, 0x577a, 0x577b, 0x577c, 0x577d, 0x577e, 0x577f,
+ 0x5780, 0x5781, 0x5782, 0x5783, 0x5784, 0x5785, 0x5786, 0x5787, /* 0x5780 */
+ 0x5788, 0x5789, 0x578a, 0x578b, 0x578c, 0x578d, 0x578e, 0x578f,
+ 0x5790, 0x5791, 0x5792, 0x5793, 0x5794, 0x5795, 0x5796, 0x5797,
+ 0x5798, 0x5799, 0x579a, 0x579b, 0x579c, 0x579d, 0x579e, 0x579f,
+ 0x57a0, 0x57a1, 0x57a2, 0x57a3, 0x57a4, 0x57a5, 0x57a6, 0x57a7,
+ 0x57a8, 0x57a9, 0x57aa, 0x57ab, 0x57ac, 0x57ad, 0x57ae, 0x57af,
+ 0x57b0, 0x57b1, 0x57b2, 0x57b3, 0x57b4, 0x57b5, 0x57b6, 0x57b7,
+ 0x57b8, 0x57b9, 0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf,
+ 0x57c0, 0x57c1, 0x57c2, 0x57c3, 0x57c4, 0x57c5, 0x57c6, 0x57c7, /* 0x57c0 */
+ 0x57c8, 0x57c9, 0x57ca, 0x57cb, 0x57cc, 0x57cd, 0x57ce, 0x57cf,
+ 0x57d0, 0x57d1, 0x57d2, 0x57d3, 0x57d4, 0x57d5, 0x57d6, 0x57d7,
+ 0x57d8, 0x57d9, 0x57da, 0x57db, 0x57dc, 0x57dd, 0x57de, 0x57df,
+ 0x57e0, 0x57e1, 0x57e2, 0x57e3, 0x57e4, 0x57e5, 0x57e6, 0x57e7,
+ 0x57e8, 0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ed, 0x57ee, 0x57ef,
+ 0x57f0, 0x57f1, 0x57f2, 0x57f3, 0x57f4, 0x57f5, 0x57f6, 0x57f7,
+ 0x57f8, 0x57f9, 0x57fa, 0x57fb, 0x57fc, 0x57fd, 0x57fe, 0x57ff,
+ 0x5800, 0x5801, 0x5802, 0x5803, 0x5804, 0x5805, 0x5806, 0x5807, /* 0x5800 */
+ 0x5808, 0x5809, 0x580a, 0x580b, 0x580c, 0x580d, 0x580e, 0x580f,
+ 0x5810, 0x5811, 0x5812, 0x5813, 0x5814, 0x5815, 0x5816, 0x5817,
+ 0x5818, 0x5819, 0x581a, 0x581b, 0x581c, 0x581d, 0x581e, 0x581f,
+ 0x5820, 0x5821, 0x5822, 0x5823, 0x5824, 0x5825, 0x5826, 0x5827,
+ 0x5828, 0x5829, 0x582a, 0x582b, 0x582c, 0x582d, 0x582e, 0x582f,
+ 0x5830, 0x5831, 0x5832, 0x5833, 0x5834, 0x5835, 0x5836, 0x5837,
+ 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, 0x583e, 0x583f,
+ 0x5840, 0x5841, 0x5842, 0x5843, 0x5844, 0x5845, 0x5846, 0x5847, /* 0x5840 */
+ 0x5848, 0x5849, 0x584a, 0x584b, 0x584c, 0x584d, 0x584e, 0x584f,
+ 0x5850, 0x5851, 0x5852, 0x5853, 0x5854, 0x5855, 0x5856, 0x5857,
+ 0x5858, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585e, 0x585f,
+ 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5865, 0x5866, 0x5867,
+ 0x5868, 0x5869, 0x586a, 0x586b, 0x586c, 0x586d, 0x586e, 0x586f,
+ 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877,
+ 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587e, 0x587f,
+ 0x5880, 0x5881, 0x5882, 0x5883, 0x5884, 0x5885, 0x5886, 0x5887, /* 0x5880 */
+ 0x5888, 0x5889, 0x588a, 0x588b, 0x588c, 0x588d, 0x588e, 0x588f,
+ 0x5890, 0x5891, 0x5892, 0x5893, 0x5894, 0x5895, 0x5896, 0x5897,
+ 0x5898, 0x5899, 0x589a, 0x589b, 0x589c, 0x589d, 0x589e, 0x589f,
+ 0x58a0, 0x58a1, 0x58a2, 0x58a3, 0x58a4, 0x58a5, 0x58a6, 0x58a7,
+ 0x58a8, 0x58a9, 0x58aa, 0x58ab, 0x58ac, 0x58ad, 0x58ae, 0x58af,
+ 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, 0x58b5, 0x58b6, 0x58b7,
+ 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bc, 0x58bd, 0x58be, 0x58bf,
+ 0x58c0, 0x58c1, 0x58c2, 0x58c3, 0x58c4, 0x58c5, 0x58c6, 0x58c7, /* 0x58c0 */
+ 0x58c8, 0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf,
+ 0x58d0, 0x58d1, 0x58d2, 0x58d3, 0x58d4, 0x58d5, 0x58d6, 0x58d7,
+ 0x58d8, 0x58d9, 0x58da, 0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df,
+ 0x58e0, 0x58e1, 0x58e2, 0x58e3, 0x58e4, 0x58e5, 0x58e6, 0x58e7,
+ 0x58e8, 0x58e9, 0x58ea, 0x58eb, 0x58ec, 0x58ed, 0x58ee, 0x58ef,
+ 0x58f0, 0x58f1, 0x58f2, 0x58f3, 0x58f4, 0x58f5, 0x58f6, 0x58f7,
+ 0x58f8, 0x58f9, 0x58fa, 0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff,
+ 0x5900, 0x5901, 0x5902, 0x5903, 0x5904, 0x5905, 0x5906, 0x5907, /* 0x5900 */
+ 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, 0x590d, 0x590e, 0x590f,
+ 0x5910, 0x5911, 0x5912, 0x5913, 0x5914, 0x5915, 0x5916, 0x5917,
+ 0x5918, 0x5919, 0x591a, 0x591b, 0x591c, 0x591d, 0x591e, 0x591f,
+ 0x5920, 0x5921, 0x5922, 0x5923, 0x5924, 0x5925, 0x5926, 0x5927,
+ 0x5928, 0x5929, 0x592a, 0x592b, 0x592c, 0x592d, 0x592e, 0x592f,
+ 0x5930, 0x5931, 0x5932, 0x5933, 0x5934, 0x5935, 0x5936, 0x5937,
+ 0x5938, 0x5939, 0x593a, 0x593b, 0x593c, 0x593d, 0x593e, 0x593f,
+ 0x5940, 0x5941, 0x5942, 0x5943, 0x5944, 0x5945, 0x5946, 0x5947, /* 0x5940 */
+ 0x5948, 0x5949, 0x594a, 0x594b, 0x594c, 0x594d, 0x594e, 0x594f,
+ 0x5950, 0x5951, 0x5952, 0x5953, 0x5954, 0x5955, 0x5956, 0x5957,
+ 0x5958, 0x5959, 0x595a, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f,
+ 0x5960, 0x5961, 0x5962, 0x5963, 0x5964, 0x5965, 0x5966, 0x5967,
+ 0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f,
+ 0x5970, 0x5971, 0x5972, 0x5973, 0x5974, 0x5975, 0x5976, 0x5977,
+ 0x5978, 0x5979, 0x597a, 0x597b, 0x597c, 0x597d, 0x597e, 0x597f,
+ 0x5980, 0x5981, 0x5982, 0x5983, 0x5984, 0x5985, 0x5986, 0x5987, /* 0x5980 */
+ 0x5988, 0x5989, 0x598a, 0x598b, 0x598c, 0x598d, 0x598e, 0x598f,
+ 0x5990, 0x5991, 0x5992, 0x5993, 0x5994, 0x5995, 0x5996, 0x5997,
+ 0x5998, 0x5999, 0x599a, 0x599b, 0x599c, 0x599d, 0x599e, 0x599f,
+ 0x59a0, 0x59a1, 0x59a2, 0x59a3, 0x59a4, 0x59a5, 0x59a6, 0x59a7,
+ 0x59a8, 0x59a9, 0x59aa, 0x59ab, 0x59ac, 0x59ad, 0x59ae, 0x59af,
+ 0x59b0, 0x59b1, 0x59b2, 0x59b3, 0x59b4, 0x59b5, 0x59b6, 0x59b7,
+ 0x59b8, 0x59b9, 0x59ba, 0x59bb, 0x59bc, 0x59bd, 0x59be, 0x59bf,
+ 0x59c0, 0x59c1, 0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c6, 0x59c7, /* 0x59c0 */
+ 0x59c8, 0x59c9, 0x59ca, 0x59cb, 0x59cc, 0x59cd, 0x59ce, 0x59cf,
+ 0x59d0, 0x59d1, 0x59d2, 0x59d3, 0x59d4, 0x59d5, 0x59d6, 0x59d7,
+ 0x59d8, 0x59d9, 0x59da, 0x59db, 0x59dc, 0x59dd, 0x59de, 0x59df,
+ 0x59e0, 0x59e1, 0x59e2, 0x59e3, 0x59e4, 0x59e5, 0x59e6, 0x59e7,
+ 0x59e8, 0x59e9, 0x59ea, 0x59eb, 0x59ec, 0x59ed, 0x59ee, 0x59ef,
+ 0x59f0, 0x59f1, 0x59f2, 0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7,
+ 0x59f8, 0x59f9, 0x59fa, 0x59fb, 0x59fc, 0x59fd, 0x59fe, 0x59ff,
+ 0x5a00, 0x5a01, 0x5a02, 0x5a03, 0x5a04, 0x5a05, 0x5a06, 0x5a07, /* 0x5a00 */
+ 0x5a08, 0x5a09, 0x5a0a, 0x5a0b, 0x5a0c, 0x5a0d, 0x5a0e, 0x5a0f,
+ 0x5a10, 0x5a11, 0x5a12, 0x5a13, 0x5a14, 0x5a15, 0x5a16, 0x5a17,
+ 0x5a18, 0x5a19, 0x5a1a, 0x5a1b, 0x5a1c, 0x5a1d, 0x5a1e, 0x5a1f,
+ 0x5a20, 0x5a21, 0x5a22, 0x5a23, 0x5a24, 0x5a25, 0x5a26, 0x5a27,
+ 0x5a28, 0x5a29, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f,
+ 0x5a30, 0x5a31, 0x5a32, 0x5a33, 0x5a34, 0x5a35, 0x5a36, 0x5a37,
+ 0x5a38, 0x5a39, 0x5a3a, 0x5a3b, 0x5a3c, 0x5a3d, 0x5a3e, 0x5a3f,
+ 0x5a40, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45, 0x5a46, 0x5a47, /* 0x5a40 */
+ 0x5a48, 0x5a49, 0x5a4a, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f,
+ 0x5a50, 0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x5a56, 0x5a57,
+ 0x5a58, 0x5a59, 0x5a5a, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f,
+ 0x5a60, 0x5a61, 0x5a62, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a67,
+ 0x5a68, 0x5a69, 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f,
+ 0x5a70, 0x5a71, 0x5a72, 0x5a73, 0x5a74, 0x5a75, 0x5a76, 0x5a77,
+ 0x5a78, 0x5a79, 0x5a7a, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a7f,
+ 0x5a80, 0x5a81, 0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, /* 0x5a80 */
+ 0x5a88, 0x5a89, 0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f,
+ 0x5a90, 0x5a91, 0x5a92, 0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97,
+ 0x5a98, 0x5a99, 0x5a9a, 0x5a9b, 0x5a9c, 0x5a9d, 0x5a9e, 0x5a9f,
+ 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4, 0x5aa5, 0x5aa6, 0x5aa7,
+ 0x5aa8, 0x5aa9, 0x5aaa, 0x5aab, 0x5aac, 0x5aad, 0x5aae, 0x5aaf,
+ 0x5ab0, 0x5ab1, 0x5ab2, 0x5ab3, 0x5ab4, 0x5ab5, 0x5ab6, 0x5ab7,
+ 0x5ab8, 0x5ab9, 0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abe, 0x5abf,
+ 0x5ac0, 0x5ac1, 0x5ac2, 0x5ac3, 0x5ac4, 0x5ac5, 0x5ac6, 0x5ac7, /* 0x5ac0 */
+ 0x5ac8, 0x5ac9, 0x5aca, 0x5acb, 0x5acc, 0x5acd, 0x5ace, 0x5acf,
+ 0x5ad0, 0x5ad1, 0x5ad2, 0x5ad3, 0x5ad4, 0x5ad5, 0x5ad6, 0x5ad7,
+ 0x5ad8, 0x5ad9, 0x5ada, 0x5adb, 0x5adc, 0x5add, 0x5ade, 0x5adf,
+ 0x5ae0, 0x5ae1, 0x5ae2, 0x5ae3, 0x5ae4, 0x5ae5, 0x5ae6, 0x5ae7,
+ 0x5ae8, 0x5ae9, 0x5aea, 0x5aeb, 0x5aec, 0x5aed, 0x5aee, 0x5aef,
+ 0x5af0, 0x5af1, 0x5af2, 0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7,
+ 0x5af8, 0x5af9, 0x5afa, 0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff,
+ 0x5b00, 0x5b01, 0x5b02, 0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, /* 0x5b00 */
+ 0x5b08, 0x5b09, 0x5b0a, 0x5b0b, 0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f,
+ 0x5b10, 0x5b11, 0x5b12, 0x5b13, 0x5b14, 0x5b15, 0x5b16, 0x5b17,
+ 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, 0x5b1d, 0x5b1e, 0x5b1f,
+ 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25, 0x5b26, 0x5b27,
+ 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d, 0x5b2e, 0x5b2f,
+ 0x5b30, 0x5b31, 0x5b32, 0x5b33, 0x5b34, 0x5b35, 0x5b36, 0x5b37,
+ 0x5b38, 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f,
+ 0x5b40, 0x5b41, 0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47, /* 0x5b40 */
+ 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f,
+ 0x5b50, 0x5b51, 0x5b52, 0x5b53, 0x5b54, 0x5b55, 0x5b56, 0x5b57,
+ 0x5b58, 0x5b59, 0x5b5a, 0x5b5b, 0x5b5c, 0x5b5d, 0x5b5e, 0x5b5f,
+ 0x5b60, 0x5b61, 0x5b62, 0x5b63, 0x5b64, 0x5b65, 0x5b66, 0x5b67,
+ 0x5b68, 0x5b69, 0x5b6a, 0x5b6b, 0x5b6c, 0x5b6d, 0x5b6e, 0x5b6f,
+ 0x5b70, 0x5b71, 0x5b72, 0x5b73, 0x5b74, 0x5b75, 0x5b76, 0x5b77,
+ 0x5b78, 0x5b79, 0x5b7a, 0x5b7b, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f,
+ 0x5b80, 0x5b81, 0x5b82, 0x5b83, 0x5b84, 0x5b85, 0x5b86, 0x5b87, /* 0x5b80 */
+ 0x5b88, 0x5b89, 0x5b8a, 0x5b8b, 0x5b8c, 0x5b8d, 0x5b8e, 0x5b8f,
+ 0x5b90, 0x5b91, 0x5b92, 0x5b93, 0x5b94, 0x5b95, 0x5b96, 0x5b97,
+ 0x5b98, 0x5b99, 0x5b9a, 0x5b9b, 0x5b9c, 0x5b9d, 0x5b9e, 0x5b9f,
+ 0x5ba0, 0x5ba1, 0x5ba2, 0x5ba3, 0x5ba4, 0x5ba5, 0x5ba6, 0x5ba7,
+ 0x5ba8, 0x5ba9, 0x5baa, 0x5bab, 0x5bac, 0x5bad, 0x5bae, 0x5baf,
+ 0x5bb0, 0x5bb1, 0x5bb2, 0x5bb3, 0x5bb4, 0x5bb5, 0x5bb6, 0x5bb7,
+ 0x5bb8, 0x5bb9, 0x5bba, 0x5bbb, 0x5bbc, 0x5bbd, 0x5bbe, 0x5bbf,
+ 0x5bc0, 0x5bc1, 0x5bc2, 0x5bc3, 0x5bc4, 0x5bc5, 0x5bc6, 0x5bc7, /* 0x5bc0 */
+ 0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcc, 0x5bcd, 0x5bce, 0x5bcf,
+ 0x5bd0, 0x5bd1, 0x5bd2, 0x5bd3, 0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7,
+ 0x5bd8, 0x5bd9, 0x5bda, 0x5bdb, 0x5bdc, 0x5bdd, 0x5bde, 0x5bdf,
+ 0x5be0, 0x5be1, 0x5be2, 0x5be3, 0x5be4, 0x5be5, 0x5be6, 0x5be7,
+ 0x5be8, 0x5be9, 0x5bea, 0x5beb, 0x5bec, 0x5bed, 0x5bee, 0x5bef,
+ 0x5bf0, 0x5bf1, 0x5bf2, 0x5bf3, 0x5bf4, 0x5bf5, 0x5bf6, 0x5bf7,
+ 0x5bf8, 0x5bf9, 0x5bfa, 0x5bfb, 0x5bfc, 0x5bfd, 0x5bfe, 0x5bff,
+ 0x5c00, 0x5c01, 0x5c02, 0x5c03, 0x5c04, 0x5c05, 0x5c06, 0x5c07, /* 0x5c00 */
+ 0x5c08, 0x5c09, 0x5c0a, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, 0x5c0f,
+ 0x5c10, 0x5c11, 0x5c12, 0x5c13, 0x5c14, 0x5c15, 0x5c16, 0x5c17,
+ 0x5c18, 0x5c19, 0x5c1a, 0x5c1b, 0x5c1c, 0x5c1d, 0x5c1e, 0x5c1f,
+ 0x5c20, 0x5c21, 0x5c22, 0x5c23, 0x5c24, 0x5c25, 0x5c26, 0x5c27,
+ 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2c, 0x5c2d, 0x5c2e, 0x5c2f,
+ 0x5c30, 0x5c31, 0x5c32, 0x5c33, 0x5c34, 0x5c35, 0x5c36, 0x5c37,
+ 0x5c38, 0x5c39, 0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d, 0x5c3e, 0x5c3f,
+ 0x5c40, 0x5c41, 0x5c42, 0x5c43, 0x5c44, 0x5c45, 0x5c46, 0x5c47, /* 0x5c40 */
+ 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4d, 0x5c4e, 0x5c4f,
+ 0x5c50, 0x5c51, 0x5c52, 0x5c53, 0x5c54, 0x5c55, 0x5c56, 0x5c57,
+ 0x5c58, 0x5c59, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d, 0x5c5e, 0x5c5f,
+ 0x5c60, 0x5c61, 0x5c62, 0x5c63, 0x5c64, 0x5c65, 0x5c66, 0x5c67,
+ 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d, 0x5c6e, 0x5c6f,
+ 0x5c70, 0x5c71, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76, 0x5c77,
+ 0x5c78, 0x5c79, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c7f,
+ 0x5c80, 0x5c81, 0x5c82, 0x5c83, 0x5c84, 0x5c85, 0x5c86, 0x5c87, /* 0x5c80 */
+ 0x5c88, 0x5c89, 0x5c8a, 0x5c8b, 0x5c8c, 0x5c8d, 0x5c8e, 0x5c8f,
+ 0x5c90, 0x5c91, 0x5c92, 0x5c93, 0x5c94, 0x5c95, 0x5c96, 0x5c97,
+ 0x5c98, 0x5c99, 0x5c9a, 0x5c9b, 0x5c9c, 0x5c9d, 0x5c9e, 0x5c9f,
+ 0x5ca0, 0x5ca1, 0x5ca2, 0x5ca3, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7,
+ 0x5ca8, 0x5ca9, 0x5caa, 0x5cab, 0x5cac, 0x5cad, 0x5cae, 0x5caf,
+ 0x5cb0, 0x5cb1, 0x5cb2, 0x5cb3, 0x5cb4, 0x5cb5, 0x5cb6, 0x5cb7,
+ 0x5cb8, 0x5cb9, 0x5cba, 0x5cbb, 0x5cbc, 0x5cbd, 0x5cbe, 0x5cbf,
+ 0x5cc0, 0x5cc1, 0x5cc2, 0x5cc3, 0x5cc4, 0x5cc5, 0x5cc6, 0x5cc7, /* 0x5cc0 */
+ 0x5cc8, 0x5cc9, 0x5cca, 0x5ccb, 0x5ccc, 0x5ccd, 0x5cce, 0x5ccf,
+ 0x5cd0, 0x5cd1, 0x5cd2, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7,
+ 0x5cd8, 0x5cd9, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf,
+ 0x5ce0, 0x5ce1, 0x5ce2, 0x5ce3, 0x5ce4, 0x5ce5, 0x5ce6, 0x5ce7,
+ 0x5ce8, 0x5ce9, 0x5cea, 0x5ceb, 0x5cec, 0x5ced, 0x5cee, 0x5cef,
+ 0x5cf0, 0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7,
+ 0x5cf8, 0x5cf9, 0x5cfa, 0x5cfb, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff,
+ 0x5d00, 0x5d01, 0x5d02, 0x5d03, 0x5d04, 0x5d05, 0x5d06, 0x5d07, /* 0x5d00 */
+ 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0d, 0x5d0e, 0x5d0f,
+ 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d14, 0x5d15, 0x5d16, 0x5d17,
+ 0x5d18, 0x5d19, 0x5d1a, 0x5d1b, 0x5d1c, 0x5d1d, 0x5d1e, 0x5d1f,
+ 0x5d20, 0x5d21, 0x5d22, 0x5d23, 0x5d24, 0x5d25, 0x5d26, 0x5d27,
+ 0x5d28, 0x5d29, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2d, 0x5d2e, 0x5d2f,
+ 0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d34, 0x5d35, 0x5d36, 0x5d37,
+ 0x5d38, 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3d, 0x5d3e, 0x5d3f,
+ 0x5d40, 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d47, /* 0x5d40 */
+ 0x5d48, 0x5d49, 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4d, 0x5d4e, 0x5d4f,
+ 0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57,
+ 0x5d58, 0x5d59, 0x5d5a, 0x5d5b, 0x5d5c, 0x5d5d, 0x5d5e, 0x5d5f,
+ 0x5d60, 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67,
+ 0x5d68, 0x5d69, 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6d, 0x5d6e, 0x5d6f,
+ 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d74, 0x5d75, 0x5d76, 0x5d77,
+ 0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5d7f,
+ 0x5d80, 0x5d81, 0x5d82, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, /* 0x5d80 */
+ 0x5d88, 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f,
+ 0x5d90, 0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97,
+ 0x5d98, 0x5d99, 0x5d9a, 0x5d9b, 0x5d9c, 0x5d9d, 0x5d9e, 0x5d9f,
+ 0x5da0, 0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7,
+ 0x5da8, 0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf,
+ 0x5db0, 0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db7,
+ 0x5db8, 0x5db9, 0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf,
+ 0x5dc0, 0x5dc1, 0x5dc2, 0x5dc3, 0x5dc4, 0x5dc5, 0x5dc6, 0x5dc7, /* 0x5dc0 */
+ 0x5dc8, 0x5dc9, 0x5dca, 0x5dcb, 0x5dcc, 0x5dcd, 0x5dce, 0x5dcf,
+ 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3, 0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7,
+ 0x5dd8, 0x5dd9, 0x5dda, 0x5ddb, 0x5ddc, 0x5ddd, 0x5dde, 0x5ddf,
+ 0x5de0, 0x5de1, 0x5de2, 0x5de3, 0x5de4, 0x5de5, 0x5de6, 0x5de7,
+ 0x5de8, 0x5de9, 0x5dea, 0x5deb, 0x5dec, 0x5ded, 0x5dee, 0x5def,
+ 0x5df0, 0x5df1, 0x5df2, 0x5df3, 0x5df4, 0x5df5, 0x5df6, 0x5df7,
+ 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, 0x5dfd, 0x5dfe, 0x5dff,
+ 0x5e00, 0x5e01, 0x5e02, 0x5e03, 0x5e04, 0x5e05, 0x5e06, 0x5e07, /* 0x5e00 */
+ 0x5e08, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0c, 0x5e0d, 0x5e0e, 0x5e0f,
+ 0x5e10, 0x5e11, 0x5e12, 0x5e13, 0x5e14, 0x5e15, 0x5e16, 0x5e17,
+ 0x5e18, 0x5e19, 0x5e1a, 0x5e1b, 0x5e1c, 0x5e1d, 0x5e1e, 0x5e1f,
+ 0x5e20, 0x5e21, 0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e26, 0x5e27,
+ 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c, 0x5e2d, 0x5e2e, 0x5e2f,
+ 0x5e30, 0x5e31, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e37,
+ 0x5e38, 0x5e39, 0x5e3a, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e3e, 0x5e3f,
+ 0x5e40, 0x5e41, 0x5e42, 0x5e43, 0x5e44, 0x5e45, 0x5e46, 0x5e47, /* 0x5e40 */
+ 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4d, 0x5e4e, 0x5e4f,
+ 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e54, 0x5e55, 0x5e56, 0x5e57,
+ 0x5e58, 0x5e59, 0x5e5a, 0x5e5b, 0x5e5c, 0x5e5d, 0x5e5e, 0x5e5f,
+ 0x5e60, 0x5e61, 0x5e62, 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67,
+ 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f,
+ 0x5e70, 0x5e71, 0x5e72, 0x5e73, 0x5e74, 0x5e75, 0x5e76, 0x5e77,
+ 0x5e78, 0x5e79, 0x5e7a, 0x5e7b, 0x5e7c, 0x5e7d, 0x5e7e, 0x5e7f,
+ 0x5e80, 0x5e81, 0x5e82, 0x5e83, 0x5e84, 0x5e85, 0x5e86, 0x5e87, /* 0x5e80 */
+ 0x5e88, 0x5e89, 0x5e8a, 0x5e8b, 0x5e8c, 0x5e8d, 0x5e8e, 0x5e8f,
+ 0x5e90, 0x5e91, 0x5e92, 0x5e93, 0x5e94, 0x5e95, 0x5e96, 0x5e97,
+ 0x5e98, 0x5e99, 0x5e9a, 0x5e9b, 0x5e9c, 0x5e9d, 0x5e9e, 0x5e9f,
+ 0x5ea0, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4, 0x5ea5, 0x5ea6, 0x5ea7,
+ 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5ead, 0x5eae, 0x5eaf,
+ 0x5eb0, 0x5eb1, 0x5eb2, 0x5eb3, 0x5eb4, 0x5eb5, 0x5eb6, 0x5eb7,
+ 0x5eb8, 0x5eb9, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, 0x5ebe, 0x5ebf,
+ 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5, 0x5ec6, 0x5ec7, /* 0x5ec0 */
+ 0x5ec8, 0x5ec9, 0x5eca, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf,
+ 0x5ed0, 0x5ed1, 0x5ed2, 0x5ed3, 0x5ed4, 0x5ed5, 0x5ed6, 0x5ed7,
+ 0x5ed8, 0x5ed9, 0x5eda, 0x5edb, 0x5edc, 0x5edd, 0x5ede, 0x5edf,
+ 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4, 0x5ee5, 0x5ee6, 0x5ee7,
+ 0x5ee8, 0x5ee9, 0x5eea, 0x5eeb, 0x5eec, 0x5eed, 0x5eee, 0x5eef,
+ 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef4, 0x5ef5, 0x5ef6, 0x5ef7,
+ 0x5ef8, 0x5ef9, 0x5efa, 0x5efb, 0x5efc, 0x5efd, 0x5efe, 0x5eff,
+ 0x5f00, 0x5f01, 0x5f02, 0x5f03, 0x5f04, 0x5f05, 0x5f06, 0x5f07, /* 0x5f00 */
+ 0x5f08, 0x5f09, 0x5f0a, 0x5f0b, 0x5f0c, 0x5f0d, 0x5f0e, 0x5f0f,
+ 0x5f10, 0x5f11, 0x5f12, 0x5f13, 0x5f14, 0x5f15, 0x5f16, 0x5f17,
+ 0x5f18, 0x5f19, 0x5f1a, 0x5f1b, 0x5f1c, 0x5f1d, 0x5f1e, 0x5f1f,
+ 0x5f20, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f25, 0x5f26, 0x5f27,
+ 0x5f28, 0x5f29, 0x5f2a, 0x5f2b, 0x5f2c, 0x5f2d, 0x5f2e, 0x5f2f,
+ 0x5f30, 0x5f31, 0x5f32, 0x5f33, 0x5f34, 0x5f35, 0x5f36, 0x5f37,
+ 0x5f38, 0x5f39, 0x5f3a, 0x5f3b, 0x5f3c, 0x5f3d, 0x5f3e, 0x5f3f,
+ 0x5f40, 0x5f41, 0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, /* 0x5f40 */
+ 0x5f48, 0x5f49, 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f,
+ 0x5f50, 0x5f51, 0x5f52, 0x5f53, 0x5f54, 0x5f55, 0x5f56, 0x5f57,
+ 0x5f58, 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5d, 0x5f5e, 0x5f5f,
+ 0x5f60, 0x5f61, 0x5f62, 0x5f63, 0x5f64, 0x5f65, 0x5f66, 0x5f67,
+ 0x5f68, 0x5f69, 0x5f6a, 0x5f6b, 0x5f6c, 0x5f6d, 0x5f6e, 0x5f6f,
+ 0x5f70, 0x5f71, 0x5f72, 0x5f73, 0x5f74, 0x5f75, 0x5f76, 0x5f77,
+ 0x5f78, 0x5f79, 0x5f7a, 0x5f7b, 0x5f7c, 0x5f7d, 0x5f7e, 0x5f7f,
+ 0x5f80, 0x5f81, 0x5f82, 0x5f83, 0x5f84, 0x5f85, 0x5f86, 0x5f87, /* 0x5f80 */
+ 0x5f88, 0x5f89, 0x5f8a, 0x5f8b, 0x5f8c, 0x5f8d, 0x5f8e, 0x5f8f,
+ 0x5f90, 0x5f91, 0x5f92, 0x5f93, 0x5f94, 0x5f95, 0x5f96, 0x5f97,
+ 0x5f98, 0x5f99, 0x5f9a, 0x5f9b, 0x5f9c, 0x5f9d, 0x5f9e, 0x5f9f,
+ 0x5fa0, 0x5fa1, 0x5fa2, 0x5fa3, 0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7,
+ 0x5fa8, 0x5fa9, 0x5faa, 0x5fab, 0x5fac, 0x5fad, 0x5fae, 0x5faf,
+ 0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb5, 0x5fb6, 0x5fb7,
+ 0x5fb8, 0x5fb9, 0x5fba, 0x5fbb, 0x5fbc, 0x5fbd, 0x5fbe, 0x5fbf,
+ 0x5fc0, 0x5fc1, 0x5fc2, 0x5fc3, 0x5fc4, 0x5fc5, 0x5fc6, 0x5fc7, /* 0x5fc0 */
+ 0x5fc8, 0x5fc9, 0x5fca, 0x5fcb, 0x5fcc, 0x5fcd, 0x5fce, 0x5fcf,
+ 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3, 0x5fd4, 0x5fd5, 0x5fd6, 0x5fd7,
+ 0x5fd8, 0x5fd9, 0x5fda, 0x5fdb, 0x5fdc, 0x5fdd, 0x5fde, 0x5fdf,
+ 0x5fe0, 0x5fe1, 0x5fe2, 0x5fe3, 0x5fe4, 0x5fe5, 0x5fe6, 0x5fe7,
+ 0x5fe8, 0x5fe9, 0x5fea, 0x5feb, 0x5fec, 0x5fed, 0x5fee, 0x5fef,
+ 0x5ff0, 0x5ff1, 0x5ff2, 0x5ff3, 0x5ff4, 0x5ff5, 0x5ff6, 0x5ff7,
+ 0x5ff8, 0x5ff9, 0x5ffa, 0x5ffb, 0x5ffc, 0x5ffd, 0x5ffe, 0x5fff,
+ 0x6000, 0x6001, 0x6002, 0x6003, 0x6004, 0x6005, 0x6006, 0x6007, /* 0x6000 */
+ 0x6008, 0x6009, 0x600a, 0x600b, 0x600c, 0x600d, 0x600e, 0x600f,
+ 0x6010, 0x6011, 0x6012, 0x6013, 0x6014, 0x6015, 0x6016, 0x6017,
+ 0x6018, 0x6019, 0x601a, 0x601b, 0x601c, 0x601d, 0x601e, 0x601f,
+ 0x6020, 0x6021, 0x6022, 0x6023, 0x6024, 0x6025, 0x6026, 0x6027,
+ 0x6028, 0x6029, 0x602a, 0x602b, 0x602c, 0x602d, 0x602e, 0x602f,
+ 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6035, 0x6036, 0x6037,
+ 0x6038, 0x6039, 0x603a, 0x603b, 0x603c, 0x603d, 0x603e, 0x603f,
+ 0x6040, 0x6041, 0x6042, 0x6043, 0x6044, 0x6045, 0x6046, 0x6047, /* 0x6040 */
+ 0x6048, 0x6049, 0x604a, 0x604b, 0x604c, 0x604d, 0x604e, 0x604f,
+ 0x6050, 0x6051, 0x6052, 0x6053, 0x6054, 0x6055, 0x6056, 0x6057,
+ 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, 0x605d, 0x605e, 0x605f,
+ 0x6060, 0x6061, 0x6062, 0x6063, 0x6064, 0x6065, 0x6066, 0x6067,
+ 0x6068, 0x6069, 0x606a, 0x606b, 0x606c, 0x606d, 0x606e, 0x606f,
+ 0x6070, 0x6071, 0x6072, 0x6073, 0x6074, 0x6075, 0x6076, 0x6077,
+ 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d, 0x607e, 0x607f,
+ 0x6080, 0x6081, 0x6082, 0x6083, 0x6084, 0x6085, 0x6086, 0x6087, /* 0x6080 */
+ 0x6088, 0x6089, 0x608a, 0x608b, 0x608c, 0x608d, 0x608e, 0x608f,
+ 0x6090, 0x6091, 0x6092, 0x6093, 0x6094, 0x6095, 0x6096, 0x6097,
+ 0x6098, 0x6099, 0x609a, 0x609b, 0x609c, 0x609d, 0x609e, 0x609f,
+ 0x60a0, 0x60a1, 0x60a2, 0x60a3, 0x60a4, 0x60a5, 0x60a6, 0x60a7,
+ 0x60a8, 0x60a9, 0x60aa, 0x60ab, 0x60ac, 0x60ad, 0x60ae, 0x60af,
+ 0x60b0, 0x60b1, 0x60b2, 0x60b3, 0x60b4, 0x60b5, 0x60b6, 0x60b7,
+ 0x60b8, 0x60b9, 0x60ba, 0x60bb, 0x60bc, 0x60bd, 0x60be, 0x60bf,
+ 0x60c0, 0x60c1, 0x60c2, 0x60c3, 0x60c4, 0x60c5, 0x60c6, 0x60c7, /* 0x60c0 */
+ 0x60c8, 0x60c9, 0x60ca, 0x60cb, 0x60cc, 0x60cd, 0x60ce, 0x60cf,
+ 0x60d0, 0x60d1, 0x60d2, 0x60d3, 0x60d4, 0x60d5, 0x60d6, 0x60d7,
+ 0x60d8, 0x60d9, 0x60da, 0x60db, 0x60dc, 0x60dd, 0x60de, 0x60df,
+ 0x60e0, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60e6, 0x60e7,
+ 0x60e8, 0x60e9, 0x60ea, 0x60eb, 0x60ec, 0x60ed, 0x60ee, 0x60ef,
+ 0x60f0, 0x60f1, 0x60f2, 0x60f3, 0x60f4, 0x60f5, 0x60f6, 0x60f7,
+ 0x60f8, 0x60f9, 0x60fa, 0x60fb, 0x60fc, 0x60fd, 0x60fe, 0x60ff,
+ 0x6100, 0x6101, 0x6102, 0x6103, 0x6104, 0x6105, 0x6106, 0x6107, /* 0x6100 */
+ 0x6108, 0x6109, 0x610a, 0x610b, 0x610c, 0x610d, 0x610e, 0x610f,
+ 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6115, 0x6116, 0x6117,
+ 0x6118, 0x6119, 0x611a, 0x611b, 0x611c, 0x611d, 0x611e, 0x611f,
+ 0x6120, 0x6121, 0x6122, 0x6123, 0x6124, 0x6125, 0x6126, 0x6127,
+ 0x6128, 0x6129, 0x612a, 0x612b, 0x612c, 0x612d, 0x612e, 0x612f,
+ 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137,
+ 0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x613f,
+ 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x6147, /* 0x6140 */
+ 0x6148, 0x6149, 0x614a, 0x614b, 0x614c, 0x614d, 0x614e, 0x614f,
+ 0x6150, 0x6151, 0x6152, 0x6153, 0x6154, 0x6155, 0x6156, 0x6157,
+ 0x6158, 0x6159, 0x615a, 0x615b, 0x615c, 0x615d, 0x615e, 0x615f,
+ 0x6160, 0x6161, 0x6162, 0x6163, 0x6164, 0x6165, 0x6166, 0x6167,
+ 0x6168, 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f,
+ 0x6170, 0x6171, 0x6172, 0x6173, 0x6174, 0x6175, 0x6176, 0x6177,
+ 0x6178, 0x6179, 0x617a, 0x617b, 0x617c, 0x617d, 0x617e, 0x617f,
+ 0x6180, 0x6181, 0x6182, 0x6183, 0x6184, 0x6185, 0x6186, 0x6187, /* 0x6180 */
+ 0x6188, 0x6189, 0x618a, 0x618b, 0x618c, 0x618d, 0x618e, 0x618f,
+ 0x6190, 0x6191, 0x6192, 0x6193, 0x6194, 0x6195, 0x6196, 0x6197,
+ 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619d, 0x619e, 0x619f,
+ 0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, 0x61a7,
+ 0x61a8, 0x61a9, 0x61aa, 0x61ab, 0x61ac, 0x61ad, 0x61ae, 0x61af,
+ 0x61b0, 0x61b1, 0x61b2, 0x61b3, 0x61b4, 0x61b5, 0x61b6, 0x61b7,
+ 0x61b8, 0x61b9, 0x61ba, 0x61bb, 0x61bc, 0x61bd, 0x61be, 0x61bf,
+ 0x61c0, 0x61c1, 0x61c2, 0x61c3, 0x61c4, 0x61c5, 0x61c6, 0x61c7, /* 0x61c0 */
+ 0x61c8, 0x61c9, 0x61ca, 0x61cb, 0x61cc, 0x61cd, 0x61ce, 0x61cf,
+ 0x61d0, 0x61d1, 0x61d2, 0x61d3, 0x61d4, 0x61d5, 0x61d6, 0x61d7,
+ 0x61d8, 0x61d9, 0x61da, 0x61db, 0x61dc, 0x61dd, 0x61de, 0x61df,
+ 0x61e0, 0x61e1, 0x61e2, 0x61e3, 0x61e4, 0x61e5, 0x61e6, 0x61e7,
+ 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, 0x61ed, 0x61ee, 0x61ef,
+ 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, 0x61f5, 0x61f6, 0x61f7,
+ 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, 0x61fe, 0x61ff,
+ 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6206, 0x6207, /* 0x6200 */
+ 0x6208, 0x6209, 0x620a, 0x620b, 0x620c, 0x620d, 0x620e, 0x620f,
+ 0x6210, 0x6211, 0x6212, 0x6213, 0x6214, 0x6215, 0x6216, 0x6217,
+ 0x6218, 0x6219, 0x621a, 0x621b, 0x621c, 0x621d, 0x621e, 0x621f,
+ 0x6220, 0x6221, 0x6222, 0x6223, 0x6224, 0x6225, 0x6226, 0x6227,
+ 0x6228, 0x6229, 0x622a, 0x622b, 0x622c, 0x622d, 0x622e, 0x622f,
+ 0x6230, 0x6231, 0x6232, 0x6233, 0x6234, 0x6235, 0x6236, 0x6237,
+ 0x6238, 0x6239, 0x623a, 0x623b, 0x623c, 0x623d, 0x623e, 0x623f,
+ 0x6240, 0x6241, 0x6242, 0x6243, 0x6244, 0x6245, 0x6246, 0x6247, /* 0x6240 */
+ 0x6248, 0x6249, 0x624a, 0x624b, 0x624c, 0x624d, 0x624e, 0x624f,
+ 0x6250, 0x6251, 0x6252, 0x6253, 0x6254, 0x6255, 0x6256, 0x6257,
+ 0x6258, 0x6259, 0x625a, 0x625b, 0x625c, 0x625d, 0x625e, 0x625f,
+ 0x6260, 0x6261, 0x6262, 0x6263, 0x6264, 0x6265, 0x6266, 0x6267,
+ 0x6268, 0x6269, 0x626a, 0x626b, 0x626c, 0x626d, 0x626e, 0x626f,
+ 0x6270, 0x6271, 0x6272, 0x6273, 0x6274, 0x6275, 0x6276, 0x6277,
+ 0x6278, 0x6279, 0x627a, 0x627b, 0x627c, 0x627d, 0x627e, 0x627f,
+ 0x6280, 0x6281, 0x6282, 0x6283, 0x6284, 0x6285, 0x6286, 0x6287, /* 0x6280 */
+ 0x6288, 0x6289, 0x628a, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f,
+ 0x6290, 0x6291, 0x6292, 0x6293, 0x6294, 0x6295, 0x6296, 0x6297,
+ 0x6298, 0x6299, 0x629a, 0x629b, 0x629c, 0x629d, 0x629e, 0x629f,
+ 0x62a0, 0x62a1, 0x62a2, 0x62a3, 0x62a4, 0x62a5, 0x62a6, 0x62a7,
+ 0x62a8, 0x62a9, 0x62aa, 0x62ab, 0x62ac, 0x62ad, 0x62ae, 0x62af,
+ 0x62b0, 0x62b1, 0x62b2, 0x62b3, 0x62b4, 0x62b5, 0x62b6, 0x62b7,
+ 0x62b8, 0x62b9, 0x62ba, 0x62bb, 0x62bc, 0x62bd, 0x62be, 0x62bf,
+ 0x62c0, 0x62c1, 0x62c2, 0x62c3, 0x62c4, 0x62c5, 0x62c6, 0x62c7, /* 0x62c0 */
+ 0x62c8, 0x62c9, 0x62ca, 0x62cb, 0x62cc, 0x62cd, 0x62ce, 0x62cf,
+ 0x62d0, 0x62d1, 0x62d2, 0x62d3, 0x62d4, 0x62d5, 0x62d6, 0x62d7,
+ 0x62d8, 0x62d9, 0x62da, 0x62db, 0x62dc, 0x62dd, 0x62de, 0x62df,
+ 0x62e0, 0x62e1, 0x62e2, 0x62e3, 0x62e4, 0x62e5, 0x62e6, 0x62e7,
+ 0x62e8, 0x62e9, 0x62ea, 0x62eb, 0x62ec, 0x62ed, 0x62ee, 0x62ef,
+ 0x62f0, 0x62f1, 0x62f2, 0x62f3, 0x62f4, 0x62f5, 0x62f6, 0x62f7,
+ 0x62f8, 0x62f9, 0x62fa, 0x62fb, 0x62fc, 0x62fd, 0x62fe, 0x62ff,
+ 0x6300, 0x6301, 0x6302, 0x6303, 0x6304, 0x6305, 0x6306, 0x6307, /* 0x6300 */
+ 0x6308, 0x6309, 0x630a, 0x630b, 0x630c, 0x630d, 0x630e, 0x630f,
+ 0x6310, 0x6311, 0x6312, 0x6313, 0x6314, 0x6315, 0x6316, 0x6317,
+ 0x6318, 0x6319, 0x631a, 0x631b, 0x631c, 0x631d, 0x631e, 0x631f,
+ 0x6320, 0x6321, 0x6322, 0x6323, 0x6324, 0x6325, 0x6326, 0x6327,
+ 0x6328, 0x6329, 0x632a, 0x632b, 0x632c, 0x632d, 0x632e, 0x632f,
+ 0x6330, 0x6331, 0x6332, 0x6333, 0x6334, 0x6335, 0x6336, 0x6337,
+ 0x6338, 0x6339, 0x633a, 0x633b, 0x633c, 0x633d, 0x633e, 0x633f,
+ 0x6340, 0x6341, 0x6342, 0x6343, 0x6344, 0x6345, 0x6346, 0x6347, /* 0x6340 */
+ 0x6348, 0x6349, 0x634a, 0x634b, 0x634c, 0x634d, 0x634e, 0x634f,
+ 0x6350, 0x6351, 0x6352, 0x6353, 0x6354, 0x6355, 0x6356, 0x6357,
+ 0x6358, 0x6359, 0x635a, 0x635b, 0x635c, 0x635d, 0x635e, 0x635f,
+ 0x6360, 0x6361, 0x6362, 0x6363, 0x6364, 0x6365, 0x6366, 0x6367,
+ 0x6368, 0x6369, 0x636a, 0x636b, 0x636c, 0x636d, 0x636e, 0x636f,
+ 0x6370, 0x6371, 0x6372, 0x6373, 0x6374, 0x6375, 0x6376, 0x6377,
+ 0x6378, 0x6379, 0x637a, 0x637b, 0x637c, 0x637d, 0x637e, 0x637f,
+ 0x6380, 0x6381, 0x6382, 0x6383, 0x6384, 0x6385, 0x6386, 0x6387, /* 0x6380 */
+ 0x6388, 0x6389, 0x638a, 0x638b, 0x638c, 0x638d, 0x638e, 0x638f,
+ 0x6390, 0x6391, 0x6392, 0x6393, 0x6394, 0x6395, 0x6396, 0x6397,
+ 0x6398, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, 0x639f,
+ 0x63a0, 0x63a1, 0x63a2, 0x63a3, 0x63a4, 0x63a5, 0x63a6, 0x63a7,
+ 0x63a8, 0x63a9, 0x63aa, 0x63ab, 0x63ac, 0x63ad, 0x63ae, 0x63af,
+ 0x63b0, 0x63b1, 0x63b2, 0x63b3, 0x63b4, 0x63b5, 0x63b6, 0x63b7,
+ 0x63b8, 0x63b9, 0x63ba, 0x63bb, 0x63bc, 0x63bd, 0x63be, 0x63bf,
+ 0x63c0, 0x63c1, 0x63c2, 0x63c3, 0x63c4, 0x63c5, 0x63c6, 0x63c7, /* 0x63c0 */
+ 0x63c8, 0x63c9, 0x63ca, 0x63cb, 0x63cc, 0x63cd, 0x63ce, 0x63cf,
+ 0x63d0, 0x63d1, 0x63d2, 0x63d3, 0x63d4, 0x63d5, 0x63d6, 0x63d7,
+ 0x63d8, 0x63d9, 0x63da, 0x63db, 0x63dc, 0x63dd, 0x63de, 0x63df,
+ 0x63e0, 0x63e1, 0x63e2, 0x63e3, 0x63e4, 0x63e5, 0x63e6, 0x63e7,
+ 0x63e8, 0x63e9, 0x63ea, 0x63eb, 0x63ec, 0x63ed, 0x63ee, 0x63ef,
+ 0x63f0, 0x63f1, 0x63f2, 0x63f3, 0x63f4, 0x63f5, 0x63f6, 0x63f7,
+ 0x63f8, 0x63f9, 0x63fa, 0x63fb, 0x63fc, 0x63fd, 0x63fe, 0x63ff,
+ 0x6400, 0x6401, 0x6402, 0x6403, 0x6404, 0x6405, 0x6406, 0x6407, /* 0x6400 */
+ 0x6408, 0x6409, 0x640a, 0x640b, 0x640c, 0x640d, 0x640e, 0x640f,
+ 0x6410, 0x6411, 0x6412, 0x6413, 0x6414, 0x6415, 0x6416, 0x6417,
+ 0x6418, 0x6419, 0x641a, 0x641b, 0x641c, 0x641d, 0x641e, 0x641f,
+ 0x6420, 0x6421, 0x6422, 0x6423, 0x6424, 0x6425, 0x6426, 0x6427,
+ 0x6428, 0x6429, 0x642a, 0x642b, 0x642c, 0x642d, 0x642e, 0x642f,
+ 0x6430, 0x6431, 0x6432, 0x6433, 0x6434, 0x6435, 0x6436, 0x6437,
+ 0x6438, 0x6439, 0x643a, 0x643b, 0x643c, 0x643d, 0x643e, 0x643f,
+ 0x6440, 0x6441, 0x6442, 0x6443, 0x6444, 0x6445, 0x6446, 0x6447, /* 0x6440 */
+ 0x6448, 0x6449, 0x644a, 0x644b, 0x644c, 0x644d, 0x644e, 0x644f,
+ 0x6450, 0x6451, 0x6452, 0x6453, 0x6454, 0x6455, 0x6456, 0x6457,
+ 0x6458, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645e, 0x645f,
+ 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6467,
+ 0x6468, 0x6469, 0x646a, 0x646b, 0x646c, 0x646d, 0x646e, 0x646f,
+ 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475, 0x6476, 0x6477,
+ 0x6478, 0x6479, 0x647a, 0x647b, 0x647c, 0x647d, 0x647e, 0x647f,
+ 0x6480, 0x6481, 0x6482, 0x6483, 0x6484, 0x6485, 0x6486, 0x6487, /* 0x6480 */
+ 0x6488, 0x6489, 0x648a, 0x648b, 0x648c, 0x648d, 0x648e, 0x648f,
+ 0x6490, 0x6491, 0x6492, 0x6493, 0x6494, 0x6495, 0x6496, 0x6497,
+ 0x6498, 0x6499, 0x649a, 0x649b, 0x649c, 0x649d, 0x649e, 0x649f,
+ 0x64a0, 0x64a1, 0x64a2, 0x64a3, 0x64a4, 0x64a5, 0x64a6, 0x64a7,
+ 0x64a8, 0x64a9, 0x64aa, 0x64ab, 0x64ac, 0x64ad, 0x64ae, 0x64af,
+ 0x64b0, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b5, 0x64b6, 0x64b7,
+ 0x64b8, 0x64b9, 0x64ba, 0x64bb, 0x64bc, 0x64bd, 0x64be, 0x64bf,
+ 0x64c0, 0x64c1, 0x64c2, 0x64c3, 0x64c4, 0x64c5, 0x64c6, 0x64c7, /* 0x64c0 */
+ 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cd, 0x64ce, 0x64cf,
+ 0x64d0, 0x64d1, 0x64d2, 0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d7,
+ 0x64d8, 0x64d9, 0x64da, 0x64db, 0x64dc, 0x64dd, 0x64de, 0x64df,
+ 0x64e0, 0x64e1, 0x64e2, 0x64e3, 0x64e4, 0x64e5, 0x64e6, 0x64e7,
+ 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee, 0x64ef,
+ 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6, 0x64f7,
+ 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe, 0x64ff,
+ 0x6500, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, /* 0x6500 */
+ 0x6508, 0x6509, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f,
+ 0x6510, 0x6511, 0x6512, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517,
+ 0x6518, 0x6519, 0x651a, 0x651b, 0x651c, 0x651d, 0x651e, 0x651f,
+ 0x6520, 0x6521, 0x6522, 0x6523, 0x6524, 0x6525, 0x6526, 0x6527,
+ 0x6528, 0x6529, 0x652a, 0x652b, 0x652c, 0x652d, 0x652e, 0x652f,
+ 0x6530, 0x6531, 0x6532, 0x6533, 0x6534, 0x6535, 0x6536, 0x6537,
+ 0x6538, 0x6539, 0x653a, 0x653b, 0x653c, 0x653d, 0x653e, 0x653f,
+ 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0x6546, 0x6547, /* 0x6540 */
+ 0x6548, 0x6549, 0x654a, 0x654b, 0x654c, 0x654d, 0x654e, 0x654f,
+ 0x6550, 0x6551, 0x6552, 0x6553, 0x6554, 0x6555, 0x6556, 0x6557,
+ 0x6558, 0x6559, 0x655a, 0x655b, 0x655c, 0x655d, 0x655e, 0x655f,
+ 0x6560, 0x6561, 0x6562, 0x6563, 0x6564, 0x6565, 0x6566, 0x6567,
+ 0x6568, 0x6569, 0x656a, 0x656b, 0x656c, 0x656d, 0x656e, 0x656f,
+ 0x6570, 0x6571, 0x6572, 0x6573, 0x6574, 0x6575, 0x6576, 0x6577,
+ 0x6578, 0x6579, 0x657a, 0x657b, 0x657c, 0x657d, 0x657e, 0x657f,
+ 0x6580, 0x6581, 0x6582, 0x6583, 0x6584, 0x6585, 0x6586, 0x6587, /* 0x6580 */
+ 0x6588, 0x6589, 0x658a, 0x658b, 0x658c, 0x658d, 0x658e, 0x658f,
+ 0x6590, 0x6591, 0x6592, 0x6593, 0x6594, 0x6595, 0x6596, 0x6597,
+ 0x6598, 0x6599, 0x659a, 0x659b, 0x659c, 0x659d, 0x659e, 0x659f,
+ 0x65a0, 0x65a1, 0x65a2, 0x65a3, 0x65a4, 0x65a5, 0x65a6, 0x65a7,
+ 0x65a8, 0x65a9, 0x65aa, 0x65ab, 0x65ac, 0x65ad, 0x65ae, 0x65af,
+ 0x65b0, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, 0x65b7,
+ 0x65b8, 0x65b9, 0x65ba, 0x65bb, 0x65bc, 0x65bd, 0x65be, 0x65bf,
+ 0x65c0, 0x65c1, 0x65c2, 0x65c3, 0x65c4, 0x65c5, 0x65c6, 0x65c7, /* 0x65c0 */
+ 0x65c8, 0x65c9, 0x65ca, 0x65cb, 0x65cc, 0x65cd, 0x65ce, 0x65cf,
+ 0x65d0, 0x65d1, 0x65d2, 0x65d3, 0x65d4, 0x65d5, 0x65d6, 0x65d7,
+ 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, 0x65de, 0x65df,
+ 0x65e0, 0x65e1, 0x65e2, 0x65e3, 0x65e4, 0x65e5, 0x65e6, 0x65e7,
+ 0x65e8, 0x65e9, 0x65ea, 0x65eb, 0x65ec, 0x65ed, 0x65ee, 0x65ef,
+ 0x65f0, 0x65f1, 0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f6, 0x65f7,
+ 0x65f8, 0x65f9, 0x65fa, 0x65fb, 0x65fc, 0x65fd, 0x65fe, 0x65ff,
+ 0x6600, 0x6601, 0x6602, 0x6603, 0x6604, 0x6605, 0x6606, 0x6607, /* 0x6600 */
+ 0x6608, 0x6609, 0x660a, 0x660b, 0x660c, 0x660d, 0x660e, 0x660f,
+ 0x6610, 0x6611, 0x6612, 0x6613, 0x6614, 0x6615, 0x6616, 0x6617,
+ 0x6618, 0x6619, 0x661a, 0x661b, 0x661c, 0x661d, 0x661e, 0x661f,
+ 0x6620, 0x6621, 0x6622, 0x6623, 0x6624, 0x6625, 0x6626, 0x6627,
+ 0x6628, 0x6629, 0x662a, 0x662b, 0x662c, 0x662d, 0x662e, 0x662f,
+ 0x6630, 0x6631, 0x6632, 0x6633, 0x6634, 0x6635, 0x6636, 0x6637,
+ 0x6638, 0x6639, 0x663a, 0x663b, 0x663c, 0x663d, 0x663e, 0x663f,
+ 0x6640, 0x6641, 0x6642, 0x6643, 0x6644, 0x6645, 0x6646, 0x6647, /* 0x6640 */
+ 0x6648, 0x6649, 0x664a, 0x664b, 0x664c, 0x664d, 0x664e, 0x664f,
+ 0x6650, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655, 0x6656, 0x6657,
+ 0x6658, 0x6659, 0x665a, 0x665b, 0x665c, 0x665d, 0x665e, 0x665f,
+ 0x6660, 0x6661, 0x6662, 0x6663, 0x6664, 0x6665, 0x6666, 0x6667,
+ 0x6668, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x666e, 0x666f,
+ 0x6670, 0x6671, 0x6672, 0x6673, 0x6674, 0x6675, 0x6676, 0x6677,
+ 0x6678, 0x6679, 0x667a, 0x667b, 0x667c, 0x667d, 0x667e, 0x667f,
+ 0x6680, 0x6681, 0x6682, 0x6683, 0x6684, 0x6685, 0x6686, 0x6687, /* 0x6680 */
+ 0x6688, 0x6689, 0x668a, 0x668b, 0x668c, 0x668d, 0x668e, 0x668f,
+ 0x6690, 0x6691, 0x6692, 0x6693, 0x6694, 0x6695, 0x6696, 0x6697,
+ 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669d, 0x669e, 0x669f,
+ 0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, 0x66a7,
+ 0x66a8, 0x66a9, 0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66ae, 0x66af,
+ 0x66b0, 0x66b1, 0x66b2, 0x66b3, 0x66b4, 0x66b5, 0x66b6, 0x66b7,
+ 0x66b8, 0x66b9, 0x66ba, 0x66bb, 0x66bc, 0x66bd, 0x66be, 0x66bf,
+ 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, 0x66c5, 0x66c6, 0x66c7, /* 0x66c0 */
+ 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, 0x66cd, 0x66ce, 0x66cf,
+ 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, 0x66d5, 0x66d6, 0x66d7,
+ 0x66d8, 0x66d9, 0x66da, 0x66db, 0x66dc, 0x66dd, 0x66de, 0x66df,
+ 0x66e0, 0x66e1, 0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e6, 0x66e7,
+ 0x66e8, 0x66e9, 0x66ea, 0x66eb, 0x66ec, 0x66ed, 0x66ee, 0x66ef,
+ 0x66f0, 0x66f1, 0x66f2, 0x66f3, 0x66f4, 0x66f5, 0x66f6, 0x66f7,
+ 0x66f8, 0x66f9, 0x66fa, 0x66fb, 0x66fc, 0x66fd, 0x66fe, 0x66ff,
+ 0x6700, 0x6701, 0x6702, 0x6703, 0x6704, 0x6705, 0x6706, 0x6707, /* 0x6700 */
+ 0x6708, 0x6709, 0x670a, 0x670b, 0x670c, 0x670d, 0x670e, 0x670f,
+ 0x6710, 0x6711, 0x6712, 0x6713, 0x6714, 0x6715, 0x6716, 0x6717,
+ 0x6718, 0x6719, 0x671a, 0x671b, 0x671c, 0x671d, 0x671e, 0x671f,
+ 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6726, 0x6727,
+ 0x6728, 0x6729, 0x672a, 0x672b, 0x672c, 0x672d, 0x672e, 0x672f,
+ 0x6730, 0x6731, 0x6732, 0x6733, 0x6734, 0x6735, 0x6736, 0x6737,
+ 0x6738, 0x6739, 0x673a, 0x673b, 0x673c, 0x673d, 0x673e, 0x673f,
+ 0x6740, 0x6741, 0x6742, 0x6743, 0x6744, 0x6745, 0x6746, 0x6747, /* 0x6740 */
+ 0x6748, 0x6749, 0x674a, 0x674b, 0x674c, 0x674d, 0x674e, 0x674f,
+ 0x6750, 0x6751, 0x6752, 0x6753, 0x6754, 0x6755, 0x6756, 0x6757,
+ 0x6758, 0x6759, 0x675a, 0x675b, 0x675c, 0x675d, 0x675e, 0x675f,
+ 0x6760, 0x6761, 0x6762, 0x6763, 0x6764, 0x6765, 0x6766, 0x6767,
+ 0x6768, 0x6769, 0x676a, 0x676b, 0x676c, 0x676d, 0x676e, 0x676f,
+ 0x6770, 0x6771, 0x6772, 0x6773, 0x6774, 0x6775, 0x6776, 0x6777,
+ 0x6778, 0x6779, 0x677a, 0x677b, 0x677c, 0x677d, 0x677e, 0x677f,
+ 0x6780, 0x6781, 0x6782, 0x6783, 0x6784, 0x6785, 0x6786, 0x6787, /* 0x6780 */
+ 0x6788, 0x6789, 0x678a, 0x678b, 0x678c, 0x678d, 0x678e, 0x678f,
+ 0x6790, 0x6791, 0x6792, 0x6793, 0x6794, 0x6795, 0x6796, 0x6797,
+ 0x6798, 0x6799, 0x679a, 0x679b, 0x679c, 0x679d, 0x679e, 0x679f,
+ 0x67a0, 0x67a1, 0x67a2, 0x67a3, 0x67a4, 0x67a5, 0x67a6, 0x67a7,
+ 0x67a8, 0x67a9, 0x67aa, 0x67ab, 0x67ac, 0x67ad, 0x67ae, 0x67af,
+ 0x67b0, 0x67b1, 0x67b2, 0x67b3, 0x67b4, 0x67b5, 0x67b6, 0x67b7,
+ 0x67b8, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, 0x67bf,
+ 0x67c0, 0x67c1, 0x67c2, 0x67c3, 0x67c4, 0x67c5, 0x67c6, 0x67c7, /* 0x67c0 */
+ 0x67c8, 0x67c9, 0x67ca, 0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67cf,
+ 0x67d0, 0x67d1, 0x67d2, 0x67d3, 0x67d4, 0x67d5, 0x67d6, 0x67d7,
+ 0x67d8, 0x67d9, 0x67da, 0x67db, 0x67dc, 0x67dd, 0x67de, 0x67df,
+ 0x67e0, 0x67e1, 0x67e2, 0x67e3, 0x67e4, 0x67e5, 0x67e6, 0x67e7,
+ 0x67e8, 0x67e9, 0x67ea, 0x67eb, 0x67ec, 0x67ed, 0x67ee, 0x67ef,
+ 0x67f0, 0x67f1, 0x67f2, 0x67f3, 0x67f4, 0x67f5, 0x67f6, 0x67f7,
+ 0x67f8, 0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fd, 0x67fe, 0x67ff,
+ 0x6800, 0x6801, 0x6802, 0x6803, 0x6804, 0x6805, 0x6806, 0x6807, /* 0x6800 */
+ 0x6808, 0x6809, 0x680a, 0x680b, 0x680c, 0x680d, 0x680e, 0x680f,
+ 0x6810, 0x6811, 0x6812, 0x6813, 0x6814, 0x6815, 0x6816, 0x6817,
+ 0x6818, 0x6819, 0x681a, 0x681b, 0x681c, 0x681d, 0x681e, 0x681f,
+ 0x6820, 0x6821, 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827,
+ 0x6828, 0x6829, 0x682a, 0x682b, 0x682c, 0x682d, 0x682e, 0x682f,
+ 0x6830, 0x6831, 0x6832, 0x6833, 0x6834, 0x6835, 0x6836, 0x6837,
+ 0x6838, 0x6839, 0x683a, 0x683b, 0x683c, 0x683d, 0x683e, 0x683f,
+ 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846, 0x6847, /* 0x6840 */
+ 0x6848, 0x6849, 0x684a, 0x684b, 0x684c, 0x684d, 0x684e, 0x684f,
+ 0x6850, 0x6851, 0x6852, 0x6853, 0x6854, 0x6855, 0x6856, 0x6857,
+ 0x6858, 0x6859, 0x685a, 0x685b, 0x685c, 0x685d, 0x685e, 0x685f,
+ 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866, 0x6867,
+ 0x6868, 0x6869, 0x686a, 0x686b, 0x686c, 0x686d, 0x686e, 0x686f,
+ 0x6870, 0x6871, 0x6872, 0x6873, 0x6874, 0x6875, 0x6876, 0x6877,
+ 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f,
+ 0x6880, 0x6881, 0x6882, 0x6883, 0x6884, 0x6885, 0x6886, 0x6887, /* 0x6880 */
+ 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d, 0x688e, 0x688f,
+ 0x6890, 0x6891, 0x6892, 0x6893, 0x6894, 0x6895, 0x6896, 0x6897,
+ 0x6898, 0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f,
+ 0x68a0, 0x68a1, 0x68a2, 0x68a3, 0x68a4, 0x68a5, 0x68a6, 0x68a7,
+ 0x68a8, 0x68a9, 0x68aa, 0x68ab, 0x68ac, 0x68ad, 0x68ae, 0x68af,
+ 0x68b0, 0x68b1, 0x68b2, 0x68b3, 0x68b4, 0x68b5, 0x68b6, 0x68b7,
+ 0x68b8, 0x68b9, 0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf,
+ 0x68c0, 0x68c1, 0x68c2, 0x68c3, 0x68c4, 0x68c5, 0x68c6, 0x68c7, /* 0x68c0 */
+ 0x68c8, 0x68c9, 0x68ca, 0x68cb, 0x68cc, 0x68cd, 0x68ce, 0x68cf,
+ 0x68d0, 0x68d1, 0x68d2, 0x68d3, 0x68d4, 0x68d5, 0x68d6, 0x68d7,
+ 0x68d8, 0x68d9, 0x68da, 0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df,
+ 0x68e0, 0x68e1, 0x68e2, 0x68e3, 0x68e4, 0x68e5, 0x68e6, 0x68e7,
+ 0x68e8, 0x68e9, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68ee, 0x68ef,
+ 0x68f0, 0x68f1, 0x68f2, 0x68f3, 0x68f4, 0x68f5, 0x68f6, 0x68f7,
+ 0x68f8, 0x68f9, 0x68fa, 0x68fb, 0x68fc, 0x68fd, 0x68fe, 0x68ff,
+ 0x6900, 0x6901, 0x6902, 0x6903, 0x6904, 0x6905, 0x6906, 0x6907, /* 0x6900 */
+ 0x6908, 0x6909, 0x690a, 0x690b, 0x690c, 0x690d, 0x690e, 0x690f,
+ 0x6910, 0x6911, 0x6912, 0x6913, 0x6914, 0x6915, 0x6916, 0x6917,
+ 0x6918, 0x6919, 0x691a, 0x691b, 0x691c, 0x691d, 0x691e, 0x691f,
+ 0x6920, 0x6921, 0x6922, 0x6923, 0x6924, 0x6925, 0x6926, 0x6927,
+ 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692d, 0x692e, 0x692f,
+ 0x6930, 0x6931, 0x6932, 0x6933, 0x6934, 0x6935, 0x6936, 0x6937,
+ 0x6938, 0x6939, 0x693a, 0x693b, 0x693c, 0x693d, 0x693e, 0x693f,
+ 0x6940, 0x6941, 0x6942, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, /* 0x6940 */
+ 0x6948, 0x6949, 0x694a, 0x694b, 0x694c, 0x694d, 0x694e, 0x694f,
+ 0x6950, 0x6951, 0x6952, 0x6953, 0x6954, 0x6955, 0x6956, 0x6957,
+ 0x6958, 0x6959, 0x695a, 0x695b, 0x695c, 0x695d, 0x695e, 0x695f,
+ 0x6960, 0x6961, 0x6962, 0x6963, 0x6964, 0x6965, 0x6966, 0x6967,
+ 0x6968, 0x6969, 0x696a, 0x696b, 0x696c, 0x696d, 0x696e, 0x696f,
+ 0x6970, 0x6971, 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x6977,
+ 0x6978, 0x6979, 0x697a, 0x697b, 0x697c, 0x697d, 0x697e, 0x697f,
+ 0x6980, 0x6981, 0x6982, 0x6983, 0x6984, 0x6985, 0x6986, 0x6987, /* 0x6980 */
+ 0x6988, 0x6989, 0x698a, 0x698b, 0x698c, 0x698d, 0x698e, 0x698f,
+ 0x6990, 0x6991, 0x6992, 0x6993, 0x6994, 0x6995, 0x6996, 0x6997,
+ 0x6998, 0x6999, 0x699a, 0x699b, 0x699c, 0x699d, 0x699e, 0x699f,
+ 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6, 0x69a7,
+ 0x69a8, 0x69a9, 0x69aa, 0x69ab, 0x69ac, 0x69ad, 0x69ae, 0x69af,
+ 0x69b0, 0x69b1, 0x69b2, 0x69b3, 0x69b4, 0x69b5, 0x69b6, 0x69b7,
+ 0x69b8, 0x69b9, 0x69ba, 0x69bb, 0x69bc, 0x69bd, 0x69be, 0x69bf,
+ 0x69c0, 0x69c1, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, 0x69c7, /* 0x69c0 */
+ 0x69c8, 0x69c9, 0x69ca, 0x69cb, 0x69cc, 0x69cd, 0x69ce, 0x69cf,
+ 0x69d0, 0x69d1, 0x69d2, 0x69d3, 0x69d4, 0x69d5, 0x69d6, 0x69d7,
+ 0x69d8, 0x69d9, 0x69da, 0x69db, 0x69dc, 0x69dd, 0x69de, 0x69df,
+ 0x69e0, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, 0x69e7,
+ 0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ed, 0x69ee, 0x69ef,
+ 0x69f0, 0x69f1, 0x69f2, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7,
+ 0x69f8, 0x69f9, 0x69fa, 0x69fb, 0x69fc, 0x69fd, 0x69fe, 0x69ff,
+ 0x6a00, 0x6a01, 0x6a02, 0x6a03, 0x6a04, 0x6a05, 0x6a06, 0x6a07, /* 0x6a00 */
+ 0x6a08, 0x6a09, 0x6a0a, 0x6a0b, 0x6a0c, 0x6a0d, 0x6a0e, 0x6a0f,
+ 0x6a10, 0x6a11, 0x6a12, 0x6a13, 0x6a14, 0x6a15, 0x6a16, 0x6a17,
+ 0x6a18, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, 0x6a1e, 0x6a1f,
+ 0x6a20, 0x6a21, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27,
+ 0x6a28, 0x6a29, 0x6a2a, 0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a2f,
+ 0x6a30, 0x6a31, 0x6a32, 0x6a33, 0x6a34, 0x6a35, 0x6a36, 0x6a37,
+ 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3d, 0x6a3e, 0x6a3f,
+ 0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a44, 0x6a45, 0x6a46, 0x6a47, /* 0x6a40 */
+ 0x6a48, 0x6a49, 0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f,
+ 0x6a50, 0x6a51, 0x6a52, 0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57,
+ 0x6a58, 0x6a59, 0x6a5a, 0x6a5b, 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f,
+ 0x6a60, 0x6a61, 0x6a62, 0x6a63, 0x6a64, 0x6a65, 0x6a66, 0x6a67,
+ 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f,
+ 0x6a70, 0x6a71, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76, 0x6a77,
+ 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a7c, 0x6a7d, 0x6a7e, 0x6a7f,
+ 0x6a80, 0x6a81, 0x6a82, 0x6a83, 0x6a84, 0x6a85, 0x6a86, 0x6a87, /* 0x6a80 */
+ 0x6a88, 0x6a89, 0x6a8a, 0x6a8b, 0x6a8c, 0x6a8d, 0x6a8e, 0x6a8f,
+ 0x6a90, 0x6a91, 0x6a92, 0x6a93, 0x6a94, 0x6a95, 0x6a96, 0x6a97,
+ 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e, 0x6a9f,
+ 0x6aa0, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x6aa7,
+ 0x6aa8, 0x6aa9, 0x6aaa, 0x6aab, 0x6aac, 0x6aad, 0x6aae, 0x6aaf,
+ 0x6ab0, 0x6ab1, 0x6ab2, 0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7,
+ 0x6ab8, 0x6ab9, 0x6aba, 0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf,
+ 0x6ac0, 0x6ac1, 0x6ac2, 0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, /* 0x6ac0 */
+ 0x6ac8, 0x6ac9, 0x6aca, 0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf,
+ 0x6ad0, 0x6ad1, 0x6ad2, 0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7,
+ 0x6ad8, 0x6ad9, 0x6ada, 0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf,
+ 0x6ae0, 0x6ae1, 0x6ae2, 0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7,
+ 0x6ae8, 0x6ae9, 0x6aea, 0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef,
+ 0x6af0, 0x6af1, 0x6af2, 0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7,
+ 0x6af8, 0x6af9, 0x6afa, 0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff,
+ 0x6b00, 0x6b01, 0x6b02, 0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, /* 0x6b00 */
+ 0x6b08, 0x6b09, 0x6b0a, 0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f,
+ 0x6b10, 0x6b11, 0x6b12, 0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17,
+ 0x6b18, 0x6b19, 0x6b1a, 0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f,
+ 0x6b20, 0x6b21, 0x6b22, 0x6b23, 0x6b24, 0x6b25, 0x6b26, 0x6b27,
+ 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e, 0x6b2f,
+ 0x6b30, 0x6b31, 0x6b32, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b37,
+ 0x6b38, 0x6b39, 0x6b3a, 0x6b3b, 0x6b3c, 0x6b3d, 0x6b3e, 0x6b3f,
+ 0x6b40, 0x6b41, 0x6b42, 0x6b43, 0x6b44, 0x6b45, 0x6b46, 0x6b47, /* 0x6b40 */
+ 0x6b48, 0x6b49, 0x6b4a, 0x6b4b, 0x6b4c, 0x6b4d, 0x6b4e, 0x6b4f,
+ 0x6b50, 0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57,
+ 0x6b58, 0x6b59, 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f,
+ 0x6b60, 0x6b61, 0x6b62, 0x6b63, 0x6b64, 0x6b65, 0x6b66, 0x6b67,
+ 0x6b68, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f,
+ 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77,
+ 0x6b78, 0x6b79, 0x6b7a, 0x6b7b, 0x6b7c, 0x6b7d, 0x6b7e, 0x6b7f,
+ 0x6b80, 0x6b81, 0x6b82, 0x6b83, 0x6b84, 0x6b85, 0x6b86, 0x6b87, /* 0x6b80 */
+ 0x6b88, 0x6b89, 0x6b8a, 0x6b8b, 0x6b8c, 0x6b8d, 0x6b8e, 0x6b8f,
+ 0x6b90, 0x6b91, 0x6b92, 0x6b93, 0x6b94, 0x6b95, 0x6b96, 0x6b97,
+ 0x6b98, 0x6b99, 0x6b9a, 0x6b9b, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f,
+ 0x6ba0, 0x6ba1, 0x6ba2, 0x6ba3, 0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7,
+ 0x6ba8, 0x6ba9, 0x6baa, 0x6bab, 0x6bac, 0x6bad, 0x6bae, 0x6baf,
+ 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb3, 0x6bb4, 0x6bb5, 0x6bb6, 0x6bb7,
+ 0x6bb8, 0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bbf,
+ 0x6bc0, 0x6bc1, 0x6bc2, 0x6bc3, 0x6bc4, 0x6bc5, 0x6bc6, 0x6bc7, /* 0x6bc0 */
+ 0x6bc8, 0x6bc9, 0x6bca, 0x6bcb, 0x6bcc, 0x6bcd, 0x6bce, 0x6bcf,
+ 0x6bd0, 0x6bd1, 0x6bd2, 0x6bd3, 0x6bd4, 0x6bd5, 0x6bd6, 0x6bd7,
+ 0x6bd8, 0x6bd9, 0x6bda, 0x6bdb, 0x6bdc, 0x6bdd, 0x6bde, 0x6bdf,
+ 0x6be0, 0x6be1, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7,
+ 0x6be8, 0x6be9, 0x6bea, 0x6beb, 0x6bec, 0x6bed, 0x6bee, 0x6bef,
+ 0x6bf0, 0x6bf1, 0x6bf2, 0x6bf3, 0x6bf4, 0x6bf5, 0x6bf6, 0x6bf7,
+ 0x6bf8, 0x6bf9, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfd, 0x6bfe, 0x6bff,
+ 0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c05, 0x6c06, 0x6c07, /* 0x6c00 */
+ 0x6c08, 0x6c09, 0x6c0a, 0x6c0b, 0x6c0c, 0x6c0d, 0x6c0e, 0x6c0f,
+ 0x6c10, 0x6c11, 0x6c12, 0x6c13, 0x6c14, 0x6c15, 0x6c16, 0x6c17,
+ 0x6c18, 0x6c19, 0x6c1a, 0x6c1b, 0x6c1c, 0x6c1d, 0x6c1e, 0x6c1f,
+ 0x6c20, 0x6c21, 0x6c22, 0x6c23, 0x6c24, 0x6c25, 0x6c26, 0x6c27,
+ 0x6c28, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c2e, 0x6c2f,
+ 0x6c30, 0x6c31, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x6c36, 0x6c37,
+ 0x6c38, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3d, 0x6c3e, 0x6c3f,
+ 0x6c40, 0x6c41, 0x6c42, 0x6c43, 0x6c44, 0x6c45, 0x6c46, 0x6c47, /* 0x6c40 */
+ 0x6c48, 0x6c49, 0x6c4a, 0x6c4b, 0x6c4c, 0x6c4d, 0x6c4e, 0x6c4f,
+ 0x6c50, 0x6c51, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c56, 0x6c57,
+ 0x6c58, 0x6c59, 0x6c5a, 0x6c5b, 0x6c5c, 0x6c5d, 0x6c5e, 0x6c5f,
+ 0x6c60, 0x6c61, 0x6c62, 0x6c63, 0x6c64, 0x6c65, 0x6c66, 0x6c67,
+ 0x6c68, 0x6c69, 0x6c6a, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f,
+ 0x6c70, 0x6c71, 0x6c72, 0x6c73, 0x6c74, 0x6c75, 0x6c76, 0x6c77,
+ 0x6c78, 0x6c79, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7d, 0x6c7e, 0x6c7f,
+ 0x6c80, 0x6c81, 0x6c82, 0x6c83, 0x6c84, 0x6c85, 0x6c86, 0x6c87, /* 0x6c80 */
+ 0x6c88, 0x6c89, 0x6c8a, 0x6c8b, 0x6c8c, 0x6c8d, 0x6c8e, 0x6c8f,
+ 0x6c90, 0x6c91, 0x6c92, 0x6c93, 0x6c94, 0x6c95, 0x6c96, 0x6c97,
+ 0x6c98, 0x6c99, 0x6c9a, 0x6c9b, 0x6c9c, 0x6c9d, 0x6c9e, 0x6c9f,
+ 0x6ca0, 0x6ca1, 0x6ca2, 0x6ca3, 0x6ca4, 0x6ca5, 0x6ca6, 0x6ca7,
+ 0x6ca8, 0x6ca9, 0x6caa, 0x6cab, 0x6cac, 0x6cad, 0x6cae, 0x6caf,
+ 0x6cb0, 0x6cb1, 0x6cb2, 0x6cb3, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7,
+ 0x6cb8, 0x6cb9, 0x6cba, 0x6cbb, 0x6cbc, 0x6cbd, 0x6cbe, 0x6cbf,
+ 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc4, 0x6cc5, 0x6cc6, 0x6cc7, /* 0x6cc0 */
+ 0x6cc8, 0x6cc9, 0x6cca, 0x6ccb, 0x6ccc, 0x6ccd, 0x6cce, 0x6ccf,
+ 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd3, 0x6cd4, 0x6cd5, 0x6cd6, 0x6cd7,
+ 0x6cd8, 0x6cd9, 0x6cda, 0x6cdb, 0x6cdc, 0x6cdd, 0x6cde, 0x6cdf,
+ 0x6ce0, 0x6ce1, 0x6ce2, 0x6ce3, 0x6ce4, 0x6ce5, 0x6ce6, 0x6ce7,
+ 0x6ce8, 0x6ce9, 0x6cea, 0x6ceb, 0x6cec, 0x6ced, 0x6cee, 0x6cef,
+ 0x6cf0, 0x6cf1, 0x6cf2, 0x6cf3, 0x6cf4, 0x6cf5, 0x6cf6, 0x6cf7,
+ 0x6cf8, 0x6cf9, 0x6cfa, 0x6cfb, 0x6cfc, 0x6cfd, 0x6cfe, 0x6cff,
+ 0x6d00, 0x6d01, 0x6d02, 0x6d03, 0x6d04, 0x6d05, 0x6d06, 0x6d07, /* 0x6d00 */
+ 0x6d08, 0x6d09, 0x6d0a, 0x6d0b, 0x6d0c, 0x6d0d, 0x6d0e, 0x6d0f,
+ 0x6d10, 0x6d11, 0x6d12, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d17,
+ 0x6d18, 0x6d19, 0x6d1a, 0x6d1b, 0x6d1c, 0x6d1d, 0x6d1e, 0x6d1f,
+ 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d25, 0x6d26, 0x6d27,
+ 0x6d28, 0x6d29, 0x6d2a, 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f,
+ 0x6d30, 0x6d31, 0x6d32, 0x6d33, 0x6d34, 0x6d35, 0x6d36, 0x6d37,
+ 0x6d38, 0x6d39, 0x6d3a, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e, 0x6d3f,
+ 0x6d40, 0x6d41, 0x6d42, 0x6d43, 0x6d44, 0x6d45, 0x6d46, 0x6d47, /* 0x6d40 */
+ 0x6d48, 0x6d49, 0x6d4a, 0x6d4b, 0x6d4c, 0x6d4d, 0x6d4e, 0x6d4f,
+ 0x6d50, 0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6d56, 0x6d57,
+ 0x6d58, 0x6d59, 0x6d5a, 0x6d5b, 0x6d5c, 0x6d5d, 0x6d5e, 0x6d5f,
+ 0x6d60, 0x6d61, 0x6d62, 0x6d63, 0x6d64, 0x6d65, 0x6d66, 0x6d67,
+ 0x6d68, 0x6d69, 0x6d6a, 0x6d6b, 0x6d6c, 0x6d6d, 0x6d6e, 0x6d6f,
+ 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d74, 0x6d75, 0x6d76, 0x6d77,
+ 0x6d78, 0x6d79, 0x6d7a, 0x6d7b, 0x6d7c, 0x6d7d, 0x6d7e, 0x6d7f,
+ 0x6d80, 0x6d81, 0x6d82, 0x6d83, 0x6d84, 0x6d85, 0x6d86, 0x6d87, /* 0x6d80 */
+ 0x6d88, 0x6d89, 0x6d8a, 0x6d8b, 0x6d8c, 0x6d8d, 0x6d8e, 0x6d8f,
+ 0x6d90, 0x6d91, 0x6d92, 0x6d93, 0x6d94, 0x6d95, 0x6d96, 0x6d97,
+ 0x6d98, 0x6d99, 0x6d9a, 0x6d9b, 0x6d9c, 0x6d9d, 0x6d9e, 0x6d9f,
+ 0x6da0, 0x6da1, 0x6da2, 0x6da3, 0x6da4, 0x6da5, 0x6da6, 0x6da7,
+ 0x6da8, 0x6da9, 0x6daa, 0x6dab, 0x6dac, 0x6dad, 0x6dae, 0x6daf,
+ 0x6db0, 0x6db1, 0x6db2, 0x6db3, 0x6db4, 0x6db5, 0x6db6, 0x6db7,
+ 0x6db8, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, 0x6dbe, 0x6dbf,
+ 0x6dc0, 0x6dc1, 0x6dc2, 0x6dc3, 0x6dc4, 0x6dc5, 0x6dc6, 0x6dc7, /* 0x6dc0 */
+ 0x6dc8, 0x6dc9, 0x6dca, 0x6dcb, 0x6dcc, 0x6dcd, 0x6dce, 0x6dcf,
+ 0x6dd0, 0x6dd1, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5, 0x6dd6, 0x6dd7,
+ 0x6dd8, 0x6dd9, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddd, 0x6dde, 0x6ddf,
+ 0x6de0, 0x6de1, 0x6de2, 0x6de3, 0x6de4, 0x6de5, 0x6de6, 0x6de7,
+ 0x6de8, 0x6de9, 0x6dea, 0x6deb, 0x6dec, 0x6ded, 0x6dee, 0x6def,
+ 0x6df0, 0x6df1, 0x6df2, 0x6df3, 0x6df4, 0x6df5, 0x6df6, 0x6df7,
+ 0x6df8, 0x6df9, 0x6dfa, 0x6dfb, 0x6dfc, 0x6dfd, 0x6dfe, 0x6dff,
+ 0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e05, 0x6e06, 0x6e07, /* 0x6e00 */
+ 0x6e08, 0x6e09, 0x6e0a, 0x6e0b, 0x6e0c, 0x6e0d, 0x6e0e, 0x6e0f,
+ 0x6e10, 0x6e11, 0x6e12, 0x6e13, 0x6e14, 0x6e15, 0x6e16, 0x6e17,
+ 0x6e18, 0x6e19, 0x6e1a, 0x6e1b, 0x6e1c, 0x6e1d, 0x6e1e, 0x6e1f,
+ 0x6e20, 0x6e21, 0x6e22, 0x6e23, 0x6e24, 0x6e25, 0x6e26, 0x6e27,
+ 0x6e28, 0x6e29, 0x6e2a, 0x6e2b, 0x6e2c, 0x6e2d, 0x6e2e, 0x6e2f,
+ 0x6e30, 0x6e31, 0x6e32, 0x6e33, 0x6e34, 0x6e35, 0x6e36, 0x6e37,
+ 0x6e38, 0x6e39, 0x6e3a, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f,
+ 0x6e40, 0x6e41, 0x6e42, 0x6e43, 0x6e44, 0x6e45, 0x6e46, 0x6e47, /* 0x6e40 */
+ 0x6e48, 0x6e49, 0x6e4a, 0x6e4b, 0x6e4c, 0x6e4d, 0x6e4e, 0x6e4f,
+ 0x6e50, 0x6e51, 0x6e52, 0x6e53, 0x6e54, 0x6e55, 0x6e56, 0x6e57,
+ 0x6e58, 0x6e59, 0x6e5a, 0x6e5b, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e5f,
+ 0x6e60, 0x6e61, 0x6e62, 0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67,
+ 0x6e68, 0x6e69, 0x6e6a, 0x6e6b, 0x6e6c, 0x6e6d, 0x6e6e, 0x6e6f,
+ 0x6e70, 0x6e71, 0x6e72, 0x6e73, 0x6e74, 0x6e75, 0x6e76, 0x6e77,
+ 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6e7e, 0x6e7f,
+ 0x6e80, 0x6e81, 0x6e82, 0x6e83, 0x6e84, 0x6e85, 0x6e86, 0x6e87, /* 0x6e80 */
+ 0x6e88, 0x6e89, 0x6e8a, 0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e8f,
+ 0x6e90, 0x6e91, 0x6e92, 0x6e93, 0x6e94, 0x6e95, 0x6e96, 0x6e97,
+ 0x6e98, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9c, 0x6e9d, 0x6e9e, 0x6e9f,
+ 0x6ea0, 0x6ea1, 0x6ea2, 0x6ea3, 0x6ea4, 0x6ea5, 0x6ea6, 0x6ea7,
+ 0x6ea8, 0x6ea9, 0x6eaa, 0x6eab, 0x6eac, 0x6ead, 0x6eae, 0x6eaf,
+ 0x6eb0, 0x6eb1, 0x6eb2, 0x6eb3, 0x6eb4, 0x6eb5, 0x6eb6, 0x6eb7,
+ 0x6eb8, 0x6eb9, 0x6eba, 0x6ebb, 0x6ebc, 0x6ebd, 0x6ebe, 0x6ebf,
+ 0x6ec0, 0x6ec1, 0x6ec2, 0x6ec3, 0x6ec4, 0x6ec5, 0x6ec6, 0x6ec7, /* 0x6ec0 */
+ 0x6ec8, 0x6ec9, 0x6eca, 0x6ecb, 0x6ecc, 0x6ecd, 0x6ece, 0x6ecf,
+ 0x6ed0, 0x6ed1, 0x6ed2, 0x6ed3, 0x6ed4, 0x6ed5, 0x6ed6, 0x6ed7,
+ 0x6ed8, 0x6ed9, 0x6eda, 0x6edb, 0x6edc, 0x6edd, 0x6ede, 0x6edf,
+ 0x6ee0, 0x6ee1, 0x6ee2, 0x6ee3, 0x6ee4, 0x6ee5, 0x6ee6, 0x6ee7,
+ 0x6ee8, 0x6ee9, 0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef,
+ 0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef4, 0x6ef5, 0x6ef6, 0x6ef7,
+ 0x6ef8, 0x6ef9, 0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff,
+ 0x6f00, 0x6f01, 0x6f02, 0x6f03, 0x6f04, 0x6f05, 0x6f06, 0x6f07, /* 0x6f00 */
+ 0x6f08, 0x6f09, 0x6f0a, 0x6f0b, 0x6f0c, 0x6f0d, 0x6f0e, 0x6f0f,
+ 0x6f10, 0x6f11, 0x6f12, 0x6f13, 0x6f14, 0x6f15, 0x6f16, 0x6f17,
+ 0x6f18, 0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f,
+ 0x6f20, 0x6f21, 0x6f22, 0x6f23, 0x6f24, 0x6f25, 0x6f26, 0x6f27,
+ 0x6f28, 0x6f29, 0x6f2a, 0x6f2b, 0x6f2c, 0x6f2d, 0x6f2e, 0x6f2f,
+ 0x6f30, 0x6f31, 0x6f32, 0x6f33, 0x6f34, 0x6f35, 0x6f36, 0x6f37,
+ 0x6f38, 0x6f39, 0x6f3a, 0x6f3b, 0x6f3c, 0x6f3d, 0x6f3e, 0x6f3f,
+ 0x6f40, 0x6f41, 0x6f42, 0x6f43, 0x6f44, 0x6f45, 0x6f46, 0x6f47, /* 0x6f40 */
+ 0x6f48, 0x6f49, 0x6f4a, 0x6f4b, 0x6f4c, 0x6f4d, 0x6f4e, 0x6f4f,
+ 0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, 0x6f57,
+ 0x6f58, 0x6f59, 0x6f5a, 0x6f5b, 0x6f5c, 0x6f5d, 0x6f5e, 0x6f5f,
+ 0x6f60, 0x6f61, 0x6f62, 0x6f63, 0x6f64, 0x6f65, 0x6f66, 0x6f67,
+ 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x6f6d, 0x6f6e, 0x6f6f,
+ 0x6f70, 0x6f71, 0x6f72, 0x6f73, 0x6f74, 0x6f75, 0x6f76, 0x6f77,
+ 0x6f78, 0x6f79, 0x6f7a, 0x6f7b, 0x6f7c, 0x6f7d, 0x6f7e, 0x6f7f,
+ 0x6f80, 0x6f81, 0x6f82, 0x6f83, 0x6f84, 0x6f85, 0x6f86, 0x6f87, /* 0x6f80 */
+ 0x6f88, 0x6f89, 0x6f8a, 0x6f8b, 0x6f8c, 0x6f8d, 0x6f8e, 0x6f8f,
+ 0x6f90, 0x6f91, 0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97,
+ 0x6f98, 0x6f99, 0x6f9a, 0x6f9b, 0x6f9c, 0x6f9d, 0x6f9e, 0x6f9f,
+ 0x6fa0, 0x6fa1, 0x6fa2, 0x6fa3, 0x6fa4, 0x6fa5, 0x6fa6, 0x6fa7,
+ 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, 0x6fac, 0x6fad, 0x6fae, 0x6faf,
+ 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb3, 0x6fb4, 0x6fb5, 0x6fb6, 0x6fb7,
+ 0x6fb8, 0x6fb9, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, 0x6fbf,
+ 0x6fc0, 0x6fc1, 0x6fc2, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, /* 0x6fc0 */
+ 0x6fc8, 0x6fc9, 0x6fca, 0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf,
+ 0x6fd0, 0x6fd1, 0x6fd2, 0x6fd3, 0x6fd4, 0x6fd5, 0x6fd6, 0x6fd7,
+ 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, 0x6fdc, 0x6fdd, 0x6fde, 0x6fdf,
+ 0x6fe0, 0x6fe1, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5, 0x6fe6, 0x6fe7,
+ 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed, 0x6fee, 0x6fef,
+ 0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7,
+ 0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff,
+ 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, /* 0x7000 */
+ 0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f,
+ 0x7010, 0x7011, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017,
+ 0x7018, 0x7019, 0x701a, 0x701b, 0x701c, 0x701d, 0x701e, 0x701f,
+ 0x7020, 0x7021, 0x7022, 0x7023, 0x7024, 0x7025, 0x7026, 0x7027,
+ 0x7028, 0x7029, 0x702a, 0x702b, 0x702c, 0x702d, 0x702e, 0x702f,
+ 0x7030, 0x7031, 0x7032, 0x7033, 0x7034, 0x7035, 0x7036, 0x7037,
+ 0x7038, 0x7039, 0x703a, 0x703b, 0x703c, 0x703d, 0x703e, 0x703f,
+ 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, 0x7045, 0x7046, 0x7047, /* 0x7040 */
+ 0x7048, 0x7049, 0x704a, 0x704b, 0x704c, 0x704d, 0x704e, 0x704f,
+ 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7057,
+ 0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705e, 0x705f,
+ 0x7060, 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067,
+ 0x7068, 0x7069, 0x706a, 0x706b, 0x706c, 0x706d, 0x706e, 0x706f,
+ 0x7070, 0x7071, 0x7072, 0x7073, 0x7074, 0x7075, 0x7076, 0x7077,
+ 0x7078, 0x7079, 0x707a, 0x707b, 0x707c, 0x707d, 0x707e, 0x707f,
+ 0x7080, 0x7081, 0x7082, 0x7083, 0x7084, 0x7085, 0x7086, 0x7087, /* 0x7080 */
+ 0x7088, 0x7089, 0x708a, 0x708b, 0x708c, 0x708d, 0x708e, 0x708f,
+ 0x7090, 0x7091, 0x7092, 0x7093, 0x7094, 0x7095, 0x7096, 0x7097,
+ 0x7098, 0x7099, 0x709a, 0x709b, 0x709c, 0x709d, 0x709e, 0x709f,
+ 0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, 0x70a7,
+ 0x70a8, 0x70a9, 0x70aa, 0x70ab, 0x70ac, 0x70ad, 0x70ae, 0x70af,
+ 0x70b0, 0x70b1, 0x70b2, 0x70b3, 0x70b4, 0x70b5, 0x70b6, 0x70b7,
+ 0x70b8, 0x70b9, 0x70ba, 0x70bb, 0x70bc, 0x70bd, 0x70be, 0x70bf,
+ 0x70c0, 0x70c1, 0x70c2, 0x70c3, 0x70c4, 0x70c5, 0x70c6, 0x70c7, /* 0x70c0 */
+ 0x70c8, 0x70c9, 0x70ca, 0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf,
+ 0x70d0, 0x70d1, 0x70d2, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7,
+ 0x70d8, 0x70d9, 0x70da, 0x70db, 0x70dc, 0x70dd, 0x70de, 0x70df,
+ 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e4, 0x70e5, 0x70e6, 0x70e7,
+ 0x70e8, 0x70e9, 0x70ea, 0x70eb, 0x70ec, 0x70ed, 0x70ee, 0x70ef,
+ 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5, 0x70f6, 0x70f7,
+ 0x70f8, 0x70f9, 0x70fa, 0x70fb, 0x70fc, 0x70fd, 0x70fe, 0x70ff,
+ 0x7100, 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, /* 0x7100 */
+ 0x7108, 0x7109, 0x710a, 0x710b, 0x710c, 0x710d, 0x710e, 0x710f,
+ 0x7110, 0x7111, 0x7112, 0x7113, 0x7114, 0x7115, 0x7116, 0x7117,
+ 0x7118, 0x7119, 0x711a, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f,
+ 0x7120, 0x7121, 0x7122, 0x7123, 0x7124, 0x7125, 0x7126, 0x7127,
+ 0x7128, 0x7129, 0x712a, 0x712b, 0x712c, 0x712d, 0x712e, 0x712f,
+ 0x7130, 0x7131, 0x7132, 0x7133, 0x7134, 0x7135, 0x7136, 0x7137,
+ 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, 0x713e, 0x713f,
+ 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7145, 0x7146, 0x7147, /* 0x7140 */
+ 0x7148, 0x7149, 0x714a, 0x714b, 0x714c, 0x714d, 0x714e, 0x714f,
+ 0x7150, 0x7151, 0x7152, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157,
+ 0x7158, 0x7159, 0x715a, 0x715b, 0x715c, 0x715d, 0x715e, 0x715f,
+ 0x7160, 0x7161, 0x7162, 0x7163, 0x7164, 0x7165, 0x7166, 0x7167,
+ 0x7168, 0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716e, 0x716f,
+ 0x7170, 0x7171, 0x7172, 0x7173, 0x7174, 0x7175, 0x7176, 0x7177,
+ 0x7178, 0x7179, 0x717a, 0x717b, 0x717c, 0x717d, 0x717e, 0x717f,
+ 0x7180, 0x7181, 0x7182, 0x7183, 0x7184, 0x7185, 0x7186, 0x7187, /* 0x7180 */
+ 0x7188, 0x7189, 0x718a, 0x718b, 0x718c, 0x718d, 0x718e, 0x718f,
+ 0x7190, 0x7191, 0x7192, 0x7193, 0x7194, 0x7195, 0x7196, 0x7197,
+ 0x7198, 0x7199, 0x719a, 0x719b, 0x719c, 0x719d, 0x719e, 0x719f,
+ 0x71a0, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, 0x71a6, 0x71a7,
+ 0x71a8, 0x71a9, 0x71aa, 0x71ab, 0x71ac, 0x71ad, 0x71ae, 0x71af,
+ 0x71b0, 0x71b1, 0x71b2, 0x71b3, 0x71b4, 0x71b5, 0x71b6, 0x71b7,
+ 0x71b8, 0x71b9, 0x71ba, 0x71bb, 0x71bc, 0x71bd, 0x71be, 0x71bf,
+ 0x71c0, 0x71c1, 0x71c2, 0x71c3, 0x71c4, 0x71c5, 0x71c6, 0x71c7, /* 0x71c0 */
+ 0x71c8, 0x71c9, 0x71ca, 0x71cb, 0x71cc, 0x71cd, 0x71ce, 0x71cf,
+ 0x71d0, 0x71d1, 0x71d2, 0x71d3, 0x71d4, 0x71d5, 0x71d6, 0x71d7,
+ 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd, 0x71de, 0x71df,
+ 0x71e0, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e5, 0x71e6, 0x71e7,
+ 0x71e8, 0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ee, 0x71ef,
+ 0x71f0, 0x71f1, 0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7,
+ 0x71f8, 0x71f9, 0x71fa, 0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff,
+ 0x7200, 0x7201, 0x7202, 0x7203, 0x7204, 0x7205, 0x7206, 0x7207, /* 0x7200 */
+ 0x7208, 0x7209, 0x720a, 0x720b, 0x720c, 0x720d, 0x720e, 0x720f,
+ 0x7210, 0x7211, 0x7212, 0x7213, 0x7214, 0x7215, 0x7216, 0x7217,
+ 0x7218, 0x7219, 0x721a, 0x721b, 0x721c, 0x721d, 0x721e, 0x721f,
+ 0x7220, 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, 0x7226, 0x7227,
+ 0x7228, 0x7229, 0x722a, 0x722b, 0x722c, 0x722d, 0x722e, 0x722f,
+ 0x7230, 0x7231, 0x7232, 0x7233, 0x7234, 0x7235, 0x7236, 0x7237,
+ 0x7238, 0x7239, 0x723a, 0x723b, 0x723c, 0x723d, 0x723e, 0x723f,
+ 0x7240, 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7247, /* 0x7240 */
+ 0x7248, 0x7249, 0x724a, 0x724b, 0x724c, 0x724d, 0x724e, 0x724f,
+ 0x7250, 0x7251, 0x7252, 0x7253, 0x7254, 0x7255, 0x7256, 0x7257,
+ 0x7258, 0x7259, 0x725a, 0x725b, 0x725c, 0x725d, 0x725e, 0x725f,
+ 0x7260, 0x7261, 0x7262, 0x7263, 0x7264, 0x7265, 0x7266, 0x7267,
+ 0x7268, 0x7269, 0x726a, 0x726b, 0x726c, 0x726d, 0x726e, 0x726f,
+ 0x7270, 0x7271, 0x7272, 0x7273, 0x7274, 0x7275, 0x7276, 0x7277,
+ 0x7278, 0x7279, 0x727a, 0x727b, 0x727c, 0x727d, 0x727e, 0x727f,
+ 0x7280, 0x7281, 0x7282, 0x7283, 0x7284, 0x7285, 0x7286, 0x7287, /* 0x7280 */
+ 0x7288, 0x7289, 0x728a, 0x728b, 0x728c, 0x728d, 0x728e, 0x728f,
+ 0x7290, 0x7291, 0x7292, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297,
+ 0x7298, 0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x729f,
+ 0x72a0, 0x72a1, 0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7,
+ 0x72a8, 0x72a9, 0x72aa, 0x72ab, 0x72ac, 0x72ad, 0x72ae, 0x72af,
+ 0x72b0, 0x72b1, 0x72b2, 0x72b3, 0x72b4, 0x72b5, 0x72b6, 0x72b7,
+ 0x72b8, 0x72b9, 0x72ba, 0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf,
+ 0x72c0, 0x72c1, 0x72c2, 0x72c3, 0x72c4, 0x72c5, 0x72c6, 0x72c7, /* 0x72c0 */
+ 0x72c8, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cd, 0x72ce, 0x72cf,
+ 0x72d0, 0x72d1, 0x72d2, 0x72d3, 0x72d4, 0x72d5, 0x72d6, 0x72d7,
+ 0x72d8, 0x72d9, 0x72da, 0x72db, 0x72dc, 0x72dd, 0x72de, 0x72df,
+ 0x72e0, 0x72e1, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6, 0x72e7,
+ 0x72e8, 0x72e9, 0x72ea, 0x72eb, 0x72ec, 0x72ed, 0x72ee, 0x72ef,
+ 0x72f0, 0x72f1, 0x72f2, 0x72f3, 0x72f4, 0x72f5, 0x72f6, 0x72f7,
+ 0x72f8, 0x72f9, 0x72fa, 0x72fb, 0x72fc, 0x72fd, 0x72fe, 0x72ff,
+ 0x7300, 0x7301, 0x7302, 0x7303, 0x7304, 0x7305, 0x7306, 0x7307, /* 0x7300 */
+ 0x7308, 0x7309, 0x730a, 0x730b, 0x730c, 0x730d, 0x730e, 0x730f,
+ 0x7310, 0x7311, 0x7312, 0x7313, 0x7314, 0x7315, 0x7316, 0x7317,
+ 0x7318, 0x7319, 0x731a, 0x731b, 0x731c, 0x731d, 0x731e, 0x731f,
+ 0x7320, 0x7321, 0x7322, 0x7323, 0x7324, 0x7325, 0x7326, 0x7327,
+ 0x7328, 0x7329, 0x732a, 0x732b, 0x732c, 0x732d, 0x732e, 0x732f,
+ 0x7330, 0x7331, 0x7332, 0x7333, 0x7334, 0x7335, 0x7336, 0x7337,
+ 0x7338, 0x7339, 0x733a, 0x733b, 0x733c, 0x733d, 0x733e, 0x733f,
+ 0x7340, 0x7341, 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, /* 0x7340 */
+ 0x7348, 0x7349, 0x734a, 0x734b, 0x734c, 0x734d, 0x734e, 0x734f,
+ 0x7350, 0x7351, 0x7352, 0x7353, 0x7354, 0x7355, 0x7356, 0x7357,
+ 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, 0x735d, 0x735e, 0x735f,
+ 0x7360, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366, 0x7367,
+ 0x7368, 0x7369, 0x736a, 0x736b, 0x736c, 0x736d, 0x736e, 0x736f,
+ 0x7370, 0x7371, 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377,
+ 0x7378, 0x7379, 0x737a, 0x737b, 0x737c, 0x737d, 0x737e, 0x737f,
+ 0x7380, 0x7381, 0x7382, 0x7383, 0x7384, 0x7385, 0x7386, 0x7387, /* 0x7380 */
+ 0x7388, 0x7389, 0x738a, 0x738b, 0x738c, 0x738d, 0x738e, 0x738f,
+ 0x7390, 0x7391, 0x7392, 0x7393, 0x7394, 0x7395, 0x7396, 0x7397,
+ 0x7398, 0x7399, 0x739a, 0x739b, 0x739c, 0x739d, 0x739e, 0x739f,
+ 0x73a0, 0x73a1, 0x73a2, 0x73a3, 0x73a4, 0x73a5, 0x73a6, 0x73a7,
+ 0x73a8, 0x73a9, 0x73aa, 0x73ab, 0x73ac, 0x73ad, 0x73ae, 0x73af,
+ 0x73b0, 0x73b1, 0x73b2, 0x73b3, 0x73b4, 0x73b5, 0x73b6, 0x73b7,
+ 0x73b8, 0x73b9, 0x73ba, 0x73bb, 0x73bc, 0x73bd, 0x73be, 0x73bf,
+ 0x73c0, 0x73c1, 0x73c2, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, /* 0x73c0 */
+ 0x73c8, 0x73c9, 0x73ca, 0x73cb, 0x73cc, 0x73cd, 0x73ce, 0x73cf,
+ 0x73d0, 0x73d1, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, 0x73d7,
+ 0x73d8, 0x73d9, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73de, 0x73df,
+ 0x73e0, 0x73e1, 0x73e2, 0x73e3, 0x73e4, 0x73e5, 0x73e6, 0x73e7,
+ 0x73e8, 0x73e9, 0x73ea, 0x73eb, 0x73ec, 0x73ed, 0x73ee, 0x73ef,
+ 0x73f0, 0x73f1, 0x73f2, 0x73f3, 0x73f4, 0x73f5, 0x73f6, 0x73f7,
+ 0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff,
+ 0x7400, 0x7401, 0x7402, 0x7403, 0x7404, 0x7405, 0x7406, 0x7407, /* 0x7400 */
+ 0x7408, 0x7409, 0x740a, 0x740b, 0x740c, 0x740d, 0x740e, 0x740f,
+ 0x7410, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, 0x7417,
+ 0x7418, 0x7419, 0x741a, 0x741b, 0x741c, 0x741d, 0x741e, 0x741f,
+ 0x7420, 0x7421, 0x7422, 0x7423, 0x7424, 0x7425, 0x7426, 0x7427,
+ 0x7428, 0x7429, 0x742a, 0x742b, 0x742c, 0x742d, 0x742e, 0x742f,
+ 0x7430, 0x7431, 0x7432, 0x7433, 0x7434, 0x7435, 0x7436, 0x7437,
+ 0x7438, 0x7439, 0x743a, 0x743b, 0x743c, 0x743d, 0x743e, 0x743f,
+ 0x7440, 0x7441, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, 0x7447, /* 0x7440 */
+ 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x744e, 0x744f,
+ 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7455, 0x7456, 0x7457,
+ 0x7458, 0x7459, 0x745a, 0x745b, 0x745c, 0x745d, 0x745e, 0x745f,
+ 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, 0x7466, 0x7467,
+ 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746d, 0x746e, 0x746f,
+ 0x7470, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7476, 0x7477,
+ 0x7478, 0x7479, 0x747a, 0x747b, 0x747c, 0x747d, 0x747e, 0x747f,
+ 0x7480, 0x7481, 0x7482, 0x7483, 0x7484, 0x7485, 0x7486, 0x7487, /* 0x7480 */
+ 0x7488, 0x7489, 0x748a, 0x748b, 0x748c, 0x748d, 0x748e, 0x748f,
+ 0x7490, 0x7491, 0x7492, 0x7493, 0x7494, 0x7495, 0x7496, 0x7497,
+ 0x7498, 0x7499, 0x749a, 0x749b, 0x749c, 0x749d, 0x749e, 0x749f,
+ 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4, 0x74a5, 0x74a6, 0x74a7,
+ 0x74a8, 0x74a9, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af,
+ 0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7,
+ 0x74b8, 0x74b9, 0x74ba, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf,
+ 0x74c0, 0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, /* 0x74c0 */
+ 0x74c8, 0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf,
+ 0x74d0, 0x74d1, 0x74d2, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7,
+ 0x74d8, 0x74d9, 0x74da, 0x74db, 0x74dc, 0x74dd, 0x74de, 0x74df,
+ 0x74e0, 0x74e1, 0x74e2, 0x74e3, 0x74e4, 0x74e5, 0x74e6, 0x74e7,
+ 0x74e8, 0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74ee, 0x74ef,
+ 0x74f0, 0x74f1, 0x74f2, 0x74f3, 0x74f4, 0x74f5, 0x74f6, 0x74f7,
+ 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd, 0x74fe, 0x74ff,
+ 0x7500, 0x7501, 0x7502, 0x7503, 0x7504, 0x7505, 0x7506, 0x7507, /* 0x7500 */
+ 0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750d, 0x750e, 0x750f,
+ 0x7510, 0x7511, 0x7512, 0x7513, 0x7514, 0x7515, 0x7516, 0x7517,
+ 0x7518, 0x7519, 0x751a, 0x751b, 0x751c, 0x751d, 0x751e, 0x751f,
+ 0x7520, 0x7521, 0x7522, 0x7523, 0x7524, 0x7525, 0x7526, 0x7527,
+ 0x7528, 0x7529, 0x752a, 0x752b, 0x752c, 0x752d, 0x752e, 0x752f,
+ 0x7530, 0x7531, 0x7532, 0x7533, 0x7534, 0x7535, 0x7536, 0x7537,
+ 0x7538, 0x7539, 0x753a, 0x753b, 0x753c, 0x753d, 0x753e, 0x753f,
+ 0x7540, 0x7541, 0x7542, 0x7543, 0x7544, 0x7545, 0x7546, 0x7547, /* 0x7540 */
+ 0x7548, 0x7549, 0x754a, 0x754b, 0x754c, 0x754d, 0x754e, 0x754f,
+ 0x7550, 0x7551, 0x7552, 0x7553, 0x7554, 0x7555, 0x7556, 0x7557,
+ 0x7558, 0x7559, 0x755a, 0x755b, 0x755c, 0x755d, 0x755e, 0x755f,
+ 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, 0x7565, 0x7566, 0x7567,
+ 0x7568, 0x7569, 0x756a, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f,
+ 0x7570, 0x7571, 0x7572, 0x7573, 0x7574, 0x7575, 0x7576, 0x7577,
+ 0x7578, 0x7579, 0x757a, 0x757b, 0x757c, 0x757d, 0x757e, 0x757f,
+ 0x7580, 0x7581, 0x7582, 0x7583, 0x7584, 0x7585, 0x7586, 0x7587, /* 0x7580 */
+ 0x7588, 0x7589, 0x758a, 0x758b, 0x758c, 0x758d, 0x758e, 0x758f,
+ 0x7590, 0x7591, 0x7592, 0x7593, 0x7594, 0x7595, 0x7596, 0x7597,
+ 0x7598, 0x7599, 0x759a, 0x759b, 0x759c, 0x759d, 0x759e, 0x759f,
+ 0x75a0, 0x75a1, 0x75a2, 0x75a3, 0x75a4, 0x75a5, 0x75a6, 0x75a7,
+ 0x75a8, 0x75a9, 0x75aa, 0x75ab, 0x75ac, 0x75ad, 0x75ae, 0x75af,
+ 0x75b0, 0x75b1, 0x75b2, 0x75b3, 0x75b4, 0x75b5, 0x75b6, 0x75b7,
+ 0x75b8, 0x75b9, 0x75ba, 0x75bb, 0x75bc, 0x75bd, 0x75be, 0x75bf,
+ 0x75c0, 0x75c1, 0x75c2, 0x75c3, 0x75c4, 0x75c5, 0x75c6, 0x75c7, /* 0x75c0 */
+ 0x75c8, 0x75c9, 0x75ca, 0x75cb, 0x75cc, 0x75cd, 0x75ce, 0x75cf,
+ 0x75d0, 0x75d1, 0x75d2, 0x75d3, 0x75d4, 0x75d5, 0x75d6, 0x75d7,
+ 0x75d8, 0x75d9, 0x75da, 0x75db, 0x75dc, 0x75dd, 0x75de, 0x75df,
+ 0x75e0, 0x75e1, 0x75e2, 0x75e3, 0x75e4, 0x75e5, 0x75e6, 0x75e7,
+ 0x75e8, 0x75e9, 0x75ea, 0x75eb, 0x75ec, 0x75ed, 0x75ee, 0x75ef,
+ 0x75f0, 0x75f1, 0x75f2, 0x75f3, 0x75f4, 0x75f5, 0x75f6, 0x75f7,
+ 0x75f8, 0x75f9, 0x75fa, 0x75fb, 0x75fc, 0x75fd, 0x75fe, 0x75ff,
+ 0x7600, 0x7601, 0x7602, 0x7603, 0x7604, 0x7605, 0x7606, 0x7607, /* 0x7600 */
+ 0x7608, 0x7609, 0x760a, 0x760b, 0x760c, 0x760d, 0x760e, 0x760f,
+ 0x7610, 0x7611, 0x7612, 0x7613, 0x7614, 0x7615, 0x7616, 0x7617,
+ 0x7618, 0x7619, 0x761a, 0x761b, 0x761c, 0x761d, 0x761e, 0x761f,
+ 0x7620, 0x7621, 0x7622, 0x7623, 0x7624, 0x7625, 0x7626, 0x7627,
+ 0x7628, 0x7629, 0x762a, 0x762b, 0x762c, 0x762d, 0x762e, 0x762f,
+ 0x7630, 0x7631, 0x7632, 0x7633, 0x7634, 0x7635, 0x7636, 0x7637,
+ 0x7638, 0x7639, 0x763a, 0x763b, 0x763c, 0x763d, 0x763e, 0x763f,
+ 0x7640, 0x7641, 0x7642, 0x7643, 0x7644, 0x7645, 0x7646, 0x7647, /* 0x7640 */
+ 0x7648, 0x7649, 0x764a, 0x764b, 0x764c, 0x764d, 0x764e, 0x764f,
+ 0x7650, 0x7651, 0x7652, 0x7653, 0x7654, 0x7655, 0x7656, 0x7657,
+ 0x7658, 0x7659, 0x765a, 0x765b, 0x765c, 0x765d, 0x765e, 0x765f,
+ 0x7660, 0x7661, 0x7662, 0x7663, 0x7664, 0x7665, 0x7666, 0x7667,
+ 0x7668, 0x7669, 0x766a, 0x766b, 0x766c, 0x766d, 0x766e, 0x766f,
+ 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, 0x7676, 0x7677,
+ 0x7678, 0x7679, 0x767a, 0x767b, 0x767c, 0x767d, 0x767e, 0x767f,
+ 0x7680, 0x7681, 0x7682, 0x7683, 0x7684, 0x7685, 0x7686, 0x7687, /* 0x7680 */
+ 0x7688, 0x7689, 0x768a, 0x768b, 0x768c, 0x768d, 0x768e, 0x768f,
+ 0x7690, 0x7691, 0x7692, 0x7693, 0x7694, 0x7695, 0x7696, 0x7697,
+ 0x7698, 0x7699, 0x769a, 0x769b, 0x769c, 0x769d, 0x769e, 0x769f,
+ 0x76a0, 0x76a1, 0x76a2, 0x76a3, 0x76a4, 0x76a5, 0x76a6, 0x76a7,
+ 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, 0x76ad, 0x76ae, 0x76af,
+ 0x76b0, 0x76b1, 0x76b2, 0x76b3, 0x76b4, 0x76b5, 0x76b6, 0x76b7,
+ 0x76b8, 0x76b9, 0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76bf,
+ 0x76c0, 0x76c1, 0x76c2, 0x76c3, 0x76c4, 0x76c5, 0x76c6, 0x76c7, /* 0x76c0 */
+ 0x76c8, 0x76c9, 0x76ca, 0x76cb, 0x76cc, 0x76cd, 0x76ce, 0x76cf,
+ 0x76d0, 0x76d1, 0x76d2, 0x76d3, 0x76d4, 0x76d5, 0x76d6, 0x76d7,
+ 0x76d8, 0x76d9, 0x76da, 0x76db, 0x76dc, 0x76dd, 0x76de, 0x76df,
+ 0x76e0, 0x76e1, 0x76e2, 0x76e3, 0x76e4, 0x76e5, 0x76e6, 0x76e7,
+ 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec, 0x76ed, 0x76ee, 0x76ef,
+ 0x76f0, 0x76f1, 0x76f2, 0x76f3, 0x76f4, 0x76f5, 0x76f6, 0x76f7,
+ 0x76f8, 0x76f9, 0x76fa, 0x76fb, 0x76fc, 0x76fd, 0x76fe, 0x76ff,
+ 0x7700, 0x7701, 0x7702, 0x7703, 0x7704, 0x7705, 0x7706, 0x7707, /* 0x7700 */
+ 0x7708, 0x7709, 0x770a, 0x770b, 0x770c, 0x770d, 0x770e, 0x770f,
+ 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, 0x7715, 0x7716, 0x7717,
+ 0x7718, 0x7719, 0x771a, 0x771b, 0x771c, 0x771d, 0x771e, 0x771f,
+ 0x7720, 0x7721, 0x7722, 0x7723, 0x7724, 0x7725, 0x7726, 0x7727,
+ 0x7728, 0x7729, 0x772a, 0x772b, 0x772c, 0x772d, 0x772e, 0x772f,
+ 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7735, 0x7736, 0x7737,
+ 0x7738, 0x7739, 0x773a, 0x773b, 0x773c, 0x773d, 0x773e, 0x773f,
+ 0x7740, 0x7741, 0x7742, 0x7743, 0x7744, 0x7745, 0x7746, 0x7747, /* 0x7740 */
+ 0x7748, 0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f,
+ 0x7750, 0x7751, 0x7752, 0x7753, 0x7754, 0x7755, 0x7756, 0x7757,
+ 0x7758, 0x7759, 0x775a, 0x775b, 0x775c, 0x775d, 0x775e, 0x775f,
+ 0x7760, 0x7761, 0x7762, 0x7763, 0x7764, 0x7765, 0x7766, 0x7767,
+ 0x7768, 0x7769, 0x776a, 0x776b, 0x776c, 0x776d, 0x776e, 0x776f,
+ 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, 0x7775, 0x7776, 0x7777,
+ 0x7778, 0x7779, 0x777a, 0x777b, 0x777c, 0x777d, 0x777e, 0x777f,
+ 0x7780, 0x7781, 0x7782, 0x7783, 0x7784, 0x7785, 0x7786, 0x7787, /* 0x7780 */
+ 0x7788, 0x7789, 0x778a, 0x778b, 0x778c, 0x778d, 0x778e, 0x778f,
+ 0x7790, 0x7791, 0x7792, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797,
+ 0x7798, 0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x779f,
+ 0x77a0, 0x77a1, 0x77a2, 0x77a3, 0x77a4, 0x77a5, 0x77a6, 0x77a7,
+ 0x77a8, 0x77a9, 0x77aa, 0x77ab, 0x77ac, 0x77ad, 0x77ae, 0x77af,
+ 0x77b0, 0x77b1, 0x77b2, 0x77b3, 0x77b4, 0x77b5, 0x77b6, 0x77b7,
+ 0x77b8, 0x77b9, 0x77ba, 0x77bb, 0x77bc, 0x77bd, 0x77be, 0x77bf,
+ 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, 0x77c6, 0x77c7, /* 0x77c0 */
+ 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77cd, 0x77ce, 0x77cf,
+ 0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, 0x77d7,
+ 0x77d8, 0x77d9, 0x77da, 0x77db, 0x77dc, 0x77dd, 0x77de, 0x77df,
+ 0x77e0, 0x77e1, 0x77e2, 0x77e3, 0x77e4, 0x77e5, 0x77e6, 0x77e7,
+ 0x77e8, 0x77e9, 0x77ea, 0x77eb, 0x77ec, 0x77ed, 0x77ee, 0x77ef,
+ 0x77f0, 0x77f1, 0x77f2, 0x77f3, 0x77f4, 0x77f5, 0x77f6, 0x77f7,
+ 0x77f8, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x77fd, 0x77fe, 0x77ff,
+ 0x7800, 0x7801, 0x7802, 0x7803, 0x7804, 0x7805, 0x7806, 0x7807, /* 0x7800 */
+ 0x7808, 0x7809, 0x780a, 0x780b, 0x780c, 0x780d, 0x780e, 0x780f,
+ 0x7810, 0x7811, 0x7812, 0x7813, 0x7814, 0x7815, 0x7816, 0x7817,
+ 0x7818, 0x7819, 0x781a, 0x781b, 0x781c, 0x781d, 0x781e, 0x781f,
+ 0x7820, 0x7821, 0x7822, 0x7823, 0x7824, 0x7825, 0x7826, 0x7827,
+ 0x7828, 0x7829, 0x782a, 0x782b, 0x782c, 0x782d, 0x782e, 0x782f,
+ 0x7830, 0x7831, 0x7832, 0x7833, 0x7834, 0x7835, 0x7836, 0x7837,
+ 0x7838, 0x7839, 0x783a, 0x783b, 0x783c, 0x783d, 0x783e, 0x783f,
+ 0x7840, 0x7841, 0x7842, 0x7843, 0x7844, 0x7845, 0x7846, 0x7847, /* 0x7840 */
+ 0x7848, 0x7849, 0x784a, 0x784b, 0x784c, 0x784d, 0x784e, 0x784f,
+ 0x7850, 0x7851, 0x7852, 0x7853, 0x7854, 0x7855, 0x7856, 0x7857,
+ 0x7858, 0x7859, 0x785a, 0x785b, 0x785c, 0x785d, 0x785e, 0x785f,
+ 0x7860, 0x7861, 0x7862, 0x7863, 0x7864, 0x7865, 0x7866, 0x7867,
+ 0x7868, 0x7869, 0x786a, 0x786b, 0x786c, 0x786d, 0x786e, 0x786f,
+ 0x7870, 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7877,
+ 0x7878, 0x7879, 0x787a, 0x787b, 0x787c, 0x787d, 0x787e, 0x787f,
+ 0x7880, 0x7881, 0x7882, 0x7883, 0x7884, 0x7885, 0x7886, 0x7887, /* 0x7880 */
+ 0x7888, 0x7889, 0x788a, 0x788b, 0x788c, 0x788d, 0x788e, 0x788f,
+ 0x7890, 0x7891, 0x7892, 0x7893, 0x7894, 0x7895, 0x7896, 0x7897,
+ 0x7898, 0x7899, 0x789a, 0x789b, 0x789c, 0x789d, 0x789e, 0x789f,
+ 0x78a0, 0x78a1, 0x78a2, 0x78a3, 0x78a4, 0x78a5, 0x78a6, 0x78a7,
+ 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac, 0x78ad, 0x78ae, 0x78af,
+ 0x78b0, 0x78b1, 0x78b2, 0x78b3, 0x78b4, 0x78b5, 0x78b6, 0x78b7,
+ 0x78b8, 0x78b9, 0x78ba, 0x78bb, 0x78bc, 0x78bd, 0x78be, 0x78bf,
+ 0x78c0, 0x78c1, 0x78c2, 0x78c3, 0x78c4, 0x78c5, 0x78c6, 0x78c7, /* 0x78c0 */
+ 0x78c8, 0x78c9, 0x78ca, 0x78cb, 0x78cc, 0x78cd, 0x78ce, 0x78cf,
+ 0x78d0, 0x78d1, 0x78d2, 0x78d3, 0x78d4, 0x78d5, 0x78d6, 0x78d7,
+ 0x78d8, 0x78d9, 0x78da, 0x78db, 0x78dc, 0x78dd, 0x78de, 0x78df,
+ 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x78e4, 0x78e5, 0x78e6, 0x78e7,
+ 0x78e8, 0x78e9, 0x78ea, 0x78eb, 0x78ec, 0x78ed, 0x78ee, 0x78ef,
+ 0x78f0, 0x78f1, 0x78f2, 0x78f3, 0x78f4, 0x78f5, 0x78f6, 0x78f7,
+ 0x78f8, 0x78f9, 0x78fa, 0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff,
+ 0x7900, 0x7901, 0x7902, 0x7903, 0x7904, 0x7905, 0x7906, 0x7907, /* 0x7900 */
+ 0x7908, 0x7909, 0x790a, 0x790b, 0x790c, 0x790d, 0x790e, 0x790f,
+ 0x7910, 0x7911, 0x7912, 0x7913, 0x7914, 0x7915, 0x7916, 0x7917,
+ 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d, 0x791e, 0x791f,
+ 0x7920, 0x7921, 0x7922, 0x7923, 0x7924, 0x7925, 0x7926, 0x7927,
+ 0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f,
+ 0x7930, 0x7931, 0x7932, 0x7933, 0x7934, 0x7935, 0x7936, 0x7937,
+ 0x7938, 0x7939, 0x793a, 0x793b, 0x793c, 0x793d, 0x793e, 0x793f,
+ 0x7940, 0x7941, 0x7942, 0x7943, 0x7944, 0x7945, 0x7946, 0x7947, /* 0x7940 */
+ 0x7948, 0x7949, 0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f,
+ 0x7950, 0x7951, 0x7952, 0x7953, 0x7954, 0x7955, 0x7956, 0x7957,
+ 0x7958, 0x7959, 0x795a, 0x795b, 0x795c, 0x795d, 0x795e, 0x795f,
+ 0x7960, 0x7961, 0x7962, 0x7963, 0x7964, 0x7965, 0x7966, 0x7967,
+ 0x7968, 0x7969, 0x796a, 0x796b, 0x796c, 0x796d, 0x796e, 0x796f,
+ 0x7970, 0x7971, 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7977,
+ 0x7978, 0x7979, 0x797a, 0x797b, 0x797c, 0x797d, 0x797e, 0x797f,
+ 0x7980, 0x7981, 0x7982, 0x7983, 0x7984, 0x7985, 0x7986, 0x7987, /* 0x7980 */
+ 0x7988, 0x7989, 0x798a, 0x798b, 0x798c, 0x798d, 0x798e, 0x798f,
+ 0x7990, 0x7991, 0x7992, 0x7993, 0x7994, 0x7995, 0x7996, 0x7997,
+ 0x7998, 0x7999, 0x799a, 0x799b, 0x799c, 0x799d, 0x799e, 0x799f,
+ 0x79a0, 0x79a1, 0x79a2, 0x79a3, 0x79a4, 0x79a5, 0x79a6, 0x79a7,
+ 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac, 0x79ad, 0x79ae, 0x79af,
+ 0x79b0, 0x79b1, 0x79b2, 0x79b3, 0x79b4, 0x79b5, 0x79b6, 0x79b7,
+ 0x79b8, 0x79b9, 0x79ba, 0x79bb, 0x79bc, 0x79bd, 0x79be, 0x79bf,
+ 0x79c0, 0x79c1, 0x79c2, 0x79c3, 0x79c4, 0x79c5, 0x79c6, 0x79c7, /* 0x79c0 */
+ 0x79c8, 0x79c9, 0x79ca, 0x79cb, 0x79cc, 0x79cd, 0x79ce, 0x79cf,
+ 0x79d0, 0x79d1, 0x79d2, 0x79d3, 0x79d4, 0x79d5, 0x79d6, 0x79d7,
+ 0x79d8, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd, 0x79de, 0x79df,
+ 0x79e0, 0x79e1, 0x79e2, 0x79e3, 0x79e4, 0x79e5, 0x79e6, 0x79e7,
+ 0x79e8, 0x79e9, 0x79ea, 0x79eb, 0x79ec, 0x79ed, 0x79ee, 0x79ef,
+ 0x79f0, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, 0x79f7,
+ 0x79f8, 0x79f9, 0x79fa, 0x79fb, 0x79fc, 0x79fd, 0x79fe, 0x79ff,
+ 0x7a00, 0x7a01, 0x7a02, 0x7a03, 0x7a04, 0x7a05, 0x7a06, 0x7a07, /* 0x7a00 */
+ 0x7a08, 0x7a09, 0x7a0a, 0x7a0b, 0x7a0c, 0x7a0d, 0x7a0e, 0x7a0f,
+ 0x7a10, 0x7a11, 0x7a12, 0x7a13, 0x7a14, 0x7a15, 0x7a16, 0x7a17,
+ 0x7a18, 0x7a19, 0x7a1a, 0x7a1b, 0x7a1c, 0x7a1d, 0x7a1e, 0x7a1f,
+ 0x7a20, 0x7a21, 0x7a22, 0x7a23, 0x7a24, 0x7a25, 0x7a26, 0x7a27,
+ 0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f,
+ 0x7a30, 0x7a31, 0x7a32, 0x7a33, 0x7a34, 0x7a35, 0x7a36, 0x7a37,
+ 0x7a38, 0x7a39, 0x7a3a, 0x7a3b, 0x7a3c, 0x7a3d, 0x7a3e, 0x7a3f,
+ 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a46, 0x7a47, /* 0x7a40 */
+ 0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f,
+ 0x7a50, 0x7a51, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a57,
+ 0x7a58, 0x7a59, 0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f,
+ 0x7a60, 0x7a61, 0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67,
+ 0x7a68, 0x7a69, 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f,
+ 0x7a70, 0x7a71, 0x7a72, 0x7a73, 0x7a74, 0x7a75, 0x7a76, 0x7a77,
+ 0x7a78, 0x7a79, 0x7a7a, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a7f,
+ 0x7a80, 0x7a81, 0x7a82, 0x7a83, 0x7a84, 0x7a85, 0x7a86, 0x7a87, /* 0x7a80 */
+ 0x7a88, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8d, 0x7a8e, 0x7a8f,
+ 0x7a90, 0x7a91, 0x7a92, 0x7a93, 0x7a94, 0x7a95, 0x7a96, 0x7a97,
+ 0x7a98, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9c, 0x7a9d, 0x7a9e, 0x7a9f,
+ 0x7aa0, 0x7aa1, 0x7aa2, 0x7aa3, 0x7aa4, 0x7aa5, 0x7aa6, 0x7aa7,
+ 0x7aa8, 0x7aa9, 0x7aaa, 0x7aab, 0x7aac, 0x7aad, 0x7aae, 0x7aaf,
+ 0x7ab0, 0x7ab1, 0x7ab2, 0x7ab3, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7,
+ 0x7ab8, 0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7abf,
+ 0x7ac0, 0x7ac1, 0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, /* 0x7ac0 */
+ 0x7ac8, 0x7ac9, 0x7aca, 0x7acb, 0x7acc, 0x7acd, 0x7ace, 0x7acf,
+ 0x7ad0, 0x7ad1, 0x7ad2, 0x7ad3, 0x7ad4, 0x7ad5, 0x7ad6, 0x7ad7,
+ 0x7ad8, 0x7ad9, 0x7ada, 0x7adb, 0x7adc, 0x7add, 0x7ade, 0x7adf,
+ 0x7ae0, 0x7ae1, 0x7ae2, 0x7ae3, 0x7ae4, 0x7ae5, 0x7ae6, 0x7ae7,
+ 0x7ae8, 0x7ae9, 0x7aea, 0x7aeb, 0x7aec, 0x7aed, 0x7aee, 0x7aef,
+ 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x7af4, 0x7af5, 0x7af6, 0x7af7,
+ 0x7af8, 0x7af9, 0x7afa, 0x7afb, 0x7afc, 0x7afd, 0x7afe, 0x7aff,
+ 0x7b00, 0x7b01, 0x7b02, 0x7b03, 0x7b04, 0x7b05, 0x7b06, 0x7b07, /* 0x7b00 */
+ 0x7b08, 0x7b09, 0x7b0a, 0x7b0b, 0x7b0c, 0x7b0d, 0x7b0e, 0x7b0f,
+ 0x7b10, 0x7b11, 0x7b12, 0x7b13, 0x7b14, 0x7b15, 0x7b16, 0x7b17,
+ 0x7b18, 0x7b19, 0x7b1a, 0x7b1b, 0x7b1c, 0x7b1d, 0x7b1e, 0x7b1f,
+ 0x7b20, 0x7b21, 0x7b22, 0x7b23, 0x7b24, 0x7b25, 0x7b26, 0x7b27,
+ 0x7b28, 0x7b29, 0x7b2a, 0x7b2b, 0x7b2c, 0x7b2d, 0x7b2e, 0x7b2f,
+ 0x7b30, 0x7b31, 0x7b32, 0x7b33, 0x7b34, 0x7b35, 0x7b36, 0x7b37,
+ 0x7b38, 0x7b39, 0x7b3a, 0x7b3b, 0x7b3c, 0x7b3d, 0x7b3e, 0x7b3f,
+ 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44, 0x7b45, 0x7b46, 0x7b47, /* 0x7b40 */
+ 0x7b48, 0x7b49, 0x7b4a, 0x7b4b, 0x7b4c, 0x7b4d, 0x7b4e, 0x7b4f,
+ 0x7b50, 0x7b51, 0x7b52, 0x7b53, 0x7b54, 0x7b55, 0x7b56, 0x7b57,
+ 0x7b58, 0x7b59, 0x7b5a, 0x7b5b, 0x7b5c, 0x7b5d, 0x7b5e, 0x7b5f,
+ 0x7b60, 0x7b61, 0x7b62, 0x7b63, 0x7b64, 0x7b65, 0x7b66, 0x7b67,
+ 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d, 0x7b6e, 0x7b6f,
+ 0x7b70, 0x7b71, 0x7b72, 0x7b73, 0x7b74, 0x7b75, 0x7b76, 0x7b77,
+ 0x7b78, 0x7b79, 0x7b7a, 0x7b7b, 0x7b7c, 0x7b7d, 0x7b7e, 0x7b7f,
+ 0x7b80, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b85, 0x7b86, 0x7b87, /* 0x7b80 */
+ 0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8d, 0x7b8e, 0x7b8f,
+ 0x7b90, 0x7b91, 0x7b92, 0x7b93, 0x7b94, 0x7b95, 0x7b96, 0x7b97,
+ 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, 0x7b9c, 0x7b9d, 0x7b9e, 0x7b9f,
+ 0x7ba0, 0x7ba1, 0x7ba2, 0x7ba3, 0x7ba4, 0x7ba5, 0x7ba6, 0x7ba7,
+ 0x7ba8, 0x7ba9, 0x7baa, 0x7bab, 0x7bac, 0x7bad, 0x7bae, 0x7baf,
+ 0x7bb0, 0x7bb1, 0x7bb2, 0x7bb3, 0x7bb4, 0x7bb5, 0x7bb6, 0x7bb7,
+ 0x7bb8, 0x7bb9, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf,
+ 0x7bc0, 0x7bc1, 0x7bc2, 0x7bc3, 0x7bc4, 0x7bc5, 0x7bc6, 0x7bc7, /* 0x7bc0 */
+ 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcc, 0x7bcd, 0x7bce, 0x7bcf,
+ 0x7bd0, 0x7bd1, 0x7bd2, 0x7bd3, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7,
+ 0x7bd8, 0x7bd9, 0x7bda, 0x7bdb, 0x7bdc, 0x7bdd, 0x7bde, 0x7bdf,
+ 0x7be0, 0x7be1, 0x7be2, 0x7be3, 0x7be4, 0x7be5, 0x7be6, 0x7be7,
+ 0x7be8, 0x7be9, 0x7bea, 0x7beb, 0x7bec, 0x7bed, 0x7bee, 0x7bef,
+ 0x7bf0, 0x7bf1, 0x7bf2, 0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf7,
+ 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb, 0x7bfc, 0x7bfd, 0x7bfe, 0x7bff,
+ 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05, 0x7c06, 0x7c07, /* 0x7c00 */
+ 0x7c08, 0x7c09, 0x7c0a, 0x7c0b, 0x7c0c, 0x7c0d, 0x7c0e, 0x7c0f,
+ 0x7c10, 0x7c11, 0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c16, 0x7c17,
+ 0x7c18, 0x7c19, 0x7c1a, 0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c1f,
+ 0x7c20, 0x7c21, 0x7c22, 0x7c23, 0x7c24, 0x7c25, 0x7c26, 0x7c27,
+ 0x7c28, 0x7c29, 0x7c2a, 0x7c2b, 0x7c2c, 0x7c2d, 0x7c2e, 0x7c2f,
+ 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, 0x7c36, 0x7c37,
+ 0x7c38, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, 0x7c3f,
+ 0x7c40, 0x7c41, 0x7c42, 0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, /* 0x7c40 */
+ 0x7c48, 0x7c49, 0x7c4a, 0x7c4b, 0x7c4c, 0x7c4d, 0x7c4e, 0x7c4f,
+ 0x7c50, 0x7c51, 0x7c52, 0x7c53, 0x7c54, 0x7c55, 0x7c56, 0x7c57,
+ 0x7c58, 0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f,
+ 0x7c60, 0x7c61, 0x7c62, 0x7c63, 0x7c64, 0x7c65, 0x7c66, 0x7c67,
+ 0x7c68, 0x7c69, 0x7c6a, 0x7c6b, 0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f,
+ 0x7c70, 0x7c71, 0x7c72, 0x7c73, 0x7c74, 0x7c75, 0x7c76, 0x7c77,
+ 0x7c78, 0x7c79, 0x7c7a, 0x7c7b, 0x7c7c, 0x7c7d, 0x7c7e, 0x7c7f,
+ 0x7c80, 0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, /* 0x7c80 */
+ 0x7c88, 0x7c89, 0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f,
+ 0x7c90, 0x7c91, 0x7c92, 0x7c93, 0x7c94, 0x7c95, 0x7c96, 0x7c97,
+ 0x7c98, 0x7c99, 0x7c9a, 0x7c9b, 0x7c9c, 0x7c9d, 0x7c9e, 0x7c9f,
+ 0x7ca0, 0x7ca1, 0x7ca2, 0x7ca3, 0x7ca4, 0x7ca5, 0x7ca6, 0x7ca7,
+ 0x7ca8, 0x7ca9, 0x7caa, 0x7cab, 0x7cac, 0x7cad, 0x7cae, 0x7caf,
+ 0x7cb0, 0x7cb1, 0x7cb2, 0x7cb3, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7,
+ 0x7cb8, 0x7cb9, 0x7cba, 0x7cbb, 0x7cbc, 0x7cbd, 0x7cbe, 0x7cbf,
+ 0x7cc0, 0x7cc1, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc5, 0x7cc6, 0x7cc7, /* 0x7cc0 */
+ 0x7cc8, 0x7cc9, 0x7cca, 0x7ccb, 0x7ccc, 0x7ccd, 0x7cce, 0x7ccf,
+ 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd5, 0x7cd6, 0x7cd7,
+ 0x7cd8, 0x7cd9, 0x7cda, 0x7cdb, 0x7cdc, 0x7cdd, 0x7cde, 0x7cdf,
+ 0x7ce0, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4, 0x7ce5, 0x7ce6, 0x7ce7,
+ 0x7ce8, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced, 0x7cee, 0x7cef,
+ 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6, 0x7cf7,
+ 0x7cf8, 0x7cf9, 0x7cfa, 0x7cfb, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff,
+ 0x7d00, 0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, /* 0x7d00 */
+ 0x7d08, 0x7d09, 0x7d0a, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f,
+ 0x7d10, 0x7d11, 0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17,
+ 0x7d18, 0x7d19, 0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f,
+ 0x7d20, 0x7d21, 0x7d22, 0x7d23, 0x7d24, 0x7d25, 0x7d26, 0x7d27,
+ 0x7d28, 0x7d29, 0x7d2a, 0x7d2b, 0x7d2c, 0x7d2d, 0x7d2e, 0x7d2f,
+ 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, 0x7d36, 0x7d37,
+ 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d3f,
+ 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46, 0x7d47, /* 0x7d40 */
+ 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e, 0x7d4f,
+ 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56, 0x7d57,
+ 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e, 0x7d5f,
+ 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66, 0x7d67,
+ 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6e, 0x7d6f,
+ 0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x7d77,
+ 0x7d78, 0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f,
+ 0x7d80, 0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, /* 0x7d80 */
+ 0x7d88, 0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f,
+ 0x7d90, 0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97,
+ 0x7d98, 0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f,
+ 0x7da0, 0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da6, 0x7da7,
+ 0x7da8, 0x7da9, 0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7dae, 0x7daf,
+ 0x7db0, 0x7db1, 0x7db2, 0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7,
+ 0x7db8, 0x7db9, 0x7dba, 0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf,
+ 0x7dc0, 0x7dc1, 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, /* 0x7dc0 */
+ 0x7dc8, 0x7dc9, 0x7dca, 0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf,
+ 0x7dd0, 0x7dd1, 0x7dd2, 0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7,
+ 0x7dd8, 0x7dd9, 0x7dda, 0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf,
+ 0x7de0, 0x7de1, 0x7de2, 0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7,
+ 0x7de8, 0x7de9, 0x7dea, 0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def,
+ 0x7df0, 0x7df1, 0x7df2, 0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7,
+ 0x7df8, 0x7df9, 0x7dfa, 0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff,
+ 0x7e00, 0x7e01, 0x7e02, 0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, /* 0x7e00 */
+ 0x7e08, 0x7e09, 0x7e0a, 0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f,
+ 0x7e10, 0x7e11, 0x7e12, 0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17,
+ 0x7e18, 0x7e19, 0x7e1a, 0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f,
+ 0x7e20, 0x7e21, 0x7e22, 0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27,
+ 0x7e28, 0x7e29, 0x7e2a, 0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f,
+ 0x7e30, 0x7e31, 0x7e32, 0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37,
+ 0x7e38, 0x7e39, 0x7e3a, 0x7e3b, 0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f,
+ 0x7e40, 0x7e41, 0x7e42, 0x7e43, 0x7e44, 0x7e45, 0x7e46, 0x7e47, /* 0x7e40 */
+ 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4d, 0x7e4e, 0x7e4f,
+ 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, 0x7e55, 0x7e56, 0x7e57,
+ 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, 0x7e5d, 0x7e5e, 0x7e5f,
+ 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65, 0x7e66, 0x7e67,
+ 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d, 0x7e6e, 0x7e6f,
+ 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75, 0x7e76, 0x7e77,
+ 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d, 0x7e7e, 0x7e7f,
+ 0x7e80, 0x7e81, 0x7e82, 0x7e83, 0x7e84, 0x7e85, 0x7e86, 0x7e87, /* 0x7e80 */
+ 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e, 0x7e8f,
+ 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96, 0x7e97,
+ 0x7e98, 0x7e99, 0x7e9a, 0x7e9b, 0x7e9c, 0x7e9d, 0x7e9e, 0x7e9f,
+ 0x7ea0, 0x7ea1, 0x7ea2, 0x7ea3, 0x7ea4, 0x7ea5, 0x7ea6, 0x7ea7,
+ 0x7ea8, 0x7ea9, 0x7eaa, 0x7eab, 0x7eac, 0x7ead, 0x7eae, 0x7eaf,
+ 0x7eb0, 0x7eb1, 0x7eb2, 0x7eb3, 0x7eb4, 0x7eb5, 0x7eb6, 0x7eb7,
+ 0x7eb8, 0x7eb9, 0x7eba, 0x7ebb, 0x7ebc, 0x7ebd, 0x7ebe, 0x7ebf,
+ 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec3, 0x7ec4, 0x7ec5, 0x7ec6, 0x7ec7, /* 0x7ec0 */
+ 0x7ec8, 0x7ec9, 0x7eca, 0x7ecb, 0x7ecc, 0x7ecd, 0x7ece, 0x7ecf,
+ 0x7ed0, 0x7ed1, 0x7ed2, 0x7ed3, 0x7ed4, 0x7ed5, 0x7ed6, 0x7ed7,
+ 0x7ed8, 0x7ed9, 0x7eda, 0x7edb, 0x7edc, 0x7edd, 0x7ede, 0x7edf,
+ 0x7ee0, 0x7ee1, 0x7ee2, 0x7ee3, 0x7ee4, 0x7ee5, 0x7ee6, 0x7ee7,
+ 0x7ee8, 0x7ee9, 0x7eea, 0x7eeb, 0x7eec, 0x7eed, 0x7eee, 0x7eef,
+ 0x7ef0, 0x7ef1, 0x7ef2, 0x7ef3, 0x7ef4, 0x7ef5, 0x7ef6, 0x7ef7,
+ 0x7ef8, 0x7ef9, 0x7efa, 0x7efb, 0x7efc, 0x7efd, 0x7efe, 0x7eff,
+ 0x7f00, 0x7f01, 0x7f02, 0x7f03, 0x7f04, 0x7f05, 0x7f06, 0x7f07, /* 0x7f00 */
+ 0x7f08, 0x7f09, 0x7f0a, 0x7f0b, 0x7f0c, 0x7f0d, 0x7f0e, 0x7f0f,
+ 0x7f10, 0x7f11, 0x7f12, 0x7f13, 0x7f14, 0x7f15, 0x7f16, 0x7f17,
+ 0x7f18, 0x7f19, 0x7f1a, 0x7f1b, 0x7f1c, 0x7f1d, 0x7f1e, 0x7f1f,
+ 0x7f20, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
+ 0x7f28, 0x7f29, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2e, 0x7f2f,
+ 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f34, 0x7f35, 0x7f36, 0x7f37,
+ 0x7f38, 0x7f39, 0x7f3a, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e, 0x7f3f,
+ 0x7f40, 0x7f41, 0x7f42, 0x7f43, 0x7f44, 0x7f45, 0x7f46, 0x7f47, /* 0x7f40 */
+ 0x7f48, 0x7f49, 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f,
+ 0x7f50, 0x7f51, 0x7f52, 0x7f53, 0x7f54, 0x7f55, 0x7f56, 0x7f57,
+ 0x7f58, 0x7f59, 0x7f5a, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f5f,
+ 0x7f60, 0x7f61, 0x7f62, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f67,
+ 0x7f68, 0x7f69, 0x7f6a, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6e, 0x7f6f,
+ 0x7f70, 0x7f71, 0x7f72, 0x7f73, 0x7f74, 0x7f75, 0x7f76, 0x7f77,
+ 0x7f78, 0x7f79, 0x7f7a, 0x7f7b, 0x7f7c, 0x7f7d, 0x7f7e, 0x7f7f,
+ 0x7f80, 0x7f81, 0x7f82, 0x7f83, 0x7f84, 0x7f85, 0x7f86, 0x7f87, /* 0x7f80 */
+ 0x7f88, 0x7f89, 0x7f8a, 0x7f8b, 0x7f8c, 0x7f8d, 0x7f8e, 0x7f8f,
+ 0x7f90, 0x7f91, 0x7f92, 0x7f93, 0x7f94, 0x7f95, 0x7f96, 0x7f97,
+ 0x7f98, 0x7f99, 0x7f9a, 0x7f9b, 0x7f9c, 0x7f9d, 0x7f9e, 0x7f9f,
+ 0x7fa0, 0x7fa1, 0x7fa2, 0x7fa3, 0x7fa4, 0x7fa5, 0x7fa6, 0x7fa7,
+ 0x7fa8, 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7faf,
+ 0x7fb0, 0x7fb1, 0x7fb2, 0x7fb3, 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7,
+ 0x7fb8, 0x7fb9, 0x7fba, 0x7fbb, 0x7fbc, 0x7fbd, 0x7fbe, 0x7fbf,
+ 0x7fc0, 0x7fc1, 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc5, 0x7fc6, 0x7fc7, /* 0x7fc0 */
+ 0x7fc8, 0x7fc9, 0x7fca, 0x7fcb, 0x7fcc, 0x7fcd, 0x7fce, 0x7fcf,
+ 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd4, 0x7fd5, 0x7fd6, 0x7fd7,
+ 0x7fd8, 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fdf,
+ 0x7fe0, 0x7fe1, 0x7fe2, 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe6, 0x7fe7,
+ 0x7fe8, 0x7fe9, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fee, 0x7fef,
+ 0x7ff0, 0x7ff1, 0x7ff2, 0x7ff3, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7,
+ 0x7ff8, 0x7ff9, 0x7ffa, 0x7ffb, 0x7ffc, 0x7ffd, 0x7ffe, 0x7fff,
+ 0x8000, 0x8001, 0x8002, 0x8003, 0x8004, 0x8005, 0x8006, 0x8007, /* 0x8000 */
+ 0x8008, 0x8009, 0x800a, 0x800b, 0x800c, 0x800d, 0x800e, 0x800f,
+ 0x8010, 0x8011, 0x8012, 0x8013, 0x8014, 0x8015, 0x8016, 0x8017,
+ 0x8018, 0x8019, 0x801a, 0x801b, 0x801c, 0x801d, 0x801e, 0x801f,
+ 0x8020, 0x8021, 0x8022, 0x8023, 0x8024, 0x8025, 0x8026, 0x8027,
+ 0x8028, 0x8029, 0x802a, 0x802b, 0x802c, 0x802d, 0x802e, 0x802f,
+ 0x8030, 0x8031, 0x8032, 0x8033, 0x8034, 0x8035, 0x8036, 0x8037,
+ 0x8038, 0x8039, 0x803a, 0x803b, 0x803c, 0x803d, 0x803e, 0x803f,
+ 0x8040, 0x8041, 0x8042, 0x8043, 0x8044, 0x8045, 0x8046, 0x8047, /* 0x8040 */
+ 0x8048, 0x8049, 0x804a, 0x804b, 0x804c, 0x804d, 0x804e, 0x804f,
+ 0x8050, 0x8051, 0x8052, 0x8053, 0x8054, 0x8055, 0x8056, 0x8057,
+ 0x8058, 0x8059, 0x805a, 0x805b, 0x805c, 0x805d, 0x805e, 0x805f,
+ 0x8060, 0x8061, 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067,
+ 0x8068, 0x8069, 0x806a, 0x806b, 0x806c, 0x806d, 0x806e, 0x806f,
+ 0x8070, 0x8071, 0x8072, 0x8073, 0x8074, 0x8075, 0x8076, 0x8077,
+ 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, 0x807d, 0x807e, 0x807f,
+ 0x8080, 0x8081, 0x8082, 0x8083, 0x8084, 0x8085, 0x8086, 0x8087, /* 0x8080 */
+ 0x8088, 0x8089, 0x808a, 0x808b, 0x808c, 0x808d, 0x808e, 0x808f,
+ 0x8090, 0x8091, 0x8092, 0x8093, 0x8094, 0x8095, 0x8096, 0x8097,
+ 0x8098, 0x8099, 0x809a, 0x809b, 0x809c, 0x809d, 0x809e, 0x809f,
+ 0x80a0, 0x80a1, 0x80a2, 0x80a3, 0x80a4, 0x80a5, 0x80a6, 0x80a7,
+ 0x80a8, 0x80a9, 0x80aa, 0x80ab, 0x80ac, 0x80ad, 0x80ae, 0x80af,
+ 0x80b0, 0x80b1, 0x80b2, 0x80b3, 0x80b4, 0x80b5, 0x80b6, 0x80b7,
+ 0x80b8, 0x80b9, 0x80ba, 0x80bb, 0x80bc, 0x80bd, 0x80be, 0x80bf,
+ 0x80c0, 0x80c1, 0x80c2, 0x80c3, 0x80c4, 0x80c5, 0x80c6, 0x80c7, /* 0x80c0 */
+ 0x80c8, 0x80c9, 0x80ca, 0x80cb, 0x80cc, 0x80cd, 0x80ce, 0x80cf,
+ 0x80d0, 0x80d1, 0x80d2, 0x80d3, 0x80d4, 0x80d5, 0x80d6, 0x80d7,
+ 0x80d8, 0x80d9, 0x80da, 0x80db, 0x80dc, 0x80dd, 0x80de, 0x80df,
+ 0x80e0, 0x80e1, 0x80e2, 0x80e3, 0x80e4, 0x80e5, 0x80e6, 0x80e7,
+ 0x80e8, 0x80e9, 0x80ea, 0x80eb, 0x80ec, 0x80ed, 0x80ee, 0x80ef,
+ 0x80f0, 0x80f1, 0x80f2, 0x80f3, 0x80f4, 0x80f5, 0x80f6, 0x80f7,
+ 0x80f8, 0x80f9, 0x80fa, 0x80fb, 0x80fc, 0x80fd, 0x80fe, 0x80ff,
+ 0x8100, 0x8101, 0x8102, 0x8103, 0x8104, 0x8105, 0x8106, 0x8107, /* 0x8100 */
+ 0x8108, 0x8109, 0x810a, 0x810b, 0x810c, 0x810d, 0x810e, 0x810f,
+ 0x8110, 0x8111, 0x8112, 0x8113, 0x8114, 0x8115, 0x8116, 0x8117,
+ 0x8118, 0x8119, 0x811a, 0x811b, 0x811c, 0x811d, 0x811e, 0x811f,
+ 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127,
+ 0x8128, 0x8129, 0x812a, 0x812b, 0x812c, 0x812d, 0x812e, 0x812f,
+ 0x8130, 0x8131, 0x8132, 0x8133, 0x8134, 0x8135, 0x8136, 0x8137,
+ 0x8138, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, 0x813e, 0x813f,
+ 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, /* 0x8140 */
+ 0x8148, 0x8149, 0x814a, 0x814b, 0x814c, 0x814d, 0x814e, 0x814f,
+ 0x8150, 0x8151, 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157,
+ 0x8158, 0x8159, 0x815a, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f,
+ 0x8160, 0x8161, 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x8167,
+ 0x8168, 0x8169, 0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f,
+ 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177,
+ 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x817f,
+ 0x8180, 0x8181, 0x8182, 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, /* 0x8180 */
+ 0x8188, 0x8189, 0x818a, 0x818b, 0x818c, 0x818d, 0x818e, 0x818f,
+ 0x8190, 0x8191, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197,
+ 0x8198, 0x8199, 0x819a, 0x819b, 0x819c, 0x819d, 0x819e, 0x819f,
+ 0x81a0, 0x81a1, 0x81a2, 0x81a3, 0x81a4, 0x81a5, 0x81a6, 0x81a7,
+ 0x81a8, 0x81a9, 0x81aa, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af,
+ 0x81b0, 0x81b1, 0x81b2, 0x81b3, 0x81b4, 0x81b5, 0x81b6, 0x81b7,
+ 0x81b8, 0x81b9, 0x81ba, 0x81bb, 0x81bc, 0x81bd, 0x81be, 0x81bf,
+ 0x81c0, 0x81c1, 0x81c2, 0x81c3, 0x81c4, 0x81c5, 0x81c6, 0x81c7, /* 0x81c0 */
+ 0x81c8, 0x81c9, 0x81ca, 0x81cb, 0x81cc, 0x81cd, 0x81ce, 0x81cf,
+ 0x81d0, 0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7,
+ 0x81d8, 0x81d9, 0x81da, 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df,
+ 0x81e0, 0x81e1, 0x81e2, 0x81e3, 0x81e4, 0x81e5, 0x81e6, 0x81e7,
+ 0x81e8, 0x81e9, 0x81ea, 0x81eb, 0x81ec, 0x81ed, 0x81ee, 0x81ef,
+ 0x81f0, 0x81f1, 0x81f2, 0x81f3, 0x81f4, 0x81f5, 0x81f6, 0x81f7,
+ 0x81f8, 0x81f9, 0x81fa, 0x81fb, 0x81fc, 0x81fd, 0x81fe, 0x81ff,
+ 0x8200, 0x8201, 0x8202, 0x8203, 0x8204, 0x8205, 0x8206, 0x8207, /* 0x8200 */
+ 0x8208, 0x8209, 0x820a, 0x820b, 0x820c, 0x820d, 0x820e, 0x820f,
+ 0x8210, 0x8211, 0x8212, 0x8213, 0x8214, 0x8215, 0x8216, 0x8217,
+ 0x8218, 0x8219, 0x821a, 0x821b, 0x821c, 0x821d, 0x821e, 0x821f,
+ 0x8220, 0x8221, 0x8222, 0x8223, 0x8224, 0x8225, 0x8226, 0x8227,
+ 0x8228, 0x8229, 0x822a, 0x822b, 0x822c, 0x822d, 0x822e, 0x822f,
+ 0x8230, 0x8231, 0x8232, 0x8233, 0x8234, 0x8235, 0x8236, 0x8237,
+ 0x8238, 0x8239, 0x823a, 0x823b, 0x823c, 0x823d, 0x823e, 0x823f,
+ 0x8240, 0x8241, 0x8242, 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, /* 0x8240 */
+ 0x8248, 0x8249, 0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f,
+ 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257,
+ 0x8258, 0x8259, 0x825a, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f,
+ 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267,
+ 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e, 0x826f,
+ 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277,
+ 0x8278, 0x8279, 0x827a, 0x827b, 0x827c, 0x827d, 0x827e, 0x827f,
+ 0x8280, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287, /* 0x8280 */
+ 0x8288, 0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f,
+ 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297,
+ 0x8298, 0x8299, 0x829a, 0x829b, 0x829c, 0x829d, 0x829e, 0x829f,
+ 0x82a0, 0x82a1, 0x82a2, 0x82a3, 0x82a4, 0x82a5, 0x82a6, 0x82a7,
+ 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0x82ae, 0x82af,
+ 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4, 0x82b5, 0x82b6, 0x82b7,
+ 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc, 0x82bd, 0x82be, 0x82bf,
+ 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4, 0x82c5, 0x82c6, 0x82c7, /* 0x82c0 */
+ 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, 0x82ce, 0x82cf,
+ 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, 0x82d6, 0x82d7,
+ 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df,
+ 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7,
+ 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec, 0x82ed, 0x82ee, 0x82ef,
+ 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4, 0x82f5, 0x82f6, 0x82f7,
+ 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc, 0x82fd, 0x82fe, 0x82ff,
+ 0x8300, 0x8301, 0x8302, 0x8303, 0x8304, 0x8305, 0x8306, 0x8307, /* 0x8300 */
+ 0x8308, 0x8309, 0x830a, 0x830b, 0x830c, 0x830d, 0x830e, 0x830f,
+ 0x8310, 0x8311, 0x8312, 0x8313, 0x8314, 0x8315, 0x8316, 0x8317,
+ 0x8318, 0x8319, 0x831a, 0x831b, 0x831c, 0x831d, 0x831e, 0x831f,
+ 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, 0x8327,
+ 0x8328, 0x8329, 0x832a, 0x832b, 0x832c, 0x832d, 0x832e, 0x832f,
+ 0x8330, 0x8331, 0x8332, 0x8333, 0x8334, 0x8335, 0x8336, 0x8337,
+ 0x8338, 0x8339, 0x833a, 0x833b, 0x833c, 0x833d, 0x833e, 0x833f,
+ 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, /* 0x8340 */
+ 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, 0x834e, 0x834f,
+ 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357,
+ 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f,
+ 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, 0x8367,
+ 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, 0x836f,
+ 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, 0x8377,
+ 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0x837e, 0x837f,
+ 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8385, 0x8386, 0x8387, /* 0x8380 */
+ 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, 0x838d, 0x838e, 0x838f,
+ 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, 0x8395, 0x8396, 0x8397,
+ 0x8398, 0x8399, 0x839a, 0x839b, 0x839c, 0x839d, 0x839e, 0x839f,
+ 0x83a0, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6, 0x83a7,
+ 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, 0x83ae, 0x83af,
+ 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b5, 0x83b6, 0x83b7,
+ 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, 0x83be, 0x83bf,
+ 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, 0x83c6, 0x83c7, /* 0x83c0 */
+ 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, 0x83ce, 0x83cf,
+ 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, 0x83d6, 0x83d7,
+ 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, 0x83de, 0x83df,
+ 0x83e0, 0x83e1, 0x83e2, 0x83e3, 0x83e4, 0x83e5, 0x83e6, 0x83e7,
+ 0x83e8, 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0x83ed, 0x83ee, 0x83ef,
+ 0x83f0, 0x83f1, 0x83f2, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7,
+ 0x83f8, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, 0x83ff,
+ 0x8400, 0x8401, 0x8402, 0x8403, 0x8404, 0x8405, 0x8406, 0x8407, /* 0x8400 */
+ 0x8408, 0x8409, 0x840a, 0x840b, 0x840c, 0x840d, 0x840e, 0x840f,
+ 0x8410, 0x8411, 0x8412, 0x8413, 0x8414, 0x8415, 0x8416, 0x8417,
+ 0x8418, 0x8419, 0x841a, 0x841b, 0x841c, 0x841d, 0x841e, 0x841f,
+ 0x8420, 0x8421, 0x8422, 0x8423, 0x8424, 0x8425, 0x8426, 0x8427,
+ 0x8428, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d, 0x842e, 0x842f,
+ 0x8430, 0x8431, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, 0x8437,
+ 0x8438, 0x8439, 0x843a, 0x843b, 0x843c, 0x843d, 0x843e, 0x843f,
+ 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446, 0x8447, /* 0x8440 */
+ 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f,
+ 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457,
+ 0x8458, 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f,
+ 0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466, 0x8467,
+ 0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x846f,
+ 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477,
+ 0x8478, 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x847f,
+ 0x8480, 0x8481, 0x8482, 0x8483, 0x8484, 0x8485, 0x8486, 0x8487, /* 0x8480 */
+ 0x8488, 0x8489, 0x848a, 0x848b, 0x848c, 0x848d, 0x848e, 0x848f,
+ 0x8490, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8497,
+ 0x8498, 0x8499, 0x849a, 0x849b, 0x849c, 0x849d, 0x849e, 0x849f,
+ 0x84a0, 0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7,
+ 0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84af,
+ 0x84b0, 0x84b1, 0x84b2, 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7,
+ 0x84b8, 0x84b9, 0x84ba, 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf,
+ 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0x84c4, 0x84c5, 0x84c6, 0x84c7, /* 0x84c0 */
+ 0x84c8, 0x84c9, 0x84ca, 0x84cb, 0x84cc, 0x84cd, 0x84ce, 0x84cf,
+ 0x84d0, 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, 0x84d7,
+ 0x84d8, 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84dd, 0x84de, 0x84df,
+ 0x84e0, 0x84e1, 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7,
+ 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef,
+ 0x84f0, 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7,
+ 0x84f8, 0x84f9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0x84fe, 0x84ff,
+ 0x8500, 0x8501, 0x8502, 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, /* 0x8500 */
+ 0x8508, 0x8509, 0x850a, 0x850b, 0x850c, 0x850d, 0x850e, 0x850f,
+ 0x8510, 0x8511, 0x8512, 0x8513, 0x8514, 0x8515, 0x8516, 0x8517,
+ 0x8518, 0x8519, 0x851a, 0x851b, 0x851c, 0x851d, 0x851e, 0x851f,
+ 0x8520, 0x8521, 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527,
+ 0x8528, 0x8529, 0x852a, 0x852b, 0x852c, 0x852d, 0x852e, 0x852f,
+ 0x8530, 0x8531, 0x8532, 0x8533, 0x8534, 0x8535, 0x8536, 0x8537,
+ 0x8538, 0x8539, 0x853a, 0x853b, 0x853c, 0x853d, 0x853e, 0x853f,
+ 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, /* 0x8540 */
+ 0x8548, 0x8549, 0x854a, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f,
+ 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557,
+ 0x8558, 0x8559, 0x855a, 0x855b, 0x855c, 0x855d, 0x855e, 0x855f,
+ 0x8560, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567,
+ 0x8568, 0x8569, 0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f,
+ 0x8570, 0x8571, 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577,
+ 0x8578, 0x8579, 0x857a, 0x857b, 0x857c, 0x857d, 0x857e, 0x857f,
+ 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0x8585, 0x8586, 0x8587, /* 0x8580 */
+ 0x8588, 0x8589, 0x858a, 0x858b, 0x858c, 0x858d, 0x858e, 0x858f,
+ 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, 0x8596, 0x8597,
+ 0x8598, 0x8599, 0x859a, 0x859b, 0x859c, 0x859d, 0x859e, 0x859f,
+ 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, 0x85a7,
+ 0x85a8, 0x85a9, 0x85aa, 0x85ab, 0x85ac, 0x85ad, 0x85ae, 0x85af,
+ 0x85b0, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b7,
+ 0x85b8, 0x85b9, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf,
+ 0x85c0, 0x85c1, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, /* 0x85c0 */
+ 0x85c8, 0x85c9, 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf,
+ 0x85d0, 0x85d1, 0x85d2, 0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7,
+ 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df,
+ 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7,
+ 0x85e8, 0x85e9, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef,
+ 0x85f0, 0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7,
+ 0x85f8, 0x85f9, 0x85fa, 0x85fb, 0x85fc, 0x85fd, 0x85fe, 0x85ff,
+ 0x8600, 0x8601, 0x8602, 0x8603, 0x8604, 0x8605, 0x8606, 0x8607, /* 0x8600 */
+ 0x8608, 0x8609, 0x860a, 0x860b, 0x860c, 0x860d, 0x860e, 0x860f,
+ 0x8610, 0x8611, 0x8612, 0x8613, 0x8614, 0x8615, 0x8616, 0x8617,
+ 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d, 0x861e, 0x861f,
+ 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, 0x8626, 0x8627,
+ 0x8628, 0x8629, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f,
+ 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637,
+ 0x8638, 0x8639, 0x863a, 0x863b, 0x863c, 0x863d, 0x863e, 0x863f,
+ 0x8640, 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, /* 0x8640 */
+ 0x8648, 0x8649, 0x864a, 0x864b, 0x864c, 0x864d, 0x864e, 0x864f,
+ 0x8650, 0x8651, 0x8652, 0x8653, 0x8654, 0x8655, 0x8656, 0x8657,
+ 0x8658, 0x8659, 0x865a, 0x865b, 0x865c, 0x865d, 0x865e, 0x865f,
+ 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667,
+ 0x8668, 0x8669, 0x866a, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f,
+ 0x8670, 0x8671, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677,
+ 0x8678, 0x8679, 0x867a, 0x867b, 0x867c, 0x867d, 0x867e, 0x867f,
+ 0x8680, 0x8681, 0x8682, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, /* 0x8680 */
+ 0x8688, 0x8689, 0x868a, 0x868b, 0x868c, 0x868d, 0x868e, 0x868f,
+ 0x8690, 0x8691, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, 0x8697,
+ 0x8698, 0x8699, 0x869a, 0x869b, 0x869c, 0x869d, 0x869e, 0x869f,
+ 0x86a0, 0x86a1, 0x86a2, 0x86a3, 0x86a4, 0x86a5, 0x86a6, 0x86a7,
+ 0x86a8, 0x86a9, 0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0x86af,
+ 0x86b0, 0x86b1, 0x86b2, 0x86b3, 0x86b4, 0x86b5, 0x86b6, 0x86b7,
+ 0x86b8, 0x86b9, 0x86ba, 0x86bb, 0x86bc, 0x86bd, 0x86be, 0x86bf,
+ 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, /* 0x86c0 */
+ 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf,
+ 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4, 0x86d5, 0x86d6, 0x86d7,
+ 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc, 0x86dd, 0x86de, 0x86df,
+ 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4, 0x86e5, 0x86e6, 0x86e7,
+ 0x86e8, 0x86e9, 0x86ea, 0x86eb, 0x86ec, 0x86ed, 0x86ee, 0x86ef,
+ 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4, 0x86f5, 0x86f6, 0x86f7,
+ 0x86f8, 0x86f9, 0x86fa, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x86ff,
+ 0x8700, 0x8701, 0x8702, 0x8703, 0x8704, 0x8705, 0x8706, 0x8707, /* 0x8700 */
+ 0x8708, 0x8709, 0x870a, 0x870b, 0x870c, 0x870d, 0x870e, 0x870f,
+ 0x8710, 0x8711, 0x8712, 0x8713, 0x8714, 0x8715, 0x8716, 0x8717,
+ 0x8718, 0x8719, 0x871a, 0x871b, 0x871c, 0x871d, 0x871e, 0x871f,
+ 0x8720, 0x8721, 0x8722, 0x8723, 0x8724, 0x8725, 0x8726, 0x8727,
+ 0x8728, 0x8729, 0x872a, 0x872b, 0x872c, 0x872d, 0x872e, 0x872f,
+ 0x8730, 0x8731, 0x8732, 0x8733, 0x8734, 0x8735, 0x8736, 0x8737,
+ 0x8738, 0x8739, 0x873a, 0x873b, 0x873c, 0x873d, 0x873e, 0x873f,
+ 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, /* 0x8740 */
+ 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d, 0x874e, 0x874f,
+ 0x8750, 0x8751, 0x8752, 0x8753, 0x8754, 0x8755, 0x8756, 0x8757,
+ 0x8758, 0x8759, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f,
+ 0x8760, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, 0x8766, 0x8767,
+ 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, 0x876e, 0x876f,
+ 0x8770, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775, 0x8776, 0x8777,
+ 0x8778, 0x8779, 0x877a, 0x877b, 0x877c, 0x877d, 0x877e, 0x877f,
+ 0x8780, 0x8781, 0x8782, 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, /* 0x8780 */
+ 0x8788, 0x8789, 0x878a, 0x878b, 0x878c, 0x878d, 0x878e, 0x878f,
+ 0x8790, 0x8791, 0x8792, 0x8793, 0x8794, 0x8795, 0x8796, 0x8797,
+ 0x8798, 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0x879f,
+ 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x87a5, 0x87a6, 0x87a7,
+ 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, 0x87ae, 0x87af,
+ 0x87b0, 0x87b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6, 0x87b7,
+ 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be, 0x87bf,
+ 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6, 0x87c7, /* 0x87c0 */
+ 0x87c8, 0x87c9, 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf,
+ 0x87d0, 0x87d1, 0x87d2, 0x87d3, 0x87d4, 0x87d5, 0x87d6, 0x87d7,
+ 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, 0x87dd, 0x87de, 0x87df,
+ 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e5, 0x87e6, 0x87e7,
+ 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, 0x87ed, 0x87ee, 0x87ef,
+ 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7,
+ 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe, 0x87ff,
+ 0x8800, 0x8801, 0x8802, 0x8803, 0x8804, 0x8805, 0x8806, 0x8807, /* 0x8800 */
+ 0x8808, 0x8809, 0x880a, 0x880b, 0x880c, 0x880d, 0x880e, 0x880f,
+ 0x8810, 0x8811, 0x8812, 0x8813, 0x8814, 0x8815, 0x8816, 0x8817,
+ 0x8818, 0x8819, 0x881a, 0x881b, 0x881c, 0x881d, 0x881e, 0x881f,
+ 0x8820, 0x8821, 0x8822, 0x8823, 0x8824, 0x8825, 0x8826, 0x8827,
+ 0x8828, 0x8829, 0x882a, 0x882b, 0x882c, 0x882d, 0x882e, 0x882f,
+ 0x8830, 0x8831, 0x8832, 0x8833, 0x8834, 0x8835, 0x8836, 0x8837,
+ 0x8838, 0x8839, 0x883a, 0x883b, 0x883c, 0x883d, 0x883e, 0x883f,
+ 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847, /* 0x8840 */
+ 0x8848, 0x8849, 0x884a, 0x884b, 0x884c, 0x884d, 0x884e, 0x884f,
+ 0x8850, 0x8851, 0x8852, 0x8853, 0x8854, 0x8855, 0x8856, 0x8857,
+ 0x8858, 0x8859, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f,
+ 0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867,
+ 0x8868, 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f,
+ 0x8870, 0x8871, 0x8872, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877,
+ 0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x887d, 0x887e, 0x887f,
+ 0x8880, 0x8881, 0x8882, 0x8883, 0x8884, 0x8885, 0x8886, 0x8887, /* 0x8880 */
+ 0x8888, 0x8889, 0x888a, 0x888b, 0x888c, 0x888d, 0x888e, 0x888f,
+ 0x8890, 0x8891, 0x8892, 0x8893, 0x8894, 0x8895, 0x8896, 0x8897,
+ 0x8898, 0x8899, 0x889a, 0x889b, 0x889c, 0x889d, 0x889e, 0x889f,
+ 0x88a0, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7,
+ 0x88a8, 0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af,
+ 0x88b0, 0x88b1, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7,
+ 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88be, 0x88bf,
+ 0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, /* 0x88c0 */
+ 0x88c8, 0x88c9, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf,
+ 0x88d0, 0x88d1, 0x88d2, 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7,
+ 0x88d8, 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df,
+ 0x88e0, 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7,
+ 0x88e8, 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef,
+ 0x88f0, 0x88f1, 0x88f2, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7,
+ 0x88f8, 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x88ff,
+ 0x8900, 0x8901, 0x8902, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, /* 0x8900 */
+ 0x8908, 0x8909, 0x890a, 0x890b, 0x890c, 0x890d, 0x890e, 0x890f,
+ 0x8910, 0x8911, 0x8912, 0x8913, 0x8914, 0x8915, 0x8916, 0x8917,
+ 0x8918, 0x8919, 0x891a, 0x891b, 0x891c, 0x891d, 0x891e, 0x891f,
+ 0x8920, 0x8921, 0x8922, 0x8923, 0x8924, 0x8925, 0x8926, 0x8927,
+ 0x8928, 0x8929, 0x892a, 0x892b, 0x892c, 0x892d, 0x892e, 0x892f,
+ 0x8930, 0x8931, 0x8932, 0x8933, 0x8934, 0x8935, 0x8936, 0x8937,
+ 0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f,
+ 0x8940, 0x8941, 0x8942, 0x8943, 0x8944, 0x8945, 0x8946, 0x8947, /* 0x8940 */
+ 0x8948, 0x8949, 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f,
+ 0x8950, 0x8951, 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957,
+ 0x8958, 0x8959, 0x895a, 0x895b, 0x895c, 0x895d, 0x895e, 0x895f,
+ 0x8960, 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967,
+ 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f,
+ 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977,
+ 0x8978, 0x8979, 0x897a, 0x897b, 0x897c, 0x897d, 0x897e, 0x897f,
+ 0x8980, 0x8981, 0x8982, 0x8983, 0x8984, 0x8985, 0x8986, 0x8987, /* 0x8980 */
+ 0x8988, 0x8989, 0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f,
+ 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997,
+ 0x8998, 0x8999, 0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f,
+ 0x89a0, 0x89a1, 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7,
+ 0x89a8, 0x89a9, 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af,
+ 0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7,
+ 0x89b8, 0x89b9, 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf,
+ 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, /* 0x89c0 */
+ 0x89c8, 0x89c9, 0x89ca, 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf,
+ 0x89d0, 0x89d1, 0x89d2, 0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7,
+ 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, 0x89de, 0x89df,
+ 0x89e0, 0x89e1, 0x89e2, 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7,
+ 0x89e8, 0x89e9, 0x89ea, 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef,
+ 0x89f0, 0x89f1, 0x89f2, 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7,
+ 0x89f8, 0x89f9, 0x89fa, 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x89ff,
+ 0x8a00, 0x8a01, 0x8a02, 0x8a03, 0x8a04, 0x8a05, 0x8a06, 0x8a07, /* 0x8a00 */
+ 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0d, 0x8a0e, 0x8a0f,
+ 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15, 0x8a16, 0x8a17,
+ 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, 0x8a1d, 0x8a1e, 0x8a1f,
+ 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25, 0x8a26, 0x8a27,
+ 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d, 0x8a2e, 0x8a2f,
+ 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35, 0x8a36, 0x8a37,
+ 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d, 0x8a3e, 0x8a3f,
+ 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46, 0x8a47, /* 0x8a40 */
+ 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f,
+ 0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57,
+ 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f,
+ 0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67,
+ 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f,
+ 0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77,
+ 0x8a78, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f,
+ 0x8a80, 0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, /* 0x8a80 */
+ 0x8a88, 0x8a89, 0x8a8a, 0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f,
+ 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, 0x8a95, 0x8a96, 0x8a97,
+ 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f,
+ 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7,
+ 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8aad, 0x8aae, 0x8aaf,
+ 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7,
+ 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc, 0x8abd, 0x8abe, 0x8abf,
+ 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, /* 0x8ac0 */
+ 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc, 0x8acd, 0x8ace, 0x8acf,
+ 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7,
+ 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add, 0x8ade, 0x8adf,
+ 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7,
+ 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef,
+ 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0x8af5, 0x8af6, 0x8af7,
+ 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, 0x8afe, 0x8aff,
+ 0x8b00, 0x8b01, 0x8b02, 0x8b03, 0x8b04, 0x8b05, 0x8b06, 0x8b07, /* 0x8b00 */
+ 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c, 0x8b0d, 0x8b0e, 0x8b0f,
+ 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14, 0x8b15, 0x8b16, 0x8b17,
+ 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c, 0x8b1d, 0x8b1e, 0x8b1f,
+ 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x8b24, 0x8b25, 0x8b26, 0x8b27,
+ 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2d, 0x8b2e, 0x8b2f,
+ 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, 0x8b35, 0x8b36, 0x8b37,
+ 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, 0x8b3d, 0x8b3e, 0x8b3f,
+ 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0x8b47, /* 0x8b40 */
+ 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f,
+ 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0x8b56, 0x8b57,
+ 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, 0x8b5e, 0x8b5f,
+ 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, 0x8b66, 0x8b67,
+ 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d, 0x8b6e, 0x8b6f,
+ 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77,
+ 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f,
+ 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x8b87, /* 0x8b80 */
+ 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, 0x8b8f,
+ 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, 0x8b97,
+ 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, 0x8b9f,
+ 0x8ba0, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, 0x8ba7,
+ 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae, 0x8baf,
+ 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, 0x8bb7,
+ 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8bbe, 0x8bbf,
+ 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, 0x8bc7, /* 0x8bc0 */
+ 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, 0x8bcd, 0x8bce, 0x8bcf,
+ 0x8bd0, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7,
+ 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf,
+ 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7,
+ 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0x8bec, 0x8bed, 0x8bee, 0x8bef,
+ 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7,
+ 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, 0x8bff,
+ 0x8c00, 0x8c01, 0x8c02, 0x8c03, 0x8c04, 0x8c05, 0x8c06, 0x8c07, /* 0x8c00 */
+ 0x8c08, 0x8c09, 0x8c0a, 0x8c0b, 0x8c0c, 0x8c0d, 0x8c0e, 0x8c0f,
+ 0x8c10, 0x8c11, 0x8c12, 0x8c13, 0x8c14, 0x8c15, 0x8c16, 0x8c17,
+ 0x8c18, 0x8c19, 0x8c1a, 0x8c1b, 0x8c1c, 0x8c1d, 0x8c1e, 0x8c1f,
+ 0x8c20, 0x8c21, 0x8c22, 0x8c23, 0x8c24, 0x8c25, 0x8c26, 0x8c27,
+ 0x8c28, 0x8c29, 0x8c2a, 0x8c2b, 0x8c2c, 0x8c2d, 0x8c2e, 0x8c2f,
+ 0x8c30, 0x8c31, 0x8c32, 0x8c33, 0x8c34, 0x8c35, 0x8c36, 0x8c37,
+ 0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f,
+ 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, /* 0x8c40 */
+ 0x8c48, 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f,
+ 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c55, 0x8c56, 0x8c57,
+ 0x8c58, 0x8c59, 0x8c5a, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f,
+ 0x8c60, 0x8c61, 0x8c62, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67,
+ 0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f,
+ 0x8c70, 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0x8c75, 0x8c76, 0x8c77,
+ 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8c7f,
+ 0x8c80, 0x8c81, 0x8c82, 0x8c83, 0x8c84, 0x8c85, 0x8c86, 0x8c87, /* 0x8c80 */
+ 0x8c88, 0x8c89, 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8d, 0x8c8e, 0x8c8f,
+ 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0x8c94, 0x8c95, 0x8c96, 0x8c97,
+ 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8c9e, 0x8c9f,
+ 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7,
+ 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x8cae, 0x8caf,
+ 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7,
+ 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf,
+ 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, /* 0x8cc0 */
+ 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf,
+ 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7,
+ 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf,
+ 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7,
+ 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef,
+ 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7,
+ 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8cff,
+ 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, 0x8d05, 0x8d06, 0x8d07, /* 0x8d00 */
+ 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0d, 0x8d0e, 0x8d0f,
+ 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, 0x8d16, 0x8d17,
+ 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d1d, 0x8d1e, 0x8d1f,
+ 0x8d20, 0x8d21, 0x8d22, 0x8d23, 0x8d24, 0x8d25, 0x8d26, 0x8d27,
+ 0x8d28, 0x8d29, 0x8d2a, 0x8d2b, 0x8d2c, 0x8d2d, 0x8d2e, 0x8d2f,
+ 0x8d30, 0x8d31, 0x8d32, 0x8d33, 0x8d34, 0x8d35, 0x8d36, 0x8d37,
+ 0x8d38, 0x8d39, 0x8d3a, 0x8d3b, 0x8d3c, 0x8d3d, 0x8d3e, 0x8d3f,
+ 0x8d40, 0x8d41, 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, /* 0x8d40 */
+ 0x8d48, 0x8d49, 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f,
+ 0x8d50, 0x8d51, 0x8d52, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57,
+ 0x8d58, 0x8d59, 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f,
+ 0x8d60, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67,
+ 0x8d68, 0x8d69, 0x8d6a, 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f,
+ 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77,
+ 0x8d78, 0x8d79, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f,
+ 0x8d80, 0x8d81, 0x8d82, 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, /* 0x8d80 */
+ 0x8d88, 0x8d89, 0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f,
+ 0x8d90, 0x8d91, 0x8d92, 0x8d93, 0x8d94, 0x8d95, 0x8d96, 0x8d97,
+ 0x8d98, 0x8d99, 0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8d9f,
+ 0x8da0, 0x8da1, 0x8da2, 0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7,
+ 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf,
+ 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0x8db4, 0x8db5, 0x8db6, 0x8db7,
+ 0x8db8, 0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf,
+ 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, /* 0x8dc0 */
+ 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf,
+ 0x8dd0, 0x8dd1, 0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7,
+ 0x8dd8, 0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf,
+ 0x8de0, 0x8de1, 0x8de2, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7,
+ 0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def,
+ 0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7,
+ 0x8df8, 0x8df9, 0x8dfa, 0x8dfb, 0x8dfc, 0x8dfd, 0x8dfe, 0x8dff,
+ 0x8e00, 0x8e01, 0x8e02, 0x8e03, 0x8e04, 0x8e05, 0x8e06, 0x8e07, /* 0x8e00 */
+ 0x8e08, 0x8e09, 0x8e0a, 0x8e0b, 0x8e0c, 0x8e0d, 0x8e0e, 0x8e0f,
+ 0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e14, 0x8e15, 0x8e16, 0x8e17,
+ 0x8e18, 0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e1d, 0x8e1e, 0x8e1f,
+ 0x8e20, 0x8e21, 0x8e22, 0x8e23, 0x8e24, 0x8e25, 0x8e26, 0x8e27,
+ 0x8e28, 0x8e29, 0x8e2a, 0x8e2b, 0x8e2c, 0x8e2d, 0x8e2e, 0x8e2f,
+ 0x8e30, 0x8e31, 0x8e32, 0x8e33, 0x8e34, 0x8e35, 0x8e36, 0x8e37,
+ 0x8e38, 0x8e39, 0x8e3a, 0x8e3b, 0x8e3c, 0x8e3d, 0x8e3e, 0x8e3f,
+ 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, 0x8e47, /* 0x8e40 */
+ 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f,
+ 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57,
+ 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f,
+ 0x8e60, 0x8e61, 0x8e62, 0x8e63, 0x8e64, 0x8e65, 0x8e66, 0x8e67,
+ 0x8e68, 0x8e69, 0x8e6a, 0x8e6b, 0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f,
+ 0x8e70, 0x8e71, 0x8e72, 0x8e73, 0x8e74, 0x8e75, 0x8e76, 0x8e77,
+ 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7c, 0x8e7d, 0x8e7e, 0x8e7f,
+ 0x8e80, 0x8e81, 0x8e82, 0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, /* 0x8e80 */
+ 0x8e88, 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e8f,
+ 0x8e90, 0x8e91, 0x8e92, 0x8e93, 0x8e94, 0x8e95, 0x8e96, 0x8e97,
+ 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f,
+ 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7,
+ 0x8ea8, 0x8ea9, 0x8eaa, 0x8eab, 0x8eac, 0x8ead, 0x8eae, 0x8eaf,
+ 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7,
+ 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf,
+ 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, /* 0x8ec0 */
+ 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf,
+ 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7,
+ 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, 0x8edd, 0x8ede, 0x8edf,
+ 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, 0x8ee5, 0x8ee6, 0x8ee7,
+ 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0x8eee, 0x8eef,
+ 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7,
+ 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8eff,
+ 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04, 0x8f05, 0x8f06, 0x8f07, /* 0x8f00 */
+ 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c, 0x8f0d, 0x8f0e, 0x8f0f,
+ 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14, 0x8f15, 0x8f16, 0x8f17,
+ 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c, 0x8f1d, 0x8f1e, 0x8f1f,
+ 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x8f24, 0x8f25, 0x8f26, 0x8f27,
+ 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f2f,
+ 0x8f30, 0x8f31, 0x8f32, 0x8f33, 0x8f34, 0x8f35, 0x8f36, 0x8f37,
+ 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, 0x8f3c, 0x8f3d, 0x8f3e, 0x8f3f,
+ 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, /* 0x8f40 */
+ 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, 0x8f4e, 0x8f4f,
+ 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57,
+ 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f,
+ 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, 0x8f66, 0x8f67,
+ 0x8f68, 0x8f69, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d, 0x8f6e, 0x8f6f,
+ 0x8f70, 0x8f71, 0x8f72, 0x8f73, 0x8f74, 0x8f75, 0x8f76, 0x8f77,
+ 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0x8f7f,
+ 0x8f80, 0x8f81, 0x8f82, 0x8f83, 0x8f84, 0x8f85, 0x8f86, 0x8f87, /* 0x8f80 */
+ 0x8f88, 0x8f89, 0x8f8a, 0x8f8b, 0x8f8c, 0x8f8d, 0x8f8e, 0x8f8f,
+ 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, 0x8f97,
+ 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, 0x8f9f,
+ 0x8fa0, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7,
+ 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x8fae, 0x8faf,
+ 0x8fb0, 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb6, 0x8fb7,
+ 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe, 0x8fbf,
+ 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6, 0x8fc7, /* 0x8fc0 */
+ 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fce, 0x8fcf,
+ 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0x8fd6, 0x8fd7,
+ 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde, 0x8fdf,
+ 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe6, 0x8fe7,
+ 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fec, 0x8fed, 0x8fee, 0x8fef,
+ 0x8ff0, 0x8ff1, 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ff7,
+ 0x8ff8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0x8ffe, 0x8fff,
+ 0x9000, 0x9001, 0x9002, 0x9003, 0x9004, 0x9005, 0x9006, 0x9007, /* 0x9000 */
+ 0x9008, 0x9009, 0x900a, 0x900b, 0x900c, 0x900d, 0x900e, 0x900f,
+ 0x9010, 0x9011, 0x9012, 0x9013, 0x9014, 0x9015, 0x9016, 0x9017,
+ 0x9018, 0x9019, 0x901a, 0x901b, 0x901c, 0x901d, 0x901e, 0x901f,
+ 0x9020, 0x9021, 0x9022, 0x9023, 0x9024, 0x9025, 0x9026, 0x9027,
+ 0x9028, 0x9029, 0x902a, 0x902b, 0x902c, 0x902d, 0x902e, 0x902f,
+ 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, 0x9035, 0x9036, 0x9037,
+ 0x9038, 0x9039, 0x903a, 0x903b, 0x903c, 0x903d, 0x903e, 0x903f,
+ 0x9040, 0x9041, 0x9042, 0x9043, 0x9044, 0x9045, 0x9046, 0x9047, /* 0x9040 */
+ 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904d, 0x904e, 0x904f,
+ 0x9050, 0x9051, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0x9057,
+ 0x9058, 0x9059, 0x905a, 0x905b, 0x905c, 0x905d, 0x905e, 0x905f,
+ 0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067,
+ 0x9068, 0x9069, 0x906a, 0x906b, 0x906c, 0x906d, 0x906e, 0x906f,
+ 0x9070, 0x9071, 0x9072, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077,
+ 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907d, 0x907e, 0x907f,
+ 0x9080, 0x9081, 0x9082, 0x9083, 0x9084, 0x9085, 0x9086, 0x9087, /* 0x9080 */
+ 0x9088, 0x9089, 0x908a, 0x908b, 0x908c, 0x908d, 0x908e, 0x908f,
+ 0x9090, 0x9091, 0x9092, 0x9093, 0x9094, 0x9095, 0x9096, 0x9097,
+ 0x9098, 0x9099, 0x909a, 0x909b, 0x909c, 0x909d, 0x909e, 0x909f,
+ 0x90a0, 0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7,
+ 0x90a8, 0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af,
+ 0x90b0, 0x90b1, 0x90b2, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7,
+ 0x90b8, 0x90b9, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0x90bf,
+ 0x90c0, 0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, 0x90c7, /* 0x90c0 */
+ 0x90c8, 0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0x90ce, 0x90cf,
+ 0x90d0, 0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0x90d7,
+ 0x90d8, 0x90d9, 0x90da, 0x90db, 0x90dc, 0x90dd, 0x90de, 0x90df,
+ 0x90e0, 0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7,
+ 0x90e8, 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef,
+ 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7,
+ 0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x90ff,
+ 0x9100, 0x9101, 0x9102, 0x9103, 0x9104, 0x9105, 0x9106, 0x9107, /* 0x9100 */
+ 0x9108, 0x9109, 0x910a, 0x910b, 0x910c, 0x910d, 0x910e, 0x910f,
+ 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, 0x9115, 0x9116, 0x9117,
+ 0x9118, 0x9119, 0x911a, 0x911b, 0x911c, 0x911d, 0x911e, 0x911f,
+ 0x9120, 0x9121, 0x9122, 0x9123, 0x9124, 0x9125, 0x9126, 0x9127,
+ 0x9128, 0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x912f,
+ 0x9130, 0x9131, 0x9132, 0x9133, 0x9134, 0x9135, 0x9136, 0x9137,
+ 0x9138, 0x9139, 0x913a, 0x913b, 0x913c, 0x913d, 0x913e, 0x913f,
+ 0x9140, 0x9141, 0x9142, 0x9143, 0x9144, 0x9145, 0x9146, 0x9147, /* 0x9140 */
+ 0x9148, 0x9149, 0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f,
+ 0x9150, 0x9151, 0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157,
+ 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, 0x915f,
+ 0x9160, 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167,
+ 0x9168, 0x9169, 0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f,
+ 0x9170, 0x9171, 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177,
+ 0x9178, 0x9179, 0x917a, 0x917b, 0x917c, 0x917d, 0x917e, 0x917f,
+ 0x9180, 0x9181, 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0x9187, /* 0x9180 */
+ 0x9188, 0x9189, 0x918a, 0x918b, 0x918c, 0x918d, 0x918e, 0x918f,
+ 0x9190, 0x9191, 0x9192, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197,
+ 0x9198, 0x9199, 0x919a, 0x919b, 0x919c, 0x919d, 0x919e, 0x919f,
+ 0x91a0, 0x91a1, 0x91a2, 0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7,
+ 0x91a8, 0x91a9, 0x91aa, 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af,
+ 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7,
+ 0x91b8, 0x91b9, 0x91ba, 0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf,
+ 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, /* 0x91c0 */
+ 0x91c8, 0x91c9, 0x91ca, 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf,
+ 0x91d0, 0x91d1, 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7,
+ 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0x91df,
+ 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7,
+ 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef,
+ 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7,
+ 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x91ff,
+ 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, 0x9206, 0x9207, /* 0x9200 */
+ 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d, 0x920e, 0x920f,
+ 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, 0x9216, 0x9217,
+ 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d, 0x921e, 0x921f,
+ 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x9225, 0x9226, 0x9227,
+ 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, 0x922d, 0x922e, 0x922f,
+ 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, 0x9235, 0x9236, 0x9237,
+ 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, 0x923d, 0x923e, 0x923f,
+ 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245, 0x9246, 0x9247, /* 0x9240 */
+ 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d, 0x924e, 0x924f,
+ 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, 0x9256, 0x9257,
+ 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d, 0x925e, 0x925f,
+ 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267,
+ 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, 0x926e, 0x926f,
+ 0x9270, 0x9271, 0x9272, 0x9273, 0x9274, 0x9275, 0x9276, 0x9277,
+ 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e, 0x927f,
+ 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, 0x9287, /* 0x9280 */
+ 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928e, 0x928f,
+ 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, 0x9297,
+ 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f,
+ 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7,
+ 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92ae, 0x92af,
+ 0x92b0, 0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7,
+ 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf,
+ 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, /* 0x92c0 */
+ 0x92c8, 0x92c9, 0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf,
+ 0x92d0, 0x92d1, 0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7,
+ 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df,
+ 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7,
+ 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef,
+ 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7,
+ 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff,
+ 0x9300, 0x9301, 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, /* 0x9300 */
+ 0x9308, 0x9309, 0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f,
+ 0x9310, 0x9311, 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317,
+ 0x9318, 0x9319, 0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f,
+ 0x9320, 0x9321, 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327,
+ 0x9328, 0x9329, 0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f,
+ 0x9330, 0x9331, 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337,
+ 0x9338, 0x9339, 0x933a, 0x933b, 0x933c, 0x933d, 0x933e, 0x933f,
+ 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, /* 0x9340 */
+ 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d, 0x934e, 0x934f,
+ 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357,
+ 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d, 0x935e, 0x935f,
+ 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367,
+ 0x9368, 0x9369, 0x936a, 0x936b, 0x936c, 0x936d, 0x936e, 0x936f,
+ 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377,
+ 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d, 0x937e, 0x937f,
+ 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, 0x9387, /* 0x9380 */
+ 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, 0x938e, 0x938f,
+ 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, 0x9397,
+ 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, 0x939e, 0x939f,
+ 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0x93a7,
+ 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0x93af,
+ 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6, 0x93b7,
+ 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be, 0x93bf,
+ 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6, 0x93c7, /* 0x93c0 */
+ 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93ce, 0x93cf,
+ 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0x93d7,
+ 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, 0x93df,
+ 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0x93e7,
+ 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, 0x93ef,
+ 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0x93f7,
+ 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, 0x93ff,
+ 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, 0x9407, /* 0x9400 */
+ 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x940e, 0x940f,
+ 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, 0x9416, 0x9417,
+ 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, 0x941e, 0x941f,
+ 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426, 0x9427,
+ 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, 0x942e, 0x942f,
+ 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, 0x9437,
+ 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943e, 0x943f,
+ 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, /* 0x9440 */
+ 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f,
+ 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457,
+ 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f,
+ 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467,
+ 0x9468, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, 0x946f,
+ 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477,
+ 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f,
+ 0x9480, 0x9481, 0x9482, 0x9483, 0x9484, 0x9485, 0x9486, 0x9487, /* 0x9480 */
+ 0x9488, 0x9489, 0x948a, 0x948b, 0x948c, 0x948d, 0x948e, 0x948f,
+ 0x9490, 0x9491, 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0x9497,
+ 0x9498, 0x9499, 0x949a, 0x949b, 0x949c, 0x949d, 0x949e, 0x949f,
+ 0x94a0, 0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6, 0x94a7,
+ 0x94a8, 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af,
+ 0x94b0, 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6, 0x94b7,
+ 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf,
+ 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, /* 0x94c0 */
+ 0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf,
+ 0x94d0, 0x94d1, 0x94d2, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7,
+ 0x94d8, 0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df,
+ 0x94e0, 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e6, 0x94e7,
+ 0x94e8, 0x94e9, 0x94ea, 0x94eb, 0x94ec, 0x94ed, 0x94ee, 0x94ef,
+ 0x94f0, 0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7,
+ 0x94f8, 0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd, 0x94fe, 0x94ff,
+ 0x9500, 0x9501, 0x9502, 0x9503, 0x9504, 0x9505, 0x9506, 0x9507, /* 0x9500 */
+ 0x9508, 0x9509, 0x950a, 0x950b, 0x950c, 0x950d, 0x950e, 0x950f,
+ 0x9510, 0x9511, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9517,
+ 0x9518, 0x9519, 0x951a, 0x951b, 0x951c, 0x951d, 0x951e, 0x951f,
+ 0x9520, 0x9521, 0x9522, 0x9523, 0x9524, 0x9525, 0x9526, 0x9527,
+ 0x9528, 0x9529, 0x952a, 0x952b, 0x952c, 0x952d, 0x952e, 0x952f,
+ 0x9530, 0x9531, 0x9532, 0x9533, 0x9534, 0x9535, 0x9536, 0x9537,
+ 0x9538, 0x9539, 0x953a, 0x953b, 0x953c, 0x953d, 0x953e, 0x953f,
+ 0x9540, 0x9541, 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, /* 0x9540 */
+ 0x9548, 0x9549, 0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f,
+ 0x9550, 0x9551, 0x9552, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557,
+ 0x9558, 0x9559, 0x955a, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f,
+ 0x9560, 0x9561, 0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567,
+ 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956d, 0x956e, 0x956f,
+ 0x9570, 0x9571, 0x9572, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577,
+ 0x9578, 0x9579, 0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x957f,
+ 0x9580, 0x9581, 0x9582, 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, /* 0x9580 */
+ 0x9588, 0x9589, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0x958f,
+ 0x9590, 0x9591, 0x9592, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597,
+ 0x9598, 0x9599, 0x959a, 0x959b, 0x959c, 0x959d, 0x959e, 0x959f,
+ 0x95a0, 0x95a1, 0x95a2, 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7,
+ 0x95a8, 0x95a9, 0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af,
+ 0x95b0, 0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7,
+ 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf,
+ 0x95c0, 0x95c1, 0x95c2, 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, /* 0x95c0 */
+ 0x95c8, 0x95c9, 0x95ca, 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf,
+ 0x95d0, 0x95d1, 0x95d2, 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7,
+ 0x95d8, 0x95d9, 0x95da, 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df,
+ 0x95e0, 0x95e1, 0x95e2, 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7,
+ 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef,
+ 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7,
+ 0x95f8, 0x95f9, 0x95fa, 0x95fb, 0x95fc, 0x95fd, 0x95fe, 0x95ff,
+ 0x9600, 0x9601, 0x9602, 0x9603, 0x9604, 0x9605, 0x9606, 0x9607, /* 0x9600 */
+ 0x9608, 0x9609, 0x960a, 0x960b, 0x960c, 0x960d, 0x960e, 0x960f,
+ 0x9610, 0x9611, 0x9612, 0x9613, 0x9614, 0x9615, 0x9616, 0x9617,
+ 0x9618, 0x9619, 0x961a, 0x961b, 0x961c, 0x961d, 0x961e, 0x961f,
+ 0x9620, 0x9621, 0x9622, 0x9623, 0x9624, 0x9625, 0x9626, 0x9627,
+ 0x9628, 0x9629, 0x962a, 0x962b, 0x962c, 0x962d, 0x962e, 0x962f,
+ 0x9630, 0x9631, 0x9632, 0x9633, 0x9634, 0x9635, 0x9636, 0x9637,
+ 0x9638, 0x9639, 0x963a, 0x963b, 0x963c, 0x963d, 0x963e, 0x963f,
+ 0x9640, 0x9641, 0x9642, 0x9643, 0x9644, 0x9645, 0x9646, 0x9647, /* 0x9640 */
+ 0x9648, 0x9649, 0x964a, 0x964b, 0x964c, 0x964d, 0x964e, 0x964f,
+ 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657,
+ 0x9658, 0x9659, 0x965a, 0x965b, 0x965c, 0x965d, 0x965e, 0x965f,
+ 0x9660, 0x9661, 0x9662, 0x9663, 0x9664, 0x9665, 0x9666, 0x9667,
+ 0x9668, 0x9669, 0x966a, 0x966b, 0x966c, 0x966d, 0x966e, 0x966f,
+ 0x9670, 0x9671, 0x9672, 0x9673, 0x9674, 0x9675, 0x9676, 0x9677,
+ 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x967f,
+ 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9685, 0x9686, 0x9687, /* 0x9680 */
+ 0x9688, 0x9689, 0x968a, 0x968b, 0x968c, 0x968d, 0x968e, 0x968f,
+ 0x9690, 0x9691, 0x9692, 0x9693, 0x9694, 0x9695, 0x9696, 0x9697,
+ 0x9698, 0x9699, 0x969a, 0x969b, 0x969c, 0x969d, 0x969e, 0x969f,
+ 0x96a0, 0x96a1, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7,
+ 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, 0x96ad, 0x96ae, 0x96af,
+ 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0x96b5, 0x96b6, 0x96b7,
+ 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc, 0x96bd, 0x96be, 0x96bf,
+ 0x96c0, 0x96c1, 0x96c2, 0x96c3, 0x96c4, 0x96c5, 0x96c6, 0x96c7, /* 0x96c0 */
+ 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0x96cd, 0x96ce, 0x96cf,
+ 0x96d0, 0x96d1, 0x96d2, 0x96d3, 0x96d4, 0x96d5, 0x96d6, 0x96d7,
+ 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df,
+ 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7,
+ 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec, 0x96ed, 0x96ee, 0x96ef,
+ 0x96f0, 0x96f1, 0x96f2, 0x96f3, 0x96f4, 0x96f5, 0x96f6, 0x96f7,
+ 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96fe, 0x96ff,
+ 0x9700, 0x9701, 0x9702, 0x9703, 0x9704, 0x9705, 0x9706, 0x9707, /* 0x9700 */
+ 0x9708, 0x9709, 0x970a, 0x970b, 0x970c, 0x970d, 0x970e, 0x970f,
+ 0x9710, 0x9711, 0x9712, 0x9713, 0x9714, 0x9715, 0x9716, 0x9717,
+ 0x9718, 0x9719, 0x971a, 0x971b, 0x971c, 0x971d, 0x971e, 0x971f,
+ 0x9720, 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727,
+ 0x9728, 0x9729, 0x972a, 0x972b, 0x972c, 0x972d, 0x972e, 0x972f,
+ 0x9730, 0x9731, 0x9732, 0x9733, 0x9734, 0x9735, 0x9736, 0x9737,
+ 0x9738, 0x9739, 0x973a, 0x973b, 0x973c, 0x973d, 0x973e, 0x973f,
+ 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, /* 0x9740 */
+ 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f,
+ 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, 0x9756, 0x9757,
+ 0x9758, 0x9759, 0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f,
+ 0x9760, 0x9761, 0x9762, 0x9763, 0x9764, 0x9765, 0x9766, 0x9767,
+ 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, 0x976f,
+ 0x9770, 0x9771, 0x9772, 0x9773, 0x9774, 0x9775, 0x9776, 0x9777,
+ 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d, 0x977e, 0x977f,
+ 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, 0x9787, /* 0x9780 */
+ 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, 0x978d, 0x978e, 0x978f,
+ 0x9790, 0x9791, 0x9792, 0x9793, 0x9794, 0x9795, 0x9796, 0x9797,
+ 0x9798, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, 0x979e, 0x979f,
+ 0x97a0, 0x97a1, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6, 0x97a7,
+ 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae, 0x97af,
+ 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6, 0x97b7,
+ 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, 0x97bf,
+ 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, 0x97c7, /* 0x97c0 */
+ 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, 0x97cf,
+ 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7,
+ 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, 0x97df,
+ 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6, 0x97e7,
+ 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee, 0x97ef,
+ 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6, 0x97f7,
+ 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, 0x97ff,
+ 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, 0x9806, 0x9807, /* 0x9800 */
+ 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, 0x980e, 0x980f,
+ 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, 0x9817,
+ 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e, 0x981f,
+ 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, 0x9827,
+ 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e, 0x982f,
+ 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, 0x9837,
+ 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e, 0x983f,
+ 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, /* 0x9840 */
+ 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f,
+ 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857,
+ 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f,
+ 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867,
+ 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f,
+ 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877,
+ 0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x987f,
+ 0x9880, 0x9881, 0x9882, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, /* 0x9880 */
+ 0x9888, 0x9889, 0x988a, 0x988b, 0x988c, 0x988d, 0x988e, 0x988f,
+ 0x9890, 0x9891, 0x9892, 0x9893, 0x9894, 0x9895, 0x9896, 0x9897,
+ 0x9898, 0x9899, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f,
+ 0x98a0, 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7,
+ 0x98a8, 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af,
+ 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7,
+ 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf,
+ 0x98c0, 0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, /* 0x98c0 */
+ 0x98c8, 0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf,
+ 0x98d0, 0x98d1, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7,
+ 0x98d8, 0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df,
+ 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7,
+ 0x98e8, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef,
+ 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7,
+ 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x98ff,
+ 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, 0x9907, /* 0x9900 */
+ 0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990d, 0x990e, 0x990f,
+ 0x9910, 0x9911, 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917,
+ 0x9918, 0x9919, 0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f,
+ 0x9920, 0x9921, 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927,
+ 0x9928, 0x9929, 0x992a, 0x992b, 0x992c, 0x992d, 0x992e, 0x992f,
+ 0x9930, 0x9931, 0x9932, 0x9933, 0x9934, 0x9935, 0x9936, 0x9937,
+ 0x9938, 0x9939, 0x993a, 0x993b, 0x993c, 0x993d, 0x993e, 0x993f,
+ 0x9940, 0x9941, 0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, /* 0x9940 */
+ 0x9948, 0x9949, 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f,
+ 0x9950, 0x9951, 0x9952, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957,
+ 0x9958, 0x9959, 0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f,
+ 0x9960, 0x9961, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967,
+ 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f,
+ 0x9970, 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977,
+ 0x9978, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x997f,
+ 0x9980, 0x9981, 0x9982, 0x9983, 0x9984, 0x9985, 0x9986, 0x9987, /* 0x9980 */
+ 0x9988, 0x9989, 0x998a, 0x998b, 0x998c, 0x998d, 0x998e, 0x998f,
+ 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997,
+ 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f,
+ 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7,
+ 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af,
+ 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7,
+ 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf,
+ 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, /* 0x99c0 */
+ 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf,
+ 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7,
+ 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df,
+ 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7,
+ 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef,
+ 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7,
+ 0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff,
+ 0x9a00, 0x9a01, 0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, /* 0x9a00 */
+ 0x9a08, 0x9a09, 0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f,
+ 0x9a10, 0x9a11, 0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17,
+ 0x9a18, 0x9a19, 0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f,
+ 0x9a20, 0x9a21, 0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27,
+ 0x9a28, 0x9a29, 0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f,
+ 0x9a30, 0x9a31, 0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37,
+ 0x9a38, 0x9a39, 0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f,
+ 0x9a40, 0x9a41, 0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, /* 0x9a40 */
+ 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f,
+ 0x9a50, 0x9a51, 0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57,
+ 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f,
+ 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67,
+ 0x9a68, 0x9a69, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f,
+ 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, 0x9a77,
+ 0x9a78, 0x9a79, 0x9a7a, 0x9a7b, 0x9a7c, 0x9a7d, 0x9a7e, 0x9a7f,
+ 0x9a80, 0x9a81, 0x9a82, 0x9a83, 0x9a84, 0x9a85, 0x9a86, 0x9a87, /* 0x9a80 */
+ 0x9a88, 0x9a89, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8d, 0x9a8e, 0x9a8f,
+ 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, 0x9a95, 0x9a96, 0x9a97,
+ 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9e, 0x9a9f,
+ 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0x9aa7,
+ 0x9aa8, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, 0x9aae, 0x9aaf,
+ 0x9ab0, 0x9ab1, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab7,
+ 0x9ab8, 0x9ab9, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf,
+ 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4, 0x9ac5, 0x9ac6, 0x9ac7, /* 0x9ac0 */
+ 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc, 0x9acd, 0x9ace, 0x9acf,
+ 0x9ad0, 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0x9ad6, 0x9ad7,
+ 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add, 0x9ade, 0x9adf,
+ 0x9ae0, 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae6, 0x9ae7,
+ 0x9ae8, 0x9ae9, 0x9aea, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0x9aef,
+ 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4, 0x9af5, 0x9af6, 0x9af7,
+ 0x9af8, 0x9af9, 0x9afa, 0x9afb, 0x9afc, 0x9afd, 0x9afe, 0x9aff,
+ 0x9b00, 0x9b01, 0x9b02, 0x9b03, 0x9b04, 0x9b05, 0x9b06, 0x9b07, /* 0x9b00 */
+ 0x9b08, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b0f,
+ 0x9b10, 0x9b11, 0x9b12, 0x9b13, 0x9b14, 0x9b15, 0x9b16, 0x9b17,
+ 0x9b18, 0x9b19, 0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b1f,
+ 0x9b20, 0x9b21, 0x9b22, 0x9b23, 0x9b24, 0x9b25, 0x9b26, 0x9b27,
+ 0x9b28, 0x9b29, 0x9b2a, 0x9b2b, 0x9b2c, 0x9b2d, 0x9b2e, 0x9b2f,
+ 0x9b30, 0x9b31, 0x9b32, 0x9b33, 0x9b34, 0x9b35, 0x9b36, 0x9b37,
+ 0x9b38, 0x9b39, 0x9b3a, 0x9b3b, 0x9b3c, 0x9b3d, 0x9b3e, 0x9b3f,
+ 0x9b40, 0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45, 0x9b46, 0x9b47, /* 0x9b40 */
+ 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4d, 0x9b4e, 0x9b4f,
+ 0x9b50, 0x9b51, 0x9b52, 0x9b53, 0x9b54, 0x9b55, 0x9b56, 0x9b57,
+ 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f,
+ 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, 0x9b66, 0x9b67,
+ 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f,
+ 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75, 0x9b76, 0x9b77,
+ 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, 0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f,
+ 0x9b80, 0x9b81, 0x9b82, 0x9b83, 0x9b84, 0x9b85, 0x9b86, 0x9b87, /* 0x9b80 */
+ 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f,
+ 0x9b90, 0x9b91, 0x9b92, 0x9b93, 0x9b94, 0x9b95, 0x9b96, 0x9b97,
+ 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f,
+ 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7,
+ 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, 0x9baf,
+ 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7,
+ 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf,
+ 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, /* 0x9bc0 */
+ 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0x9bcf,
+ 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7,
+ 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0x9bde, 0x9bdf,
+ 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, 0x9be7,
+ 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, 0x9bee, 0x9bef,
+ 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7,
+ 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe, 0x9bff,
+ 0x9c00, 0x9c01, 0x9c02, 0x9c03, 0x9c04, 0x9c05, 0x9c06, 0x9c07, /* 0x9c00 */
+ 0x9c08, 0x9c09, 0x9c0a, 0x9c0b, 0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f,
+ 0x9c10, 0x9c11, 0x9c12, 0x9c13, 0x9c14, 0x9c15, 0x9c16, 0x9c17,
+ 0x9c18, 0x9c19, 0x9c1a, 0x9c1b, 0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f,
+ 0x9c20, 0x9c21, 0x9c22, 0x9c23, 0x9c24, 0x9c25, 0x9c26, 0x9c27,
+ 0x9c28, 0x9c29, 0x9c2a, 0x9c2b, 0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f,
+ 0x9c30, 0x9c31, 0x9c32, 0x9c33, 0x9c34, 0x9c35, 0x9c36, 0x9c37,
+ 0x9c38, 0x9c39, 0x9c3a, 0x9c3b, 0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f,
+ 0x9c40, 0x9c41, 0x9c42, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, /* 0x9c40 */
+ 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f,
+ 0x9c50, 0x9c51, 0x9c52, 0x9c53, 0x9c54, 0x9c55, 0x9c56, 0x9c57,
+ 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f,
+ 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67,
+ 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f,
+ 0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77,
+ 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d, 0x9c7e, 0x9c7f,
+ 0x9c80, 0x9c81, 0x9c82, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, /* 0x9c80 */
+ 0x9c88, 0x9c89, 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8d, 0x9c8e, 0x9c8f,
+ 0x9c90, 0x9c91, 0x9c92, 0x9c93, 0x9c94, 0x9c95, 0x9c96, 0x9c97,
+ 0x9c98, 0x9c99, 0x9c9a, 0x9c9b, 0x9c9c, 0x9c9d, 0x9c9e, 0x9c9f,
+ 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7,
+ 0x9ca8, 0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, 0x9caf,
+ 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7,
+ 0x9cb8, 0x9cb9, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cbe, 0x9cbf,
+ 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, /* 0x9cc0 */
+ 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf,
+ 0x9cd0, 0x9cd1, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7,
+ 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, 0x9cdf,
+ 0x9ce0, 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7,
+ 0x9ce8, 0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef,
+ 0x9cf0, 0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7,
+ 0x9cf8, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff,
+ 0x9d00, 0x9d01, 0x9d02, 0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, /* 0x9d00 */
+ 0x9d08, 0x9d09, 0x9d0a, 0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f,
+ 0x9d10, 0x9d11, 0x9d12, 0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17,
+ 0x9d18, 0x9d19, 0x9d1a, 0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f,
+ 0x9d20, 0x9d21, 0x9d22, 0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27,
+ 0x9d28, 0x9d29, 0x9d2a, 0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f,
+ 0x9d30, 0x9d31, 0x9d32, 0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37,
+ 0x9d38, 0x9d39, 0x9d3a, 0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f,
+ 0x9d40, 0x9d41, 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, /* 0x9d40 */
+ 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f,
+ 0x9d50, 0x9d51, 0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57,
+ 0x9d58, 0x9d59, 0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f,
+ 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67,
+ 0x9d68, 0x9d69, 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f,
+ 0x9d70, 0x9d71, 0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77,
+ 0x9d78, 0x9d79, 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f,
+ 0x9d80, 0x9d81, 0x9d82, 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, /* 0x9d80 */
+ 0x9d88, 0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f,
+ 0x9d90, 0x9d91, 0x9d92, 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97,
+ 0x9d98, 0x9d99, 0x9d9a, 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f,
+ 0x9da0, 0x9da1, 0x9da2, 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7,
+ 0x9da8, 0x9da9, 0x9daa, 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf,
+ 0x9db0, 0x9db1, 0x9db2, 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7,
+ 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf,
+ 0x9dc0, 0x9dc1, 0x9dc2, 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, /* 0x9dc0 */
+ 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf,
+ 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7,
+ 0x9dd8, 0x9dd9, 0x9dda, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf,
+ 0x9de0, 0x9de1, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7,
+ 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def,
+ 0x9df0, 0x9df1, 0x9df2, 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7,
+ 0x9df8, 0x9df9, 0x9dfa, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff,
+ 0x9e00, 0x9e01, 0x9e02, 0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, /* 0x9e00 */
+ 0x9e08, 0x9e09, 0x9e0a, 0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f,
+ 0x9e10, 0x9e11, 0x9e12, 0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17,
+ 0x9e18, 0x9e19, 0x9e1a, 0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e1f,
+ 0x9e20, 0x9e21, 0x9e22, 0x9e23, 0x9e24, 0x9e25, 0x9e26, 0x9e27,
+ 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e2d, 0x9e2e, 0x9e2f,
+ 0x9e30, 0x9e31, 0x9e32, 0x9e33, 0x9e34, 0x9e35, 0x9e36, 0x9e37,
+ 0x9e38, 0x9e39, 0x9e3a, 0x9e3b, 0x9e3c, 0x9e3d, 0x9e3e, 0x9e3f,
+ 0x9e40, 0x9e41, 0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, /* 0x9e40 */
+ 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f,
+ 0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57,
+ 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f,
+ 0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67,
+ 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, 0x9e6f,
+ 0x9e70, 0x9e71, 0x9e72, 0x9e73, 0x9e74, 0x9e75, 0x9e76, 0x9e77,
+ 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e7e, 0x9e7f,
+ 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e87, /* 0x9e80 */
+ 0x9e88, 0x9e89, 0x9e8a, 0x9e8b, 0x9e8c, 0x9e8d, 0x9e8e, 0x9e8f,
+ 0x9e90, 0x9e91, 0x9e92, 0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97,
+ 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9d, 0x9e9e, 0x9e9f,
+ 0x9ea0, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7,
+ 0x9ea8, 0x9ea9, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf,
+ 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7,
+ 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf,
+ 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4, 0x9ec5, 0x9ec6, 0x9ec7, /* 0x9ec0 */
+ 0x9ec8, 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc, 0x9ecd, 0x9ece, 0x9ecf,
+ 0x9ed0, 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4, 0x9ed5, 0x9ed6, 0x9ed7,
+ 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf,
+ 0x9ee0, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4, 0x9ee5, 0x9ee6, 0x9ee7,
+ 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9eef,
+ 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7,
+ 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd, 0x9efe, 0x9eff,
+ 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x9f06, 0x9f07, /* 0x9f00 */
+ 0x9f08, 0x9f09, 0x9f0a, 0x9f0b, 0x9f0c, 0x9f0d, 0x9f0e, 0x9f0f,
+ 0x9f10, 0x9f11, 0x9f12, 0x9f13, 0x9f14, 0x9f15, 0x9f16, 0x9f17,
+ 0x9f18, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1c, 0x9f1d, 0x9f1e, 0x9f1f,
+ 0x9f20, 0x9f21, 0x9f22, 0x9f23, 0x9f24, 0x9f25, 0x9f26, 0x9f27,
+ 0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2c, 0x9f2d, 0x9f2e, 0x9f2f,
+ 0x9f30, 0x9f31, 0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f37,
+ 0x9f38, 0x9f39, 0x9f3a, 0x9f3b, 0x9f3c, 0x9f3d, 0x9f3e, 0x9f3f,
+ 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, /* 0x9f40 */
+ 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f,
+ 0x9f50, 0x9f51, 0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57,
+ 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f,
+ 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67,
+ 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f,
+ 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77,
+ 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f7f,
+ 0x9f80, 0x9f81, 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, /* 0x9f80 */
+ 0x9f88, 0x9f89, 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0x9f8f,
+ 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, 0x9f96, 0x9f97,
+ 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, 0x9f9e, 0x9f9f,
+ 0x9fa0, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7,
+ 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae, 0x9faf,
+ 0x9fb0, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0x9fb6, 0x9fb7,
+ 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0x9fbe, 0x9fbf,
+ 0x9fc0, 0x9fc1, 0x9fc2, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0x9fc7, /* 0x9fc0 */
+ 0x9fc8, 0x9fc9, 0x9fca, 0x9fcb, 0x9fcc, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa000, 0xa001, 0xa002, 0xa003, 0xa004, 0xa005, 0xa006, 0xa007, /* 0xa000 */
+ 0xa008, 0xa009, 0xa00a, 0xa00b, 0xa00c, 0xa00d, 0xa00e, 0xa00f,
+ 0xa010, 0xa011, 0xa012, 0xa013, 0xa014, 0xa015, 0xa016, 0xa017,
+ 0xa018, 0xa019, 0xa01a, 0xa01b, 0xa01c, 0xa01d, 0xa01e, 0xa01f,
+ 0xa020, 0xa021, 0xa022, 0xa023, 0xa024, 0xa025, 0xa026, 0xa027,
+ 0xa028, 0xa029, 0xa02a, 0xa02b, 0xa02c, 0xa02d, 0xa02e, 0xa02f,
+ 0xa030, 0xa031, 0xa032, 0xa033, 0xa034, 0xa035, 0xa036, 0xa037,
+ 0xa038, 0xa039, 0xa03a, 0xa03b, 0xa03c, 0xa03d, 0xa03e, 0xa03f,
+ 0xa040, 0xa041, 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, /* 0xa040 */
+ 0xa048, 0xa049, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xa04e, 0xa04f,
+ 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, 0xa057,
+ 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, 0xa05e, 0xa05f,
+ 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, 0xa065, 0xa066, 0xa067,
+ 0xa068, 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f,
+ 0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa077,
+ 0xa078, 0xa079, 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa07e, 0xa07f,
+ 0xa080, 0xa081, 0xa082, 0xa083, 0xa084, 0xa085, 0xa086, 0xa087, /* 0xa080 */
+ 0xa088, 0xa089, 0xa08a, 0xa08b, 0xa08c, 0xa08d, 0xa08e, 0xa08f,
+ 0xa090, 0xa091, 0xa092, 0xa093, 0xa094, 0xa095, 0xa096, 0xa097,
+ 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xa09e, 0xa09f,
+ 0xa0a0, 0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7,
+ 0xa0a8, 0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af,
+ 0xa0b0, 0xa0b1, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7,
+ 0xa0b8, 0xa0b9, 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0be, 0xa0bf,
+ 0xa0c0, 0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, /* 0xa0c0 */
+ 0xa0c8, 0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf,
+ 0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xa0d7,
+ 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, 0xa0df,
+ 0xa0e0, 0xa0e1, 0xa0e2, 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e6, 0xa0e7,
+ 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef,
+ 0xa0f0, 0xa0f1, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7,
+ 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa0fe, 0xa0ff,
+ 0xa100, 0xa101, 0xa102, 0xa103, 0xa104, 0xa105, 0xa106, 0xa107, /* 0xa100 */
+ 0xa108, 0xa109, 0xa10a, 0xa10b, 0xa10c, 0xa10d, 0xa10e, 0xa10f,
+ 0xa110, 0xa111, 0xa112, 0xa113, 0xa114, 0xa115, 0xa116, 0xa117,
+ 0xa118, 0xa119, 0xa11a, 0xa11b, 0xa11c, 0xa11d, 0xa11e, 0xa11f,
+ 0xa120, 0xa121, 0xa122, 0xa123, 0xa124, 0xa125, 0xa126, 0xa127,
+ 0xa128, 0xa129, 0xa12a, 0xa12b, 0xa12c, 0xa12d, 0xa12e, 0xa12f,
+ 0xa130, 0xa131, 0xa132, 0xa133, 0xa134, 0xa135, 0xa136, 0xa137,
+ 0xa138, 0xa139, 0xa13a, 0xa13b, 0xa13c, 0xa13d, 0xa13e, 0xa13f,
+ 0xa140, 0xa141, 0xa142, 0xa143, 0xa144, 0xa145, 0xa146, 0xa147, /* 0xa140 */
+ 0xa148, 0xa149, 0xa14a, 0xa14b, 0xa14c, 0xa14d, 0xa14e, 0xa14f,
+ 0xa150, 0xa151, 0xa152, 0xa153, 0xa154, 0xa155, 0xa156, 0xa157,
+ 0xa158, 0xa159, 0xa15a, 0xa15b, 0xa15c, 0xa15d, 0xa15e, 0xa15f,
+ 0xa160, 0xa161, 0xa162, 0xa163, 0xa164, 0xa165, 0xa166, 0xa167,
+ 0xa168, 0xa169, 0xa16a, 0xa16b, 0xa16c, 0xa16d, 0xa16e, 0xa16f,
+ 0xa170, 0xa171, 0xa172, 0xa173, 0xa174, 0xa175, 0xa176, 0xa177,
+ 0xa178, 0xa179, 0xa17a, 0xa17b, 0xa17c, 0xa17d, 0xa17e, 0xa17f,
+ 0xa180, 0xa181, 0xa182, 0xa183, 0xa184, 0xa185, 0xa186, 0xa187, /* 0xa180 */
+ 0xa188, 0xa189, 0xa18a, 0xa18b, 0xa18c, 0xa18d, 0xa18e, 0xa18f,
+ 0xa190, 0xa191, 0xa192, 0xa193, 0xa194, 0xa195, 0xa196, 0xa197,
+ 0xa198, 0xa199, 0xa19a, 0xa19b, 0xa19c, 0xa19d, 0xa19e, 0xa19f,
+ 0xa1a0, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1a5, 0xa1a6, 0xa1a7,
+ 0xa1a8, 0xa1a9, 0xa1aa, 0xa1ab, 0xa1ac, 0xa1ad, 0xa1ae, 0xa1af,
+ 0xa1b0, 0xa1b1, 0xa1b2, 0xa1b3, 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7,
+ 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, 0xa1bc, 0xa1bd, 0xa1be, 0xa1bf,
+ 0xa1c0, 0xa1c1, 0xa1c2, 0xa1c3, 0xa1c4, 0xa1c5, 0xa1c6, 0xa1c7, /* 0xa1c0 */
+ 0xa1c8, 0xa1c9, 0xa1ca, 0xa1cb, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1cf,
+ 0xa1d0, 0xa1d1, 0xa1d2, 0xa1d3, 0xa1d4, 0xa1d5, 0xa1d6, 0xa1d7,
+ 0xa1d8, 0xa1d9, 0xa1da, 0xa1db, 0xa1dc, 0xa1dd, 0xa1de, 0xa1df,
+ 0xa1e0, 0xa1e1, 0xa1e2, 0xa1e3, 0xa1e4, 0xa1e5, 0xa1e6, 0xa1e7,
+ 0xa1e8, 0xa1e9, 0xa1ea, 0xa1eb, 0xa1ec, 0xa1ed, 0xa1ee, 0xa1ef,
+ 0xa1f0, 0xa1f1, 0xa1f2, 0xa1f3, 0xa1f4, 0xa1f5, 0xa1f6, 0xa1f7,
+ 0xa1f8, 0xa1f9, 0xa1fa, 0xa1fb, 0xa1fc, 0xa1fd, 0xa1fe, 0xa1ff,
+ 0xa200, 0xa201, 0xa202, 0xa203, 0xa204, 0xa205, 0xa206, 0xa207, /* 0xa200 */
+ 0xa208, 0xa209, 0xa20a, 0xa20b, 0xa20c, 0xa20d, 0xa20e, 0xa20f,
+ 0xa210, 0xa211, 0xa212, 0xa213, 0xa214, 0xa215, 0xa216, 0xa217,
+ 0xa218, 0xa219, 0xa21a, 0xa21b, 0xa21c, 0xa21d, 0xa21e, 0xa21f,
+ 0xa220, 0xa221, 0xa222, 0xa223, 0xa224, 0xa225, 0xa226, 0xa227,
+ 0xa228, 0xa229, 0xa22a, 0xa22b, 0xa22c, 0xa22d, 0xa22e, 0xa22f,
+ 0xa230, 0xa231, 0xa232, 0xa233, 0xa234, 0xa235, 0xa236, 0xa237,
+ 0xa238, 0xa239, 0xa23a, 0xa23b, 0xa23c, 0xa23d, 0xa23e, 0xa23f,
+ 0xa240, 0xa241, 0xa242, 0xa243, 0xa244, 0xa245, 0xa246, 0xa247, /* 0xa240 */
+ 0xa248, 0xa249, 0xa24a, 0xa24b, 0xa24c, 0xa24d, 0xa24e, 0xa24f,
+ 0xa250, 0xa251, 0xa252, 0xa253, 0xa254, 0xa255, 0xa256, 0xa257,
+ 0xa258, 0xa259, 0xa25a, 0xa25b, 0xa25c, 0xa25d, 0xa25e, 0xa25f,
+ 0xa260, 0xa261, 0xa262, 0xa263, 0xa264, 0xa265, 0xa266, 0xa267,
+ 0xa268, 0xa269, 0xa26a, 0xa26b, 0xa26c, 0xa26d, 0xa26e, 0xa26f,
+ 0xa270, 0xa271, 0xa272, 0xa273, 0xa274, 0xa275, 0xa276, 0xa277,
+ 0xa278, 0xa279, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa27e, 0xa27f,
+ 0xa280, 0xa281, 0xa282, 0xa283, 0xa284, 0xa285, 0xa286, 0xa287, /* 0xa280 */
+ 0xa288, 0xa289, 0xa28a, 0xa28b, 0xa28c, 0xa28d, 0xa28e, 0xa28f,
+ 0xa290, 0xa291, 0xa292, 0xa293, 0xa294, 0xa295, 0xa296, 0xa297,
+ 0xa298, 0xa299, 0xa29a, 0xa29b, 0xa29c, 0xa29d, 0xa29e, 0xa29f,
+ 0xa2a0, 0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7,
+ 0xa2a8, 0xa2a9, 0xa2aa, 0xa2ab, 0xa2ac, 0xa2ad, 0xa2ae, 0xa2af,
+ 0xa2b0, 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7,
+ 0xa2b8, 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf,
+ 0xa2c0, 0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, /* 0xa2c0 */
+ 0xa2c8, 0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf,
+ 0xa2d0, 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7,
+ 0xa2d8, 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df,
+ 0xa2e0, 0xa2e1, 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7,
+ 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef,
+ 0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7,
+ 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa2ff,
+ 0xa300, 0xa301, 0xa302, 0xa303, 0xa304, 0xa305, 0xa306, 0xa307, /* 0xa300 */
+ 0xa308, 0xa309, 0xa30a, 0xa30b, 0xa30c, 0xa30d, 0xa30e, 0xa30f,
+ 0xa310, 0xa311, 0xa312, 0xa313, 0xa314, 0xa315, 0xa316, 0xa317,
+ 0xa318, 0xa319, 0xa31a, 0xa31b, 0xa31c, 0xa31d, 0xa31e, 0xa31f,
+ 0xa320, 0xa321, 0xa322, 0xa323, 0xa324, 0xa325, 0xa326, 0xa327,
+ 0xa328, 0xa329, 0xa32a, 0xa32b, 0xa32c, 0xa32d, 0xa32e, 0xa32f,
+ 0xa330, 0xa331, 0xa332, 0xa333, 0xa334, 0xa335, 0xa336, 0xa337,
+ 0xa338, 0xa339, 0xa33a, 0xa33b, 0xa33c, 0xa33d, 0xa33e, 0xa33f,
+ 0xa340, 0xa341, 0xa342, 0xa343, 0xa344, 0xa345, 0xa346, 0xa347, /* 0xa340 */
+ 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d, 0xa34e, 0xa34f,
+ 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355, 0xa356, 0xa357,
+ 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d, 0xa35e, 0xa35f,
+ 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, 0xa366, 0xa367,
+ 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d, 0xa36e, 0xa36f,
+ 0xa370, 0xa371, 0xa372, 0xa373, 0xa374, 0xa375, 0xa376, 0xa377,
+ 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e, 0xa37f,
+ 0xa380, 0xa381, 0xa382, 0xa383, 0xa384, 0xa385, 0xa386, 0xa387, /* 0xa380 */
+ 0xa388, 0xa389, 0xa38a, 0xa38b, 0xa38c, 0xa38d, 0xa38e, 0xa38f,
+ 0xa390, 0xa391, 0xa392, 0xa393, 0xa394, 0xa395, 0xa396, 0xa397,
+ 0xa398, 0xa399, 0xa39a, 0xa39b, 0xa39c, 0xa39d, 0xa39e, 0xa39f,
+ 0xa3a0, 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7,
+ 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af,
+ 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7,
+ 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf,
+ 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, /* 0xa3c0 */
+ 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf,
+ 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7,
+ 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, 0xa3de, 0xa3df,
+ 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7,
+ 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef,
+ 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7,
+ 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa3fe, 0xa3ff,
+ 0xa400, 0xa401, 0xa402, 0xa403, 0xa404, 0xa405, 0xa406, 0xa407, /* 0xa400 */
+ 0xa408, 0xa409, 0xa40a, 0xa40b, 0xa40c, 0xa40d, 0xa40e, 0xa40f,
+ 0xa410, 0xa411, 0xa412, 0xa413, 0xa414, 0xa415, 0xa416, 0xa417,
+ 0xa418, 0xa419, 0xa41a, 0xa41b, 0xa41c, 0xa41d, 0xa41e, 0xa41f,
+ 0xa420, 0xa421, 0xa422, 0xa423, 0xa424, 0xa425, 0xa426, 0xa427,
+ 0xa428, 0xa429, 0xa42a, 0xa42b, 0xa42c, 0xa42d, 0xa42e, 0xa42f,
+ 0xa430, 0xa431, 0xa432, 0xa433, 0xa434, 0xa435, 0xa436, 0xa437,
+ 0xa438, 0xa439, 0xa43a, 0xa43b, 0xa43c, 0xa43d, 0xa43e, 0xa43f,
+ 0xa440, 0xa441, 0xa442, 0xa443, 0xa444, 0xa445, 0xa446, 0xa447, /* 0xa440 */
+ 0xa448, 0xa449, 0xa44a, 0xa44b, 0xa44c, 0xa44d, 0xa44e, 0xa44f,
+ 0xa450, 0xa451, 0xa452, 0xa453, 0xa454, 0xa455, 0xa456, 0xa457,
+ 0xa458, 0xa459, 0xa45a, 0xa45b, 0xa45c, 0xa45d, 0xa45e, 0xa45f,
+ 0xa460, 0xa461, 0xa462, 0xa463, 0xa464, 0xa465, 0xa466, 0xa467,
+ 0xa468, 0xa469, 0xa46a, 0xa46b, 0xa46c, 0xa46d, 0xa46e, 0xa46f,
+ 0xa470, 0xa471, 0xa472, 0xa473, 0xa474, 0xa475, 0xa476, 0xa477,
+ 0xa478, 0xa479, 0xa47a, 0xa47b, 0xa47c, 0xa47d, 0xa47e, 0xa47f,
+ 0xa480, 0xa481, 0xa482, 0xa483, 0xa484, 0xa485, 0xa486, 0xa487, /* 0xa480 */
+ 0xa488, 0xa489, 0xa48a, 0xa48b, 0xa48c, 0x0000, 0x0000, 0x0000,
+ 0xa490, 0xa491, 0xa492, 0xa493, 0xa494, 0xa495, 0xa496, 0xa497,
+ 0xa498, 0xa499, 0xa49a, 0xa49b, 0xa49c, 0xa49d, 0xa49e, 0xa49f,
+ 0xa4a0, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7,
+ 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af,
+ 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7,
+ 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf,
+ 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0x0000, /* 0xa4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7,
+ 0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df,
+ 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7,
+ 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef,
+ 0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0xa4f4, 0xa4f5, 0xa4f6, 0xa4f7,
+ 0xa4f8, 0xa4f9, 0xa4fa, 0xa4fb, 0xa4fc, 0xa4fd, 0xa4fe, 0xa4ff,
+ 0xa500, 0xa501, 0xa502, 0xa503, 0xa504, 0xa505, 0xa506, 0xa507, /* 0xa500 */
+ 0xa508, 0xa509, 0xa50a, 0xa50b, 0xa50c, 0xa50d, 0xa50e, 0xa50f,
+ 0xa510, 0xa511, 0xa512, 0xa513, 0xa514, 0xa515, 0xa516, 0xa517,
+ 0xa518, 0xa519, 0xa51a, 0xa51b, 0xa51c, 0xa51d, 0xa51e, 0xa51f,
+ 0xa520, 0xa521, 0xa522, 0xa523, 0xa524, 0xa525, 0xa526, 0xa527,
+ 0xa528, 0xa529, 0xa52a, 0xa52b, 0xa52c, 0xa52d, 0xa52e, 0xa52f,
+ 0xa530, 0xa531, 0xa532, 0xa533, 0xa534, 0xa535, 0xa536, 0xa537,
+ 0xa538, 0xa539, 0xa53a, 0xa53b, 0xa53c, 0xa53d, 0xa53e, 0xa53f,
+ 0xa540, 0xa541, 0xa542, 0xa543, 0xa544, 0xa545, 0xa546, 0xa547, /* 0xa540 */
+ 0xa548, 0xa549, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa54e, 0xa54f,
+ 0xa550, 0xa551, 0xa552, 0xa553, 0xa554, 0xa555, 0xa556, 0xa557,
+ 0xa558, 0xa559, 0xa55a, 0xa55b, 0xa55c, 0xa55d, 0xa55e, 0xa55f,
+ 0xa560, 0xa561, 0xa562, 0xa563, 0xa564, 0xa565, 0xa566, 0xa567,
+ 0xa568, 0xa569, 0xa56a, 0xa56b, 0xa56c, 0xa56d, 0xa56e, 0xa56f,
+ 0xa570, 0xa571, 0xa572, 0xa573, 0xa574, 0xa575, 0xa576, 0xa577,
+ 0xa578, 0xa579, 0xa57a, 0xa57b, 0xa57c, 0xa57d, 0xa57e, 0xa57f,
+ 0xa580, 0xa581, 0xa582, 0xa583, 0xa584, 0xa585, 0xa586, 0xa587, /* 0xa580 */
+ 0xa588, 0xa589, 0xa58a, 0xa58b, 0xa58c, 0xa58d, 0xa58e, 0xa58f,
+ 0xa590, 0xa591, 0xa592, 0xa593, 0xa594, 0xa595, 0xa596, 0xa597,
+ 0xa598, 0xa599, 0xa59a, 0xa59b, 0xa59c, 0xa59d, 0xa59e, 0xa59f,
+ 0xa5a0, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7,
+ 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af,
+ 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7,
+ 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf,
+ 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, /* 0xa5c0 */
+ 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf,
+ 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7,
+ 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df,
+ 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7,
+ 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef,
+ 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0xa5f7,
+ 0xa5f8, 0xa5f9, 0xa5fa, 0xa5fb, 0xa5fc, 0xa5fd, 0xa5fe, 0xa5ff,
+ 0xa600, 0xa601, 0xa602, 0xa603, 0xa604, 0xa605, 0xa606, 0xa607, /* 0xa600 */
+ 0xa608, 0xa609, 0xa60a, 0xa60b, 0xa60c, 0xa60d, 0xa60e, 0xa60f,
+ 0xa610, 0xa611, 0xa612, 0xa613, 0xa614, 0xa615, 0xa616, 0xa617,
+ 0xa618, 0xa619, 0xa61a, 0xa61b, 0xa61c, 0xa61d, 0xa61e, 0xa61f,
+ 0xa620, 0xa621, 0xa622, 0xa623, 0xa624, 0xa625, 0xa626, 0xa627,
+ 0xa628, 0xa629, 0xa62a, 0xa62b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa641, 0xa641, 0xa643, 0xa643, 0xa645, 0xa645, 0xa647, 0xa647, /* 0xa640 */
+ 0xa649, 0xa649, 0xa64b, 0xa64b, 0xa64d, 0xa64d, 0xa64f, 0xa64f,
+ 0xa651, 0xa651, 0xa653, 0xa653, 0xa655, 0xa655, 0xa657, 0xa657,
+ 0xa659, 0xa659, 0xa65b, 0xa65b, 0xa65d, 0xa65d, 0xa65f, 0xa65f,
+ 0xa661, 0xa661, 0xa663, 0xa663, 0xa665, 0xa665, 0xa667, 0xa667,
+ 0xa669, 0xa669, 0xa66b, 0xa66b, 0xa66d, 0xa66d, 0xa66e, 0xa66f,
+ 0xa670, 0xa671, 0xa672, 0xa673, 0xa674, 0xa675, 0xa676, 0xa677,
+ 0xa678, 0xa679, 0xa67a, 0xa67b, 0xa67c, 0xa67d, 0xa67e, 0xa67f,
+ 0xa681, 0xa681, 0xa683, 0xa683, 0xa685, 0xa685, 0xa687, 0xa687, /* 0xa680 */
+ 0xa689, 0xa689, 0xa68b, 0xa68b, 0xa68d, 0xa68d, 0xa68f, 0xa68f,
+ 0xa691, 0xa691, 0xa693, 0xa693, 0xa695, 0xa695, 0xa697, 0xa697,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa69f,
+ 0xa6a0, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7,
+ 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af,
+ 0xa6b0, 0xa6b1, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, 0xa6b7,
+ 0xa6b8, 0xa6b9, 0xa6ba, 0xa6bb, 0xa6bc, 0xa6bd, 0xa6be, 0xa6bf,
+ 0xa6c0, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, /* 0xa6c0 */
+ 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf,
+ 0xa6d0, 0xa6d1, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, 0xa6d7,
+ 0xa6d8, 0xa6d9, 0xa6da, 0xa6db, 0xa6dc, 0xa6dd, 0xa6de, 0xa6df,
+ 0xa6e0, 0xa6e1, 0xa6e2, 0xa6e3, 0xa6e4, 0xa6e5, 0xa6e6, 0xa6e7,
+ 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0xa6ec, 0xa6ed, 0xa6ee, 0xa6ef,
+ 0xa6f0, 0xa6f1, 0xa6f2, 0xa6f3, 0xa6f4, 0xa6f5, 0xa6f6, 0xa6f7,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa700, 0xa701, 0xa702, 0xa703, 0xa704, 0xa705, 0xa706, 0xa707, /* 0xa700 */
+ 0xa708, 0xa709, 0xa70a, 0xa70b, 0xa70c, 0xa70d, 0xa70e, 0xa70f,
+ 0xa710, 0xa711, 0xa712, 0xa713, 0xa714, 0xa715, 0xa716, 0xa717,
+ 0xa718, 0xa719, 0xa71a, 0xa71b, 0xa71c, 0xa71d, 0xa71e, 0xa71f,
+ 0xa720, 0xa721, 0xa723, 0xa723, 0xa725, 0xa725, 0xa727, 0xa727,
+ 0xa729, 0xa729, 0xa72b, 0xa72b, 0xa72d, 0xa72d, 0xa72f, 0xa72f,
+ 0xa730, 0xa731, 0xa733, 0xa733, 0xa735, 0xa735, 0xa737, 0xa737,
+ 0xa739, 0xa739, 0xa73b, 0xa73b, 0xa73d, 0xa73d, 0xa73f, 0xa73f,
+ 0xa741, 0xa741, 0xa743, 0xa743, 0xa745, 0xa745, 0xa747, 0xa747, /* 0xa740 */
+ 0xa749, 0xa749, 0xa74b, 0xa74b, 0xa74d, 0xa74d, 0xa74f, 0xa74f,
+ 0xa751, 0xa751, 0xa753, 0xa753, 0xa755, 0xa755, 0xa757, 0xa757,
+ 0xa759, 0xa759, 0xa75b, 0xa75b, 0xa75d, 0xa75d, 0xa75f, 0xa75f,
+ 0xa761, 0xa761, 0xa763, 0xa763, 0xa765, 0xa765, 0xa767, 0xa767,
+ 0xa769, 0xa769, 0xa76b, 0xa76b, 0xa76d, 0xa76d, 0xa76f, 0xa76f,
+ 0xa770, 0xa771, 0xa772, 0xa773, 0xa774, 0xa775, 0xa776, 0xa777,
+ 0xa778, 0xa77a, 0xa77a, 0xa77c, 0xa77c, 0x1d79, 0xa77f, 0xa77f,
+ 0xa781, 0xa781, 0xa783, 0xa783, 0xa785, 0xa785, 0xa787, 0xa787, /* 0xa780 */
+ 0xa788, 0xa789, 0xa78a, 0xa78c, 0xa78c, 0x0265, 0xa78e, 0x0000,
+ 0xa791, 0xa791, 0xa793, 0xa793, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa7a1, 0xa7a1, 0xa7a3, 0xa7a3, 0xa7a5, 0xa7a5, 0xa7a7, 0xa7a7,
+ 0xa7a9, 0xa7a9, 0x0266, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa7f8, 0xa7f9, 0xa7fa, 0xa7fb, 0xa7fc, 0xa7fd, 0xa7fe, 0xa7ff,
+ 0xa800, 0xa801, 0xa802, 0xa803, 0xa804, 0xa805, 0xa806, 0xa807, /* 0xa800 */
+ 0xa808, 0xa809, 0xa80a, 0xa80b, 0xa80c, 0xa80d, 0xa80e, 0xa80f,
+ 0xa810, 0xa811, 0xa812, 0xa813, 0xa814, 0xa815, 0xa816, 0xa817,
+ 0xa818, 0xa819, 0xa81a, 0xa81b, 0xa81c, 0xa81d, 0xa81e, 0xa81f,
+ 0xa820, 0xa821, 0xa822, 0xa823, 0xa824, 0xa825, 0xa826, 0xa827,
+ 0xa828, 0xa829, 0xa82a, 0xa82b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa830, 0xa831, 0xa832, 0xa833, 0xa834, 0xa835, 0xa836, 0xa837,
+ 0xa838, 0xa839, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa840, 0xa841, 0xa842, 0xa843, 0xa844, 0xa845, 0xa846, 0xa847, /* 0xa840 */
+ 0xa848, 0xa849, 0xa84a, 0xa84b, 0xa84c, 0xa84d, 0xa84e, 0xa84f,
+ 0xa850, 0xa851, 0xa852, 0xa853, 0xa854, 0xa855, 0xa856, 0xa857,
+ 0xa858, 0xa859, 0xa85a, 0xa85b, 0xa85c, 0xa85d, 0xa85e, 0xa85f,
+ 0xa860, 0xa861, 0xa862, 0xa863, 0xa864, 0xa865, 0xa866, 0xa867,
+ 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c, 0xa86d, 0xa86e, 0xa86f,
+ 0xa870, 0xa871, 0xa872, 0xa873, 0xa874, 0xa875, 0xa876, 0xa877,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, /* 0xa880 */
+ 0xa888, 0xa889, 0xa88a, 0xa88b, 0xa88c, 0xa88d, 0xa88e, 0xa88f,
+ 0xa890, 0xa891, 0xa892, 0xa893, 0xa894, 0xa895, 0xa896, 0xa897,
+ 0xa898, 0xa899, 0xa89a, 0xa89b, 0xa89c, 0xa89d, 0xa89e, 0xa89f,
+ 0xa8a0, 0xa8a1, 0xa8a2, 0xa8a3, 0xa8a4, 0xa8a5, 0xa8a6, 0xa8a7,
+ 0xa8a8, 0xa8a9, 0xa8aa, 0xa8ab, 0xa8ac, 0xa8ad, 0xa8ae, 0xa8af,
+ 0xa8b0, 0xa8b1, 0xa8b2, 0xa8b3, 0xa8b4, 0xa8b5, 0xa8b6, 0xa8b7,
+ 0xa8b8, 0xa8b9, 0xa8ba, 0xa8bb, 0xa8bc, 0xa8bd, 0xa8be, 0xa8bf,
+ 0xa8c0, 0xa8c1, 0xa8c2, 0xa8c3, 0xa8c4, 0x0000, 0x0000, 0x0000, /* 0xa8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8ce, 0xa8cf,
+ 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7,
+ 0xa8d8, 0xa8d9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7,
+ 0xa8e8, 0xa8e9, 0xa8ea, 0xa8eb, 0xa8ec, 0xa8ed, 0xa8ee, 0xa8ef,
+ 0xa8f0, 0xa8f1, 0xa8f2, 0xa8f3, 0xa8f4, 0xa8f5, 0xa8f6, 0xa8f7,
+ 0xa8f8, 0xa8f9, 0xa8fa, 0xa8fb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xa900, 0xa901, 0xa902, 0xa903, 0xa904, 0xa905, 0xa906, 0xa907, /* 0xa900 */
+ 0xa908, 0xa909, 0xa90a, 0xa90b, 0xa90c, 0xa90d, 0xa90e, 0xa90f,
+ 0xa910, 0xa911, 0xa912, 0xa913, 0xa914, 0xa915, 0xa916, 0xa917,
+ 0xa918, 0xa919, 0xa91a, 0xa91b, 0xa91c, 0xa91d, 0xa91e, 0xa91f,
+ 0xa920, 0xa921, 0xa922, 0xa923, 0xa924, 0xa925, 0xa926, 0xa927,
+ 0xa928, 0xa929, 0xa92a, 0xa92b, 0xa92c, 0xa92d, 0xa92e, 0xa92f,
+ 0xa930, 0xa931, 0xa932, 0xa933, 0xa934, 0xa935, 0xa936, 0xa937,
+ 0xa938, 0xa939, 0xa93a, 0xa93b, 0xa93c, 0xa93d, 0xa93e, 0xa93f,
+ 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, 0xa947, /* 0xa940 */
+ 0xa948, 0xa949, 0xa94a, 0xa94b, 0xa94c, 0xa94d, 0xa94e, 0xa94f,
+ 0xa950, 0xa951, 0xa952, 0xa953, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa95f,
+ 0xa960, 0xa961, 0xa962, 0xa963, 0xa964, 0xa965, 0xa966, 0xa967,
+ 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, 0xa96f,
+ 0xa970, 0xa971, 0xa972, 0xa973, 0xa974, 0xa975, 0xa976, 0xa977,
+ 0xa978, 0xa979, 0xa97a, 0xa97b, 0xa97c, 0x0000, 0x0000, 0x0000,
+ 0xa980, 0xa981, 0xa982, 0xa983, 0xa984, 0xa985, 0xa986, 0xa987, /* 0xa980 */
+ 0xa988, 0xa989, 0xa98a, 0xa98b, 0xa98c, 0xa98d, 0xa98e, 0xa98f,
+ 0xa990, 0xa991, 0xa992, 0xa993, 0xa994, 0xa995, 0xa996, 0xa997,
+ 0xa998, 0xa999, 0xa99a, 0xa99b, 0xa99c, 0xa99d, 0xa99e, 0xa99f,
+ 0xa9a0, 0xa9a1, 0xa9a2, 0xa9a3, 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7,
+ 0xa9a8, 0xa9a9, 0xa9aa, 0xa9ab, 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af,
+ 0xa9b0, 0xa9b1, 0xa9b2, 0xa9b3, 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7,
+ 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf,
+ 0xa9c0, 0xa9c1, 0xa9c2, 0xa9c3, 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, /* 0xa9c0 */
+ 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, 0xa9cc, 0xa9cd, 0x0000, 0xa9cf,
+ 0xa9d0, 0xa9d1, 0xa9d2, 0xa9d3, 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7,
+ 0xa9d8, 0xa9d9, 0x0000, 0x0000, 0x0000, 0x0000, 0xa9de, 0xa9df,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xaa00, 0xaa01, 0xaa02, 0xaa03, 0xaa04, 0xaa05, 0xaa06, 0xaa07, /* 0xaa00 */
+ 0xaa08, 0xaa09, 0xaa0a, 0xaa0b, 0xaa0c, 0xaa0d, 0xaa0e, 0xaa0f,
+ 0xaa10, 0xaa11, 0xaa12, 0xaa13, 0xaa14, 0xaa15, 0xaa16, 0xaa17,
+ 0xaa18, 0xaa19, 0xaa1a, 0xaa1b, 0xaa1c, 0xaa1d, 0xaa1e, 0xaa1f,
+ 0xaa20, 0xaa21, 0xaa22, 0xaa23, 0xaa24, 0xaa25, 0xaa26, 0xaa27,
+ 0xaa28, 0xaa29, 0xaa2a, 0xaa2b, 0xaa2c, 0xaa2d, 0xaa2e, 0xaa2f,
+ 0xaa30, 0xaa31, 0xaa32, 0xaa33, 0xaa34, 0xaa35, 0xaa36, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xaa40, 0xaa41, 0xaa42, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, /* 0xaa40 */
+ 0xaa48, 0xaa49, 0xaa4a, 0xaa4b, 0xaa4c, 0xaa4d, 0x0000, 0x0000,
+ 0xaa50, 0xaa51, 0xaa52, 0xaa53, 0xaa54, 0xaa55, 0xaa56, 0xaa57,
+ 0xaa58, 0xaa59, 0x0000, 0x0000, 0xaa5c, 0xaa5d, 0xaa5e, 0xaa5f,
+ 0xaa60, 0xaa61, 0xaa62, 0xaa63, 0xaa64, 0xaa65, 0xaa66, 0xaa67,
+ 0xaa68, 0xaa69, 0xaa6a, 0xaa6b, 0xaa6c, 0xaa6d, 0xaa6e, 0xaa6f,
+ 0xaa70, 0xaa71, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xaa76, 0xaa77,
+ 0xaa78, 0xaa79, 0xaa7a, 0xaa7b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xaa80, 0xaa81, 0xaa82, 0xaa83, 0xaa84, 0xaa85, 0xaa86, 0xaa87, /* 0xaa80 */
+ 0xaa88, 0xaa89, 0xaa8a, 0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f,
+ 0xaa90, 0xaa91, 0xaa92, 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97,
+ 0xaa98, 0xaa99, 0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d, 0xaa9e, 0xaa9f,
+ 0xaaa0, 0xaaa1, 0xaaa2, 0xaaa3, 0xaaa4, 0xaaa5, 0xaaa6, 0xaaa7,
+ 0xaaa8, 0xaaa9, 0xaaaa, 0xaaab, 0xaaac, 0xaaad, 0xaaae, 0xaaaf,
+ 0xaab0, 0xaab1, 0xaab2, 0xaab3, 0xaab4, 0xaab5, 0xaab6, 0xaab7,
+ 0xaab8, 0xaab9, 0xaaba, 0xaabb, 0xaabc, 0xaabd, 0xaabe, 0xaabf,
+ 0xaac0, 0xaac1, 0xaac2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xaadb, 0xaadc, 0xaadd, 0xaade, 0xaadf,
+ 0xaae0, 0xaae1, 0xaae2, 0xaae3, 0xaae4, 0xaae5, 0xaae6, 0xaae7,
+ 0xaae8, 0xaae9, 0xaaea, 0xaaeb, 0xaaec, 0xaaed, 0xaaee, 0xaaef,
+ 0xaaf0, 0xaaf1, 0xaaf2, 0xaaf3, 0xaaf4, 0xaaf5, 0xaaf6, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xab01, 0xab02, 0xab03, 0xab04, 0xab05, 0xab06, 0x0000, /* 0xab00 */
+ 0x0000, 0xab09, 0xab0a, 0xab0b, 0xab0c, 0xab0d, 0xab0e, 0x0000,
+ 0x0000, 0xab11, 0xab12, 0xab13, 0xab14, 0xab15, 0xab16, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xab20, 0xab21, 0xab22, 0xab23, 0xab24, 0xab25, 0xab26, 0x0000,
+ 0xab28, 0xab29, 0xab2a, 0xab2b, 0xab2c, 0xab2d, 0xab2e, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xabc0, 0xabc1, 0xabc2, 0xabc3, 0xabc4, 0xabc5, 0xabc6, 0xabc7, /* 0xabc0 */
+ 0xabc8, 0xabc9, 0xabca, 0xabcb, 0xabcc, 0xabcd, 0xabce, 0xabcf,
+ 0xabd0, 0xabd1, 0xabd2, 0xabd3, 0xabd4, 0xabd5, 0xabd6, 0xabd7,
+ 0xabd8, 0xabd9, 0xabda, 0xabdb, 0xabdc, 0xabdd, 0xabde, 0xabdf,
+ 0xabe0, 0xabe1, 0xabe2, 0xabe3, 0xabe4, 0xabe5, 0xabe6, 0xabe7,
+ 0xabe8, 0xabe9, 0xabea, 0xabeb, 0xabec, 0xabed, 0x0000, 0x0000,
+ 0xabf0, 0xabf1, 0xabf2, 0xabf3, 0xabf4, 0xabf5, 0xabf6, 0xabf7,
+ 0xabf8, 0xabf9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xac00, 0xac01, 0xac02, 0xac03, 0xac04, 0xac05, 0xac06, 0xac07, /* 0xac00 */
+ 0xac08, 0xac09, 0xac0a, 0xac0b, 0xac0c, 0xac0d, 0xac0e, 0xac0f,
+ 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17,
+ 0xac18, 0xac19, 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac1e, 0xac1f,
+ 0xac20, 0xac21, 0xac22, 0xac23, 0xac24, 0xac25, 0xac26, 0xac27,
+ 0xac28, 0xac29, 0xac2a, 0xac2b, 0xac2c, 0xac2d, 0xac2e, 0xac2f,
+ 0xac30, 0xac31, 0xac32, 0xac33, 0xac34, 0xac35, 0xac36, 0xac37,
+ 0xac38, 0xac39, 0xac3a, 0xac3b, 0xac3c, 0xac3d, 0xac3e, 0xac3f,
+ 0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, /* 0xac40 */
+ 0xac48, 0xac49, 0xac4a, 0xac4b, 0xac4c, 0xac4d, 0xac4e, 0xac4f,
+ 0xac50, 0xac51, 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57,
+ 0xac58, 0xac59, 0xac5a, 0xac5b, 0xac5c, 0xac5d, 0xac5e, 0xac5f,
+ 0xac60, 0xac61, 0xac62, 0xac63, 0xac64, 0xac65, 0xac66, 0xac67,
+ 0xac68, 0xac69, 0xac6a, 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xac6f,
+ 0xac70, 0xac71, 0xac72, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77,
+ 0xac78, 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac7f,
+ 0xac80, 0xac81, 0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xac87, /* 0xac80 */
+ 0xac88, 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f,
+ 0xac90, 0xac91, 0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xac97,
+ 0xac98, 0xac99, 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xac9e, 0xac9f,
+ 0xaca0, 0xaca1, 0xaca2, 0xaca3, 0xaca4, 0xaca5, 0xaca6, 0xaca7,
+ 0xaca8, 0xaca9, 0xacaa, 0xacab, 0xacac, 0xacad, 0xacae, 0xacaf,
+ 0xacb0, 0xacb1, 0xacb2, 0xacb3, 0xacb4, 0xacb5, 0xacb6, 0xacb7,
+ 0xacb8, 0xacb9, 0xacba, 0xacbb, 0xacbc, 0xacbd, 0xacbe, 0xacbf,
+ 0xacc0, 0xacc1, 0xacc2, 0xacc3, 0xacc4, 0xacc5, 0xacc6, 0xacc7, /* 0xacc0 */
+ 0xacc8, 0xacc9, 0xacca, 0xaccb, 0xaccc, 0xaccd, 0xacce, 0xaccf,
+ 0xacd0, 0xacd1, 0xacd2, 0xacd3, 0xacd4, 0xacd5, 0xacd6, 0xacd7,
+ 0xacd8, 0xacd9, 0xacda, 0xacdb, 0xacdc, 0xacdd, 0xacde, 0xacdf,
+ 0xace0, 0xace1, 0xace2, 0xace3, 0xace4, 0xace5, 0xace6, 0xace7,
+ 0xace8, 0xace9, 0xacea, 0xaceb, 0xacec, 0xaced, 0xacee, 0xacef,
+ 0xacf0, 0xacf1, 0xacf2, 0xacf3, 0xacf4, 0xacf5, 0xacf6, 0xacf7,
+ 0xacf8, 0xacf9, 0xacfa, 0xacfb, 0xacfc, 0xacfd, 0xacfe, 0xacff,
+ 0xad00, 0xad01, 0xad02, 0xad03, 0xad04, 0xad05, 0xad06, 0xad07, /* 0xad00 */
+ 0xad08, 0xad09, 0xad0a, 0xad0b, 0xad0c, 0xad0d, 0xad0e, 0xad0f,
+ 0xad10, 0xad11, 0xad12, 0xad13, 0xad14, 0xad15, 0xad16, 0xad17,
+ 0xad18, 0xad19, 0xad1a, 0xad1b, 0xad1c, 0xad1d, 0xad1e, 0xad1f,
+ 0xad20, 0xad21, 0xad22, 0xad23, 0xad24, 0xad25, 0xad26, 0xad27,
+ 0xad28, 0xad29, 0xad2a, 0xad2b, 0xad2c, 0xad2d, 0xad2e, 0xad2f,
+ 0xad30, 0xad31, 0xad32, 0xad33, 0xad34, 0xad35, 0xad36, 0xad37,
+ 0xad38, 0xad39, 0xad3a, 0xad3b, 0xad3c, 0xad3d, 0xad3e, 0xad3f,
+ 0xad40, 0xad41, 0xad42, 0xad43, 0xad44, 0xad45, 0xad46, 0xad47, /* 0xad40 */
+ 0xad48, 0xad49, 0xad4a, 0xad4b, 0xad4c, 0xad4d, 0xad4e, 0xad4f,
+ 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, 0xad55, 0xad56, 0xad57,
+ 0xad58, 0xad59, 0xad5a, 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f,
+ 0xad60, 0xad61, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67,
+ 0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f,
+ 0xad70, 0xad71, 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, 0xad77,
+ 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, 0xad7f,
+ 0xad80, 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, /* 0xad80 */
+ 0xad88, 0xad89, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, 0xad8f,
+ 0xad90, 0xad91, 0xad92, 0xad93, 0xad94, 0xad95, 0xad96, 0xad97,
+ 0xad98, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xad9e, 0xad9f,
+ 0xada0, 0xada1, 0xada2, 0xada3, 0xada4, 0xada5, 0xada6, 0xada7,
+ 0xada8, 0xada9, 0xadaa, 0xadab, 0xadac, 0xadad, 0xadae, 0xadaf,
+ 0xadb0, 0xadb1, 0xadb2, 0xadb3, 0xadb4, 0xadb5, 0xadb6, 0xadb7,
+ 0xadb8, 0xadb9, 0xadba, 0xadbb, 0xadbc, 0xadbd, 0xadbe, 0xadbf,
+ 0xadc0, 0xadc1, 0xadc2, 0xadc3, 0xadc4, 0xadc5, 0xadc6, 0xadc7, /* 0xadc0 */
+ 0xadc8, 0xadc9, 0xadca, 0xadcb, 0xadcc, 0xadcd, 0xadce, 0xadcf,
+ 0xadd0, 0xadd1, 0xadd2, 0xadd3, 0xadd4, 0xadd5, 0xadd6, 0xadd7,
+ 0xadd8, 0xadd9, 0xadda, 0xaddb, 0xaddc, 0xaddd, 0xadde, 0xaddf,
+ 0xade0, 0xade1, 0xade2, 0xade3, 0xade4, 0xade5, 0xade6, 0xade7,
+ 0xade8, 0xade9, 0xadea, 0xadeb, 0xadec, 0xaded, 0xadee, 0xadef,
+ 0xadf0, 0xadf1, 0xadf2, 0xadf3, 0xadf4, 0xadf5, 0xadf6, 0xadf7,
+ 0xadf8, 0xadf9, 0xadfa, 0xadfb, 0xadfc, 0xadfd, 0xadfe, 0xadff,
+ 0xae00, 0xae01, 0xae02, 0xae03, 0xae04, 0xae05, 0xae06, 0xae07, /* 0xae00 */
+ 0xae08, 0xae09, 0xae0a, 0xae0b, 0xae0c, 0xae0d, 0xae0e, 0xae0f,
+ 0xae10, 0xae11, 0xae12, 0xae13, 0xae14, 0xae15, 0xae16, 0xae17,
+ 0xae18, 0xae19, 0xae1a, 0xae1b, 0xae1c, 0xae1d, 0xae1e, 0xae1f,
+ 0xae20, 0xae21, 0xae22, 0xae23, 0xae24, 0xae25, 0xae26, 0xae27,
+ 0xae28, 0xae29, 0xae2a, 0xae2b, 0xae2c, 0xae2d, 0xae2e, 0xae2f,
+ 0xae30, 0xae31, 0xae32, 0xae33, 0xae34, 0xae35, 0xae36, 0xae37,
+ 0xae38, 0xae39, 0xae3a, 0xae3b, 0xae3c, 0xae3d, 0xae3e, 0xae3f,
+ 0xae40, 0xae41, 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, /* 0xae40 */
+ 0xae48, 0xae49, 0xae4a, 0xae4b, 0xae4c, 0xae4d, 0xae4e, 0xae4f,
+ 0xae50, 0xae51, 0xae52, 0xae53, 0xae54, 0xae55, 0xae56, 0xae57,
+ 0xae58, 0xae59, 0xae5a, 0xae5b, 0xae5c, 0xae5d, 0xae5e, 0xae5f,
+ 0xae60, 0xae61, 0xae62, 0xae63, 0xae64, 0xae65, 0xae66, 0xae67,
+ 0xae68, 0xae69, 0xae6a, 0xae6b, 0xae6c, 0xae6d, 0xae6e, 0xae6f,
+ 0xae70, 0xae71, 0xae72, 0xae73, 0xae74, 0xae75, 0xae76, 0xae77,
+ 0xae78, 0xae79, 0xae7a, 0xae7b, 0xae7c, 0xae7d, 0xae7e, 0xae7f,
+ 0xae80, 0xae81, 0xae82, 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, /* 0xae80 */
+ 0xae88, 0xae89, 0xae8a, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f,
+ 0xae90, 0xae91, 0xae92, 0xae93, 0xae94, 0xae95, 0xae96, 0xae97,
+ 0xae98, 0xae99, 0xae9a, 0xae9b, 0xae9c, 0xae9d, 0xae9e, 0xae9f,
+ 0xaea0, 0xaea1, 0xaea2, 0xaea3, 0xaea4, 0xaea5, 0xaea6, 0xaea7,
+ 0xaea8, 0xaea9, 0xaeaa, 0xaeab, 0xaeac, 0xaead, 0xaeae, 0xaeaf,
+ 0xaeb0, 0xaeb1, 0xaeb2, 0xaeb3, 0xaeb4, 0xaeb5, 0xaeb6, 0xaeb7,
+ 0xaeb8, 0xaeb9, 0xaeba, 0xaebb, 0xaebc, 0xaebd, 0xaebe, 0xaebf,
+ 0xaec0, 0xaec1, 0xaec2, 0xaec3, 0xaec4, 0xaec5, 0xaec6, 0xaec7, /* 0xaec0 */
+ 0xaec8, 0xaec9, 0xaeca, 0xaecb, 0xaecc, 0xaecd, 0xaece, 0xaecf,
+ 0xaed0, 0xaed1, 0xaed2, 0xaed3, 0xaed4, 0xaed5, 0xaed6, 0xaed7,
+ 0xaed8, 0xaed9, 0xaeda, 0xaedb, 0xaedc, 0xaedd, 0xaede, 0xaedf,
+ 0xaee0, 0xaee1, 0xaee2, 0xaee3, 0xaee4, 0xaee5, 0xaee6, 0xaee7,
+ 0xaee8, 0xaee9, 0xaeea, 0xaeeb, 0xaeec, 0xaeed, 0xaeee, 0xaeef,
+ 0xaef0, 0xaef1, 0xaef2, 0xaef3, 0xaef4, 0xaef5, 0xaef6, 0xaef7,
+ 0xaef8, 0xaef9, 0xaefa, 0xaefb, 0xaefc, 0xaefd, 0xaefe, 0xaeff,
+ 0xaf00, 0xaf01, 0xaf02, 0xaf03, 0xaf04, 0xaf05, 0xaf06, 0xaf07, /* 0xaf00 */
+ 0xaf08, 0xaf09, 0xaf0a, 0xaf0b, 0xaf0c, 0xaf0d, 0xaf0e, 0xaf0f,
+ 0xaf10, 0xaf11, 0xaf12, 0xaf13, 0xaf14, 0xaf15, 0xaf16, 0xaf17,
+ 0xaf18, 0xaf19, 0xaf1a, 0xaf1b, 0xaf1c, 0xaf1d, 0xaf1e, 0xaf1f,
+ 0xaf20, 0xaf21, 0xaf22, 0xaf23, 0xaf24, 0xaf25, 0xaf26, 0xaf27,
+ 0xaf28, 0xaf29, 0xaf2a, 0xaf2b, 0xaf2c, 0xaf2d, 0xaf2e, 0xaf2f,
+ 0xaf30, 0xaf31, 0xaf32, 0xaf33, 0xaf34, 0xaf35, 0xaf36, 0xaf37,
+ 0xaf38, 0xaf39, 0xaf3a, 0xaf3b, 0xaf3c, 0xaf3d, 0xaf3e, 0xaf3f,
+ 0xaf40, 0xaf41, 0xaf42, 0xaf43, 0xaf44, 0xaf45, 0xaf46, 0xaf47, /* 0xaf40 */
+ 0xaf48, 0xaf49, 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4d, 0xaf4e, 0xaf4f,
+ 0xaf50, 0xaf51, 0xaf52, 0xaf53, 0xaf54, 0xaf55, 0xaf56, 0xaf57,
+ 0xaf58, 0xaf59, 0xaf5a, 0xaf5b, 0xaf5c, 0xaf5d, 0xaf5e, 0xaf5f,
+ 0xaf60, 0xaf61, 0xaf62, 0xaf63, 0xaf64, 0xaf65, 0xaf66, 0xaf67,
+ 0xaf68, 0xaf69, 0xaf6a, 0xaf6b, 0xaf6c, 0xaf6d, 0xaf6e, 0xaf6f,
+ 0xaf70, 0xaf71, 0xaf72, 0xaf73, 0xaf74, 0xaf75, 0xaf76, 0xaf77,
+ 0xaf78, 0xaf79, 0xaf7a, 0xaf7b, 0xaf7c, 0xaf7d, 0xaf7e, 0xaf7f,
+ 0xaf80, 0xaf81, 0xaf82, 0xaf83, 0xaf84, 0xaf85, 0xaf86, 0xaf87, /* 0xaf80 */
+ 0xaf88, 0xaf89, 0xaf8a, 0xaf8b, 0xaf8c, 0xaf8d, 0xaf8e, 0xaf8f,
+ 0xaf90, 0xaf91, 0xaf92, 0xaf93, 0xaf94, 0xaf95, 0xaf96, 0xaf97,
+ 0xaf98, 0xaf99, 0xaf9a, 0xaf9b, 0xaf9c, 0xaf9d, 0xaf9e, 0xaf9f,
+ 0xafa0, 0xafa1, 0xafa2, 0xafa3, 0xafa4, 0xafa5, 0xafa6, 0xafa7,
+ 0xafa8, 0xafa9, 0xafaa, 0xafab, 0xafac, 0xafad, 0xafae, 0xafaf,
+ 0xafb0, 0xafb1, 0xafb2, 0xafb3, 0xafb4, 0xafb5, 0xafb6, 0xafb7,
+ 0xafb8, 0xafb9, 0xafba, 0xafbb, 0xafbc, 0xafbd, 0xafbe, 0xafbf,
+ 0xafc0, 0xafc1, 0xafc2, 0xafc3, 0xafc4, 0xafc5, 0xafc6, 0xafc7, /* 0xafc0 */
+ 0xafc8, 0xafc9, 0xafca, 0xafcb, 0xafcc, 0xafcd, 0xafce, 0xafcf,
+ 0xafd0, 0xafd1, 0xafd2, 0xafd3, 0xafd4, 0xafd5, 0xafd6, 0xafd7,
+ 0xafd8, 0xafd9, 0xafda, 0xafdb, 0xafdc, 0xafdd, 0xafde, 0xafdf,
+ 0xafe0, 0xafe1, 0xafe2, 0xafe3, 0xafe4, 0xafe5, 0xafe6, 0xafe7,
+ 0xafe8, 0xafe9, 0xafea, 0xafeb, 0xafec, 0xafed, 0xafee, 0xafef,
+ 0xaff0, 0xaff1, 0xaff2, 0xaff3, 0xaff4, 0xaff5, 0xaff6, 0xaff7,
+ 0xaff8, 0xaff9, 0xaffa, 0xaffb, 0xaffc, 0xaffd, 0xaffe, 0xafff,
+ 0xb000, 0xb001, 0xb002, 0xb003, 0xb004, 0xb005, 0xb006, 0xb007, /* 0xb000 */
+ 0xb008, 0xb009, 0xb00a, 0xb00b, 0xb00c, 0xb00d, 0xb00e, 0xb00f,
+ 0xb010, 0xb011, 0xb012, 0xb013, 0xb014, 0xb015, 0xb016, 0xb017,
+ 0xb018, 0xb019, 0xb01a, 0xb01b, 0xb01c, 0xb01d, 0xb01e, 0xb01f,
+ 0xb020, 0xb021, 0xb022, 0xb023, 0xb024, 0xb025, 0xb026, 0xb027,
+ 0xb028, 0xb029, 0xb02a, 0xb02b, 0xb02c, 0xb02d, 0xb02e, 0xb02f,
+ 0xb030, 0xb031, 0xb032, 0xb033, 0xb034, 0xb035, 0xb036, 0xb037,
+ 0xb038, 0xb039, 0xb03a, 0xb03b, 0xb03c, 0xb03d, 0xb03e, 0xb03f,
+ 0xb040, 0xb041, 0xb042, 0xb043, 0xb044, 0xb045, 0xb046, 0xb047, /* 0xb040 */
+ 0xb048, 0xb049, 0xb04a, 0xb04b, 0xb04c, 0xb04d, 0xb04e, 0xb04f,
+ 0xb050, 0xb051, 0xb052, 0xb053, 0xb054, 0xb055, 0xb056, 0xb057,
+ 0xb058, 0xb059, 0xb05a, 0xb05b, 0xb05c, 0xb05d, 0xb05e, 0xb05f,
+ 0xb060, 0xb061, 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067,
+ 0xb068, 0xb069, 0xb06a, 0xb06b, 0xb06c, 0xb06d, 0xb06e, 0xb06f,
+ 0xb070, 0xb071, 0xb072, 0xb073, 0xb074, 0xb075, 0xb076, 0xb077,
+ 0xb078, 0xb079, 0xb07a, 0xb07b, 0xb07c, 0xb07d, 0xb07e, 0xb07f,
+ 0xb080, 0xb081, 0xb082, 0xb083, 0xb084, 0xb085, 0xb086, 0xb087, /* 0xb080 */
+ 0xb088, 0xb089, 0xb08a, 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f,
+ 0xb090, 0xb091, 0xb092, 0xb093, 0xb094, 0xb095, 0xb096, 0xb097,
+ 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xb09e, 0xb09f,
+ 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a3, 0xb0a4, 0xb0a5, 0xb0a6, 0xb0a7,
+ 0xb0a8, 0xb0a9, 0xb0aa, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af,
+ 0xb0b0, 0xb0b1, 0xb0b2, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b6, 0xb0b7,
+ 0xb0b8, 0xb0b9, 0xb0ba, 0xb0bb, 0xb0bc, 0xb0bd, 0xb0be, 0xb0bf,
+ 0xb0c0, 0xb0c1, 0xb0c2, 0xb0c3, 0xb0c4, 0xb0c5, 0xb0c6, 0xb0c7, /* 0xb0c0 */
+ 0xb0c8, 0xb0c9, 0xb0ca, 0xb0cb, 0xb0cc, 0xb0cd, 0xb0ce, 0xb0cf,
+ 0xb0d0, 0xb0d1, 0xb0d2, 0xb0d3, 0xb0d4, 0xb0d5, 0xb0d6, 0xb0d7,
+ 0xb0d8, 0xb0d9, 0xb0da, 0xb0db, 0xb0dc, 0xb0dd, 0xb0de, 0xb0df,
+ 0xb0e0, 0xb0e1, 0xb0e2, 0xb0e3, 0xb0e4, 0xb0e5, 0xb0e6, 0xb0e7,
+ 0xb0e8, 0xb0e9, 0xb0ea, 0xb0eb, 0xb0ec, 0xb0ed, 0xb0ee, 0xb0ef,
+ 0xb0f0, 0xb0f1, 0xb0f2, 0xb0f3, 0xb0f4, 0xb0f5, 0xb0f6, 0xb0f7,
+ 0xb0f8, 0xb0f9, 0xb0fa, 0xb0fb, 0xb0fc, 0xb0fd, 0xb0fe, 0xb0ff,
+ 0xb100, 0xb101, 0xb102, 0xb103, 0xb104, 0xb105, 0xb106, 0xb107, /* 0xb100 */
+ 0xb108, 0xb109, 0xb10a, 0xb10b, 0xb10c, 0xb10d, 0xb10e, 0xb10f,
+ 0xb110, 0xb111, 0xb112, 0xb113, 0xb114, 0xb115, 0xb116, 0xb117,
+ 0xb118, 0xb119, 0xb11a, 0xb11b, 0xb11c, 0xb11d, 0xb11e, 0xb11f,
+ 0xb120, 0xb121, 0xb122, 0xb123, 0xb124, 0xb125, 0xb126, 0xb127,
+ 0xb128, 0xb129, 0xb12a, 0xb12b, 0xb12c, 0xb12d, 0xb12e, 0xb12f,
+ 0xb130, 0xb131, 0xb132, 0xb133, 0xb134, 0xb135, 0xb136, 0xb137,
+ 0xb138, 0xb139, 0xb13a, 0xb13b, 0xb13c, 0xb13d, 0xb13e, 0xb13f,
+ 0xb140, 0xb141, 0xb142, 0xb143, 0xb144, 0xb145, 0xb146, 0xb147, /* 0xb140 */
+ 0xb148, 0xb149, 0xb14a, 0xb14b, 0xb14c, 0xb14d, 0xb14e, 0xb14f,
+ 0xb150, 0xb151, 0xb152, 0xb153, 0xb154, 0xb155, 0xb156, 0xb157,
+ 0xb158, 0xb159, 0xb15a, 0xb15b, 0xb15c, 0xb15d, 0xb15e, 0xb15f,
+ 0xb160, 0xb161, 0xb162, 0xb163, 0xb164, 0xb165, 0xb166, 0xb167,
+ 0xb168, 0xb169, 0xb16a, 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f,
+ 0xb170, 0xb171, 0xb172, 0xb173, 0xb174, 0xb175, 0xb176, 0xb177,
+ 0xb178, 0xb179, 0xb17a, 0xb17b, 0xb17c, 0xb17d, 0xb17e, 0xb17f,
+ 0xb180, 0xb181, 0xb182, 0xb183, 0xb184, 0xb185, 0xb186, 0xb187, /* 0xb180 */
+ 0xb188, 0xb189, 0xb18a, 0xb18b, 0xb18c, 0xb18d, 0xb18e, 0xb18f,
+ 0xb190, 0xb191, 0xb192, 0xb193, 0xb194, 0xb195, 0xb196, 0xb197,
+ 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d, 0xb19e, 0xb19f,
+ 0xb1a0, 0xb1a1, 0xb1a2, 0xb1a3, 0xb1a4, 0xb1a5, 0xb1a6, 0xb1a7,
+ 0xb1a8, 0xb1a9, 0xb1aa, 0xb1ab, 0xb1ac, 0xb1ad, 0xb1ae, 0xb1af,
+ 0xb1b0, 0xb1b1, 0xb1b2, 0xb1b3, 0xb1b4, 0xb1b5, 0xb1b6, 0xb1b7,
+ 0xb1b8, 0xb1b9, 0xb1ba, 0xb1bb, 0xb1bc, 0xb1bd, 0xb1be, 0xb1bf,
+ 0xb1c0, 0xb1c1, 0xb1c2, 0xb1c3, 0xb1c4, 0xb1c5, 0xb1c6, 0xb1c7, /* 0xb1c0 */
+ 0xb1c8, 0xb1c9, 0xb1ca, 0xb1cb, 0xb1cc, 0xb1cd, 0xb1ce, 0xb1cf,
+ 0xb1d0, 0xb1d1, 0xb1d2, 0xb1d3, 0xb1d4, 0xb1d5, 0xb1d6, 0xb1d7,
+ 0xb1d8, 0xb1d9, 0xb1da, 0xb1db, 0xb1dc, 0xb1dd, 0xb1de, 0xb1df,
+ 0xb1e0, 0xb1e1, 0xb1e2, 0xb1e3, 0xb1e4, 0xb1e5, 0xb1e6, 0xb1e7,
+ 0xb1e8, 0xb1e9, 0xb1ea, 0xb1eb, 0xb1ec, 0xb1ed, 0xb1ee, 0xb1ef,
+ 0xb1f0, 0xb1f1, 0xb1f2, 0xb1f3, 0xb1f4, 0xb1f5, 0xb1f6, 0xb1f7,
+ 0xb1f8, 0xb1f9, 0xb1fa, 0xb1fb, 0xb1fc, 0xb1fd, 0xb1fe, 0xb1ff,
+ 0xb200, 0xb201, 0xb202, 0xb203, 0xb204, 0xb205, 0xb206, 0xb207, /* 0xb200 */
+ 0xb208, 0xb209, 0xb20a, 0xb20b, 0xb20c, 0xb20d, 0xb20e, 0xb20f,
+ 0xb210, 0xb211, 0xb212, 0xb213, 0xb214, 0xb215, 0xb216, 0xb217,
+ 0xb218, 0xb219, 0xb21a, 0xb21b, 0xb21c, 0xb21d, 0xb21e, 0xb21f,
+ 0xb220, 0xb221, 0xb222, 0xb223, 0xb224, 0xb225, 0xb226, 0xb227,
+ 0xb228, 0xb229, 0xb22a, 0xb22b, 0xb22c, 0xb22d, 0xb22e, 0xb22f,
+ 0xb230, 0xb231, 0xb232, 0xb233, 0xb234, 0xb235, 0xb236, 0xb237,
+ 0xb238, 0xb239, 0xb23a, 0xb23b, 0xb23c, 0xb23d, 0xb23e, 0xb23f,
+ 0xb240, 0xb241, 0xb242, 0xb243, 0xb244, 0xb245, 0xb246, 0xb247, /* 0xb240 */
+ 0xb248, 0xb249, 0xb24a, 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f,
+ 0xb250, 0xb251, 0xb252, 0xb253, 0xb254, 0xb255, 0xb256, 0xb257,
+ 0xb258, 0xb259, 0xb25a, 0xb25b, 0xb25c, 0xb25d, 0xb25e, 0xb25f,
+ 0xb260, 0xb261, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, 0xb267,
+ 0xb268, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xb26e, 0xb26f,
+ 0xb270, 0xb271, 0xb272, 0xb273, 0xb274, 0xb275, 0xb276, 0xb277,
+ 0xb278, 0xb279, 0xb27a, 0xb27b, 0xb27c, 0xb27d, 0xb27e, 0xb27f,
+ 0xb280, 0xb281, 0xb282, 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, /* 0xb280 */
+ 0xb288, 0xb289, 0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xb28f,
+ 0xb290, 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296, 0xb297,
+ 0xb298, 0xb299, 0xb29a, 0xb29b, 0xb29c, 0xb29d, 0xb29e, 0xb29f,
+ 0xb2a0, 0xb2a1, 0xb2a2, 0xb2a3, 0xb2a4, 0xb2a5, 0xb2a6, 0xb2a7,
+ 0xb2a8, 0xb2a9, 0xb2aa, 0xb2ab, 0xb2ac, 0xb2ad, 0xb2ae, 0xb2af,
+ 0xb2b0, 0xb2b1, 0xb2b2, 0xb2b3, 0xb2b4, 0xb2b5, 0xb2b6, 0xb2b7,
+ 0xb2b8, 0xb2b9, 0xb2ba, 0xb2bb, 0xb2bc, 0xb2bd, 0xb2be, 0xb2bf,
+ 0xb2c0, 0xb2c1, 0xb2c2, 0xb2c3, 0xb2c4, 0xb2c5, 0xb2c6, 0xb2c7, /* 0xb2c0 */
+ 0xb2c8, 0xb2c9, 0xb2ca, 0xb2cb, 0xb2cc, 0xb2cd, 0xb2ce, 0xb2cf,
+ 0xb2d0, 0xb2d1, 0xb2d2, 0xb2d3, 0xb2d4, 0xb2d5, 0xb2d6, 0xb2d7,
+ 0xb2d8, 0xb2d9, 0xb2da, 0xb2db, 0xb2dc, 0xb2dd, 0xb2de, 0xb2df,
+ 0xb2e0, 0xb2e1, 0xb2e2, 0xb2e3, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e7,
+ 0xb2e8, 0xb2e9, 0xb2ea, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef,
+ 0xb2f0, 0xb2f1, 0xb2f2, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f6, 0xb2f7,
+ 0xb2f8, 0xb2f9, 0xb2fa, 0xb2fb, 0xb2fc, 0xb2fd, 0xb2fe, 0xb2ff,
+ 0xb300, 0xb301, 0xb302, 0xb303, 0xb304, 0xb305, 0xb306, 0xb307, /* 0xb300 */
+ 0xb308, 0xb309, 0xb30a, 0xb30b, 0xb30c, 0xb30d, 0xb30e, 0xb30f,
+ 0xb310, 0xb311, 0xb312, 0xb313, 0xb314, 0xb315, 0xb316, 0xb317,
+ 0xb318, 0xb319, 0xb31a, 0xb31b, 0xb31c, 0xb31d, 0xb31e, 0xb31f,
+ 0xb320, 0xb321, 0xb322, 0xb323, 0xb324, 0xb325, 0xb326, 0xb327,
+ 0xb328, 0xb329, 0xb32a, 0xb32b, 0xb32c, 0xb32d, 0xb32e, 0xb32f,
+ 0xb330, 0xb331, 0xb332, 0xb333, 0xb334, 0xb335, 0xb336, 0xb337,
+ 0xb338, 0xb339, 0xb33a, 0xb33b, 0xb33c, 0xb33d, 0xb33e, 0xb33f,
+ 0xb340, 0xb341, 0xb342, 0xb343, 0xb344, 0xb345, 0xb346, 0xb347, /* 0xb340 */
+ 0xb348, 0xb349, 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xb34e, 0xb34f,
+ 0xb350, 0xb351, 0xb352, 0xb353, 0xb354, 0xb355, 0xb356, 0xb357,
+ 0xb358, 0xb359, 0xb35a, 0xb35b, 0xb35c, 0xb35d, 0xb35e, 0xb35f,
+ 0xb360, 0xb361, 0xb362, 0xb363, 0xb364, 0xb365, 0xb366, 0xb367,
+ 0xb368, 0xb369, 0xb36a, 0xb36b, 0xb36c, 0xb36d, 0xb36e, 0xb36f,
+ 0xb370, 0xb371, 0xb372, 0xb373, 0xb374, 0xb375, 0xb376, 0xb377,
+ 0xb378, 0xb379, 0xb37a, 0xb37b, 0xb37c, 0xb37d, 0xb37e, 0xb37f,
+ 0xb380, 0xb381, 0xb382, 0xb383, 0xb384, 0xb385, 0xb386, 0xb387, /* 0xb380 */
+ 0xb388, 0xb389, 0xb38a, 0xb38b, 0xb38c, 0xb38d, 0xb38e, 0xb38f,
+ 0xb390, 0xb391, 0xb392, 0xb393, 0xb394, 0xb395, 0xb396, 0xb397,
+ 0xb398, 0xb399, 0xb39a, 0xb39b, 0xb39c, 0xb39d, 0xb39e, 0xb39f,
+ 0xb3a0, 0xb3a1, 0xb3a2, 0xb3a3, 0xb3a4, 0xb3a5, 0xb3a6, 0xb3a7,
+ 0xb3a8, 0xb3a9, 0xb3aa, 0xb3ab, 0xb3ac, 0xb3ad, 0xb3ae, 0xb3af,
+ 0xb3b0, 0xb3b1, 0xb3b2, 0xb3b3, 0xb3b4, 0xb3b5, 0xb3b6, 0xb3b7,
+ 0xb3b8, 0xb3b9, 0xb3ba, 0xb3bb, 0xb3bc, 0xb3bd, 0xb3be, 0xb3bf,
+ 0xb3c0, 0xb3c1, 0xb3c2, 0xb3c3, 0xb3c4, 0xb3c5, 0xb3c6, 0xb3c7, /* 0xb3c0 */
+ 0xb3c8, 0xb3c9, 0xb3ca, 0xb3cb, 0xb3cc, 0xb3cd, 0xb3ce, 0xb3cf,
+ 0xb3d0, 0xb3d1, 0xb3d2, 0xb3d3, 0xb3d4, 0xb3d5, 0xb3d6, 0xb3d7,
+ 0xb3d8, 0xb3d9, 0xb3da, 0xb3db, 0xb3dc, 0xb3dd, 0xb3de, 0xb3df,
+ 0xb3e0, 0xb3e1, 0xb3e2, 0xb3e3, 0xb3e4, 0xb3e5, 0xb3e6, 0xb3e7,
+ 0xb3e8, 0xb3e9, 0xb3ea, 0xb3eb, 0xb3ec, 0xb3ed, 0xb3ee, 0xb3ef,
+ 0xb3f0, 0xb3f1, 0xb3f2, 0xb3f3, 0xb3f4, 0xb3f5, 0xb3f6, 0xb3f7,
+ 0xb3f8, 0xb3f9, 0xb3fa, 0xb3fb, 0xb3fc, 0xb3fd, 0xb3fe, 0xb3ff,
+ 0xb400, 0xb401, 0xb402, 0xb403, 0xb404, 0xb405, 0xb406, 0xb407, /* 0xb400 */
+ 0xb408, 0xb409, 0xb40a, 0xb40b, 0xb40c, 0xb40d, 0xb40e, 0xb40f,
+ 0xb410, 0xb411, 0xb412, 0xb413, 0xb414, 0xb415, 0xb416, 0xb417,
+ 0xb418, 0xb419, 0xb41a, 0xb41b, 0xb41c, 0xb41d, 0xb41e, 0xb41f,
+ 0xb420, 0xb421, 0xb422, 0xb423, 0xb424, 0xb425, 0xb426, 0xb427,
+ 0xb428, 0xb429, 0xb42a, 0xb42b, 0xb42c, 0xb42d, 0xb42e, 0xb42f,
+ 0xb430, 0xb431, 0xb432, 0xb433, 0xb434, 0xb435, 0xb436, 0xb437,
+ 0xb438, 0xb439, 0xb43a, 0xb43b, 0xb43c, 0xb43d, 0xb43e, 0xb43f,
+ 0xb440, 0xb441, 0xb442, 0xb443, 0xb444, 0xb445, 0xb446, 0xb447, /* 0xb440 */
+ 0xb448, 0xb449, 0xb44a, 0xb44b, 0xb44c, 0xb44d, 0xb44e, 0xb44f,
+ 0xb450, 0xb451, 0xb452, 0xb453, 0xb454, 0xb455, 0xb456, 0xb457,
+ 0xb458, 0xb459, 0xb45a, 0xb45b, 0xb45c, 0xb45d, 0xb45e, 0xb45f,
+ 0xb460, 0xb461, 0xb462, 0xb463, 0xb464, 0xb465, 0xb466, 0xb467,
+ 0xb468, 0xb469, 0xb46a, 0xb46b, 0xb46c, 0xb46d, 0xb46e, 0xb46f,
+ 0xb470, 0xb471, 0xb472, 0xb473, 0xb474, 0xb475, 0xb476, 0xb477,
+ 0xb478, 0xb479, 0xb47a, 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb47f,
+ 0xb480, 0xb481, 0xb482, 0xb483, 0xb484, 0xb485, 0xb486, 0xb487, /* 0xb480 */
+ 0xb488, 0xb489, 0xb48a, 0xb48b, 0xb48c, 0xb48d, 0xb48e, 0xb48f,
+ 0xb490, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, 0xb496, 0xb497,
+ 0xb498, 0xb499, 0xb49a, 0xb49b, 0xb49c, 0xb49d, 0xb49e, 0xb49f,
+ 0xb4a0, 0xb4a1, 0xb4a2, 0xb4a3, 0xb4a4, 0xb4a5, 0xb4a6, 0xb4a7,
+ 0xb4a8, 0xb4a9, 0xb4aa, 0xb4ab, 0xb4ac, 0xb4ad, 0xb4ae, 0xb4af,
+ 0xb4b0, 0xb4b1, 0xb4b2, 0xb4b3, 0xb4b4, 0xb4b5, 0xb4b6, 0xb4b7,
+ 0xb4b8, 0xb4b9, 0xb4ba, 0xb4bb, 0xb4bc, 0xb4bd, 0xb4be, 0xb4bf,
+ 0xb4c0, 0xb4c1, 0xb4c2, 0xb4c3, 0xb4c4, 0xb4c5, 0xb4c6, 0xb4c7, /* 0xb4c0 */
+ 0xb4c8, 0xb4c9, 0xb4ca, 0xb4cb, 0xb4cc, 0xb4cd, 0xb4ce, 0xb4cf,
+ 0xb4d0, 0xb4d1, 0xb4d2, 0xb4d3, 0xb4d4, 0xb4d5, 0xb4d6, 0xb4d7,
+ 0xb4d8, 0xb4d9, 0xb4da, 0xb4db, 0xb4dc, 0xb4dd, 0xb4de, 0xb4df,
+ 0xb4e0, 0xb4e1, 0xb4e2, 0xb4e3, 0xb4e4, 0xb4e5, 0xb4e6, 0xb4e7,
+ 0xb4e8, 0xb4e9, 0xb4ea, 0xb4eb, 0xb4ec, 0xb4ed, 0xb4ee, 0xb4ef,
+ 0xb4f0, 0xb4f1, 0xb4f2, 0xb4f3, 0xb4f4, 0xb4f5, 0xb4f6, 0xb4f7,
+ 0xb4f8, 0xb4f9, 0xb4fa, 0xb4fb, 0xb4fc, 0xb4fd, 0xb4fe, 0xb4ff,
+ 0xb500, 0xb501, 0xb502, 0xb503, 0xb504, 0xb505, 0xb506, 0xb507, /* 0xb500 */
+ 0xb508, 0xb509, 0xb50a, 0xb50b, 0xb50c, 0xb50d, 0xb50e, 0xb50f,
+ 0xb510, 0xb511, 0xb512, 0xb513, 0xb514, 0xb515, 0xb516, 0xb517,
+ 0xb518, 0xb519, 0xb51a, 0xb51b, 0xb51c, 0xb51d, 0xb51e, 0xb51f,
+ 0xb520, 0xb521, 0xb522, 0xb523, 0xb524, 0xb525, 0xb526, 0xb527,
+ 0xb528, 0xb529, 0xb52a, 0xb52b, 0xb52c, 0xb52d, 0xb52e, 0xb52f,
+ 0xb530, 0xb531, 0xb532, 0xb533, 0xb534, 0xb535, 0xb536, 0xb537,
+ 0xb538, 0xb539, 0xb53a, 0xb53b, 0xb53c, 0xb53d, 0xb53e, 0xb53f,
+ 0xb540, 0xb541, 0xb542, 0xb543, 0xb544, 0xb545, 0xb546, 0xb547, /* 0xb540 */
+ 0xb548, 0xb549, 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f,
+ 0xb550, 0xb551, 0xb552, 0xb553, 0xb554, 0xb555, 0xb556, 0xb557,
+ 0xb558, 0xb559, 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f,
+ 0xb560, 0xb561, 0xb562, 0xb563, 0xb564, 0xb565, 0xb566, 0xb567,
+ 0xb568, 0xb569, 0xb56a, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xb56f,
+ 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, 0xb576, 0xb577,
+ 0xb578, 0xb579, 0xb57a, 0xb57b, 0xb57c, 0xb57d, 0xb57e, 0xb57f,
+ 0xb580, 0xb581, 0xb582, 0xb583, 0xb584, 0xb585, 0xb586, 0xb587, /* 0xb580 */
+ 0xb588, 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb58e, 0xb58f,
+ 0xb590, 0xb591, 0xb592, 0xb593, 0xb594, 0xb595, 0xb596, 0xb597,
+ 0xb598, 0xb599, 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb59e, 0xb59f,
+ 0xb5a0, 0xb5a1, 0xb5a2, 0xb5a3, 0xb5a4, 0xb5a5, 0xb5a6, 0xb5a7,
+ 0xb5a8, 0xb5a9, 0xb5aa, 0xb5ab, 0xb5ac, 0xb5ad, 0xb5ae, 0xb5af,
+ 0xb5b0, 0xb5b1, 0xb5b2, 0xb5b3, 0xb5b4, 0xb5b5, 0xb5b6, 0xb5b7,
+ 0xb5b8, 0xb5b9, 0xb5ba, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5be, 0xb5bf,
+ 0xb5c0, 0xb5c1, 0xb5c2, 0xb5c3, 0xb5c4, 0xb5c5, 0xb5c6, 0xb5c7, /* 0xb5c0 */
+ 0xb5c8, 0xb5c9, 0xb5ca, 0xb5cb, 0xb5cc, 0xb5cd, 0xb5ce, 0xb5cf,
+ 0xb5d0, 0xb5d1, 0xb5d2, 0xb5d3, 0xb5d4, 0xb5d5, 0xb5d6, 0xb5d7,
+ 0xb5d8, 0xb5d9, 0xb5da, 0xb5db, 0xb5dc, 0xb5dd, 0xb5de, 0xb5df,
+ 0xb5e0, 0xb5e1, 0xb5e2, 0xb5e3, 0xb5e4, 0xb5e5, 0xb5e6, 0xb5e7,
+ 0xb5e8, 0xb5e9, 0xb5ea, 0xb5eb, 0xb5ec, 0xb5ed, 0xb5ee, 0xb5ef,
+ 0xb5f0, 0xb5f1, 0xb5f2, 0xb5f3, 0xb5f4, 0xb5f5, 0xb5f6, 0xb5f7,
+ 0xb5f8, 0xb5f9, 0xb5fa, 0xb5fb, 0xb5fc, 0xb5fd, 0xb5fe, 0xb5ff,
+ 0xb600, 0xb601, 0xb602, 0xb603, 0xb604, 0xb605, 0xb606, 0xb607, /* 0xb600 */
+ 0xb608, 0xb609, 0xb60a, 0xb60b, 0xb60c, 0xb60d, 0xb60e, 0xb60f,
+ 0xb610, 0xb611, 0xb612, 0xb613, 0xb614, 0xb615, 0xb616, 0xb617,
+ 0xb618, 0xb619, 0xb61a, 0xb61b, 0xb61c, 0xb61d, 0xb61e, 0xb61f,
+ 0xb620, 0xb621, 0xb622, 0xb623, 0xb624, 0xb625, 0xb626, 0xb627,
+ 0xb628, 0xb629, 0xb62a, 0xb62b, 0xb62c, 0xb62d, 0xb62e, 0xb62f,
+ 0xb630, 0xb631, 0xb632, 0xb633, 0xb634, 0xb635, 0xb636, 0xb637,
+ 0xb638, 0xb639, 0xb63a, 0xb63b, 0xb63c, 0xb63d, 0xb63e, 0xb63f,
+ 0xb640, 0xb641, 0xb642, 0xb643, 0xb644, 0xb645, 0xb646, 0xb647, /* 0xb640 */
+ 0xb648, 0xb649, 0xb64a, 0xb64b, 0xb64c, 0xb64d, 0xb64e, 0xb64f,
+ 0xb650, 0xb651, 0xb652, 0xb653, 0xb654, 0xb655, 0xb656, 0xb657,
+ 0xb658, 0xb659, 0xb65a, 0xb65b, 0xb65c, 0xb65d, 0xb65e, 0xb65f,
+ 0xb660, 0xb661, 0xb662, 0xb663, 0xb664, 0xb665, 0xb666, 0xb667,
+ 0xb668, 0xb669, 0xb66a, 0xb66b, 0xb66c, 0xb66d, 0xb66e, 0xb66f,
+ 0xb670, 0xb671, 0xb672, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677,
+ 0xb678, 0xb679, 0xb67a, 0xb67b, 0xb67c, 0xb67d, 0xb67e, 0xb67f,
+ 0xb680, 0xb681, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, /* 0xb680 */
+ 0xb688, 0xb689, 0xb68a, 0xb68b, 0xb68c, 0xb68d, 0xb68e, 0xb68f,
+ 0xb690, 0xb691, 0xb692, 0xb693, 0xb694, 0xb695, 0xb696, 0xb697,
+ 0xb698, 0xb699, 0xb69a, 0xb69b, 0xb69c, 0xb69d, 0xb69e, 0xb69f,
+ 0xb6a0, 0xb6a1, 0xb6a2, 0xb6a3, 0xb6a4, 0xb6a5, 0xb6a6, 0xb6a7,
+ 0xb6a8, 0xb6a9, 0xb6aa, 0xb6ab, 0xb6ac, 0xb6ad, 0xb6ae, 0xb6af,
+ 0xb6b0, 0xb6b1, 0xb6b2, 0xb6b3, 0xb6b4, 0xb6b5, 0xb6b6, 0xb6b7,
+ 0xb6b8, 0xb6b9, 0xb6ba, 0xb6bb, 0xb6bc, 0xb6bd, 0xb6be, 0xb6bf,
+ 0xb6c0, 0xb6c1, 0xb6c2, 0xb6c3, 0xb6c4, 0xb6c5, 0xb6c6, 0xb6c7, /* 0xb6c0 */
+ 0xb6c8, 0xb6c9, 0xb6ca, 0xb6cb, 0xb6cc, 0xb6cd, 0xb6ce, 0xb6cf,
+ 0xb6d0, 0xb6d1, 0xb6d2, 0xb6d3, 0xb6d4, 0xb6d5, 0xb6d6, 0xb6d7,
+ 0xb6d8, 0xb6d9, 0xb6da, 0xb6db, 0xb6dc, 0xb6dd, 0xb6de, 0xb6df,
+ 0xb6e0, 0xb6e1, 0xb6e2, 0xb6e3, 0xb6e4, 0xb6e5, 0xb6e6, 0xb6e7,
+ 0xb6e8, 0xb6e9, 0xb6ea, 0xb6eb, 0xb6ec, 0xb6ed, 0xb6ee, 0xb6ef,
+ 0xb6f0, 0xb6f1, 0xb6f2, 0xb6f3, 0xb6f4, 0xb6f5, 0xb6f6, 0xb6f7,
+ 0xb6f8, 0xb6f9, 0xb6fa, 0xb6fb, 0xb6fc, 0xb6fd, 0xb6fe, 0xb6ff,
+ 0xb700, 0xb701, 0xb702, 0xb703, 0xb704, 0xb705, 0xb706, 0xb707, /* 0xb700 */
+ 0xb708, 0xb709, 0xb70a, 0xb70b, 0xb70c, 0xb70d, 0xb70e, 0xb70f,
+ 0xb710, 0xb711, 0xb712, 0xb713, 0xb714, 0xb715, 0xb716, 0xb717,
+ 0xb718, 0xb719, 0xb71a, 0xb71b, 0xb71c, 0xb71d, 0xb71e, 0xb71f,
+ 0xb720, 0xb721, 0xb722, 0xb723, 0xb724, 0xb725, 0xb726, 0xb727,
+ 0xb728, 0xb729, 0xb72a, 0xb72b, 0xb72c, 0xb72d, 0xb72e, 0xb72f,
+ 0xb730, 0xb731, 0xb732, 0xb733, 0xb734, 0xb735, 0xb736, 0xb737,
+ 0xb738, 0xb739, 0xb73a, 0xb73b, 0xb73c, 0xb73d, 0xb73e, 0xb73f,
+ 0xb740, 0xb741, 0xb742, 0xb743, 0xb744, 0xb745, 0xb746, 0xb747, /* 0xb740 */
+ 0xb748, 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f,
+ 0xb750, 0xb751, 0xb752, 0xb753, 0xb754, 0xb755, 0xb756, 0xb757,
+ 0xb758, 0xb759, 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xb75f,
+ 0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767,
+ 0xb768, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xb76e, 0xb76f,
+ 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, 0xb776, 0xb777,
+ 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d, 0xb77e, 0xb77f,
+ 0xb780, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, 0xb787, /* 0xb780 */
+ 0xb788, 0xb789, 0xb78a, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb78f,
+ 0xb790, 0xb791, 0xb792, 0xb793, 0xb794, 0xb795, 0xb796, 0xb797,
+ 0xb798, 0xb799, 0xb79a, 0xb79b, 0xb79c, 0xb79d, 0xb79e, 0xb79f,
+ 0xb7a0, 0xb7a1, 0xb7a2, 0xb7a3, 0xb7a4, 0xb7a5, 0xb7a6, 0xb7a7,
+ 0xb7a8, 0xb7a9, 0xb7aa, 0xb7ab, 0xb7ac, 0xb7ad, 0xb7ae, 0xb7af,
+ 0xb7b0, 0xb7b1, 0xb7b2, 0xb7b3, 0xb7b4, 0xb7b5, 0xb7b6, 0xb7b7,
+ 0xb7b8, 0xb7b9, 0xb7ba, 0xb7bb, 0xb7bc, 0xb7bd, 0xb7be, 0xb7bf,
+ 0xb7c0, 0xb7c1, 0xb7c2, 0xb7c3, 0xb7c4, 0xb7c5, 0xb7c6, 0xb7c7, /* 0xb7c0 */
+ 0xb7c8, 0xb7c9, 0xb7ca, 0xb7cb, 0xb7cc, 0xb7cd, 0xb7ce, 0xb7cf,
+ 0xb7d0, 0xb7d1, 0xb7d2, 0xb7d3, 0xb7d4, 0xb7d5, 0xb7d6, 0xb7d7,
+ 0xb7d8, 0xb7d9, 0xb7da, 0xb7db, 0xb7dc, 0xb7dd, 0xb7de, 0xb7df,
+ 0xb7e0, 0xb7e1, 0xb7e2, 0xb7e3, 0xb7e4, 0xb7e5, 0xb7e6, 0xb7e7,
+ 0xb7e8, 0xb7e9, 0xb7ea, 0xb7eb, 0xb7ec, 0xb7ed, 0xb7ee, 0xb7ef,
+ 0xb7f0, 0xb7f1, 0xb7f2, 0xb7f3, 0xb7f4, 0xb7f5, 0xb7f6, 0xb7f7,
+ 0xb7f8, 0xb7f9, 0xb7fa, 0xb7fb, 0xb7fc, 0xb7fd, 0xb7fe, 0xb7ff,
+ 0xb800, 0xb801, 0xb802, 0xb803, 0xb804, 0xb805, 0xb806, 0xb807, /* 0xb800 */
+ 0xb808, 0xb809, 0xb80a, 0xb80b, 0xb80c, 0xb80d, 0xb80e, 0xb80f,
+ 0xb810, 0xb811, 0xb812, 0xb813, 0xb814, 0xb815, 0xb816, 0xb817,
+ 0xb818, 0xb819, 0xb81a, 0xb81b, 0xb81c, 0xb81d, 0xb81e, 0xb81f,
+ 0xb820, 0xb821, 0xb822, 0xb823, 0xb824, 0xb825, 0xb826, 0xb827,
+ 0xb828, 0xb829, 0xb82a, 0xb82b, 0xb82c, 0xb82d, 0xb82e, 0xb82f,
+ 0xb830, 0xb831, 0xb832, 0xb833, 0xb834, 0xb835, 0xb836, 0xb837,
+ 0xb838, 0xb839, 0xb83a, 0xb83b, 0xb83c, 0xb83d, 0xb83e, 0xb83f,
+ 0xb840, 0xb841, 0xb842, 0xb843, 0xb844, 0xb845, 0xb846, 0xb847, /* 0xb840 */
+ 0xb848, 0xb849, 0xb84a, 0xb84b, 0xb84c, 0xb84d, 0xb84e, 0xb84f,
+ 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xb856, 0xb857,
+ 0xb858, 0xb859, 0xb85a, 0xb85b, 0xb85c, 0xb85d, 0xb85e, 0xb85f,
+ 0xb860, 0xb861, 0xb862, 0xb863, 0xb864, 0xb865, 0xb866, 0xb867,
+ 0xb868, 0xb869, 0xb86a, 0xb86b, 0xb86c, 0xb86d, 0xb86e, 0xb86f,
+ 0xb870, 0xb871, 0xb872, 0xb873, 0xb874, 0xb875, 0xb876, 0xb877,
+ 0xb878, 0xb879, 0xb87a, 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb87f,
+ 0xb880, 0xb881, 0xb882, 0xb883, 0xb884, 0xb885, 0xb886, 0xb887, /* 0xb880 */
+ 0xb888, 0xb889, 0xb88a, 0xb88b, 0xb88c, 0xb88d, 0xb88e, 0xb88f,
+ 0xb890, 0xb891, 0xb892, 0xb893, 0xb894, 0xb895, 0xb896, 0xb897,
+ 0xb898, 0xb899, 0xb89a, 0xb89b, 0xb89c, 0xb89d, 0xb89e, 0xb89f,
+ 0xb8a0, 0xb8a1, 0xb8a2, 0xb8a3, 0xb8a4, 0xb8a5, 0xb8a6, 0xb8a7,
+ 0xb8a8, 0xb8a9, 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ad, 0xb8ae, 0xb8af,
+ 0xb8b0, 0xb8b1, 0xb8b2, 0xb8b3, 0xb8b4, 0xb8b5, 0xb8b6, 0xb8b7,
+ 0xb8b8, 0xb8b9, 0xb8ba, 0xb8bb, 0xb8bc, 0xb8bd, 0xb8be, 0xb8bf,
+ 0xb8c0, 0xb8c1, 0xb8c2, 0xb8c3, 0xb8c4, 0xb8c5, 0xb8c6, 0xb8c7, /* 0xb8c0 */
+ 0xb8c8, 0xb8c9, 0xb8ca, 0xb8cb, 0xb8cc, 0xb8cd, 0xb8ce, 0xb8cf,
+ 0xb8d0, 0xb8d1, 0xb8d2, 0xb8d3, 0xb8d4, 0xb8d5, 0xb8d6, 0xb8d7,
+ 0xb8d8, 0xb8d9, 0xb8da, 0xb8db, 0xb8dc, 0xb8dd, 0xb8de, 0xb8df,
+ 0xb8e0, 0xb8e1, 0xb8e2, 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e6, 0xb8e7,
+ 0xb8e8, 0xb8e9, 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ed, 0xb8ee, 0xb8ef,
+ 0xb8f0, 0xb8f1, 0xb8f2, 0xb8f3, 0xb8f4, 0xb8f5, 0xb8f6, 0xb8f7,
+ 0xb8f8, 0xb8f9, 0xb8fa, 0xb8fb, 0xb8fc, 0xb8fd, 0xb8fe, 0xb8ff,
+ 0xb900, 0xb901, 0xb902, 0xb903, 0xb904, 0xb905, 0xb906, 0xb907, /* 0xb900 */
+ 0xb908, 0xb909, 0xb90a, 0xb90b, 0xb90c, 0xb90d, 0xb90e, 0xb90f,
+ 0xb910, 0xb911, 0xb912, 0xb913, 0xb914, 0xb915, 0xb916, 0xb917,
+ 0xb918, 0xb919, 0xb91a, 0xb91b, 0xb91c, 0xb91d, 0xb91e, 0xb91f,
+ 0xb920, 0xb921, 0xb922, 0xb923, 0xb924, 0xb925, 0xb926, 0xb927,
+ 0xb928, 0xb929, 0xb92a, 0xb92b, 0xb92c, 0xb92d, 0xb92e, 0xb92f,
+ 0xb930, 0xb931, 0xb932, 0xb933, 0xb934, 0xb935, 0xb936, 0xb937,
+ 0xb938, 0xb939, 0xb93a, 0xb93b, 0xb93c, 0xb93d, 0xb93e, 0xb93f,
+ 0xb940, 0xb941, 0xb942, 0xb943, 0xb944, 0xb945, 0xb946, 0xb947, /* 0xb940 */
+ 0xb948, 0xb949, 0xb94a, 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f,
+ 0xb950, 0xb951, 0xb952, 0xb953, 0xb954, 0xb955, 0xb956, 0xb957,
+ 0xb958, 0xb959, 0xb95a, 0xb95b, 0xb95c, 0xb95d, 0xb95e, 0xb95f,
+ 0xb960, 0xb961, 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967,
+ 0xb968, 0xb969, 0xb96a, 0xb96b, 0xb96c, 0xb96d, 0xb96e, 0xb96f,
+ 0xb970, 0xb971, 0xb972, 0xb973, 0xb974, 0xb975, 0xb976, 0xb977,
+ 0xb978, 0xb979, 0xb97a, 0xb97b, 0xb97c, 0xb97d, 0xb97e, 0xb97f,
+ 0xb980, 0xb981, 0xb982, 0xb983, 0xb984, 0xb985, 0xb986, 0xb987, /* 0xb980 */
+ 0xb988, 0xb989, 0xb98a, 0xb98b, 0xb98c, 0xb98d, 0xb98e, 0xb98f,
+ 0xb990, 0xb991, 0xb992, 0xb993, 0xb994, 0xb995, 0xb996, 0xb997,
+ 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, 0xb99d, 0xb99e, 0xb99f,
+ 0xb9a0, 0xb9a1, 0xb9a2, 0xb9a3, 0xb9a4, 0xb9a5, 0xb9a6, 0xb9a7,
+ 0xb9a8, 0xb9a9, 0xb9aa, 0xb9ab, 0xb9ac, 0xb9ad, 0xb9ae, 0xb9af,
+ 0xb9b0, 0xb9b1, 0xb9b2, 0xb9b3, 0xb9b4, 0xb9b5, 0xb9b6, 0xb9b7,
+ 0xb9b8, 0xb9b9, 0xb9ba, 0xb9bb, 0xb9bc, 0xb9bd, 0xb9be, 0xb9bf,
+ 0xb9c0, 0xb9c1, 0xb9c2, 0xb9c3, 0xb9c4, 0xb9c5, 0xb9c6, 0xb9c7, /* 0xb9c0 */
+ 0xb9c8, 0xb9c9, 0xb9ca, 0xb9cb, 0xb9cc, 0xb9cd, 0xb9ce, 0xb9cf,
+ 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d3, 0xb9d4, 0xb9d5, 0xb9d6, 0xb9d7,
+ 0xb9d8, 0xb9d9, 0xb9da, 0xb9db, 0xb9dc, 0xb9dd, 0xb9de, 0xb9df,
+ 0xb9e0, 0xb9e1, 0xb9e2, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e6, 0xb9e7,
+ 0xb9e8, 0xb9e9, 0xb9ea, 0xb9eb, 0xb9ec, 0xb9ed, 0xb9ee, 0xb9ef,
+ 0xb9f0, 0xb9f1, 0xb9f2, 0xb9f3, 0xb9f4, 0xb9f5, 0xb9f6, 0xb9f7,
+ 0xb9f8, 0xb9f9, 0xb9fa, 0xb9fb, 0xb9fc, 0xb9fd, 0xb9fe, 0xb9ff,
+ 0xba00, 0xba01, 0xba02, 0xba03, 0xba04, 0xba05, 0xba06, 0xba07, /* 0xba00 */
+ 0xba08, 0xba09, 0xba0a, 0xba0b, 0xba0c, 0xba0d, 0xba0e, 0xba0f,
+ 0xba10, 0xba11, 0xba12, 0xba13, 0xba14, 0xba15, 0xba16, 0xba17,
+ 0xba18, 0xba19, 0xba1a, 0xba1b, 0xba1c, 0xba1d, 0xba1e, 0xba1f,
+ 0xba20, 0xba21, 0xba22, 0xba23, 0xba24, 0xba25, 0xba26, 0xba27,
+ 0xba28, 0xba29, 0xba2a, 0xba2b, 0xba2c, 0xba2d, 0xba2e, 0xba2f,
+ 0xba30, 0xba31, 0xba32, 0xba33, 0xba34, 0xba35, 0xba36, 0xba37,
+ 0xba38, 0xba39, 0xba3a, 0xba3b, 0xba3c, 0xba3d, 0xba3e, 0xba3f,
+ 0xba40, 0xba41, 0xba42, 0xba43, 0xba44, 0xba45, 0xba46, 0xba47, /* 0xba40 */
+ 0xba48, 0xba49, 0xba4a, 0xba4b, 0xba4c, 0xba4d, 0xba4e, 0xba4f,
+ 0xba50, 0xba51, 0xba52, 0xba53, 0xba54, 0xba55, 0xba56, 0xba57,
+ 0xba58, 0xba59, 0xba5a, 0xba5b, 0xba5c, 0xba5d, 0xba5e, 0xba5f,
+ 0xba60, 0xba61, 0xba62, 0xba63, 0xba64, 0xba65, 0xba66, 0xba67,
+ 0xba68, 0xba69, 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f,
+ 0xba70, 0xba71, 0xba72, 0xba73, 0xba74, 0xba75, 0xba76, 0xba77,
+ 0xba78, 0xba79, 0xba7a, 0xba7b, 0xba7c, 0xba7d, 0xba7e, 0xba7f,
+ 0xba80, 0xba81, 0xba82, 0xba83, 0xba84, 0xba85, 0xba86, 0xba87, /* 0xba80 */
+ 0xba88, 0xba89, 0xba8a, 0xba8b, 0xba8c, 0xba8d, 0xba8e, 0xba8f,
+ 0xba90, 0xba91, 0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97,
+ 0xba98, 0xba99, 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f,
+ 0xbaa0, 0xbaa1, 0xbaa2, 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa6, 0xbaa7,
+ 0xbaa8, 0xbaa9, 0xbaaa, 0xbaab, 0xbaac, 0xbaad, 0xbaae, 0xbaaf,
+ 0xbab0, 0xbab1, 0xbab2, 0xbab3, 0xbab4, 0xbab5, 0xbab6, 0xbab7,
+ 0xbab8, 0xbab9, 0xbaba, 0xbabb, 0xbabc, 0xbabd, 0xbabe, 0xbabf,
+ 0xbac0, 0xbac1, 0xbac2, 0xbac3, 0xbac4, 0xbac5, 0xbac6, 0xbac7, /* 0xbac0 */
+ 0xbac8, 0xbac9, 0xbaca, 0xbacb, 0xbacc, 0xbacd, 0xbace, 0xbacf,
+ 0xbad0, 0xbad1, 0xbad2, 0xbad3, 0xbad4, 0xbad5, 0xbad6, 0xbad7,
+ 0xbad8, 0xbad9, 0xbada, 0xbadb, 0xbadc, 0xbadd, 0xbade, 0xbadf,
+ 0xbae0, 0xbae1, 0xbae2, 0xbae3, 0xbae4, 0xbae5, 0xbae6, 0xbae7,
+ 0xbae8, 0xbae9, 0xbaea, 0xbaeb, 0xbaec, 0xbaed, 0xbaee, 0xbaef,
+ 0xbaf0, 0xbaf1, 0xbaf2, 0xbaf3, 0xbaf4, 0xbaf5, 0xbaf6, 0xbaf7,
+ 0xbaf8, 0xbaf9, 0xbafa, 0xbafb, 0xbafc, 0xbafd, 0xbafe, 0xbaff,
+ 0xbb00, 0xbb01, 0xbb02, 0xbb03, 0xbb04, 0xbb05, 0xbb06, 0xbb07, /* 0xbb00 */
+ 0xbb08, 0xbb09, 0xbb0a, 0xbb0b, 0xbb0c, 0xbb0d, 0xbb0e, 0xbb0f,
+ 0xbb10, 0xbb11, 0xbb12, 0xbb13, 0xbb14, 0xbb15, 0xbb16, 0xbb17,
+ 0xbb18, 0xbb19, 0xbb1a, 0xbb1b, 0xbb1c, 0xbb1d, 0xbb1e, 0xbb1f,
+ 0xbb20, 0xbb21, 0xbb22, 0xbb23, 0xbb24, 0xbb25, 0xbb26, 0xbb27,
+ 0xbb28, 0xbb29, 0xbb2a, 0xbb2b, 0xbb2c, 0xbb2d, 0xbb2e, 0xbb2f,
+ 0xbb30, 0xbb31, 0xbb32, 0xbb33, 0xbb34, 0xbb35, 0xbb36, 0xbb37,
+ 0xbb38, 0xbb39, 0xbb3a, 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb3f,
+ 0xbb40, 0xbb41, 0xbb42, 0xbb43, 0xbb44, 0xbb45, 0xbb46, 0xbb47, /* 0xbb40 */
+ 0xbb48, 0xbb49, 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f,
+ 0xbb50, 0xbb51, 0xbb52, 0xbb53, 0xbb54, 0xbb55, 0xbb56, 0xbb57,
+ 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f,
+ 0xbb60, 0xbb61, 0xbb62, 0xbb63, 0xbb64, 0xbb65, 0xbb66, 0xbb67,
+ 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, 0xbb6c, 0xbb6d, 0xbb6e, 0xbb6f,
+ 0xbb70, 0xbb71, 0xbb72, 0xbb73, 0xbb74, 0xbb75, 0xbb76, 0xbb77,
+ 0xbb78, 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, 0xbb7f,
+ 0xbb80, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, 0xbb87, /* 0xbb80 */
+ 0xbb88, 0xbb89, 0xbb8a, 0xbb8b, 0xbb8c, 0xbb8d, 0xbb8e, 0xbb8f,
+ 0xbb90, 0xbb91, 0xbb92, 0xbb93, 0xbb94, 0xbb95, 0xbb96, 0xbb97,
+ 0xbb98, 0xbb99, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, 0xbb9e, 0xbb9f,
+ 0xbba0, 0xbba1, 0xbba2, 0xbba3, 0xbba4, 0xbba5, 0xbba6, 0xbba7,
+ 0xbba8, 0xbba9, 0xbbaa, 0xbbab, 0xbbac, 0xbbad, 0xbbae, 0xbbaf,
+ 0xbbb0, 0xbbb1, 0xbbb2, 0xbbb3, 0xbbb4, 0xbbb5, 0xbbb6, 0xbbb7,
+ 0xbbb8, 0xbbb9, 0xbbba, 0xbbbb, 0xbbbc, 0xbbbd, 0xbbbe, 0xbbbf,
+ 0xbbc0, 0xbbc1, 0xbbc2, 0xbbc3, 0xbbc4, 0xbbc5, 0xbbc6, 0xbbc7, /* 0xbbc0 */
+ 0xbbc8, 0xbbc9, 0xbbca, 0xbbcb, 0xbbcc, 0xbbcd, 0xbbce, 0xbbcf,
+ 0xbbd0, 0xbbd1, 0xbbd2, 0xbbd3, 0xbbd4, 0xbbd5, 0xbbd6, 0xbbd7,
+ 0xbbd8, 0xbbd9, 0xbbda, 0xbbdb, 0xbbdc, 0xbbdd, 0xbbde, 0xbbdf,
+ 0xbbe0, 0xbbe1, 0xbbe2, 0xbbe3, 0xbbe4, 0xbbe5, 0xbbe6, 0xbbe7,
+ 0xbbe8, 0xbbe9, 0xbbea, 0xbbeb, 0xbbec, 0xbbed, 0xbbee, 0xbbef,
+ 0xbbf0, 0xbbf1, 0xbbf2, 0xbbf3, 0xbbf4, 0xbbf5, 0xbbf6, 0xbbf7,
+ 0xbbf8, 0xbbf9, 0xbbfa, 0xbbfb, 0xbbfc, 0xbbfd, 0xbbfe, 0xbbff,
+ 0xbc00, 0xbc01, 0xbc02, 0xbc03, 0xbc04, 0xbc05, 0xbc06, 0xbc07, /* 0xbc00 */
+ 0xbc08, 0xbc09, 0xbc0a, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0e, 0xbc0f,
+ 0xbc10, 0xbc11, 0xbc12, 0xbc13, 0xbc14, 0xbc15, 0xbc16, 0xbc17,
+ 0xbc18, 0xbc19, 0xbc1a, 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f,
+ 0xbc20, 0xbc21, 0xbc22, 0xbc23, 0xbc24, 0xbc25, 0xbc26, 0xbc27,
+ 0xbc28, 0xbc29, 0xbc2a, 0xbc2b, 0xbc2c, 0xbc2d, 0xbc2e, 0xbc2f,
+ 0xbc30, 0xbc31, 0xbc32, 0xbc33, 0xbc34, 0xbc35, 0xbc36, 0xbc37,
+ 0xbc38, 0xbc39, 0xbc3a, 0xbc3b, 0xbc3c, 0xbc3d, 0xbc3e, 0xbc3f,
+ 0xbc40, 0xbc41, 0xbc42, 0xbc43, 0xbc44, 0xbc45, 0xbc46, 0xbc47, /* 0xbc40 */
+ 0xbc48, 0xbc49, 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xbc4f,
+ 0xbc50, 0xbc51, 0xbc52, 0xbc53, 0xbc54, 0xbc55, 0xbc56, 0xbc57,
+ 0xbc58, 0xbc59, 0xbc5a, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f,
+ 0xbc60, 0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67,
+ 0xbc68, 0xbc69, 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, 0xbc6f,
+ 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, 0xbc77,
+ 0xbc78, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, 0xbc7e, 0xbc7f,
+ 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, 0xbc87, /* 0xbc80 */
+ 0xbc88, 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, 0xbc8f,
+ 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbc94, 0xbc95, 0xbc96, 0xbc97,
+ 0xbc98, 0xbc99, 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f,
+ 0xbca0, 0xbca1, 0xbca2, 0xbca3, 0xbca4, 0xbca5, 0xbca6, 0xbca7,
+ 0xbca8, 0xbca9, 0xbcaa, 0xbcab, 0xbcac, 0xbcad, 0xbcae, 0xbcaf,
+ 0xbcb0, 0xbcb1, 0xbcb2, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcb6, 0xbcb7,
+ 0xbcb8, 0xbcb9, 0xbcba, 0xbcbb, 0xbcbc, 0xbcbd, 0xbcbe, 0xbcbf,
+ 0xbcc0, 0xbcc1, 0xbcc2, 0xbcc3, 0xbcc4, 0xbcc5, 0xbcc6, 0xbcc7, /* 0xbcc0 */
+ 0xbcc8, 0xbcc9, 0xbcca, 0xbccb, 0xbccc, 0xbccd, 0xbcce, 0xbccf,
+ 0xbcd0, 0xbcd1, 0xbcd2, 0xbcd3, 0xbcd4, 0xbcd5, 0xbcd6, 0xbcd7,
+ 0xbcd8, 0xbcd9, 0xbcda, 0xbcdb, 0xbcdc, 0xbcdd, 0xbcde, 0xbcdf,
+ 0xbce0, 0xbce1, 0xbce2, 0xbce3, 0xbce4, 0xbce5, 0xbce6, 0xbce7,
+ 0xbce8, 0xbce9, 0xbcea, 0xbceb, 0xbcec, 0xbced, 0xbcee, 0xbcef,
+ 0xbcf0, 0xbcf1, 0xbcf2, 0xbcf3, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf7,
+ 0xbcf8, 0xbcf9, 0xbcfa, 0xbcfb, 0xbcfc, 0xbcfd, 0xbcfe, 0xbcff,
+ 0xbd00, 0xbd01, 0xbd02, 0xbd03, 0xbd04, 0xbd05, 0xbd06, 0xbd07, /* 0xbd00 */
+ 0xbd08, 0xbd09, 0xbd0a, 0xbd0b, 0xbd0c, 0xbd0d, 0xbd0e, 0xbd0f,
+ 0xbd10, 0xbd11, 0xbd12, 0xbd13, 0xbd14, 0xbd15, 0xbd16, 0xbd17,
+ 0xbd18, 0xbd19, 0xbd1a, 0xbd1b, 0xbd1c, 0xbd1d, 0xbd1e, 0xbd1f,
+ 0xbd20, 0xbd21, 0xbd22, 0xbd23, 0xbd24, 0xbd25, 0xbd26, 0xbd27,
+ 0xbd28, 0xbd29, 0xbd2a, 0xbd2b, 0xbd2c, 0xbd2d, 0xbd2e, 0xbd2f,
+ 0xbd30, 0xbd31, 0xbd32, 0xbd33, 0xbd34, 0xbd35, 0xbd36, 0xbd37,
+ 0xbd38, 0xbd39, 0xbd3a, 0xbd3b, 0xbd3c, 0xbd3d, 0xbd3e, 0xbd3f,
+ 0xbd40, 0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, /* 0xbd40 */
+ 0xbd48, 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f,
+ 0xbd50, 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57,
+ 0xbd58, 0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f,
+ 0xbd60, 0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67,
+ 0xbd68, 0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f,
+ 0xbd70, 0xbd71, 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xbd77,
+ 0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xbd7f,
+ 0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, /* 0xbd80 */
+ 0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f,
+ 0xbd90, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97,
+ 0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f,
+ 0xbda0, 0xbda1, 0xbda2, 0xbda3, 0xbda4, 0xbda5, 0xbda6, 0xbda7,
+ 0xbda8, 0xbda9, 0xbdaa, 0xbdab, 0xbdac, 0xbdad, 0xbdae, 0xbdaf,
+ 0xbdb0, 0xbdb1, 0xbdb2, 0xbdb3, 0xbdb4, 0xbdb5, 0xbdb6, 0xbdb7,
+ 0xbdb8, 0xbdb9, 0xbdba, 0xbdbb, 0xbdbc, 0xbdbd, 0xbdbe, 0xbdbf,
+ 0xbdc0, 0xbdc1, 0xbdc2, 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc6, 0xbdc7, /* 0xbdc0 */
+ 0xbdc8, 0xbdc9, 0xbdca, 0xbdcb, 0xbdcc, 0xbdcd, 0xbdce, 0xbdcf,
+ 0xbdd0, 0xbdd1, 0xbdd2, 0xbdd3, 0xbdd4, 0xbdd5, 0xbdd6, 0xbdd7,
+ 0xbdd8, 0xbdd9, 0xbdda, 0xbddb, 0xbddc, 0xbddd, 0xbdde, 0xbddf,
+ 0xbde0, 0xbde1, 0xbde2, 0xbde3, 0xbde4, 0xbde5, 0xbde6, 0xbde7,
+ 0xbde8, 0xbde9, 0xbdea, 0xbdeb, 0xbdec, 0xbded, 0xbdee, 0xbdef,
+ 0xbdf0, 0xbdf1, 0xbdf2, 0xbdf3, 0xbdf4, 0xbdf5, 0xbdf6, 0xbdf7,
+ 0xbdf8, 0xbdf9, 0xbdfa, 0xbdfb, 0xbdfc, 0xbdfd, 0xbdfe, 0xbdff,
+ 0xbe00, 0xbe01, 0xbe02, 0xbe03, 0xbe04, 0xbe05, 0xbe06, 0xbe07, /* 0xbe00 */
+ 0xbe08, 0xbe09, 0xbe0a, 0xbe0b, 0xbe0c, 0xbe0d, 0xbe0e, 0xbe0f,
+ 0xbe10, 0xbe11, 0xbe12, 0xbe13, 0xbe14, 0xbe15, 0xbe16, 0xbe17,
+ 0xbe18, 0xbe19, 0xbe1a, 0xbe1b, 0xbe1c, 0xbe1d, 0xbe1e, 0xbe1f,
+ 0xbe20, 0xbe21, 0xbe22, 0xbe23, 0xbe24, 0xbe25, 0xbe26, 0xbe27,
+ 0xbe28, 0xbe29, 0xbe2a, 0xbe2b, 0xbe2c, 0xbe2d, 0xbe2e, 0xbe2f,
+ 0xbe30, 0xbe31, 0xbe32, 0xbe33, 0xbe34, 0xbe35, 0xbe36, 0xbe37,
+ 0xbe38, 0xbe39, 0xbe3a, 0xbe3b, 0xbe3c, 0xbe3d, 0xbe3e, 0xbe3f,
+ 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, 0xbe47, /* 0xbe40 */
+ 0xbe48, 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xbe4d, 0xbe4e, 0xbe4f,
+ 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xbe54, 0xbe55, 0xbe56, 0xbe57,
+ 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xbe5c, 0xbe5d, 0xbe5e, 0xbe5f,
+ 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, 0xbe65, 0xbe66, 0xbe67,
+ 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, 0xbe6d, 0xbe6e, 0xbe6f,
+ 0xbe70, 0xbe71, 0xbe72, 0xbe73, 0xbe74, 0xbe75, 0xbe76, 0xbe77,
+ 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe7e, 0xbe7f,
+ 0xbe80, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, 0xbe86, 0xbe87, /* 0xbe80 */
+ 0xbe88, 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, 0xbe8e, 0xbe8f,
+ 0xbe90, 0xbe91, 0xbe92, 0xbe93, 0xbe94, 0xbe95, 0xbe96, 0xbe97,
+ 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, 0xbe9e, 0xbe9f,
+ 0xbea0, 0xbea1, 0xbea2, 0xbea3, 0xbea4, 0xbea5, 0xbea6, 0xbea7,
+ 0xbea8, 0xbea9, 0xbeaa, 0xbeab, 0xbeac, 0xbead, 0xbeae, 0xbeaf,
+ 0xbeb0, 0xbeb1, 0xbeb2, 0xbeb3, 0xbeb4, 0xbeb5, 0xbeb6, 0xbeb7,
+ 0xbeb8, 0xbeb9, 0xbeba, 0xbebb, 0xbebc, 0xbebd, 0xbebe, 0xbebf,
+ 0xbec0, 0xbec1, 0xbec2, 0xbec3, 0xbec4, 0xbec5, 0xbec6, 0xbec7, /* 0xbec0 */
+ 0xbec8, 0xbec9, 0xbeca, 0xbecb, 0xbecc, 0xbecd, 0xbece, 0xbecf,
+ 0xbed0, 0xbed1, 0xbed2, 0xbed3, 0xbed4, 0xbed5, 0xbed6, 0xbed7,
+ 0xbed8, 0xbed9, 0xbeda, 0xbedb, 0xbedc, 0xbedd, 0xbede, 0xbedf,
+ 0xbee0, 0xbee1, 0xbee2, 0xbee3, 0xbee4, 0xbee5, 0xbee6, 0xbee7,
+ 0xbee8, 0xbee9, 0xbeea, 0xbeeb, 0xbeec, 0xbeed, 0xbeee, 0xbeef,
+ 0xbef0, 0xbef1, 0xbef2, 0xbef3, 0xbef4, 0xbef5, 0xbef6, 0xbef7,
+ 0xbef8, 0xbef9, 0xbefa, 0xbefb, 0xbefc, 0xbefd, 0xbefe, 0xbeff,
+ 0xbf00, 0xbf01, 0xbf02, 0xbf03, 0xbf04, 0xbf05, 0xbf06, 0xbf07, /* 0xbf00 */
+ 0xbf08, 0xbf09, 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0d, 0xbf0e, 0xbf0f,
+ 0xbf10, 0xbf11, 0xbf12, 0xbf13, 0xbf14, 0xbf15, 0xbf16, 0xbf17,
+ 0xbf18, 0xbf19, 0xbf1a, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf1e, 0xbf1f,
+ 0xbf20, 0xbf21, 0xbf22, 0xbf23, 0xbf24, 0xbf25, 0xbf26, 0xbf27,
+ 0xbf28, 0xbf29, 0xbf2a, 0xbf2b, 0xbf2c, 0xbf2d, 0xbf2e, 0xbf2f,
+ 0xbf30, 0xbf31, 0xbf32, 0xbf33, 0xbf34, 0xbf35, 0xbf36, 0xbf37,
+ 0xbf38, 0xbf39, 0xbf3a, 0xbf3b, 0xbf3c, 0xbf3d, 0xbf3e, 0xbf3f,
+ 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, 0xbf45, 0xbf46, 0xbf47, /* 0xbf40 */
+ 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4d, 0xbf4e, 0xbf4f,
+ 0xbf50, 0xbf51, 0xbf52, 0xbf53, 0xbf54, 0xbf55, 0xbf56, 0xbf57,
+ 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0xbf5c, 0xbf5d, 0xbf5e, 0xbf5f,
+ 0xbf60, 0xbf61, 0xbf62, 0xbf63, 0xbf64, 0xbf65, 0xbf66, 0xbf67,
+ 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, 0xbf6d, 0xbf6e, 0xbf6f,
+ 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xbf74, 0xbf75, 0xbf76, 0xbf77,
+ 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, 0xbf7d, 0xbf7e, 0xbf7f,
+ 0xbf80, 0xbf81, 0xbf82, 0xbf83, 0xbf84, 0xbf85, 0xbf86, 0xbf87, /* 0xbf80 */
+ 0xbf88, 0xbf89, 0xbf8a, 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f,
+ 0xbf90, 0xbf91, 0xbf92, 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97,
+ 0xbf98, 0xbf99, 0xbf9a, 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f,
+ 0xbfa0, 0xbfa1, 0xbfa2, 0xbfa3, 0xbfa4, 0xbfa5, 0xbfa6, 0xbfa7,
+ 0xbfa8, 0xbfa9, 0xbfaa, 0xbfab, 0xbfac, 0xbfad, 0xbfae, 0xbfaf,
+ 0xbfb0, 0xbfb1, 0xbfb2, 0xbfb3, 0xbfb4, 0xbfb5, 0xbfb6, 0xbfb7,
+ 0xbfb8, 0xbfb9, 0xbfba, 0xbfbb, 0xbfbc, 0xbfbd, 0xbfbe, 0xbfbf,
+ 0xbfc0, 0xbfc1, 0xbfc2, 0xbfc3, 0xbfc4, 0xbfc5, 0xbfc6, 0xbfc7, /* 0xbfc0 */
+ 0xbfc8, 0xbfc9, 0xbfca, 0xbfcb, 0xbfcc, 0xbfcd, 0xbfce, 0xbfcf,
+ 0xbfd0, 0xbfd1, 0xbfd2, 0xbfd3, 0xbfd4, 0xbfd5, 0xbfd6, 0xbfd7,
+ 0xbfd8, 0xbfd9, 0xbfda, 0xbfdb, 0xbfdc, 0xbfdd, 0xbfde, 0xbfdf,
+ 0xbfe0, 0xbfe1, 0xbfe2, 0xbfe3, 0xbfe4, 0xbfe5, 0xbfe6, 0xbfe7,
+ 0xbfe8, 0xbfe9, 0xbfea, 0xbfeb, 0xbfec, 0xbfed, 0xbfee, 0xbfef,
+ 0xbff0, 0xbff1, 0xbff2, 0xbff3, 0xbff4, 0xbff5, 0xbff6, 0xbff7,
+ 0xbff8, 0xbff9, 0xbffa, 0xbffb, 0xbffc, 0xbffd, 0xbffe, 0xbfff,
+ 0xc000, 0xc001, 0xc002, 0xc003, 0xc004, 0xc005, 0xc006, 0xc007, /* 0xc000 */
+ 0xc008, 0xc009, 0xc00a, 0xc00b, 0xc00c, 0xc00d, 0xc00e, 0xc00f,
+ 0xc010, 0xc011, 0xc012, 0xc013, 0xc014, 0xc015, 0xc016, 0xc017,
+ 0xc018, 0xc019, 0xc01a, 0xc01b, 0xc01c, 0xc01d, 0xc01e, 0xc01f,
+ 0xc020, 0xc021, 0xc022, 0xc023, 0xc024, 0xc025, 0xc026, 0xc027,
+ 0xc028, 0xc029, 0xc02a, 0xc02b, 0xc02c, 0xc02d, 0xc02e, 0xc02f,
+ 0xc030, 0xc031, 0xc032, 0xc033, 0xc034, 0xc035, 0xc036, 0xc037,
+ 0xc038, 0xc039, 0xc03a, 0xc03b, 0xc03c, 0xc03d, 0xc03e, 0xc03f,
+ 0xc040, 0xc041, 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, /* 0xc040 */
+ 0xc048, 0xc049, 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f,
+ 0xc050, 0xc051, 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057,
+ 0xc058, 0xc059, 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f,
+ 0xc060, 0xc061, 0xc062, 0xc063, 0xc064, 0xc065, 0xc066, 0xc067,
+ 0xc068, 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f,
+ 0xc070, 0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077,
+ 0xc078, 0xc079, 0xc07a, 0xc07b, 0xc07c, 0xc07d, 0xc07e, 0xc07f,
+ 0xc080, 0xc081, 0xc082, 0xc083, 0xc084, 0xc085, 0xc086, 0xc087, /* 0xc080 */
+ 0xc088, 0xc089, 0xc08a, 0xc08b, 0xc08c, 0xc08d, 0xc08e, 0xc08f,
+ 0xc090, 0xc091, 0xc092, 0xc093, 0xc094, 0xc095, 0xc096, 0xc097,
+ 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e, 0xc09f,
+ 0xc0a0, 0xc0a1, 0xc0a2, 0xc0a3, 0xc0a4, 0xc0a5, 0xc0a6, 0xc0a7,
+ 0xc0a8, 0xc0a9, 0xc0aa, 0xc0ab, 0xc0ac, 0xc0ad, 0xc0ae, 0xc0af,
+ 0xc0b0, 0xc0b1, 0xc0b2, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0b7,
+ 0xc0b8, 0xc0b9, 0xc0ba, 0xc0bb, 0xc0bc, 0xc0bd, 0xc0be, 0xc0bf,
+ 0xc0c0, 0xc0c1, 0xc0c2, 0xc0c3, 0xc0c4, 0xc0c5, 0xc0c6, 0xc0c7, /* 0xc0c0 */
+ 0xc0c8, 0xc0c9, 0xc0ca, 0xc0cb, 0xc0cc, 0xc0cd, 0xc0ce, 0xc0cf,
+ 0xc0d0, 0xc0d1, 0xc0d2, 0xc0d3, 0xc0d4, 0xc0d5, 0xc0d6, 0xc0d7,
+ 0xc0d8, 0xc0d9, 0xc0da, 0xc0db, 0xc0dc, 0xc0dd, 0xc0de, 0xc0df,
+ 0xc0e0, 0xc0e1, 0xc0e2, 0xc0e3, 0xc0e4, 0xc0e5, 0xc0e6, 0xc0e7,
+ 0xc0e8, 0xc0e9, 0xc0ea, 0xc0eb, 0xc0ec, 0xc0ed, 0xc0ee, 0xc0ef,
+ 0xc0f0, 0xc0f1, 0xc0f2, 0xc0f3, 0xc0f4, 0xc0f5, 0xc0f6, 0xc0f7,
+ 0xc0f8, 0xc0f9, 0xc0fa, 0xc0fb, 0xc0fc, 0xc0fd, 0xc0fe, 0xc0ff,
+ 0xc100, 0xc101, 0xc102, 0xc103, 0xc104, 0xc105, 0xc106, 0xc107, /* 0xc100 */
+ 0xc108, 0xc109, 0xc10a, 0xc10b, 0xc10c, 0xc10d, 0xc10e, 0xc10f,
+ 0xc110, 0xc111, 0xc112, 0xc113, 0xc114, 0xc115, 0xc116, 0xc117,
+ 0xc118, 0xc119, 0xc11a, 0xc11b, 0xc11c, 0xc11d, 0xc11e, 0xc11f,
+ 0xc120, 0xc121, 0xc122, 0xc123, 0xc124, 0xc125, 0xc126, 0xc127,
+ 0xc128, 0xc129, 0xc12a, 0xc12b, 0xc12c, 0xc12d, 0xc12e, 0xc12f,
+ 0xc130, 0xc131, 0xc132, 0xc133, 0xc134, 0xc135, 0xc136, 0xc137,
+ 0xc138, 0xc139, 0xc13a, 0xc13b, 0xc13c, 0xc13d, 0xc13e, 0xc13f,
+ 0xc140, 0xc141, 0xc142, 0xc143, 0xc144, 0xc145, 0xc146, 0xc147, /* 0xc140 */
+ 0xc148, 0xc149, 0xc14a, 0xc14b, 0xc14c, 0xc14d, 0xc14e, 0xc14f,
+ 0xc150, 0xc151, 0xc152, 0xc153, 0xc154, 0xc155, 0xc156, 0xc157,
+ 0xc158, 0xc159, 0xc15a, 0xc15b, 0xc15c, 0xc15d, 0xc15e, 0xc15f,
+ 0xc160, 0xc161, 0xc162, 0xc163, 0xc164, 0xc165, 0xc166, 0xc167,
+ 0xc168, 0xc169, 0xc16a, 0xc16b, 0xc16c, 0xc16d, 0xc16e, 0xc16f,
+ 0xc170, 0xc171, 0xc172, 0xc173, 0xc174, 0xc175, 0xc176, 0xc177,
+ 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xc17e, 0xc17f,
+ 0xc180, 0xc181, 0xc182, 0xc183, 0xc184, 0xc185, 0xc186, 0xc187, /* 0xc180 */
+ 0xc188, 0xc189, 0xc18a, 0xc18b, 0xc18c, 0xc18d, 0xc18e, 0xc18f,
+ 0xc190, 0xc191, 0xc192, 0xc193, 0xc194, 0xc195, 0xc196, 0xc197,
+ 0xc198, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xc19f,
+ 0xc1a0, 0xc1a1, 0xc1a2, 0xc1a3, 0xc1a4, 0xc1a5, 0xc1a6, 0xc1a7,
+ 0xc1a8, 0xc1a9, 0xc1aa, 0xc1ab, 0xc1ac, 0xc1ad, 0xc1ae, 0xc1af,
+ 0xc1b0, 0xc1b1, 0xc1b2, 0xc1b3, 0xc1b4, 0xc1b5, 0xc1b6, 0xc1b7,
+ 0xc1b8, 0xc1b9, 0xc1ba, 0xc1bb, 0xc1bc, 0xc1bd, 0xc1be, 0xc1bf,
+ 0xc1c0, 0xc1c1, 0xc1c2, 0xc1c3, 0xc1c4, 0xc1c5, 0xc1c6, 0xc1c7, /* 0xc1c0 */
+ 0xc1c8, 0xc1c9, 0xc1ca, 0xc1cb, 0xc1cc, 0xc1cd, 0xc1ce, 0xc1cf,
+ 0xc1d0, 0xc1d1, 0xc1d2, 0xc1d3, 0xc1d4, 0xc1d5, 0xc1d6, 0xc1d7,
+ 0xc1d8, 0xc1d9, 0xc1da, 0xc1db, 0xc1dc, 0xc1dd, 0xc1de, 0xc1df,
+ 0xc1e0, 0xc1e1, 0xc1e2, 0xc1e3, 0xc1e4, 0xc1e5, 0xc1e6, 0xc1e7,
+ 0xc1e8, 0xc1e9, 0xc1ea, 0xc1eb, 0xc1ec, 0xc1ed, 0xc1ee, 0xc1ef,
+ 0xc1f0, 0xc1f1, 0xc1f2, 0xc1f3, 0xc1f4, 0xc1f5, 0xc1f6, 0xc1f7,
+ 0xc1f8, 0xc1f9, 0xc1fa, 0xc1fb, 0xc1fc, 0xc1fd, 0xc1fe, 0xc1ff,
+ 0xc200, 0xc201, 0xc202, 0xc203, 0xc204, 0xc205, 0xc206, 0xc207, /* 0xc200 */
+ 0xc208, 0xc209, 0xc20a, 0xc20b, 0xc20c, 0xc20d, 0xc20e, 0xc20f,
+ 0xc210, 0xc211, 0xc212, 0xc213, 0xc214, 0xc215, 0xc216, 0xc217,
+ 0xc218, 0xc219, 0xc21a, 0xc21b, 0xc21c, 0xc21d, 0xc21e, 0xc21f,
+ 0xc220, 0xc221, 0xc222, 0xc223, 0xc224, 0xc225, 0xc226, 0xc227,
+ 0xc228, 0xc229, 0xc22a, 0xc22b, 0xc22c, 0xc22d, 0xc22e, 0xc22f,
+ 0xc230, 0xc231, 0xc232, 0xc233, 0xc234, 0xc235, 0xc236, 0xc237,
+ 0xc238, 0xc239, 0xc23a, 0xc23b, 0xc23c, 0xc23d, 0xc23e, 0xc23f,
+ 0xc240, 0xc241, 0xc242, 0xc243, 0xc244, 0xc245, 0xc246, 0xc247, /* 0xc240 */
+ 0xc248, 0xc249, 0xc24a, 0xc24b, 0xc24c, 0xc24d, 0xc24e, 0xc24f,
+ 0xc250, 0xc251, 0xc252, 0xc253, 0xc254, 0xc255, 0xc256, 0xc257,
+ 0xc258, 0xc259, 0xc25a, 0xc25b, 0xc25c, 0xc25d, 0xc25e, 0xc25f,
+ 0xc260, 0xc261, 0xc262, 0xc263, 0xc264, 0xc265, 0xc266, 0xc267,
+ 0xc268, 0xc269, 0xc26a, 0xc26b, 0xc26c, 0xc26d, 0xc26e, 0xc26f,
+ 0xc270, 0xc271, 0xc272, 0xc273, 0xc274, 0xc275, 0xc276, 0xc277,
+ 0xc278, 0xc279, 0xc27a, 0xc27b, 0xc27c, 0xc27d, 0xc27e, 0xc27f,
+ 0xc280, 0xc281, 0xc282, 0xc283, 0xc284, 0xc285, 0xc286, 0xc287, /* 0xc280 */
+ 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, 0xc28e, 0xc28f,
+ 0xc290, 0xc291, 0xc292, 0xc293, 0xc294, 0xc295, 0xc296, 0xc297,
+ 0xc298, 0xc299, 0xc29a, 0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f,
+ 0xc2a0, 0xc2a1, 0xc2a2, 0xc2a3, 0xc2a4, 0xc2a5, 0xc2a6, 0xc2a7,
+ 0xc2a8, 0xc2a9, 0xc2aa, 0xc2ab, 0xc2ac, 0xc2ad, 0xc2ae, 0xc2af,
+ 0xc2b0, 0xc2b1, 0xc2b2, 0xc2b3, 0xc2b4, 0xc2b5, 0xc2b6, 0xc2b7,
+ 0xc2b8, 0xc2b9, 0xc2ba, 0xc2bb, 0xc2bc, 0xc2bd, 0xc2be, 0xc2bf,
+ 0xc2c0, 0xc2c1, 0xc2c2, 0xc2c3, 0xc2c4, 0xc2c5, 0xc2c6, 0xc2c7, /* 0xc2c0 */
+ 0xc2c8, 0xc2c9, 0xc2ca, 0xc2cb, 0xc2cc, 0xc2cd, 0xc2ce, 0xc2cf,
+ 0xc2d0, 0xc2d1, 0xc2d2, 0xc2d3, 0xc2d4, 0xc2d5, 0xc2d6, 0xc2d7,
+ 0xc2d8, 0xc2d9, 0xc2da, 0xc2db, 0xc2dc, 0xc2dd, 0xc2de, 0xc2df,
+ 0xc2e0, 0xc2e1, 0xc2e2, 0xc2e3, 0xc2e4, 0xc2e5, 0xc2e6, 0xc2e7,
+ 0xc2e8, 0xc2e9, 0xc2ea, 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ee, 0xc2ef,
+ 0xc2f0, 0xc2f1, 0xc2f2, 0xc2f3, 0xc2f4, 0xc2f5, 0xc2f6, 0xc2f7,
+ 0xc2f8, 0xc2f9, 0xc2fa, 0xc2fb, 0xc2fc, 0xc2fd, 0xc2fe, 0xc2ff,
+ 0xc300, 0xc301, 0xc302, 0xc303, 0xc304, 0xc305, 0xc306, 0xc307, /* 0xc300 */
+ 0xc308, 0xc309, 0xc30a, 0xc30b, 0xc30c, 0xc30d, 0xc30e, 0xc30f,
+ 0xc310, 0xc311, 0xc312, 0xc313, 0xc314, 0xc315, 0xc316, 0xc317,
+ 0xc318, 0xc319, 0xc31a, 0xc31b, 0xc31c, 0xc31d, 0xc31e, 0xc31f,
+ 0xc320, 0xc321, 0xc322, 0xc323, 0xc324, 0xc325, 0xc326, 0xc327,
+ 0xc328, 0xc329, 0xc32a, 0xc32b, 0xc32c, 0xc32d, 0xc32e, 0xc32f,
+ 0xc330, 0xc331, 0xc332, 0xc333, 0xc334, 0xc335, 0xc336, 0xc337,
+ 0xc338, 0xc339, 0xc33a, 0xc33b, 0xc33c, 0xc33d, 0xc33e, 0xc33f,
+ 0xc340, 0xc341, 0xc342, 0xc343, 0xc344, 0xc345, 0xc346, 0xc347, /* 0xc340 */
+ 0xc348, 0xc349, 0xc34a, 0xc34b, 0xc34c, 0xc34d, 0xc34e, 0xc34f,
+ 0xc350, 0xc351, 0xc352, 0xc353, 0xc354, 0xc355, 0xc356, 0xc357,
+ 0xc358, 0xc359, 0xc35a, 0xc35b, 0xc35c, 0xc35d, 0xc35e, 0xc35f,
+ 0xc360, 0xc361, 0xc362, 0xc363, 0xc364, 0xc365, 0xc366, 0xc367,
+ 0xc368, 0xc369, 0xc36a, 0xc36b, 0xc36c, 0xc36d, 0xc36e, 0xc36f,
+ 0xc370, 0xc371, 0xc372, 0xc373, 0xc374, 0xc375, 0xc376, 0xc377,
+ 0xc378, 0xc379, 0xc37a, 0xc37b, 0xc37c, 0xc37d, 0xc37e, 0xc37f,
+ 0xc380, 0xc381, 0xc382, 0xc383, 0xc384, 0xc385, 0xc386, 0xc387, /* 0xc380 */
+ 0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f,
+ 0xc390, 0xc391, 0xc392, 0xc393, 0xc394, 0xc395, 0xc396, 0xc397,
+ 0xc398, 0xc399, 0xc39a, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f,
+ 0xc3a0, 0xc3a1, 0xc3a2, 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a6, 0xc3a7,
+ 0xc3a8, 0xc3a9, 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ad, 0xc3ae, 0xc3af,
+ 0xc3b0, 0xc3b1, 0xc3b2, 0xc3b3, 0xc3b4, 0xc3b5, 0xc3b6, 0xc3b7,
+ 0xc3b8, 0xc3b9, 0xc3ba, 0xc3bb, 0xc3bc, 0xc3bd, 0xc3be, 0xc3bf,
+ 0xc3c0, 0xc3c1, 0xc3c2, 0xc3c3, 0xc3c4, 0xc3c5, 0xc3c6, 0xc3c7, /* 0xc3c0 */
+ 0xc3c8, 0xc3c9, 0xc3ca, 0xc3cb, 0xc3cc, 0xc3cd, 0xc3ce, 0xc3cf,
+ 0xc3d0, 0xc3d1, 0xc3d2, 0xc3d3, 0xc3d4, 0xc3d5, 0xc3d6, 0xc3d7,
+ 0xc3d8, 0xc3d9, 0xc3da, 0xc3db, 0xc3dc, 0xc3dd, 0xc3de, 0xc3df,
+ 0xc3e0, 0xc3e1, 0xc3e2, 0xc3e3, 0xc3e4, 0xc3e5, 0xc3e6, 0xc3e7,
+ 0xc3e8, 0xc3e9, 0xc3ea, 0xc3eb, 0xc3ec, 0xc3ed, 0xc3ee, 0xc3ef,
+ 0xc3f0, 0xc3f1, 0xc3f2, 0xc3f3, 0xc3f4, 0xc3f5, 0xc3f6, 0xc3f7,
+ 0xc3f8, 0xc3f9, 0xc3fa, 0xc3fb, 0xc3fc, 0xc3fd, 0xc3fe, 0xc3ff,
+ 0xc400, 0xc401, 0xc402, 0xc403, 0xc404, 0xc405, 0xc406, 0xc407, /* 0xc400 */
+ 0xc408, 0xc409, 0xc40a, 0xc40b, 0xc40c, 0xc40d, 0xc40e, 0xc40f,
+ 0xc410, 0xc411, 0xc412, 0xc413, 0xc414, 0xc415, 0xc416, 0xc417,
+ 0xc418, 0xc419, 0xc41a, 0xc41b, 0xc41c, 0xc41d, 0xc41e, 0xc41f,
+ 0xc420, 0xc421, 0xc422, 0xc423, 0xc424, 0xc425, 0xc426, 0xc427,
+ 0xc428, 0xc429, 0xc42a, 0xc42b, 0xc42c, 0xc42d, 0xc42e, 0xc42f,
+ 0xc430, 0xc431, 0xc432, 0xc433, 0xc434, 0xc435, 0xc436, 0xc437,
+ 0xc438, 0xc439, 0xc43a, 0xc43b, 0xc43c, 0xc43d, 0xc43e, 0xc43f,
+ 0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xc446, 0xc447, /* 0xc440 */
+ 0xc448, 0xc449, 0xc44a, 0xc44b, 0xc44c, 0xc44d, 0xc44e, 0xc44f,
+ 0xc450, 0xc451, 0xc452, 0xc453, 0xc454, 0xc455, 0xc456, 0xc457,
+ 0xc458, 0xc459, 0xc45a, 0xc45b, 0xc45c, 0xc45d, 0xc45e, 0xc45f,
+ 0xc460, 0xc461, 0xc462, 0xc463, 0xc464, 0xc465, 0xc466, 0xc467,
+ 0xc468, 0xc469, 0xc46a, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xc46f,
+ 0xc470, 0xc471, 0xc472, 0xc473, 0xc474, 0xc475, 0xc476, 0xc477,
+ 0xc478, 0xc479, 0xc47a, 0xc47b, 0xc47c, 0xc47d, 0xc47e, 0xc47f,
+ 0xc480, 0xc481, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, 0xc487, /* 0xc480 */
+ 0xc488, 0xc489, 0xc48a, 0xc48b, 0xc48c, 0xc48d, 0xc48e, 0xc48f,
+ 0xc490, 0xc491, 0xc492, 0xc493, 0xc494, 0xc495, 0xc496, 0xc497,
+ 0xc498, 0xc499, 0xc49a, 0xc49b, 0xc49c, 0xc49d, 0xc49e, 0xc49f,
+ 0xc4a0, 0xc4a1, 0xc4a2, 0xc4a3, 0xc4a4, 0xc4a5, 0xc4a6, 0xc4a7,
+ 0xc4a8, 0xc4a9, 0xc4aa, 0xc4ab, 0xc4ac, 0xc4ad, 0xc4ae, 0xc4af,
+ 0xc4b0, 0xc4b1, 0xc4b2, 0xc4b3, 0xc4b4, 0xc4b5, 0xc4b6, 0xc4b7,
+ 0xc4b8, 0xc4b9, 0xc4ba, 0xc4bb, 0xc4bc, 0xc4bd, 0xc4be, 0xc4bf,
+ 0xc4c0, 0xc4c1, 0xc4c2, 0xc4c3, 0xc4c4, 0xc4c5, 0xc4c6, 0xc4c7, /* 0xc4c0 */
+ 0xc4c8, 0xc4c9, 0xc4ca, 0xc4cb, 0xc4cc, 0xc4cd, 0xc4ce, 0xc4cf,
+ 0xc4d0, 0xc4d1, 0xc4d2, 0xc4d3, 0xc4d4, 0xc4d5, 0xc4d6, 0xc4d7,
+ 0xc4d8, 0xc4d9, 0xc4da, 0xc4db, 0xc4dc, 0xc4dd, 0xc4de, 0xc4df,
+ 0xc4e0, 0xc4e1, 0xc4e2, 0xc4e3, 0xc4e4, 0xc4e5, 0xc4e6, 0xc4e7,
+ 0xc4e8, 0xc4e9, 0xc4ea, 0xc4eb, 0xc4ec, 0xc4ed, 0xc4ee, 0xc4ef,
+ 0xc4f0, 0xc4f1, 0xc4f2, 0xc4f3, 0xc4f4, 0xc4f5, 0xc4f6, 0xc4f7,
+ 0xc4f8, 0xc4f9, 0xc4fa, 0xc4fb, 0xc4fc, 0xc4fd, 0xc4fe, 0xc4ff,
+ 0xc500, 0xc501, 0xc502, 0xc503, 0xc504, 0xc505, 0xc506, 0xc507, /* 0xc500 */
+ 0xc508, 0xc509, 0xc50a, 0xc50b, 0xc50c, 0xc50d, 0xc50e, 0xc50f,
+ 0xc510, 0xc511, 0xc512, 0xc513, 0xc514, 0xc515, 0xc516, 0xc517,
+ 0xc518, 0xc519, 0xc51a, 0xc51b, 0xc51c, 0xc51d, 0xc51e, 0xc51f,
+ 0xc520, 0xc521, 0xc522, 0xc523, 0xc524, 0xc525, 0xc526, 0xc527,
+ 0xc528, 0xc529, 0xc52a, 0xc52b, 0xc52c, 0xc52d, 0xc52e, 0xc52f,
+ 0xc530, 0xc531, 0xc532, 0xc533, 0xc534, 0xc535, 0xc536, 0xc537,
+ 0xc538, 0xc539, 0xc53a, 0xc53b, 0xc53c, 0xc53d, 0xc53e, 0xc53f,
+ 0xc540, 0xc541, 0xc542, 0xc543, 0xc544, 0xc545, 0xc546, 0xc547, /* 0xc540 */
+ 0xc548, 0xc549, 0xc54a, 0xc54b, 0xc54c, 0xc54d, 0xc54e, 0xc54f,
+ 0xc550, 0xc551, 0xc552, 0xc553, 0xc554, 0xc555, 0xc556, 0xc557,
+ 0xc558, 0xc559, 0xc55a, 0xc55b, 0xc55c, 0xc55d, 0xc55e, 0xc55f,
+ 0xc560, 0xc561, 0xc562, 0xc563, 0xc564, 0xc565, 0xc566, 0xc567,
+ 0xc568, 0xc569, 0xc56a, 0xc56b, 0xc56c, 0xc56d, 0xc56e, 0xc56f,
+ 0xc570, 0xc571, 0xc572, 0xc573, 0xc574, 0xc575, 0xc576, 0xc577,
+ 0xc578, 0xc579, 0xc57a, 0xc57b, 0xc57c, 0xc57d, 0xc57e, 0xc57f,
+ 0xc580, 0xc581, 0xc582, 0xc583, 0xc584, 0xc585, 0xc586, 0xc587, /* 0xc580 */
+ 0xc588, 0xc589, 0xc58a, 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f,
+ 0xc590, 0xc591, 0xc592, 0xc593, 0xc594, 0xc595, 0xc596, 0xc597,
+ 0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f,
+ 0xc5a0, 0xc5a1, 0xc5a2, 0xc5a3, 0xc5a4, 0xc5a5, 0xc5a6, 0xc5a7,
+ 0xc5a8, 0xc5a9, 0xc5aa, 0xc5ab, 0xc5ac, 0xc5ad, 0xc5ae, 0xc5af,
+ 0xc5b0, 0xc5b1, 0xc5b2, 0xc5b3, 0xc5b4, 0xc5b5, 0xc5b6, 0xc5b7,
+ 0xc5b8, 0xc5b9, 0xc5ba, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5bf,
+ 0xc5c0, 0xc5c1, 0xc5c2, 0xc5c3, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, /* 0xc5c0 */
+ 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cb, 0xc5cc, 0xc5cd, 0xc5ce, 0xc5cf,
+ 0xc5d0, 0xc5d1, 0xc5d2, 0xc5d3, 0xc5d4, 0xc5d5, 0xc5d6, 0xc5d7,
+ 0xc5d8, 0xc5d9, 0xc5da, 0xc5db, 0xc5dc, 0xc5dd, 0xc5de, 0xc5df,
+ 0xc5e0, 0xc5e1, 0xc5e2, 0xc5e3, 0xc5e4, 0xc5e5, 0xc5e6, 0xc5e7,
+ 0xc5e8, 0xc5e9, 0xc5ea, 0xc5eb, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5ef,
+ 0xc5f0, 0xc5f1, 0xc5f2, 0xc5f3, 0xc5f4, 0xc5f5, 0xc5f6, 0xc5f7,
+ 0xc5f8, 0xc5f9, 0xc5fa, 0xc5fb, 0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff,
+ 0xc600, 0xc601, 0xc602, 0xc603, 0xc604, 0xc605, 0xc606, 0xc607, /* 0xc600 */
+ 0xc608, 0xc609, 0xc60a, 0xc60b, 0xc60c, 0xc60d, 0xc60e, 0xc60f,
+ 0xc610, 0xc611, 0xc612, 0xc613, 0xc614, 0xc615, 0xc616, 0xc617,
+ 0xc618, 0xc619, 0xc61a, 0xc61b, 0xc61c, 0xc61d, 0xc61e, 0xc61f,
+ 0xc620, 0xc621, 0xc622, 0xc623, 0xc624, 0xc625, 0xc626, 0xc627,
+ 0xc628, 0xc629, 0xc62a, 0xc62b, 0xc62c, 0xc62d, 0xc62e, 0xc62f,
+ 0xc630, 0xc631, 0xc632, 0xc633, 0xc634, 0xc635, 0xc636, 0xc637,
+ 0xc638, 0xc639, 0xc63a, 0xc63b, 0xc63c, 0xc63d, 0xc63e, 0xc63f,
+ 0xc640, 0xc641, 0xc642, 0xc643, 0xc644, 0xc645, 0xc646, 0xc647, /* 0xc640 */
+ 0xc648, 0xc649, 0xc64a, 0xc64b, 0xc64c, 0xc64d, 0xc64e, 0xc64f,
+ 0xc650, 0xc651, 0xc652, 0xc653, 0xc654, 0xc655, 0xc656, 0xc657,
+ 0xc658, 0xc659, 0xc65a, 0xc65b, 0xc65c, 0xc65d, 0xc65e, 0xc65f,
+ 0xc660, 0xc661, 0xc662, 0xc663, 0xc664, 0xc665, 0xc666, 0xc667,
+ 0xc668, 0xc669, 0xc66a, 0xc66b, 0xc66c, 0xc66d, 0xc66e, 0xc66f,
+ 0xc670, 0xc671, 0xc672, 0xc673, 0xc674, 0xc675, 0xc676, 0xc677,
+ 0xc678, 0xc679, 0xc67a, 0xc67b, 0xc67c, 0xc67d, 0xc67e, 0xc67f,
+ 0xc680, 0xc681, 0xc682, 0xc683, 0xc684, 0xc685, 0xc686, 0xc687, /* 0xc680 */
+ 0xc688, 0xc689, 0xc68a, 0xc68b, 0xc68c, 0xc68d, 0xc68e, 0xc68f,
+ 0xc690, 0xc691, 0xc692, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697,
+ 0xc698, 0xc699, 0xc69a, 0xc69b, 0xc69c, 0xc69d, 0xc69e, 0xc69f,
+ 0xc6a0, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a4, 0xc6a5, 0xc6a6, 0xc6a7,
+ 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af,
+ 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7,
+ 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be, 0xc6bf,
+ 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, /* 0xc6c0 */
+ 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf,
+ 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7,
+ 0xc6d8, 0xc6d9, 0xc6da, 0xc6db, 0xc6dc, 0xc6dd, 0xc6de, 0xc6df,
+ 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7,
+ 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef,
+ 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7,
+ 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc6ff,
+ 0xc700, 0xc701, 0xc702, 0xc703, 0xc704, 0xc705, 0xc706, 0xc707, /* 0xc700 */
+ 0xc708, 0xc709, 0xc70a, 0xc70b, 0xc70c, 0xc70d, 0xc70e, 0xc70f,
+ 0xc710, 0xc711, 0xc712, 0xc713, 0xc714, 0xc715, 0xc716, 0xc717,
+ 0xc718, 0xc719, 0xc71a, 0xc71b, 0xc71c, 0xc71d, 0xc71e, 0xc71f,
+ 0xc720, 0xc721, 0xc722, 0xc723, 0xc724, 0xc725, 0xc726, 0xc727,
+ 0xc728, 0xc729, 0xc72a, 0xc72b, 0xc72c, 0xc72d, 0xc72e, 0xc72f,
+ 0xc730, 0xc731, 0xc732, 0xc733, 0xc734, 0xc735, 0xc736, 0xc737,
+ 0xc738, 0xc739, 0xc73a, 0xc73b, 0xc73c, 0xc73d, 0xc73e, 0xc73f,
+ 0xc740, 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, /* 0xc740 */
+ 0xc748, 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f,
+ 0xc750, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757,
+ 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f,
+ 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767,
+ 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f,
+ 0xc770, 0xc771, 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777,
+ 0xc778, 0xc779, 0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc77f,
+ 0xc780, 0xc781, 0xc782, 0xc783, 0xc784, 0xc785, 0xc786, 0xc787, /* 0xc780 */
+ 0xc788, 0xc789, 0xc78a, 0xc78b, 0xc78c, 0xc78d, 0xc78e, 0xc78f,
+ 0xc790, 0xc791, 0xc792, 0xc793, 0xc794, 0xc795, 0xc796, 0xc797,
+ 0xc798, 0xc799, 0xc79a, 0xc79b, 0xc79c, 0xc79d, 0xc79e, 0xc79f,
+ 0xc7a0, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7a7,
+ 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af,
+ 0xc7b0, 0xc7b1, 0xc7b2, 0xc7b3, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7,
+ 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf,
+ 0xc7c0, 0xc7c1, 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, /* 0xc7c0 */
+ 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7ce, 0xc7cf,
+ 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7,
+ 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd, 0xc7de, 0xc7df,
+ 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7,
+ 0xc7e8, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef,
+ 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4, 0xc7f5, 0xc7f6, 0xc7f7,
+ 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc7ff,
+ 0xc800, 0xc801, 0xc802, 0xc803, 0xc804, 0xc805, 0xc806, 0xc807, /* 0xc800 */
+ 0xc808, 0xc809, 0xc80a, 0xc80b, 0xc80c, 0xc80d, 0xc80e, 0xc80f,
+ 0xc810, 0xc811, 0xc812, 0xc813, 0xc814, 0xc815, 0xc816, 0xc817,
+ 0xc818, 0xc819, 0xc81a, 0xc81b, 0xc81c, 0xc81d, 0xc81e, 0xc81f,
+ 0xc820, 0xc821, 0xc822, 0xc823, 0xc824, 0xc825, 0xc826, 0xc827,
+ 0xc828, 0xc829, 0xc82a, 0xc82b, 0xc82c, 0xc82d, 0xc82e, 0xc82f,
+ 0xc830, 0xc831, 0xc832, 0xc833, 0xc834, 0xc835, 0xc836, 0xc837,
+ 0xc838, 0xc839, 0xc83a, 0xc83b, 0xc83c, 0xc83d, 0xc83e, 0xc83f,
+ 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, /* 0xc840 */
+ 0xc848, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f,
+ 0xc850, 0xc851, 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857,
+ 0xc858, 0xc859, 0xc85a, 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f,
+ 0xc860, 0xc861, 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867,
+ 0xc868, 0xc869, 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f,
+ 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877,
+ 0xc878, 0xc879, 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc87f,
+ 0xc880, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885, 0xc886, 0xc887, /* 0xc880 */
+ 0xc888, 0xc889, 0xc88a, 0xc88b, 0xc88c, 0xc88d, 0xc88e, 0xc88f,
+ 0xc890, 0xc891, 0xc892, 0xc893, 0xc894, 0xc895, 0xc896, 0xc897,
+ 0xc898, 0xc899, 0xc89a, 0xc89b, 0xc89c, 0xc89d, 0xc89e, 0xc89f,
+ 0xc8a0, 0xc8a1, 0xc8a2, 0xc8a3, 0xc8a4, 0xc8a5, 0xc8a6, 0xc8a7,
+ 0xc8a8, 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, 0xc8ad, 0xc8ae, 0xc8af,
+ 0xc8b0, 0xc8b1, 0xc8b2, 0xc8b3, 0xc8b4, 0xc8b5, 0xc8b6, 0xc8b7,
+ 0xc8b8, 0xc8b9, 0xc8ba, 0xc8bb, 0xc8bc, 0xc8bd, 0xc8be, 0xc8bf,
+ 0xc8c0, 0xc8c1, 0xc8c2, 0xc8c3, 0xc8c4, 0xc8c5, 0xc8c6, 0xc8c7, /* 0xc8c0 */
+ 0xc8c8, 0xc8c9, 0xc8ca, 0xc8cb, 0xc8cc, 0xc8cd, 0xc8ce, 0xc8cf,
+ 0xc8d0, 0xc8d1, 0xc8d2, 0xc8d3, 0xc8d4, 0xc8d5, 0xc8d6, 0xc8d7,
+ 0xc8d8, 0xc8d9, 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df,
+ 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6, 0xc8e7,
+ 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee, 0xc8ef,
+ 0xc8f0, 0xc8f1, 0xc8f2, 0xc8f3, 0xc8f4, 0xc8f5, 0xc8f6, 0xc8f7,
+ 0xc8f8, 0xc8f9, 0xc8fa, 0xc8fb, 0xc8fc, 0xc8fd, 0xc8fe, 0xc8ff,
+ 0xc900, 0xc901, 0xc902, 0xc903, 0xc904, 0xc905, 0xc906, 0xc907, /* 0xc900 */
+ 0xc908, 0xc909, 0xc90a, 0xc90b, 0xc90c, 0xc90d, 0xc90e, 0xc90f,
+ 0xc910, 0xc911, 0xc912, 0xc913, 0xc914, 0xc915, 0xc916, 0xc917,
+ 0xc918, 0xc919, 0xc91a, 0xc91b, 0xc91c, 0xc91d, 0xc91e, 0xc91f,
+ 0xc920, 0xc921, 0xc922, 0xc923, 0xc924, 0xc925, 0xc926, 0xc927,
+ 0xc928, 0xc929, 0xc92a, 0xc92b, 0xc92c, 0xc92d, 0xc92e, 0xc92f,
+ 0xc930, 0xc931, 0xc932, 0xc933, 0xc934, 0xc935, 0xc936, 0xc937,
+ 0xc938, 0xc939, 0xc93a, 0xc93b, 0xc93c, 0xc93d, 0xc93e, 0xc93f,
+ 0xc940, 0xc941, 0xc942, 0xc943, 0xc944, 0xc945, 0xc946, 0xc947, /* 0xc940 */
+ 0xc948, 0xc949, 0xc94a, 0xc94b, 0xc94c, 0xc94d, 0xc94e, 0xc94f,
+ 0xc950, 0xc951, 0xc952, 0xc953, 0xc954, 0xc955, 0xc956, 0xc957,
+ 0xc958, 0xc959, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f,
+ 0xc960, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xc967,
+ 0xc968, 0xc969, 0xc96a, 0xc96b, 0xc96c, 0xc96d, 0xc96e, 0xc96f,
+ 0xc970, 0xc971, 0xc972, 0xc973, 0xc974, 0xc975, 0xc976, 0xc977,
+ 0xc978, 0xc979, 0xc97a, 0xc97b, 0xc97c, 0xc97d, 0xc97e, 0xc97f,
+ 0xc980, 0xc981, 0xc982, 0xc983, 0xc984, 0xc985, 0xc986, 0xc987, /* 0xc980 */
+ 0xc988, 0xc989, 0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc98e, 0xc98f,
+ 0xc990, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997,
+ 0xc998, 0xc999, 0xc99a, 0xc99b, 0xc99c, 0xc99d, 0xc99e, 0xc99f,
+ 0xc9a0, 0xc9a1, 0xc9a2, 0xc9a3, 0xc9a4, 0xc9a5, 0xc9a6, 0xc9a7,
+ 0xc9a8, 0xc9a9, 0xc9aa, 0xc9ab, 0xc9ac, 0xc9ad, 0xc9ae, 0xc9af,
+ 0xc9b0, 0xc9b1, 0xc9b2, 0xc9b3, 0xc9b4, 0xc9b5, 0xc9b6, 0xc9b7,
+ 0xc9b8, 0xc9b9, 0xc9ba, 0xc9bb, 0xc9bc, 0xc9bd, 0xc9be, 0xc9bf,
+ 0xc9c0, 0xc9c1, 0xc9c2, 0xc9c3, 0xc9c4, 0xc9c5, 0xc9c6, 0xc9c7, /* 0xc9c0 */
+ 0xc9c8, 0xc9c9, 0xc9ca, 0xc9cb, 0xc9cc, 0xc9cd, 0xc9ce, 0xc9cf,
+ 0xc9d0, 0xc9d1, 0xc9d2, 0xc9d3, 0xc9d4, 0xc9d5, 0xc9d6, 0xc9d7,
+ 0xc9d8, 0xc9d9, 0xc9da, 0xc9db, 0xc9dc, 0xc9dd, 0xc9de, 0xc9df,
+ 0xc9e0, 0xc9e1, 0xc9e2, 0xc9e3, 0xc9e4, 0xc9e5, 0xc9e6, 0xc9e7,
+ 0xc9e8, 0xc9e9, 0xc9ea, 0xc9eb, 0xc9ec, 0xc9ed, 0xc9ee, 0xc9ef,
+ 0xc9f0, 0xc9f1, 0xc9f2, 0xc9f3, 0xc9f4, 0xc9f5, 0xc9f6, 0xc9f7,
+ 0xc9f8, 0xc9f9, 0xc9fa, 0xc9fb, 0xc9fc, 0xc9fd, 0xc9fe, 0xc9ff,
+ 0xca00, 0xca01, 0xca02, 0xca03, 0xca04, 0xca05, 0xca06, 0xca07, /* 0xca00 */
+ 0xca08, 0xca09, 0xca0a, 0xca0b, 0xca0c, 0xca0d, 0xca0e, 0xca0f,
+ 0xca10, 0xca11, 0xca12, 0xca13, 0xca14, 0xca15, 0xca16, 0xca17,
+ 0xca18, 0xca19, 0xca1a, 0xca1b, 0xca1c, 0xca1d, 0xca1e, 0xca1f,
+ 0xca20, 0xca21, 0xca22, 0xca23, 0xca24, 0xca25, 0xca26, 0xca27,
+ 0xca28, 0xca29, 0xca2a, 0xca2b, 0xca2c, 0xca2d, 0xca2e, 0xca2f,
+ 0xca30, 0xca31, 0xca32, 0xca33, 0xca34, 0xca35, 0xca36, 0xca37,
+ 0xca38, 0xca39, 0xca3a, 0xca3b, 0xca3c, 0xca3d, 0xca3e, 0xca3f,
+ 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, 0xca45, 0xca46, 0xca47, /* 0xca40 */
+ 0xca48, 0xca49, 0xca4a, 0xca4b, 0xca4c, 0xca4d, 0xca4e, 0xca4f,
+ 0xca50, 0xca51, 0xca52, 0xca53, 0xca54, 0xca55, 0xca56, 0xca57,
+ 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d, 0xca5e, 0xca5f,
+ 0xca60, 0xca61, 0xca62, 0xca63, 0xca64, 0xca65, 0xca66, 0xca67,
+ 0xca68, 0xca69, 0xca6a, 0xca6b, 0xca6c, 0xca6d, 0xca6e, 0xca6f,
+ 0xca70, 0xca71, 0xca72, 0xca73, 0xca74, 0xca75, 0xca76, 0xca77,
+ 0xca78, 0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xca7f,
+ 0xca80, 0xca81, 0xca82, 0xca83, 0xca84, 0xca85, 0xca86, 0xca87, /* 0xca80 */
+ 0xca88, 0xca89, 0xca8a, 0xca8b, 0xca8c, 0xca8d, 0xca8e, 0xca8f,
+ 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, 0xca95, 0xca96, 0xca97,
+ 0xca98, 0xca99, 0xca9a, 0xca9b, 0xca9c, 0xca9d, 0xca9e, 0xca9f,
+ 0xcaa0, 0xcaa1, 0xcaa2, 0xcaa3, 0xcaa4, 0xcaa5, 0xcaa6, 0xcaa7,
+ 0xcaa8, 0xcaa9, 0xcaaa, 0xcaab, 0xcaac, 0xcaad, 0xcaae, 0xcaaf,
+ 0xcab0, 0xcab1, 0xcab2, 0xcab3, 0xcab4, 0xcab5, 0xcab6, 0xcab7,
+ 0xcab8, 0xcab9, 0xcaba, 0xcabb, 0xcabc, 0xcabd, 0xcabe, 0xcabf,
+ 0xcac0, 0xcac1, 0xcac2, 0xcac3, 0xcac4, 0xcac5, 0xcac6, 0xcac7, /* 0xcac0 */
+ 0xcac8, 0xcac9, 0xcaca, 0xcacb, 0xcacc, 0xcacd, 0xcace, 0xcacf,
+ 0xcad0, 0xcad1, 0xcad2, 0xcad3, 0xcad4, 0xcad5, 0xcad6, 0xcad7,
+ 0xcad8, 0xcad9, 0xcada, 0xcadb, 0xcadc, 0xcadd, 0xcade, 0xcadf,
+ 0xcae0, 0xcae1, 0xcae2, 0xcae3, 0xcae4, 0xcae5, 0xcae6, 0xcae7,
+ 0xcae8, 0xcae9, 0xcaea, 0xcaeb, 0xcaec, 0xcaed, 0xcaee, 0xcaef,
+ 0xcaf0, 0xcaf1, 0xcaf2, 0xcaf3, 0xcaf4, 0xcaf5, 0xcaf6, 0xcaf7,
+ 0xcaf8, 0xcaf9, 0xcafa, 0xcafb, 0xcafc, 0xcafd, 0xcafe, 0xcaff,
+ 0xcb00, 0xcb01, 0xcb02, 0xcb03, 0xcb04, 0xcb05, 0xcb06, 0xcb07, /* 0xcb00 */
+ 0xcb08, 0xcb09, 0xcb0a, 0xcb0b, 0xcb0c, 0xcb0d, 0xcb0e, 0xcb0f,
+ 0xcb10, 0xcb11, 0xcb12, 0xcb13, 0xcb14, 0xcb15, 0xcb16, 0xcb17,
+ 0xcb18, 0xcb19, 0xcb1a, 0xcb1b, 0xcb1c, 0xcb1d, 0xcb1e, 0xcb1f,
+ 0xcb20, 0xcb21, 0xcb22, 0xcb23, 0xcb24, 0xcb25, 0xcb26, 0xcb27,
+ 0xcb28, 0xcb29, 0xcb2a, 0xcb2b, 0xcb2c, 0xcb2d, 0xcb2e, 0xcb2f,
+ 0xcb30, 0xcb31, 0xcb32, 0xcb33, 0xcb34, 0xcb35, 0xcb36, 0xcb37,
+ 0xcb38, 0xcb39, 0xcb3a, 0xcb3b, 0xcb3c, 0xcb3d, 0xcb3e, 0xcb3f,
+ 0xcb40, 0xcb41, 0xcb42, 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, /* 0xcb40 */
+ 0xcb48, 0xcb49, 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f,
+ 0xcb50, 0xcb51, 0xcb52, 0xcb53, 0xcb54, 0xcb55, 0xcb56, 0xcb57,
+ 0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xcb5c, 0xcb5d, 0xcb5e, 0xcb5f,
+ 0xcb60, 0xcb61, 0xcb62, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67,
+ 0xcb68, 0xcb69, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f,
+ 0xcb70, 0xcb71, 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, 0xcb77,
+ 0xcb78, 0xcb79, 0xcb7a, 0xcb7b, 0xcb7c, 0xcb7d, 0xcb7e, 0xcb7f,
+ 0xcb80, 0xcb81, 0xcb82, 0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xcb87, /* 0xcb80 */
+ 0xcb88, 0xcb89, 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xcb8e, 0xcb8f,
+ 0xcb90, 0xcb91, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97,
+ 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f,
+ 0xcba0, 0xcba1, 0xcba2, 0xcba3, 0xcba4, 0xcba5, 0xcba6, 0xcba7,
+ 0xcba8, 0xcba9, 0xcbaa, 0xcbab, 0xcbac, 0xcbad, 0xcbae, 0xcbaf,
+ 0xcbb0, 0xcbb1, 0xcbb2, 0xcbb3, 0xcbb4, 0xcbb5, 0xcbb6, 0xcbb7,
+ 0xcbb8, 0xcbb9, 0xcbba, 0xcbbb, 0xcbbc, 0xcbbd, 0xcbbe, 0xcbbf,
+ 0xcbc0, 0xcbc1, 0xcbc2, 0xcbc3, 0xcbc4, 0xcbc5, 0xcbc6, 0xcbc7, /* 0xcbc0 */
+ 0xcbc8, 0xcbc9, 0xcbca, 0xcbcb, 0xcbcc, 0xcbcd, 0xcbce, 0xcbcf,
+ 0xcbd0, 0xcbd1, 0xcbd2, 0xcbd3, 0xcbd4, 0xcbd5, 0xcbd6, 0xcbd7,
+ 0xcbd8, 0xcbd9, 0xcbda, 0xcbdb, 0xcbdc, 0xcbdd, 0xcbde, 0xcbdf,
+ 0xcbe0, 0xcbe1, 0xcbe2, 0xcbe3, 0xcbe4, 0xcbe5, 0xcbe6, 0xcbe7,
+ 0xcbe8, 0xcbe9, 0xcbea, 0xcbeb, 0xcbec, 0xcbed, 0xcbee, 0xcbef,
+ 0xcbf0, 0xcbf1, 0xcbf2, 0xcbf3, 0xcbf4, 0xcbf5, 0xcbf6, 0xcbf7,
+ 0xcbf8, 0xcbf9, 0xcbfa, 0xcbfb, 0xcbfc, 0xcbfd, 0xcbfe, 0xcbff,
+ 0xcc00, 0xcc01, 0xcc02, 0xcc03, 0xcc04, 0xcc05, 0xcc06, 0xcc07, /* 0xcc00 */
+ 0xcc08, 0xcc09, 0xcc0a, 0xcc0b, 0xcc0c, 0xcc0d, 0xcc0e, 0xcc0f,
+ 0xcc10, 0xcc11, 0xcc12, 0xcc13, 0xcc14, 0xcc15, 0xcc16, 0xcc17,
+ 0xcc18, 0xcc19, 0xcc1a, 0xcc1b, 0xcc1c, 0xcc1d, 0xcc1e, 0xcc1f,
+ 0xcc20, 0xcc21, 0xcc22, 0xcc23, 0xcc24, 0xcc25, 0xcc26, 0xcc27,
+ 0xcc28, 0xcc29, 0xcc2a, 0xcc2b, 0xcc2c, 0xcc2d, 0xcc2e, 0xcc2f,
+ 0xcc30, 0xcc31, 0xcc32, 0xcc33, 0xcc34, 0xcc35, 0xcc36, 0xcc37,
+ 0xcc38, 0xcc39, 0xcc3a, 0xcc3b, 0xcc3c, 0xcc3d, 0xcc3e, 0xcc3f,
+ 0xcc40, 0xcc41, 0xcc42, 0xcc43, 0xcc44, 0xcc45, 0xcc46, 0xcc47, /* 0xcc40 */
+ 0xcc48, 0xcc49, 0xcc4a, 0xcc4b, 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f,
+ 0xcc50, 0xcc51, 0xcc52, 0xcc53, 0xcc54, 0xcc55, 0xcc56, 0xcc57,
+ 0xcc58, 0xcc59, 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f,
+ 0xcc60, 0xcc61, 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67,
+ 0xcc68, 0xcc69, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f,
+ 0xcc70, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77,
+ 0xcc78, 0xcc79, 0xcc7a, 0xcc7b, 0xcc7c, 0xcc7d, 0xcc7e, 0xcc7f,
+ 0xcc80, 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, 0xcc87, /* 0xcc80 */
+ 0xcc88, 0xcc89, 0xcc8a, 0xcc8b, 0xcc8c, 0xcc8d, 0xcc8e, 0xcc8f,
+ 0xcc90, 0xcc91, 0xcc92, 0xcc93, 0xcc94, 0xcc95, 0xcc96, 0xcc97,
+ 0xcc98, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, 0xcc9e, 0xcc9f,
+ 0xcca0, 0xcca1, 0xcca2, 0xcca3, 0xcca4, 0xcca5, 0xcca6, 0xcca7,
+ 0xcca8, 0xcca9, 0xccaa, 0xccab, 0xccac, 0xccad, 0xccae, 0xccaf,
+ 0xccb0, 0xccb1, 0xccb2, 0xccb3, 0xccb4, 0xccb5, 0xccb6, 0xccb7,
+ 0xccb8, 0xccb9, 0xccba, 0xccbb, 0xccbc, 0xccbd, 0xccbe, 0xccbf,
+ 0xccc0, 0xccc1, 0xccc2, 0xccc3, 0xccc4, 0xccc5, 0xccc6, 0xccc7, /* 0xccc0 */
+ 0xccc8, 0xccc9, 0xccca, 0xcccb, 0xcccc, 0xcccd, 0xccce, 0xcccf,
+ 0xccd0, 0xccd1, 0xccd2, 0xccd3, 0xccd4, 0xccd5, 0xccd6, 0xccd7,
+ 0xccd8, 0xccd9, 0xccda, 0xccdb, 0xccdc, 0xccdd, 0xccde, 0xccdf,
+ 0xcce0, 0xcce1, 0xcce2, 0xcce3, 0xcce4, 0xcce5, 0xcce6, 0xcce7,
+ 0xcce8, 0xcce9, 0xccea, 0xcceb, 0xccec, 0xcced, 0xccee, 0xccef,
+ 0xccf0, 0xccf1, 0xccf2, 0xccf3, 0xccf4, 0xccf5, 0xccf6, 0xccf7,
+ 0xccf8, 0xccf9, 0xccfa, 0xccfb, 0xccfc, 0xccfd, 0xccfe, 0xccff,
+ 0xcd00, 0xcd01, 0xcd02, 0xcd03, 0xcd04, 0xcd05, 0xcd06, 0xcd07, /* 0xcd00 */
+ 0xcd08, 0xcd09, 0xcd0a, 0xcd0b, 0xcd0c, 0xcd0d, 0xcd0e, 0xcd0f,
+ 0xcd10, 0xcd11, 0xcd12, 0xcd13, 0xcd14, 0xcd15, 0xcd16, 0xcd17,
+ 0xcd18, 0xcd19, 0xcd1a, 0xcd1b, 0xcd1c, 0xcd1d, 0xcd1e, 0xcd1f,
+ 0xcd20, 0xcd21, 0xcd22, 0xcd23, 0xcd24, 0xcd25, 0xcd26, 0xcd27,
+ 0xcd28, 0xcd29, 0xcd2a, 0xcd2b, 0xcd2c, 0xcd2d, 0xcd2e, 0xcd2f,
+ 0xcd30, 0xcd31, 0xcd32, 0xcd33, 0xcd34, 0xcd35, 0xcd36, 0xcd37,
+ 0xcd38, 0xcd39, 0xcd3a, 0xcd3b, 0xcd3c, 0xcd3d, 0xcd3e, 0xcd3f,
+ 0xcd40, 0xcd41, 0xcd42, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, /* 0xcd40 */
+ 0xcd48, 0xcd49, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, 0xcd4f,
+ 0xcd50, 0xcd51, 0xcd52, 0xcd53, 0xcd54, 0xcd55, 0xcd56, 0xcd57,
+ 0xcd58, 0xcd59, 0xcd5a, 0xcd5b, 0xcd5c, 0xcd5d, 0xcd5e, 0xcd5f,
+ 0xcd60, 0xcd61, 0xcd62, 0xcd63, 0xcd64, 0xcd65, 0xcd66, 0xcd67,
+ 0xcd68, 0xcd69, 0xcd6a, 0xcd6b, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f,
+ 0xcd70, 0xcd71, 0xcd72, 0xcd73, 0xcd74, 0xcd75, 0xcd76, 0xcd77,
+ 0xcd78, 0xcd79, 0xcd7a, 0xcd7b, 0xcd7c, 0xcd7d, 0xcd7e, 0xcd7f,
+ 0xcd80, 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xcd85, 0xcd86, 0xcd87, /* 0xcd80 */
+ 0xcd88, 0xcd89, 0xcd8a, 0xcd8b, 0xcd8c, 0xcd8d, 0xcd8e, 0xcd8f,
+ 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0xcd94, 0xcd95, 0xcd96, 0xcd97,
+ 0xcd98, 0xcd99, 0xcd9a, 0xcd9b, 0xcd9c, 0xcd9d, 0xcd9e, 0xcd9f,
+ 0xcda0, 0xcda1, 0xcda2, 0xcda3, 0xcda4, 0xcda5, 0xcda6, 0xcda7,
+ 0xcda8, 0xcda9, 0xcdaa, 0xcdab, 0xcdac, 0xcdad, 0xcdae, 0xcdaf,
+ 0xcdb0, 0xcdb1, 0xcdb2, 0xcdb3, 0xcdb4, 0xcdb5, 0xcdb6, 0xcdb7,
+ 0xcdb8, 0xcdb9, 0xcdba, 0xcdbb, 0xcdbc, 0xcdbd, 0xcdbe, 0xcdbf,
+ 0xcdc0, 0xcdc1, 0xcdc2, 0xcdc3, 0xcdc4, 0xcdc5, 0xcdc6, 0xcdc7, /* 0xcdc0 */
+ 0xcdc8, 0xcdc9, 0xcdca, 0xcdcb, 0xcdcc, 0xcdcd, 0xcdce, 0xcdcf,
+ 0xcdd0, 0xcdd1, 0xcdd2, 0xcdd3, 0xcdd4, 0xcdd5, 0xcdd6, 0xcdd7,
+ 0xcdd8, 0xcdd9, 0xcdda, 0xcddb, 0xcddc, 0xcddd, 0xcdde, 0xcddf,
+ 0xcde0, 0xcde1, 0xcde2, 0xcde3, 0xcde4, 0xcde5, 0xcde6, 0xcde7,
+ 0xcde8, 0xcde9, 0xcdea, 0xcdeb, 0xcdec, 0xcded, 0xcdee, 0xcdef,
+ 0xcdf0, 0xcdf1, 0xcdf2, 0xcdf3, 0xcdf4, 0xcdf5, 0xcdf6, 0xcdf7,
+ 0xcdf8, 0xcdf9, 0xcdfa, 0xcdfb, 0xcdfc, 0xcdfd, 0xcdfe, 0xcdff,
+ 0xce00, 0xce01, 0xce02, 0xce03, 0xce04, 0xce05, 0xce06, 0xce07, /* 0xce00 */
+ 0xce08, 0xce09, 0xce0a, 0xce0b, 0xce0c, 0xce0d, 0xce0e, 0xce0f,
+ 0xce10, 0xce11, 0xce12, 0xce13, 0xce14, 0xce15, 0xce16, 0xce17,
+ 0xce18, 0xce19, 0xce1a, 0xce1b, 0xce1c, 0xce1d, 0xce1e, 0xce1f,
+ 0xce20, 0xce21, 0xce22, 0xce23, 0xce24, 0xce25, 0xce26, 0xce27,
+ 0xce28, 0xce29, 0xce2a, 0xce2b, 0xce2c, 0xce2d, 0xce2e, 0xce2f,
+ 0xce30, 0xce31, 0xce32, 0xce33, 0xce34, 0xce35, 0xce36, 0xce37,
+ 0xce38, 0xce39, 0xce3a, 0xce3b, 0xce3c, 0xce3d, 0xce3e, 0xce3f,
+ 0xce40, 0xce41, 0xce42, 0xce43, 0xce44, 0xce45, 0xce46, 0xce47, /* 0xce40 */
+ 0xce48, 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xce4d, 0xce4e, 0xce4f,
+ 0xce50, 0xce51, 0xce52, 0xce53, 0xce54, 0xce55, 0xce56, 0xce57,
+ 0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xce5f,
+ 0xce60, 0xce61, 0xce62, 0xce63, 0xce64, 0xce65, 0xce66, 0xce67,
+ 0xce68, 0xce69, 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f,
+ 0xce70, 0xce71, 0xce72, 0xce73, 0xce74, 0xce75, 0xce76, 0xce77,
+ 0xce78, 0xce79, 0xce7a, 0xce7b, 0xce7c, 0xce7d, 0xce7e, 0xce7f,
+ 0xce80, 0xce81, 0xce82, 0xce83, 0xce84, 0xce85, 0xce86, 0xce87, /* 0xce80 */
+ 0xce88, 0xce89, 0xce8a, 0xce8b, 0xce8c, 0xce8d, 0xce8e, 0xce8f,
+ 0xce90, 0xce91, 0xce92, 0xce93, 0xce94, 0xce95, 0xce96, 0xce97,
+ 0xce98, 0xce99, 0xce9a, 0xce9b, 0xce9c, 0xce9d, 0xce9e, 0xce9f,
+ 0xcea0, 0xcea1, 0xcea2, 0xcea3, 0xcea4, 0xcea5, 0xcea6, 0xcea7,
+ 0xcea8, 0xcea9, 0xceaa, 0xceab, 0xceac, 0xcead, 0xceae, 0xceaf,
+ 0xceb0, 0xceb1, 0xceb2, 0xceb3, 0xceb4, 0xceb5, 0xceb6, 0xceb7,
+ 0xceb8, 0xceb9, 0xceba, 0xcebb, 0xcebc, 0xcebd, 0xcebe, 0xcebf,
+ 0xcec0, 0xcec1, 0xcec2, 0xcec3, 0xcec4, 0xcec5, 0xcec6, 0xcec7, /* 0xcec0 */
+ 0xcec8, 0xcec9, 0xceca, 0xcecb, 0xcecc, 0xcecd, 0xcece, 0xcecf,
+ 0xced0, 0xced1, 0xced2, 0xced3, 0xced4, 0xced5, 0xced6, 0xced7,
+ 0xced8, 0xced9, 0xceda, 0xcedb, 0xcedc, 0xcedd, 0xcede, 0xcedf,
+ 0xcee0, 0xcee1, 0xcee2, 0xcee3, 0xcee4, 0xcee5, 0xcee6, 0xcee7,
+ 0xcee8, 0xcee9, 0xceea, 0xceeb, 0xceec, 0xceed, 0xceee, 0xceef,
+ 0xcef0, 0xcef1, 0xcef2, 0xcef3, 0xcef4, 0xcef5, 0xcef6, 0xcef7,
+ 0xcef8, 0xcef9, 0xcefa, 0xcefb, 0xcefc, 0xcefd, 0xcefe, 0xceff,
+ 0xcf00, 0xcf01, 0xcf02, 0xcf03, 0xcf04, 0xcf05, 0xcf06, 0xcf07, /* 0xcf00 */
+ 0xcf08, 0xcf09, 0xcf0a, 0xcf0b, 0xcf0c, 0xcf0d, 0xcf0e, 0xcf0f,
+ 0xcf10, 0xcf11, 0xcf12, 0xcf13, 0xcf14, 0xcf15, 0xcf16, 0xcf17,
+ 0xcf18, 0xcf19, 0xcf1a, 0xcf1b, 0xcf1c, 0xcf1d, 0xcf1e, 0xcf1f,
+ 0xcf20, 0xcf21, 0xcf22, 0xcf23, 0xcf24, 0xcf25, 0xcf26, 0xcf27,
+ 0xcf28, 0xcf29, 0xcf2a, 0xcf2b, 0xcf2c, 0xcf2d, 0xcf2e, 0xcf2f,
+ 0xcf30, 0xcf31, 0xcf32, 0xcf33, 0xcf34, 0xcf35, 0xcf36, 0xcf37,
+ 0xcf38, 0xcf39, 0xcf3a, 0xcf3b, 0xcf3c, 0xcf3d, 0xcf3e, 0xcf3f,
+ 0xcf40, 0xcf41, 0xcf42, 0xcf43, 0xcf44, 0xcf45, 0xcf46, 0xcf47, /* 0xcf40 */
+ 0xcf48, 0xcf49, 0xcf4a, 0xcf4b, 0xcf4c, 0xcf4d, 0xcf4e, 0xcf4f,
+ 0xcf50, 0xcf51, 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xcf57,
+ 0xcf58, 0xcf59, 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, 0xcf5e, 0xcf5f,
+ 0xcf60, 0xcf61, 0xcf62, 0xcf63, 0xcf64, 0xcf65, 0xcf66, 0xcf67,
+ 0xcf68, 0xcf69, 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xcf6e, 0xcf6f,
+ 0xcf70, 0xcf71, 0xcf72, 0xcf73, 0xcf74, 0xcf75, 0xcf76, 0xcf77,
+ 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, 0xcf7e, 0xcf7f,
+ 0xcf80, 0xcf81, 0xcf82, 0xcf83, 0xcf84, 0xcf85, 0xcf86, 0xcf87, /* 0xcf80 */
+ 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, 0xcf8c, 0xcf8d, 0xcf8e, 0xcf8f,
+ 0xcf90, 0xcf91, 0xcf92, 0xcf93, 0xcf94, 0xcf95, 0xcf96, 0xcf97,
+ 0xcf98, 0xcf99, 0xcf9a, 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, 0xcf9f,
+ 0xcfa0, 0xcfa1, 0xcfa2, 0xcfa3, 0xcfa4, 0xcfa5, 0xcfa6, 0xcfa7,
+ 0xcfa8, 0xcfa9, 0xcfaa, 0xcfab, 0xcfac, 0xcfad, 0xcfae, 0xcfaf,
+ 0xcfb0, 0xcfb1, 0xcfb2, 0xcfb3, 0xcfb4, 0xcfb5, 0xcfb6, 0xcfb7,
+ 0xcfb8, 0xcfb9, 0xcfba, 0xcfbb, 0xcfbc, 0xcfbd, 0xcfbe, 0xcfbf,
+ 0xcfc0, 0xcfc1, 0xcfc2, 0xcfc3, 0xcfc4, 0xcfc5, 0xcfc6, 0xcfc7, /* 0xcfc0 */
+ 0xcfc8, 0xcfc9, 0xcfca, 0xcfcb, 0xcfcc, 0xcfcd, 0xcfce, 0xcfcf,
+ 0xcfd0, 0xcfd1, 0xcfd2, 0xcfd3, 0xcfd4, 0xcfd5, 0xcfd6, 0xcfd7,
+ 0xcfd8, 0xcfd9, 0xcfda, 0xcfdb, 0xcfdc, 0xcfdd, 0xcfde, 0xcfdf,
+ 0xcfe0, 0xcfe1, 0xcfe2, 0xcfe3, 0xcfe4, 0xcfe5, 0xcfe6, 0xcfe7,
+ 0xcfe8, 0xcfe9, 0xcfea, 0xcfeb, 0xcfec, 0xcfed, 0xcfee, 0xcfef,
+ 0xcff0, 0xcff1, 0xcff2, 0xcff3, 0xcff4, 0xcff5, 0xcff6, 0xcff7,
+ 0xcff8, 0xcff9, 0xcffa, 0xcffb, 0xcffc, 0xcffd, 0xcffe, 0xcfff,
+ 0xd000, 0xd001, 0xd002, 0xd003, 0xd004, 0xd005, 0xd006, 0xd007, /* 0xd000 */
+ 0xd008, 0xd009, 0xd00a, 0xd00b, 0xd00c, 0xd00d, 0xd00e, 0xd00f,
+ 0xd010, 0xd011, 0xd012, 0xd013, 0xd014, 0xd015, 0xd016, 0xd017,
+ 0xd018, 0xd019, 0xd01a, 0xd01b, 0xd01c, 0xd01d, 0xd01e, 0xd01f,
+ 0xd020, 0xd021, 0xd022, 0xd023, 0xd024, 0xd025, 0xd026, 0xd027,
+ 0xd028, 0xd029, 0xd02a, 0xd02b, 0xd02c, 0xd02d, 0xd02e, 0xd02f,
+ 0xd030, 0xd031, 0xd032, 0xd033, 0xd034, 0xd035, 0xd036, 0xd037,
+ 0xd038, 0xd039, 0xd03a, 0xd03b, 0xd03c, 0xd03d, 0xd03e, 0xd03f,
+ 0xd040, 0xd041, 0xd042, 0xd043, 0xd044, 0xd045, 0xd046, 0xd047, /* 0xd040 */
+ 0xd048, 0xd049, 0xd04a, 0xd04b, 0xd04c, 0xd04d, 0xd04e, 0xd04f,
+ 0xd050, 0xd051, 0xd052, 0xd053, 0xd054, 0xd055, 0xd056, 0xd057,
+ 0xd058, 0xd059, 0xd05a, 0xd05b, 0xd05c, 0xd05d, 0xd05e, 0xd05f,
+ 0xd060, 0xd061, 0xd062, 0xd063, 0xd064, 0xd065, 0xd066, 0xd067,
+ 0xd068, 0xd069, 0xd06a, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f,
+ 0xd070, 0xd071, 0xd072, 0xd073, 0xd074, 0xd075, 0xd076, 0xd077,
+ 0xd078, 0xd079, 0xd07a, 0xd07b, 0xd07c, 0xd07d, 0xd07e, 0xd07f,
+ 0xd080, 0xd081, 0xd082, 0xd083, 0xd084, 0xd085, 0xd086, 0xd087, /* 0xd080 */
+ 0xd088, 0xd089, 0xd08a, 0xd08b, 0xd08c, 0xd08d, 0xd08e, 0xd08f,
+ 0xd090, 0xd091, 0xd092, 0xd093, 0xd094, 0xd095, 0xd096, 0xd097,
+ 0xd098, 0xd099, 0xd09a, 0xd09b, 0xd09c, 0xd09d, 0xd09e, 0xd09f,
+ 0xd0a0, 0xd0a1, 0xd0a2, 0xd0a3, 0xd0a4, 0xd0a5, 0xd0a6, 0xd0a7,
+ 0xd0a8, 0xd0a9, 0xd0aa, 0xd0ab, 0xd0ac, 0xd0ad, 0xd0ae, 0xd0af,
+ 0xd0b0, 0xd0b1, 0xd0b2, 0xd0b3, 0xd0b4, 0xd0b5, 0xd0b6, 0xd0b7,
+ 0xd0b8, 0xd0b9, 0xd0ba, 0xd0bb, 0xd0bc, 0xd0bd, 0xd0be, 0xd0bf,
+ 0xd0c0, 0xd0c1, 0xd0c2, 0xd0c3, 0xd0c4, 0xd0c5, 0xd0c6, 0xd0c7, /* 0xd0c0 */
+ 0xd0c8, 0xd0c9, 0xd0ca, 0xd0cb, 0xd0cc, 0xd0cd, 0xd0ce, 0xd0cf,
+ 0xd0d0, 0xd0d1, 0xd0d2, 0xd0d3, 0xd0d4, 0xd0d5, 0xd0d6, 0xd0d7,
+ 0xd0d8, 0xd0d9, 0xd0da, 0xd0db, 0xd0dc, 0xd0dd, 0xd0de, 0xd0df,
+ 0xd0e0, 0xd0e1, 0xd0e2, 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e6, 0xd0e7,
+ 0xd0e8, 0xd0e9, 0xd0ea, 0xd0eb, 0xd0ec, 0xd0ed, 0xd0ee, 0xd0ef,
+ 0xd0f0, 0xd0f1, 0xd0f2, 0xd0f3, 0xd0f4, 0xd0f5, 0xd0f6, 0xd0f7,
+ 0xd0f8, 0xd0f9, 0xd0fa, 0xd0fb, 0xd0fc, 0xd0fd, 0xd0fe, 0xd0ff,
+ 0xd100, 0xd101, 0xd102, 0xd103, 0xd104, 0xd105, 0xd106, 0xd107, /* 0xd100 */
+ 0xd108, 0xd109, 0xd10a, 0xd10b, 0xd10c, 0xd10d, 0xd10e, 0xd10f,
+ 0xd110, 0xd111, 0xd112, 0xd113, 0xd114, 0xd115, 0xd116, 0xd117,
+ 0xd118, 0xd119, 0xd11a, 0xd11b, 0xd11c, 0xd11d, 0xd11e, 0xd11f,
+ 0xd120, 0xd121, 0xd122, 0xd123, 0xd124, 0xd125, 0xd126, 0xd127,
+ 0xd128, 0xd129, 0xd12a, 0xd12b, 0xd12c, 0xd12d, 0xd12e, 0xd12f,
+ 0xd130, 0xd131, 0xd132, 0xd133, 0xd134, 0xd135, 0xd136, 0xd137,
+ 0xd138, 0xd139, 0xd13a, 0xd13b, 0xd13c, 0xd13d, 0xd13e, 0xd13f,
+ 0xd140, 0xd141, 0xd142, 0xd143, 0xd144, 0xd145, 0xd146, 0xd147, /* 0xd140 */
+ 0xd148, 0xd149, 0xd14a, 0xd14b, 0xd14c, 0xd14d, 0xd14e, 0xd14f,
+ 0xd150, 0xd151, 0xd152, 0xd153, 0xd154, 0xd155, 0xd156, 0xd157,
+ 0xd158, 0xd159, 0xd15a, 0xd15b, 0xd15c, 0xd15d, 0xd15e, 0xd15f,
+ 0xd160, 0xd161, 0xd162, 0xd163, 0xd164, 0xd165, 0xd166, 0xd167,
+ 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, 0xd16f,
+ 0xd170, 0xd171, 0xd172, 0xd173, 0xd174, 0xd175, 0xd176, 0xd177,
+ 0xd178, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d, 0xd17e, 0xd17f,
+ 0xd180, 0xd181, 0xd182, 0xd183, 0xd184, 0xd185, 0xd186, 0xd187, /* 0xd180 */
+ 0xd188, 0xd189, 0xd18a, 0xd18b, 0xd18c, 0xd18d, 0xd18e, 0xd18f,
+ 0xd190, 0xd191, 0xd192, 0xd193, 0xd194, 0xd195, 0xd196, 0xd197,
+ 0xd198, 0xd199, 0xd19a, 0xd19b, 0xd19c, 0xd19d, 0xd19e, 0xd19f,
+ 0xd1a0, 0xd1a1, 0xd1a2, 0xd1a3, 0xd1a4, 0xd1a5, 0xd1a6, 0xd1a7,
+ 0xd1a8, 0xd1a9, 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ad, 0xd1ae, 0xd1af,
+ 0xd1b0, 0xd1b1, 0xd1b2, 0xd1b3, 0xd1b4, 0xd1b5, 0xd1b6, 0xd1b7,
+ 0xd1b8, 0xd1b9, 0xd1ba, 0xd1bb, 0xd1bc, 0xd1bd, 0xd1be, 0xd1bf,
+ 0xd1c0, 0xd1c1, 0xd1c2, 0xd1c3, 0xd1c4, 0xd1c5, 0xd1c6, 0xd1c7, /* 0xd1c0 */
+ 0xd1c8, 0xd1c9, 0xd1ca, 0xd1cb, 0xd1cc, 0xd1cd, 0xd1ce, 0xd1cf,
+ 0xd1d0, 0xd1d1, 0xd1d2, 0xd1d3, 0xd1d4, 0xd1d5, 0xd1d6, 0xd1d7,
+ 0xd1d8, 0xd1d9, 0xd1da, 0xd1db, 0xd1dc, 0xd1dd, 0xd1de, 0xd1df,
+ 0xd1e0, 0xd1e1, 0xd1e2, 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e6, 0xd1e7,
+ 0xd1e8, 0xd1e9, 0xd1ea, 0xd1eb, 0xd1ec, 0xd1ed, 0xd1ee, 0xd1ef,
+ 0xd1f0, 0xd1f1, 0xd1f2, 0xd1f3, 0xd1f4, 0xd1f5, 0xd1f6, 0xd1f7,
+ 0xd1f8, 0xd1f9, 0xd1fa, 0xd1fb, 0xd1fc, 0xd1fd, 0xd1fe, 0xd1ff,
+ 0xd200, 0xd201, 0xd202, 0xd203, 0xd204, 0xd205, 0xd206, 0xd207, /* 0xd200 */
+ 0xd208, 0xd209, 0xd20a, 0xd20b, 0xd20c, 0xd20d, 0xd20e, 0xd20f,
+ 0xd210, 0xd211, 0xd212, 0xd213, 0xd214, 0xd215, 0xd216, 0xd217,
+ 0xd218, 0xd219, 0xd21a, 0xd21b, 0xd21c, 0xd21d, 0xd21e, 0xd21f,
+ 0xd220, 0xd221, 0xd222, 0xd223, 0xd224, 0xd225, 0xd226, 0xd227,
+ 0xd228, 0xd229, 0xd22a, 0xd22b, 0xd22c, 0xd22d, 0xd22e, 0xd22f,
+ 0xd230, 0xd231, 0xd232, 0xd233, 0xd234, 0xd235, 0xd236, 0xd237,
+ 0xd238, 0xd239, 0xd23a, 0xd23b, 0xd23c, 0xd23d, 0xd23e, 0xd23f,
+ 0xd240, 0xd241, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, /* 0xd240 */
+ 0xd248, 0xd249, 0xd24a, 0xd24b, 0xd24c, 0xd24d, 0xd24e, 0xd24f,
+ 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, 0xd256, 0xd257,
+ 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d, 0xd25e, 0xd25f,
+ 0xd260, 0xd261, 0xd262, 0xd263, 0xd264, 0xd265, 0xd266, 0xd267,
+ 0xd268, 0xd269, 0xd26a, 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f,
+ 0xd270, 0xd271, 0xd272, 0xd273, 0xd274, 0xd275, 0xd276, 0xd277,
+ 0xd278, 0xd279, 0xd27a, 0xd27b, 0xd27c, 0xd27d, 0xd27e, 0xd27f,
+ 0xd280, 0xd281, 0xd282, 0xd283, 0xd284, 0xd285, 0xd286, 0xd287, /* 0xd280 */
+ 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e, 0xd28f,
+ 0xd290, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295, 0xd296, 0xd297,
+ 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d, 0xd29e, 0xd29f,
+ 0xd2a0, 0xd2a1, 0xd2a2, 0xd2a3, 0xd2a4, 0xd2a5, 0xd2a6, 0xd2a7,
+ 0xd2a8, 0xd2a9, 0xd2aa, 0xd2ab, 0xd2ac, 0xd2ad, 0xd2ae, 0xd2af,
+ 0xd2b0, 0xd2b1, 0xd2b2, 0xd2b3, 0xd2b4, 0xd2b5, 0xd2b6, 0xd2b7,
+ 0xd2b8, 0xd2b9, 0xd2ba, 0xd2bb, 0xd2bc, 0xd2bd, 0xd2be, 0xd2bf,
+ 0xd2c0, 0xd2c1, 0xd2c2, 0xd2c3, 0xd2c4, 0xd2c5, 0xd2c6, 0xd2c7, /* 0xd2c0 */
+ 0xd2c8, 0xd2c9, 0xd2ca, 0xd2cb, 0xd2cc, 0xd2cd, 0xd2ce, 0xd2cf,
+ 0xd2d0, 0xd2d1, 0xd2d2, 0xd2d3, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2d7,
+ 0xd2d8, 0xd2d9, 0xd2da, 0xd2db, 0xd2dc, 0xd2dd, 0xd2de, 0xd2df,
+ 0xd2e0, 0xd2e1, 0xd2e2, 0xd2e3, 0xd2e4, 0xd2e5, 0xd2e6, 0xd2e7,
+ 0xd2e8, 0xd2e9, 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ed, 0xd2ee, 0xd2ef,
+ 0xd2f0, 0xd2f1, 0xd2f2, 0xd2f3, 0xd2f4, 0xd2f5, 0xd2f6, 0xd2f7,
+ 0xd2f8, 0xd2f9, 0xd2fa, 0xd2fb, 0xd2fc, 0xd2fd, 0xd2fe, 0xd2ff,
+ 0xd300, 0xd301, 0xd302, 0xd303, 0xd304, 0xd305, 0xd306, 0xd307, /* 0xd300 */
+ 0xd308, 0xd309, 0xd30a, 0xd30b, 0xd30c, 0xd30d, 0xd30e, 0xd30f,
+ 0xd310, 0xd311, 0xd312, 0xd313, 0xd314, 0xd315, 0xd316, 0xd317,
+ 0xd318, 0xd319, 0xd31a, 0xd31b, 0xd31c, 0xd31d, 0xd31e, 0xd31f,
+ 0xd320, 0xd321, 0xd322, 0xd323, 0xd324, 0xd325, 0xd326, 0xd327,
+ 0xd328, 0xd329, 0xd32a, 0xd32b, 0xd32c, 0xd32d, 0xd32e, 0xd32f,
+ 0xd330, 0xd331, 0xd332, 0xd333, 0xd334, 0xd335, 0xd336, 0xd337,
+ 0xd338, 0xd339, 0xd33a, 0xd33b, 0xd33c, 0xd33d, 0xd33e, 0xd33f,
+ 0xd340, 0xd341, 0xd342, 0xd343, 0xd344, 0xd345, 0xd346, 0xd347, /* 0xd340 */
+ 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c, 0xd34d, 0xd34e, 0xd34f,
+ 0xd350, 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, 0xd356, 0xd357,
+ 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, 0xd35e, 0xd35f,
+ 0xd360, 0xd361, 0xd362, 0xd363, 0xd364, 0xd365, 0xd366, 0xd367,
+ 0xd368, 0xd369, 0xd36a, 0xd36b, 0xd36c, 0xd36d, 0xd36e, 0xd36f,
+ 0xd370, 0xd371, 0xd372, 0xd373, 0xd374, 0xd375, 0xd376, 0xd377,
+ 0xd378, 0xd379, 0xd37a, 0xd37b, 0xd37c, 0xd37d, 0xd37e, 0xd37f,
+ 0xd380, 0xd381, 0xd382, 0xd383, 0xd384, 0xd385, 0xd386, 0xd387, /* 0xd380 */
+ 0xd388, 0xd389, 0xd38a, 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f,
+ 0xd390, 0xd391, 0xd392, 0xd393, 0xd394, 0xd395, 0xd396, 0xd397,
+ 0xd398, 0xd399, 0xd39a, 0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f,
+ 0xd3a0, 0xd3a1, 0xd3a2, 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a6, 0xd3a7,
+ 0xd3a8, 0xd3a9, 0xd3aa, 0xd3ab, 0xd3ac, 0xd3ad, 0xd3ae, 0xd3af,
+ 0xd3b0, 0xd3b1, 0xd3b2, 0xd3b3, 0xd3b4, 0xd3b5, 0xd3b6, 0xd3b7,
+ 0xd3b8, 0xd3b9, 0xd3ba, 0xd3bb, 0xd3bc, 0xd3bd, 0xd3be, 0xd3bf,
+ 0xd3c0, 0xd3c1, 0xd3c2, 0xd3c3, 0xd3c4, 0xd3c5, 0xd3c6, 0xd3c7, /* 0xd3c0 */
+ 0xd3c8, 0xd3c9, 0xd3ca, 0xd3cb, 0xd3cc, 0xd3cd, 0xd3ce, 0xd3cf,
+ 0xd3d0, 0xd3d1, 0xd3d2, 0xd3d3, 0xd3d4, 0xd3d5, 0xd3d6, 0xd3d7,
+ 0xd3d8, 0xd3d9, 0xd3da, 0xd3db, 0xd3dc, 0xd3dd, 0xd3de, 0xd3df,
+ 0xd3e0, 0xd3e1, 0xd3e2, 0xd3e3, 0xd3e4, 0xd3e5, 0xd3e6, 0xd3e7,
+ 0xd3e8, 0xd3e9, 0xd3ea, 0xd3eb, 0xd3ec, 0xd3ed, 0xd3ee, 0xd3ef,
+ 0xd3f0, 0xd3f1, 0xd3f2, 0xd3f3, 0xd3f4, 0xd3f5, 0xd3f6, 0xd3f7,
+ 0xd3f8, 0xd3f9, 0xd3fa, 0xd3fb, 0xd3fc, 0xd3fd, 0xd3fe, 0xd3ff,
+ 0xd400, 0xd401, 0xd402, 0xd403, 0xd404, 0xd405, 0xd406, 0xd407, /* 0xd400 */
+ 0xd408, 0xd409, 0xd40a, 0xd40b, 0xd40c, 0xd40d, 0xd40e, 0xd40f,
+ 0xd410, 0xd411, 0xd412, 0xd413, 0xd414, 0xd415, 0xd416, 0xd417,
+ 0xd418, 0xd419, 0xd41a, 0xd41b, 0xd41c, 0xd41d, 0xd41e, 0xd41f,
+ 0xd420, 0xd421, 0xd422, 0xd423, 0xd424, 0xd425, 0xd426, 0xd427,
+ 0xd428, 0xd429, 0xd42a, 0xd42b, 0xd42c, 0xd42d, 0xd42e, 0xd42f,
+ 0xd430, 0xd431, 0xd432, 0xd433, 0xd434, 0xd435, 0xd436, 0xd437,
+ 0xd438, 0xd439, 0xd43a, 0xd43b, 0xd43c, 0xd43d, 0xd43e, 0xd43f,
+ 0xd440, 0xd441, 0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, /* 0xd440 */
+ 0xd448, 0xd449, 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f,
+ 0xd450, 0xd451, 0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457,
+ 0xd458, 0xd459, 0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f,
+ 0xd460, 0xd461, 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467,
+ 0xd468, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f,
+ 0xd470, 0xd471, 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477,
+ 0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd47f,
+ 0xd480, 0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, /* 0xd480 */
+ 0xd488, 0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f,
+ 0xd490, 0xd491, 0xd492, 0xd493, 0xd494, 0xd495, 0xd496, 0xd497,
+ 0xd498, 0xd499, 0xd49a, 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f,
+ 0xd4a0, 0xd4a1, 0xd4a2, 0xd4a3, 0xd4a4, 0xd4a5, 0xd4a6, 0xd4a7,
+ 0xd4a8, 0xd4a9, 0xd4aa, 0xd4ab, 0xd4ac, 0xd4ad, 0xd4ae, 0xd4af,
+ 0xd4b0, 0xd4b1, 0xd4b2, 0xd4b3, 0xd4b4, 0xd4b5, 0xd4b6, 0xd4b7,
+ 0xd4b8, 0xd4b9, 0xd4ba, 0xd4bb, 0xd4bc, 0xd4bd, 0xd4be, 0xd4bf,
+ 0xd4c0, 0xd4c1, 0xd4c2, 0xd4c3, 0xd4c4, 0xd4c5, 0xd4c6, 0xd4c7, /* 0xd4c0 */
+ 0xd4c8, 0xd4c9, 0xd4ca, 0xd4cb, 0xd4cc, 0xd4cd, 0xd4ce, 0xd4cf,
+ 0xd4d0, 0xd4d1, 0xd4d2, 0xd4d3, 0xd4d4, 0xd4d5, 0xd4d6, 0xd4d7,
+ 0xd4d8, 0xd4d9, 0xd4da, 0xd4db, 0xd4dc, 0xd4dd, 0xd4de, 0xd4df,
+ 0xd4e0, 0xd4e1, 0xd4e2, 0xd4e3, 0xd4e4, 0xd4e5, 0xd4e6, 0xd4e7,
+ 0xd4e8, 0xd4e9, 0xd4ea, 0xd4eb, 0xd4ec, 0xd4ed, 0xd4ee, 0xd4ef,
+ 0xd4f0, 0xd4f1, 0xd4f2, 0xd4f3, 0xd4f4, 0xd4f5, 0xd4f6, 0xd4f7,
+ 0xd4f8, 0xd4f9, 0xd4fa, 0xd4fb, 0xd4fc, 0xd4fd, 0xd4fe, 0xd4ff,
+ 0xd500, 0xd501, 0xd502, 0xd503, 0xd504, 0xd505, 0xd506, 0xd507, /* 0xd500 */
+ 0xd508, 0xd509, 0xd50a, 0xd50b, 0xd50c, 0xd50d, 0xd50e, 0xd50f,
+ 0xd510, 0xd511, 0xd512, 0xd513, 0xd514, 0xd515, 0xd516, 0xd517,
+ 0xd518, 0xd519, 0xd51a, 0xd51b, 0xd51c, 0xd51d, 0xd51e, 0xd51f,
+ 0xd520, 0xd521, 0xd522, 0xd523, 0xd524, 0xd525, 0xd526, 0xd527,
+ 0xd528, 0xd529, 0xd52a, 0xd52b, 0xd52c, 0xd52d, 0xd52e, 0xd52f,
+ 0xd530, 0xd531, 0xd532, 0xd533, 0xd534, 0xd535, 0xd536, 0xd537,
+ 0xd538, 0xd539, 0xd53a, 0xd53b, 0xd53c, 0xd53d, 0xd53e, 0xd53f,
+ 0xd540, 0xd541, 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, 0xd547, /* 0xd540 */
+ 0xd548, 0xd549, 0xd54a, 0xd54b, 0xd54c, 0xd54d, 0xd54e, 0xd54f,
+ 0xd550, 0xd551, 0xd552, 0xd553, 0xd554, 0xd555, 0xd556, 0xd557,
+ 0xd558, 0xd559, 0xd55a, 0xd55b, 0xd55c, 0xd55d, 0xd55e, 0xd55f,
+ 0xd560, 0xd561, 0xd562, 0xd563, 0xd564, 0xd565, 0xd566, 0xd567,
+ 0xd568, 0xd569, 0xd56a, 0xd56b, 0xd56c, 0xd56d, 0xd56e, 0xd56f,
+ 0xd570, 0xd571, 0xd572, 0xd573, 0xd574, 0xd575, 0xd576, 0xd577,
+ 0xd578, 0xd579, 0xd57a, 0xd57b, 0xd57c, 0xd57d, 0xd57e, 0xd57f,
+ 0xd580, 0xd581, 0xd582, 0xd583, 0xd584, 0xd585, 0xd586, 0xd587, /* 0xd580 */
+ 0xd588, 0xd589, 0xd58a, 0xd58b, 0xd58c, 0xd58d, 0xd58e, 0xd58f,
+ 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, 0xd595, 0xd596, 0xd597,
+ 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, 0xd59d, 0xd59e, 0xd59f,
+ 0xd5a0, 0xd5a1, 0xd5a2, 0xd5a3, 0xd5a4, 0xd5a5, 0xd5a6, 0xd5a7,
+ 0xd5a8, 0xd5a9, 0xd5aa, 0xd5ab, 0xd5ac, 0xd5ad, 0xd5ae, 0xd5af,
+ 0xd5b0, 0xd5b1, 0xd5b2, 0xd5b3, 0xd5b4, 0xd5b5, 0xd5b6, 0xd5b7,
+ 0xd5b8, 0xd5b9, 0xd5ba, 0xd5bb, 0xd5bc, 0xd5bd, 0xd5be, 0xd5bf,
+ 0xd5c0, 0xd5c1, 0xd5c2, 0xd5c3, 0xd5c4, 0xd5c5, 0xd5c6, 0xd5c7, /* 0xd5c0 */
+ 0xd5c8, 0xd5c9, 0xd5ca, 0xd5cb, 0xd5cc, 0xd5cd, 0xd5ce, 0xd5cf,
+ 0xd5d0, 0xd5d1, 0xd5d2, 0xd5d3, 0xd5d4, 0xd5d5, 0xd5d6, 0xd5d7,
+ 0xd5d8, 0xd5d9, 0xd5da, 0xd5db, 0xd5dc, 0xd5dd, 0xd5de, 0xd5df,
+ 0xd5e0, 0xd5e1, 0xd5e2, 0xd5e3, 0xd5e4, 0xd5e5, 0xd5e6, 0xd5e7,
+ 0xd5e8, 0xd5e9, 0xd5ea, 0xd5eb, 0xd5ec, 0xd5ed, 0xd5ee, 0xd5ef,
+ 0xd5f0, 0xd5f1, 0xd5f2, 0xd5f3, 0xd5f4, 0xd5f5, 0xd5f6, 0xd5f7,
+ 0xd5f8, 0xd5f9, 0xd5fa, 0xd5fb, 0xd5fc, 0xd5fd, 0xd5fe, 0xd5ff,
+ 0xd600, 0xd601, 0xd602, 0xd603, 0xd604, 0xd605, 0xd606, 0xd607, /* 0xd600 */
+ 0xd608, 0xd609, 0xd60a, 0xd60b, 0xd60c, 0xd60d, 0xd60e, 0xd60f,
+ 0xd610, 0xd611, 0xd612, 0xd613, 0xd614, 0xd615, 0xd616, 0xd617,
+ 0xd618, 0xd619, 0xd61a, 0xd61b, 0xd61c, 0xd61d, 0xd61e, 0xd61f,
+ 0xd620, 0xd621, 0xd622, 0xd623, 0xd624, 0xd625, 0xd626, 0xd627,
+ 0xd628, 0xd629, 0xd62a, 0xd62b, 0xd62c, 0xd62d, 0xd62e, 0xd62f,
+ 0xd630, 0xd631, 0xd632, 0xd633, 0xd634, 0xd635, 0xd636, 0xd637,
+ 0xd638, 0xd639, 0xd63a, 0xd63b, 0xd63c, 0xd63d, 0xd63e, 0xd63f,
+ 0xd640, 0xd641, 0xd642, 0xd643, 0xd644, 0xd645, 0xd646, 0xd647, /* 0xd640 */
+ 0xd648, 0xd649, 0xd64a, 0xd64b, 0xd64c, 0xd64d, 0xd64e, 0xd64f,
+ 0xd650, 0xd651, 0xd652, 0xd653, 0xd654, 0xd655, 0xd656, 0xd657,
+ 0xd658, 0xd659, 0xd65a, 0xd65b, 0xd65c, 0xd65d, 0xd65e, 0xd65f,
+ 0xd660, 0xd661, 0xd662, 0xd663, 0xd664, 0xd665, 0xd666, 0xd667,
+ 0xd668, 0xd669, 0xd66a, 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f,
+ 0xd670, 0xd671, 0xd672, 0xd673, 0xd674, 0xd675, 0xd676, 0xd677,
+ 0xd678, 0xd679, 0xd67a, 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd67f,
+ 0xd680, 0xd681, 0xd682, 0xd683, 0xd684, 0xd685, 0xd686, 0xd687, /* 0xd680 */
+ 0xd688, 0xd689, 0xd68a, 0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f,
+ 0xd690, 0xd691, 0xd692, 0xd693, 0xd694, 0xd695, 0xd696, 0xd697,
+ 0xd698, 0xd699, 0xd69a, 0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f,
+ 0xd6a0, 0xd6a1, 0xd6a2, 0xd6a3, 0xd6a4, 0xd6a5, 0xd6a6, 0xd6a7,
+ 0xd6a8, 0xd6a9, 0xd6aa, 0xd6ab, 0xd6ac, 0xd6ad, 0xd6ae, 0xd6af,
+ 0xd6b0, 0xd6b1, 0xd6b2, 0xd6b3, 0xd6b4, 0xd6b5, 0xd6b6, 0xd6b7,
+ 0xd6b8, 0xd6b9, 0xd6ba, 0xd6bb, 0xd6bc, 0xd6bd, 0xd6be, 0xd6bf,
+ 0xd6c0, 0xd6c1, 0xd6c2, 0xd6c3, 0xd6c4, 0xd6c5, 0xd6c6, 0xd6c7, /* 0xd6c0 */
+ 0xd6c8, 0xd6c9, 0xd6ca, 0xd6cb, 0xd6cc, 0xd6cd, 0xd6ce, 0xd6cf,
+ 0xd6d0, 0xd6d1, 0xd6d2, 0xd6d3, 0xd6d4, 0xd6d5, 0xd6d6, 0xd6d7,
+ 0xd6d8, 0xd6d9, 0xd6da, 0xd6db, 0xd6dc, 0xd6dd, 0xd6de, 0xd6df,
+ 0xd6e0, 0xd6e1, 0xd6e2, 0xd6e3, 0xd6e4, 0xd6e5, 0xd6e6, 0xd6e7,
+ 0xd6e8, 0xd6e9, 0xd6ea, 0xd6eb, 0xd6ec, 0xd6ed, 0xd6ee, 0xd6ef,
+ 0xd6f0, 0xd6f1, 0xd6f2, 0xd6f3, 0xd6f4, 0xd6f5, 0xd6f6, 0xd6f7,
+ 0xd6f8, 0xd6f9, 0xd6fa, 0xd6fb, 0xd6fc, 0xd6fd, 0xd6fe, 0xd6ff,
+ 0xd700, 0xd701, 0xd702, 0xd703, 0xd704, 0xd705, 0xd706, 0xd707, /* 0xd700 */
+ 0xd708, 0xd709, 0xd70a, 0xd70b, 0xd70c, 0xd70d, 0xd70e, 0xd70f,
+ 0xd710, 0xd711, 0xd712, 0xd713, 0xd714, 0xd715, 0xd716, 0xd717,
+ 0xd718, 0xd719, 0xd71a, 0xd71b, 0xd71c, 0xd71d, 0xd71e, 0xd71f,
+ 0xd720, 0xd721, 0xd722, 0xd723, 0xd724, 0xd725, 0xd726, 0xd727,
+ 0xd728, 0xd729, 0xd72a, 0xd72b, 0xd72c, 0xd72d, 0xd72e, 0xd72f,
+ 0xd730, 0xd731, 0xd732, 0xd733, 0xd734, 0xd735, 0xd736, 0xd737,
+ 0xd738, 0xd739, 0xd73a, 0xd73b, 0xd73c, 0xd73d, 0xd73e, 0xd73f,
+ 0xd740, 0xd741, 0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, /* 0xd740 */
+ 0xd748, 0xd749, 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f,
+ 0xd750, 0xd751, 0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757,
+ 0xd758, 0xd759, 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f,
+ 0xd760, 0xd761, 0xd762, 0xd763, 0xd764, 0xd765, 0xd766, 0xd767,
+ 0xd768, 0xd769, 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f,
+ 0xd770, 0xd771, 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777,
+ 0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd77f,
+ 0xd780, 0xd781, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, /* 0xd780 */
+ 0xd788, 0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f,
+ 0xd790, 0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796, 0xd797,
+ 0xd798, 0xd799, 0xd79a, 0xd79b, 0xd79c, 0xd79d, 0xd79e, 0xd79f,
+ 0xd7a0, 0xd7a1, 0xd7a2, 0xd7a3, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xd7b0, 0xd7b1, 0xd7b2, 0xd7b3, 0xd7b4, 0xd7b5, 0xd7b6, 0xd7b7,
+ 0xd7b8, 0xd7b9, 0xd7ba, 0xd7bb, 0xd7bc, 0xd7bd, 0xd7be, 0xd7bf,
+ 0xd7c0, 0xd7c1, 0xd7c2, 0xd7c3, 0xd7c4, 0xd7c5, 0xd7c6, 0x0000, /* 0xd7c0 */
+ 0x0000, 0x0000, 0x0000, 0xd7cb, 0xd7cc, 0xd7cd, 0xd7ce, 0xd7cf,
+ 0xd7d0, 0xd7d1, 0xd7d2, 0xd7d3, 0xd7d4, 0xd7d5, 0xd7d6, 0xd7d7,
+ 0xd7d8, 0xd7d9, 0xd7da, 0xd7db, 0xd7dc, 0xd7dd, 0xd7de, 0xd7df,
+ 0xd7e0, 0xd7e1, 0xd7e2, 0xd7e3, 0xd7e4, 0xd7e5, 0xd7e6, 0xd7e7,
+ 0xd7e8, 0xd7e9, 0xd7ea, 0xd7eb, 0xd7ec, 0xd7ed, 0xd7ee, 0xd7ef,
+ 0xd7f0, 0xd7f1, 0xd7f2, 0xd7f3, 0xd7f4, 0xd7f5, 0xd7f6, 0xd7f7,
+ 0xd7f8, 0xd7f9, 0xd7fa, 0xd7fb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xd800, 0xd801, 0xd802, 0xd803, 0xd804, 0xd805, 0xd806, 0xd807, /* 0xd800 */
+ 0xd808, 0xd809, 0xd80a, 0xd80b, 0xd80c, 0xd80d, 0xd80e, 0xd80f,
+ 0xd810, 0xd811, 0xd812, 0xd813, 0xd814, 0xd815, 0xd816, 0xd817,
+ 0xd818, 0xd819, 0xd81a, 0xd81b, 0xd81c, 0xd81d, 0xd81e, 0xd81f,
+ 0xd820, 0xd821, 0xd822, 0xd823, 0xd824, 0xd825, 0xd826, 0xd827,
+ 0xd828, 0xd829, 0xd82a, 0xd82b, 0xd82c, 0xd82d, 0xd82e, 0xd82f,
+ 0xd830, 0xd831, 0xd832, 0xd833, 0xd834, 0xd835, 0xd836, 0xd837,
+ 0xd838, 0xd839, 0xd83a, 0xd83b, 0xd83c, 0xd83d, 0xd83e, 0xd83f,
+ 0xd840, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, /* 0xd840 */
+ 0xd848, 0xd849, 0xd84a, 0xd84b, 0xd84c, 0xd84d, 0xd84e, 0xd84f,
+ 0xd850, 0xd851, 0xd852, 0xd853, 0xd854, 0xd855, 0xd856, 0xd857,
+ 0xd858, 0xd859, 0xd85a, 0xd85b, 0xd85c, 0xd85d, 0xd85e, 0xd85f,
+ 0xd860, 0xd861, 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, 0xd867,
+ 0xd868, 0xd869, 0xd86a, 0xd86b, 0xd86c, 0xd86d, 0xd86e, 0xd86f,
+ 0xd870, 0xd871, 0xd872, 0xd873, 0xd874, 0xd875, 0xd876, 0xd877,
+ 0xd878, 0xd879, 0xd87a, 0xd87b, 0xd87c, 0xd87d, 0xd87e, 0xd87f,
+ 0xd880, 0xd881, 0xd882, 0xd883, 0xd884, 0xd885, 0xd886, 0xd887, /* 0xd880 */
+ 0xd888, 0xd889, 0xd88a, 0xd88b, 0xd88c, 0xd88d, 0xd88e, 0xd88f,
+ 0xd890, 0xd891, 0xd892, 0xd893, 0xd894, 0xd895, 0xd896, 0xd897,
+ 0xd898, 0xd899, 0xd89a, 0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f,
+ 0xd8a0, 0xd8a1, 0xd8a2, 0xd8a3, 0xd8a4, 0xd8a5, 0xd8a6, 0xd8a7,
+ 0xd8a8, 0xd8a9, 0xd8aa, 0xd8ab, 0xd8ac, 0xd8ad, 0xd8ae, 0xd8af,
+ 0xd8b0, 0xd8b1, 0xd8b2, 0xd8b3, 0xd8b4, 0xd8b5, 0xd8b6, 0xd8b7,
+ 0xd8b8, 0xd8b9, 0xd8ba, 0xd8bb, 0xd8bc, 0xd8bd, 0xd8be, 0xd8bf,
+ 0xd8c0, 0xd8c1, 0xd8c2, 0xd8c3, 0xd8c4, 0xd8c5, 0xd8c6, 0xd8c7, /* 0xd8c0 */
+ 0xd8c8, 0xd8c9, 0xd8ca, 0xd8cb, 0xd8cc, 0xd8cd, 0xd8ce, 0xd8cf,
+ 0xd8d0, 0xd8d1, 0xd8d2, 0xd8d3, 0xd8d4, 0xd8d5, 0xd8d6, 0xd8d7,
+ 0xd8d8, 0xd8d9, 0xd8da, 0xd8db, 0xd8dc, 0xd8dd, 0xd8de, 0xd8df,
+ 0xd8e0, 0xd8e1, 0xd8e2, 0xd8e3, 0xd8e4, 0xd8e5, 0xd8e6, 0xd8e7,
+ 0xd8e8, 0xd8e9, 0xd8ea, 0xd8eb, 0xd8ec, 0xd8ed, 0xd8ee, 0xd8ef,
+ 0xd8f0, 0xd8f1, 0xd8f2, 0xd8f3, 0xd8f4, 0xd8f5, 0xd8f6, 0xd8f7,
+ 0xd8f8, 0xd8f9, 0xd8fa, 0xd8fb, 0xd8fc, 0xd8fd, 0xd8fe, 0xd8ff,
+ 0xd900, 0xd901, 0xd902, 0xd903, 0xd904, 0xd905, 0xd906, 0xd907, /* 0xd900 */
+ 0xd908, 0xd909, 0xd90a, 0xd90b, 0xd90c, 0xd90d, 0xd90e, 0xd90f,
+ 0xd910, 0xd911, 0xd912, 0xd913, 0xd914, 0xd915, 0xd916, 0xd917,
+ 0xd918, 0xd919, 0xd91a, 0xd91b, 0xd91c, 0xd91d, 0xd91e, 0xd91f,
+ 0xd920, 0xd921, 0xd922, 0xd923, 0xd924, 0xd925, 0xd926, 0xd927,
+ 0xd928, 0xd929, 0xd92a, 0xd92b, 0xd92c, 0xd92d, 0xd92e, 0xd92f,
+ 0xd930, 0xd931, 0xd932, 0xd933, 0xd934, 0xd935, 0xd936, 0xd937,
+ 0xd938, 0xd939, 0xd93a, 0xd93b, 0xd93c, 0xd93d, 0xd93e, 0xd93f,
+ 0xd940, 0xd941, 0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, /* 0xd940 */
+ 0xd948, 0xd949, 0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f,
+ 0xd950, 0xd951, 0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957,
+ 0xd958, 0xd959, 0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f,
+ 0xd960, 0xd961, 0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967,
+ 0xd968, 0xd969, 0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f,
+ 0xd970, 0xd971, 0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977,
+ 0xd978, 0xd979, 0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd97f,
+ 0xd980, 0xd981, 0xd982, 0xd983, 0xd984, 0xd985, 0xd986, 0xd987, /* 0xd980 */
+ 0xd988, 0xd989, 0xd98a, 0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f,
+ 0xd990, 0xd991, 0xd992, 0xd993, 0xd994, 0xd995, 0xd996, 0xd997,
+ 0xd998, 0xd999, 0xd99a, 0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f,
+ 0xd9a0, 0xd9a1, 0xd9a2, 0xd9a3, 0xd9a4, 0xd9a5, 0xd9a6, 0xd9a7,
+ 0xd9a8, 0xd9a9, 0xd9aa, 0xd9ab, 0xd9ac, 0xd9ad, 0xd9ae, 0xd9af,
+ 0xd9b0, 0xd9b1, 0xd9b2, 0xd9b3, 0xd9b4, 0xd9b5, 0xd9b6, 0xd9b7,
+ 0xd9b8, 0xd9b9, 0xd9ba, 0xd9bb, 0xd9bc, 0xd9bd, 0xd9be, 0xd9bf,
+ 0xd9c0, 0xd9c1, 0xd9c2, 0xd9c3, 0xd9c4, 0xd9c5, 0xd9c6, 0xd9c7, /* 0xd9c0 */
+ 0xd9c8, 0xd9c9, 0xd9ca, 0xd9cb, 0xd9cc, 0xd9cd, 0xd9ce, 0xd9cf,
+ 0xd9d0, 0xd9d1, 0xd9d2, 0xd9d3, 0xd9d4, 0xd9d5, 0xd9d6, 0xd9d7,
+ 0xd9d8, 0xd9d9, 0xd9da, 0xd9db, 0xd9dc, 0xd9dd, 0xd9de, 0xd9df,
+ 0xd9e0, 0xd9e1, 0xd9e2, 0xd9e3, 0xd9e4, 0xd9e5, 0xd9e6, 0xd9e7,
+ 0xd9e8, 0xd9e9, 0xd9ea, 0xd9eb, 0xd9ec, 0xd9ed, 0xd9ee, 0xd9ef,
+ 0xd9f0, 0xd9f1, 0xd9f2, 0xd9f3, 0xd9f4, 0xd9f5, 0xd9f6, 0xd9f7,
+ 0xd9f8, 0xd9f9, 0xd9fa, 0xd9fb, 0xd9fc, 0xd9fd, 0xd9fe, 0xd9ff,
+ 0xda00, 0xda01, 0xda02, 0xda03, 0xda04, 0xda05, 0xda06, 0xda07, /* 0xda00 */
+ 0xda08, 0xda09, 0xda0a, 0xda0b, 0xda0c, 0xda0d, 0xda0e, 0xda0f,
+ 0xda10, 0xda11, 0xda12, 0xda13, 0xda14, 0xda15, 0xda16, 0xda17,
+ 0xda18, 0xda19, 0xda1a, 0xda1b, 0xda1c, 0xda1d, 0xda1e, 0xda1f,
+ 0xda20, 0xda21, 0xda22, 0xda23, 0xda24, 0xda25, 0xda26, 0xda27,
+ 0xda28, 0xda29, 0xda2a, 0xda2b, 0xda2c, 0xda2d, 0xda2e, 0xda2f,
+ 0xda30, 0xda31, 0xda32, 0xda33, 0xda34, 0xda35, 0xda36, 0xda37,
+ 0xda38, 0xda39, 0xda3a, 0xda3b, 0xda3c, 0xda3d, 0xda3e, 0xda3f,
+ 0xda40, 0xda41, 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, /* 0xda40 */
+ 0xda48, 0xda49, 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xda4f,
+ 0xda50, 0xda51, 0xda52, 0xda53, 0xda54, 0xda55, 0xda56, 0xda57,
+ 0xda58, 0xda59, 0xda5a, 0xda5b, 0xda5c, 0xda5d, 0xda5e, 0xda5f,
+ 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, 0xda65, 0xda66, 0xda67,
+ 0xda68, 0xda69, 0xda6a, 0xda6b, 0xda6c, 0xda6d, 0xda6e, 0xda6f,
+ 0xda70, 0xda71, 0xda72, 0xda73, 0xda74, 0xda75, 0xda76, 0xda77,
+ 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xda7d, 0xda7e, 0xda7f,
+ 0xda80, 0xda81, 0xda82, 0xda83, 0xda84, 0xda85, 0xda86, 0xda87, /* 0xda80 */
+ 0xda88, 0xda89, 0xda8a, 0xda8b, 0xda8c, 0xda8d, 0xda8e, 0xda8f,
+ 0xda90, 0xda91, 0xda92, 0xda93, 0xda94, 0xda95, 0xda96, 0xda97,
+ 0xda98, 0xda99, 0xda9a, 0xda9b, 0xda9c, 0xda9d, 0xda9e, 0xda9f,
+ 0xdaa0, 0xdaa1, 0xdaa2, 0xdaa3, 0xdaa4, 0xdaa5, 0xdaa6, 0xdaa7,
+ 0xdaa8, 0xdaa9, 0xdaaa, 0xdaab, 0xdaac, 0xdaad, 0xdaae, 0xdaaf,
+ 0xdab0, 0xdab1, 0xdab2, 0xdab3, 0xdab4, 0xdab5, 0xdab6, 0xdab7,
+ 0xdab8, 0xdab9, 0xdaba, 0xdabb, 0xdabc, 0xdabd, 0xdabe, 0xdabf,
+ 0xdac0, 0xdac1, 0xdac2, 0xdac3, 0xdac4, 0xdac5, 0xdac6, 0xdac7, /* 0xdac0 */
+ 0xdac8, 0xdac9, 0xdaca, 0xdacb, 0xdacc, 0xdacd, 0xdace, 0xdacf,
+ 0xdad0, 0xdad1, 0xdad2, 0xdad3, 0xdad4, 0xdad5, 0xdad6, 0xdad7,
+ 0xdad8, 0xdad9, 0xdada, 0xdadb, 0xdadc, 0xdadd, 0xdade, 0xdadf,
+ 0xdae0, 0xdae1, 0xdae2, 0xdae3, 0xdae4, 0xdae5, 0xdae6, 0xdae7,
+ 0xdae8, 0xdae9, 0xdaea, 0xdaeb, 0xdaec, 0xdaed, 0xdaee, 0xdaef,
+ 0xdaf0, 0xdaf1, 0xdaf2, 0xdaf3, 0xdaf4, 0xdaf5, 0xdaf6, 0xdaf7,
+ 0xdaf8, 0xdaf9, 0xdafa, 0xdafb, 0xdafc, 0xdafd, 0xdafe, 0xdaff,
+ 0xdb00, 0xdb01, 0xdb02, 0xdb03, 0xdb04, 0xdb05, 0xdb06, 0xdb07, /* 0xdb00 */
+ 0xdb08, 0xdb09, 0xdb0a, 0xdb0b, 0xdb0c, 0xdb0d, 0xdb0e, 0xdb0f,
+ 0xdb10, 0xdb11, 0xdb12, 0xdb13, 0xdb14, 0xdb15, 0xdb16, 0xdb17,
+ 0xdb18, 0xdb19, 0xdb1a, 0xdb1b, 0xdb1c, 0xdb1d, 0xdb1e, 0xdb1f,
+ 0xdb20, 0xdb21, 0xdb22, 0xdb23, 0xdb24, 0xdb25, 0xdb26, 0xdb27,
+ 0xdb28, 0xdb29, 0xdb2a, 0xdb2b, 0xdb2c, 0xdb2d, 0xdb2e, 0xdb2f,
+ 0xdb30, 0xdb31, 0xdb32, 0xdb33, 0xdb34, 0xdb35, 0xdb36, 0xdb37,
+ 0xdb38, 0xdb39, 0xdb3a, 0xdb3b, 0xdb3c, 0xdb3d, 0xdb3e, 0xdb3f,
+ 0xdb40, 0xdb41, 0xdb42, 0xdb43, 0xdb44, 0xdb45, 0xdb46, 0xdb47, /* 0xdb40 */
+ 0xdb48, 0xdb49, 0xdb4a, 0xdb4b, 0xdb4c, 0xdb4d, 0xdb4e, 0xdb4f,
+ 0xdb50, 0xdb51, 0xdb52, 0xdb53, 0xdb54, 0xdb55, 0xdb56, 0xdb57,
+ 0xdb58, 0xdb59, 0xdb5a, 0xdb5b, 0xdb5c, 0xdb5d, 0xdb5e, 0xdb5f,
+ 0xdb60, 0xdb61, 0xdb62, 0xdb63, 0xdb64, 0xdb65, 0xdb66, 0xdb67,
+ 0xdb68, 0xdb69, 0xdb6a, 0xdb6b, 0xdb6c, 0xdb6d, 0xdb6e, 0xdb6f,
+ 0xdb70, 0xdb71, 0xdb72, 0xdb73, 0xdb74, 0xdb75, 0xdb76, 0xdb77,
+ 0xdb78, 0xdb79, 0xdb7a, 0xdb7b, 0xdb7c, 0xdb7d, 0xdb7e, 0xdb7f,
+ 0xdb80, 0xdb81, 0xdb82, 0xdb83, 0xdb84, 0xdb85, 0xdb86, 0xdb87, /* 0xdb80 */
+ 0xdb88, 0xdb89, 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8d, 0xdb8e, 0xdb8f,
+ 0xdb90, 0xdb91, 0xdb92, 0xdb93, 0xdb94, 0xdb95, 0xdb96, 0xdb97,
+ 0xdb98, 0xdb99, 0xdb9a, 0xdb9b, 0xdb9c, 0xdb9d, 0xdb9e, 0xdb9f,
+ 0xdba0, 0xdba1, 0xdba2, 0xdba3, 0xdba4, 0xdba5, 0xdba6, 0xdba7,
+ 0xdba8, 0xdba9, 0xdbaa, 0xdbab, 0xdbac, 0xdbad, 0xdbae, 0xdbaf,
+ 0xdbb0, 0xdbb1, 0xdbb2, 0xdbb3, 0xdbb4, 0xdbb5, 0xdbb6, 0xdbb7,
+ 0xdbb8, 0xdbb9, 0xdbba, 0xdbbb, 0xdbbc, 0xdbbd, 0xdbbe, 0xdbbf,
+ 0xdbc0, 0xdbc1, 0xdbc2, 0xdbc3, 0xdbc4, 0xdbc5, 0xdbc6, 0xdbc7, /* 0xdbc0 */
+ 0xdbc8, 0xdbc9, 0xdbca, 0xdbcb, 0xdbcc, 0xdbcd, 0xdbce, 0xdbcf,
+ 0xdbd0, 0xdbd1, 0xdbd2, 0xdbd3, 0xdbd4, 0xdbd5, 0xdbd6, 0xdbd7,
+ 0xdbd8, 0xdbd9, 0xdbda, 0xdbdb, 0xdbdc, 0xdbdd, 0xdbde, 0xdbdf,
+ 0xdbe0, 0xdbe1, 0xdbe2, 0xdbe3, 0xdbe4, 0xdbe5, 0xdbe6, 0xdbe7,
+ 0xdbe8, 0xdbe9, 0xdbea, 0xdbeb, 0xdbec, 0xdbed, 0xdbee, 0xdbef,
+ 0xdbf0, 0xdbf1, 0xdbf2, 0xdbf3, 0xdbf4, 0xdbf5, 0xdbf6, 0xdbf7,
+ 0xdbf8, 0xdbf9, 0xdbfa, 0xdbfb, 0xdbfc, 0xdbfd, 0xdbfe, 0xdbff,
+ 0xdc00, 0xdc01, 0xdc02, 0xdc03, 0xdc04, 0xdc05, 0xdc06, 0xdc07, /* 0xdc00 */
+ 0xdc08, 0xdc09, 0xdc0a, 0xdc0b, 0xdc0c, 0xdc0d, 0xdc0e, 0xdc0f,
+ 0xdc10, 0xdc11, 0xdc12, 0xdc13, 0xdc14, 0xdc15, 0xdc16, 0xdc17,
+ 0xdc18, 0xdc19, 0xdc1a, 0xdc1b, 0xdc1c, 0xdc1d, 0xdc1e, 0xdc1f,
+ 0xdc20, 0xdc21, 0xdc22, 0xdc23, 0xdc24, 0xdc25, 0xdc26, 0xdc27,
+ 0xdc28, 0xdc29, 0xdc2a, 0xdc2b, 0xdc2c, 0xdc2d, 0xdc2e, 0xdc2f,
+ 0xdc30, 0xdc31, 0xdc32, 0xdc33, 0xdc34, 0xdc35, 0xdc36, 0xdc37,
+ 0xdc38, 0xdc39, 0xdc3a, 0xdc3b, 0xdc3c, 0xdc3d, 0xdc3e, 0xdc3f,
+ 0xdc40, 0xdc41, 0xdc42, 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xdc47, /* 0xdc40 */
+ 0xdc48, 0xdc49, 0xdc4a, 0xdc4b, 0xdc4c, 0xdc4d, 0xdc4e, 0xdc4f,
+ 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xdc55, 0xdc56, 0xdc57,
+ 0xdc58, 0xdc59, 0xdc5a, 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xdc5f,
+ 0xdc60, 0xdc61, 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67,
+ 0xdc68, 0xdc69, 0xdc6a, 0xdc6b, 0xdc6c, 0xdc6d, 0xdc6e, 0xdc6f,
+ 0xdc70, 0xdc71, 0xdc72, 0xdc73, 0xdc74, 0xdc75, 0xdc76, 0xdc77,
+ 0xdc78, 0xdc79, 0xdc7a, 0xdc7b, 0xdc7c, 0xdc7d, 0xdc7e, 0xdc7f,
+ 0xdc80, 0xdc81, 0xdc82, 0xdc83, 0xdc84, 0xdc85, 0xdc86, 0xdc87, /* 0xdc80 */
+ 0xdc88, 0xdc89, 0xdc8a, 0xdc8b, 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f,
+ 0xdc90, 0xdc91, 0xdc92, 0xdc93, 0xdc94, 0xdc95, 0xdc96, 0xdc97,
+ 0xdc98, 0xdc99, 0xdc9a, 0xdc9b, 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f,
+ 0xdca0, 0xdca1, 0xdca2, 0xdca3, 0xdca4, 0xdca5, 0xdca6, 0xdca7,
+ 0xdca8, 0xdca9, 0xdcaa, 0xdcab, 0xdcac, 0xdcad, 0xdcae, 0xdcaf,
+ 0xdcb0, 0xdcb1, 0xdcb2, 0xdcb3, 0xdcb4, 0xdcb5, 0xdcb6, 0xdcb7,
+ 0xdcb8, 0xdcb9, 0xdcba, 0xdcbb, 0xdcbc, 0xdcbd, 0xdcbe, 0xdcbf,
+ 0xdcc0, 0xdcc1, 0xdcc2, 0xdcc3, 0xdcc4, 0xdcc5, 0xdcc6, 0xdcc7, /* 0xdcc0 */
+ 0xdcc8, 0xdcc9, 0xdcca, 0xdccb, 0xdccc, 0xdccd, 0xdcce, 0xdccf,
+ 0xdcd0, 0xdcd1, 0xdcd2, 0xdcd3, 0xdcd4, 0xdcd5, 0xdcd6, 0xdcd7,
+ 0xdcd8, 0xdcd9, 0xdcda, 0xdcdb, 0xdcdc, 0xdcdd, 0xdcde, 0xdcdf,
+ 0xdce0, 0xdce1, 0xdce2, 0xdce3, 0xdce4, 0xdce5, 0xdce6, 0xdce7,
+ 0xdce8, 0xdce9, 0xdcea, 0xdceb, 0xdcec, 0xdced, 0xdcee, 0xdcef,
+ 0xdcf0, 0xdcf1, 0xdcf2, 0xdcf3, 0xdcf4, 0xdcf5, 0xdcf6, 0xdcf7,
+ 0xdcf8, 0xdcf9, 0xdcfa, 0xdcfb, 0xdcfc, 0xdcfd, 0xdcfe, 0xdcff,
+ 0xdd00, 0xdd01, 0xdd02, 0xdd03, 0xdd04, 0xdd05, 0xdd06, 0xdd07, /* 0xdd00 */
+ 0xdd08, 0xdd09, 0xdd0a, 0xdd0b, 0xdd0c, 0xdd0d, 0xdd0e, 0xdd0f,
+ 0xdd10, 0xdd11, 0xdd12, 0xdd13, 0xdd14, 0xdd15, 0xdd16, 0xdd17,
+ 0xdd18, 0xdd19, 0xdd1a, 0xdd1b, 0xdd1c, 0xdd1d, 0xdd1e, 0xdd1f,
+ 0xdd20, 0xdd21, 0xdd22, 0xdd23, 0xdd24, 0xdd25, 0xdd26, 0xdd27,
+ 0xdd28, 0xdd29, 0xdd2a, 0xdd2b, 0xdd2c, 0xdd2d, 0xdd2e, 0xdd2f,
+ 0xdd30, 0xdd31, 0xdd32, 0xdd33, 0xdd34, 0xdd35, 0xdd36, 0xdd37,
+ 0xdd38, 0xdd39, 0xdd3a, 0xdd3b, 0xdd3c, 0xdd3d, 0xdd3e, 0xdd3f,
+ 0xdd40, 0xdd41, 0xdd42, 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, /* 0xdd40 */
+ 0xdd48, 0xdd49, 0xdd4a, 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f,
+ 0xdd50, 0xdd51, 0xdd52, 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57,
+ 0xdd58, 0xdd59, 0xdd5a, 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f,
+ 0xdd60, 0xdd61, 0xdd62, 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67,
+ 0xdd68, 0xdd69, 0xdd6a, 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f,
+ 0xdd70, 0xdd71, 0xdd72, 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77,
+ 0xdd78, 0xdd79, 0xdd7a, 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd7f,
+ 0xdd80, 0xdd81, 0xdd82, 0xdd83, 0xdd84, 0xdd85, 0xdd86, 0xdd87, /* 0xdd80 */
+ 0xdd88, 0xdd89, 0xdd8a, 0xdd8b, 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f,
+ 0xdd90, 0xdd91, 0xdd92, 0xdd93, 0xdd94, 0xdd95, 0xdd96, 0xdd97,
+ 0xdd98, 0xdd99, 0xdd9a, 0xdd9b, 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f,
+ 0xdda0, 0xdda1, 0xdda2, 0xdda3, 0xdda4, 0xdda5, 0xdda6, 0xdda7,
+ 0xdda8, 0xdda9, 0xddaa, 0xddab, 0xddac, 0xddad, 0xddae, 0xddaf,
+ 0xddb0, 0xddb1, 0xddb2, 0xddb3, 0xddb4, 0xddb5, 0xddb6, 0xddb7,
+ 0xddb8, 0xddb9, 0xddba, 0xddbb, 0xddbc, 0xddbd, 0xddbe, 0xddbf,
+ 0xddc0, 0xddc1, 0xddc2, 0xddc3, 0xddc4, 0xddc5, 0xddc6, 0xddc7, /* 0xddc0 */
+ 0xddc8, 0xddc9, 0xddca, 0xddcb, 0xddcc, 0xddcd, 0xddce, 0xddcf,
+ 0xddd0, 0xddd1, 0xddd2, 0xddd3, 0xddd4, 0xddd5, 0xddd6, 0xddd7,
+ 0xddd8, 0xddd9, 0xddda, 0xdddb, 0xdddc, 0xdddd, 0xddde, 0xdddf,
+ 0xdde0, 0xdde1, 0xdde2, 0xdde3, 0xdde4, 0xdde5, 0xdde6, 0xdde7,
+ 0xdde8, 0xdde9, 0xddea, 0xddeb, 0xddec, 0xdded, 0xddee, 0xddef,
+ 0xddf0, 0xddf1, 0xddf2, 0xddf3, 0xddf4, 0xddf5, 0xddf6, 0xddf7,
+ 0xddf8, 0xddf9, 0xddfa, 0xddfb, 0xddfc, 0xddfd, 0xddfe, 0xddff,
+ 0xde00, 0xde01, 0xde02, 0xde03, 0xde04, 0xde05, 0xde06, 0xde07, /* 0xde00 */
+ 0xde08, 0xde09, 0xde0a, 0xde0b, 0xde0c, 0xde0d, 0xde0e, 0xde0f,
+ 0xde10, 0xde11, 0xde12, 0xde13, 0xde14, 0xde15, 0xde16, 0xde17,
+ 0xde18, 0xde19, 0xde1a, 0xde1b, 0xde1c, 0xde1d, 0xde1e, 0xde1f,
+ 0xde20, 0xde21, 0xde22, 0xde23, 0xde24, 0xde25, 0xde26, 0xde27,
+ 0xde28, 0xde29, 0xde2a, 0xde2b, 0xde2c, 0xde2d, 0xde2e, 0xde2f,
+ 0xde30, 0xde31, 0xde32, 0xde33, 0xde34, 0xde35, 0xde36, 0xde37,
+ 0xde38, 0xde39, 0xde3a, 0xde3b, 0xde3c, 0xde3d, 0xde3e, 0xde3f,
+ 0xde40, 0xde41, 0xde42, 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, /* 0xde40 */
+ 0xde48, 0xde49, 0xde4a, 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f,
+ 0xde50, 0xde51, 0xde52, 0xde53, 0xde54, 0xde55, 0xde56, 0xde57,
+ 0xde58, 0xde59, 0xde5a, 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f,
+ 0xde60, 0xde61, 0xde62, 0xde63, 0xde64, 0xde65, 0xde66, 0xde67,
+ 0xde68, 0xde69, 0xde6a, 0xde6b, 0xde6c, 0xde6d, 0xde6e, 0xde6f,
+ 0xde70, 0xde71, 0xde72, 0xde73, 0xde74, 0xde75, 0xde76, 0xde77,
+ 0xde78, 0xde79, 0xde7a, 0xde7b, 0xde7c, 0xde7d, 0xde7e, 0xde7f,
+ 0xde80, 0xde81, 0xde82, 0xde83, 0xde84, 0xde85, 0xde86, 0xde87, /* 0xde80 */
+ 0xde88, 0xde89, 0xde8a, 0xde8b, 0xde8c, 0xde8d, 0xde8e, 0xde8f,
+ 0xde90, 0xde91, 0xde92, 0xde93, 0xde94, 0xde95, 0xde96, 0xde97,
+ 0xde98, 0xde99, 0xde9a, 0xde9b, 0xde9c, 0xde9d, 0xde9e, 0xde9f,
+ 0xdea0, 0xdea1, 0xdea2, 0xdea3, 0xdea4, 0xdea5, 0xdea6, 0xdea7,
+ 0xdea8, 0xdea9, 0xdeaa, 0xdeab, 0xdeac, 0xdead, 0xdeae, 0xdeaf,
+ 0xdeb0, 0xdeb1, 0xdeb2, 0xdeb3, 0xdeb4, 0xdeb5, 0xdeb6, 0xdeb7,
+ 0xdeb8, 0xdeb9, 0xdeba, 0xdebb, 0xdebc, 0xdebd, 0xdebe, 0xdebf,
+ 0xdec0, 0xdec1, 0xdec2, 0xdec3, 0xdec4, 0xdec5, 0xdec6, 0xdec7, /* 0xdec0 */
+ 0xdec8, 0xdec9, 0xdeca, 0xdecb, 0xdecc, 0xdecd, 0xdece, 0xdecf,
+ 0xded0, 0xded1, 0xded2, 0xded3, 0xded4, 0xded5, 0xded6, 0xded7,
+ 0xded8, 0xded9, 0xdeda, 0xdedb, 0xdedc, 0xdedd, 0xdede, 0xdedf,
+ 0xdee0, 0xdee1, 0xdee2, 0xdee3, 0xdee4, 0xdee5, 0xdee6, 0xdee7,
+ 0xdee8, 0xdee9, 0xdeea, 0xdeeb, 0xdeec, 0xdeed, 0xdeee, 0xdeef,
+ 0xdef0, 0xdef1, 0xdef2, 0xdef3, 0xdef4, 0xdef5, 0xdef6, 0xdef7,
+ 0xdef8, 0xdef9, 0xdefa, 0xdefb, 0xdefc, 0xdefd, 0xdefe, 0xdeff,
+ 0xdf00, 0xdf01, 0xdf02, 0xdf03, 0xdf04, 0xdf05, 0xdf06, 0xdf07, /* 0xdf00 */
+ 0xdf08, 0xdf09, 0xdf0a, 0xdf0b, 0xdf0c, 0xdf0d, 0xdf0e, 0xdf0f,
+ 0xdf10, 0xdf11, 0xdf12, 0xdf13, 0xdf14, 0xdf15, 0xdf16, 0xdf17,
+ 0xdf18, 0xdf19, 0xdf1a, 0xdf1b, 0xdf1c, 0xdf1d, 0xdf1e, 0xdf1f,
+ 0xdf20, 0xdf21, 0xdf22, 0xdf23, 0xdf24, 0xdf25, 0xdf26, 0xdf27,
+ 0xdf28, 0xdf29, 0xdf2a, 0xdf2b, 0xdf2c, 0xdf2d, 0xdf2e, 0xdf2f,
+ 0xdf30, 0xdf31, 0xdf32, 0xdf33, 0xdf34, 0xdf35, 0xdf36, 0xdf37,
+ 0xdf38, 0xdf39, 0xdf3a, 0xdf3b, 0xdf3c, 0xdf3d, 0xdf3e, 0xdf3f,
+ 0xdf40, 0xdf41, 0xdf42, 0xdf43, 0xdf44, 0xdf45, 0xdf46, 0xdf47, /* 0xdf40 */
+ 0xdf48, 0xdf49, 0xdf4a, 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f,
+ 0xdf50, 0xdf51, 0xdf52, 0xdf53, 0xdf54, 0xdf55, 0xdf56, 0xdf57,
+ 0xdf58, 0xdf59, 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xdf5e, 0xdf5f,
+ 0xdf60, 0xdf61, 0xdf62, 0xdf63, 0xdf64, 0xdf65, 0xdf66, 0xdf67,
+ 0xdf68, 0xdf69, 0xdf6a, 0xdf6b, 0xdf6c, 0xdf6d, 0xdf6e, 0xdf6f,
+ 0xdf70, 0xdf71, 0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xdf76, 0xdf77,
+ 0xdf78, 0xdf79, 0xdf7a, 0xdf7b, 0xdf7c, 0xdf7d, 0xdf7e, 0xdf7f,
+ 0xdf80, 0xdf81, 0xdf82, 0xdf83, 0xdf84, 0xdf85, 0xdf86, 0xdf87, /* 0xdf80 */
+ 0xdf88, 0xdf89, 0xdf8a, 0xdf8b, 0xdf8c, 0xdf8d, 0xdf8e, 0xdf8f,
+ 0xdf90, 0xdf91, 0xdf92, 0xdf93, 0xdf94, 0xdf95, 0xdf96, 0xdf97,
+ 0xdf98, 0xdf99, 0xdf9a, 0xdf9b, 0xdf9c, 0xdf9d, 0xdf9e, 0xdf9f,
+ 0xdfa0, 0xdfa1, 0xdfa2, 0xdfa3, 0xdfa4, 0xdfa5, 0xdfa6, 0xdfa7,
+ 0xdfa8, 0xdfa9, 0xdfaa, 0xdfab, 0xdfac, 0xdfad, 0xdfae, 0xdfaf,
+ 0xdfb0, 0xdfb1, 0xdfb2, 0xdfb3, 0xdfb4, 0xdfb5, 0xdfb6, 0xdfb7,
+ 0xdfb8, 0xdfb9, 0xdfba, 0xdfbb, 0xdfbc, 0xdfbd, 0xdfbe, 0xdfbf,
+ 0xdfc0, 0xdfc1, 0xdfc2, 0xdfc3, 0xdfc4, 0xdfc5, 0xdfc6, 0xdfc7, /* 0xdfc0 */
+ 0xdfc8, 0xdfc9, 0xdfca, 0xdfcb, 0xdfcc, 0xdfcd, 0xdfce, 0xdfcf,
+ 0xdfd0, 0xdfd1, 0xdfd2, 0xdfd3, 0xdfd4, 0xdfd5, 0xdfd6, 0xdfd7,
+ 0xdfd8, 0xdfd9, 0xdfda, 0xdfdb, 0xdfdc, 0xdfdd, 0xdfde, 0xdfdf,
+ 0xdfe0, 0xdfe1, 0xdfe2, 0xdfe3, 0xdfe4, 0xdfe5, 0xdfe6, 0xdfe7,
+ 0xdfe8, 0xdfe9, 0xdfea, 0xdfeb, 0xdfec, 0xdfed, 0xdfee, 0xdfef,
+ 0xdff0, 0xdff1, 0xdff2, 0xdff3, 0xdff4, 0xdff5, 0xdff6, 0xdff7,
+ 0xdff8, 0xdff9, 0xdffa, 0xdffb, 0xdffc, 0xdffd, 0xdffe, 0xdfff,
+ 0xe000, 0xe001, 0xe002, 0xe003, 0xe004, 0xe005, 0xe006, 0xe007, /* 0xe000 */
+ 0xe008, 0xe009, 0xe00a, 0xe00b, 0xe00c, 0xe00d, 0xe00e, 0xe00f,
+ 0xe010, 0xe011, 0xe012, 0xe013, 0xe014, 0xe015, 0xe016, 0xe017,
+ 0xe018, 0xe019, 0xe01a, 0xe01b, 0xe01c, 0xe01d, 0xe01e, 0xe01f,
+ 0xe020, 0xe021, 0xe022, 0xe023, 0xe024, 0xe025, 0xe026, 0xe027,
+ 0xe028, 0xe029, 0xe02a, 0xe02b, 0xe02c, 0xe02d, 0xe02e, 0xe02f,
+ 0xe030, 0xe031, 0xe032, 0xe033, 0xe034, 0xe035, 0xe036, 0xe037,
+ 0xe038, 0xe039, 0xe03a, 0xe03b, 0xe03c, 0xe03d, 0xe03e, 0xe03f,
+ 0xe040, 0xe041, 0xe042, 0xe043, 0xe044, 0xe045, 0xe046, 0xe047, /* 0xe040 */
+ 0xe048, 0xe049, 0xe04a, 0xe04b, 0xe04c, 0xe04d, 0xe04e, 0xe04f,
+ 0xe050, 0xe051, 0xe052, 0xe053, 0xe054, 0xe055, 0xe056, 0xe057,
+ 0xe058, 0xe059, 0xe05a, 0xe05b, 0xe05c, 0xe05d, 0xe05e, 0xe05f,
+ 0xe060, 0xe061, 0xe062, 0xe063, 0xe064, 0xe065, 0xe066, 0xe067,
+ 0xe068, 0xe069, 0xe06a, 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f,
+ 0xe070, 0xe071, 0xe072, 0xe073, 0xe074, 0xe075, 0xe076, 0xe077,
+ 0xe078, 0xe079, 0xe07a, 0xe07b, 0xe07c, 0xe07d, 0xe07e, 0xe07f,
+ 0xe080, 0xe081, 0xe082, 0xe083, 0xe084, 0xe085, 0xe086, 0xe087, /* 0xe080 */
+ 0xe088, 0xe089, 0xe08a, 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xe08f,
+ 0xe090, 0xe091, 0xe092, 0xe093, 0xe094, 0xe095, 0xe096, 0xe097,
+ 0xe098, 0xe099, 0xe09a, 0xe09b, 0xe09c, 0xe09d, 0xe09e, 0xe09f,
+ 0xe0a0, 0xe0a1, 0xe0a2, 0xe0a3, 0xe0a4, 0xe0a5, 0xe0a6, 0xe0a7,
+ 0xe0a8, 0xe0a9, 0xe0aa, 0xe0ab, 0xe0ac, 0xe0ad, 0xe0ae, 0xe0af,
+ 0xe0b0, 0xe0b1, 0xe0b2, 0xe0b3, 0xe0b4, 0xe0b5, 0xe0b6, 0xe0b7,
+ 0xe0b8, 0xe0b9, 0xe0ba, 0xe0bb, 0xe0bc, 0xe0bd, 0xe0be, 0xe0bf,
+ 0xe0c0, 0xe0c1, 0xe0c2, 0xe0c3, 0xe0c4, 0xe0c5, 0xe0c6, 0xe0c7, /* 0xe0c0 */
+ 0xe0c8, 0xe0c9, 0xe0ca, 0xe0cb, 0xe0cc, 0xe0cd, 0xe0ce, 0xe0cf,
+ 0xe0d0, 0xe0d1, 0xe0d2, 0xe0d3, 0xe0d4, 0xe0d5, 0xe0d6, 0xe0d7,
+ 0xe0d8, 0xe0d9, 0xe0da, 0xe0db, 0xe0dc, 0xe0dd, 0xe0de, 0xe0df,
+ 0xe0e0, 0xe0e1, 0xe0e2, 0xe0e3, 0xe0e4, 0xe0e5, 0xe0e6, 0xe0e7,
+ 0xe0e8, 0xe0e9, 0xe0ea, 0xe0eb, 0xe0ec, 0xe0ed, 0xe0ee, 0xe0ef,
+ 0xe0f0, 0xe0f1, 0xe0f2, 0xe0f3, 0xe0f4, 0xe0f5, 0xe0f6, 0xe0f7,
+ 0xe0f8, 0xe0f9, 0xe0fa, 0xe0fb, 0xe0fc, 0xe0fd, 0xe0fe, 0xe0ff,
+ 0xe100, 0xe101, 0xe102, 0xe103, 0xe104, 0xe105, 0xe106, 0xe107, /* 0xe100 */
+ 0xe108, 0xe109, 0xe10a, 0xe10b, 0xe10c, 0xe10d, 0xe10e, 0xe10f,
+ 0xe110, 0xe111, 0xe112, 0xe113, 0xe114, 0xe115, 0xe116, 0xe117,
+ 0xe118, 0xe119, 0xe11a, 0xe11b, 0xe11c, 0xe11d, 0xe11e, 0xe11f,
+ 0xe120, 0xe121, 0xe122, 0xe123, 0xe124, 0xe125, 0xe126, 0xe127,
+ 0xe128, 0xe129, 0xe12a, 0xe12b, 0xe12c, 0xe12d, 0xe12e, 0xe12f,
+ 0xe130, 0xe131, 0xe132, 0xe133, 0xe134, 0xe135, 0xe136, 0xe137,
+ 0xe138, 0xe139, 0xe13a, 0xe13b, 0xe13c, 0xe13d, 0xe13e, 0xe13f,
+ 0xe140, 0xe141, 0xe142, 0xe143, 0xe144, 0xe145, 0xe146, 0xe147, /* 0xe140 */
+ 0xe148, 0xe149, 0xe14a, 0xe14b, 0xe14c, 0xe14d, 0xe14e, 0xe14f,
+ 0xe150, 0xe151, 0xe152, 0xe153, 0xe154, 0xe155, 0xe156, 0xe157,
+ 0xe158, 0xe159, 0xe15a, 0xe15b, 0xe15c, 0xe15d, 0xe15e, 0xe15f,
+ 0xe160, 0xe161, 0xe162, 0xe163, 0xe164, 0xe165, 0xe166, 0xe167,
+ 0xe168, 0xe169, 0xe16a, 0xe16b, 0xe16c, 0xe16d, 0xe16e, 0xe16f,
+ 0xe170, 0xe171, 0xe172, 0xe173, 0xe174, 0xe175, 0xe176, 0xe177,
+ 0xe178, 0xe179, 0xe17a, 0xe17b, 0xe17c, 0xe17d, 0xe17e, 0xe17f,
+ 0xe180, 0xe181, 0xe182, 0xe183, 0xe184, 0xe185, 0xe186, 0xe187, /* 0xe180 */
+ 0xe188, 0xe189, 0xe18a, 0xe18b, 0xe18c, 0xe18d, 0xe18e, 0xe18f,
+ 0xe190, 0xe191, 0xe192, 0xe193, 0xe194, 0xe195, 0xe196, 0xe197,
+ 0xe198, 0xe199, 0xe19a, 0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f,
+ 0xe1a0, 0xe1a1, 0xe1a2, 0xe1a3, 0xe1a4, 0xe1a5, 0xe1a6, 0xe1a7,
+ 0xe1a8, 0xe1a9, 0xe1aa, 0xe1ab, 0xe1ac, 0xe1ad, 0xe1ae, 0xe1af,
+ 0xe1b0, 0xe1b1, 0xe1b2, 0xe1b3, 0xe1b4, 0xe1b5, 0xe1b6, 0xe1b7,
+ 0xe1b8, 0xe1b9, 0xe1ba, 0xe1bb, 0xe1bc, 0xe1bd, 0xe1be, 0xe1bf,
+ 0xe1c0, 0xe1c1, 0xe1c2, 0xe1c3, 0xe1c4, 0xe1c5, 0xe1c6, 0xe1c7, /* 0xe1c0 */
+ 0xe1c8, 0xe1c9, 0xe1ca, 0xe1cb, 0xe1cc, 0xe1cd, 0xe1ce, 0xe1cf,
+ 0xe1d0, 0xe1d1, 0xe1d2, 0xe1d3, 0xe1d4, 0xe1d5, 0xe1d6, 0xe1d7,
+ 0xe1d8, 0xe1d9, 0xe1da, 0xe1db, 0xe1dc, 0xe1dd, 0xe1de, 0xe1df,
+ 0xe1e0, 0xe1e1, 0xe1e2, 0xe1e3, 0xe1e4, 0xe1e5, 0xe1e6, 0xe1e7,
+ 0xe1e8, 0xe1e9, 0xe1ea, 0xe1eb, 0xe1ec, 0xe1ed, 0xe1ee, 0xe1ef,
+ 0xe1f0, 0xe1f1, 0xe1f2, 0xe1f3, 0xe1f4, 0xe1f5, 0xe1f6, 0xe1f7,
+ 0xe1f8, 0xe1f9, 0xe1fa, 0xe1fb, 0xe1fc, 0xe1fd, 0xe1fe, 0xe1ff,
+ 0xe200, 0xe201, 0xe202, 0xe203, 0xe204, 0xe205, 0xe206, 0xe207, /* 0xe200 */
+ 0xe208, 0xe209, 0xe20a, 0xe20b, 0xe20c, 0xe20d, 0xe20e, 0xe20f,
+ 0xe210, 0xe211, 0xe212, 0xe213, 0xe214, 0xe215, 0xe216, 0xe217,
+ 0xe218, 0xe219, 0xe21a, 0xe21b, 0xe21c, 0xe21d, 0xe21e, 0xe21f,
+ 0xe220, 0xe221, 0xe222, 0xe223, 0xe224, 0xe225, 0xe226, 0xe227,
+ 0xe228, 0xe229, 0xe22a, 0xe22b, 0xe22c, 0xe22d, 0xe22e, 0xe22f,
+ 0xe230, 0xe231, 0xe232, 0xe233, 0xe234, 0xe235, 0xe236, 0xe237,
+ 0xe238, 0xe239, 0xe23a, 0xe23b, 0xe23c, 0xe23d, 0xe23e, 0xe23f,
+ 0xe240, 0xe241, 0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, /* 0xe240 */
+ 0xe248, 0xe249, 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f,
+ 0xe250, 0xe251, 0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257,
+ 0xe258, 0xe259, 0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f,
+ 0xe260, 0xe261, 0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267,
+ 0xe268, 0xe269, 0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f,
+ 0xe270, 0xe271, 0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277,
+ 0xe278, 0xe279, 0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe27f,
+ 0xe280, 0xe281, 0xe282, 0xe283, 0xe284, 0xe285, 0xe286, 0xe287, /* 0xe280 */
+ 0xe288, 0xe289, 0xe28a, 0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f,
+ 0xe290, 0xe291, 0xe292, 0xe293, 0xe294, 0xe295, 0xe296, 0xe297,
+ 0xe298, 0xe299, 0xe29a, 0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f,
+ 0xe2a0, 0xe2a1, 0xe2a2, 0xe2a3, 0xe2a4, 0xe2a5, 0xe2a6, 0xe2a7,
+ 0xe2a8, 0xe2a9, 0xe2aa, 0xe2ab, 0xe2ac, 0xe2ad, 0xe2ae, 0xe2af,
+ 0xe2b0, 0xe2b1, 0xe2b2, 0xe2b3, 0xe2b4, 0xe2b5, 0xe2b6, 0xe2b7,
+ 0xe2b8, 0xe2b9, 0xe2ba, 0xe2bb, 0xe2bc, 0xe2bd, 0xe2be, 0xe2bf,
+ 0xe2c0, 0xe2c1, 0xe2c2, 0xe2c3, 0xe2c4, 0xe2c5, 0xe2c6, 0xe2c7, /* 0xe2c0 */
+ 0xe2c8, 0xe2c9, 0xe2ca, 0xe2cb, 0xe2cc, 0xe2cd, 0xe2ce, 0xe2cf,
+ 0xe2d0, 0xe2d1, 0xe2d2, 0xe2d3, 0xe2d4, 0xe2d5, 0xe2d6, 0xe2d7,
+ 0xe2d8, 0xe2d9, 0xe2da, 0xe2db, 0xe2dc, 0xe2dd, 0xe2de, 0xe2df,
+ 0xe2e0, 0xe2e1, 0xe2e2, 0xe2e3, 0xe2e4, 0xe2e5, 0xe2e6, 0xe2e7,
+ 0xe2e8, 0xe2e9, 0xe2ea, 0xe2eb, 0xe2ec, 0xe2ed, 0xe2ee, 0xe2ef,
+ 0xe2f0, 0xe2f1, 0xe2f2, 0xe2f3, 0xe2f4, 0xe2f5, 0xe2f6, 0xe2f7,
+ 0xe2f8, 0xe2f9, 0xe2fa, 0xe2fb, 0xe2fc, 0xe2fd, 0xe2fe, 0xe2ff,
+ 0xe300, 0xe301, 0xe302, 0xe303, 0xe304, 0xe305, 0xe306, 0xe307, /* 0xe300 */
+ 0xe308, 0xe309, 0xe30a, 0xe30b, 0xe30c, 0xe30d, 0xe30e, 0xe30f,
+ 0xe310, 0xe311, 0xe312, 0xe313, 0xe314, 0xe315, 0xe316, 0xe317,
+ 0xe318, 0xe319, 0xe31a, 0xe31b, 0xe31c, 0xe31d, 0xe31e, 0xe31f,
+ 0xe320, 0xe321, 0xe322, 0xe323, 0xe324, 0xe325, 0xe326, 0xe327,
+ 0xe328, 0xe329, 0xe32a, 0xe32b, 0xe32c, 0xe32d, 0xe32e, 0xe32f,
+ 0xe330, 0xe331, 0xe332, 0xe333, 0xe334, 0xe335, 0xe336, 0xe337,
+ 0xe338, 0xe339, 0xe33a, 0xe33b, 0xe33c, 0xe33d, 0xe33e, 0xe33f,
+ 0xe340, 0xe341, 0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, /* 0xe340 */
+ 0xe348, 0xe349, 0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f,
+ 0xe350, 0xe351, 0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357,
+ 0xe358, 0xe359, 0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f,
+ 0xe360, 0xe361, 0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367,
+ 0xe368, 0xe369, 0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xe36e, 0xe36f,
+ 0xe370, 0xe371, 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377,
+ 0xe378, 0xe379, 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe37f,
+ 0xe380, 0xe381, 0xe382, 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, /* 0xe380 */
+ 0xe388, 0xe389, 0xe38a, 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f,
+ 0xe390, 0xe391, 0xe392, 0xe393, 0xe394, 0xe395, 0xe396, 0xe397,
+ 0xe398, 0xe399, 0xe39a, 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f,
+ 0xe3a0, 0xe3a1, 0xe3a2, 0xe3a3, 0xe3a4, 0xe3a5, 0xe3a6, 0xe3a7,
+ 0xe3a8, 0xe3a9, 0xe3aa, 0xe3ab, 0xe3ac, 0xe3ad, 0xe3ae, 0xe3af,
+ 0xe3b0, 0xe3b1, 0xe3b2, 0xe3b3, 0xe3b4, 0xe3b5, 0xe3b6, 0xe3b7,
+ 0xe3b8, 0xe3b9, 0xe3ba, 0xe3bb, 0xe3bc, 0xe3bd, 0xe3be, 0xe3bf,
+ 0xe3c0, 0xe3c1, 0xe3c2, 0xe3c3, 0xe3c4, 0xe3c5, 0xe3c6, 0xe3c7, /* 0xe3c0 */
+ 0xe3c8, 0xe3c9, 0xe3ca, 0xe3cb, 0xe3cc, 0xe3cd, 0xe3ce, 0xe3cf,
+ 0xe3d0, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xe3d5, 0xe3d6, 0xe3d7,
+ 0xe3d8, 0xe3d9, 0xe3da, 0xe3db, 0xe3dc, 0xe3dd, 0xe3de, 0xe3df,
+ 0xe3e0, 0xe3e1, 0xe3e2, 0xe3e3, 0xe3e4, 0xe3e5, 0xe3e6, 0xe3e7,
+ 0xe3e8, 0xe3e9, 0xe3ea, 0xe3eb, 0xe3ec, 0xe3ed, 0xe3ee, 0xe3ef,
+ 0xe3f0, 0xe3f1, 0xe3f2, 0xe3f3, 0xe3f4, 0xe3f5, 0xe3f6, 0xe3f7,
+ 0xe3f8, 0xe3f9, 0xe3fa, 0xe3fb, 0xe3fc, 0xe3fd, 0xe3fe, 0xe3ff,
+ 0xe400, 0xe401, 0xe402, 0xe403, 0xe404, 0xe405, 0xe406, 0xe407, /* 0xe400 */
+ 0xe408, 0xe409, 0xe40a, 0xe40b, 0xe40c, 0xe40d, 0xe40e, 0xe40f,
+ 0xe410, 0xe411, 0xe412, 0xe413, 0xe414, 0xe415, 0xe416, 0xe417,
+ 0xe418, 0xe419, 0xe41a, 0xe41b, 0xe41c, 0xe41d, 0xe41e, 0xe41f,
+ 0xe420, 0xe421, 0xe422, 0xe423, 0xe424, 0xe425, 0xe426, 0xe427,
+ 0xe428, 0xe429, 0xe42a, 0xe42b, 0xe42c, 0xe42d, 0xe42e, 0xe42f,
+ 0xe430, 0xe431, 0xe432, 0xe433, 0xe434, 0xe435, 0xe436, 0xe437,
+ 0xe438, 0xe439, 0xe43a, 0xe43b, 0xe43c, 0xe43d, 0xe43e, 0xe43f,
+ 0xe440, 0xe441, 0xe442, 0xe443, 0xe444, 0xe445, 0xe446, 0xe447, /* 0xe440 */
+ 0xe448, 0xe449, 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, 0xe44f,
+ 0xe450, 0xe451, 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, 0xe457,
+ 0xe458, 0xe459, 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, 0xe45f,
+ 0xe460, 0xe461, 0xe462, 0xe463, 0xe464, 0xe465, 0xe466, 0xe467,
+ 0xe468, 0xe469, 0xe46a, 0xe46b, 0xe46c, 0xe46d, 0xe46e, 0xe46f,
+ 0xe470, 0xe471, 0xe472, 0xe473, 0xe474, 0xe475, 0xe476, 0xe477,
+ 0xe478, 0xe479, 0xe47a, 0xe47b, 0xe47c, 0xe47d, 0xe47e, 0xe47f,
+ 0xe480, 0xe481, 0xe482, 0xe483, 0xe484, 0xe485, 0xe486, 0xe487, /* 0xe480 */
+ 0xe488, 0xe489, 0xe48a, 0xe48b, 0xe48c, 0xe48d, 0xe48e, 0xe48f,
+ 0xe490, 0xe491, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, 0xe497,
+ 0xe498, 0xe499, 0xe49a, 0xe49b, 0xe49c, 0xe49d, 0xe49e, 0xe49f,
+ 0xe4a0, 0xe4a1, 0xe4a2, 0xe4a3, 0xe4a4, 0xe4a5, 0xe4a6, 0xe4a7,
+ 0xe4a8, 0xe4a9, 0xe4aa, 0xe4ab, 0xe4ac, 0xe4ad, 0xe4ae, 0xe4af,
+ 0xe4b0, 0xe4b1, 0xe4b2, 0xe4b3, 0xe4b4, 0xe4b5, 0xe4b6, 0xe4b7,
+ 0xe4b8, 0xe4b9, 0xe4ba, 0xe4bb, 0xe4bc, 0xe4bd, 0xe4be, 0xe4bf,
+ 0xe4c0, 0xe4c1, 0xe4c2, 0xe4c3, 0xe4c4, 0xe4c5, 0xe4c6, 0xe4c7, /* 0xe4c0 */
+ 0xe4c8, 0xe4c9, 0xe4ca, 0xe4cb, 0xe4cc, 0xe4cd, 0xe4ce, 0xe4cf,
+ 0xe4d0, 0xe4d1, 0xe4d2, 0xe4d3, 0xe4d4, 0xe4d5, 0xe4d6, 0xe4d7,
+ 0xe4d8, 0xe4d9, 0xe4da, 0xe4db, 0xe4dc, 0xe4dd, 0xe4de, 0xe4df,
+ 0xe4e0, 0xe4e1, 0xe4e2, 0xe4e3, 0xe4e4, 0xe4e5, 0xe4e6, 0xe4e7,
+ 0xe4e8, 0xe4e9, 0xe4ea, 0xe4eb, 0xe4ec, 0xe4ed, 0xe4ee, 0xe4ef,
+ 0xe4f0, 0xe4f1, 0xe4f2, 0xe4f3, 0xe4f4, 0xe4f5, 0xe4f6, 0xe4f7,
+ 0xe4f8, 0xe4f9, 0xe4fa, 0xe4fb, 0xe4fc, 0xe4fd, 0xe4fe, 0xe4ff,
+ 0xe500, 0xe501, 0xe502, 0xe503, 0xe504, 0xe505, 0xe506, 0xe507, /* 0xe500 */
+ 0xe508, 0xe509, 0xe50a, 0xe50b, 0xe50c, 0xe50d, 0xe50e, 0xe50f,
+ 0xe510, 0xe511, 0xe512, 0xe513, 0xe514, 0xe515, 0xe516, 0xe517,
+ 0xe518, 0xe519, 0xe51a, 0xe51b, 0xe51c, 0xe51d, 0xe51e, 0xe51f,
+ 0xe520, 0xe521, 0xe522, 0xe523, 0xe524, 0xe525, 0xe526, 0xe527,
+ 0xe528, 0xe529, 0xe52a, 0xe52b, 0xe52c, 0xe52d, 0xe52e, 0xe52f,
+ 0xe530, 0xe531, 0xe532, 0xe533, 0xe534, 0xe535, 0xe536, 0xe537,
+ 0xe538, 0xe539, 0xe53a, 0xe53b, 0xe53c, 0xe53d, 0xe53e, 0xe53f,
+ 0xe540, 0xe541, 0xe542, 0xe543, 0xe544, 0xe545, 0xe546, 0xe547, /* 0xe540 */
+ 0xe548, 0xe549, 0xe54a, 0xe54b, 0xe54c, 0xe54d, 0xe54e, 0xe54f,
+ 0xe550, 0xe551, 0xe552, 0xe553, 0xe554, 0xe555, 0xe556, 0xe557,
+ 0xe558, 0xe559, 0xe55a, 0xe55b, 0xe55c, 0xe55d, 0xe55e, 0xe55f,
+ 0xe560, 0xe561, 0xe562, 0xe563, 0xe564, 0xe565, 0xe566, 0xe567,
+ 0xe568, 0xe569, 0xe56a, 0xe56b, 0xe56c, 0xe56d, 0xe56e, 0xe56f,
+ 0xe570, 0xe571, 0xe572, 0xe573, 0xe574, 0xe575, 0xe576, 0xe577,
+ 0xe578, 0xe579, 0xe57a, 0xe57b, 0xe57c, 0xe57d, 0xe57e, 0xe57f,
+ 0xe580, 0xe581, 0xe582, 0xe583, 0xe584, 0xe585, 0xe586, 0xe587, /* 0xe580 */
+ 0xe588, 0xe589, 0xe58a, 0xe58b, 0xe58c, 0xe58d, 0xe58e, 0xe58f,
+ 0xe590, 0xe591, 0xe592, 0xe593, 0xe594, 0xe595, 0xe596, 0xe597,
+ 0xe598, 0xe599, 0xe59a, 0xe59b, 0xe59c, 0xe59d, 0xe59e, 0xe59f,
+ 0xe5a0, 0xe5a1, 0xe5a2, 0xe5a3, 0xe5a4, 0xe5a5, 0xe5a6, 0xe5a7,
+ 0xe5a8, 0xe5a9, 0xe5aa, 0xe5ab, 0xe5ac, 0xe5ad, 0xe5ae, 0xe5af,
+ 0xe5b0, 0xe5b1, 0xe5b2, 0xe5b3, 0xe5b4, 0xe5b5, 0xe5b6, 0xe5b7,
+ 0xe5b8, 0xe5b9, 0xe5ba, 0xe5bb, 0xe5bc, 0xe5bd, 0xe5be, 0xe5bf,
+ 0xe5c0, 0xe5c1, 0xe5c2, 0xe5c3, 0xe5c4, 0xe5c5, 0xe5c6, 0xe5c7, /* 0xe5c0 */
+ 0xe5c8, 0xe5c9, 0xe5ca, 0xe5cb, 0xe5cc, 0xe5cd, 0xe5ce, 0xe5cf,
+ 0xe5d0, 0xe5d1, 0xe5d2, 0xe5d3, 0xe5d4, 0xe5d5, 0xe5d6, 0xe5d7,
+ 0xe5d8, 0xe5d9, 0xe5da, 0xe5db, 0xe5dc, 0xe5dd, 0xe5de, 0xe5df,
+ 0xe5e0, 0xe5e1, 0xe5e2, 0xe5e3, 0xe5e4, 0xe5e5, 0xe5e6, 0xe5e7,
+ 0xe5e8, 0xe5e9, 0xe5ea, 0xe5eb, 0xe5ec, 0xe5ed, 0xe5ee, 0xe5ef,
+ 0xe5f0, 0xe5f1, 0xe5f2, 0xe5f3, 0xe5f4, 0xe5f5, 0xe5f6, 0xe5f7,
+ 0xe5f8, 0xe5f9, 0xe5fa, 0xe5fb, 0xe5fc, 0xe5fd, 0xe5fe, 0xe5ff,
+ 0xe600, 0xe601, 0xe602, 0xe603, 0xe604, 0xe605, 0xe606, 0xe607, /* 0xe600 */
+ 0xe608, 0xe609, 0xe60a, 0xe60b, 0xe60c, 0xe60d, 0xe60e, 0xe60f,
+ 0xe610, 0xe611, 0xe612, 0xe613, 0xe614, 0xe615, 0xe616, 0xe617,
+ 0xe618, 0xe619, 0xe61a, 0xe61b, 0xe61c, 0xe61d, 0xe61e, 0xe61f,
+ 0xe620, 0xe621, 0xe622, 0xe623, 0xe624, 0xe625, 0xe626, 0xe627,
+ 0xe628, 0xe629, 0xe62a, 0xe62b, 0xe62c, 0xe62d, 0xe62e, 0xe62f,
+ 0xe630, 0xe631, 0xe632, 0xe633, 0xe634, 0xe635, 0xe636, 0xe637,
+ 0xe638, 0xe639, 0xe63a, 0xe63b, 0xe63c, 0xe63d, 0xe63e, 0xe63f,
+ 0xe640, 0xe641, 0xe642, 0xe643, 0xe644, 0xe645, 0xe646, 0xe647, /* 0xe640 */
+ 0xe648, 0xe649, 0xe64a, 0xe64b, 0xe64c, 0xe64d, 0xe64e, 0xe64f,
+ 0xe650, 0xe651, 0xe652, 0xe653, 0xe654, 0xe655, 0xe656, 0xe657,
+ 0xe658, 0xe659, 0xe65a, 0xe65b, 0xe65c, 0xe65d, 0xe65e, 0xe65f,
+ 0xe660, 0xe661, 0xe662, 0xe663, 0xe664, 0xe665, 0xe666, 0xe667,
+ 0xe668, 0xe669, 0xe66a, 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f,
+ 0xe670, 0xe671, 0xe672, 0xe673, 0xe674, 0xe675, 0xe676, 0xe677,
+ 0xe678, 0xe679, 0xe67a, 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe67f,
+ 0xe680, 0xe681, 0xe682, 0xe683, 0xe684, 0xe685, 0xe686, 0xe687, /* 0xe680 */
+ 0xe688, 0xe689, 0xe68a, 0xe68b, 0xe68c, 0xe68d, 0xe68e, 0xe68f,
+ 0xe690, 0xe691, 0xe692, 0xe693, 0xe694, 0xe695, 0xe696, 0xe697,
+ 0xe698, 0xe699, 0xe69a, 0xe69b, 0xe69c, 0xe69d, 0xe69e, 0xe69f,
+ 0xe6a0, 0xe6a1, 0xe6a2, 0xe6a3, 0xe6a4, 0xe6a5, 0xe6a6, 0xe6a7,
+ 0xe6a8, 0xe6a9, 0xe6aa, 0xe6ab, 0xe6ac, 0xe6ad, 0xe6ae, 0xe6af,
+ 0xe6b0, 0xe6b1, 0xe6b2, 0xe6b3, 0xe6b4, 0xe6b5, 0xe6b6, 0xe6b7,
+ 0xe6b8, 0xe6b9, 0xe6ba, 0xe6bb, 0xe6bc, 0xe6bd, 0xe6be, 0xe6bf,
+ 0xe6c0, 0xe6c1, 0xe6c2, 0xe6c3, 0xe6c4, 0xe6c5, 0xe6c6, 0xe6c7, /* 0xe6c0 */
+ 0xe6c8, 0xe6c9, 0xe6ca, 0xe6cb, 0xe6cc, 0xe6cd, 0xe6ce, 0xe6cf,
+ 0xe6d0, 0xe6d1, 0xe6d2, 0xe6d3, 0xe6d4, 0xe6d5, 0xe6d6, 0xe6d7,
+ 0xe6d8, 0xe6d9, 0xe6da, 0xe6db, 0xe6dc, 0xe6dd, 0xe6de, 0xe6df,
+ 0xe6e0, 0xe6e1, 0xe6e2, 0xe6e3, 0xe6e4, 0xe6e5, 0xe6e6, 0xe6e7,
+ 0xe6e8, 0xe6e9, 0xe6ea, 0xe6eb, 0xe6ec, 0xe6ed, 0xe6ee, 0xe6ef,
+ 0xe6f0, 0xe6f1, 0xe6f2, 0xe6f3, 0xe6f4, 0xe6f5, 0xe6f6, 0xe6f7,
+ 0xe6f8, 0xe6f9, 0xe6fa, 0xe6fb, 0xe6fc, 0xe6fd, 0xe6fe, 0xe6ff,
+ 0xe700, 0xe701, 0xe702, 0xe703, 0xe704, 0xe705, 0xe706, 0xe707, /* 0xe700 */
+ 0xe708, 0xe709, 0xe70a, 0xe70b, 0xe70c, 0xe70d, 0xe70e, 0xe70f,
+ 0xe710, 0xe711, 0xe712, 0xe713, 0xe714, 0xe715, 0xe716, 0xe717,
+ 0xe718, 0xe719, 0xe71a, 0xe71b, 0xe71c, 0xe71d, 0xe71e, 0xe71f,
+ 0xe720, 0xe721, 0xe722, 0xe723, 0xe724, 0xe725, 0xe726, 0xe727,
+ 0xe728, 0xe729, 0xe72a, 0xe72b, 0xe72c, 0xe72d, 0xe72e, 0xe72f,
+ 0xe730, 0xe731, 0xe732, 0xe733, 0xe734, 0xe735, 0xe736, 0xe737,
+ 0xe738, 0xe739, 0xe73a, 0xe73b, 0xe73c, 0xe73d, 0xe73e, 0xe73f,
+ 0xe740, 0xe741, 0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, /* 0xe740 */
+ 0xe748, 0xe749, 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f,
+ 0xe750, 0xe751, 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757,
+ 0xe758, 0xe759, 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f,
+ 0xe760, 0xe761, 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767,
+ 0xe768, 0xe769, 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f,
+ 0xe770, 0xe771, 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777,
+ 0xe778, 0xe779, 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe77f,
+ 0xe780, 0xe781, 0xe782, 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, /* 0xe780 */
+ 0xe788, 0xe789, 0xe78a, 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f,
+ 0xe790, 0xe791, 0xe792, 0xe793, 0xe794, 0xe795, 0xe796, 0xe797,
+ 0xe798, 0xe799, 0xe79a, 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f,
+ 0xe7a0, 0xe7a1, 0xe7a2, 0xe7a3, 0xe7a4, 0xe7a5, 0xe7a6, 0xe7a7,
+ 0xe7a8, 0xe7a9, 0xe7aa, 0xe7ab, 0xe7ac, 0xe7ad, 0xe7ae, 0xe7af,
+ 0xe7b0, 0xe7b1, 0xe7b2, 0xe7b3, 0xe7b4, 0xe7b5, 0xe7b6, 0xe7b7,
+ 0xe7b8, 0xe7b9, 0xe7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xe7be, 0xe7bf,
+ 0xe7c0, 0xe7c1, 0xe7c2, 0xe7c3, 0xe7c4, 0xe7c5, 0xe7c6, 0xe7c7, /* 0xe7c0 */
+ 0xe7c8, 0xe7c9, 0xe7ca, 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf,
+ 0xe7d0, 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xe7d5, 0xe7d6, 0xe7d7,
+ 0xe7d8, 0xe7d9, 0xe7da, 0xe7db, 0xe7dc, 0xe7dd, 0xe7de, 0xe7df,
+ 0xe7e0, 0xe7e1, 0xe7e2, 0xe7e3, 0xe7e4, 0xe7e5, 0xe7e6, 0xe7e7,
+ 0xe7e8, 0xe7e9, 0xe7ea, 0xe7eb, 0xe7ec, 0xe7ed, 0xe7ee, 0xe7ef,
+ 0xe7f0, 0xe7f1, 0xe7f2, 0xe7f3, 0xe7f4, 0xe7f5, 0xe7f6, 0xe7f7,
+ 0xe7f8, 0xe7f9, 0xe7fa, 0xe7fb, 0xe7fc, 0xe7fd, 0xe7fe, 0xe7ff,
+ 0xe800, 0xe801, 0xe802, 0xe803, 0xe804, 0xe805, 0xe806, 0xe807, /* 0xe800 */
+ 0xe808, 0xe809, 0xe80a, 0xe80b, 0xe80c, 0xe80d, 0xe80e, 0xe80f,
+ 0xe810, 0xe811, 0xe812, 0xe813, 0xe814, 0xe815, 0xe816, 0xe817,
+ 0xe818, 0xe819, 0xe81a, 0xe81b, 0xe81c, 0xe81d, 0xe81e, 0xe81f,
+ 0xe820, 0xe821, 0xe822, 0xe823, 0xe824, 0xe825, 0xe826, 0xe827,
+ 0xe828, 0xe829, 0xe82a, 0xe82b, 0xe82c, 0xe82d, 0xe82e, 0xe82f,
+ 0xe830, 0xe831, 0xe832, 0xe833, 0xe834, 0xe835, 0xe836, 0xe837,
+ 0xe838, 0xe839, 0xe83a, 0xe83b, 0xe83c, 0xe83d, 0xe83e, 0xe83f,
+ 0xe840, 0xe841, 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, /* 0xe840 */
+ 0xe848, 0xe849, 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xe84f,
+ 0xe850, 0xe851, 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857,
+ 0xe858, 0xe859, 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f,
+ 0xe860, 0xe861, 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867,
+ 0xe868, 0xe869, 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f,
+ 0xe870, 0xe871, 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877,
+ 0xe878, 0xe879, 0xe87a, 0xe87b, 0xe87c, 0xe87d, 0xe87e, 0xe87f,
+ 0xe880, 0xe881, 0xe882, 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, /* 0xe880 */
+ 0xe888, 0xe889, 0xe88a, 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f,
+ 0xe890, 0xe891, 0xe892, 0xe893, 0xe894, 0xe895, 0xe896, 0xe897,
+ 0xe898, 0xe899, 0xe89a, 0xe89b, 0xe89c, 0xe89d, 0xe89e, 0xe89f,
+ 0xe8a0, 0xe8a1, 0xe8a2, 0xe8a3, 0xe8a4, 0xe8a5, 0xe8a6, 0xe8a7,
+ 0xe8a8, 0xe8a9, 0xe8aa, 0xe8ab, 0xe8ac, 0xe8ad, 0xe8ae, 0xe8af,
+ 0xe8b0, 0xe8b1, 0xe8b2, 0xe8b3, 0xe8b4, 0xe8b5, 0xe8b6, 0xe8b7,
+ 0xe8b8, 0xe8b9, 0xe8ba, 0xe8bb, 0xe8bc, 0xe8bd, 0xe8be, 0xe8bf,
+ 0xe8c0, 0xe8c1, 0xe8c2, 0xe8c3, 0xe8c4, 0xe8c5, 0xe8c6, 0xe8c7, /* 0xe8c0 */
+ 0xe8c8, 0xe8c9, 0xe8ca, 0xe8cb, 0xe8cc, 0xe8cd, 0xe8ce, 0xe8cf,
+ 0xe8d0, 0xe8d1, 0xe8d2, 0xe8d3, 0xe8d4, 0xe8d5, 0xe8d6, 0xe8d7,
+ 0xe8d8, 0xe8d9, 0xe8da, 0xe8db, 0xe8dc, 0xe8dd, 0xe8de, 0xe8df,
+ 0xe8e0, 0xe8e1, 0xe8e2, 0xe8e3, 0xe8e4, 0xe8e5, 0xe8e6, 0xe8e7,
+ 0xe8e8, 0xe8e9, 0xe8ea, 0xe8eb, 0xe8ec, 0xe8ed, 0xe8ee, 0xe8ef,
+ 0xe8f0, 0xe8f1, 0xe8f2, 0xe8f3, 0xe8f4, 0xe8f5, 0xe8f6, 0xe8f7,
+ 0xe8f8, 0xe8f9, 0xe8fa, 0xe8fb, 0xe8fc, 0xe8fd, 0xe8fe, 0xe8ff,
+ 0xe900, 0xe901, 0xe902, 0xe903, 0xe904, 0xe905, 0xe906, 0xe907, /* 0xe900 */
+ 0xe908, 0xe909, 0xe90a, 0xe90b, 0xe90c, 0xe90d, 0xe90e, 0xe90f,
+ 0xe910, 0xe911, 0xe912, 0xe913, 0xe914, 0xe915, 0xe916, 0xe917,
+ 0xe918, 0xe919, 0xe91a, 0xe91b, 0xe91c, 0xe91d, 0xe91e, 0xe91f,
+ 0xe920, 0xe921, 0xe922, 0xe923, 0xe924, 0xe925, 0xe926, 0xe927,
+ 0xe928, 0xe929, 0xe92a, 0xe92b, 0xe92c, 0xe92d, 0xe92e, 0xe92f,
+ 0xe930, 0xe931, 0xe932, 0xe933, 0xe934, 0xe935, 0xe936, 0xe937,
+ 0xe938, 0xe939, 0xe93a, 0xe93b, 0xe93c, 0xe93d, 0xe93e, 0xe93f,
+ 0xe940, 0xe941, 0xe942, 0xe943, 0xe944, 0xe945, 0xe946, 0xe947, /* 0xe940 */
+ 0xe948, 0xe949, 0xe94a, 0xe94b, 0xe94c, 0xe94d, 0xe94e, 0xe94f,
+ 0xe950, 0xe951, 0xe952, 0xe953, 0xe954, 0xe955, 0xe956, 0xe957,
+ 0xe958, 0xe959, 0xe95a, 0xe95b, 0xe95c, 0xe95d, 0xe95e, 0xe95f,
+ 0xe960, 0xe961, 0xe962, 0xe963, 0xe964, 0xe965, 0xe966, 0xe967,
+ 0xe968, 0xe969, 0xe96a, 0xe96b, 0xe96c, 0xe96d, 0xe96e, 0xe96f,
+ 0xe970, 0xe971, 0xe972, 0xe973, 0xe974, 0xe975, 0xe976, 0xe977,
+ 0xe978, 0xe979, 0xe97a, 0xe97b, 0xe97c, 0xe97d, 0xe97e, 0xe97f,
+ 0xe980, 0xe981, 0xe982, 0xe983, 0xe984, 0xe985, 0xe986, 0xe987, /* 0xe980 */
+ 0xe988, 0xe989, 0xe98a, 0xe98b, 0xe98c, 0xe98d, 0xe98e, 0xe98f,
+ 0xe990, 0xe991, 0xe992, 0xe993, 0xe994, 0xe995, 0xe996, 0xe997,
+ 0xe998, 0xe999, 0xe99a, 0xe99b, 0xe99c, 0xe99d, 0xe99e, 0xe99f,
+ 0xe9a0, 0xe9a1, 0xe9a2, 0xe9a3, 0xe9a4, 0xe9a5, 0xe9a6, 0xe9a7,
+ 0xe9a8, 0xe9a9, 0xe9aa, 0xe9ab, 0xe9ac, 0xe9ad, 0xe9ae, 0xe9af,
+ 0xe9b0, 0xe9b1, 0xe9b2, 0xe9b3, 0xe9b4, 0xe9b5, 0xe9b6, 0xe9b7,
+ 0xe9b8, 0xe9b9, 0xe9ba, 0xe9bb, 0xe9bc, 0xe9bd, 0xe9be, 0xe9bf,
+ 0xe9c0, 0xe9c1, 0xe9c2, 0xe9c3, 0xe9c4, 0xe9c5, 0xe9c6, 0xe9c7, /* 0xe9c0 */
+ 0xe9c8, 0xe9c9, 0xe9ca, 0xe9cb, 0xe9cc, 0xe9cd, 0xe9ce, 0xe9cf,
+ 0xe9d0, 0xe9d1, 0xe9d2, 0xe9d3, 0xe9d4, 0xe9d5, 0xe9d6, 0xe9d7,
+ 0xe9d8, 0xe9d9, 0xe9da, 0xe9db, 0xe9dc, 0xe9dd, 0xe9de, 0xe9df,
+ 0xe9e0, 0xe9e1, 0xe9e2, 0xe9e3, 0xe9e4, 0xe9e5, 0xe9e6, 0xe9e7,
+ 0xe9e8, 0xe9e9, 0xe9ea, 0xe9eb, 0xe9ec, 0xe9ed, 0xe9ee, 0xe9ef,
+ 0xe9f0, 0xe9f1, 0xe9f2, 0xe9f3, 0xe9f4, 0xe9f5, 0xe9f6, 0xe9f7,
+ 0xe9f8, 0xe9f9, 0xe9fa, 0xe9fb, 0xe9fc, 0xe9fd, 0xe9fe, 0xe9ff,
+ 0xea00, 0xea01, 0xea02, 0xea03, 0xea04, 0xea05, 0xea06, 0xea07, /* 0xea00 */
+ 0xea08, 0xea09, 0xea0a, 0xea0b, 0xea0c, 0xea0d, 0xea0e, 0xea0f,
+ 0xea10, 0xea11, 0xea12, 0xea13, 0xea14, 0xea15, 0xea16, 0xea17,
+ 0xea18, 0xea19, 0xea1a, 0xea1b, 0xea1c, 0xea1d, 0xea1e, 0xea1f,
+ 0xea20, 0xea21, 0xea22, 0xea23, 0xea24, 0xea25, 0xea26, 0xea27,
+ 0xea28, 0xea29, 0xea2a, 0xea2b, 0xea2c, 0xea2d, 0xea2e, 0xea2f,
+ 0xea30, 0xea31, 0xea32, 0xea33, 0xea34, 0xea35, 0xea36, 0xea37,
+ 0xea38, 0xea39, 0xea3a, 0xea3b, 0xea3c, 0xea3d, 0xea3e, 0xea3f,
+ 0xea40, 0xea41, 0xea42, 0xea43, 0xea44, 0xea45, 0xea46, 0xea47, /* 0xea40 */
+ 0xea48, 0xea49, 0xea4a, 0xea4b, 0xea4c, 0xea4d, 0xea4e, 0xea4f,
+ 0xea50, 0xea51, 0xea52, 0xea53, 0xea54, 0xea55, 0xea56, 0xea57,
+ 0xea58, 0xea59, 0xea5a, 0xea5b, 0xea5c, 0xea5d, 0xea5e, 0xea5f,
+ 0xea60, 0xea61, 0xea62, 0xea63, 0xea64, 0xea65, 0xea66, 0xea67,
+ 0xea68, 0xea69, 0xea6a, 0xea6b, 0xea6c, 0xea6d, 0xea6e, 0xea6f,
+ 0xea70, 0xea71, 0xea72, 0xea73, 0xea74, 0xea75, 0xea76, 0xea77,
+ 0xea78, 0xea79, 0xea7a, 0xea7b, 0xea7c, 0xea7d, 0xea7e, 0xea7f,
+ 0xea80, 0xea81, 0xea82, 0xea83, 0xea84, 0xea85, 0xea86, 0xea87, /* 0xea80 */
+ 0xea88, 0xea89, 0xea8a, 0xea8b, 0xea8c, 0xea8d, 0xea8e, 0xea8f,
+ 0xea90, 0xea91, 0xea92, 0xea93, 0xea94, 0xea95, 0xea96, 0xea97,
+ 0xea98, 0xea99, 0xea9a, 0xea9b, 0xea9c, 0xea9d, 0xea9e, 0xea9f,
+ 0xeaa0, 0xeaa1, 0xeaa2, 0xeaa3, 0xeaa4, 0xeaa5, 0xeaa6, 0xeaa7,
+ 0xeaa8, 0xeaa9, 0xeaaa, 0xeaab, 0xeaac, 0xeaad, 0xeaae, 0xeaaf,
+ 0xeab0, 0xeab1, 0xeab2, 0xeab3, 0xeab4, 0xeab5, 0xeab6, 0xeab7,
+ 0xeab8, 0xeab9, 0xeaba, 0xeabb, 0xeabc, 0xeabd, 0xeabe, 0xeabf,
+ 0xeac0, 0xeac1, 0xeac2, 0xeac3, 0xeac4, 0xeac5, 0xeac6, 0xeac7, /* 0xeac0 */
+ 0xeac8, 0xeac9, 0xeaca, 0xeacb, 0xeacc, 0xeacd, 0xeace, 0xeacf,
+ 0xead0, 0xead1, 0xead2, 0xead3, 0xead4, 0xead5, 0xead6, 0xead7,
+ 0xead8, 0xead9, 0xeada, 0xeadb, 0xeadc, 0xeadd, 0xeade, 0xeadf,
+ 0xeae0, 0xeae1, 0xeae2, 0xeae3, 0xeae4, 0xeae5, 0xeae6, 0xeae7,
+ 0xeae8, 0xeae9, 0xeaea, 0xeaeb, 0xeaec, 0xeaed, 0xeaee, 0xeaef,
+ 0xeaf0, 0xeaf1, 0xeaf2, 0xeaf3, 0xeaf4, 0xeaf5, 0xeaf6, 0xeaf7,
+ 0xeaf8, 0xeaf9, 0xeafa, 0xeafb, 0xeafc, 0xeafd, 0xeafe, 0xeaff,
+ 0xeb00, 0xeb01, 0xeb02, 0xeb03, 0xeb04, 0xeb05, 0xeb06, 0xeb07, /* 0xeb00 */
+ 0xeb08, 0xeb09, 0xeb0a, 0xeb0b, 0xeb0c, 0xeb0d, 0xeb0e, 0xeb0f,
+ 0xeb10, 0xeb11, 0xeb12, 0xeb13, 0xeb14, 0xeb15, 0xeb16, 0xeb17,
+ 0xeb18, 0xeb19, 0xeb1a, 0xeb1b, 0xeb1c, 0xeb1d, 0xeb1e, 0xeb1f,
+ 0xeb20, 0xeb21, 0xeb22, 0xeb23, 0xeb24, 0xeb25, 0xeb26, 0xeb27,
+ 0xeb28, 0xeb29, 0xeb2a, 0xeb2b, 0xeb2c, 0xeb2d, 0xeb2e, 0xeb2f,
+ 0xeb30, 0xeb31, 0xeb32, 0xeb33, 0xeb34, 0xeb35, 0xeb36, 0xeb37,
+ 0xeb38, 0xeb39, 0xeb3a, 0xeb3b, 0xeb3c, 0xeb3d, 0xeb3e, 0xeb3f,
+ 0xeb40, 0xeb41, 0xeb42, 0xeb43, 0xeb44, 0xeb45, 0xeb46, 0xeb47, /* 0xeb40 */
+ 0xeb48, 0xeb49, 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f,
+ 0xeb50, 0xeb51, 0xeb52, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57,
+ 0xeb58, 0xeb59, 0xeb5a, 0xeb5b, 0xeb5c, 0xeb5d, 0xeb5e, 0xeb5f,
+ 0xeb60, 0xeb61, 0xeb62, 0xeb63, 0xeb64, 0xeb65, 0xeb66, 0xeb67,
+ 0xeb68, 0xeb69, 0xeb6a, 0xeb6b, 0xeb6c, 0xeb6d, 0xeb6e, 0xeb6f,
+ 0xeb70, 0xeb71, 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, 0xeb77,
+ 0xeb78, 0xeb79, 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, 0xeb7e, 0xeb7f,
+ 0xeb80, 0xeb81, 0xeb82, 0xeb83, 0xeb84, 0xeb85, 0xeb86, 0xeb87, /* 0xeb80 */
+ 0xeb88, 0xeb89, 0xeb8a, 0xeb8b, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f,
+ 0xeb90, 0xeb91, 0xeb92, 0xeb93, 0xeb94, 0xeb95, 0xeb96, 0xeb97,
+ 0xeb98, 0xeb99, 0xeb9a, 0xeb9b, 0xeb9c, 0xeb9d, 0xeb9e, 0xeb9f,
+ 0xeba0, 0xeba1, 0xeba2, 0xeba3, 0xeba4, 0xeba5, 0xeba6, 0xeba7,
+ 0xeba8, 0xeba9, 0xebaa, 0xebab, 0xebac, 0xebad, 0xebae, 0xebaf,
+ 0xebb0, 0xebb1, 0xebb2, 0xebb3, 0xebb4, 0xebb5, 0xebb6, 0xebb7,
+ 0xebb8, 0xebb9, 0xebba, 0xebbb, 0xebbc, 0xebbd, 0xebbe, 0xebbf,
+ 0xebc0, 0xebc1, 0xebc2, 0xebc3, 0xebc4, 0xebc5, 0xebc6, 0xebc7, /* 0xebc0 */
+ 0xebc8, 0xebc9, 0xebca, 0xebcb, 0xebcc, 0xebcd, 0xebce, 0xebcf,
+ 0xebd0, 0xebd1, 0xebd2, 0xebd3, 0xebd4, 0xebd5, 0xebd6, 0xebd7,
+ 0xebd8, 0xebd9, 0xebda, 0xebdb, 0xebdc, 0xebdd, 0xebde, 0xebdf,
+ 0xebe0, 0xebe1, 0xebe2, 0xebe3, 0xebe4, 0xebe5, 0xebe6, 0xebe7,
+ 0xebe8, 0xebe9, 0xebea, 0xebeb, 0xebec, 0xebed, 0xebee, 0xebef,
+ 0xebf0, 0xebf1, 0xebf2, 0xebf3, 0xebf4, 0xebf5, 0xebf6, 0xebf7,
+ 0xebf8, 0xebf9, 0xebfa, 0xebfb, 0xebfc, 0xebfd, 0xebfe, 0xebff,
+ 0xec00, 0xec01, 0xec02, 0xec03, 0xec04, 0xec05, 0xec06, 0xec07, /* 0xec00 */
+ 0xec08, 0xec09, 0xec0a, 0xec0b, 0xec0c, 0xec0d, 0xec0e, 0xec0f,
+ 0xec10, 0xec11, 0xec12, 0xec13, 0xec14, 0xec15, 0xec16, 0xec17,
+ 0xec18, 0xec19, 0xec1a, 0xec1b, 0xec1c, 0xec1d, 0xec1e, 0xec1f,
+ 0xec20, 0xec21, 0xec22, 0xec23, 0xec24, 0xec25, 0xec26, 0xec27,
+ 0xec28, 0xec29, 0xec2a, 0xec2b, 0xec2c, 0xec2d, 0xec2e, 0xec2f,
+ 0xec30, 0xec31, 0xec32, 0xec33, 0xec34, 0xec35, 0xec36, 0xec37,
+ 0xec38, 0xec39, 0xec3a, 0xec3b, 0xec3c, 0xec3d, 0xec3e, 0xec3f,
+ 0xec40, 0xec41, 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, 0xec47, /* 0xec40 */
+ 0xec48, 0xec49, 0xec4a, 0xec4b, 0xec4c, 0xec4d, 0xec4e, 0xec4f,
+ 0xec50, 0xec51, 0xec52, 0xec53, 0xec54, 0xec55, 0xec56, 0xec57,
+ 0xec58, 0xec59, 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f,
+ 0xec60, 0xec61, 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67,
+ 0xec68, 0xec69, 0xec6a, 0xec6b, 0xec6c, 0xec6d, 0xec6e, 0xec6f,
+ 0xec70, 0xec71, 0xec72, 0xec73, 0xec74, 0xec75, 0xec76, 0xec77,
+ 0xec78, 0xec79, 0xec7a, 0xec7b, 0xec7c, 0xec7d, 0xec7e, 0xec7f,
+ 0xec80, 0xec81, 0xec82, 0xec83, 0xec84, 0xec85, 0xec86, 0xec87, /* 0xec80 */
+ 0xec88, 0xec89, 0xec8a, 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xec8f,
+ 0xec90, 0xec91, 0xec92, 0xec93, 0xec94, 0xec95, 0xec96, 0xec97,
+ 0xec98, 0xec99, 0xec9a, 0xec9b, 0xec9c, 0xec9d, 0xec9e, 0xec9f,
+ 0xeca0, 0xeca1, 0xeca2, 0xeca3, 0xeca4, 0xeca5, 0xeca6, 0xeca7,
+ 0xeca8, 0xeca9, 0xecaa, 0xecab, 0xecac, 0xecad, 0xecae, 0xecaf,
+ 0xecb0, 0xecb1, 0xecb2, 0xecb3, 0xecb4, 0xecb5, 0xecb6, 0xecb7,
+ 0xecb8, 0xecb9, 0xecba, 0xecbb, 0xecbc, 0xecbd, 0xecbe, 0xecbf,
+ 0xecc0, 0xecc1, 0xecc2, 0xecc3, 0xecc4, 0xecc5, 0xecc6, 0xecc7, /* 0xecc0 */
+ 0xecc8, 0xecc9, 0xecca, 0xeccb, 0xeccc, 0xeccd, 0xecce, 0xeccf,
+ 0xecd0, 0xecd1, 0xecd2, 0xecd3, 0xecd4, 0xecd5, 0xecd6, 0xecd7,
+ 0xecd8, 0xecd9, 0xecda, 0xecdb, 0xecdc, 0xecdd, 0xecde, 0xecdf,
+ 0xece0, 0xece1, 0xece2, 0xece3, 0xece4, 0xece5, 0xece6, 0xece7,
+ 0xece8, 0xece9, 0xecea, 0xeceb, 0xecec, 0xeced, 0xecee, 0xecef,
+ 0xecf0, 0xecf1, 0xecf2, 0xecf3, 0xecf4, 0xecf5, 0xecf6, 0xecf7,
+ 0xecf8, 0xecf9, 0xecfa, 0xecfb, 0xecfc, 0xecfd, 0xecfe, 0xecff,
+ 0xed00, 0xed01, 0xed02, 0xed03, 0xed04, 0xed05, 0xed06, 0xed07, /* 0xed00 */
+ 0xed08, 0xed09, 0xed0a, 0xed0b, 0xed0c, 0xed0d, 0xed0e, 0xed0f,
+ 0xed10, 0xed11, 0xed12, 0xed13, 0xed14, 0xed15, 0xed16, 0xed17,
+ 0xed18, 0xed19, 0xed1a, 0xed1b, 0xed1c, 0xed1d, 0xed1e, 0xed1f,
+ 0xed20, 0xed21, 0xed22, 0xed23, 0xed24, 0xed25, 0xed26, 0xed27,
+ 0xed28, 0xed29, 0xed2a, 0xed2b, 0xed2c, 0xed2d, 0xed2e, 0xed2f,
+ 0xed30, 0xed31, 0xed32, 0xed33, 0xed34, 0xed35, 0xed36, 0xed37,
+ 0xed38, 0xed39, 0xed3a, 0xed3b, 0xed3c, 0xed3d, 0xed3e, 0xed3f,
+ 0xed40, 0xed41, 0xed42, 0xed43, 0xed44, 0xed45, 0xed46, 0xed47, /* 0xed40 */
+ 0xed48, 0xed49, 0xed4a, 0xed4b, 0xed4c, 0xed4d, 0xed4e, 0xed4f,
+ 0xed50, 0xed51, 0xed52, 0xed53, 0xed54, 0xed55, 0xed56, 0xed57,
+ 0xed58, 0xed59, 0xed5a, 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f,
+ 0xed60, 0xed61, 0xed62, 0xed63, 0xed64, 0xed65, 0xed66, 0xed67,
+ 0xed68, 0xed69, 0xed6a, 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f,
+ 0xed70, 0xed71, 0xed72, 0xed73, 0xed74, 0xed75, 0xed76, 0xed77,
+ 0xed78, 0xed79, 0xed7a, 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed7f,
+ 0xed80, 0xed81, 0xed82, 0xed83, 0xed84, 0xed85, 0xed86, 0xed87, /* 0xed80 */
+ 0xed88, 0xed89, 0xed8a, 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f,
+ 0xed90, 0xed91, 0xed92, 0xed93, 0xed94, 0xed95, 0xed96, 0xed97,
+ 0xed98, 0xed99, 0xed9a, 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f,
+ 0xeda0, 0xeda1, 0xeda2, 0xeda3, 0xeda4, 0xeda5, 0xeda6, 0xeda7,
+ 0xeda8, 0xeda9, 0xedaa, 0xedab, 0xedac, 0xedad, 0xedae, 0xedaf,
+ 0xedb0, 0xedb1, 0xedb2, 0xedb3, 0xedb4, 0xedb5, 0xedb6, 0xedb7,
+ 0xedb8, 0xedb9, 0xedba, 0xedbb, 0xedbc, 0xedbd, 0xedbe, 0xedbf,
+ 0xedc0, 0xedc1, 0xedc2, 0xedc3, 0xedc4, 0xedc5, 0xedc6, 0xedc7, /* 0xedc0 */
+ 0xedc8, 0xedc9, 0xedca, 0xedcb, 0xedcc, 0xedcd, 0xedce, 0xedcf,
+ 0xedd0, 0xedd1, 0xedd2, 0xedd3, 0xedd4, 0xedd5, 0xedd6, 0xedd7,
+ 0xedd8, 0xedd9, 0xedda, 0xeddb, 0xeddc, 0xeddd, 0xedde, 0xeddf,
+ 0xede0, 0xede1, 0xede2, 0xede3, 0xede4, 0xede5, 0xede6, 0xede7,
+ 0xede8, 0xede9, 0xedea, 0xedeb, 0xedec, 0xeded, 0xedee, 0xedef,
+ 0xedf0, 0xedf1, 0xedf2, 0xedf3, 0xedf4, 0xedf5, 0xedf6, 0xedf7,
+ 0xedf8, 0xedf9, 0xedfa, 0xedfb, 0xedfc, 0xedfd, 0xedfe, 0xedff,
+ 0xee00, 0xee01, 0xee02, 0xee03, 0xee04, 0xee05, 0xee06, 0xee07, /* 0xee00 */
+ 0xee08, 0xee09, 0xee0a, 0xee0b, 0xee0c, 0xee0d, 0xee0e, 0xee0f,
+ 0xee10, 0xee11, 0xee12, 0xee13, 0xee14, 0xee15, 0xee16, 0xee17,
+ 0xee18, 0xee19, 0xee1a, 0xee1b, 0xee1c, 0xee1d, 0xee1e, 0xee1f,
+ 0xee20, 0xee21, 0xee22, 0xee23, 0xee24, 0xee25, 0xee26, 0xee27,
+ 0xee28, 0xee29, 0xee2a, 0xee2b, 0xee2c, 0xee2d, 0xee2e, 0xee2f,
+ 0xee30, 0xee31, 0xee32, 0xee33, 0xee34, 0xee35, 0xee36, 0xee37,
+ 0xee38, 0xee39, 0xee3a, 0xee3b, 0xee3c, 0xee3d, 0xee3e, 0xee3f,
+ 0xee40, 0xee41, 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, /* 0xee40 */
+ 0xee48, 0xee49, 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f,
+ 0xee50, 0xee51, 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57,
+ 0xee58, 0xee59, 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f,
+ 0xee60, 0xee61, 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67,
+ 0xee68, 0xee69, 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f,
+ 0xee70, 0xee71, 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77,
+ 0xee78, 0xee79, 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee7f,
+ 0xee80, 0xee81, 0xee82, 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, /* 0xee80 */
+ 0xee88, 0xee89, 0xee8a, 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f,
+ 0xee90, 0xee91, 0xee92, 0xee93, 0xee94, 0xee95, 0xee96, 0xee97,
+ 0xee98, 0xee99, 0xee9a, 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f,
+ 0xeea0, 0xeea1, 0xeea2, 0xeea3, 0xeea4, 0xeea5, 0xeea6, 0xeea7,
+ 0xeea8, 0xeea9, 0xeeaa, 0xeeab, 0xeeac, 0xeead, 0xeeae, 0xeeaf,
+ 0xeeb0, 0xeeb1, 0xeeb2, 0xeeb3, 0xeeb4, 0xeeb5, 0xeeb6, 0xeeb7,
+ 0xeeb8, 0xeeb9, 0xeeba, 0xeebb, 0xeebc, 0xeebd, 0xeebe, 0xeebf,
+ 0xeec0, 0xeec1, 0xeec2, 0xeec3, 0xeec4, 0xeec5, 0xeec6, 0xeec7, /* 0xeec0 */
+ 0xeec8, 0xeec9, 0xeeca, 0xeecb, 0xeecc, 0xeecd, 0xeece, 0xeecf,
+ 0xeed0, 0xeed1, 0xeed2, 0xeed3, 0xeed4, 0xeed5, 0xeed6, 0xeed7,
+ 0xeed8, 0xeed9, 0xeeda, 0xeedb, 0xeedc, 0xeedd, 0xeede, 0xeedf,
+ 0xeee0, 0xeee1, 0xeee2, 0xeee3, 0xeee4, 0xeee5, 0xeee6, 0xeee7,
+ 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xeeed, 0xeeee, 0xeeef,
+ 0xeef0, 0xeef1, 0xeef2, 0xeef3, 0xeef4, 0xeef5, 0xeef6, 0xeef7,
+ 0xeef8, 0xeef9, 0xeefa, 0xeefb, 0xeefc, 0xeefd, 0xeefe, 0xeeff,
+ 0xef00, 0xef01, 0xef02, 0xef03, 0xef04, 0xef05, 0xef06, 0xef07, /* 0xef00 */
+ 0xef08, 0xef09, 0xef0a, 0xef0b, 0xef0c, 0xef0d, 0xef0e, 0xef0f,
+ 0xef10, 0xef11, 0xef12, 0xef13, 0xef14, 0xef15, 0xef16, 0xef17,
+ 0xef18, 0xef19, 0xef1a, 0xef1b, 0xef1c, 0xef1d, 0xef1e, 0xef1f,
+ 0xef20, 0xef21, 0xef22, 0xef23, 0xef24, 0xef25, 0xef26, 0xef27,
+ 0xef28, 0xef29, 0xef2a, 0xef2b, 0xef2c, 0xef2d, 0xef2e, 0xef2f,
+ 0xef30, 0xef31, 0xef32, 0xef33, 0xef34, 0xef35, 0xef36, 0xef37,
+ 0xef38, 0xef39, 0xef3a, 0xef3b, 0xef3c, 0xef3d, 0xef3e, 0xef3f,
+ 0xef40, 0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xef46, 0xef47, /* 0xef40 */
+ 0xef48, 0xef49, 0xef4a, 0xef4b, 0xef4c, 0xef4d, 0xef4e, 0xef4f,
+ 0xef50, 0xef51, 0xef52, 0xef53, 0xef54, 0xef55, 0xef56, 0xef57,
+ 0xef58, 0xef59, 0xef5a, 0xef5b, 0xef5c, 0xef5d, 0xef5e, 0xef5f,
+ 0xef60, 0xef61, 0xef62, 0xef63, 0xef64, 0xef65, 0xef66, 0xef67,
+ 0xef68, 0xef69, 0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0xef6f,
+ 0xef70, 0xef71, 0xef72, 0xef73, 0xef74, 0xef75, 0xef76, 0xef77,
+ 0xef78, 0xef79, 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef7f,
+ 0xef80, 0xef81, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, /* 0xef80 */
+ 0xef88, 0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f,
+ 0xef90, 0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97,
+ 0xef98, 0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f,
+ 0xefa0, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefa5, 0xefa6, 0xefa7,
+ 0xefa8, 0xefa9, 0xefaa, 0xefab, 0xefac, 0xefad, 0xefae, 0xefaf,
+ 0xefb0, 0xefb1, 0xefb2, 0xefb3, 0xefb4, 0xefb5, 0xefb6, 0xefb7,
+ 0xefb8, 0xefb9, 0xefba, 0xefbb, 0xefbc, 0xefbd, 0xefbe, 0xefbf,
+ 0xefc0, 0xefc1, 0xefc2, 0xefc3, 0xefc4, 0xefc5, 0xefc6, 0xefc7, /* 0xefc0 */
+ 0xefc8, 0xefc9, 0xefca, 0xefcb, 0xefcc, 0xefcd, 0xefce, 0xefcf,
+ 0xefd0, 0xefd1, 0xefd2, 0xefd3, 0xefd4, 0xefd5, 0xefd6, 0xefd7,
+ 0xefd8, 0xefd9, 0xefda, 0xefdb, 0xefdc, 0xefdd, 0xefde, 0xefdf,
+ 0xefe0, 0xefe1, 0xefe2, 0xefe3, 0xefe4, 0xefe5, 0xefe6, 0xefe7,
+ 0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xefed, 0xefee, 0xefef,
+ 0xeff0, 0xeff1, 0xeff2, 0xeff3, 0xeff4, 0xeff5, 0xeff6, 0xeff7,
+ 0xeff8, 0xeff9, 0xeffa, 0xeffb, 0xeffc, 0xeffd, 0xeffe, 0xefff,
+ 0xf000, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007, /* 0xf000 */
+ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+ 0xf018, 0xf019, 0xf01a, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f,
+ 0xf020, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027,
+ 0xf028, 0xf029, 0xf02a, 0xf02b, 0xf02c, 0xf02d, 0xf02e, 0xf02f,
+ 0xf030, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
+ 0xf038, 0xf039, 0xf03a, 0xf03b, 0xf03c, 0xf03d, 0xf03e, 0xf03f,
+ 0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047, /* 0xf040 */
+ 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f,
+ 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057,
+ 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f,
+ 0xf060, 0xf061, 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067,
+ 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f,
+ 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077,
+ 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf07f,
+ 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, 0xf086, 0xf087, /* 0xf080 */
+ 0xf088, 0xf089, 0xf08a, 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f,
+ 0xf090, 0xf091, 0xf092, 0xf093, 0xf094, 0xf095, 0xf096, 0xf097,
+ 0xf098, 0xf099, 0xf09a, 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f,
+ 0xf0a0, 0xf0a1, 0xf0a2, 0xf0a3, 0xf0a4, 0xf0a5, 0xf0a6, 0xf0a7,
+ 0xf0a8, 0xf0a9, 0xf0aa, 0xf0ab, 0xf0ac, 0xf0ad, 0xf0ae, 0xf0af,
+ 0xf0b0, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xf0b6, 0xf0b7,
+ 0xf0b8, 0xf0b9, 0xf0ba, 0xf0bb, 0xf0bc, 0xf0bd, 0xf0be, 0xf0bf,
+ 0xf0c0, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xf0c5, 0xf0c6, 0xf0c7, /* 0xf0c0 */
+ 0xf0c8, 0xf0c9, 0xf0ca, 0xf0cb, 0xf0cc, 0xf0cd, 0xf0ce, 0xf0cf,
+ 0xf0d0, 0xf0d1, 0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d7,
+ 0xf0d8, 0xf0d9, 0xf0da, 0xf0db, 0xf0dc, 0xf0dd, 0xf0de, 0xf0df,
+ 0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4, 0xf0e5, 0xf0e6, 0xf0e7,
+ 0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec, 0xf0ed, 0xf0ee, 0xf0ef,
+ 0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4, 0xf0f5, 0xf0f6, 0xf0f7,
+ 0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc, 0xf0fd, 0xf0fe, 0xf0ff,
+ 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, 0xf107, /* 0xf100 */
+ 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, 0xf10f,
+ 0xf110, 0xf111, 0xf112, 0xf113, 0xf114, 0xf115, 0xf116, 0xf117,
+ 0xf118, 0xf119, 0xf11a, 0xf11b, 0xf11c, 0xf11d, 0xf11e, 0xf11f,
+ 0xf120, 0xf121, 0xf122, 0xf123, 0xf124, 0xf125, 0xf126, 0xf127,
+ 0xf128, 0xf129, 0xf12a, 0xf12b, 0xf12c, 0xf12d, 0xf12e, 0xf12f,
+ 0xf130, 0xf131, 0xf132, 0xf133, 0xf134, 0xf135, 0xf136, 0xf137,
+ 0xf138, 0xf139, 0xf13a, 0xf13b, 0xf13c, 0xf13d, 0xf13e, 0xf13f,
+ 0xf140, 0xf141, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, /* 0xf140 */
+ 0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf14d, 0xf14e, 0xf14f,
+ 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, 0xf156, 0xf157,
+ 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, 0xf15e, 0xf15f,
+ 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, 0xf166, 0xf167,
+ 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f,
+ 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177,
+ 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf17f,
+ 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, 0xf187, /* 0xf180 */
+ 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f,
+ 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, 0xf197,
+ 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f,
+ 0xf1a0, 0xf1a1, 0xf1a2, 0xf1a3, 0xf1a4, 0xf1a5, 0xf1a6, 0xf1a7,
+ 0xf1a8, 0xf1a9, 0xf1aa, 0xf1ab, 0xf1ac, 0xf1ad, 0xf1ae, 0xf1af,
+ 0xf1b0, 0xf1b1, 0xf1b2, 0xf1b3, 0xf1b4, 0xf1b5, 0xf1b6, 0xf1b7,
+ 0xf1b8, 0xf1b9, 0xf1ba, 0xf1bb, 0xf1bc, 0xf1bd, 0xf1be, 0xf1bf,
+ 0xf1c0, 0xf1c1, 0xf1c2, 0xf1c3, 0xf1c4, 0xf1c5, 0xf1c6, 0xf1c7, /* 0xf1c0 */
+ 0xf1c8, 0xf1c9, 0xf1ca, 0xf1cb, 0xf1cc, 0xf1cd, 0xf1ce, 0xf1cf,
+ 0xf1d0, 0xf1d1, 0xf1d2, 0xf1d3, 0xf1d4, 0xf1d5, 0xf1d6, 0xf1d7,
+ 0xf1d8, 0xf1d9, 0xf1da, 0xf1db, 0xf1dc, 0xf1dd, 0xf1de, 0xf1df,
+ 0xf1e0, 0xf1e1, 0xf1e2, 0xf1e3, 0xf1e4, 0xf1e5, 0xf1e6, 0xf1e7,
+ 0xf1e8, 0xf1e9, 0xf1ea, 0xf1eb, 0xf1ec, 0xf1ed, 0xf1ee, 0xf1ef,
+ 0xf1f0, 0xf1f1, 0xf1f2, 0xf1f3, 0xf1f4, 0xf1f5, 0xf1f6, 0xf1f7,
+ 0xf1f8, 0xf1f9, 0xf1fa, 0xf1fb, 0xf1fc, 0xf1fd, 0xf1fe, 0xf1ff,
+ 0xf200, 0xf201, 0xf202, 0xf203, 0xf204, 0xf205, 0xf206, 0xf207, /* 0xf200 */
+ 0xf208, 0xf209, 0xf20a, 0xf20b, 0xf20c, 0xf20d, 0xf20e, 0xf20f,
+ 0xf210, 0xf211, 0xf212, 0xf213, 0xf214, 0xf215, 0xf216, 0xf217,
+ 0xf218, 0xf219, 0xf21a, 0xf21b, 0xf21c, 0xf21d, 0xf21e, 0xf21f,
+ 0xf220, 0xf221, 0xf222, 0xf223, 0xf224, 0xf225, 0xf226, 0xf227,
+ 0xf228, 0xf229, 0xf22a, 0xf22b, 0xf22c, 0xf22d, 0xf22e, 0xf22f,
+ 0xf230, 0xf231, 0xf232, 0xf233, 0xf234, 0xf235, 0xf236, 0xf237,
+ 0xf238, 0xf239, 0xf23a, 0xf23b, 0xf23c, 0xf23d, 0xf23e, 0xf23f,
+ 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, 0xf246, 0xf247, /* 0xf240 */
+ 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e, 0xf24f,
+ 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, 0xf256, 0xf257,
+ 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e, 0xf25f,
+ 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, 0xf266, 0xf267,
+ 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, 0xf26e, 0xf26f,
+ 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, 0xf276, 0xf277,
+ 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, 0xf27e, 0xf27f,
+ 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, 0xf287, /* 0xf280 */
+ 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, 0xf28f,
+ 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, 0xf297,
+ 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, 0xf29f,
+ 0xf2a0, 0xf2a1, 0xf2a2, 0xf2a3, 0xf2a4, 0xf2a5, 0xf2a6, 0xf2a7,
+ 0xf2a8, 0xf2a9, 0xf2aa, 0xf2ab, 0xf2ac, 0xf2ad, 0xf2ae, 0xf2af,
+ 0xf2b0, 0xf2b1, 0xf2b2, 0xf2b3, 0xf2b4, 0xf2b5, 0xf2b6, 0xf2b7,
+ 0xf2b8, 0xf2b9, 0xf2ba, 0xf2bb, 0xf2bc, 0xf2bd, 0xf2be, 0xf2bf,
+ 0xf2c0, 0xf2c1, 0xf2c2, 0xf2c3, 0xf2c4, 0xf2c5, 0xf2c6, 0xf2c7, /* 0xf2c0 */
+ 0xf2c8, 0xf2c9, 0xf2ca, 0xf2cb, 0xf2cc, 0xf2cd, 0xf2ce, 0xf2cf,
+ 0xf2d0, 0xf2d1, 0xf2d2, 0xf2d3, 0xf2d4, 0xf2d5, 0xf2d6, 0xf2d7,
+ 0xf2d8, 0xf2d9, 0xf2da, 0xf2db, 0xf2dc, 0xf2dd, 0xf2de, 0xf2df,
+ 0xf2e0, 0xf2e1, 0xf2e2, 0xf2e3, 0xf2e4, 0xf2e5, 0xf2e6, 0xf2e7,
+ 0xf2e8, 0xf2e9, 0xf2ea, 0xf2eb, 0xf2ec, 0xf2ed, 0xf2ee, 0xf2ef,
+ 0xf2f0, 0xf2f1, 0xf2f2, 0xf2f3, 0xf2f4, 0xf2f5, 0xf2f6, 0xf2f7,
+ 0xf2f8, 0xf2f9, 0xf2fa, 0xf2fb, 0xf2fc, 0xf2fd, 0xf2fe, 0xf2ff,
+ 0xf300, 0xf301, 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, /* 0xf300 */
+ 0xf308, 0xf309, 0xf30a, 0xf30b, 0xf30c, 0xf30d, 0xf30e, 0xf30f,
+ 0xf310, 0xf311, 0xf312, 0xf313, 0xf314, 0xf315, 0xf316, 0xf317,
+ 0xf318, 0xf319, 0xf31a, 0xf31b, 0xf31c, 0xf31d, 0xf31e, 0xf31f,
+ 0xf320, 0xf321, 0xf322, 0xf323, 0xf324, 0xf325, 0xf326, 0xf327,
+ 0xf328, 0xf329, 0xf32a, 0xf32b, 0xf32c, 0xf32d, 0xf32e, 0xf32f,
+ 0xf330, 0xf331, 0xf332, 0xf333, 0xf334, 0xf335, 0xf336, 0xf337,
+ 0xf338, 0xf339, 0xf33a, 0xf33b, 0xf33c, 0xf33d, 0xf33e, 0xf33f,
+ 0xf340, 0xf341, 0xf342, 0xf343, 0xf344, 0xf345, 0xf346, 0xf347, /* 0xf340 */
+ 0xf348, 0xf349, 0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f,
+ 0xf350, 0xf351, 0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357,
+ 0xf358, 0xf359, 0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f,
+ 0xf360, 0xf361, 0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367,
+ 0xf368, 0xf369, 0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f,
+ 0xf370, 0xf371, 0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377,
+ 0xf378, 0xf379, 0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf37f,
+ 0xf380, 0xf381, 0xf382, 0xf383, 0xf384, 0xf385, 0xf386, 0xf387, /* 0xf380 */
+ 0xf388, 0xf389, 0xf38a, 0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f,
+ 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, 0xf395, 0xf396, 0xf397,
+ 0xf398, 0xf399, 0xf39a, 0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f,
+ 0xf3a0, 0xf3a1, 0xf3a2, 0xf3a3, 0xf3a4, 0xf3a5, 0xf3a6, 0xf3a7,
+ 0xf3a8, 0xf3a9, 0xf3aa, 0xf3ab, 0xf3ac, 0xf3ad, 0xf3ae, 0xf3af,
+ 0xf3b0, 0xf3b1, 0xf3b2, 0xf3b3, 0xf3b4, 0xf3b5, 0xf3b6, 0xf3b7,
+ 0xf3b8, 0xf3b9, 0xf3ba, 0xf3bb, 0xf3bc, 0xf3bd, 0xf3be, 0xf3bf,
+ 0xf3c0, 0xf3c1, 0xf3c2, 0xf3c3, 0xf3c4, 0xf3c5, 0xf3c6, 0xf3c7, /* 0xf3c0 */
+ 0xf3c8, 0xf3c9, 0xf3ca, 0xf3cb, 0xf3cc, 0xf3cd, 0xf3ce, 0xf3cf,
+ 0xf3d0, 0xf3d1, 0xf3d2, 0xf3d3, 0xf3d4, 0xf3d5, 0xf3d6, 0xf3d7,
+ 0xf3d8, 0xf3d9, 0xf3da, 0xf3db, 0xf3dc, 0xf3dd, 0xf3de, 0xf3df,
+ 0xf3e0, 0xf3e1, 0xf3e2, 0xf3e3, 0xf3e4, 0xf3e5, 0xf3e6, 0xf3e7,
+ 0xf3e8, 0xf3e9, 0xf3ea, 0xf3eb, 0xf3ec, 0xf3ed, 0xf3ee, 0xf3ef,
+ 0xf3f0, 0xf3f1, 0xf3f2, 0xf3f3, 0xf3f4, 0xf3f5, 0xf3f6, 0xf3f7,
+ 0xf3f8, 0xf3f9, 0xf3fa, 0xf3fb, 0xf3fc, 0xf3fd, 0xf3fe, 0xf3ff,
+ 0xf400, 0xf401, 0xf402, 0xf403, 0xf404, 0xf405, 0xf406, 0xf407, /* 0xf400 */
+ 0xf408, 0xf409, 0xf40a, 0xf40b, 0xf40c, 0xf40d, 0xf40e, 0xf40f,
+ 0xf410, 0xf411, 0xf412, 0xf413, 0xf414, 0xf415, 0xf416, 0xf417,
+ 0xf418, 0xf419, 0xf41a, 0xf41b, 0xf41c, 0xf41d, 0xf41e, 0xf41f,
+ 0xf420, 0xf421, 0xf422, 0xf423, 0xf424, 0xf425, 0xf426, 0xf427,
+ 0xf428, 0xf429, 0xf42a, 0xf42b, 0xf42c, 0xf42d, 0xf42e, 0xf42f,
+ 0xf430, 0xf431, 0xf432, 0xf433, 0xf434, 0xf435, 0xf436, 0xf437,
+ 0xf438, 0xf439, 0xf43a, 0xf43b, 0xf43c, 0xf43d, 0xf43e, 0xf43f,
+ 0xf440, 0xf441, 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf447, /* 0xf440 */
+ 0xf448, 0xf449, 0xf44a, 0xf44b, 0xf44c, 0xf44d, 0xf44e, 0xf44f,
+ 0xf450, 0xf451, 0xf452, 0xf453, 0xf454, 0xf455, 0xf456, 0xf457,
+ 0xf458, 0xf459, 0xf45a, 0xf45b, 0xf45c, 0xf45d, 0xf45e, 0xf45f,
+ 0xf460, 0xf461, 0xf462, 0xf463, 0xf464, 0xf465, 0xf466, 0xf467,
+ 0xf468, 0xf469, 0xf46a, 0xf46b, 0xf46c, 0xf46d, 0xf46e, 0xf46f,
+ 0xf470, 0xf471, 0xf472, 0xf473, 0xf474, 0xf475, 0xf476, 0xf477,
+ 0xf478, 0xf479, 0xf47a, 0xf47b, 0xf47c, 0xf47d, 0xf47e, 0xf47f,
+ 0xf480, 0xf481, 0xf482, 0xf483, 0xf484, 0xf485, 0xf486, 0xf487, /* 0xf480 */
+ 0xf488, 0xf489, 0xf48a, 0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f,
+ 0xf490, 0xf491, 0xf492, 0xf493, 0xf494, 0xf495, 0xf496, 0xf497,
+ 0xf498, 0xf499, 0xf49a, 0xf49b, 0xf49c, 0xf49d, 0xf49e, 0xf49f,
+ 0xf4a0, 0xf4a1, 0xf4a2, 0xf4a3, 0xf4a4, 0xf4a5, 0xf4a6, 0xf4a7,
+ 0xf4a8, 0xf4a9, 0xf4aa, 0xf4ab, 0xf4ac, 0xf4ad, 0xf4ae, 0xf4af,
+ 0xf4b0, 0xf4b1, 0xf4b2, 0xf4b3, 0xf4b4, 0xf4b5, 0xf4b6, 0xf4b7,
+ 0xf4b8, 0xf4b9, 0xf4ba, 0xf4bb, 0xf4bc, 0xf4bd, 0xf4be, 0xf4bf,
+ 0xf4c0, 0xf4c1, 0xf4c2, 0xf4c3, 0xf4c4, 0xf4c5, 0xf4c6, 0xf4c7, /* 0xf4c0 */
+ 0xf4c8, 0xf4c9, 0xf4ca, 0xf4cb, 0xf4cc, 0xf4cd, 0xf4ce, 0xf4cf,
+ 0xf4d0, 0xf4d1, 0xf4d2, 0xf4d3, 0xf4d4, 0xf4d5, 0xf4d6, 0xf4d7,
+ 0xf4d8, 0xf4d9, 0xf4da, 0xf4db, 0xf4dc, 0xf4dd, 0xf4de, 0xf4df,
+ 0xf4e0, 0xf4e1, 0xf4e2, 0xf4e3, 0xf4e4, 0xf4e5, 0xf4e6, 0xf4e7,
+ 0xf4e8, 0xf4e9, 0xf4ea, 0xf4eb, 0xf4ec, 0xf4ed, 0xf4ee, 0xf4ef,
+ 0xf4f0, 0xf4f1, 0xf4f2, 0xf4f3, 0xf4f4, 0xf4f5, 0xf4f6, 0xf4f7,
+ 0xf4f8, 0xf4f9, 0xf4fa, 0xf4fb, 0xf4fc, 0xf4fd, 0xf4fe, 0xf4ff,
+ 0xf500, 0xf501, 0xf502, 0xf503, 0xf504, 0xf505, 0xf506, 0xf507, /* 0xf500 */
+ 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf50c, 0xf50d, 0xf50e, 0xf50f,
+ 0xf510, 0xf511, 0xf512, 0xf513, 0xf514, 0xf515, 0xf516, 0xf517,
+ 0xf518, 0xf519, 0xf51a, 0xf51b, 0xf51c, 0xf51d, 0xf51e, 0xf51f,
+ 0xf520, 0xf521, 0xf522, 0xf523, 0xf524, 0xf525, 0xf526, 0xf527,
+ 0xf528, 0xf529, 0xf52a, 0xf52b, 0xf52c, 0xf52d, 0xf52e, 0xf52f,
+ 0xf530, 0xf531, 0xf532, 0xf533, 0xf534, 0xf535, 0xf536, 0xf537,
+ 0xf538, 0xf539, 0xf53a, 0xf53b, 0xf53c, 0xf53d, 0xf53e, 0xf53f,
+ 0xf540, 0xf541, 0xf542, 0xf543, 0xf544, 0xf545, 0xf546, 0xf547, /* 0xf540 */
+ 0xf548, 0xf549, 0xf54a, 0xf54b, 0xf54c, 0xf54d, 0xf54e, 0xf54f,
+ 0xf550, 0xf551, 0xf552, 0xf553, 0xf554, 0xf555, 0xf556, 0xf557,
+ 0xf558, 0xf559, 0xf55a, 0xf55b, 0xf55c, 0xf55d, 0xf55e, 0xf55f,
+ 0xf560, 0xf561, 0xf562, 0xf563, 0xf564, 0xf565, 0xf566, 0xf567,
+ 0xf568, 0xf569, 0xf56a, 0xf56b, 0xf56c, 0xf56d, 0xf56e, 0xf56f,
+ 0xf570, 0xf571, 0xf572, 0xf573, 0xf574, 0xf575, 0xf576, 0xf577,
+ 0xf578, 0xf579, 0xf57a, 0xf57b, 0xf57c, 0xf57d, 0xf57e, 0xf57f,
+ 0xf580, 0xf581, 0xf582, 0xf583, 0xf584, 0xf585, 0xf586, 0xf587, /* 0xf580 */
+ 0xf588, 0xf589, 0xf58a, 0xf58b, 0xf58c, 0xf58d, 0xf58e, 0xf58f,
+ 0xf590, 0xf591, 0xf592, 0xf593, 0xf594, 0xf595, 0xf596, 0xf597,
+ 0xf598, 0xf599, 0xf59a, 0xf59b, 0xf59c, 0xf59d, 0xf59e, 0xf59f,
+ 0xf5a0, 0xf5a1, 0xf5a2, 0xf5a3, 0xf5a4, 0xf5a5, 0xf5a6, 0xf5a7,
+ 0xf5a8, 0xf5a9, 0xf5aa, 0xf5ab, 0xf5ac, 0xf5ad, 0xf5ae, 0xf5af,
+ 0xf5b0, 0xf5b1, 0xf5b2, 0xf5b3, 0xf5b4, 0xf5b5, 0xf5b6, 0xf5b7,
+ 0xf5b8, 0xf5b9, 0xf5ba, 0xf5bb, 0xf5bc, 0xf5bd, 0xf5be, 0xf5bf,
+ 0xf5c0, 0xf5c1, 0xf5c2, 0xf5c3, 0xf5c4, 0xf5c5, 0xf5c6, 0xf5c7, /* 0xf5c0 */
+ 0xf5c8, 0xf5c9, 0xf5ca, 0xf5cb, 0xf5cc, 0xf5cd, 0xf5ce, 0xf5cf,
+ 0xf5d0, 0xf5d1, 0xf5d2, 0xf5d3, 0xf5d4, 0xf5d5, 0xf5d6, 0xf5d7,
+ 0xf5d8, 0xf5d9, 0xf5da, 0xf5db, 0xf5dc, 0xf5dd, 0xf5de, 0xf5df,
+ 0xf5e0, 0xf5e1, 0xf5e2, 0xf5e3, 0xf5e4, 0xf5e5, 0xf5e6, 0xf5e7,
+ 0xf5e8, 0xf5e9, 0xf5ea, 0xf5eb, 0xf5ec, 0xf5ed, 0xf5ee, 0xf5ef,
+ 0xf5f0, 0xf5f1, 0xf5f2, 0xf5f3, 0xf5f4, 0xf5f5, 0xf5f6, 0xf5f7,
+ 0xf5f8, 0xf5f9, 0xf5fa, 0xf5fb, 0xf5fc, 0xf5fd, 0xf5fe, 0xf5ff,
+ 0xf600, 0xf601, 0xf602, 0xf603, 0xf604, 0xf605, 0xf606, 0xf607, /* 0xf600 */
+ 0xf608, 0xf609, 0xf60a, 0xf60b, 0xf60c, 0xf60d, 0xf60e, 0xf60f,
+ 0xf610, 0xf611, 0xf612, 0xf613, 0xf614, 0xf615, 0xf616, 0xf617,
+ 0xf618, 0xf619, 0xf61a, 0xf61b, 0xf61c, 0xf61d, 0xf61e, 0xf61f,
+ 0xf620, 0xf621, 0xf622, 0xf623, 0xf624, 0xf625, 0xf626, 0xf627,
+ 0xf628, 0xf629, 0xf62a, 0xf62b, 0xf62c, 0xf62d, 0xf62e, 0xf62f,
+ 0xf630, 0xf631, 0xf632, 0xf633, 0xf634, 0xf635, 0xf636, 0xf637,
+ 0xf638, 0xf639, 0xf63a, 0xf63b, 0xf63c, 0xf63d, 0xf63e, 0xf63f,
+ 0xf640, 0xf641, 0xf642, 0xf643, 0xf644, 0xf645, 0xf646, 0xf647, /* 0xf640 */
+ 0xf648, 0xf649, 0xf64a, 0xf64b, 0xf64c, 0xf64d, 0xf64e, 0xf64f,
+ 0xf650, 0xf651, 0xf652, 0xf653, 0xf654, 0xf655, 0xf656, 0xf657,
+ 0xf658, 0xf659, 0xf65a, 0xf65b, 0xf65c, 0xf65d, 0xf65e, 0xf65f,
+ 0xf660, 0xf661, 0xf662, 0xf663, 0xf664, 0xf665, 0xf666, 0xf667,
+ 0xf668, 0xf669, 0xf66a, 0xf66b, 0xf66c, 0xf66d, 0xf66e, 0xf66f,
+ 0xf670, 0xf671, 0xf672, 0xf673, 0xf674, 0xf675, 0xf676, 0xf677,
+ 0xf678, 0xf679, 0xf67a, 0xf67b, 0xf67c, 0xf67d, 0xf67e, 0xf67f,
+ 0xf680, 0xf681, 0xf682, 0xf683, 0xf684, 0xf685, 0xf686, 0xf687, /* 0xf680 */
+ 0xf688, 0xf689, 0xf68a, 0xf68b, 0xf68c, 0xf68d, 0xf68e, 0xf68f,
+ 0xf690, 0xf691, 0xf692, 0xf693, 0xf694, 0xf695, 0xf696, 0xf697,
+ 0xf698, 0xf699, 0xf69a, 0xf69b, 0xf69c, 0xf69d, 0xf69e, 0xf69f,
+ 0xf6a0, 0xf6a1, 0xf6a2, 0xf6a3, 0xf6a4, 0xf6a5, 0xf6a6, 0xf6a7,
+ 0xf6a8, 0xf6a9, 0xf6aa, 0xf6ab, 0xf6ac, 0xf6ad, 0xf6ae, 0xf6af,
+ 0xf6b0, 0xf6b1, 0xf6b2, 0xf6b3, 0xf6b4, 0xf6b5, 0xf6b6, 0xf6b7,
+ 0xf6b8, 0xf6b9, 0xf6ba, 0xf6bb, 0xf6bc, 0xf6bd, 0xf6be, 0xf6bf,
+ 0xf6c0, 0xf6c1, 0xf6c2, 0xf6c3, 0xf6c4, 0xf6c5, 0xf6c6, 0xf6c7, /* 0xf6c0 */
+ 0xf6c8, 0xf6c9, 0xf6ca, 0xf6cb, 0xf6cc, 0xf6cd, 0xf6ce, 0xf6cf,
+ 0xf6d0, 0xf6d1, 0xf6d2, 0xf6d3, 0xf6d4, 0xf6d5, 0xf6d6, 0xf6d7,
+ 0xf6d8, 0xf6d9, 0xf6da, 0xf6db, 0xf6dc, 0xf6dd, 0xf6de, 0xf6df,
+ 0xf6e0, 0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xf6e5, 0xf6e6, 0xf6e7,
+ 0xf6e8, 0xf6e9, 0xf6ea, 0xf6eb, 0xf6ec, 0xf6ed, 0xf6ee, 0xf6ef,
+ 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, 0xf6f5, 0xf6f6, 0xf6f7,
+ 0xf6f8, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, 0xf6fd, 0xf6fe, 0xf6ff,
+ 0xf700, 0xf701, 0xf702, 0xf703, 0xf704, 0xf705, 0xf706, 0xf707, /* 0xf700 */
+ 0xf708, 0xf709, 0xf70a, 0xf70b, 0xf70c, 0xf70d, 0xf70e, 0xf70f,
+ 0xf710, 0xf711, 0xf712, 0xf713, 0xf714, 0xf715, 0xf716, 0xf717,
+ 0xf718, 0xf719, 0xf71a, 0xf71b, 0xf71c, 0xf71d, 0xf71e, 0xf71f,
+ 0xf720, 0xf721, 0xf722, 0xf723, 0xf724, 0xf725, 0xf726, 0xf727,
+ 0xf728, 0xf729, 0xf72a, 0xf72b, 0xf72c, 0xf72d, 0xf72e, 0xf72f,
+ 0xf730, 0xf731, 0xf732, 0xf733, 0xf734, 0xf735, 0xf736, 0xf737,
+ 0xf738, 0xf739, 0xf73a, 0xf73b, 0xf73c, 0xf73d, 0xf73e, 0xf73f,
+ 0xf740, 0xf741, 0xf742, 0xf743, 0xf744, 0xf745, 0xf746, 0xf747, /* 0xf740 */
+ 0xf748, 0xf749, 0xf74a, 0xf74b, 0xf74c, 0xf74d, 0xf74e, 0xf74f,
+ 0xf750, 0xf751, 0xf752, 0xf753, 0xf754, 0xf755, 0xf756, 0xf757,
+ 0xf758, 0xf759, 0xf75a, 0xf75b, 0xf75c, 0xf75d, 0xf75e, 0xf75f,
+ 0xf760, 0xf761, 0xf762, 0xf763, 0xf764, 0xf765, 0xf766, 0xf767,
+ 0xf768, 0xf769, 0xf76a, 0xf76b, 0xf76c, 0xf76d, 0xf76e, 0xf76f,
+ 0xf770, 0xf771, 0xf772, 0xf773, 0xf774, 0xf775, 0xf776, 0xf777,
+ 0xf778, 0xf779, 0xf77a, 0xf77b, 0xf77c, 0xf77d, 0xf77e, 0xf77f,
+ 0xf780, 0xf781, 0xf782, 0xf783, 0xf784, 0xf785, 0xf786, 0xf787, /* 0xf780 */
+ 0xf788, 0xf789, 0xf78a, 0xf78b, 0xf78c, 0xf78d, 0xf78e, 0xf78f,
+ 0xf790, 0xf791, 0xf792, 0xf793, 0xf794, 0xf795, 0xf796, 0xf797,
+ 0xf798, 0xf799, 0xf79a, 0xf79b, 0xf79c, 0xf79d, 0xf79e, 0xf79f,
+ 0xf7a0, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, 0xf7a5, 0xf7a6, 0xf7a7,
+ 0xf7a8, 0xf7a9, 0xf7aa, 0xf7ab, 0xf7ac, 0xf7ad, 0xf7ae, 0xf7af,
+ 0xf7b0, 0xf7b1, 0xf7b2, 0xf7b3, 0xf7b4, 0xf7b5, 0xf7b6, 0xf7b7,
+ 0xf7b8, 0xf7b9, 0xf7ba, 0xf7bb, 0xf7bc, 0xf7bd, 0xf7be, 0xf7bf,
+ 0xf7c0, 0xf7c1, 0xf7c2, 0xf7c3, 0xf7c4, 0xf7c5, 0xf7c6, 0xf7c7, /* 0xf7c0 */
+ 0xf7c8, 0xf7c9, 0xf7ca, 0xf7cb, 0xf7cc, 0xf7cd, 0xf7ce, 0xf7cf,
+ 0xf7d0, 0xf7d1, 0xf7d2, 0xf7d3, 0xf7d4, 0xf7d5, 0xf7d6, 0xf7d7,
+ 0xf7d8, 0xf7d9, 0xf7da, 0xf7db, 0xf7dc, 0xf7dd, 0xf7de, 0xf7df,
+ 0xf7e0, 0xf7e1, 0xf7e2, 0xf7e3, 0xf7e4, 0xf7e5, 0xf7e6, 0xf7e7,
+ 0xf7e8, 0xf7e9, 0xf7ea, 0xf7eb, 0xf7ec, 0xf7ed, 0xf7ee, 0xf7ef,
+ 0xf7f0, 0xf7f1, 0xf7f2, 0xf7f3, 0xf7f4, 0xf7f5, 0xf7f6, 0xf7f7,
+ 0xf7f8, 0xf7f9, 0xf7fa, 0xf7fb, 0xf7fc, 0xf7fd, 0xf7fe, 0xf7ff,
+ 0xf800, 0xf801, 0xf802, 0xf803, 0xf804, 0xf805, 0xf806, 0xf807, /* 0xf800 */
+ 0xf808, 0xf809, 0xf80a, 0xf80b, 0xf80c, 0xf80d, 0xf80e, 0xf80f,
+ 0xf810, 0xf811, 0xf812, 0xf813, 0xf814, 0xf815, 0xf816, 0xf817,
+ 0xf818, 0xf819, 0xf81a, 0xf81b, 0xf81c, 0xf81d, 0xf81e, 0xf81f,
+ 0xf820, 0xf821, 0xf822, 0xf823, 0xf824, 0xf825, 0xf826, 0xf827,
+ 0xf828, 0xf829, 0xf82a, 0xf82b, 0xf82c, 0xf82d, 0xf82e, 0xf82f,
+ 0xf830, 0xf831, 0xf832, 0xf833, 0xf834, 0xf835, 0xf836, 0xf837,
+ 0xf838, 0xf839, 0xf83a, 0xf83b, 0xf83c, 0xf83d, 0xf83e, 0xf83f,
+ 0xf840, 0xf841, 0xf842, 0xf843, 0xf844, 0xf845, 0xf846, 0xf847, /* 0xf840 */
+ 0xf848, 0xf849, 0xf84a, 0xf84b, 0xf84c, 0xf84d, 0xf84e, 0xf84f,
+ 0xf850, 0xf851, 0xf852, 0xf853, 0xf854, 0xf855, 0xf856, 0xf857,
+ 0xf858, 0xf859, 0xf85a, 0xf85b, 0xf85c, 0xf85d, 0xf85e, 0xf85f,
+ 0xf860, 0xf861, 0xf862, 0xf863, 0xf864, 0xf865, 0xf866, 0xf867,
+ 0xf868, 0xf869, 0xf86a, 0xf86b, 0xf86c, 0xf86d, 0xf86e, 0xf86f,
+ 0xf870, 0xf871, 0xf872, 0xf873, 0xf874, 0xf875, 0xf876, 0xf877,
+ 0xf878, 0xf879, 0xf87a, 0xf87b, 0xf87c, 0xf87d, 0xf87e, 0xf87f,
+ 0xf880, 0xf881, 0xf882, 0xf883, 0xf884, 0xf885, 0xf886, 0xf887, /* 0xf880 */
+ 0xf888, 0xf889, 0xf88a, 0xf88b, 0xf88c, 0xf88d, 0xf88e, 0xf88f,
+ 0xf890, 0xf891, 0xf892, 0xf893, 0xf894, 0xf895, 0xf896, 0xf897,
+ 0xf898, 0xf899, 0xf89a, 0xf89b, 0xf89c, 0xf89d, 0xf89e, 0xf89f,
+ 0xf8a0, 0xf8a1, 0xf8a2, 0xf8a3, 0xf8a4, 0xf8a5, 0xf8a6, 0xf8a7,
+ 0xf8a8, 0xf8a9, 0xf8aa, 0xf8ab, 0xf8ac, 0xf8ad, 0xf8ae, 0xf8af,
+ 0xf8b0, 0xf8b1, 0xf8b2, 0xf8b3, 0xf8b4, 0xf8b5, 0xf8b6, 0xf8b7,
+ 0xf8b8, 0xf8b9, 0xf8ba, 0xf8bb, 0xf8bc, 0xf8bd, 0xf8be, 0xf8bf,
+ 0xf8c0, 0xf8c1, 0xf8c2, 0xf8c3, 0xf8c4, 0xf8c5, 0xf8c6, 0xf8c7, /* 0xf8c0 */
+ 0xf8c8, 0xf8c9, 0xf8ca, 0xf8cb, 0xf8cc, 0xf8cd, 0xf8ce, 0xf8cf,
+ 0xf8d0, 0xf8d1, 0xf8d2, 0xf8d3, 0xf8d4, 0xf8d5, 0xf8d6, 0xf8d7,
+ 0xf8d8, 0xf8d9, 0xf8da, 0xf8db, 0xf8dc, 0xf8dd, 0xf8de, 0xf8df,
+ 0xf8e0, 0xf8e1, 0xf8e2, 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e6, 0xf8e7,
+ 0xf8e8, 0xf8e9, 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ed, 0xf8ee, 0xf8ef,
+ 0xf8f0, 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4, 0xf8f5, 0xf8f6, 0xf8f7,
+ 0xf8f8, 0xf8f9, 0xf8fa, 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0xf8ff,
+ 0xf900, 0xf901, 0xf902, 0xf903, 0xf904, 0xf905, 0xf906, 0xf907, /* 0xf900 */
+ 0xf908, 0xf909, 0xf90a, 0xf90b, 0xf90c, 0xf90d, 0xf90e, 0xf90f,
+ 0xf910, 0xf911, 0xf912, 0xf913, 0xf914, 0xf915, 0xf916, 0xf917,
+ 0xf918, 0xf919, 0xf91a, 0xf91b, 0xf91c, 0xf91d, 0xf91e, 0xf91f,
+ 0xf920, 0xf921, 0xf922, 0xf923, 0xf924, 0xf925, 0xf926, 0xf927,
+ 0xf928, 0xf929, 0xf92a, 0xf92b, 0xf92c, 0xf92d, 0xf92e, 0xf92f,
+ 0xf930, 0xf931, 0xf932, 0xf933, 0xf934, 0xf935, 0xf936, 0xf937,
+ 0xf938, 0xf939, 0xf93a, 0xf93b, 0xf93c, 0xf93d, 0xf93e, 0xf93f,
+ 0xf940, 0xf941, 0xf942, 0xf943, 0xf944, 0xf945, 0xf946, 0xf947, /* 0xf940 */
+ 0xf948, 0xf949, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f,
+ 0xf950, 0xf951, 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957,
+ 0xf958, 0xf959, 0xf95a, 0xf95b, 0xf95c, 0xf95d, 0xf95e, 0xf95f,
+ 0xf960, 0xf961, 0xf962, 0xf963, 0xf964, 0xf965, 0xf966, 0xf967,
+ 0xf968, 0xf969, 0xf96a, 0xf96b, 0xf96c, 0xf96d, 0xf96e, 0xf96f,
+ 0xf970, 0xf971, 0xf972, 0xf973, 0xf974, 0xf975, 0xf976, 0xf977,
+ 0xf978, 0xf979, 0xf97a, 0xf97b, 0xf97c, 0xf97d, 0xf97e, 0xf97f,
+ 0xf980, 0xf981, 0xf982, 0xf983, 0xf984, 0xf985, 0xf986, 0xf987, /* 0xf980 */
+ 0xf988, 0xf989, 0xf98a, 0xf98b, 0xf98c, 0xf98d, 0xf98e, 0xf98f,
+ 0xf990, 0xf991, 0xf992, 0xf993, 0xf994, 0xf995, 0xf996, 0xf997,
+ 0xf998, 0xf999, 0xf99a, 0xf99b, 0xf99c, 0xf99d, 0xf99e, 0xf99f,
+ 0xf9a0, 0xf9a1, 0xf9a2, 0xf9a3, 0xf9a4, 0xf9a5, 0xf9a6, 0xf9a7,
+ 0xf9a8, 0xf9a9, 0xf9aa, 0xf9ab, 0xf9ac, 0xf9ad, 0xf9ae, 0xf9af,
+ 0xf9b0, 0xf9b1, 0xf9b2, 0xf9b3, 0xf9b4, 0xf9b5, 0xf9b6, 0xf9b7,
+ 0xf9b8, 0xf9b9, 0xf9ba, 0xf9bb, 0xf9bc, 0xf9bd, 0xf9be, 0xf9bf,
+ 0xf9c0, 0xf9c1, 0xf9c2, 0xf9c3, 0xf9c4, 0xf9c5, 0xf9c6, 0xf9c7, /* 0xf9c0 */
+ 0xf9c8, 0xf9c9, 0xf9ca, 0xf9cb, 0xf9cc, 0xf9cd, 0xf9ce, 0xf9cf,
+ 0xf9d0, 0xf9d1, 0xf9d2, 0xf9d3, 0xf9d4, 0xf9d5, 0xf9d6, 0xf9d7,
+ 0xf9d8, 0xf9d9, 0xf9da, 0xf9db, 0xf9dc, 0xf9dd, 0xf9de, 0xf9df,
+ 0xf9e0, 0xf9e1, 0xf9e2, 0xf9e3, 0xf9e4, 0xf9e5, 0xf9e6, 0xf9e7,
+ 0xf9e8, 0xf9e9, 0xf9ea, 0xf9eb, 0xf9ec, 0xf9ed, 0xf9ee, 0xf9ef,
+ 0xf9f0, 0xf9f1, 0xf9f2, 0xf9f3, 0xf9f4, 0xf9f5, 0xf9f6, 0xf9f7,
+ 0xf9f8, 0xf9f9, 0xf9fa, 0xf9fb, 0xf9fc, 0xf9fd, 0xf9fe, 0xf9ff,
+ 0xfa00, 0xfa01, 0xfa02, 0xfa03, 0xfa04, 0xfa05, 0xfa06, 0xfa07, /* 0xfa00 */
+ 0xfa08, 0xfa09, 0xfa0a, 0xfa0b, 0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f,
+ 0xfa10, 0xfa11, 0xfa12, 0xfa13, 0xfa14, 0xfa15, 0xfa16, 0xfa17,
+ 0xfa18, 0xfa19, 0xfa1a, 0xfa1b, 0xfa1c, 0xfa1d, 0xfa1e, 0xfa1f,
+ 0xfa20, 0xfa21, 0xfa22, 0xfa23, 0xfa24, 0xfa25, 0xfa26, 0xfa27,
+ 0xfa28, 0xfa29, 0xfa2a, 0xfa2b, 0xfa2c, 0xfa2d, 0xfa2e, 0xfa2f,
+ 0xfa30, 0xfa31, 0xfa32, 0xfa33, 0xfa34, 0xfa35, 0xfa36, 0xfa37,
+ 0xfa38, 0xfa39, 0xfa3a, 0xfa3b, 0xfa3c, 0xfa3d, 0xfa3e, 0xfa3f,
+ 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, 0xfa45, 0xfa46, 0xfa47, /* 0xfa40 */
+ 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f,
+ 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, 0xfa55, 0xfa56, 0xfa57,
+ 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, 0xfa5d, 0xfa5e, 0xfa5f,
+ 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, 0xfa65, 0xfa66, 0xfa67,
+ 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, 0xfa6d, 0x0000, 0x0000,
+ 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, 0xfa75, 0xfa76, 0xfa77,
+ 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, 0xfa7d, 0xfa7e, 0xfa7f,
+ 0xfa80, 0xfa81, 0xfa82, 0xfa83, 0xfa84, 0xfa85, 0xfa86, 0xfa87, /* 0xfa80 */
+ 0xfa88, 0xfa89, 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, 0xfa8e, 0xfa8f,
+ 0xfa90, 0xfa91, 0xfa92, 0xfa93, 0xfa94, 0xfa95, 0xfa96, 0xfa97,
+ 0xfa98, 0xfa99, 0xfa9a, 0xfa9b, 0xfa9c, 0xfa9d, 0xfa9e, 0xfa9f,
+ 0xfaa0, 0xfaa1, 0xfaa2, 0xfaa3, 0xfaa4, 0xfaa5, 0xfaa6, 0xfaa7,
+ 0xfaa8, 0xfaa9, 0xfaaa, 0xfaab, 0xfaac, 0xfaad, 0xfaae, 0xfaaf,
+ 0xfab0, 0xfab1, 0xfab2, 0xfab3, 0xfab4, 0xfab5, 0xfab6, 0xfab7,
+ 0xfab8, 0xfab9, 0xfaba, 0xfabb, 0xfabc, 0xfabd, 0xfabe, 0xfabf,
+ 0xfac0, 0xfac1, 0xfac2, 0xfac3, 0xfac4, 0xfac5, 0xfac6, 0xfac7, /* 0xfac0 */
+ 0xfac8, 0xfac9, 0xfaca, 0xfacb, 0xfacc, 0xfacd, 0xface, 0xfacf,
+ 0xfad0, 0xfad1, 0xfad2, 0xfad3, 0xfad4, 0xfad5, 0xfad6, 0xfad7,
+ 0xfad8, 0xfad9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfb00, 0xfb01, 0xfb02, 0xfb03, 0xfb04, 0xfb05, 0xfb06, 0x0000, /* 0xfb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xfb13, 0xfb14, 0xfb15, 0xfb16, 0xfb17,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfb1d, 0xfb1e, 0xfb1f,
+ 0xfb20, 0xfb21, 0xfb22, 0xfb23, 0xfb24, 0xfb25, 0xfb26, 0xfb27,
+ 0xfb28, 0xfb29, 0xfb2a, 0xfb2b, 0xfb2c, 0xfb2d, 0xfb2e, 0xfb2f,
+ 0xfb30, 0xfb31, 0xfb32, 0xfb33, 0xfb34, 0xfb35, 0xfb36, 0x0000,
+ 0xfb38, 0xfb39, 0xfb3a, 0xfb3b, 0xfb3c, 0x0000, 0xfb3e, 0x0000,
+ 0xfb40, 0xfb41, 0x0000, 0xfb43, 0xfb44, 0x0000, 0xfb46, 0xfb47, /* 0xfb40 */
+ 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f,
+ 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57,
+ 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5e, 0xfb5f,
+ 0xfb60, 0xfb61, 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67,
+ 0xfb68, 0xfb69, 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f,
+ 0xfb70, 0xfb71, 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77,
+ 0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xfb7e, 0xfb7f,
+ 0xfb80, 0xfb81, 0xfb82, 0xfb83, 0xfb84, 0xfb85, 0xfb86, 0xfb87, /* 0xfb80 */
+ 0xfb88, 0xfb89, 0xfb8a, 0xfb8b, 0xfb8c, 0xfb8d, 0xfb8e, 0xfb8f,
+ 0xfb90, 0xfb91, 0xfb92, 0xfb93, 0xfb94, 0xfb95, 0xfb96, 0xfb97,
+ 0xfb98, 0xfb99, 0xfb9a, 0xfb9b, 0xfb9c, 0xfb9d, 0xfb9e, 0xfb9f,
+ 0xfba0, 0xfba1, 0xfba2, 0xfba3, 0xfba4, 0xfba5, 0xfba6, 0xfba7,
+ 0xfba8, 0xfba9, 0xfbaa, 0xfbab, 0xfbac, 0xfbad, 0xfbae, 0xfbaf,
+ 0xfbb0, 0xfbb1, 0xfbb2, 0xfbb3, 0xfbb4, 0xfbb5, 0xfbb6, 0xfbb7,
+ 0xfbb8, 0xfbb9, 0xfbba, 0xfbbb, 0xfbbc, 0xfbbd, 0xfbbe, 0xfbbf,
+ 0xfbc0, 0xfbc1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfbc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6, 0xfbd7,
+ 0xfbd8, 0xfbd9, 0xfbda, 0xfbdb, 0xfbdc, 0xfbdd, 0xfbde, 0xfbdf,
+ 0xfbe0, 0xfbe1, 0xfbe2, 0xfbe3, 0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7,
+ 0xfbe8, 0xfbe9, 0xfbea, 0xfbeb, 0xfbec, 0xfbed, 0xfbee, 0xfbef,
+ 0xfbf0, 0xfbf1, 0xfbf2, 0xfbf3, 0xfbf4, 0xfbf5, 0xfbf6, 0xfbf7,
+ 0xfbf8, 0xfbf9, 0xfbfa, 0xfbfb, 0xfbfc, 0xfbfd, 0xfbfe, 0xfbff,
+ 0xfc00, 0xfc01, 0xfc02, 0xfc03, 0xfc04, 0xfc05, 0xfc06, 0xfc07, /* 0xfc00 */
+ 0xfc08, 0xfc09, 0xfc0a, 0xfc0b, 0xfc0c, 0xfc0d, 0xfc0e, 0xfc0f,
+ 0xfc10, 0xfc11, 0xfc12, 0xfc13, 0xfc14, 0xfc15, 0xfc16, 0xfc17,
+ 0xfc18, 0xfc19, 0xfc1a, 0xfc1b, 0xfc1c, 0xfc1d, 0xfc1e, 0xfc1f,
+ 0xfc20, 0xfc21, 0xfc22, 0xfc23, 0xfc24, 0xfc25, 0xfc26, 0xfc27,
+ 0xfc28, 0xfc29, 0xfc2a, 0xfc2b, 0xfc2c, 0xfc2d, 0xfc2e, 0xfc2f,
+ 0xfc30, 0xfc31, 0xfc32, 0xfc33, 0xfc34, 0xfc35, 0xfc36, 0xfc37,
+ 0xfc38, 0xfc39, 0xfc3a, 0xfc3b, 0xfc3c, 0xfc3d, 0xfc3e, 0xfc3f,
+ 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc47, /* 0xfc40 */
+ 0xfc48, 0xfc49, 0xfc4a, 0xfc4b, 0xfc4c, 0xfc4d, 0xfc4e, 0xfc4f,
+ 0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xfc54, 0xfc55, 0xfc56, 0xfc57,
+ 0xfc58, 0xfc59, 0xfc5a, 0xfc5b, 0xfc5c, 0xfc5d, 0xfc5e, 0xfc5f,
+ 0xfc60, 0xfc61, 0xfc62, 0xfc63, 0xfc64, 0xfc65, 0xfc66, 0xfc67,
+ 0xfc68, 0xfc69, 0xfc6a, 0xfc6b, 0xfc6c, 0xfc6d, 0xfc6e, 0xfc6f,
+ 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, 0xfc75, 0xfc76, 0xfc77,
+ 0xfc78, 0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc7f,
+ 0xfc80, 0xfc81, 0xfc82, 0xfc83, 0xfc84, 0xfc85, 0xfc86, 0xfc87, /* 0xfc80 */
+ 0xfc88, 0xfc89, 0xfc8a, 0xfc8b, 0xfc8c, 0xfc8d, 0xfc8e, 0xfc8f,
+ 0xfc90, 0xfc91, 0xfc92, 0xfc93, 0xfc94, 0xfc95, 0xfc96, 0xfc97,
+ 0xfc98, 0xfc99, 0xfc9a, 0xfc9b, 0xfc9c, 0xfc9d, 0xfc9e, 0xfc9f,
+ 0xfca0, 0xfca1, 0xfca2, 0xfca3, 0xfca4, 0xfca5, 0xfca6, 0xfca7,
+ 0xfca8, 0xfca9, 0xfcaa, 0xfcab, 0xfcac, 0xfcad, 0xfcae, 0xfcaf,
+ 0xfcb0, 0xfcb1, 0xfcb2, 0xfcb3, 0xfcb4, 0xfcb5, 0xfcb6, 0xfcb7,
+ 0xfcb8, 0xfcb9, 0xfcba, 0xfcbb, 0xfcbc, 0xfcbd, 0xfcbe, 0xfcbf,
+ 0xfcc0, 0xfcc1, 0xfcc2, 0xfcc3, 0xfcc4, 0xfcc5, 0xfcc6, 0xfcc7, /* 0xfcc0 */
+ 0xfcc8, 0xfcc9, 0xfcca, 0xfccb, 0xfccc, 0xfccd, 0xfcce, 0xfccf,
+ 0xfcd0, 0xfcd1, 0xfcd2, 0xfcd3, 0xfcd4, 0xfcd5, 0xfcd6, 0xfcd7,
+ 0xfcd8, 0xfcd9, 0xfcda, 0xfcdb, 0xfcdc, 0xfcdd, 0xfcde, 0xfcdf,
+ 0xfce0, 0xfce1, 0xfce2, 0xfce3, 0xfce4, 0xfce5, 0xfce6, 0xfce7,
+ 0xfce8, 0xfce9, 0xfcea, 0xfceb, 0xfcec, 0xfced, 0xfcee, 0xfcef,
+ 0xfcf0, 0xfcf1, 0xfcf2, 0xfcf3, 0xfcf4, 0xfcf5, 0xfcf6, 0xfcf7,
+ 0xfcf8, 0xfcf9, 0xfcfa, 0xfcfb, 0xfcfc, 0xfcfd, 0xfcfe, 0xfcff,
+ 0xfd00, 0xfd01, 0xfd02, 0xfd03, 0xfd04, 0xfd05, 0xfd06, 0xfd07, /* 0xfd00 */
+ 0xfd08, 0xfd09, 0xfd0a, 0xfd0b, 0xfd0c, 0xfd0d, 0xfd0e, 0xfd0f,
+ 0xfd10, 0xfd11, 0xfd12, 0xfd13, 0xfd14, 0xfd15, 0xfd16, 0xfd17,
+ 0xfd18, 0xfd19, 0xfd1a, 0xfd1b, 0xfd1c, 0xfd1d, 0xfd1e, 0xfd1f,
+ 0xfd20, 0xfd21, 0xfd22, 0xfd23, 0xfd24, 0xfd25, 0xfd26, 0xfd27,
+ 0xfd28, 0xfd29, 0xfd2a, 0xfd2b, 0xfd2c, 0xfd2d, 0xfd2e, 0xfd2f,
+ 0xfd30, 0xfd31, 0xfd32, 0xfd33, 0xfd34, 0xfd35, 0xfd36, 0xfd37,
+ 0xfd38, 0xfd39, 0xfd3a, 0xfd3b, 0xfd3c, 0xfd3d, 0xfd3e, 0xfd3f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfd40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57,
+ 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, 0xfd5e, 0xfd5f,
+ 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, 0xfd66, 0xfd67,
+ 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, 0xfd6e, 0xfd6f,
+ 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, 0xfd76, 0xfd77,
+ 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0xfd7e, 0xfd7f,
+ 0xfd80, 0xfd81, 0xfd82, 0xfd83, 0xfd84, 0xfd85, 0xfd86, 0xfd87, /* 0xfd80 */
+ 0xfd88, 0xfd89, 0xfd8a, 0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f,
+ 0x0000, 0x0000, 0xfd92, 0xfd93, 0xfd94, 0xfd95, 0xfd96, 0xfd97,
+ 0xfd98, 0xfd99, 0xfd9a, 0xfd9b, 0xfd9c, 0xfd9d, 0xfd9e, 0xfd9f,
+ 0xfda0, 0xfda1, 0xfda2, 0xfda3, 0xfda4, 0xfda5, 0xfda6, 0xfda7,
+ 0xfda8, 0xfda9, 0xfdaa, 0xfdab, 0xfdac, 0xfdad, 0xfdae, 0xfdaf,
+ 0xfdb0, 0xfdb1, 0xfdb2, 0xfdb3, 0xfdb4, 0xfdb5, 0xfdb6, 0xfdb7,
+ 0xfdb8, 0xfdb9, 0xfdba, 0xfdbb, 0xfdbc, 0xfdbd, 0xfdbe, 0xfdbf,
+ 0xfdc0, 0xfdc1, 0xfdc2, 0xfdc3, 0xfdc4, 0xfdc5, 0xfdc6, 0xfdc7, /* 0xfdc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfdf0, 0xfdf1, 0xfdf2, 0xfdf3, 0xfdf4, 0xfdf5, 0xfdf6, 0xfdf7,
+ 0xfdf8, 0xfdf9, 0xfdfa, 0xfdfb, 0xfdfc, 0xfdfd, 0x0000, 0x0000,
+ 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07, /* 0xfe00 */
+ 0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f,
+ 0xfe10, 0xfe11, 0xfe12, 0xfe13, 0xfe14, 0xfe15, 0xfe16, 0xfe17,
+ 0xfe18, 0xfe19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfe20, 0xfe21, 0xfe22, 0xfe23, 0xfe24, 0xfe25, 0xfe26, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfe30, 0xfe31, 0xfe32, 0xfe33, 0xfe34, 0xfe35, 0xfe36, 0xfe37,
+ 0xfe38, 0xfe39, 0xfe3a, 0xfe3b, 0xfe3c, 0xfe3d, 0xfe3e, 0xfe3f,
+ 0xfe40, 0xfe41, 0xfe42, 0xfe43, 0xfe44, 0xfe45, 0xfe46, 0xfe47, /* 0xfe40 */
+ 0xfe48, 0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f,
+ 0xfe50, 0xfe51, 0xfe52, 0x0000, 0xfe54, 0xfe55, 0xfe56, 0xfe57,
+ 0xfe58, 0xfe59, 0xfe5a, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f,
+ 0xfe60, 0xfe61, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0x0000,
+ 0xfe68, 0xfe69, 0xfe6a, 0xfe6b, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xfe70, 0xfe71, 0xfe72, 0xfe73, 0xfe74, 0x0000, 0xfe76, 0xfe77,
+ 0xfe78, 0xfe79, 0xfe7a, 0xfe7b, 0xfe7c, 0xfe7d, 0xfe7e, 0xfe7f,
+ 0xfe80, 0xfe81, 0xfe82, 0xfe83, 0xfe84, 0xfe85, 0xfe86, 0xfe87, /* 0xfe80 */
+ 0xfe88, 0xfe89, 0xfe8a, 0xfe8b, 0xfe8c, 0xfe8d, 0xfe8e, 0xfe8f,
+ 0xfe90, 0xfe91, 0xfe92, 0xfe93, 0xfe94, 0xfe95, 0xfe96, 0xfe97,
+ 0xfe98, 0xfe99, 0xfe9a, 0xfe9b, 0xfe9c, 0xfe9d, 0xfe9e, 0xfe9f,
+ 0xfea0, 0xfea1, 0xfea2, 0xfea3, 0xfea4, 0xfea5, 0xfea6, 0xfea7,
+ 0xfea8, 0xfea9, 0xfeaa, 0xfeab, 0xfeac, 0xfead, 0xfeae, 0xfeaf,
+ 0xfeb0, 0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4, 0xfeb5, 0xfeb6, 0xfeb7,
+ 0xfeb8, 0xfeb9, 0xfeba, 0xfebb, 0xfebc, 0xfebd, 0xfebe, 0xfebf,
+ 0xfec0, 0xfec1, 0xfec2, 0xfec3, 0xfec4, 0xfec5, 0xfec6, 0xfec7, /* 0xfec0 */
+ 0xfec8, 0xfec9, 0xfeca, 0xfecb, 0xfecc, 0xfecd, 0xfece, 0xfecf,
+ 0xfed0, 0xfed1, 0xfed2, 0xfed3, 0xfed4, 0xfed5, 0xfed6, 0xfed7,
+ 0xfed8, 0xfed9, 0xfeda, 0xfedb, 0xfedc, 0xfedd, 0xfede, 0xfedf,
+ 0xfee0, 0xfee1, 0xfee2, 0xfee3, 0xfee4, 0xfee5, 0xfee6, 0xfee7,
+ 0xfee8, 0xfee9, 0xfeea, 0xfeeb, 0xfeec, 0xfeed, 0xfeee, 0xfeef,
+ 0xfef0, 0xfef1, 0xfef2, 0xfef3, 0xfef4, 0xfef5, 0xfef6, 0xfef7,
+ 0xfef8, 0xfef9, 0xfefa, 0xfefb, 0xfefc, 0x0000, 0x0000, 0xfeff,
+ 0x0000, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, /* 0xff00 */
+ 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f,
+ 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17,
+ 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f,
+ 0xff20, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47,
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f,
+ 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57,
+ 0xff58, 0xff59, 0xff5a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f,
+ 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, /* 0xff40 */
+ 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f,
+ 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57,
+ 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xff5f,
+ 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67,
+ 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f,
+ 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77,
+ 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f,
+ 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, /* 0xff80 */
+ 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f,
+ 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97,
+ 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f,
+ 0xffa0, 0xffa1, 0xffa2, 0xffa3, 0xffa4, 0xffa5, 0xffa6, 0xffa7,
+ 0xffa8, 0xffa9, 0xffaa, 0xffab, 0xffac, 0xffad, 0xffae, 0xffaf,
+ 0xffb0, 0xffb1, 0xffb2, 0xffb3, 0xffb4, 0xffb5, 0xffb6, 0xffb7,
+ 0xffb8, 0xffb9, 0xffba, 0xffbb, 0xffbc, 0xffbd, 0xffbe, 0x0000,
+ 0x0000, 0x0000, 0xffc2, 0xffc3, 0xffc4, 0xffc5, 0xffc6, 0xffc7, /* 0xffc0 */
+ 0x0000, 0x0000, 0xffca, 0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf,
+ 0x0000, 0x0000, 0xffd2, 0xffd3, 0xffd4, 0xffd5, 0xffd6, 0xffd7,
+ 0x0000, 0x0000, 0xffda, 0xffdb, 0xffdc, 0x0000, 0x0000, 0x0000,
+ 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0x0000,
+ 0xffe8, 0xffe9, 0xffea, 0xffeb, 0xffec, 0xffed, 0xffee, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0xfff9, 0xfffa, 0xfffb, 0xfffc, 0xfffd, 0x0000, 0x0000
+};
+
+const unsigned short ____tomirror[] = { 0,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0029, 0x0028, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x003e, 0x0000, 0x003c, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x005d, 0x0000, 0x005b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x007d, 0x0000, 0x007b, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x00bb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x00ab, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x00c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x01c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x04c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x05c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x06c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x09c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x10c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x11c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x13c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x14c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x15c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x17c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x18c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x19c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x1fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x203a, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2046, 0x2045, 0x0000, /* 0x2040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x207e, 0x207d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x208e, 0x208d, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x20c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x21c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x22c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2300 */
+ 0x2309, 0x2308, 0x230b, 0x230a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x232a, 0x2329, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x23c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x24c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x25c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x26c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x27c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x28c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x29c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x2fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3000 */
+ 0x3009, 0x3008, 0x300b, 0x300a, 0x300d, 0x300c, 0x300f, 0x300e,
+ 0x3011, 0x3010, 0x0000, 0x0000, 0x3015, 0x3014, 0x3017, 0x3016,
+ 0x3019, 0x3018, 0x301b, 0x301a, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x30c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x31c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x32c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x33c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x34c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x35c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x36c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x37c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x38c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x39c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x3fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x40c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x41c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x42c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x43c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x44c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x45c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x46c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x47c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x48c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x49c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x4fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x50c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x51c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x52c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x53c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x54c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x55c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x56c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x57c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x58c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x59c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x5fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x60c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x61c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x62c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x63c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x64c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x65c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x66c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x67c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x68c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x69c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x6fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x70c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x71c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x72c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x73c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x74c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x75c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x76c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x77c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x78c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x79c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x7fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x80c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x81c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x82c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x83c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x84c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x85c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x86c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x87c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x88c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x89c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x8fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x90c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x91c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x92c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x93c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x94c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x95c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x96c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x97c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x98c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x99c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9a00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9a40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9a80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9ac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9b00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9b40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9b80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9bc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9c00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9c40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9c80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9cc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9d00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9d40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9d80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9dc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9e00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9e40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9e80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9ec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9f00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9f40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9f80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x9fc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xa9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaa00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaa40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaa80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xab80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xabc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xac00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xac40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xac80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xacc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xad00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xad40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xad80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xadc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xae00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xae40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xae80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaf00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaf40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xaf80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xafc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xb9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xba00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xba40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xba80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbb40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbb80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbbc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbc00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbc40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbc80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbcc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbd00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbd40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbd80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbdc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbe00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbe40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbe80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbf00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbf40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbf80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xbfc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xc9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xca00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xca40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xca80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcb40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcb80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcbc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcc00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcc40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcc80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xccc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcd00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcd40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcd80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcdc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xce00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xce40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xce80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcf00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcf40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcf80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xcfc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xd9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xda00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xda40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xda80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdb40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdb80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdbc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdc00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdc40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdc80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdcc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdd00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdd40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdd80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xddc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xde00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xde40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xde80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdf00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdf40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdf80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xdfc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xe9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xea00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xea40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xea80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xeac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xeb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xeb40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xeb80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xebc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xec00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xec40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xec80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xecc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xed00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xed40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xed80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xedc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xee00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xee40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xee80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xeec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xef00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xef40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xef80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xefc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf000 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf040 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf080 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf0c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf100 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf140 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf180 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf1c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf200 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf240 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf280 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf2c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf300 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf340 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf380 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf3c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf400 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf440 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf480 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf4c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf500 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf540 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf580 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf5c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf600 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf640 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf680 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf6c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf700 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf740 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf780 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf7c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf800 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf840 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf880 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf8c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf900 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf940 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf980 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xf9c0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfa00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfa40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfa80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfac0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfb00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfb40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfb80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfbc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfc00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfc40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfc80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfcc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfd00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfd40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfd80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfdc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfe00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfe40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfe80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xfec0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xff00 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xff40 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xff80 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0xffc0 */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+};
+
+const uint32 ____utype[] = { 0,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, /* 0x0000 */
+ 0x00080000, 0x00020010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00020010, 0x00000020, 0x00000000, 0x00004000, 0x00004000, 0x00004000, 0x00000000, 0x00000000,
+ 0x00080000, 0x00000000, 0x00000000, 0x00001000, 0x00002020, 0x00021000, 0x00002020, 0x00102000,
+ 0x00000448, 0x00000448, 0x00000448, 0x00000448, 0x00000448, 0x00000448, 0x00000448, 0x00000448,
+ 0x00000448, 0x00000448, 0x00002020, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000020,
+ 0x00000000, 0x00200142, 0x00200142, 0x00200142, 0x00200142, 0x00200142, 0x00200142, 0x00200102, /* 0x0040 */
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200141, 0x00200141, 0x00200141, 0x00200141, 0x00200141, 0x00200141, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00080000, 0x00020000, 0x00040000, 0x00000000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00000010, 0x00080000, 0x00080000, /* 0x0080 */
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x180c2010, 0x00080000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00000000, 0x00000000,
+ 0x10000000, 0x00000000, 0x10200100, 0x00000000, 0x00000000, 0x00020000, 0x00000000, 0x10000000,
+ 0x00004000, 0x00004000, 0x10000400, 0x10000400, 0x10010000, 0x10200101, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000400, 0x10200100, 0x00000000, 0x10000000, 0x10000000, 0x10000000, 0x00080000,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00200102, 0x10200102, /* 0x00c0 */
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102,
+ 0x00200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00000000,
+ 0x00200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00200102, 0x00200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00200101, 0x10200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x00200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000,
+ 0x00200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00200101, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x0100 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102,
+ 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, /* 0x0140 */
+ 0x10200101, 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200101,
+ 0x00200101, 0x00200102, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200102, /* 0x0180 */
+ 0x00200101, 0x00200102, 0x00200102, 0x00200102, 0x00200101, 0x00200101, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200101, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200101, 0x00200101, 0x00200101, 0x00200102, 0x00200102, 0x00200101, 0x00200102,
+ 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200102,
+ 0x00200101, 0x00200102, 0x00200101, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x10200102,
+ 0x10200101, 0x00200102, 0x00200102, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102,
+ 0x00200102, 0x00200101, 0x00200101, 0x00200100, 0x00200102, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x10200102, 0x10200104, 0x10200101, 0x10200102, /* 0x01c0 */
+ 0x10200104, 0x10200101, 0x10200102, 0x10200104, 0x10200101, 0x10200102, 0x10200101, 0x10200102,
+ 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102,
+ 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200101, 0x10200102, 0x10200104, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200102,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x0200 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200102, 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200101,
+ 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200101, /* 0x0240 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x0280 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200100, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x00000000, 0x00000000, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x02c0 */
+ 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x00000000, 0x00010000,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, /* 0x0300 */
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x10088000, 0x10088000, 0x00088000, 0x10088000, 0x10088000, 0x00288000, 0x00088000, 0x00088000, /* 0x0340 */
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x000c8000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x000c0000, 0x000c8000, 0x000c8000, 0x000c8000,
+ 0x000c8000, 0x000c8000, 0x000c8000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x10000000, 0x00000000, 0x00200102, 0x00200101,
+ 0x00000000, 0x00000000, 0x10000100, 0x00200101, 0x00200101, 0x00200101, 0x10000020, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10200102, 0x10000020, /* 0x0380 */
+ 0x10200102, 0x10200102, 0x10200102, 0x00000000, 0x10200102, 0x00000000, 0x10200102, 0x10200102,
+ 0x10200101, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00000000, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x10200102, 0x10200102, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x03c0 */
+ 0x00200101, 0x00200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00200102,
+ 0x10200101, 0x10200101, 0x10200102, 0x10200102, 0x10200102, 0x10200101, 0x10200101, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x00200101, 0x10200102, 0x10200101, 0x00000000, 0x00200102,
+ 0x00200101, 0x10200102, 0x00200102, 0x00200101, 0x00200101, 0x00200102, 0x00200102, 0x00200102,
+ 0x10200102, 0x10200102, 0x00200102, 0x10200102, 0x00200102, 0x00200102, 0x00200102, 0x10200102, /* 0x0400 */
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x10200102, 0x10200102, 0x10200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x10200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x10200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x0440 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x10200101, 0x10200101, 0x00200101, 0x10200101, 0x00200101, 0x00200101, 0x00200101, 0x10200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x10200101, 0x10200101, 0x10200101, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00000100, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, /* 0x0480 */
+ 0x00080000, 0x00080000, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, /* 0x04c0 */
+ 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x00200102, 0x00200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x00200102, 0x00200101,
+ 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0x0500 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, /* 0x0540 */
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00000000,
+ 0x00000000, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000000, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x10200101, /* 0x0580 */
+ 0x00000000, 0x00000120, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000,
+ 0x00000000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00020200, 0x00280000,
+ 0x00000200, 0x00280000, 0x00280000, 0x00000220, 0x00280000, 0x00280000, 0x00000200, 0x00280000, /* 0x05c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200200, 0x00200200, 0x00200200, 0x00000200, 0x00000200, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000800, 0x00000800, 0x00000800, 0x00000800, 0x00000800, 0x00000000, 0x00000000, 0x00000000, /* 0x0600 */
+ 0x00000200, 0x00004000, 0x00004000, 0x00000200, 0x00002020, 0x00000200, 0x00000000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00000220, 0x00080200, 0x00000000, 0x00000200, 0x00000220,
+ 0x00200200, 0x00200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00000200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x0640 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00080000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00000808, 0x00000808, 0x00000808, 0x00000808, 0x00000808, 0x00000808, 0x00000808, 0x00000808,
+ 0x00000808, 0x00000808, 0x00004000, 0x00000800, 0x00000800, 0x00000200, 0x00200200, 0x00200200,
+ 0x00280000, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x10200200, 0x10200200, 0x10200200,
+ 0x10200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x0680 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x10200200, 0x00200200, 0x10200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x06c0 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x10200200, 0x00000220, 0x00200200, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000800, 0x00000000, 0x00080000,
+ 0x00080000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000200, 0x00000200, 0x00280000,
+ 0x00280000, 0x00000000, 0x00080000, 0x00080000, 0x00080000, 0x00280000, 0x00200200, 0x00200200,
+ 0x00000408, 0x00000408, 0x00000408, 0x00000408, 0x00000408, 0x00000408, 0x00000408, 0x00000408,
+ 0x00000408, 0x00000408, 0x00200200, 0x00200200, 0x00200200, 0x00000200, 0x00000200, 0x00200200,
+ 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, /* 0x0700 */
+ 0x00000220, 0x00000220, 0x00000220, 0x00000200, 0x00000220, 0x00000200, 0x00000000, 0x00000200,
+ 0x00200200, 0x00280000, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, /* 0x0740 */
+ 0x00080000, 0x00080000, 0x00080000, 0x00000000, 0x00000000, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x0780 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00200200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000208, 0x00000208, 0x00000208, 0x00000208, 0x00000208, 0x00000208, 0x00000208, 0x00000208, /* 0x07c0 */
+ 0x00000208, 0x00000208, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00000200, 0x00000200, 0x00000000, 0x00000000,
+ 0x00000020, 0x00000020, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x0800 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00280000, 0x00280000,
+ 0x00080000, 0x00080000, 0x00000200, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000200, 0x00280000, 0x00280000, 0x00280000,
+ 0x00000200, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220,
+ 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000220, 0x00000000,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, /* 0x0840 */
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00080000, 0x00080000, 0x00080000, 0x00000000, 0x00000000, 0x00000220, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x0880 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200200, 0x00000000, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200,
+ 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00200200, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x08c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x0900 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280100, 0x00080000, 0x00200100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, /* 0x0940 */
+ 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00080000, 0x00280100, 0x00280100,
+ 0x00200100, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00280000, 0x00280000, 0x00280000,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00020120, 0x00020120, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000100, 0x00000100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00280000, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0980 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00200100,
+ 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00200100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00280100, /* 0x09c0 */
+ 0x00280100, 0x00000000, 0x00000000, 0x10280100, 0x10280100, 0x00080000, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x00000000, 0x10200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00200100, 0x00200100, 0x00004000, 0x00004000, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280000, 0x00280000, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0a00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200100,
+ 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x10200100, 0x00000000, 0x00200100, 0x10200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280000, /* 0x0a40 */
+ 0x00280000, 0x00000000, 0x00000000, 0x00280000, 0x00280000, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x10200100, 0x10200100, 0x10200100, 0x00200100, 0x00000000, 0x10200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00280000, 0x00280000, 0x00200100, 0x00200100, 0x00200100, 0x00280000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280000, 0x00280000, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0a80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00200100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00280000, /* 0x0ac0 */
+ 0x00280000, 0x00280100, 0x00000000, 0x00280100, 0x00280100, 0x00080000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000100, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280000, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0b00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00200100,
+ 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00200100, 0x00280100, 0x00280000,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00280100, /* 0x0b40 */
+ 0x10280100, 0x00000000, 0x00000000, 0x10280100, 0x10280100, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280000, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x00000000, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000100, 0x00200100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00280000, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0b80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100, 0x00280100,
+ 0x00280000, 0x00280100, 0x00280100, 0x00000000, 0x00000000, 0x00000000, 0x00280100, 0x00280100, /* 0x0bc0 */
+ 0x00280100, 0x00000000, 0x10280100, 0x10280100, 0x10280100, 0x00080000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280100, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0c00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00000000, 0x00280000, 0x00280000, /* 0x0c40 */
+ 0x10280000, 0x00000000, 0x00280000, 0x00280000, 0x00280000, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280000, 0x00280000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100,
+ 0x00000000, 0x00000000, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0c80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00200100, 0x00280100, 0x00280100,
+ 0x10280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00000000, 0x00280100, 0x10280100, /* 0x0cc0 */
+ 0x10280100, 0x00000000, 0x10280100, 0x10280100, 0x00280000, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100, 0x00280100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0d00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00280100, 0x00280100, /* 0x0d40 */
+ 0x00280100, 0x00000000, 0x10280100, 0x10280100, 0x10280100, 0x00080000, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00280100, 0x00280100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, /* 0x0d80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, /* 0x0dc0 */
+ 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280100,
+ 0x00280100, 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00280000, 0x00000000,
+ 0x00280100, 0x00280100, 0x10280100, 0x00280100, 0x10280100, 0x10280100, 0x10280100, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00280100, 0x00280100, 0x00000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x0e00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200000, 0x00200100, 0x10200100, 0x00200000, 0x00200000, 0x00200000, 0x00200000,
+ 0x00200000, 0x00200000, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00004000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000100, 0x00000000, /* 0x0e40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00020120, 0x00020120, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00000000, 0x00200100, /* 0x0e80 */
+ 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00200100,
+ 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200000, 0x00200100, 0x10200100, 0x00200000, 0x00200000, 0x00200000, 0x00200000,
+ 0x00200000, 0x00200000, 0x00000000, 0x00200000, 0x00200000, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000100, 0x00000000, /* 0x0ec0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00010100, 0x00010100, 0x00010100, 0x00010100, 0x00000100, 0x00010100, 0x00010100, /* 0x0f00 */
+ 0x000c0120, 0x00010100, 0x00010100, 0x00020100, 0x100c0100, 0x00000120, 0x00000120, 0x00000120,
+ 0x00000120, 0x00000120, 0x000c0120, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00080000, 0x00080000, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00020100, 0x00080000, 0x00000100, 0x00080000,
+ 0x00000100, 0x00080000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080100, 0x00080100,
+ 0x00200100, 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x0f40 */
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x10200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00280000, 0x00280000, 0x10280000, 0x00280000, 0x10280000, 0x10280000, 0x10280000,
+ 0x10280000, 0x10280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00220100,
+ 0x00280000, 0x10280000, 0x00080000, 0x00080000, 0x00080000, 0x00020100, 0x00080000, 0x00080000, /* 0x0f80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x10280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00000000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x10280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x10280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x10280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x10280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x10280000, 0x00280000, 0x00280000, 0x00280000, 0x00000000, 0x00020100, 0x00020100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00080000, 0x00000100, /* 0x0fc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000100, 0x00000100,
+ 0x00010100, 0x00010100, 0x00020100, 0x00010100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x000c0100, 0x000c0100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1000 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x10200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00200000, 0x00200000,
+ 0x00200000, 0x00200100, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00000000,
+ 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200000, 0x00200000, 0x00200100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, /* 0x1040 */
+ 0x00000108, 0x00000108, 0x00020120, 0x00020120, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200000, 0x00200000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00200000,
+ 0x00200000, 0x00200100, 0x00200100, 0x00000100, 0x00000100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200000, 0x00200100, 0x00200100, 0x00200000, 0x00200000, 0x00000100, /* 0x1080 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00200100, 0x00000100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000100, 0x00000100, 0x00200100, 0x00200000, 0x00000100, 0x00000100,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00000000, 0x00200102, /* 0x10c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200102, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00000100, 0x10000100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1100 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1140 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1180 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x11c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1200 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1240 */
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1280 */
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, /* 0x12c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1300 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1340 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00080000, 0x00080000, 0x00280000,
+ 0x00000100, 0x00020120, 0x00000120, 0x00000120, 0x00000120, 0x00000120, 0x00000120, 0x00000120,
+ 0x00000120, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1380 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x13c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00020000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1400 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1440 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1480 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x14c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1500 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1540 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1580 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x15c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1600 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1640 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000120, 0x00000120, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00020010, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1680 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00040000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x16c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00020120, 0x00020120, 0x00020120, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1700 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00080000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00080000, 0x00020100, 0x00020100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1740 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00000000, 0x00280000, 0x00280000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1780 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00200100, 0x00200000,
+ 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00200100, /* 0x17c0 */
+ 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020120, 0x00020120, 0x00040120, 0x00000100,
+ 0x00020100, 0x00000100, 0x00020120, 0x00004000, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000020, 0x00000020, 0x00020020, 0x00020020, 0x00010000, 0x00000000, /* 0x1800 */
+ 0x00000020, 0x00000020, 0x00000000, 0x00080000, 0x00080000, 0x00080000, 0x000c0000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00000100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1840 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1880 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00280000, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x18c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1900 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280000,
+ 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280100, 0x00280100, 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00080000, 0x00080000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0x00000020, 0x00000108, 0x00000108, /* 0x1940 */
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1980 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x19c0 */
+ 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1a00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280000,
+ 0x00280000, 0x00280100, 0x00280100, 0x00280000, 0x00000000, 0x00000000, 0x00000100, 0x00000100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1a40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00200100,
+ 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200000, 0x00200100, 0x00200100, 0x00200000, 0x00200000, 0x00200000,
+ 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00200000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00088000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, /* 0x1a80 */
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000120, 0x00000120, 0x00000120, 0x00000120, 0x00000100, 0x00000100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x1ac0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00200100, 0x10200100, 0x00200100, /* 0x1b00 */
+ 0x10200100, 0x00200100, 0x10200100, 0x00200100, 0x10200100, 0x00200100, 0x10200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x10200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00280100, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x10280100, 0x00280000, 0x10280100, 0x00280100, 0x00280100,
+ 0x10280100, 0x10280100, 0x00280000, 0x10280100, 0x00080100, 0x00200100, 0x00200100, 0x00200100, /* 0x1b40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00020120, 0x00020120, 0x00000100, 0x00020120, 0x00020120, 0x00020120,
+ 0x00020100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1b80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00280100,
+ 0x00280000, 0x00280000, 0x00080100, 0x00080000, 0x00280100, 0x00280100, 0x00200100, 0x00200100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1bc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00280100,
+ 0x00280000, 0x00280000, 0x00280100, 0x00280100, 0x00280100, 0x00280000, 0x00280100, 0x00280000,
+ 0x00280000, 0x00280000, 0x00080100, 0x00080100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x1c00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280100, 0x00280100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00280100, 0x00080000, 0x00080000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x00020120,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, /* 0x1c40 */
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00020120, 0x00020120,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x1c80 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x1cc0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00000100, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080100, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00280100, 0x00280100, 0x00080000, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x1d00 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x10000100, 0x10000100, 0x10000100, 0x00000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x00000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, /* 0x1d40 */
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x00000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x10000100, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x1d80 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, /* 0x1dc0 */
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00088000, 0x00088000, 0x00088000,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x1e00 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x1e40 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x1e80 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00200101, 0x00200101, 0x00200102, 0x00200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, /* 0x1ec0 */
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101, 0x10200102, 0x10200101,
+ 0x10200102, 0x10200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, /* 0x1f00 */
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x00000000,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00000000, 0x00000000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x00000000, /* 0x1f40 */
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00000000, 0x00000000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x00000000, 0x10200102, 0x00000000, 0x10200102, 0x00000000, 0x10200102, 0x00000000, 0x10200102,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x00000000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, /* 0x1f80 */
+ 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104, 0x10200104,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200104, 0x10000000, 0x10200101, 0x10000000,
+ 0x10000000, 0x10000000, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x10200101, 0x10200101, /* 0x1fc0 */
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200104, 0x10000000, 0x10000000, 0x10000000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x00000000, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10000000, 0x10000000, 0x10000000,
+ 0x00000000, 0x00000000, 0x10200101, 0x10200101, 0x10200101, 0x00000000, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200104, 0x10010000, 0x10000000, 0x00000000,
+ 0x10020010, 0x10020010, 0x10020010, 0x10020010, 0x10020010, 0x10020010, 0x10020010, 0x100c0010, /* 0x2000 */
+ 0x10020010, 0x10020010, 0x10020010, 0x00020080, 0x00080080, 0x00080080, 0x00080110, 0x00080210,
+ 0x00020000, 0x180c0000, 0x00020000, 0x00020000, 0x00030000, 0x00000000, 0x00000000, 0x10000000,
+ 0x00000000, 0x00000000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000, 0x00020000,
+ 0x00000010, 0x00000010, 0x00088180, 0x00080200, 0x00080000, 0x00080100, 0x00080200, 0x180c2010,
+ 0x00004000, 0x00004000, 0x00004000, 0x10004000, 0x10004000, 0x00000000, 0x10000000, 0x10000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10040020, 0x00040020, 0x10000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00002000, 0x00080000, 0x00040000, 0x10040020, /* 0x2040 */
+ 0x10040020, 0x10040020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x10000000,
+ 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00000000, 0x00020000, 0x00020000, 0x10020010,
+ 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x10000400, 0x10000100, 0x00000000, 0x00000000, 0x10000400, 0x10000400, 0x10000400, 0x10000400,
+ 0x10000400, 0x10000400, 0x10001000, 0x10001000, 0x10000000, 0x10080000, 0x10040000, 0x10000100,
+ 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, /* 0x2080 */
+ 0x10000400, 0x10000400, 0x10001000, 0x10001000, 0x10000000, 0x10080000, 0x10040000, 0x00000000,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000,
+ 0x10004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000,
+ 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000, 0x00004000,
+ 0x00004000, 0x00004000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x20c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00080000, 0x00080000, 0x00080000,
+ 0x00080000, 0x00088000, 0x00080000, 0x00080000, 0x00080000, 0x00088000, 0x00088000, 0x00080000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10200102, 0x10000000, 0x00000000, 0x10000000, 0x10000000, 0x10200102, /* 0x2100 */
+ 0x00000000, 0x10000000, 0x10200101, 0x10200102, 0x10200102, 0x10200102, 0x10200101, 0x10200101,
+ 0x10200102, 0x10200102, 0x10200102, 0x10200101, 0x00000000, 0x10200102, 0x10000000, 0x00000000,
+ 0x00000000, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x00000000, 0x10200102, 0x00000000, 0x10200102, 0x00000000,
+ 0x10200102, 0x00000000, 0x10200102, 0x10200102, 0x10200102, 0x10200102, 0x00004000, 0x10200101,
+ 0x10200102, 0x10200102, 0x00200102, 0x10200102, 0x10200101, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200101, 0x00000000, 0x10000000, 0x10200101, 0x10200101, 0x10200102, 0x10200102,
+ 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10200102, 0x10200101, 0x10200101, /* 0x2140 */
+ 0x10200101, 0x10200101, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200101, 0x00000100,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00200102, 0x00200101, 0x00000100, 0x00000100, 0x00000100, /* 0x2180 */
+ 0x00000100, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x21c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2200 */
+ 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00001000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x10000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000, 0x10000000,
+ 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x10000000, /* 0x2240 */
+ 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000, 0x00000000, /* 0x2280 */
+ 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x22c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2300 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x10080000, 0x10040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x2340 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2380 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x23c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2400 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2440 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, /* 0x2480 */
+ 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400,
+ 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000400,
+ 0x10000400, 0x10000400, 0x10000400, 0x10000400, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100,
+ 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10000100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, /* 0x24c0 */
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2500 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2540 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2580 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x25c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2600 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00000000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2640 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2680 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, /* 0x26c0 */
+ 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00000000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, /* 0x2700 */
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2740 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000,
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2780 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00040000, 0x00000000, /* 0x27c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00040000,
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x2800 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x2840 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x2880 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0x28c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2900 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2940 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, /* 0x2980 */
+ 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000,
+ 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000,
+ 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x29c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000, 0x00040000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2a00 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2a40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x10000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2a80 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2ac0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2b00 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2b40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2b80 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2bc0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, /* 0x2c00 */
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00200102, 0x00000000,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x2c40 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00000000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200102, 0x00200101, 0x00200101, 0x00200102,
+ 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200101, 0x00200102, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x10000100, 0x10000100, 0x00200102, 0x00200102,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0x2c80 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0x2cc0 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200101, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00088000,
+ 0x00088000, 0x00088000, 0x00200102, 0x00200101, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00020000, 0x00000000, 0x00000000, 0x00020000,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, /* 0x2d00 */
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00000000, 0x00200101,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00200101, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x2d40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000100,
+ 0x00020100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00080000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0x2d80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, /* 0x2dc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2e00 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00020000,
+ 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00000000, 0x00020000,
+ 0x00080000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000,
+ 0x00080000, 0x00040000, 0x00020000, 0x00020000, 0x00020000, 0x00020000, 0x00000020, 0x00000000,
+ 0x00020000, 0x00020000, 0x00000000, 0x00020000, 0x00020000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x2e40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, /* 0x2e80 */
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00000000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x10030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, /* 0x2ec0 */
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x10030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, /* 0x2f00 */
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, /* 0x2f40 */
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, /* 0x2f80 */
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, /* 0x2fc0 */
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10020010, 0x00040020, 0x00040020, 0x00030000, 0x00030000, 0x00040100, 0x00630100, 0x00430100, /* 0x3000 */
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00080000, 0x00040000,
+ 0x00080000, 0x00040000, 0x00030000, 0x00030000, 0x00080000, 0x00040000, 0x00080000, 0x00040000,
+ 0x00080000, 0x00040000, 0x00080000, 0x00040000, 0x00040000, 0x00080000, 0x00040000, 0x00040000,
+ 0x00030000, 0x00430100, 0x00430100, 0x00430100, 0x00430100, 0x00430100, 0x00430100, 0x00430100,
+ 0x00430100, 0x00430100, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080100, 0x00080100,
+ 0x00030000, 0x00030100, 0x00030100, 0x00030100, 0x00030100, 0x00080100, 0x10030000, 0x00030000,
+ 0x10430100, 0x10430100, 0x10430100, 0x00040100, 0x00240100, 0x00030000, 0x00030000, 0x00030000,
+ 0x00000000, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, /* 0x3040 */
+ 0x00230100, 0x00200100, 0x00230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00200100, 0x00230100, 0x10230100, 0x00230100, 0x10230100,
+ 0x00230100, 0x10230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100,
+ 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, /* 0x3080 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00200100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x10230100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00088000, 0x00088000, 0x10040000, 0x10040000, 0x00040100, 0x10040100, 0x10230100,
+ 0x00040000, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100,
+ 0x00230100, 0x00200100, 0x00230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, 0x00230100,
+ 0x10230100, 0x00230100, 0x10230100, 0x00200100, 0x00230100, 0x10230100, 0x00230100, 0x10230100, /* 0x30c0 */
+ 0x00230100, 0x10230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100,
+ 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x10230100, 0x10230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00200100, 0x00230100, 0x00200100, 0x00230100, 0x00200100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00200100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x10230100, 0x00200100, 0x00200100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x00040000, 0x00000100, 0x00040100, 0x10040100, 0x10230100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00230100, 0x00230100, 0x00230100, /* 0x3100 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00000000, 0x00000000,
+ 0x00000000, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, /* 0x3140 */
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100,
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, /* 0x3180 */
+ 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x10230100, 0x00000000,
+ 0x00030100, 0x00030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, /* 0x31c0 */
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3200 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000, 0x10030000, 0x00000000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3240 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000, 0x10030000, 0x10030000, 0x00030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3280 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x32c0 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x00000000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3300 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3340 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x3380 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, /* 0x33c0 */
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000, 0x10030000,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100,
+ 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030100, 0x10030000,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x34c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x35c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x36c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x37c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x38c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x39c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x3fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x40c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x41c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x42c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x43c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x44c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x45c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x46c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x47c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x48c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x49c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0x4dc0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x4fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x50c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x51c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x52c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x53c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x54c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x55c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x56c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x57c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x58c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x59c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x5fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x60c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x61c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x62c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x63c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x64c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x65c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x66c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x67c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x68c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x69c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x6fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x70c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x71c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x72c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x73c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x74c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x75c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x76c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x77c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x78c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x79c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x7fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x80c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x81c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x82c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x83c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x84c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x85c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x86c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x87c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x88c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x89c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x8fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9000 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9040 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9080 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x90c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9100 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9140 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9180 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x91c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9200 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9240 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9280 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x92c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9300 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9340 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9380 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x93c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9400 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9440 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9480 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x94c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9500 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9540 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9580 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x95c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9600 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9640 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9680 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x96c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9700 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9740 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9780 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x97c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9800 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9840 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9880 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x98c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9900 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9940 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9980 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x99c0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9a00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9a40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9a80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9ac0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9b00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9b40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9b80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9bc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9c00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9c40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9c80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9cc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9d00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9d40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9d80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9dc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9e00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9e40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9e80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9ec0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9f00 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9f40 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9f80 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, /* 0x9fc0 */
+ 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00630100, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa000 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00040100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa040 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa080 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa0c0 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa100 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa140 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa180 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa1c0 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa200 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa240 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa280 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa2c0 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa300 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa340 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa380 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa3c0 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa400 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa440 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100,
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, /* 0xa480 */
+ 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00230100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00000000, /* 0xa4c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00020120, 0x00020120,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa500 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa540 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa580 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa5c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa600 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000100, 0x00020020, 0x00000020, 0x00020020,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0xa640 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200100, 0x00088000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00000000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00088000, 0x00088000, 0x00000000, 0x00000000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0xa680 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00280000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa6c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00088000, 0x00088000, 0x00000100, 0x00020120, 0x00020120, 0x00020120, 0x00020120, 0x00020120,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xa700 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200101, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0xa740 */
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x10000100, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101, 0x00200101,
+ 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, /* 0xa780 */
+ 0x00000000, 0x00000100, 0x00000100, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00000000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101, 0x00200102, 0x00200101,
+ 0x00200102, 0x00200101, 0x00200102, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xa7c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10000100, 0x10000100, 0x00200101, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00080000, 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00200100, /* 0xa800 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00280100, 0x00280100, 0x00280000, 0x00280000, 0x00280100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00004000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa840 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00010000, 0x00010000, 0x00000020, 0x00000020,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280100, 0x00280100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa880 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280100, 0x00280100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00280100,
+ 0x00280100, 0x00280100, 0x00280100, 0x00280100, 0x00080000, 0x00000000, 0x00000000, 0x00000000, /* 0xa8c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00020120, 0x00020120,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000,
+ 0x00088000, 0x00088000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, /* 0xa900 */
+ 0x00000108, 0x00000108, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00080000, 0x00080000, 0x00080000, 0x00020100, 0x00020120,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280000, /* 0xa940 */
+ 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280100, 0x00080100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00280000, 0x00280000, 0x00280000, 0x00280100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xa980 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00080000, 0x00280100, 0x00280100, 0x00280000, 0x00280000,
+ 0x00280000, 0x00280000, 0x00280100, 0x00280100, 0x00280000, 0x00280100, 0x00280100, 0x00280100,
+ 0x00080100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00020120, /* 0xa9c0 */
+ 0x00020120, 0x00020120, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x00000100,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaa00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280000, 0x00280100,
+ 0x00280100, 0x00280000, 0x00280000, 0x00280100, 0x00280100, 0x00280000, 0x00280000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00280000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaa40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00280000, 0x00280100, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000100, 0x00020120, 0x00020120, 0x00020120,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00000100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00200100, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaa80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200000, 0x00200100, 0x00200000, 0x00200000, 0x00200000, 0x00200100, 0x00200100, 0x00200000,
+ 0x00200000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200000, 0x00000000,
+ 0x00200100, 0x00000000, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xaac0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00000100, 0x00000100, 0x00000120,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00280100, 0x00280000, 0x00280000, 0x00280100, 0x00280100,
+ 0x00020120, 0x00020120, 0x00200100, 0x00000100, 0x00000100, 0x00280100, 0x00080000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, /* 0xab00 */
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xab40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xab80 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xabc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00280100, 0x00280100, 0x00280000, 0x00280100, 0x00280100,
+ 0x00280000, 0x00280100, 0x00280100, 0x00020120, 0x00080100, 0x00080000, 0x00000000, 0x00000000,
+ 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108, 0x00000108,
+ 0x00000108, 0x00000108, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xac00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xac40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xac80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xacc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xad00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xad40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xad80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xadc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xae00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xae40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xae80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaec0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaf00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaf40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xaf80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xafc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb000 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb040 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb080 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb0c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb100 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb140 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb180 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb1c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb200 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb240 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb280 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb2c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb300 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb340 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb380 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb3c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb400 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb440 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb480 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb4c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb500 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb540 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb580 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb5c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb600 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb640 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb680 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb6c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb700 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb740 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb780 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb7c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb800 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb840 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb880 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb8c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb900 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb940 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb980 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xb9c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xba00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xba40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xba80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbac0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbb00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbb40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbb80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbbc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbc00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbc40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbc80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbcc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbd00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbd40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbd80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbdc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbe00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbe40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbe80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbec0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbf00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbf40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbf80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xbfc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc000 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc040 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc080 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc0c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc100 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc140 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc180 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc1c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc200 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc240 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc280 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc2c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc300 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc340 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc380 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc3c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc400 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc440 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc480 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc4c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc500 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc540 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc580 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc5c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc600 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc640 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc680 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc6c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc700 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc740 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc780 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc7c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc800 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc840 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc880 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc8c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc900 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc940 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc980 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xc9c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xca00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xca40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xca80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcac0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcb00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcb40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcb80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcbc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcc00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcc40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcc80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xccc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcd00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcd40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcd80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcdc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xce00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xce40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xce80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcec0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcf00 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcf40 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcf80 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xcfc0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd000 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd040 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd080 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd0c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd100 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd140 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd180 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd1c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd200 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd240 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd280 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd2c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd300 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd340 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd380 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd3c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd400 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd440 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd480 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd4c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd500 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd540 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd580 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd5c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd600 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd640 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd680 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd6c0 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd700 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd740 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, /* 0xd780 */
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, /* 0xd7c0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00200100,
+ 0x00200100, 0x00200100, 0x00200100, 0x00200100, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd800 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd840 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd880 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd8c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd900 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd940 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd980 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xd9c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xda00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xda40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xda80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdac0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdb00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdb40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdb80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdbc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdc00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdc40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdc80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdcc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdd00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdd40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdd80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xddc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xde00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xde40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xde80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdec0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdf00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdf40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdf80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xdfc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe000 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe040 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe080 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe0c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe100 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe140 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe180 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe1c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe200 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe240 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe280 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe2c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe300 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe340 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe380 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe3c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe400 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe440 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe480 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe4c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe500 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe540 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe580 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe5c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe600 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe640 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe680 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe6c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe700 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe740 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe780 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe7c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe800 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe840 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe880 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe8c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe900 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe940 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe980 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xe9c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xea00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xea40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xea80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xeac0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xeb00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xeb40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xeb80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xebc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xec00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xec40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xec80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xecc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xed00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xed40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xed80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xedc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xee00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xee40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xee80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xeec0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xef00 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xef40 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xef80 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xefc0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf000 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf040 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf080 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf0c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf100 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf140 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf180 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf1c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf200 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf240 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf280 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf2c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf300 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf340 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf380 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf3c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf400 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf440 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf480 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf4c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf500 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf540 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf580 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf5c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf600 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf640 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf680 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf6c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf700 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf740 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf780 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf7c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf800 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf840 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf880 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, /* 0xf8c0 */
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xf900 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xf940 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xf980 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xf9c0 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xfa00 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x00630100, 0x00630100,
+ 0x10630100, 0x00630100, 0x10630100, 0x00630100, 0x00630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x00630100,
+ 0x10630100, 0x00630100, 0x10630100, 0x00630100, 0x00630100, 0x10630100, 0x10630100, 0x00630100,
+ 0x00630100, 0x00630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xfa40 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x00030000, 0x00030000,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xfa80 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, /* 0xfac0 */
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100, 0x10630100,
+ 0x10630100, 0x10630100, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000, 0x00030000,
+ 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x00000000, /* 0xfb00 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x10200101, 0x10200101, 0x10200101, 0x10200101, 0x10200101,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10200200, 0x00280000, 0x10200200,
+ 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200,
+ 0x10200200, 0x10001000, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200,
+ 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x00000000,
+ 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x00000000, 0x10200200, 0x00000000,
+ 0x10200200, 0x10200200, 0x00000000, 0x10200200, 0x10200200, 0x00000000, 0x10200200, 0x10200200, /* 0xfb40 */
+ 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200, 0x10200200,
+ 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, /* 0xfb80 */
+ 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200,
+ 0x14200200, 0x12200200, 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200,
+ 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200, 0x00000200,
+ 0x00000200, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xfbc0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200,
+ 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x14200200, 0x12200200,
+ 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200,
+ 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200,
+ 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200,
+ 0x10a00200, 0x14200200, 0x12200200, 0x10a00200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, /* 0xfc00 */
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, /* 0xfc40 */
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, /* 0xfc80 */
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, /* 0xfcc0 */
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x11200200,
+ 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200,
+ 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200,
+ 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, /* 0xfd00 */
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x11200200, 0x11200200, 0x11200200, 0x11200200,
+ 0x11200200, 0x11200200, 0x11200200, 0x11200200, 0x12200200, 0x14200200, 0x00080000, 0x00040000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, /* 0xfd40 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10a00200, 0x12200200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x12200200, 0x10a00200, 0x12200200, 0x12200200, 0x10a00200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x10a00200, 0x10a00200, 0x12200200, 0x10a00200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x10a00200, 0x12200200, 0x12200200, 0x10a00200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x10a00200, 0x12200200, 0x10a00200, 0x10a00200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200, 0x10a00200, 0x12200200, /* 0xfd80 */
+ 0x10a00200, 0x10a00200, 0x10a00200, 0x12200200, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200,
+ 0x00000000, 0x00000000, 0x10a00200, 0x10a00200, 0x10a00200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x10a00200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x10a00200, 0x12200200, 0x12200200,
+ 0x10a00200, 0x12200200, 0x10a00200, 0x12200200, 0x12200200, 0x12200200, 0x12200200, 0x12200200,
+ 0x12200200, 0x12200200, 0x12200200, 0x10a00200, 0x10a00200, 0x10a00200, 0x12200200, 0x12200200, /* 0xfdc0 */
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14200200,
+ 0x14200200, 0x14200200, 0x14200200, 0x14200200, 0x14000200, 0x00000000, 0x00000000, 0x00000000,
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, /* 0xfe00 */
+ 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000, 0x00080000,
+ 0x10000000, 0x10040000, 0x10040000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10080000,
+ 0x10040000, 0x10000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00088000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10080000, 0x10040000, 0x10080000,
+ 0x10040000, 0x10080000, 0x10040000, 0x10080000, 0x10040000, 0x10080000, 0x10040000, 0x10080000,
+ 0x10040000, 0x10080000, 0x10040000, 0x10080000, 0x10040000, 0x00030000, 0x00030000, 0x10080000, /* 0xfe40 */
+ 0x10040000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000, 0x10030000,
+ 0x10042020, 0x10030020, 0x10042020, 0x00000000, 0x10040020, 0x10042020, 0x10000020, 0x10000020,
+ 0x10030000, 0x10080000, 0x10040000, 0x10080000, 0x10040000, 0x10080000, 0x10040000, 0x10034000,
+ 0x10030000, 0x10030000, 0x10031000, 0x10031000, 0x10030000, 0x10030000, 0x10030000, 0x00000000,
+ 0x10030000, 0x10004000, 0x10004000, 0x10030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x14200200, 0x11200200, 0x14200200, 0x00200200, 0x14200200, 0x00000000, 0x14200200, 0x11200200,
+ 0x14200200, 0x11200200, 0x14200200, 0x11200200, 0x14200200, 0x11200200, 0x14200200, 0x11200200,
+ 0x14200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, /* 0xfe80 */
+ 0x12200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200,
+ 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x14200200,
+ 0x12200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200, /* 0xfec0 */
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x10a00200,
+ 0x11200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200,
+ 0x12200200, 0x14200200, 0x12200200, 0x10a00200, 0x11200200, 0x14200200, 0x12200200, 0x14200200,
+ 0x12200200, 0x14200200, 0x12200200, 0x14200200, 0x12200200, 0x00000000, 0x00000000, 0x08000080,
+ 0x00000000, 0x10000020, 0x10030000, 0x10034000, 0x10004000, 0x10004000, 0x10030000, 0x10030000, /* 0xff00 */
+ 0x10080000, 0x10040000, 0x10030000, 0x10031000, 0x10042020, 0x10031000, 0x10042020, 0x10032000,
+ 0x10030448, 0x10030448, 0x10030448, 0x10030448, 0x10030448, 0x10030448, 0x10030448, 0x10030448,
+ 0x10030448, 0x10030448, 0x10042020, 0x10040020, 0x10030000, 0x10030000, 0x10030000, 0x10000020,
+ 0x10030000, 0x10230142, 0x10230142, 0x10230142, 0x10230142, 0x10230142, 0x10230142, 0x10230102,
+ 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102,
+ 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102, 0x10230102,
+ 0x10230102, 0x10230102, 0x10230102, 0x10080000, 0x10030000, 0x10040000, 0x10030000, 0x10030000,
+ 0x10030000, 0x10230141, 0x10230141, 0x10230141, 0x10230141, 0x10230141, 0x10230141, 0x10230101, /* 0xff40 */
+ 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101,
+ 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101, 0x10230101,
+ 0x10230101, 0x10230101, 0x10230101, 0x10080000, 0x10030000, 0x10040000, 0x10030000, 0x10080000,
+ 0x10040000, 0x10040020, 0x10080000, 0x10040000, 0x10040020, 0x10040000, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10000100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, /* 0xff80 */
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10040100, 0x10040100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x00000000,
+ 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, /* 0xffc0 */
+ 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100, 0x10200100,
+ 0x00000000, 0x00000000, 0x10200100, 0x10200100, 0x10200100, 0x00000000, 0x00000000, 0x00000000,
+ 0x10004000, 0x10004000, 0x10030000, 0x10030000, 0x10030000, 0x10004000, 0x10004000, 0x00000000,
+ 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00080000, 0x00080000, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
+};
diff --git a/dviware/dvisvgm/libs/ff-woff/fontforge/woff.c b/dviware/dvisvgm/libs/ff-woff/fontforge/woff.c
new file mode 100644
index 0000000000..7a6ca10fcc
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/fontforge/woff.c
@@ -0,0 +1,318 @@
+/* Copyright (C) 2010-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Support for woff files */
+/* Which are defined here: http://people.mozilla.com/~jkew/woff/woff-2009-09-16.html */
+/* Basically sfnts with compressed tables and some more metadata */
+
+#include "fontforge.h"
+#include <math.h>
+#include <ctype.h>
+
+# include <zlib.h>
+
+static void copydata(FILE *to,int off_to,FILE *from,int off_from, int len) {
+ int ch, i;
+
+ fseek(to ,off_to ,SEEK_SET);
+ fseek(from,off_from,SEEK_SET);
+ for ( i=0; i<len; ++i ) {
+ ch = getc(from);
+ putc(ch,to);
+ }
+}
+
+#define CHUNK (128*1024)
+/* Copied with few mods from the zlib usage examples */
+
+static int compressOrNot(FILE *to,int off_to, FILE *from,int off_from,
+ int len, int forcecompress ) {
+ char in[CHUNK];
+ char out[CHUNK];
+ z_stream strm;
+ int ret, err=0;
+ int amount;
+ FILE *tmp;
+ int uncompLen = len;
+
+ /* Empty table, nothing to do */
+ if ( len==0 )
+return(0);
+
+ fseek(from,off_from,SEEK_SET);
+ memset(&strm,0,sizeof(strm));
+ ret = deflateInit(&strm,Z_DEFAULT_COMPRESSION);
+ if ( ret!=Z_OK ) {
+ fprintf( stderr,"Compression initialization failed.\n" );
+return(0);
+ }
+ tmp = tmpfile2();
+
+ do {
+ if ( len<=0 ) {
+ (void)deflateEnd(&strm);
+ break;
+ }
+ amount = len;
+ if ( amount>CHUNK )
+ amount = CHUNK;
+ strm.avail_in = fread(in, 1, amount, from);
+ len -= strm.avail_in;
+ if (ferror(from)) {
+ (void)deflateEnd(&strm);
+ fprintf( stderr, "IO error.\n" );
+ break;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = (unsigned char*)in;
+ do {
+ strm.avail_out = CHUNK;
+ strm.next_out = (unsigned char*)out;
+ ret = deflate(&strm, len==0 ? Z_FINISH : Z_NO_FLUSH);
+ if ( ret==Z_STREAM_ERROR ) {
+ (void)deflateEnd(&strm);
+ fprintf( stderr, "Compression failed somehow.\n");
+ err = 1;
+ break;
+ }
+ amount = CHUNK - strm.avail_out;
+ if ( fwrite(out,1,amount,tmp)!= amount || ferror(tmp) ) {
+ (void)deflateEnd(&strm);
+ fprintf( stderr, "IO Error.\n");
+ err=1;
+ break;
+ }
+ } while ( strm.avail_out==0 );
+ if ( err )
+ break;
+ } while ( ret!=Z_STREAM_END );
+ (void)deflateEnd(&strm);
+
+ if ( strm.total_out>=uncompLen ) {
+ /* Didn't actually make the data smaller, so store uncompressed */
+ fclose(tmp);
+ copydata(to,off_to,from,off_from,uncompLen);
+return( uncompLen );
+ } else {
+ copydata(to,off_to,tmp,0,strm.total_out);
+ fclose(tmp);
+return( strm.total_out );
+ }
+}
+
+typedef struct {
+ int index;
+ int offset;
+} tableOrderRec;
+
+static int
+compareOffsets(const void * lhs, const void * rhs)
+{
+ const tableOrderRec * a = (const tableOrderRec *) lhs;
+ const tableOrderRec * b = (const tableOrderRec *) rhs;
+ /* don't simply return a->offset - b->offset because these are unsigned
+ offset values; could convert to int, but possible integer overflow */
+ return a->offset > b->offset ? 1 :
+ a->offset < b->offset ? -1 :
+ 0;
+}
+
+int _WriteWOFFFont(FILE *woff,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer) {
+ int ret;
+ FILE *sfnt;
+ int major=sf->woffMajor, minor=sf->woffMinor;
+ int flavour, num_tabs;
+ int filelen, len;
+ int i;
+ int compLen, uncompLen, newoffset;
+ int tag, checksum, offset;
+ int tab_start;
+ tableOrderRec *tableOrder = NULL;
+
+ if ( major==woffUnset ) {
+ struct ttflangname *useng;
+ major = 1; minor = 0;
+ for ( useng=sf->names; useng!=NULL; useng=useng->next )
+ if ( useng->lang==0x409 )
+ break;
+ if ( useng!=NULL && useng->names[ttf_version]!=NULL &&
+ sscanf(useng->names[ttf_version], "Version %d.%d", &major, &minor)>=1 ) {
+ /* All done */
+ } else if ( sf->subfontcnt!=0 ) {
+ major = floor(sf->cidversion);
+ minor = floor(1000.*(sf->cidversion-major));
+ } else if ( sf->version!=NULL ) {
+ char *pt=sf->version;
+ char *end;
+ while ( *pt && !isdigit(*pt) && *pt!='.' ) ++pt;
+ if ( *pt ) {
+ major = strtol(pt,&end,10);
+ if ( *end=='.' )
+ minor = strtol(end+1,NULL,10);
+ }
+ }
+ }
+
+ format = sf->subfonts!=NULL ? ff_otfcid :
+ sf->layers[layer].order2 ? ff_ttf : ff_otf;
+ sfnt = tmpfile2();
+ ret = _WriteTTFFont(sfnt,sf,format,bsizes,bf,flags,enc,layer);
+ if ( !ret ) {
+ fclose(sfnt);
+return( ret );
+ }
+
+ fseek(sfnt,0,SEEK_END);
+ filelen = ftell(sfnt);
+ rewind(sfnt);
+
+ flavour = getlong(sfnt);
+ /* The woff standard says we should accept all flavours of sfnt, so can't */
+ /* test flavour to make sure we've got a valid sfnt */
+ /* But we can test the rest of the header for consistancy */
+ num_tabs = getushort(sfnt);
+ (void) getushort(sfnt);
+ (void) getushort(sfnt);
+ (void) getushort(sfnt);
+
+ /*
+ * At this point _WriteTTFFont should have generated an sfnt file with
+ * valid checksums, correct padding and no extra gaps. However, the order
+ * of the font tables in the original sfnt font must also be preserved so
+ * that WOFF consumers can recover the original offsets as well as the
+ * original font. Hence we will compress and write the font tables into
+ * the WOFF file using the original offset order. Note that the order of
+ * tables may not be the same as the one of table directory entries.
+ * See https://github.com/fontforge/fontforge/issues/926
+ */
+ tableOrder = (tableOrderRec *) malloc(num_tabs * sizeof(tableOrderRec));
+ if (!tableOrder) {
+ fclose(sfnt);
+ return false;
+ }
+ for ( i=0; i<num_tabs; ++i ) {
+ fseek(sfnt,(3 + 4*i + 2)*sizeof(int32),SEEK_SET);
+ tableOrder[i].index = i;
+ tableOrder[i].offset = getlong(sfnt);
+ }
+ qsort(tableOrder, num_tabs, sizeof(tableOrderRec), compareOffsets);
+
+ /* Now generate the WOFF file */
+ rewind(woff);
+ putlong(woff,CHR('w','O','F','F'));
+ putlong(woff,flavour);
+ putlong(woff,0); /* Off: 8. total length of file, fill in later */
+ putshort(woff,num_tabs);
+ putshort(woff,0); /* Must be zero */
+ putlong(woff,filelen);
+ putshort(woff,major); /* Major and minor version numbers of font */
+ putshort(woff,minor);
+ putlong(woff,0); /* Off: 24. Offset to metadata table */
+ putlong(woff,0); /* Off: 28. Length (compressed) of metadata */
+ putlong(woff,0); /* Off: 32. Length (uncompressed) */
+ putlong(woff,0); /* Off: 36. Offset to private data */
+ putlong(woff,0); /* Off: 40. Length of private data */
+
+ tab_start = ftell(woff);
+ for ( i=0; i<5*num_tabs; ++i )
+ putlong(woff,0);
+
+ for ( i=0; i<num_tabs; ++i ) {
+ fseek(sfnt,(3 + 4*tableOrder[i].index)*sizeof(int32),SEEK_SET);
+ tag = getlong(sfnt);
+ checksum = getlong(sfnt);
+ offset = getlong(sfnt);
+ uncompLen = getlong(sfnt);
+ newoffset = ftell(woff);
+ compLen = compressOrNot(woff,newoffset,sfnt,offset,uncompLen,false);
+ if ( (ftell(woff)&3)!=0 ) {
+ /* Pad to a 4 byte boundary */
+ if ( ftell(woff)&1 )
+ putc('\0',woff);
+ if ( ftell(woff)&2 )
+ putshort(woff,0);
+ }
+ fseek(woff,tab_start+(5*tableOrder[i].index)*sizeof(int32),SEEK_SET);
+ putlong(woff,tag);
+ putlong(woff,newoffset);
+ putlong(woff,compLen);
+ putlong(woff,uncompLen);
+ putlong(woff,checksum);
+ fseek(woff,0,SEEK_END);
+ }
+ fclose(sfnt);
+
+ if ( sf->woffMetadata!= NULL ) {
+ int uncomplen = strlen(sf->woffMetadata);
+ uLongf complen = 2*uncomplen;
+ char *temp=malloc(complen+1);
+ newoffset = ftell(woff);
+ compress((unsigned char*)temp,&complen,(unsigned char*)sf->woffMetadata,uncomplen);
+ fwrite(temp,1,complen,woff);
+ free(temp);
+ if ( (ftell(woff)&3)!=0 ) {
+ /* Pad to a 4 byte boundary */
+ if ( ftell(woff)&1 )
+ putc('\0',woff);
+ if ( ftell(woff)&2 )
+ putshort(woff,0);
+ }
+ fseek(woff,24,SEEK_SET);
+ putlong(woff,newoffset);
+ putlong(woff,complen);
+ putlong(woff,uncomplen);
+ fseek(woff,0,SEEK_END);
+ }
+
+ fseek(woff,0,SEEK_END);
+ len = ftell(woff);
+ fseek(woff,8,SEEK_SET);
+ putlong(woff,len);
+
+ free(tableOrder);
+return( true ); /* No errors */
+}
+
+int WriteWOFFFont(char *fontname,SplineFont *sf, enum fontformat format,
+ int32 *bsizes, enum bitmapformat bf,int flags,EncMap *enc,int layer) {
+ FILE *woff;
+ int ret;
+
+ if ( strstr(fontname,"://")!=NULL ) {
+ if (( woff = tmpfile2())==NULL )
+return( 0 );
+ } else {
+ if (( woff=fopen(fontname,"wb+"))==NULL )
+return( 0 );
+ }
+ ret = _WriteWOFFFont(woff,sf,format,bsizes,bf,flags,enc,layer);
+ if ( fclose(woff)==-1 )
+return( 0 );
+return( ret );
+}
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/basics.h b/dviware/dvisvgm/libs/ff-woff/inc/basics.h
new file mode 100644
index 0000000000..e1a543d39e
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/basics.h
@@ -0,0 +1,125 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _BASICS_H
+#define _BASICS_H
+
+#include <fontforge-config.h>
+#include <stdio.h> /* for NULL */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#else
+#include <inttypes.h>
+#endif
+#include <stdlib.h> /* for free */
+#include <limits.h>
+#include <stdbool.h>
+
+typedef int32_t int32;
+typedef uint32_t uint32;
+typedef int16_t int16;
+typedef uint16_t uint16;
+typedef int8_t int8;
+typedef uint8_t uint8;
+
+/* An integral type which can hold a pointer */
+typedef intptr_t intpt;
+
+typedef uint32 unichar_t;
+
+/* A macro to mark unused function parameters with. We often
+ * have such parameters, because of extensive use of callbacks.
+ */
+#ifdef UNUSED
+#elif defined(__GNUC__)
+# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
+#elif defined(__LCLINT__)
+# define UNUSED(x) /*@unused@*/ x
+#else
+# define UNUSED(x) x
+#endif
+
+/* A macro to print a string for debug purposes
+ */
+#ifdef FONTFORGE_DEBUG
+#define TRACE(...) printf(__VA_ARGS__)
+#else
+#define TRACE(...)
+#endif
+
+extern void NoMoreMemMessage(void);
+
+static inline int imin(int a, int b)
+{
+ return (a < b) ? a : b;
+}
+
+static inline int imax(int a, int b)
+{
+ return (a < b) ? b : a;
+}
+
+#define IS_IN_ORDER3( a, b, c ) ( ((a)<=(b)) && ((b)<=(c)) )
+
+
+/**
+ * Many lists in FontForge are singly linked. At times you might want
+ * to append to the list which, when you only have a pointer to the
+ * start of the list can be more verbose than one would like. To use
+ * this macro you must defined a null initialized variable 'last'
+ * outside of any loop that traverses the source list. The last
+ * variable is used used by this macro to quickly append to the list
+ * as you go. This macro also assumes that the 'last' and 'newitem'
+ * types have a member "->next" which contains the single linked list
+ * pointer to the next element.
+ *
+ * Efficient list append should really be a one line call in the bulk
+ * of the code :)
+ *
+ * example:
+ * MyListObjectType* newfoolast = 0;
+ * MyListObjectType* newfoolist = 0;
+ *
+ * for( ... iterate a source collection of foos ... )
+ * {
+ * MyListObjectType* foocopy = CopyIt( foo );
+ * FFLIST_SINGLE_LINKED_APPEND( newfoolist, newfoolast, foocopy );
+ * }
+ */
+#define FFLIST_SINGLE_LINKED_APPEND( head, last, newitem ) \
+ if ( !last ) \
+ { \
+ newitem->next = 0; \
+ head = last = newitem; \
+ } \
+ else \
+ { \
+ last->next = newitem; \
+ last = newitem; \
+ }
+
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/chardata.h b/dviware/dvisvgm/libs/ff-woff/inc/chardata.h
new file mode 100644
index 0000000000..39bff9487a
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/chardata.h
@@ -0,0 +1,78 @@
+#include <basics.h>
+
+struct charmap {
+ int first, last;
+ unsigned char **table;
+ unichar_t *totable;
+};
+struct charmap2 {
+ int first, last;
+ unsigned short **table;
+ unichar_t *totable;
+};
+
+extern const unichar_t unicode_from_i8859_1[];
+extern struct charmap i8859_1_from_unicode;
+extern const unichar_t unicode_from_i8859_2[];
+extern struct charmap i8859_2_from_unicode;
+extern const unichar_t unicode_from_i8859_3[];
+extern struct charmap i8859_3_from_unicode;
+extern const unichar_t unicode_from_i8859_4[];
+extern struct charmap i8859_4_from_unicode;
+extern const unichar_t unicode_from_i8859_5[];
+extern struct charmap i8859_5_from_unicode;
+extern const unichar_t unicode_from_i8859_6[];
+extern struct charmap i8859_6_from_unicode;
+extern const unichar_t unicode_from_i8859_7[];
+extern struct charmap i8859_7_from_unicode;
+extern const unichar_t unicode_from_i8859_8[];
+extern struct charmap i8859_8_from_unicode;
+extern const unichar_t unicode_from_i8859_9[];
+extern struct charmap i8859_9_from_unicode;
+extern const unichar_t unicode_from_i8859_10[];
+extern struct charmap i8859_10_from_unicode;
+extern const unichar_t unicode_from_i8859_11[];
+extern struct charmap i8859_11_from_unicode;
+extern const unichar_t unicode_from_i8859_13[];
+extern struct charmap i8859_13_from_unicode;
+extern const unichar_t unicode_from_i8859_14[];
+extern struct charmap i8859_14_from_unicode;
+extern const unichar_t unicode_from_i8859_15[];
+extern struct charmap i8859_15_from_unicode;
+extern const unichar_t unicode_from_koi8_r[];
+extern struct charmap koi8_r_from_unicode;
+extern const unichar_t unicode_from_jis201[];
+extern struct charmap jis201_from_unicode;
+extern const unichar_t unicode_from_win[];
+extern struct charmap win_from_unicode;
+extern const unichar_t unicode_from_mac[];
+extern struct charmap mac_from_unicode;
+extern const unichar_t unicode_from_MacSymbol[];
+extern struct charmap MacSymbol_from_unicode;
+extern const unichar_t unicode_from_ZapfDingbats[];
+extern struct charmap ZapfDingbats_from_unicode;
+
+extern unichar_t *unicode_from_alphabets[];
+extern struct charmap *alphabets_from_unicode[];
+
+extern const unichar_t unicode_from_jis208[];
+extern const unichar_t unicode_from_jis212[];
+extern struct charmap2 jis_from_unicode;
+/* Subtract 0xa100 before indexing this array */
+extern const unichar_t unicode_from_big5[];
+extern struct charmap2 big5_from_unicode;
+/* Subtract 0x8100 before indexing this array */
+extern const unichar_t unicode_from_big5hkscs[];
+extern struct charmap2 big5hkscs_from_unicode;
+extern const unichar_t unicode_from_ksc5601[];
+extern struct charmap2 ksc5601_from_unicode;
+/* Subtract 0x8400 before indexing this array */
+extern const unichar_t unicode_from_johab[];
+extern struct charmap2 johab_from_unicode;
+extern const unichar_t unicode_from_gb2312[];
+extern struct charmap2 gb2312_from_unicode;
+
+/* a mask for each character saying what charset(s) it may be found in */
+extern const unsigned long * const unicode_backtrans[];
+
+extern const unichar_t *const * const unicode_alternates[];
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/charset.h b/dviware/dvisvgm/libs/ff-woff/inc/charset.h
new file mode 100644
index 0000000000..94daf0d3b4
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/charset.h
@@ -0,0 +1,71 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _CHARSET_H
+#define _CHARSET_H
+/* ASCII is ISO 646, except the ISO version admits national alternatives */
+enum encoding { e_usascii, e_iso646_no, e_iso646_se, e_iso8859_1,
+ e_iso8859_2, e_iso8859_3, e_iso8859_4, e_iso8859_5, e_iso8859_6,
+ e_iso8859_7, e_iso8859_8, e_iso8859_9, e_iso8859_10,
+ e_iso8859_11/* same as TIS */, e_iso8859_13, e_iso8859_14, e_iso8859_15,
+ e_koi8_r, /* RFC 1489 */
+ e_jis201, /* 8 bit, ascii & katakana */
+ e_win, e_mac,
+ e_user,
+/* korean appears to fit into the jis/euc encoding schemes */
+/* the difference between jis & jis2 is what the output encoding should be (presence of '(') */
+ e_jis, e_jis2, e_jiskorean, e_jisgb, e_sjis, /* multi-byte */
+ e_euc, e_euckorean, e_eucgb,
+ e_wansung, e_johab,
+ e_big5,
+ e_big5hkscs,
+ e_unicode, e_unicode_backwards, /* wide chars */
+ e_utf7, e_utf8, /* unicode encodings */
+ e_ucs4, /* 4 byte chars */
+ e_notrans, /* _inch returns 16bits */
+ e_encodingmax, e_unknown=-1, e_first2byte=e_jis };
+
+enum charset { em_none = -1,
+ em_iso8859_1, em_iso8859_2, em_iso8859_3, em_iso8859_4, em_iso8859_5,
+ em_iso8859_6, em_iso8859_7, em_iso8859_8, em_iso8859_9, em_iso8859_10,
+ em_iso8859_11/* same as TIS */, em_iso8859_13, em_iso8859_14, em_iso8859_15,
+ em_koi8_r,
+ em_jis201,
+ em_win, em_mac, em_symbol, em_zapfding, em_user, em_adobestandard=em_user,
+ em_jis208, em_jis212, em_ksc5601, em_gb2312, em_big5, em_big5hkscs,
+ em_johab /* Korean*/,
+/* 28 */
+ em_unicode, em_unicode4, em_gb18030 , em_max, em_first2byte=em_jis208, em_last94x94=em_gb2312 };
+
+extern int /*enum charset*/ local_encoding;
+#if HAVE_ICONV
+# include <iconv.h>
+extern char *iconv_local_encoding_name;
+#else
+# include "gwwiconv.h" /* My fake iconv based on encodings in gdraw/gunicode */
+#endif
+extern struct namemap { const char *name; int map; } encodingnames[];
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/dlist.h b/dviware/dvisvgm/libs/ff-woff/inc/dlist.h
new file mode 100644
index 0000000000..eb4fcb9621
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/dlist.h
@@ -0,0 +1,151 @@
+/* Copyright (C) 2012 by Ben Martin */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _DLIST_H
+#define _DLIST_H
+
+/**
+ * Doubly linked list abstraction. Putting a full member of this
+ * struct first in another struct means you can treat it as a
+ * dlinkedlist. You can have a struct in many lists simply by
+ * embedding another dlistnode member and handing a pointer to that
+ * member to the dlist() helper functions. Double linking has big
+ * advantages in removal of single elements where you do not need to
+ * rescan to find removeme->prev;
+ */
+struct dlistnode {
+ struct dlistnode* next;
+ struct dlistnode* prev;
+};
+
+/**
+ * DEVELOPERS: make sure the start of this struct is compatible with
+ * dlistnode. While I could use the dlistnode as a first member, using
+ * a copy of the members in the same order as dlistnode has them
+ * allows callers using this struct a bit simpler access.
+ *
+ * While one can embed a dlistnode member into a struct to create
+ * linked lists, sometimes you want to return a splice of one of those
+ * lists. For example, if you have a double linked list of all your
+ * hotkeys, you might like to return only the ones that have a
+ * modifier of the Control key. You want to leave the hotkey structs
+ * in their original list, but create a new kust that references just
+ * a desired selection of objects.
+ *
+ * In other words, if you have some data you want to return in a
+ * double linked list, then use this node type. You can build one up
+ * using dlist_pushfront_external() and the caller can free that list
+ * using dlist_free_external(). Any of the foreach() functions will
+ * work to iterate a list of dlistnodeExternal as this list is
+ * identical to a dlistnode with an extra ptr payload.
+ */
+struct dlistnodeExternal {
+ struct dlistnode* next;
+ struct dlistnode* prev;
+ void* ptr;
+};
+
+
+/**
+ * Push the node onto the head of the list
+ */
+extern void dlist_pushfront( struct dlistnode** list, struct dlistnode* node );
+
+/**
+ * Take the last node off the list and return it. If the list is empty, return 0.
+ */
+struct dlistnode* dlist_popback( struct dlistnode** list );
+
+/**
+ * the number of nodes in the list
+ */
+extern int dlist_size( struct dlistnode** list );
+
+/**
+ * is the list empty
+ */
+extern int dlist_isempty( struct dlistnode** list );
+
+/**
+ * Remove the node from the list. The node itself is not free()ed.
+ * That is still up to the caller. All this function does is preserve
+ * the list structure without the node being in it.
+ */
+extern void dlist_erase( struct dlistnode** list, struct dlistnode* node );
+typedef void (*dlist_foreach_func_type)( struct dlistnode* );
+
+/**
+ * Call func for every node in the list. This is a defensive
+ * implementation, if you want to remove a node from the list inside
+ * func() that is perfectly fine.
+ */
+extern void dlist_foreach( struct dlistnode** list, dlist_foreach_func_type func );
+typedef void (*dlist_foreach_udata_func_type)( struct dlistnode*, void* udata );
+
+/**
+ * Like dlist_foreach(), defensive coding still, but the udata pointer
+ * is passed back to your visitor function.
+ */
+extern void dlist_foreach_udata( struct dlistnode** list, dlist_foreach_udata_func_type func, void* udata );
+
+/**
+ * Like dlist_foreach_udata() but nodes are visited in reverse order.
+ */
+extern void dlist_foreach_reverse_udata( struct dlistnode** list, dlist_foreach_udata_func_type func, void* udata );
+
+/**
+ * Assuming list is an externalNode list, push a newly allocated list node with
+ * a dlistnodeExternal.ptr = ptr passed.
+ */
+extern void dlist_pushfront_external( struct dlistnode** list, void* ptr );
+
+/**
+ * Free a list of externalNode type. The externalNode memory is
+ * free()ed, whatever externalNode.ptr is pointing to is not free()ed.
+ */
+extern void dlist_free_external( struct dlistnode** list );
+
+
+typedef void (*dlist_visitor_func_type)( struct dlistnode* );
+
+/**
+ * To create a list of bounded length, use this function. Limit is the
+ * maximum length the list can reach. If list nodes have to be removed
+ * to be under this limit then "f" is used as a callback to free list
+ * nodes. This allows application specific freeing of a list node, and
+ * the ability to maintain a limit on the length of a list as a simple
+ * one line call.
+ *
+ * The current implementation expects you to only be trimming one or
+ * two entries at a time. It will still work for trimming 100 entries
+ * at a single time, but might not be quite as optimized for that case
+ * as it could be.
+ */
+extern void dlist_trim_to_limit( struct dlistnode** list, int limit, dlist_visitor_func_type f );
+
+
+#endif // _DLIST_H
+
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/ffintl.h b/dviware/dvisvgm/libs/ff-woff/inc/ffintl.h
new file mode 100644
index 0000000000..e4c14a2b76
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/ffintl.h
@@ -0,0 +1,37 @@
+/* Copyright (C) 2005-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FFINTL_H
+#define FFINTL_H
+
+#define _(str) (str)
+
+/* For messages including utf8 sequences that need gettext_noop treatment */
+#define NU_(str) (str)
+#define N_(str) (str)
+
+#endif /* FFINTL_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/gimage.h b/dviware/dvisvgm/libs/ff-woff/inc/gimage.h
new file mode 100644
index 0000000000..47fa137279
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/gimage.h
@@ -0,0 +1,204 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _GIMAGE_H
+#define _GIMAGE_H
+#include <basics.h>
+
+typedef uint32 Color;
+
+#define COLOR_UNKNOWN ((Color) 0xffffffff)
+#define COLOR_TRANSPARENT ((Color) 0xffffffff)
+#define COLOR_DEFAULT ((Color) 0xfffffffe)
+#define COLOR_CREATE(r,g,b) (((r)<<16) | ((g)<<8) | (b))
+#define COLOR_ALPHA(col) (((col)>>24))
+#define COLOR_RED(col) (((col)>>16) & 0xff)
+#define COLOR_GREEN(col) (((col)>>8) & 0xff)
+#define COLOR_BLUE(col) ((col)&0xff)
+
+struct hslrgb {
+ double h,s,l,v;
+ double r,g,b;
+ uint8 rgb, hsl, hsv;
+};
+
+struct hslrgba {
+ double h,s,l,v;
+ double r,g,b;
+ uint8 rgb, hsl, hsv, has_alpha;
+ double alpha;
+};
+
+typedef struct clut {
+ int16 clut_len;
+ unsigned int is_grey: 1;
+ uint32 trans_index; /* will be ignored for cluts in images, use base->trans instead */
+ Color clut[256];
+} GClut;
+
+#define GCLUT_CLUT_EMPTY \
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \
+}
+
+
+typedef struct revcmap RevCMap;
+
+enum image_type { it_mono, it_bitmap=it_mono, it_index, it_true, it_rgba };
+
+struct _GImage {
+/* Format: bitmaps are stored with the most significant bit first in byte units
+ indexed images are stored in byte units
+ true color images are stored in 4 byte units, 0,red,green,blue
+ rgba images are stored in 4 byte units, alpha,red,green blue
+*/
+ enum image_type image_type: 2;
+ int16 delay; /* for animated GIFs, delay to next frame */
+ int32 width, height;
+ int32 bytes_per_line;
+ uint8 *data;
+ GClut *clut;
+ Color trans; /* PNG supports more than one transparent color, we don't */
+ /* for non-true color images this is the index, not a color */
+};
+
+/* We deal with 1 bit, 8 bit and 32 bit images internal. 1 bit images may have*/
+/* a clut (if they don't assume bw, 0==black, 1==white), 8 bit must have a */
+/* clut, 32bit are actually 24 bit RGB images, but we pad them for easy */
+/* accessing. it_screen means that we've got an image that can be drawn */
+/* directly on the screen */
+typedef struct gimage {
+ short list_len; /* length of list */
+ union { /* depends on whether has_list is set */
+ struct _GImage *image;
+ struct _GImage **images;
+ } u;
+ void *userdata;
+} GImage;
+
+enum pastetrans_type { ptt_paste_trans_to_trans, ptt_old_shines_through};
+
+typedef struct grect {
+ int32 x,y,width,height;
+} GRect;
+
+#define GRECT_EMPTY { 0, 0, 0, 0 }
+
+
+typedef struct gpoint {
+ int16 x,y;
+} GPoint;
+
+#define GPOINT_EMPTY { 0, 0 }
+
+
+extern GImage *GImageCreate(enum image_type type, int32 width, int32 height);
+extern GImage *_GImage_Create(enum image_type type, int32 width, int32 height);
+extern void GImageDestroy(GImage *gi);
+extern GImage *GImageCreateAnimation(GImage **images, int n);
+extern GImage *GImageAddImageBefore(GImage *dest, GImage *src, int pos);
+
+extern GImage *GImageBaseGetSub(struct _GImage *base, enum image_type it, GRect *src, GClut *nclut, RevCMap *rev);
+extern GImage *GImageGetSub(GImage *image,enum image_type it, GRect *src, GClut *nclut, RevCMap *rev);
+extern int GImageInsertToBase(struct _GImage *tobase, GImage *from, GRect *src, RevCMap *rev,
+ int to_x, int to_y, enum pastetrans_type ptt );
+extern int GImageInsert(GImage *to, GImage *from, GRect *src, RevCMap *rev,
+ int to_x, int to_y, enum pastetrans_type ptt );
+extern Color _GImageGetPixelColor(struct _GImage *base,int x, int y); /* Obsolete */
+extern Color GImageGetPixelColor(GImage *base,int x, int y); /* Obsolete */
+extern Color GImageGetPixelRGBA(GImage *base,int x, int y);
+extern int GImageGetWidth(GImage *);
+extern int GImageGetHeight(GImage *);
+extern void *GImageGetUserData(GImage *img);
+extern void GImageSetUserData(GImage *img,void *userdata);
+extern void GImageResize(struct _GImage *tobase, struct _GImage *fbase,
+ GRect *src, RevCMap *rev);
+extern GImage *GImageResize32(GImage *from, GRect *src, int width, int height, Color trans);
+extern GImage *GImageResizeSame(GImage *from, GRect *src, int width, int height, RevCMap *rev);
+extern RevCMap *GClutReverse(GClut *clut,int side_size);
+void GClut_RevCMapFree(RevCMap *rev);
+extern GClut *GImageFindCLUT(GImage *image,GClut *clut,int clutmax);
+extern int GImageSameClut(GClut *clut,GClut *nclut);
+extern int GImageGreyClut(GClut *clut);
+extern Color GImageColourFName(unichar_t *name);
+extern Color _GImage_ColourFName(char *name);
+extern char *GImageNameFColour(Color col);
+extern Color GDrawColorDarken(Color col, int by);
+extern Color GDrawColorBrighten(Color col, int by);
+
+extern int GImageWriteGImage(GImage *gi, char *filename);
+extern int GImageWrite_Bmp(GImage *gi, FILE *fp);
+extern int GImageWriteBmp(GImage *gi, char *filename);
+extern GImage *GImageRead_Bmp(FILE *file);
+extern GImage *GImageReadBmp(char *filename);
+extern int GImageWriteXbm(GImage *gi, char *filename);
+extern GImage *GImageReadXbm(char *filename);
+extern int GImageWriteXpm(GImage *gi, char *filename);
+extern GImage *GImageReadXpm(char *filename);
+extern int GImageWriteEps(GImage *gi, char *filename);
+extern GImage *GImageReadTiff(char *filename);
+extern GImage *GImageReadJpeg(char *filename);
+extern GImage *GImageRead_Jpeg(FILE *fp);
+extern int GImageWrite_Jpeg(GImage *gi, FILE *outfile, int quality, int progressive);
+extern int GImageWriteJpeg(GImage *gi, char *filename, int quality, int progressive);
+extern GImage *GImageRead_Png(FILE *fp);
+extern GImage *GImageReadPng(char *filename);
+extern int GImageWrite_Png(GImage *gi, FILE *fp, int progressive);
+extern int GImageWritePng(GImage *gi, char *filename, int progressive);
+extern GImage *GImageReadGif(char *filename);
+extern int GImageWriteGif(GImage *gi,char *filename,int progressive);
+extern GImage *GImageReadRas(char *filename); /* Sun Raster */
+extern GImage *GImageReadRgb(char *filename); /* SGI */
+extern GImage *GImageRead(char *filename);
+
+extern void GImageDrawRect(GImage *img,GRect *r,Color col);
+extern void GImageDrawImage(GImage *dest,GImage *src,GRect *junk,int x, int y);
+extern void GImageBlendOver(GImage *dest,GImage *src,GRect *from,int x, int y);
+
+extern void gRGB2HSL(struct hslrgb *col);
+extern void gHSL2RGB(struct hslrgb *col);
+extern void gRGB2HSV(struct hslrgb *col);
+extern void gHSV2RGB(struct hslrgb *col);
+extern void gColor2Hslrgb(struct hslrgb *col,Color from);
+extern void gColor2Hslrgba(struct hslrgba *col,Color from);
+extern Color gHslrgb2Color(struct hslrgb *col);
+extern Color gHslrgba2Color(struct hslrgba *col);
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/gnetwork.h b/dviware/dvisvgm/libs/ff-woff/inc/gnetwork.h
new file mode 100644
index 0000000000..89067924c9
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/gnetwork.h
@@ -0,0 +1,87 @@
+/* Copyright (C) 2013 by Ben Martin */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _ALREADY_INCLUDED_GNETWORK_H_
+#define _ALREADY_INCLUDED_GNETWORK_H_
+
+#include <fontforge-config.h>
+
+#define IPADDRESS_STRING_LENGTH_T 100
+
+/**
+ * Get a string that describes this host. It may be something
+ * like "foobar" if the user has decided to call their laptop that name.
+ * So you might not be able to resolve the returned hostname on a remote
+ * computer. Data is copied to outstring and outstring is returned.
+ */
+char* ff_gethostname( char* outstring, int outstring_sz );
+
+
+/**
+ * Get the network accessible IP address of the local machine.
+ *
+ * If the machine is multihomed you had better hope that traffic
+ * from the network can reach all NICs on the host.
+ *
+ * The output is copied to outstring which is assumed to be
+ * at least ipaddress_string_length_t bytes long. The outstring is
+ * also returned.
+ */
+extern char* getNetworkAddress( char* outstring );
+
+extern char* HostPortPack( char* hostname, int port );
+extern char* HostPortUnpack( char* packed, int* port, int port_default );
+
+/**
+ * This is ZUUID_LEN. Because that length is stable and to avoid bringing in
+ * the czmq header file it is redeclared from base form here.
+ */
+#define FF_UUID_BINARY_SIZE 16
+/**
+ * min length of a buffer that will contain an ascii string serialiation of a uuid
+ */
+#define FF_UUID_STRING_SIZE 33
+
+/**
+ * generate a new uuid and stringify it into the target area provided
+ * after the call target should contain something like
+ * 1b4e28ba-2fa1-11d2-883f-0016d3cca427
+ * with the trailing NUL. Before the call target needs to be at least
+ * FF_UUID_STRING_SIZE bytes long.
+ * the 'target' is also the return value.
+ */
+char* ff_uuid_generate( char* target );
+
+/**
+ * This test might be improved in the future.
+ * You pass a string which might have the form of a UUID (or be "\0 whatever") or
+ * just be a null pointer, and the function returns true if the uuid string
+ * you passed in conforms to being a uuid.
+ */
+extern int ff_uuid_isValid( char* uuid );
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/gwwiconv.h b/dviware/dvisvgm/libs/ff-woff/inc/gwwiconv.h
new file mode 100644
index 0000000000..ff650a6dd3
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/gwwiconv.h
@@ -0,0 +1,48 @@
+/* Copyright (C) 2004-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _GWWICONV_H
+#define _GWWICONV_H
+
+# ifndef HAVE_ICONV
+# define __need_size_t
+# include <stdlib.h> /* For size_t */
+
+typedef void *gww_iconv_t;
+
+extern gww_iconv_t gww_iconv_open(const char *toenc,const char *fromenc);
+extern void gww_iconv_close( gww_iconv_t cd);
+extern size_t gww_iconv( gww_iconv_t cd,
+ char **inbuf, size_t *inlen,
+ char **outbuf, size_t *outlen);
+
+#define iconv_t gww_iconv_t
+#define iconv_open gww_iconv_open
+#define iconv_close gww_iconv_close
+#define iconv gww_iconv
+
+# endif /* HAVE_ICONV */
+#endif /* _GWWICONV_H */
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/ustring.h b/dviware/dvisvgm/libs/ff-woff/inc/ustring.h
new file mode 100644
index 0000000000..3e3f1b891c
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/ustring.h
@@ -0,0 +1,212 @@
+/* Copyright (C) 2000-2012 by George Williams */
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _UCHAR_H
+# define _UCHAR_H
+#include <stdarg.h>
+#include <string.h>
+#include <memory.h>
+#include <basics.h>
+#include <charset.h>
+
+extern char *copy(const char *);
+extern char *copyn(const char *,long);
+extern unichar_t *u_copy(const unichar_t*);
+extern unichar_t *u_copyn(const unichar_t*, long);
+extern unichar_t *u_copynallocm(const unichar_t *pt, long n, long m);
+extern unichar_t *uc_copyn(const char *, int);
+extern unichar_t *uc_copy(const char*);
+extern unichar_t *u_concat(const unichar_t*,const unichar_t*);
+extern char *cu_copyn(const unichar_t *pt,int len);
+extern char *cu_copy(const unichar_t*);
+
+extern long uc_strcmp(const unichar_t *,const char *);
+extern long u_strcmp(const unichar_t *, const unichar_t *);
+extern long uc_strncmp(const unichar_t *,const char *,int);
+extern long u_strncmp(const unichar_t *, const unichar_t *,int);
+extern long uc_strmatch(const unichar_t *,const char *);
+extern long uc_strnmatch(const unichar_t *,const char *,int);
+extern long u_strnmatch(const unichar_t *str1, const unichar_t *str2, int len);
+extern long u_strmatch(const unichar_t *, const unichar_t *);
+extern int strmatch(const char *,const char *);
+extern int strnmatch(const char *str1, const char *str2, int n);
+extern void uc_strcpy(unichar_t *, const char *);
+extern void cu_strcpy(char *, const unichar_t *);
+extern void u_strcpy(unichar_t *, const unichar_t *);
+extern void u_strncpy(unichar_t *, const unichar_t *,int);
+extern void cu_strncpy(char *to, const unichar_t *from, int len);
+extern void uc_strncpy(unichar_t *to, const char *from, int len);
+/**
+ * Like strncpy but passing a null 'from' will simply null terminate
+ * to[0] to give a blank result rather than a crash.
+ */
+extern char *cc_strncpy(char *to, const char *from, int len);
+extern void uc_strcat(unichar_t *, const char *);
+extern void uc_strncat(unichar_t *, const char *,int len);
+extern void cu_strcat(char *, const unichar_t *);
+extern void cu_strncat(char *, const unichar_t *,int len);
+extern void u_strcat(unichar_t *, const unichar_t *);
+extern void u_strncat(unichar_t *, const unichar_t *, int len);
+extern int u_strlen(const unichar_t *);
+/**
+ * Like strlen() but passing a null pointer gets a 0 length
+ */
+extern int c_strlen(const char *);
+extern unichar_t *u_strchr(const unichar_t *,unichar_t);
+extern unichar_t *u_strrchr(const unichar_t *,unichar_t);
+extern unichar_t *uc_strstr(const unichar_t *,const char *);
+extern unichar_t *u_strstr(const unichar_t *,const unichar_t *);
+extern unichar_t *uc_strstrmatch(const unichar_t *,const char *);
+extern unichar_t *u_strstrmatch(const unichar_t *,const unichar_t *);
+extern char * strstrmatch(const char *,const char *);
+
+extern char *u_to_c(const unichar_t *);
+extern unichar_t *c_to_u(const char *);
+
+extern unsigned long u_strtoul(const unichar_t *,unichar_t **,int);
+extern long u_strtol(const unichar_t *,unichar_t **,int);
+extern double u_strtod(const unichar_t *,unichar_t **);
+
+/*
+ * Convert the integer 'v' to a string and return it.
+ * You do not own the return value, it is an internal buffer
+ * so you should copy it before using the function again
+ */
+extern char* c_itostr( int v );
+
+extern char *strstart(const char *initial,const char *full);
+extern char *strstartmatch(const char *initial,const char *full);
+extern unichar_t *u_strstartmatch(const unichar_t *initial, const unichar_t *full);
+extern unichar_t *cu_strstartmatch(const char *initial, const unichar_t *full);
+
+#define utf82u_strncpy utf82U_strncpy
+extern int32 utf8_ildb(const char **utf8_text);
+#define UTF8IDPB_NOZERO 1 /* Allow for 0 encoded as a non-zero utf8 0xc0:0x80 char */
+#define UTF8IDPB_OLDLIMIT 2 /* Today's utf8 is agreed to be limited to {0..0x10FFFF} */
+#define UTF8IDPB_UCS2 8 /* Encode {0...0xffff} as 16bit ucs2 type values */
+#define UTF8IDPB_UTF16 16 /* Encode {0...0x10ffff} as 16bit utf16 type values */
+#define UTF8IDPB_UTF32 32 /* Encode {0...0x10ffff} as 32bit utf32 type values */
+extern char *utf8_idpb(char *utf8_text,uint32 ch,int flags);
+extern char *utf8_db(char *utf8_text);
+extern char *utf8_ib(char *utf8_text);
+extern int utf8_valid(const char *str);
+extern void utf8_truncatevalid(char *str);
+extern char *latin1_2_utf8_strcpy(char *utf8buf,const char *lbuf);
+extern char *latin1_2_utf8_copy(const char *lbuf);
+extern char *utf8_2_latin1_copy(const char *utf8buf);
+extern long utf8_strlen(const char *utf8_str); /* Count how many characters in the string NOT bytes */
+extern long utf82u_strlen(const char *utf8_str); /* Count how many shorts needed to represent in UCS2 */
+extern void utf8_strncpy(register char *to, const char *from, int len); /* copy n characters NOT bytes */
+extern char *def2utf8_copy(const char *from);
+extern char *utf82def_copy(const char *ufrom);
+extern char *utf8_strchr(const char *utf8_str, int search_char);
+
+extern unichar_t *utf82u_strncpy(unichar_t *ubuf,const char *utf8buf,int len);
+extern unichar_t *utf82u_strcpy(unichar_t *ubuf,const char *utf8buf);
+extern void utf82u_strcat(unichar_t *ubuf,const char *utf8buf);
+extern unichar_t *utf82u_copyn(const char *utf8buf,int len);
+extern unichar_t *utf82u_copy(const char *utf8buf);
+extern char *u2utf8_strcpy(char *utf8buf,const unichar_t *ubuf);
+extern char *u2utf8_copy(const unichar_t *ubuf);
+extern char *u2utf8_copyn(const unichar_t *ubuf,int len);
+extern unichar_t *encoding2u_strncpy(unichar_t *uto, const char *from, int n, enum encoding cs);
+extern char *u2encoding_strncpy(char *to, const unichar_t *ufrom, size_t n, enum encoding cs);
+extern unichar_t *def2u_strncpy(unichar_t *uto, const char *from, size_t n);
+extern char *u2def_strncpy(char *to, const unichar_t *ufrom, size_t n);
+extern unichar_t *def2u_copy(const char *from);
+extern char *u2def_copy(const unichar_t *ufrom);
+
+extern int uAllAscii(const unichar_t *str);
+extern int AllAscii(const char *);
+extern char *StripToASCII(const char *utf8_str);
+
+extern char *copytolower(const char *);
+extern int endswith(const char *haystack,const char *needle);
+extern int endswithi(const char *haystack,const char *needle);
+extern int endswithi_partialExtension( const char *haystack,const char *needle);
+
+/**
+ * Remove trailing \n or \r from the given string. No memory
+ * allocations are performed, null is injected over these terminators
+ * to trim the string.
+ *
+ * This function is designed to be impotent if called with a string
+ * that does not end with \n or \r. ie, you don't need to redundantly
+ * check if there is a newline at the end of string and not call here
+ * if there is no newline. You can just call here with any string and
+ * be assured that afterwards there will be no trailing newline or
+ * carrage return character found at the end of the string pointed to
+ * by 'p'.
+ */
+extern char* chomp( char* p );
+
+/**
+ * Return true if the haystack plain string ends with the string
+ * needle. Return 0 otherwise.
+ *
+ * Needles which are larger than the haystack are handled.
+ *
+ * No new strings are allocated, freed, or returned.
+ */
+int endswith(const char *haystack,const char *needle);
+
+/**
+ * Return true if the haystack unicode string ends with the string needle.
+ * Return 0 otherwise.
+ *
+ * Needles which are larger than the haystack are handled.
+ *
+ * No new strings are allocated, freed, or returned.
+ */
+extern int u_endswith(const unichar_t *haystack,const unichar_t *needle);
+
+extern int u_startswith(const unichar_t *haystack,const unichar_t *needle);
+extern int uc_startswith(const unichar_t *haystack,const char* needle);
+
+/**
+ * In the string 's' replace all occurances of 'orig' with 'replacement'.
+ * If you set free_s to true then the string 's' will be freed by this function.
+ * Normally you want to set free_s to 0 to avoid that. The case you will want to
+ * use free_s to 1 is chaining many calls like:
+ *
+ * char* s = copy( input );
+ * s = str_replace_all( s, "foo", "bar", 1 );
+ * s = str_replace_all( s, "baz", "gah", 1 );
+ * // use s
+ * free(s);
+ * // no leaks in the above.
+ *
+ * Note that 's' is first copied before the first call to replace_all in the above
+ * so it can be freed without concern. This also allows the ordering of replace_all
+ * in the above to be changed without having to worry about the free_s flag.
+ */
+extern char* str_replace_all( char* s, char* orig, char* replacement, int free_s );
+
+
+int toint( char* v );
+char* tostr( int v );
+
+#endif
diff --git a/dviware/dvisvgm/libs/ff-woff/inc/utype.h b/dviware/dvisvgm/libs/ff-woff/inc/utype.h
new file mode 100644
index 0000000000..d977213ff2
--- /dev/null
+++ b/dviware/dvisvgm/libs/ff-woff/inc/utype.h
@@ -0,0 +1,155 @@
+#ifndef _UTYPE_H
+#define _UTYPE_H
+/* Copyright: 2001 George Williams */
+/* License: BSD-3-clause */
+/* Contributions: Joe Da Silva */
+
+/* This file was generated using the program 'makeutype' */
+
+#include <ctype.h> /* Include here so we can control it. If a system header includes it later bad things happen */
+#include <basics.h> /* Include here so we can use pre-defined int types to correctly size constant data arrays. */
+#ifdef tolower
+# undef tolower
+#endif
+#ifdef toupper
+# undef toupper
+#endif
+#ifdef islower
+# undef islower
+#endif
+#ifdef isupper
+# undef isupper
+#endif
+#ifdef isalpha
+# undef isalpha
+#endif
+#ifdef isdigit
+# undef isdigit
+#endif
+#ifdef isalnum
+# undef isalnum
+#endif
+#ifdef isspace
+# undef isspace
+#endif
+#ifdef ispunct
+# undef ispunct
+#endif
+#ifdef ishexdigit
+# undef ishexdigit
+#endif
+
+extern const unsigned short ____tolower[];
+extern const unsigned short ____toupper[];
+extern const unsigned short ____totitle[];
+extern const unsigned short ____tomirror[];
+extern const unsigned char ____digitval[];
+
+/* utype[] holds binary flags used for features of each unicode.org character */
+#define ____L 0x1
+#define ____U 0x2
+#define ____TITLE 0x4
+#define ____D 0x8
+#define ____S 0x10
+#define ____P 0x20
+#define ____X 0x40
+#define ____ZW 0x80
+#define ____L2R 0x100
+#define ____R2L 0x200
+#define ____ENUM 0x400
+#define ____ANUM 0x800
+#define ____ENS 0x1000
+#define ____CS 0x2000
+#define ____ENT 0x4000
+#define ____COMBINE 0x8000
+#define ____BB 0x10000
+#define ____BA 0x20000
+#define ____NS 0x40000
+#define ____NE 0x80000
+#define ____UB 0x100000
+#define ____NB 0x8000000
+#define ____AL 0x200000
+#define ____ID 0x400000
+#define ____INITIAL 0x800000
+#define ____MEDIAL 0x1000000
+#define ____FINAL 0x2000000
+#define ____ISOLATED 0x4000000
+#define ____DECOMPNORM 0x10000000
+
+#define islower(ch) (____utype[(ch)+1]&____L)
+#define isupper(ch) (____utype[(ch)+1]&____U)
+#define istitle(ch) (____utype[(ch)+1]&____TITLE)
+#define isalpha(ch) (____utype[(ch)+1]&(____L|____U|____TITLE|____AL))
+#define isdigit(ch) (____utype[(ch)+1]&____D)
+#define isalnum(ch) (____utype[(ch)+1]&(____L|____U|____TITLE|____AL|____D))
+#define isideographic(ch) (____utype[(ch)+1]&____ID)
+#define isideoalpha(ch) (____utype[(ch)+1]&(____ID|____L|____U|____TITLE|____AL))
+#define isspace(ch) (____utype[(ch)+1]&____S)
+#define ispunct(ch) (____utype[(ch)+1]&_____P)
+#define ishexdigit(ch) (____utype[(ch)+1]&____X)
+#define iszerowidth(ch) (____utype[(ch)+1]&____ZW)
+#define islefttoright(ch) (____utype[(ch)+1]&____L2R)
+#define isrighttoleft(ch) (____utype[(ch)+1]&____R2L)
+#define iseuronumeric(ch) (____utype[(ch)+1]&____ENUM)
+#define isarabnumeric(ch) (____utype[(ch)+1]&____ANUM)
+#define iseuronumsep(ch) (____utype[(ch)+1]&____ENS)
+#define iscommonsep(ch) (____utype[(ch)+1]&____CS)
+#define iseuronumterm(ch) (____utype[(ch)+1]&____ENT)
+#define iscombining(ch) (____utype[(ch)+1]&____COMBINE)
+#define isbreakbetweenok(ch1,ch2) (((____utype[(ch1)+1]&____BA) && !(____utype[(ch2)+1]&____NS)) || ((____utype[(ch2)+1]&____BB) && !(____utype[(ch1)+1]&____NE)) || (!(____utype[(ch2)+1]&____D) && ch1=='/'))
+#define isnobreak(ch) (____utype[(ch)+1]&____NB)
+#define isarabinitial(ch) (____utype[(ch)+1]&____INITIAL)
+#define isarabmedial(ch) (____utype[(ch)+1]&____MEDIAL)
+#define isarabfinal(ch) (____utype[(ch)+1]&____FINAL)
+#define isarabisolated(ch) (____utype[(ch)+1]&____ISOLATED)
+
+#define isdecompositionnormative(ch) (____utype[(ch)+1]&____DECOMPNORM)
+
+extern const uint32 ____utype[]; /* hold character type features for each Unicode.org defined character */
+
+/* utype2[] binary flags used for position/layout of each unicode.org character */
+#define ____COMBININGCLASS 0xff
+#define ____ABOVE 0x100
+#define ____BELOW 0x200
+#define ____OVERSTRIKE 0x400
+#define ____LEFT 0x800
+#define ____RIGHT 0x1000
+#define ____JOINS2 0x2000
+#define ____CENTERLEFT 0x4000
+#define ____CENTERRIGHT 0x8000
+#define ____CENTEREDOUTSIDE 0x10000
+#define ____OUTSIDE 0x20000
+#define ____LEFTEDGE 0x80000
+#define ____RIGHTEDGE 0x40000
+#define ____TOUCHING 0x100000
+#define ____COMBININGPOSMASK 0x1fff00
+#define ____NOPOSDATAGIVEN (uint32)(-1) /* -1 == no position data given */
+
+#define combiningclass(ch) (____utype2[(ch)+1]&____COMBININGCLASS)
+#define combiningposmask(ch) (____utype2[(ch)+1]&____COMBININGPOSMASK)
+
+extern const uint32 ____utype2[]; /* hold position boolean flags for each Unicode.org defined character */
+
+#define isunicodepointassigned(ch) (____codepointassigned[(ch)/32]&(1<<((ch)%32)))
+
+extern const uint32 ____codepointassigned[]; /* 1bit_boolean_flag x 32 = exists in Unicode.org character chart list. */
+
+#define tolower(ch) (____tolower[(ch)+1])
+#define toupper(ch) (____toupper[(ch)+1])
+#define totitle(ch) (____totitle[(ch)+1])
+#define tomirror(ch) (____tomirror[(ch)+1])
+#define tovalue(ch) (____digitval[(ch)+1])
+
+
+extern struct arabicforms {
+ unsigned short initial, medial, final, isolated;
+ unsigned int isletter: 1;
+ unsigned int joindual: 1;
+ unsigned int required_lig_with_alef: 1;
+} ArabicForms[256]; /* for chars 0x600-0x6ff, subtract 0x600 to use array */
+
+#define _SOFT_HYPHEN 0xad
+
+#define _DOUBLE_S 0xdf
+
+#endif
diff --git a/dviware/dvisvgm/libs/md5/Makefile.am b/dviware/dvisvgm/libs/md5/Makefile.am
new file mode 100644
index 0000000000..bb96948073
--- /dev/null
+++ b/dviware/dvisvgm/libs/md5/Makefile.am
@@ -0,0 +1,13 @@
+if USE_BUNDLED_MD5
+noinst_LIBRARIES = libmd5.a
+
+libmd5_a_SOURCES = md5.c md5.h
+AM_CXXFLAGS = -Wall
+
+md5.c: md5.h
+
+@CODE_COVERAGE_RULES@
+endif
+
+CLEANFILES = *.gcda *.gcno
+
diff --git a/dviware/dvisvgm/libs/md5/Makefile.in b/dviware/dvisvgm/libs/md5/Makefile.in
new file mode 100644
index 0000000000..2458bd1c00
--- /dev/null
+++ b/dviware/dvisvgm/libs/md5/Makefile.in
@@ -0,0 +1,649 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/md5
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libmd5_a_AR = $(AR) $(ARFLAGS)
+libmd5_a_LIBADD =
+am__libmd5_a_SOURCES_DIST = md5.c md5.h
+@USE_BUNDLED_MD5_TRUE@am_libmd5_a_OBJECTS = md5.$(OBJEXT)
+libmd5_a_OBJECTS = $(am_libmd5_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/md5.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libmd5_a_SOURCES)
+DIST_SOURCES = $(am__libmd5_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@USE_BUNDLED_MD5_TRUE@noinst_LIBRARIES = libmd5.a
+@USE_BUNDLED_MD5_TRUE@libmd5_a_SOURCES = md5.c md5.h
+@USE_BUNDLED_MD5_TRUE@AM_CXXFLAGS = -Wall
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/md5/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/md5/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libmd5.a: $(libmd5_a_OBJECTS) $(libmd5_a_DEPENDENCIES) $(EXTRA_libmd5_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libmd5.a
+ $(AM_V_AR)$(libmd5_a_AR) libmd5.a $(libmd5_a_OBJECTS) $(libmd5_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libmd5.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/md5.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/md5.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@USE_BUNDLED_MD5_TRUE@md5.c: md5.h
+
+@USE_BUNDLED_MD5_TRUE@@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/md5/md5.c b/dviware/dvisvgm/libs/md5/md5.c
new file mode 100644
index 0000000000..b235e17a56
--- /dev/null
+++ b/dviware/dvisvgm/libs/md5/md5.c
@@ -0,0 +1,291 @@
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
+ * MD5 Message-Digest Algorithm (RFC 1321).
+ *
+ * Homepage:
+ * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+ *
+ * Author:
+ * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
+ *
+ * This software was written by Alexander Peslyak in 2001. No copyright is
+ * claimed, and the software is hereby placed in the public domain.
+ * In case this attempt to disclaim copyright and place the software in the
+ * public domain is deemed null and void, then the software is
+ * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
+ * general public under the following terms:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * There's ABSOLUTELY NO WARRANTY, express or implied.
+ *
+ * (This is a heavily cut-down "BSD license".)
+ *
+ * This differs from Colin Plumb's older public domain implementation in that
+ * no exactly 32-bit integer data type is required (any 32-bit or wider
+ * unsigned integer data type will do), there's no compile-time endianness
+ * configuration, and the function prototypes match OpenSSL's. No code from
+ * Colin Plumb's implementation has been reused; this comment merely compares
+ * the properties of the two independent implementations.
+ *
+ * The primary goals of this implementation are portability and ease of use.
+ * It is meant to be fast, but not as fast as possible. Some known
+ * optimizations are not included to reduce source code size and avoid
+ * compile-time configuration.
+ */
+
+#ifndef HAVE_OPENSSL
+
+#include <string.h>
+
+#include "md5.h"
+
+/*
+ * The basic MD5 functions.
+ *
+ * F and G are optimized compared to their RFC 1321 definitions for
+ * architectures that lack an AND-NOT instruction, just like in Colin Plumb's
+ * implementation.
+ */
+#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
+#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y))))
+#define H(x, y, z) (((x) ^ (y)) ^ (z))
+#define H2(x, y, z) ((x) ^ ((y) ^ (z)))
+#define I(x, y, z) ((y) ^ ((x) | ~(z)))
+
+/*
+ * The MD5 transformation for all four rounds.
+ */
+#define STEP(f, a, b, c, d, x, t, s) \
+ (a) += f((b), (c), (d)) + (x) + (t); \
+ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
+ (a) += (b);
+
+/*
+ * SET reads 4 input bytes in little-endian byte order and stores them in a
+ * properly aligned word in host byte order.
+ *
+ * The check for little-endian architectures that tolerate unaligned memory
+ * accesses is just an optimization. Nothing will break if it fails to detect
+ * a suitable architecture.
+ *
+ * Unfortunately, this optimization may be a C strict aliasing rules violation
+ * if the caller's data buffer has effective type that cannot be aliased by
+ * MD5_u32plus. In practice, this problem may occur if these MD5 routines are
+ * inlined into a calling function, or with future and dangerously advanced
+ * link-time optimizations. For the time being, keeping these MD5 routines in
+ * their own translation unit avoids the problem.
+ */
+#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
+#define SET(n) \
+ (*(MD5_u32plus *)&ptr[(n) * 4])
+#define GET(n) \
+ SET(n)
+#else
+#define SET(n) \
+ (ctx->block[(n)] = \
+ (MD5_u32plus)ptr[(n) * 4] | \
+ ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
+ ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
+ ((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
+#define GET(n) \
+ (ctx->block[(n)])
+#endif
+
+/*
+ * This processes one or more 64-byte data blocks, but does NOT update the bit
+ * counters. There are no alignment requirements.
+ */
+static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
+{
+ const unsigned char *ptr;
+ MD5_u32plus a, b, c, d;
+ MD5_u32plus saved_a, saved_b, saved_c, saved_d;
+
+ ptr = (const unsigned char *)data;
+
+ a = ctx->a;
+ b = ctx->b;
+ c = ctx->c;
+ d = ctx->d;
+
+ do {
+ saved_a = a;
+ saved_b = b;
+ saved_c = c;
+ saved_d = d;
+
+/* Round 1 */
+ STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
+ STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
+ STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
+ STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
+ STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
+ STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
+ STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
+ STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
+ STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
+ STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
+ STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
+ STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
+ STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
+ STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
+ STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
+ STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
+
+/* Round 2 */
+ STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
+ STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
+ STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
+ STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
+ STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
+ STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
+ STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
+ STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
+ STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
+ STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
+ STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
+ STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
+ STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
+ STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
+ STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
+ STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
+
+/* Round 3 */
+ STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
+ STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
+ STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
+ STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
+ STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
+ STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
+ STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
+ STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
+ STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
+ STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
+ STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
+ STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
+ STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
+ STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
+ STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
+ STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
+
+/* Round 4 */
+ STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
+ STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
+ STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
+ STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
+ STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
+ STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
+ STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
+ STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
+ STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
+ STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
+ STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
+ STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
+ STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
+ STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
+ STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
+ STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
+
+ a += saved_a;
+ b += saved_b;
+ c += saved_c;
+ d += saved_d;
+
+ ptr += 64;
+ } while (size -= 64);
+
+ ctx->a = a;
+ ctx->b = b;
+ ctx->c = c;
+ ctx->d = d;
+
+ return ptr;
+}
+
+void MD5_Init(MD5_CTX *ctx)
+{
+ ctx->a = 0x67452301;
+ ctx->b = 0xefcdab89;
+ ctx->c = 0x98badcfe;
+ ctx->d = 0x10325476;
+
+ ctx->lo = 0;
+ ctx->hi = 0;
+}
+
+void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
+{
+ MD5_u32plus saved_lo;
+ unsigned long used, available;
+
+ saved_lo = ctx->lo;
+ if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
+ ctx->hi++;
+ ctx->hi += size >> 29;
+
+ used = saved_lo & 0x3f;
+
+ if (used) {
+ available = 64 - used;
+
+ if (size < available) {
+ memcpy(&ctx->buffer[used], data, size);
+ return;
+ }
+
+ memcpy(&ctx->buffer[used], data, available);
+ data = (const unsigned char *)data + available;
+ size -= available;
+ body(ctx, ctx->buffer, 64);
+ }
+
+ if (size >= 64) {
+ data = body(ctx, data, size & ~(unsigned long)0x3f);
+ size &= 0x3f;
+ }
+
+ memcpy(ctx->buffer, data, size);
+}
+
+#define OUT(dst, src) \
+ (dst)[0] = (unsigned char)(src); \
+ (dst)[1] = (unsigned char)((src) >> 8); \
+ (dst)[2] = (unsigned char)((src) >> 16); \
+ (dst)[3] = (unsigned char)((src) >> 24);
+
+void MD5_Final(unsigned char *result, MD5_CTX *ctx)
+{
+ unsigned long used, available;
+
+ used = ctx->lo & 0x3f;
+
+ ctx->buffer[used++] = 0x80;
+
+ available = 64 - used;
+
+ if (available < 8) {
+ memset(&ctx->buffer[used], 0, available);
+ body(ctx, ctx->buffer, 64);
+ used = 0;
+ available = 64;
+ }
+
+ memset(&ctx->buffer[used], 0, available - 8);
+
+ ctx->lo <<= 3;
+ OUT(&ctx->buffer[56], ctx->lo)
+ OUT(&ctx->buffer[60], ctx->hi)
+
+ body(ctx, ctx->buffer, 64);
+
+ OUT(&result[0], ctx->a)
+ OUT(&result[4], ctx->b)
+ OUT(&result[8], ctx->c)
+ OUT(&result[12], ctx->d)
+
+ memset(ctx, 0, sizeof(*ctx));
+}
+
+#endif
diff --git a/dviware/dvisvgm/libs/md5/md5.h b/dviware/dvisvgm/libs/md5/md5.h
new file mode 100644
index 0000000000..4e72a4abfb
--- /dev/null
+++ b/dviware/dvisvgm/libs/md5/md5.h
@@ -0,0 +1,51 @@
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
+ * MD5 Message-Digest Algorithm (RFC 1321).
+ *
+ * Homepage:
+ * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+ *
+ * Author:
+ * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
+ *
+ * This software was written by Alexander Peslyak in 2001. No copyright is
+ * claimed, and the software is hereby placed in the public domain.
+ * In case this attempt to disclaim copyright and place the software in the
+ * public domain is deemed null and void, then the software is
+ * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
+ * general public under the following terms:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * There's ABSOLUTELY NO WARRANTY, express or implied.
+ *
+ * See md5.c for more information.
+ */
+
+#ifndef _MD5_H
+#define _MD5_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Any 32-bit or wider unsigned integer data type will do */
+typedef unsigned int MD5_u32plus;
+
+typedef struct {
+ MD5_u32plus lo, hi;
+ MD5_u32plus a, b, c, d;
+ unsigned char buffer[64];
+ MD5_u32plus block[16];
+} MD5_CTX;
+
+extern void MD5_Init(MD5_CTX *ctx);
+extern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
+extern void MD5_Final(unsigned char *result, MD5_CTX *ctx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/dviware/dvisvgm/libs/potrace/Makefile.am b/dviware/dvisvgm/libs/potrace/Makefile.am
new file mode 100644
index 0000000000..c8949647f1
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/Makefile.am
@@ -0,0 +1,23 @@
+if !HAVE_POTRACE
+noinst_LIBRARIES = libpotrace.a
+libpotrace_a_SOURCES = \
+ auxiliary.h \
+ bitmap.h \
+ config.h \
+ curve.c \
+ curve.h \
+ decompose.c \
+ decompose.h \
+ lists.h \
+ potracelib.c \
+ potracelib.h \
+ progress.h \
+ trace.c \
+ trace.h
+
+AM_CFLAGS = -Wall -I$(srcdir)
+
+@CODE_COVERAGE_RULES@
+endif
+
+CLEANFILES = *.gcda *.gcno
diff --git a/dviware/dvisvgm/libs/potrace/Makefile.in b/dviware/dvisvgm/libs/potrace/Makefile.in
new file mode 100644
index 0000000000..b7e6c0967f
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/Makefile.in
@@ -0,0 +1,675 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/potrace
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libpotrace_a_AR = $(AR) $(ARFLAGS)
+libpotrace_a_LIBADD =
+am__libpotrace_a_SOURCES_DIST = auxiliary.h bitmap.h config.h curve.c \
+ curve.h decompose.c decompose.h lists.h potracelib.c \
+ potracelib.h progress.h trace.c trace.h
+@HAVE_POTRACE_FALSE@am_libpotrace_a_OBJECTS = curve.$(OBJEXT) \
+@HAVE_POTRACE_FALSE@ decompose.$(OBJEXT) potracelib.$(OBJEXT) \
+@HAVE_POTRACE_FALSE@ trace.$(OBJEXT)
+libpotrace_a_OBJECTS = $(am_libpotrace_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/curve.Po ./$(DEPDIR)/decompose.Po \
+ ./$(DEPDIR)/potracelib.Po ./$(DEPDIR)/trace.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libpotrace_a_SOURCES)
+DIST_SOURCES = $(am__libpotrace_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_POTRACE_FALSE@noinst_LIBRARIES = libpotrace.a
+@HAVE_POTRACE_FALSE@libpotrace_a_SOURCES = \
+@HAVE_POTRACE_FALSE@ auxiliary.h \
+@HAVE_POTRACE_FALSE@ bitmap.h \
+@HAVE_POTRACE_FALSE@ config.h \
+@HAVE_POTRACE_FALSE@ curve.c \
+@HAVE_POTRACE_FALSE@ curve.h \
+@HAVE_POTRACE_FALSE@ decompose.c \
+@HAVE_POTRACE_FALSE@ decompose.h \
+@HAVE_POTRACE_FALSE@ lists.h \
+@HAVE_POTRACE_FALSE@ potracelib.c \
+@HAVE_POTRACE_FALSE@ potracelib.h \
+@HAVE_POTRACE_FALSE@ progress.h \
+@HAVE_POTRACE_FALSE@ trace.c \
+@HAVE_POTRACE_FALSE@ trace.h
+
+@HAVE_POTRACE_FALSE@AM_CFLAGS = -Wall -I$(srcdir)
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/potrace/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/potrace/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libpotrace.a: $(libpotrace_a_OBJECTS) $(libpotrace_a_DEPENDENCIES) $(EXTRA_libpotrace_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libpotrace.a
+ $(AM_V_AR)$(libpotrace_a_AR) libpotrace.a $(libpotrace_a_OBJECTS) $(libpotrace_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libpotrace.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curve.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompose.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/potracelib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trace.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/curve.Po
+ -rm -f ./$(DEPDIR)/decompose.Po
+ -rm -f ./$(DEPDIR)/potracelib.Po
+ -rm -f ./$(DEPDIR)/trace.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/curve.Po
+ -rm -f ./$(DEPDIR)/decompose.Po
+ -rm -f ./$(DEPDIR)/potracelib.Po
+ -rm -f ./$(DEPDIR)/trace.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@HAVE_POTRACE_FALSE@@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/potrace/auxiliary.h b/dviware/dvisvgm/libs/potrace/auxiliary.h
new file mode 100644
index 0000000000..bb0c6e03cb
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/auxiliary.h
@@ -0,0 +1,80 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+/* This header file collects some general-purpose macros (and static
+ inline functions) that are used in various places. */
+
+#ifndef AUXILIARY_H
+#define AUXILIARY_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+
+/* ---------------------------------------------------------------------- */
+/* point arithmetic */
+
+#include "potracelib.h"
+
+struct point_s {
+ long x;
+ long y;
+};
+typedef struct point_s point_t;
+
+typedef potrace_dpoint_t dpoint_t;
+
+/* convert point_t to dpoint_t */
+static inline dpoint_t dpoint(point_t p) {
+ dpoint_t res;
+ res.x = p.x;
+ res.y = p.y;
+ return res;
+}
+
+/* range over the straight line segment [a,b] when lambda ranges over [0,1] */
+static inline dpoint_t interval(double lambda, dpoint_t a, dpoint_t b) {
+ dpoint_t res;
+
+ res.x = a.x + lambda * (b.x - a.x);
+ res.y = a.y + lambda * (b.y - a.y);
+ return res;
+}
+
+/* ---------------------------------------------------------------------- */
+/* some useful macros. Note: the "mod" macro works correctly for
+ negative a. Also note that the test for a>=n, while redundant,
+ speeds up the mod function by 70% in the average case (significant
+ since the program spends about 16% of its time here - or 40%
+ without the test). The "floordiv" macro returns the largest integer
+ <= a/n, and again this works correctly for negative a, as long as
+ a,n are integers and n>0. */
+
+/* integer arithmetic */
+
+static inline int mod(int a, int n) {
+ return a>=n ? a%n : a>=0 ? a : n-1-(-1-a)%n;
+}
+
+static inline int floordiv(int a, int n) {
+ return a>=0 ? a/n : -1-(-1-a)/n;
+}
+
+/* Note: the following work for integers and other numeric types. */
+#undef sign
+#undef abs
+#undef min
+#undef max
+#undef sq
+#undef cu
+#define sign(x) ((x)>0 ? 1 : (x)<0 ? -1 : 0)
+#define abs(a) ((a)>0 ? (a) : -(a))
+#define min(a,b) ((a)<(b) ? (a) : (b))
+#define max(a,b) ((a)>(b) ? (a) : (b))
+#define sq(a) ((a)*(a))
+#define cu(a) ((a)*(a)*(a))
+
+#endif /* AUXILIARY_H */
diff --git a/dviware/dvisvgm/libs/potrace/bitmap.h b/dviware/dvisvgm/libs/potrace/bitmap.h
new file mode 100644
index 0000000000..2e91ab1e7d
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/bitmap.h
@@ -0,0 +1,228 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef BITMAP_H
+#define BITMAP_H
+
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stddef.h>
+
+/* The bitmap type is defined in potracelib.h */
+#include "potracelib.h"
+
+/* The present file defines some convenient macros and static inline
+ functions for accessing bitmaps. Since they only produce inline
+ code, they can be conveniently shared by the library and frontends,
+ if desired */
+
+/* ---------------------------------------------------------------------- */
+/* some measurements */
+
+#define BM_WORDSIZE ((int)sizeof(potrace_word))
+#define BM_WORDBITS (8*BM_WORDSIZE)
+#define BM_HIBIT (((potrace_word)1)<<(BM_WORDBITS-1))
+#define BM_ALLBITS (~(potrace_word)0)
+
+/* macros for accessing pixel at index (x,y). U* macros omit the
+ bounds check. */
+
+#define bm_scanline(bm, y) ((bm)->map + (ptrdiff_t)(y)*(ptrdiff_t)(bm)->dy)
+#define bm_index(bm, x, y) (&bm_scanline(bm, y)[(x)/BM_WORDBITS])
+#define bm_mask(x) (BM_HIBIT >> ((x) & (BM_WORDBITS-1)))
+#define bm_range(x, a) ((int)(x) >= 0 && (int)(x) < (a))
+#define bm_safe(bm, x, y) (bm_range(x, (bm)->w) && bm_range(y, (bm)->h))
+#define BM_UGET(bm, x, y) ((*bm_index(bm, x, y) & bm_mask(x)) != 0)
+#define BM_USET(bm, x, y) (*bm_index(bm, x, y) |= bm_mask(x))
+#define BM_UCLR(bm, x, y) (*bm_index(bm, x, y) &= ~bm_mask(x))
+#define BM_UINV(bm, x, y) (*bm_index(bm, x, y) ^= bm_mask(x))
+#define BM_UPUT(bm, x, y, b) ((b) ? BM_USET(bm, x, y) : BM_UCLR(bm, x, y))
+#define BM_GET(bm, x, y) (bm_safe(bm, x, y) ? BM_UGET(bm, x, y) : 0)
+#define BM_SET(bm, x, y) (bm_safe(bm, x, y) ? BM_USET(bm, x, y) : 0)
+#define BM_CLR(bm, x, y) (bm_safe(bm, x, y) ? BM_UCLR(bm, x, y) : 0)
+#define BM_INV(bm, x, y) (bm_safe(bm, x, y) ? BM_UINV(bm, x, y) : 0)
+#define BM_PUT(bm, x, y, b) (bm_safe(bm, x, y) ? BM_UPUT(bm, x, y, b) : 0)
+
+/* calculate the size, in bytes, required for the data area of a
+ bitmap of the given dy and h. Assume h >= 0. Return -1 if the size
+ does not fit into the ptrdiff_t type. */
+static inline ptrdiff_t getsize(int dy, int h) {
+ ptrdiff_t size;
+
+ if (dy < 0) {
+ dy = -dy;
+ }
+
+ size = (ptrdiff_t)dy * (ptrdiff_t)h * (ptrdiff_t)BM_WORDSIZE;
+
+ /* check for overflow error */
+ if (size < 0 || (h != 0 && dy != 0 && size / h / dy != BM_WORDSIZE)) {
+ return -1;
+ }
+
+ return size;
+}
+
+/* return the size, in bytes, of the data area of the bitmap. Return
+ -1 if the size does not fit into the ptrdiff_t type; however, this
+ cannot happen if the bitmap is well-formed, i.e., if created with
+ bm_new or bm_dup. */
+static inline ptrdiff_t bm_size(const potrace_bitmap_t *bm) {
+ return getsize(bm->dy, bm->h);
+}
+
+/* calculate the base address of the bitmap data. Assume that the
+ bitmap is well-formed, i.e., its size fits into the ptrdiff_t type.
+ This is the case if created with bm_new or bm_dup. The base address
+ may differ from bm->map if dy is negative */
+static inline potrace_word *bm_base(const potrace_bitmap_t *bm) {
+ int dy = bm->dy;
+
+ if (dy >= 0 || bm->h == 0) {
+ return bm->map;
+ } else {
+ return bm_scanline(bm, bm->h - 1);
+ }
+}
+
+/* free the given bitmap. Leaves errno untouched. */
+static inline void bm_free(potrace_bitmap_t *bm) {
+ if (bm && bm->map) {
+ free(bm_base(bm));
+ }
+ free(bm);
+}
+
+/* return new bitmap initialized to 0. NULL with errno on error.
+ Assumes w, h >= 0. */
+static inline potrace_bitmap_t *bm_new(int w, int h) {
+ potrace_bitmap_t *bm;
+ int dy = w == 0 ? 0 : (w - 1) / BM_WORDBITS + 1;
+ ptrdiff_t size;
+
+ size = getsize(dy, h);
+ if (size < 0) {
+ errno = ENOMEM;
+ return NULL;
+ }
+ if (size == 0) {
+ size = 1; /* make sure calloc() doesn't return NULL */
+ }
+
+ bm = (potrace_bitmap_t *) malloc(sizeof(potrace_bitmap_t));
+ if (!bm) {
+ return NULL;
+ }
+ bm->w = w;
+ bm->h = h;
+ bm->dy = dy;
+ bm->map = (potrace_word *) calloc(1, size);
+ if (!bm->map) {
+ free(bm);
+ return NULL;
+ }
+ return bm;
+}
+
+/* clear the given bitmap. Set all bits to c. Assumes a well-formed
+ bitmap. */
+static inline void bm_clear(potrace_bitmap_t *bm, int c) {
+ /* Note: if the bitmap was created with bm_new, then it is
+ guaranteed that size will fit into the ptrdiff_t type. */
+ ptrdiff_t size = bm_size(bm);
+ memset(bm_base(bm), c ? -1 : 0, size);
+}
+
+/* duplicate the given bitmap. Return NULL on error with errno
+ set. Assumes a well-formed bitmap. */
+static inline potrace_bitmap_t *bm_dup(const potrace_bitmap_t *bm) {
+ potrace_bitmap_t *bm1 = bm_new(bm->w, bm->h);
+ int y;
+
+ if (!bm1) {
+ return NULL;
+ }
+ for (y=0; y < bm->h; y++) {
+ memcpy(bm_scanline(bm1, y), bm_scanline(bm, y), (size_t)bm1->dy * (size_t)BM_WORDSIZE);
+ }
+ return bm1;
+}
+
+/* invert the given bitmap. */
+static inline void bm_invert(potrace_bitmap_t *bm) {
+ int dy = bm->dy;
+ int y;
+ int i;
+ potrace_word *p;
+
+ if (dy < 0) {
+ dy = -dy;
+ }
+
+ for (y=0; y < bm->h; y++) {
+ p = bm_scanline(bm, y);
+ for (i=0; i < dy; i++) {
+ p[i] ^= BM_ALLBITS;
+ }
+ }
+}
+
+/* turn the given bitmap upside down. This does not move the bitmap
+ data or change the bm_base() address. */
+static inline void bm_flip(potrace_bitmap_t *bm) {
+ int dy = bm->dy;
+
+ if (bm->h == 0 || bm->h == 1) {
+ return;
+ }
+
+ bm->map = bm_scanline(bm, bm->h - 1);
+ bm->dy = -dy;
+}
+
+/* resize the bitmap to the given new height. The bitmap data remains
+ bottom-aligned (truncated at the top) when dy >= 0 and top-aligned
+ (truncated at the bottom) when dy < 0. Return 0 on success, or 1 on
+ error with errno set. If the new height is <= the old one, no error
+ should occur. If the new height is larger, the additional bitmap
+ data is *not* initialized. */
+static inline int bm_resize(potrace_bitmap_t *bm, int h) {
+ int dy = bm->dy;
+ ptrdiff_t newsize;
+ potrace_word *newmap;
+
+ if (dy < 0) {
+ bm_flip(bm);
+ }
+
+ newsize = getsize(dy, h);
+ if (newsize < 0) {
+ errno = ENOMEM;
+ goto error;
+ }
+ if (newsize == 0) {
+ newsize = 1; /* make sure realloc() doesn't return NULL */
+ }
+
+ newmap = (potrace_word *)realloc(bm->map, newsize);
+ if (newmap == NULL) {
+ goto error;
+ }
+ bm->map = newmap;
+ bm->h = h;
+
+ if (dy < 0) {
+ bm_flip(bm);
+ }
+ return 0;
+
+ error:
+ if (dy < 0) {
+ bm_flip(bm);
+ }
+ return 1;
+}
+
+#endif /* BITMAP_H */
diff --git a/dviware/dvisvgm/libs/potrace/config.h b/dviware/dvisvgm/libs/potrace/config.h
new file mode 100644
index 0000000000..2d3e609c13
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/config.h
@@ -0,0 +1,5 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+#define VERSION "1.15"
+#define HAVE_INTTYPES_H 1
+#endif
diff --git a/dviware/dvisvgm/libs/potrace/curve.c b/dviware/dvisvgm/libs/potrace/curve.c
new file mode 100644
index 0000000000..0f41555958
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/curve.c
@@ -0,0 +1,112 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+/* private part of the path and curve data structures */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "lists.h"
+#include "curve.h"
+
+#define SAFE_CALLOC(var, n, typ) \
+ if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error
+
+/* ---------------------------------------------------------------------- */
+/* allocate and free path objects */
+
+path_t *path_new(void) {
+ path_t *p = NULL;
+ privpath_t *priv = NULL;
+
+ SAFE_CALLOC(p, 1, path_t);
+ memset(p, 0, sizeof(path_t));
+ SAFE_CALLOC(priv, 1, privpath_t);
+ memset(priv, 0, sizeof(privpath_t));
+ p->priv = priv;
+ return p;
+
+ calloc_error:
+ free(p);
+ free(priv);
+ return NULL;
+}
+
+/* free the members of the given curve structure. Leave errno unchanged. */
+static void privcurve_free_members(privcurve_t *curve) {
+ free(curve->tag);
+ free(curve->c);
+ free(curve->vertex);
+ free(curve->alpha);
+ free(curve->alpha0);
+ free(curve->beta);
+}
+
+/* free a path. Leave errno untouched. */
+void path_free(path_t *p) {
+ if (p) {
+ if (p->priv) {
+ free(p->priv->pt);
+ free(p->priv->lon);
+ free(p->priv->sums);
+ free(p->priv->po);
+ privcurve_free_members(&p->priv->curve);
+ privcurve_free_members(&p->priv->ocurve);
+ }
+ free(p->priv);
+ /* do not free p->fcurve ! */
+ }
+ free(p);
+}
+
+/* free a pathlist, leaving errno untouched. */
+void pathlist_free(path_t *plist) {
+ path_t *p;
+
+ list_forall_unlink(p, plist) {
+ path_free(p);
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* initialize and finalize curve structures */
+
+typedef dpoint_t dpoint3_t[3];
+
+/* initialize the members of the given curve structure to size m.
+ Return 0 on success, 1 on error with errno set. */
+int privcurve_init(privcurve_t *curve, int n) {
+ memset(curve, 0, sizeof(privcurve_t));
+ curve->n = n;
+ SAFE_CALLOC(curve->tag, n, int);
+ SAFE_CALLOC(curve->c, n, dpoint3_t);
+ SAFE_CALLOC(curve->vertex, n, dpoint_t);
+ SAFE_CALLOC(curve->alpha, n, double);
+ SAFE_CALLOC(curve->alpha0, n, double);
+ SAFE_CALLOC(curve->beta, n, double);
+ return 0;
+
+ calloc_error:
+ free(curve->tag);
+ free(curve->c);
+ free(curve->vertex);
+ free(curve->alpha);
+ free(curve->alpha0);
+ free(curve->beta);
+ return 1;
+}
+
+/* copy private to public curve structure */
+void privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c) {
+ c->n = pc->n;
+ c->tag = pc->tag;
+ c->c = pc->c;
+}
+
diff --git a/dviware/dvisvgm/libs/potrace/curve.h b/dviware/dvisvgm/libs/potrace/curve.h
new file mode 100644
index 0000000000..00f042cc22
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/curve.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef CURVE_H
+#define CURVE_H
+
+#include "auxiliary.h"
+
+/* vertex is c[1] for tag=POTRACE_CORNER, and the intersection of
+ .c[-1][2]..c[0] and c[1]..c[2] for tag=POTRACE_CURVETO. alpha is only
+ defined for tag=POTRACE_CURVETO and is the alpha parameter of the curve:
+ .c[-1][2]..c[0] = alpha*(.c[-1][2]..vertex), and
+ c[2]..c[1] = alpha*(c[2]..vertex).
+ Beta is so that (.beta[i])[.vertex[i],.vertex[i+1]] = .c[i][2].
+*/
+
+struct privcurve_s {
+ int n; /* number of segments */
+ int *tag; /* tag[n]: POTRACE_CORNER or POTRACE_CURVETO */
+ dpoint_t (*c)[3]; /* c[n][i]: control points.
+ c[n][0] is unused for tag[n]=POTRACE_CORNER */
+ /* the remainder of this structure is special to privcurve, and is
+ used in EPS debug output and special EPS "short coding". These
+ fields are valid only if "alphacurve" is set. */
+ int alphacurve; /* have the following fields been initialized? */
+ dpoint_t *vertex; /* for POTRACE_CORNER, this equals c[1] */
+ double *alpha; /* only for POTRACE_CURVETO */
+ double *alpha0; /* "uncropped" alpha parameter - for debug output only */
+ double *beta;
+};
+typedef struct privcurve_s privcurve_t;
+
+struct sums_s {
+ double x;
+ double y;
+ double x2;
+ double xy;
+ double y2;
+};
+typedef struct sums_s sums_t;
+
+/* the path structure is filled in with information about a given path
+ as it is accumulated and passed through the different stages of the
+ Potrace algorithm. Backends only need to read the fcurve and fm
+ fields of this data structure, but debugging backends may read
+ other fields. */
+struct potrace_privpath_s {
+ int len;
+ point_t *pt; /* pt[len]: path as extracted from bitmap */
+ int *lon; /* lon[len]: (i,lon[i]) = longest straight line from i */
+
+ int x0, y0; /* origin for sums */
+ sums_t *sums; /* sums[len+1]: cache for fast summing */
+
+ int m; /* length of optimal polygon */
+ int *po; /* po[m]: optimal polygon */
+
+ privcurve_t curve; /* curve[m]: array of curve elements */
+ privcurve_t ocurve; /* ocurve[om]: array of curve elements */
+ privcurve_t *fcurve; /* final curve: this points to either curve or
+ ocurve. Do not free this separately. */
+};
+typedef struct potrace_privpath_s potrace_privpath_t;
+
+/* shorter names */
+typedef potrace_privpath_t privpath_t;
+typedef potrace_path_t path_t;
+
+path_t *path_new(void);
+void path_free(path_t *p);
+void pathlist_free(path_t *plist);
+int privcurve_init(privcurve_t *curve, int n);
+void privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c);
+
+#endif /* CURVE_H */
+
diff --git a/dviware/dvisvgm/libs/potrace/decompose.c b/dviware/dvisvgm/libs/potrace/decompose.c
new file mode 100644
index 0000000000..5439ad51f3
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/decompose.c
@@ -0,0 +1,521 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#include "potracelib.h"
+#include "curve.h"
+#include "lists.h"
+#include "bitmap.h"
+#include "decompose.h"
+#include "progress.h"
+
+/* ---------------------------------------------------------------------- */
+/* deterministically and efficiently hash (x,y) into a pseudo-random bit */
+
+static inline int detrand(int x, int y) {
+ unsigned int z;
+ static const unsigned char t[256] = {
+ /* non-linear sequence: constant term of inverse in GF(8),
+ mod x^8+x^4+x^3+x+1 */
+ 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,
+ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
+ 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,
+ 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
+ 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
+ 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
+ };
+
+ /* 0x04b3e375 and 0x05a8ef93 are chosen to contain every possible
+ 5-bit sequence */
+ z = ((0x04b3e375 * x) ^ y) * 0x05a8ef93;
+ z = t[z & 0xff] ^ t[(z>>8) & 0xff] ^ t[(z>>16) & 0xff] ^ t[(z>>24) & 0xff];
+ return z;
+}
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary bitmap manipulations */
+
+/* set the excess padding to 0 */
+static void bm_clearexcess(potrace_bitmap_t *bm) {
+ potrace_word mask;
+ int y;
+
+ if (bm->w % BM_WORDBITS != 0) {
+ mask = BM_ALLBITS << (BM_WORDBITS - (bm->w % BM_WORDBITS));
+ for (y=0; y<bm->h; y++) {
+ *bm_index(bm, bm->w, y) &= mask;
+ }
+ }
+}
+
+struct bbox_s {
+ int x0, x1, y0, y1; /* bounding box */
+};
+typedef struct bbox_s bbox_t;
+
+/* clear the bm, assuming the bounding box is set correctly (faster
+ than clearing the whole bitmap) */
+static void clear_bm_with_bbox(potrace_bitmap_t *bm, bbox_t *bbox) {
+ int imin = (bbox->x0 / BM_WORDBITS);
+ int imax = ((bbox->x1 + BM_WORDBITS-1) / BM_WORDBITS);
+ int i, y;
+
+ for (y=bbox->y0; y<bbox->y1; y++) {
+ for (i=imin; i<imax; i++) {
+ bm_scanline(bm, y)[i] = 0;
+ }
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary functions */
+
+/* return the "majority" value of bitmap bm at intersection (x,y). We
+ assume that the bitmap is balanced at "radius" 1. */
+static int majority(potrace_bitmap_t *bm, int x, int y) {
+ int i, a, ct;
+
+ for (i=2; i<5; i++) { /* check at "radius" i */
+ ct = 0;
+ for (a=-i+1; a<=i-1; a++) {
+ ct += BM_GET(bm, x+a, y+i-1) ? 1 : -1;
+ ct += BM_GET(bm, x+i-1, y+a-1) ? 1 : -1;
+ ct += BM_GET(bm, x+a-1, y-i) ? 1 : -1;
+ ct += BM_GET(bm, x-i, y+a) ? 1 : -1;
+ }
+ if (ct>0) {
+ return 1;
+ } else if (ct<0) {
+ return 0;
+ }
+ }
+ return 0;
+}
+
+/* ---------------------------------------------------------------------- */
+/* decompose image into paths */
+
+/* efficiently invert bits [x,infty) and [xa,infty) in line y. Here xa
+ must be a multiple of BM_WORDBITS. */
+static void xor_to_ref(potrace_bitmap_t *bm, int x, int y, int xa) {
+ int xhi = x & -BM_WORDBITS;
+ int xlo = x & (BM_WORDBITS-1); /* = x % BM_WORDBITS */
+ int i;
+
+ if (xhi<xa) {
+ for (i = xhi; i < xa; i+=BM_WORDBITS) {
+ *bm_index(bm, i, y) ^= BM_ALLBITS;
+ }
+ } else {
+ for (i = xa; i < xhi; i+=BM_WORDBITS) {
+ *bm_index(bm, i, y) ^= BM_ALLBITS;
+ }
+ }
+ /* note: the following "if" is needed because x86 treats a<<b as
+ a<<(b&31). I spent hours looking for this bug. */
+ if (xlo) {
+ *bm_index(bm, xhi, y) ^= (BM_ALLBITS << (BM_WORDBITS - xlo));
+ }
+}
+
+/* a path is represented as an array of points, which are thought to
+ lie on the corners of pixels (not on their centers). The path point
+ (x,y) is the lower left corner of the pixel (x,y). Paths are
+ represented by the len/pt components of a path_t object (which
+ also stores other information about the path) */
+
+/* xor the given pixmap with the interior of the given path. Note: the
+ path must be within the dimensions of the pixmap. */
+static void xor_path(potrace_bitmap_t *bm, path_t *p) {
+ int xa, x, y, k, y1;
+
+ if (p->priv->len <= 0) { /* a path of length 0 is silly, but legal */
+ return;
+ }
+
+ y1 = p->priv->pt[p->priv->len-1].y;
+
+ xa = p->priv->pt[0].x & -BM_WORDBITS;
+ for (k=0; k<p->priv->len; k++) {
+ x = p->priv->pt[k].x;
+ y = p->priv->pt[k].y;
+
+ if (y != y1) {
+ /* efficiently invert the rectangle [x,xa] x [y,y1] */
+ xor_to_ref(bm, x, min(y,y1), xa);
+ y1 = y;
+ }
+ }
+}
+
+/* Find the bounding box of a given path. Path is assumed to be of
+ non-zero length. */
+static void setbbox_path(bbox_t *bbox, path_t *p) {
+ int x, y;
+ int k;
+
+ bbox->y0 = INT_MAX;
+ bbox->y1 = 0;
+ bbox->x0 = INT_MAX;
+ bbox->x1 = 0;
+
+ for (k=0; k<p->priv->len; k++) {
+ x = p->priv->pt[k].x;
+ y = p->priv->pt[k].y;
+
+ if (x < bbox->x0) {
+ bbox->x0 = x;
+ }
+ if (x > bbox->x1) {
+ bbox->x1 = x;
+ }
+ if (y < bbox->y0) {
+ bbox->y0 = y;
+ }
+ if (y > bbox->y1) {
+ bbox->y1 = y;
+ }
+ }
+}
+
+/* compute a path in the given pixmap, separating black from white.
+ Start path at the point (x0,x1), which must be an upper left corner
+ of the path. Also compute the area enclosed by the path. Return a
+ new path_t object, or NULL on error (note that a legitimate path
+ cannot have length 0). Sign is required for correct interpretation
+ of turnpolicies. */
+static path_t *findpath(potrace_bitmap_t *bm, int x0, int y0, int sign, int turnpolicy) {
+ int x, y, dirx, diry, len, size;
+ uint64_t area;
+ int c, d, tmp;
+ point_t *pt, *pt1;
+ path_t *p = NULL;
+
+ x = x0;
+ y = y0;
+ dirx = 0;
+ diry = -1;
+
+ len = size = 0;
+ pt = NULL;
+ area = 0;
+
+ while (1) {
+ /* add point to path */
+ if (len>=size) {
+ size += 100;
+ size = (int)(1.3 * size);
+ pt1 = (point_t *)realloc(pt, size * sizeof(point_t));
+ if (!pt1) {
+ goto error;
+ }
+ pt = pt1;
+ }
+ pt[len].x = x;
+ pt[len].y = y;
+ len++;
+
+ /* move to next point */
+ x += dirx;
+ y += diry;
+ area += x*diry;
+
+ /* path complete? */
+ if (x==x0 && y==y0) {
+ break;
+ }
+
+ /* determine next direction */
+ c = BM_GET(bm, x + (dirx+diry-1)/2, y + (diry-dirx-1)/2);
+ d = BM_GET(bm, x + (dirx-diry-1)/2, y + (diry+dirx-1)/2);
+
+ if (c && !d) { /* ambiguous turn */
+ if (turnpolicy == POTRACE_TURNPOLICY_RIGHT
+ || (turnpolicy == POTRACE_TURNPOLICY_BLACK && sign == '+')
+ || (turnpolicy == POTRACE_TURNPOLICY_WHITE && sign == '-')
+ || (turnpolicy == POTRACE_TURNPOLICY_RANDOM && detrand(x,y))
+ || (turnpolicy == POTRACE_TURNPOLICY_MAJORITY && majority(bm, x, y))
+ || (turnpolicy == POTRACE_TURNPOLICY_MINORITY && !majority(bm, x, y))) {
+ tmp = dirx; /* right turn */
+ dirx = diry;
+ diry = -tmp;
+ } else {
+ tmp = dirx; /* left turn */
+ dirx = -diry;
+ diry = tmp;
+ }
+ } else if (c) { /* right turn */
+ tmp = dirx;
+ dirx = diry;
+ diry = -tmp;
+ } else if (!d) { /* left turn */
+ tmp = dirx;
+ dirx = -diry;
+ diry = tmp;
+ }
+ } /* while this path */
+
+ /* allocate new path object */
+ p = path_new();
+ if (!p) {
+ goto error;
+ }
+
+ p->priv->pt = pt;
+ p->priv->len = len;
+ p->area = area <= INT_MAX ? area : INT_MAX; /* avoid overflow */
+ p->sign = sign;
+
+ return p;
+
+ error:
+ free(pt);
+ return NULL;
+}
+
+/* Give a tree structure to the given path list, based on "insideness"
+ testing. I.e., path A is considered "below" path B if it is inside
+ path B. The input pathlist is assumed to be ordered so that "outer"
+ paths occur before "inner" paths. The tree structure is stored in
+ the "childlist" and "sibling" components of the path_t
+ structure. The linked list structure is also changed so that
+ negative path components are listed immediately after their
+ positive parent. Note: some backends may ignore the tree
+ structure, others may use it e.g. to group path components. We
+ assume that in the input, point 0 of each path is an "upper left"
+ corner of the path, as returned by bm_to_pathlist. This makes it
+ easy to find an "interior" point. The bm argument should be a
+ bitmap of the correct size (large enough to hold all the paths),
+ and will be used as scratch space. Return 0 on success or -1 on
+ error with errno set. */
+
+static void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {
+ path_t *p, *p1;
+ path_t *heap, *heap1;
+ path_t *cur;
+ path_t *head;
+ path_t **plist_hook; /* for fast appending to linked list */
+ path_t **hook_in, **hook_out; /* for fast appending to linked list */
+ bbox_t bbox;
+
+ bm_clear(bm, 0);
+
+ /* save original "next" pointers */
+ list_forall(p, plist) {
+ p->sibling = p->next;
+ p->childlist = NULL;
+ }
+
+ heap = plist;
+
+ /* the heap holds a list of lists of paths. Use "childlist" field
+ for outer list, "next" field for inner list. Each of the sublists
+ is to be turned into a tree. This code is messy, but it is
+ actually fast. Each path is rendered exactly once. We use the
+ heap to get a tail recursive algorithm: the heap holds a list of
+ pathlists which still need to be transformed. */
+
+ while (heap) {
+ /* unlink first sublist */
+ cur = heap;
+ heap = heap->childlist;
+ cur->childlist = NULL;
+
+ /* unlink first path */
+ head = cur;
+ cur = cur->next;
+ head->next = NULL;
+
+ /* render path */
+ xor_path(bm, head);
+ setbbox_path(&bbox, head);
+
+ /* now do insideness test for each element of cur; append it to
+ head->childlist if it's inside head, else append it to
+ head->next. */
+ hook_in=&head->childlist;
+ hook_out=&head->next;
+ list_forall_unlink(p, cur) {
+ if (p->priv->pt[0].y <= bbox.y0) {
+ list_insert_beforehook(p, hook_out);
+ /* append the remainder of the list to hook_out */
+ *hook_out = cur;
+ break;
+ }
+ if (BM_GET(bm, p->priv->pt[0].x, p->priv->pt[0].y-1)) {
+ list_insert_beforehook(p, hook_in);
+ } else {
+ list_insert_beforehook(p, hook_out);
+ }
+ }
+
+ /* clear bm */
+ clear_bm_with_bbox(bm, &bbox);
+
+ /* now schedule head->childlist and head->next for further
+ processing */
+ if (head->next) {
+ head->next->childlist = heap;
+ heap = head->next;
+ }
+ if (head->childlist) {
+ head->childlist->childlist = heap;
+ heap = head->childlist;
+ }
+ }
+
+ /* copy sibling structure from "next" to "sibling" component */
+ p = plist;
+ while (p) {
+ p1 = p->sibling;
+ p->sibling = p->next;
+ p = p1;
+ }
+
+ /* reconstruct a new linked list ("next") structure from tree
+ ("childlist", "sibling") structure. This code is slightly messy,
+ because we use a heap to make it tail recursive: the heap
+ contains a list of childlists which still need to be
+ processed. */
+ heap = plist;
+ if (heap) {
+ heap->next = NULL; /* heap is a linked list of childlists */
+ }
+ plist = NULL;
+ plist_hook = &plist;
+ while (heap) {
+ heap1 = heap->next;
+ for (p=heap; p; p=p->sibling) {
+ /* p is a positive path */
+ /* append to linked list */
+ list_insert_beforehook(p, plist_hook);
+
+ /* go through its children */
+ for (p1=p->childlist; p1; p1=p1->sibling) {
+ /* append to linked list */
+ list_insert_beforehook(p1, plist_hook);
+ /* append its childlist to heap, if non-empty */
+ if (p1->childlist) {
+ list_append(path_t, heap1, p1->childlist);
+ }
+ }
+ }
+ heap = heap1;
+ }
+
+ return;
+}
+
+/* find the next set pixel in a row <= y. Pixels are searched first
+ left-to-right, then top-down. In other words, (x,y)<(x',y') if y>y'
+ or y=y' and x<x'. If found, return 0 and store pixel in
+ (*xp,*yp). Else return 1. Note that this function assumes that
+ excess bytes have been cleared with bm_clearexcess. */
+static int findnext(potrace_bitmap_t *bm, int *xp, int *yp) {
+ int x;
+ int y;
+ int x0;
+
+ x0 = (*xp) & ~(BM_WORDBITS-1);
+
+ for (y=*yp; y>=0; y--) {
+ for (x=x0; x<bm->w && x>=0; x+=(unsigned)BM_WORDBITS) {
+ if (*bm_index(bm, x, y)) {
+ while (!BM_GET(bm, x, y)) {
+ x++;
+ }
+ /* found */
+ *xp = x;
+ *yp = y;
+ return 0;
+ }
+ }
+ x0 = 0;
+ }
+ /* not found */
+ return 1;
+}
+
+/* Decompose the given bitmap into paths. Returns a linked list of
+ path_t objects with the fields len, pt, area, sign filled
+ in. Returns 0 on success with plistp set, or -1 on error with errno
+ set. */
+
+int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress) {
+ int x;
+ int y;
+ path_t *p;
+ path_t *plist = NULL; /* linked list of path objects */
+ path_t **plist_hook = &plist; /* used to speed up appending to linked list */
+ potrace_bitmap_t *bm1 = NULL;
+ int sign;
+
+ bm1 = bm_dup(bm);
+ if (!bm1) {
+ goto error;
+ }
+
+ /* be sure the byte padding on the right is set to 0, as the fast
+ pixel search below relies on it */
+ bm_clearexcess(bm1);
+
+ /* iterate through components */
+ x = 0;
+ y = bm1->h - 1;
+ while (findnext(bm1, &x, &y) == 0) {
+ /* calculate the sign by looking at the original */
+ sign = BM_GET(bm, x, y) ? '+' : '-';
+
+ /* calculate the path */
+ p = findpath(bm1, x, y+1, sign, param->turnpolicy);
+ if (p==NULL) {
+ goto error;
+ }
+
+ /* update buffered image */
+ xor_path(bm1, p);
+
+ /* if it's a turd, eliminate it, else append it to the list */
+ if (p->area <= param->turdsize) {
+ path_free(p);
+ } else {
+ list_insert_beforehook(p, plist_hook);
+ }
+
+ if (bm1->h > 0) { /* to be sure */
+ progress_update(1-y/(double)bm1->h, progress);
+ }
+ }
+
+ pathlist_to_tree(plist, bm1);
+ bm_free(bm1);
+ *plistp = plist;
+
+ progress_update(1.0, progress);
+
+ return 0;
+
+ error:
+ bm_free(bm1);
+ list_forall_unlink(p, plist) {
+ path_free(p);
+ }
+ return -1;
+}
diff --git a/dviware/dvisvgm/libs/potrace/decompose.h b/dviware/dvisvgm/libs/potrace/decompose.h
new file mode 100644
index 0000000000..a80a480ccb
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/decompose.h
@@ -0,0 +1,16 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef DECOMPOSE_H
+#define DECOMPOSE_H
+
+#include "potracelib.h"
+#include "progress.h"
+#include "curve.h"
+
+int bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress);
+
+#endif /* DECOMPOSE_H */
+
diff --git a/dviware/dvisvgm/libs/potrace/lists.h b/dviware/dvisvgm/libs/potrace/lists.h
new file mode 100644
index 0000000000..f76bdcde14
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/lists.h
@@ -0,0 +1,285 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef _PS_LISTS_H
+#define _PS_LISTS_H
+
+/* here we define some general list macros. Because they are macros,
+ they should work on any datatype with a "->next" component. Some of
+ them use a "hook". If elt and list are of type t* then hook is of
+ type t**. A hook stands for an insertion point in the list, i.e.,
+ either before the first element, or between two elements, or after
+ the last element. If an operation "sets the hook" for an element,
+ then the hook is set to just before the element. One can insert
+ something at a hook. One can also unlink at a hook: this means,
+ unlink the element just after the hook. By "to unlink", we mean the
+ element is removed from the list, but not deleted. Thus, it and its
+ components still need to be freed. */
+
+/* Note: these macros are somewhat experimental. Only the ones that
+ are actually *used* have been tested. So be careful to test any
+ that you use. Looking at the output of the preprocessor, "gcc -E"
+ (possibly piped though "indent"), might help too. Also: these
+ macros define some internal (local) variables that start with
+ "_". */
+
+/* we enclose macro definitions whose body consists of more than one
+ statement in MACRO_BEGIN and MACRO_END, rather than '{' and '}'. The
+ reason is that we want to be able to use the macro in a context
+ such as "if (...) macro(...); else ...". If we didn't use this obscure
+ trick, we'd have to omit the ";" in such cases. */
+
+#define MACRO_BEGIN do {
+#define MACRO_END } while (0)
+
+/* ---------------------------------------------------------------------- */
+/* macros for singly-linked lists */
+
+/* traverse list. At the end, elt is set to NULL. */
+#define list_forall(elt, list) for (elt=list; elt!=NULL; elt=elt->next)
+
+/* set elt to the first element of list satisfying boolean condition
+ c, or NULL if not found */
+#define list_find(elt, list, c) \
+ MACRO_BEGIN list_forall(elt, list) if (c) break; MACRO_END
+
+/* like forall, except also set hook for elt. */
+#define list_forall2(elt, list, hook) \
+ for (elt=list, hook=&list; elt!=NULL; hook=&elt->next, elt=elt->next)
+
+/* same as list_find, except also set hook for elt. */
+#define list_find2(elt, list, c, hook) \
+ MACRO_BEGIN list_forall2(elt, list, hook) if (c) break; MACRO_END
+
+/* same, except only use hook. */
+#define _list_forall_hook(list, hook) \
+ for (hook=&list; *hook!=NULL; hook=&(*hook)->next)
+
+/* same, except only use hook. Note: c may only refer to *hook, not elt. */
+#define _list_find_hook(list, c, hook) \
+ MACRO_BEGIN _list_forall_hook(list, hook) if (c) break; MACRO_END
+
+/* insert element after hook */
+#define list_insert_athook(elt, hook) \
+ MACRO_BEGIN elt->next = *hook; *hook = elt; MACRO_END
+
+/* insert element before hook */
+#define list_insert_beforehook(elt, hook) \
+ MACRO_BEGIN elt->next = *hook; *hook = elt; hook=&elt->next; MACRO_END
+
+/* unlink element after hook, let elt be unlinked element, or NULL.
+ hook remains. */
+#define list_unlink_athook(list, elt, hook) \
+ MACRO_BEGIN \
+ elt = hook ? *hook : NULL; if (elt) { *hook = elt->next; elt->next = NULL; }\
+ MACRO_END
+
+/* unlink the specific element, if it is in the list. Otherwise, set
+ elt to NULL */
+#define list_unlink(listtype, list, elt) \
+ MACRO_BEGIN \
+ listtype **_hook; \
+ _list_find_hook(list, *_hook==elt, _hook); \
+ list_unlink_athook(list, elt, _hook); \
+ MACRO_END
+
+/* prepend elt to list */
+#define list_prepend(list, elt) \
+ MACRO_BEGIN elt->next = list; list = elt; MACRO_END
+
+/* append elt to list. */
+#define list_append(listtype, list, elt) \
+ MACRO_BEGIN \
+ listtype **_hook; \
+ _list_forall_hook(list, _hook) {} \
+ list_insert_athook(elt, _hook); \
+ MACRO_END
+
+/* unlink the first element that satisfies the condition. */
+#define list_unlink_cond(listtype, list, elt, c) \
+ MACRO_BEGIN \
+ listtype **_hook; \
+ list_find2(elt, list, c, _hook); \
+ list_unlink_athook(list, elt, _hook); \
+ MACRO_END
+
+/* let elt be the nth element of the list, starting to count from 0.
+ Return NULL if out of bounds. */
+#define list_nth(elt, list, n) \
+ MACRO_BEGIN \
+ int _x; /* only evaluate n once */ \
+ for (_x=(n), elt=list; _x && elt; _x--, elt=elt->next) {} \
+ MACRO_END
+
+/* let elt be the nth element of the list, starting to count from 0.
+ Return NULL if out of bounds. */
+#define list_nth_hook(elt, list, n, hook) \
+ MACRO_BEGIN \
+ int _x; /* only evaluate n once */ \
+ for (_x=(n), elt=list, hook=&list; _x && elt; _x--, hook=&elt->next, elt=elt->next) {} \
+ MACRO_END
+
+/* set n to the length of the list */
+#define list_length(listtype, list, n) \
+ MACRO_BEGIN \
+ listtype *_elt; \
+ n=0; \
+ list_forall(_elt, list) \
+ n++; \
+ MACRO_END
+
+/* set n to the index of the first element satisfying cond, or -1 if
+ none found. Also set elt to the element, or NULL if none found. */
+#define list_index(list, n, elt, c) \
+ MACRO_BEGIN \
+ n=0; \
+ list_forall(elt, list) { \
+ if (c) break; \
+ n++; \
+ } \
+ if (!elt) \
+ n=-1; \
+ MACRO_END
+
+/* set n to the number of elements in the list that satisfy condition c */
+#define list_count(list, n, elt, c) \
+ MACRO_BEGIN \
+ n=0; \
+ list_forall(elt, list) { \
+ if (c) n++; \
+ } \
+ MACRO_END
+
+/* let elt be each element of the list, unlinked. At the end, set list=NULL. */
+#define list_forall_unlink(elt, list) \
+ for (elt=list; elt ? (list=elt->next, elt->next=NULL), 1 : 0; elt=list)
+
+/* reverse a list (efficient) */
+#define list_reverse(listtype, list) \
+ MACRO_BEGIN \
+ listtype *_list1=NULL, *elt; \
+ list_forall_unlink(elt, list) \
+ list_prepend(_list1, elt); \
+ list = _list1; \
+ MACRO_END
+
+/* insert the element ELT just before the first element TMP of the
+ list for which COND holds. Here COND must be a condition of ELT and
+ TMP. Typical usage is to insert an element into an ordered list:
+ for instance, list_insert_ordered(listtype, list, elt, tmp,
+ elt->size <= tmp->size). Note: if we give a "less than or equal"
+ condition, the new element will be inserted just before a sequence
+ of equal elements. If we give a "less than" condition, the new
+ element will be inserted just after a list of equal elements.
+ Note: it is much more efficient to construct a list with
+ list_prepend and then order it with list_merge_sort, than to
+ construct it with list_insert_ordered. */
+#define list_insert_ordered(listtype, list, elt, tmp, cond) \
+ MACRO_BEGIN \
+ listtype **_hook; \
+ _list_find_hook(list, (tmp=*_hook, (cond)), _hook); \
+ list_insert_athook(elt, _hook); \
+ MACRO_END
+
+/* sort the given list, according to the comparison condition.
+ Typical usage is list_sort(listtype, list, a, b, a->size <
+ b->size). Note: if we give "less than or equal" condition, each
+ segment of equal elements will be reversed in order. If we give a
+ "less than" condition, each segment of equal elements will retain
+ the original order. The latter is slower but sometimes
+ prettier. Average running time: n*n/2. */
+#define list_sort(listtype, list, a, b, cond) \
+ MACRO_BEGIN \
+ listtype *_newlist=NULL; \
+ list_forall_unlink(a, list) \
+ list_insert_ordered(listtype, _newlist, a, b, cond); \
+ list = _newlist; \
+ MACRO_END
+
+/* a much faster sort algorithm (merge sort, n log n worst case). It
+ is required that the list type has an additional, unused next1
+ component. Note there is no curious reversal of order of equal
+ elements as for list_sort. */
+
+#define list_mergesort(listtype, list, a, b, cond) \
+ MACRO_BEGIN \
+ listtype *_elt, **_hook1; \
+ \
+ for (_elt=list; _elt; _elt=_elt->next1) { \
+ _elt->next1 = _elt->next; \
+ _elt->next = NULL; \
+ } \
+ do { \
+ _hook1 = &(list); \
+ while ((a = *_hook1) != NULL && (b = a->next1) != NULL ) { \
+ _elt = b->next1; \
+ _list_merge_cond(listtype, a, b, cond, *_hook1); \
+ _hook1 = &((*_hook1)->next1); \
+ *_hook1 = _elt; \
+ } \
+ } while (_hook1 != &(list)); \
+ MACRO_END
+
+/* merge two sorted lists. Store result at &result */
+#define _list_merge_cond(listtype, a, b, cond, result) \
+ MACRO_BEGIN \
+ listtype **_hook; \
+ _hook = &(result); \
+ while (1) { \
+ if (a==NULL) { \
+ *_hook = b; \
+ break; \
+ } else if (b==NULL) { \
+ *_hook = a; \
+ break; \
+ } else if (cond) { \
+ *_hook = a; \
+ _hook = &(a->next); \
+ a = a->next; \
+ } else { \
+ *_hook = b; \
+ _hook = &(b->next); \
+ b = b->next; \
+ } \
+ } \
+ MACRO_END
+
+/* ---------------------------------------------------------------------- */
+/* macros for doubly-linked lists */
+
+#define dlist_append(head, end, elt) \
+ MACRO_BEGIN \
+ elt->prev = end; \
+ elt->next = NULL; \
+ if (end) { \
+ end->next = elt; \
+ } else { \
+ head = elt; \
+ } \
+ end = elt; \
+ MACRO_END
+
+/* let elt be each element of the list, unlinked. At the end, set list=NULL. */
+#define dlist_forall_unlink(elt, head, end) \
+ for (elt=head; elt ? (head=elt->next, elt->next=NULL, elt->prev=NULL), 1 : (end=NULL, 0); elt=head)
+
+/* unlink the first element of the list */
+#define dlist_unlink_first(head, end, elt) \
+ MACRO_BEGIN \
+ elt = head; \
+ if (head) { \
+ head = head->next; \
+ if (head) { \
+ head->prev = NULL; \
+ } else { \
+ end = NULL; \
+ } \
+ elt->prev = NULL; \
+ elt->next = NULL; \
+ } \
+ MACRO_END
+
+#endif /* _PS_LISTS_H */
+
diff --git a/dviware/dvisvgm/libs/potrace/potracelib.c b/dviware/dvisvgm/libs/potrace/potracelib.c
new file mode 100644
index 0000000000..7dc9fe940a
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/potracelib.c
@@ -0,0 +1,114 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "curve.h"
+#include "decompose.h"
+#include "trace.h"
+#include "progress.h"
+
+/* default parameters */
+static const potrace_param_t param_default = {
+ 2, /* turdsize */
+ POTRACE_TURNPOLICY_MINORITY, /* turnpolicy */
+ 1.0, /* alphamax */
+ 1, /* opticurve */
+ 0.2, /* opttolerance */
+ {
+ NULL, /* callback function */
+ NULL, /* callback data */
+ 0.0, 1.0, /* progress range */
+ 0.0, /* granularity */
+ },
+};
+
+/* Return a fresh copy of the set of default parameters, or NULL on
+ failure with errno set. */
+potrace_param_t *potrace_param_default(void) {
+ potrace_param_t *p;
+
+ p = (potrace_param_t *) malloc(sizeof(potrace_param_t));
+ if (!p) {
+ return NULL;
+ }
+ memcpy(p, &param_default, sizeof(potrace_param_t));
+ return p;
+}
+
+/* On success, returns a Potrace state st with st->status ==
+ POTRACE_STATUS_OK. On failure, returns NULL if no Potrace state
+ could be created (with errno set), or returns an incomplete Potrace
+ state (with st->status == POTRACE_STATUS_INCOMPLETE, and with errno
+ set). Complete or incomplete Potrace state can be freed with
+ potrace_state_free(). */
+potrace_state_t *potrace_trace(const potrace_param_t *param, const potrace_bitmap_t *bm) {
+ int r;
+ path_t *plist = NULL;
+ potrace_state_t *st;
+ progress_t prog;
+ progress_t subprog;
+
+ /* prepare private progress bar state */
+ prog.callback = param->progress.callback;
+ prog.data = param->progress.data;
+ prog.min = param->progress.min;
+ prog.max = param->progress.max;
+ prog.epsilon = param->progress.epsilon;
+ prog.d_prev = param->progress.min;
+
+ /* allocate state object */
+ st = (potrace_state_t *)malloc(sizeof(potrace_state_t));
+ if (!st) {
+ return NULL;
+ }
+
+ progress_subrange_start(0.0, 0.1, &prog, &subprog);
+
+ /* process the image */
+ r = bm_to_pathlist(bm, &plist, param, &subprog);
+ if (r) {
+ free(st);
+ return NULL;
+ }
+
+ st->status = POTRACE_STATUS_OK;
+ st->plist = plist;
+ st->priv = NULL; /* private state currently unused */
+
+ progress_subrange_end(&prog, &subprog);
+
+ progress_subrange_start(0.1, 1.0, &prog, &subprog);
+
+ /* partial success. */
+ r = process_path(plist, param, &subprog);
+ if (r) {
+ st->status = POTRACE_STATUS_INCOMPLETE;
+ }
+
+ progress_subrange_end(&prog, &subprog);
+
+ return st;
+}
+
+/* free a Potrace state, without disturbing errno. */
+void potrace_state_free(potrace_state_t *st) {
+ pathlist_free(st->plist);
+ free(st);
+}
+
+/* free a parameter list, without disturbing errno. */
+void potrace_param_free(potrace_param_t *p) {
+ free(p);
+}
+
+const char *potrace_version(void) {
+ return "potracelib " VERSION "";
+}
diff --git a/dviware/dvisvgm/libs/potrace/potracelib.h b/dviware/dvisvgm/libs/potrace/potracelib.h
new file mode 100644
index 0000000000..003297740a
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/potracelib.h
@@ -0,0 +1,139 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+#ifndef POTRACELIB_H
+#define POTRACELIB_H
+
+/* this file defines the API for the core Potrace library. For a more
+ detailed description of the API, see potracelib.pdf */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ---------------------------------------------------------------------- */
+/* tracing parameters */
+
+/* turn policies */
+#define POTRACE_TURNPOLICY_BLACK 0
+#define POTRACE_TURNPOLICY_WHITE 1
+#define POTRACE_TURNPOLICY_LEFT 2
+#define POTRACE_TURNPOLICY_RIGHT 3
+#define POTRACE_TURNPOLICY_MINORITY 4
+#define POTRACE_TURNPOLICY_MAJORITY 5
+#define POTRACE_TURNPOLICY_RANDOM 6
+
+/* structure to hold progress bar callback data */
+struct potrace_progress_s {
+ void (*callback)(double progress, void *privdata); /* callback fn */
+ void *data; /* callback function's private data */
+ double min, max; /* desired range of progress, e.g. 0.0 to 1.0 */
+ double epsilon; /* granularity: can skip smaller increments */
+};
+typedef struct potrace_progress_s potrace_progress_t;
+
+/* structure to hold tracing parameters */
+struct potrace_param_s {
+ int turdsize; /* area of largest path to be ignored */
+ int turnpolicy; /* resolves ambiguous turns in path decomposition */
+ double alphamax; /* corner threshold */
+ int opticurve; /* use curve optimization? */
+ double opttolerance; /* curve optimization tolerance */
+ potrace_progress_t progress; /* progress callback function */
+};
+typedef struct potrace_param_s potrace_param_t;
+
+/* ---------------------------------------------------------------------- */
+/* bitmaps */
+
+/* native word size */
+typedef unsigned long potrace_word;
+
+/* Internal bitmap format. The n-th scanline starts at scanline(n) =
+ (map + n*dy). Raster data is stored as a sequence of potrace_words
+ (NOT bytes). The leftmost bit of scanline n is the most significant
+ bit of scanline(n)[0]. */
+struct potrace_bitmap_s {
+ int w, h; /* width and height, in pixels */
+ int dy; /* words per scanline (not bytes) */
+ potrace_word *map; /* raw data, dy*h words */
+};
+typedef struct potrace_bitmap_s potrace_bitmap_t;
+
+/* ---------------------------------------------------------------------- */
+/* curves */
+
+/* point */
+struct potrace_dpoint_s {
+ double x, y;
+};
+typedef struct potrace_dpoint_s potrace_dpoint_t;
+
+/* segment tags */
+#define POTRACE_CURVETO 1
+#define POTRACE_CORNER 2
+
+/* closed curve segment */
+struct potrace_curve_s {
+ int n; /* number of segments */
+ int *tag; /* tag[n]: POTRACE_CURVETO or POTRACE_CORNER */
+ potrace_dpoint_t (*c)[3]; /* c[n][3]: control points.
+ c[n][0] is unused for tag[n]=POTRACE_CORNER */
+};
+typedef struct potrace_curve_s potrace_curve_t;
+
+/* Linked list of signed curve segments. Also carries a tree structure. */
+struct potrace_path_s {
+ int area; /* area of the bitmap path */
+ int sign; /* '+' or '-', depending on orientation */
+ potrace_curve_t curve; /* this path's vector data */
+
+ struct potrace_path_s *next; /* linked list structure */
+
+ struct potrace_path_s *childlist; /* tree structure */
+ struct potrace_path_s *sibling; /* tree structure */
+
+ struct potrace_privpath_s *priv; /* private state */
+};
+typedef struct potrace_path_s potrace_path_t;
+
+/* ---------------------------------------------------------------------- */
+/* Potrace state */
+
+#define POTRACE_STATUS_OK 0
+#define POTRACE_STATUS_INCOMPLETE 1
+
+struct potrace_state_s {
+ int status;
+ potrace_path_t *plist; /* vector data */
+
+ struct potrace_privstate_s *priv; /* private state */
+};
+typedef struct potrace_state_s potrace_state_t;
+
+/* ---------------------------------------------------------------------- */
+/* API functions */
+
+/* get default parameters */
+potrace_param_t *potrace_param_default(void);
+
+/* free parameter set */
+void potrace_param_free(potrace_param_t *p);
+
+/* trace a bitmap */
+potrace_state_t *potrace_trace(const potrace_param_t *param,
+ const potrace_bitmap_t *bm);
+
+/* free a Potrace state */
+void potrace_state_free(potrace_state_t *st);
+
+/* return a static plain text version string identifying this version
+ of potracelib */
+const char *potrace_version(void);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif /* POTRACELIB_H */
diff --git a/dviware/dvisvgm/libs/potrace/progress.h b/dviware/dvisvgm/libs/potrace/progress.h
new file mode 100644
index 0000000000..cdd637694c
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/progress.h
@@ -0,0 +1,79 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+/* operations on potrace_progress_t objects, which are defined in
+ potracelib.h. Note: the code attempts to minimize runtime overhead
+ when no progress monitoring was requested. It also tries to
+ minimize excessive progress calculations beneath the "epsilon"
+ threshold. */
+
+#ifndef PROGRESS_H
+#define PROGRESS_H
+
+/* structure to hold progress bar callback data */
+struct progress_s {
+ void (*callback)(double progress, void *privdata); /* callback fn */
+ void *data; /* callback function's private data */
+ double min, max; /* desired range of progress, e.g. 0.0 to 1.0 */
+ double epsilon; /* granularity: can skip smaller increments */
+ double b; /* upper limit of subrange in superrange units */
+ double d_prev; /* previous value of d */
+};
+typedef struct progress_s progress_t;
+
+/* notify given progress object of current progress. Note that d is
+ given in the 0.0-1.0 range, which will be scaled and translated to
+ the progress object's range. */
+static inline void progress_update(double d, progress_t *prog) {
+ double d_scaled;
+
+ if (prog != NULL && prog->callback != NULL) {
+ d_scaled = prog->min * (1-d) + prog->max * d;
+ if (d == 1.0 || d_scaled >= prog->d_prev + prog->epsilon) {
+ prog->callback(prog->min * (1-d) + prog->max * d, prog->data);
+ prog->d_prev = d_scaled;
+ }
+ }
+}
+
+/* start a subrange of the given progress object. The range is
+ narrowed to [a..b], relative to 0.0-1.0 coordinates. If new range
+ is below granularity threshold, disable further subdivisions. */
+static inline void progress_subrange_start(double a, double b, const progress_t *prog, progress_t *sub) {
+ double min, max;
+
+ if (prog == NULL || prog->callback == NULL) {
+ sub->callback = NULL;
+ return;
+ }
+
+ min = prog->min * (1-a) + prog->max * a;
+ max = prog->min * (1-b) + prog->max * b;
+
+ if (max - min < prog->epsilon) {
+ sub->callback = NULL; /* no further progress info in subrange */
+ sub->b = b;
+ return;
+ }
+ sub->callback = prog->callback;
+ sub->data = prog->data;
+ sub->epsilon = prog->epsilon;
+ sub->min = min;
+ sub->max = max;
+ sub->d_prev = prog->d_prev;
+ return;
+}
+
+static inline void progress_subrange_end(progress_t *prog, progress_t *sub) {
+ if (prog != NULL && prog->callback != NULL) {
+ if (sub->callback == NULL) {
+ progress_update(sub->b, prog);
+ } else {
+ prog->d_prev = sub->d_prev;
+ }
+ }
+}
+
+#endif /* PROGRESS_H */
+
diff --git a/dviware/dvisvgm/libs/potrace/trace.c b/dviware/dvisvgm/libs/potrace/trace.c
new file mode 100644
index 0000000000..b0b9944ae6
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/trace.c
@@ -0,0 +1,1249 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+/* transform jaggy paths into smooth curves */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "potracelib.h"
+#include "curve.h"
+#include "lists.h"
+#include "auxiliary.h"
+#include "trace.h"
+#include "progress.h"
+
+#define INFTY 10000000 /* it suffices that this is longer than any
+ path; it need not be really infinite */
+#define COS179 -0.999847695156 /* the cosine of 179 degrees */
+
+/* ---------------------------------------------------------------------- */
+#define SAFE_CALLOC(var, n, typ) \
+ if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error
+
+/* ---------------------------------------------------------------------- */
+/* auxiliary functions */
+
+/* return a direction that is 90 degrees counterclockwise from p2-p0,
+ but then restricted to one of the major wind directions (n, nw, w, etc) */
+static inline point_t dorth_infty(dpoint_t p0, dpoint_t p2) {
+ point_t r;
+
+ r.y = sign(p2.x-p0.x);
+ r.x = -sign(p2.y-p0.y);
+
+ return r;
+}
+
+/* return (p1-p0)x(p2-p0), the area of the parallelogram */
+static inline double dpara(dpoint_t p0, dpoint_t p1, dpoint_t p2) {
+ double x1, y1, x2, y2;
+
+ x1 = p1.x-p0.x;
+ y1 = p1.y-p0.y;
+ x2 = p2.x-p0.x;
+ y2 = p2.y-p0.y;
+
+ return x1*y2 - x2*y1;
+}
+
+/* ddenom/dpara have the property that the square of radius 1 centered
+ at p1 intersects the line p0p2 iff |dpara(p0,p1,p2)| <= ddenom(p0,p2) */
+static inline double ddenom(dpoint_t p0, dpoint_t p2) {
+ point_t r = dorth_infty(p0, p2);
+
+ return r.y*(p2.x-p0.x) - r.x*(p2.y-p0.y);
+}
+
+/* return 1 if a <= b < c < a, in a cyclic sense (mod n) */
+static inline int cyclic(int a, int b, int c) {
+ if (a<=c) {
+ return (a<=b && b<c);
+ } else {
+ return (a<=b || b<c);
+ }
+}
+
+/* determine the center and slope of the line i..j. Assume i<j. Needs
+ "sum" components of p to be set. */
+static void pointslope(privpath_t *pp, int i, int j, dpoint_t *ctr, dpoint_t *dir) {
+ /* assume i<j */
+
+ int n = pp->len;
+ sums_t *sums = pp->sums;
+
+ double x, y, x2, xy, y2;
+ double k;
+ double a, b, c, lambda2, l;
+ int r=0; /* rotations from i to j */
+
+ while (j>=n) {
+ j-=n;
+ r+=1;
+ }
+ while (i>=n) {
+ i-=n;
+ r-=1;
+ }
+ while (j<0) {
+ j+=n;
+ r-=1;
+ }
+ while (i<0) {
+ i+=n;
+ r+=1;
+ }
+
+ x = sums[j+1].x-sums[i].x+r*sums[n].x;
+ y = sums[j+1].y-sums[i].y+r*sums[n].y;
+ x2 = sums[j+1].x2-sums[i].x2+r*sums[n].x2;
+ xy = sums[j+1].xy-sums[i].xy+r*sums[n].xy;
+ y2 = sums[j+1].y2-sums[i].y2+r*sums[n].y2;
+ k = j+1-i+r*n;
+
+ ctr->x = x/k;
+ ctr->y = y/k;
+
+ a = (x2-(double)x*x/k)/k;
+ b = (xy-(double)x*y/k)/k;
+ c = (y2-(double)y*y/k)/k;
+
+ lambda2 = (a+c+sqrt((a-c)*(a-c)+4*b*b))/2; /* larger e.value */
+
+ /* now find e.vector for lambda2 */
+ a -= lambda2;
+ c -= lambda2;
+
+ if (fabs(a) >= fabs(c)) {
+ l = sqrt(a*a+b*b);
+ if (l!=0) {
+ dir->x = -b/l;
+ dir->y = a/l;
+ }
+ } else {
+ l = sqrt(c*c+b*b);
+ if (l!=0) {
+ dir->x = -c/l;
+ dir->y = b/l;
+ }
+ }
+ if (l==0) {
+ dir->x = dir->y = 0; /* sometimes this can happen when k=4:
+ the two eigenvalues coincide */
+ }
+}
+
+/* the type of (affine) quadratic forms, represented as symmetric 3x3
+ matrices. The value of the quadratic form at a vector (x,y) is v^t
+ Q v, where v = (x,y,1)^t. */
+typedef double quadform_t[3][3];
+
+/* Apply quadratic form Q to vector w = (w.x,w.y) */
+static inline double quadform(quadform_t Q, dpoint_t w) {
+ double v[3];
+ int i, j;
+ double sum;
+
+ v[0] = w.x;
+ v[1] = w.y;
+ v[2] = 1;
+ sum = 0.0;
+
+ for (i=0; i<3; i++) {
+ for (j=0; j<3; j++) {
+ sum += v[i] * Q[i][j] * v[j];
+ }
+ }
+ return sum;
+}
+
+/* calculate p1 x p2 */
+static inline int xprod(point_t p1, point_t p2) {
+ return p1.x*p2.y - p1.y*p2.x;
+}
+
+/* calculate (p1-p0)x(p3-p2) */
+static inline double cprod(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+ double x1, y1, x2, y2;
+
+ x1 = p1.x - p0.x;
+ y1 = p1.y - p0.y;
+ x2 = p3.x - p2.x;
+ y2 = p3.y - p2.y;
+
+ return x1*y2 - x2*y1;
+}
+
+/* calculate (p1-p0)*(p2-p0) */
+static inline double iprod(dpoint_t p0, dpoint_t p1, dpoint_t p2) {
+ double x1, y1, x2, y2;
+
+ x1 = p1.x - p0.x;
+ y1 = p1.y - p0.y;
+ x2 = p2.x - p0.x;
+ y2 = p2.y - p0.y;
+
+ return x1*x2 + y1*y2;
+}
+
+/* calculate (p1-p0)*(p3-p2) */
+static inline double iprod1(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+ double x1, y1, x2, y2;
+
+ x1 = p1.x - p0.x;
+ y1 = p1.y - p0.y;
+ x2 = p3.x - p2.x;
+ y2 = p3.y - p2.y;
+
+ return x1*x2 + y1*y2;
+}
+
+/* calculate distance between two points */
+static inline double ddist(dpoint_t p, dpoint_t q) {
+ return sqrt(sq(p.x-q.x)+sq(p.y-q.y));
+}
+
+/* calculate point of a bezier curve */
+static inline dpoint_t bezier(double t, dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {
+ double s = 1-t;
+ dpoint_t res;
+
+ /* Note: a good optimizing compiler (such as gcc-3) reduces the
+ following to 16 multiplications, using common subexpression
+ elimination. */
+
+ res.x = s*s*s*p0.x + 3*(s*s*t)*p1.x + 3*(t*t*s)*p2.x + t*t*t*p3.x;
+ res.y = s*s*s*p0.y + 3*(s*s*t)*p1.y + 3*(t*t*s)*p2.y + t*t*t*p3.y;
+
+ return res;
+}
+
+/* calculate the point t in [0..1] on the (convex) bezier curve
+ (p0,p1,p2,p3) which is tangent to q1-q0. Return -1.0 if there is no
+ solution in [0..1]. */
+static double tangent(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3, dpoint_t q0, dpoint_t q1) {
+ double A, B, C; /* (1-t)^2 A + 2(1-t)t B + t^2 C = 0 */
+ double a, b, c; /* a t^2 + b t + c = 0 */
+ double d, s, r1, r2;
+
+ A = cprod(p0, p1, q0, q1);
+ B = cprod(p1, p2, q0, q1);
+ C = cprod(p2, p3, q0, q1);
+
+ a = A - 2*B + C;
+ b = -2*A + 2*B;
+ c = A;
+
+ d = b*b - 4*a*c;
+
+ if (a==0 || d<0) {
+ return -1.0;
+ }
+
+ s = sqrt(d);
+
+ r1 = (-b + s) / (2 * a);
+ r2 = (-b - s) / (2 * a);
+
+ if (r1 >= 0 && r1 <= 1) {
+ return r1;
+ } else if (r2 >= 0 && r2 <= 1) {
+ return r2;
+ } else {
+ return -1.0;
+ }
+}
+
+/* ---------------------------------------------------------------------- */
+/* Preparation: fill in the sum* fields of a path (used for later
+ rapid summing). Return 0 on success, 1 with errno set on
+ failure. */
+static int calc_sums(privpath_t *pp) {
+ int i, x, y;
+ int n = pp->len;
+
+ SAFE_CALLOC(pp->sums, pp->len+1, sums_t);
+
+ /* origin */
+ pp->x0 = pp->pt[0].x;
+ pp->y0 = pp->pt[0].y;
+
+ /* preparatory computation for later fast summing */
+ pp->sums[0].x2 = pp->sums[0].xy = pp->sums[0].y2 = pp->sums[0].x = pp->sums[0].y = 0;
+ for (i=0; i<n; i++) {
+ x = pp->pt[i].x - pp->x0;
+ y = pp->pt[i].y - pp->y0;
+ pp->sums[i+1].x = pp->sums[i].x + x;
+ pp->sums[i+1].y = pp->sums[i].y + y;
+ pp->sums[i+1].x2 = pp->sums[i].x2 + (double)x*x;
+ pp->sums[i+1].xy = pp->sums[i].xy + (double)x*y;
+ pp->sums[i+1].y2 = pp->sums[i].y2 + (double)y*y;
+ }
+ return 0;
+
+ calloc_error:
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 1: determine the straight subpaths (Sec. 2.2.1). Fill in the
+ "lon" component of a path object (based on pt/len). For each i,
+ lon[i] is the furthest index such that a straight line can be drawn
+ from i to lon[i]. Return 1 on error with errno set, else 0. */
+
+/* this algorithm depends on the fact that the existence of straight
+ subpaths is a triplewise property. I.e., there exists a straight
+ line through squares i0,...,in iff there exists a straight line
+ through i,j,k, for all i0<=i<j<k<=in. (Proof?) */
+
+/* this implementation of calc_lon is O(n^2). It replaces an older
+ O(n^3) version. A "constraint" means that future points must
+ satisfy xprod(constraint[0], cur) >= 0 and xprod(constraint[1],
+ cur) <= 0. */
+
+/* Remark for Potrace 1.1: the current implementation of calc_lon is
+ more complex than the implementation found in Potrace 1.0, but it
+ is considerably faster. The introduction of the "nc" data structure
+ means that we only have to test the constraints for "corner"
+ points. On a typical input file, this speeds up the calc_lon
+ function by a factor of 31.2, thereby decreasing its time share
+ within the overall Potrace algorithm from 72.6% to 7.82%, and
+ speeding up the overall algorithm by a factor of 3.36. On another
+ input file, calc_lon was sped up by a factor of 6.7, decreasing its
+ time share from 51.4% to 13.61%, and speeding up the overall
+ algorithm by a factor of 1.78. In any case, the savings are
+ substantial. */
+
+/* returns 0 on success, 1 on error with errno set */
+static int calc_lon(privpath_t *pp) {
+ point_t *pt = pp->pt;
+ int n = pp->len;
+ int i, j, k, k1;
+ int ct[4], dir;
+ point_t constraint[2];
+ point_t cur;
+ point_t off;
+ int *pivk = NULL; /* pivk[n] */
+ int *nc = NULL; /* nc[n]: next corner */
+ point_t dk; /* direction of k-k1 */
+ int a, b, c, d;
+
+ SAFE_CALLOC(pivk, n, int);
+ SAFE_CALLOC(nc, n, int);
+
+ /* initialize the nc data structure. Point from each point to the
+ furthest future point to which it is connected by a vertical or
+ horizontal segment. We take advantage of the fact that there is
+ always a direction change at 0 (due to the path decomposition
+ algorithm). But even if this were not so, there is no harm, as
+ in practice, correctness does not depend on the word "furthest"
+ above. */
+ k = 0;
+ for (i=n-1; i>=0; i--) {
+ if (pt[i].x != pt[k].x && pt[i].y != pt[k].y) {
+ k = i+1; /* necessarily i<n-1 in this case */
+ }
+ nc[i] = k;
+ }
+
+ SAFE_CALLOC(pp->lon, n, int);
+
+ /* determine pivot points: for each i, let pivk[i] be the furthest k
+ such that all j with i<j<k lie on a line connecting i,k. */
+
+ for (i=n-1; i>=0; i--) {
+ ct[0] = ct[1] = ct[2] = ct[3] = 0;
+
+ /* keep track of "directions" that have occurred */
+ dir = (3+3*(pt[mod(i+1,n)].x-pt[i].x)+(pt[mod(i+1,n)].y-pt[i].y))/2;
+ ct[dir]++;
+
+ constraint[0].x = 0;
+ constraint[0].y = 0;
+ constraint[1].x = 0;
+ constraint[1].y = 0;
+
+ /* find the next k such that no straight line from i to k */
+ k = nc[i];
+ k1 = i;
+ while (1) {
+
+ dir = (3+3*sign(pt[k].x-pt[k1].x)+sign(pt[k].y-pt[k1].y))/2;
+ ct[dir]++;
+
+ /* if all four "directions" have occurred, cut this path */
+ if (ct[0] && ct[1] && ct[2] && ct[3]) {
+ pivk[i] = k1;
+ goto foundk;
+ }
+
+ cur.x = pt[k].x - pt[i].x;
+ cur.y = pt[k].y - pt[i].y;
+
+ /* see if current constraint is violated */
+ if (xprod(constraint[0], cur) < 0 || xprod(constraint[1], cur) > 0) {
+ goto constraint_viol;
+ }
+
+ /* else, update constraint */
+ if (abs(cur.x) <= 1 && abs(cur.y) <= 1) {
+ /* no constraint */
+ } else {
+ off.x = cur.x + ((cur.y>=0 && (cur.y>0 || cur.x<0)) ? 1 : -1);
+ off.y = cur.y + ((cur.x<=0 && (cur.x<0 || cur.y<0)) ? 1 : -1);
+ if (xprod(constraint[0], off) >= 0) {
+ constraint[0] = off;
+ }
+ off.x = cur.x + ((cur.y<=0 && (cur.y<0 || cur.x<0)) ? 1 : -1);
+ off.y = cur.y + ((cur.x>=0 && (cur.x>0 || cur.y<0)) ? 1 : -1);
+ if (xprod(constraint[1], off) <= 0) {
+ constraint[1] = off;
+ }
+ }
+ k1 = k;
+ k = nc[k1];
+ if (!cyclic(k,i,k1)) {
+ break;
+ }
+ }
+ constraint_viol:
+ /* k1 was the last "corner" satisfying the current constraint, and
+ k is the first one violating it. We now need to find the last
+ point along k1..k which satisfied the constraint. */
+ dk.x = sign(pt[k].x-pt[k1].x);
+ dk.y = sign(pt[k].y-pt[k1].y);
+ cur.x = pt[k1].x - pt[i].x;
+ cur.y = pt[k1].y - pt[i].y;
+ /* find largest integer j such that xprod(constraint[0], cur+j*dk)
+ >= 0 and xprod(constraint[1], cur+j*dk) <= 0. Use bilinearity
+ of xprod. */
+ a = xprod(constraint[0], cur);
+ b = xprod(constraint[0], dk);
+ c = xprod(constraint[1], cur);
+ d = xprod(constraint[1], dk);
+ /* find largest integer j such that a+j*b>=0 and c+j*d<=0. This
+ can be solved with integer arithmetic. */
+ j = INFTY;
+ if (b<0) {
+ j = floordiv(a,-b);
+ }
+ if (d>0) {
+ j = min(j, floordiv(-c,d));
+ }
+ pivk[i] = mod(k1+j,n);
+ foundk:
+ ;
+ } /* for i */
+
+ /* clean up: for each i, let lon[i] be the largest k such that for
+ all i' with i<=i'<k, i'<k<=pivk[i']. */
+
+ j=pivk[n-1];
+ pp->lon[n-1]=j;
+ for (i=n-2; i>=0; i--) {
+ if (cyclic(i+1,pivk[i],j)) {
+ j=pivk[i];
+ }
+ pp->lon[i]=j;
+ }
+
+ for (i=n-1; cyclic(mod(i+1,n),j,pp->lon[i]); i--) {
+ pp->lon[i] = j;
+ }
+
+ free(pivk);
+ free(nc);
+ return 0;
+
+ calloc_error:
+ free(pivk);
+ free(nc);
+ return 1;
+}
+
+
+/* ---------------------------------------------------------------------- */
+/* Stage 2: calculate the optimal polygon (Sec. 2.2.2-2.2.4). */
+
+/* Auxiliary function: calculate the penalty of an edge from i to j in
+ the given path. This needs the "lon" and "sum*" data. */
+
+static double penalty3(privpath_t *pp, int i, int j) {
+ int n = pp->len;
+ point_t *pt = pp->pt;
+ sums_t *sums = pp->sums;
+
+ /* assume 0<=i<j<=n */
+ double x, y, x2, xy, y2;
+ double k;
+ double a, b, c, s;
+ double px, py, ex, ey;
+
+ int r = 0; /* rotations from i to j */
+
+ if (j>=n) {
+ j -= n;
+ r = 1;
+ }
+
+ /* critical inner loop: the "if" gives a 4.6 percent speedup */
+ if (r == 0) {
+ x = sums[j+1].x - sums[i].x;
+ y = sums[j+1].y - sums[i].y;
+ x2 = sums[j+1].x2 - sums[i].x2;
+ xy = sums[j+1].xy - sums[i].xy;
+ y2 = sums[j+1].y2 - sums[i].y2;
+ k = j+1 - i;
+ } else {
+ x = sums[j+1].x - sums[i].x + sums[n].x;
+ y = sums[j+1].y - sums[i].y + sums[n].y;
+ x2 = sums[j+1].x2 - sums[i].x2 + sums[n].x2;
+ xy = sums[j+1].xy - sums[i].xy + sums[n].xy;
+ y2 = sums[j+1].y2 - sums[i].y2 + sums[n].y2;
+ k = j+1 - i + n;
+ }
+
+ px = (pt[i].x + pt[j].x) / 2.0 - pt[0].x;
+ py = (pt[i].y + pt[j].y) / 2.0 - pt[0].y;
+ ey = (pt[j].x - pt[i].x);
+ ex = -(pt[j].y - pt[i].y);
+
+ a = ((x2 - 2*x*px) / k + px*px);
+ b = ((xy - x*py - y*px) / k + px*py);
+ c = ((y2 - 2*y*py) / k + py*py);
+
+ s = ex*ex*a + 2*ex*ey*b + ey*ey*c;
+
+ return sqrt(s);
+}
+
+/* find the optimal polygon. Fill in the m and po components. Return 1
+ on failure with errno set, else 0. Non-cyclic version: assumes i=0
+ is in the polygon. Fixme: implement cyclic version. */
+static int bestpolygon(privpath_t *pp)
+{
+ int i, j, m, k;
+ int n = pp->len;
+ double *pen = NULL; /* pen[n+1]: penalty vector */
+ int *prev = NULL; /* prev[n+1]: best path pointer vector */
+ int *clip0 = NULL; /* clip0[n]: longest segment pointer, non-cyclic */
+ int *clip1 = NULL; /* clip1[n+1]: backwards segment pointer, non-cyclic */
+ int *seg0 = NULL; /* seg0[m+1]: forward segment bounds, m<=n */
+ int *seg1 = NULL; /* seg1[m+1]: backward segment bounds, m<=n */
+ double thispen;
+ double best;
+ int c;
+
+ SAFE_CALLOC(pen, n+1, double);
+ SAFE_CALLOC(prev, n+1, int);
+ SAFE_CALLOC(clip0, n, int);
+ SAFE_CALLOC(clip1, n+1, int);
+ SAFE_CALLOC(seg0, n+1, int);
+ SAFE_CALLOC(seg1, n+1, int);
+
+ /* calculate clipped paths */
+ for (i=0; i<n; i++) {
+ c = mod(pp->lon[mod(i-1,n)]-1,n);
+ if (c == i) {
+ c = mod(i+1,n);
+ }
+ if (c < i) {
+ clip0[i] = n;
+ } else {
+ clip0[i] = c;
+ }
+ }
+
+ /* calculate backwards path clipping, non-cyclic. j <= clip0[i] iff
+ clip1[j] <= i, for i,j=0..n. */
+ j = 1;
+ for (i=0; i<n; i++) {
+ while (j <= clip0[i]) {
+ clip1[j] = i;
+ j++;
+ }
+ }
+
+ /* calculate seg0[j] = longest path from 0 with j segments */
+ i = 0;
+ for (j=0; i<n; j++) {
+ seg0[j] = i;
+ i = clip0[i];
+ }
+ seg0[j] = n;
+ m = j;
+
+ /* calculate seg1[j] = longest path to n with m-j segments */
+ i = n;
+ for (j=m; j>0; j--) {
+ seg1[j] = i;
+ i = clip1[i];
+ }
+ seg1[0] = 0;
+
+ /* now find the shortest path with m segments, based on penalty3 */
+ /* note: the outer 2 loops jointly have at most n iterations, thus
+ the worst-case behavior here is quadratic. In practice, it is
+ close to linear since the inner loop tends to be short. */
+ pen[0]=0;
+ for (j=1; j<=m; j++) {
+ for (i=seg1[j]; i<=seg0[j]; i++) {
+ best = -1;
+ for (k=seg0[j-1]; k>=clip1[i]; k--) {
+ thispen = penalty3(pp, k, i) + pen[k];
+ if (best < 0 || thispen < best) {
+ prev[i] = k;
+ best = thispen;
+ }
+ }
+ pen[i] = best;
+ }
+ }
+
+ pp->m = m;
+ SAFE_CALLOC(pp->po, m, int);
+
+ /* read off shortest path */
+ for (i=n, j=m-1; i>0; j--) {
+ i = prev[i];
+ pp->po[j] = i;
+ }
+
+ free(pen);
+ free(prev);
+ free(clip0);
+ free(clip1);
+ free(seg0);
+ free(seg1);
+ return 0;
+
+ calloc_error:
+ free(pen);
+ free(prev);
+ free(clip0);
+ free(clip1);
+ free(seg0);
+ free(seg1);
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 3: vertex adjustment (Sec. 2.3.1). */
+
+/* Adjust vertices of optimal polygon: calculate the intersection of
+ the two "optimal" line segments, then move it into the unit square
+ if it lies outside. Return 1 with errno set on error; 0 on
+ success. */
+
+static int adjust_vertices(privpath_t *pp) {
+ int m = pp->m;
+ int *po = pp->po;
+ int n = pp->len;
+ point_t *pt = pp->pt;
+ int x0 = pp->x0;
+ int y0 = pp->y0;
+
+ dpoint_t *ctr = NULL; /* ctr[m] */
+ dpoint_t *dir = NULL; /* dir[m] */
+ quadform_t *q = NULL; /* q[m] */
+ double v[3];
+ double d;
+ int i, j, k, l;
+ dpoint_t s;
+ int r;
+
+ SAFE_CALLOC(ctr, m, dpoint_t);
+ SAFE_CALLOC(dir, m, dpoint_t);
+ SAFE_CALLOC(q, m, quadform_t);
+
+ r = privcurve_init(&pp->curve, m);
+ if (r) {
+ goto calloc_error;
+ }
+
+ /* calculate "optimal" point-slope representation for each line
+ segment */
+ for (i=0; i<m; i++) {
+ j = po[mod(i+1,m)];
+ j = mod(j-po[i],n)+po[i];
+ pointslope(pp, po[i], j, &ctr[i], &dir[i]);
+ }
+
+ /* represent each line segment as a singular quadratic form; the
+ distance of a point (x,y) from the line segment will be
+ (x,y,1)Q(x,y,1)^t, where Q=q[i]. */
+ for (i=0; i<m; i++) {
+ d = sq(dir[i].x) + sq(dir[i].y);
+ if (d == 0.0) {
+ for (j=0; j<3; j++) {
+ for (k=0; k<3; k++) {
+ q[i][j][k] = 0;
+ }
+ }
+ } else {
+ v[0] = dir[i].y;
+ v[1] = -dir[i].x;
+ v[2] = - v[1] * ctr[i].y - v[0] * ctr[i].x;
+ for (l=0; l<3; l++) {
+ for (k=0; k<3; k++) {
+ q[i][l][k] = v[l] * v[k] / d;
+ }
+ }
+ }
+ }
+
+ /* now calculate the "intersections" of consecutive segments.
+ Instead of using the actual intersection, we find the point
+ within a given unit square which minimizes the square distance to
+ the two lines. */
+ for (i=0; i<m; i++) {
+ quadform_t Q;
+ dpoint_t w;
+ double dx, dy;
+ double det;
+ double min, cand; /* minimum and candidate for minimum of quad. form */
+ double xmin, ymin; /* coordinates of minimum */
+ int z;
+
+ /* let s be the vertex, in coordinates relative to x0/y0 */
+ s.x = pt[po[i]].x-x0;
+ s.y = pt[po[i]].y-y0;
+
+ /* intersect segments i-1 and i */
+
+ j = mod(i-1,m);
+
+ /* add quadratic forms */
+ for (l=0; l<3; l++) {
+ for (k=0; k<3; k++) {
+ Q[l][k] = q[j][l][k] + q[i][l][k];
+ }
+ }
+
+ while(1) {
+ /* minimize the quadratic form Q on the unit square */
+ /* find intersection */
+
+#ifdef HAVE_GCC_LOOP_BUG
+ /* work around gcc bug #12243 */
+ free(NULL);
+#endif
+
+ det = Q[0][0]*Q[1][1] - Q[0][1]*Q[1][0];
+ if (det != 0.0) {
+ w.x = (-Q[0][2]*Q[1][1] + Q[1][2]*Q[0][1]) / det;
+ w.y = ( Q[0][2]*Q[1][0] - Q[1][2]*Q[0][0]) / det;
+ break;
+ }
+
+ /* matrix is singular - lines are parallel. Add another,
+ orthogonal axis, through the center of the unit square */
+ if (Q[0][0]>Q[1][1]) {
+ v[0] = -Q[0][1];
+ v[1] = Q[0][0];
+ } else if (Q[1][1]) {
+ v[0] = -Q[1][1];
+ v[1] = Q[1][0];
+ } else {
+ v[0] = 1;
+ v[1] = 0;
+ }
+ d = sq(v[0]) + sq(v[1]);
+ v[2] = - v[1] * s.y - v[0] * s.x;
+ for (l=0; l<3; l++) {
+ for (k=0; k<3; k++) {
+ Q[l][k] += v[l] * v[k] / d;
+ }
+ }
+ }
+ dx = fabs(w.x-s.x);
+ dy = fabs(w.y-s.y);
+ if (dx <= .5 && dy <= .5) {
+ pp->curve.vertex[i].x = w.x+x0;
+ pp->curve.vertex[i].y = w.y+y0;
+ continue;
+ }
+
+ /* the minimum was not in the unit square; now minimize quadratic
+ on boundary of square */
+ min = quadform(Q, s);
+ xmin = s.x;
+ ymin = s.y;
+
+ if (Q[0][0] == 0.0) {
+ goto fixx;
+ }
+ for (z=0; z<2; z++) { /* value of the y-coordinate */
+ w.y = s.y-0.5+z;
+ w.x = - (Q[0][1] * w.y + Q[0][2]) / Q[0][0];
+ dx = fabs(w.x-s.x);
+ cand = quadform(Q, w);
+ if (dx <= .5 && cand < min) {
+ min = cand;
+ xmin = w.x;
+ ymin = w.y;
+ }
+ }
+ fixx:
+ if (Q[1][1] == 0.0) {
+ goto corners;
+ }
+ for (z=0; z<2; z++) { /* value of the x-coordinate */
+ w.x = s.x-0.5+z;
+ w.y = - (Q[1][0] * w.x + Q[1][2]) / Q[1][1];
+ dy = fabs(w.y-s.y);
+ cand = quadform(Q, w);
+ if (dy <= .5 && cand < min) {
+ min = cand;
+ xmin = w.x;
+ ymin = w.y;
+ }
+ }
+ corners:
+ /* check four corners */
+ for (l=0; l<2; l++) {
+ for (k=0; k<2; k++) {
+ w.x = s.x-0.5+l;
+ w.y = s.y-0.5+k;
+ cand = quadform(Q, w);
+ if (cand < min) {
+ min = cand;
+ xmin = w.x;
+ ymin = w.y;
+ }
+ }
+ }
+
+ pp->curve.vertex[i].x = xmin + x0;
+ pp->curve.vertex[i].y = ymin + y0;
+ continue;
+ }
+
+ free(ctr);
+ free(dir);
+ free(q);
+ return 0;
+
+ calloc_error:
+ free(ctr);
+ free(dir);
+ free(q);
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 4: smoothing and corner analysis (Sec. 2.3.3) */
+
+/* reverse orientation of a path */
+static void reverse(privcurve_t *curve) {
+ int m = curve->n;
+ int i, j;
+ dpoint_t tmp;
+
+ for (i=0, j=m-1; i<j; i++, j--) {
+ tmp = curve->vertex[i];
+ curve->vertex[i] = curve->vertex[j];
+ curve->vertex[j] = tmp;
+ }
+}
+
+/* Always succeeds */
+static void smooth(privcurve_t *curve, double alphamax) {
+ int m = curve->n;
+
+ int i, j, k;
+ double dd, denom, alpha;
+ dpoint_t p2, p3, p4;
+
+ /* examine each vertex and find its best fit */
+ for (i=0; i<m; i++) {
+ j = mod(i+1, m);
+ k = mod(i+2, m);
+ p4 = interval(1/2.0, curve->vertex[k], curve->vertex[j]);
+
+ denom = ddenom(curve->vertex[i], curve->vertex[k]);
+ if (denom != 0.0) {
+ dd = dpara(curve->vertex[i], curve->vertex[j], curve->vertex[k]) / denom;
+ dd = fabs(dd);
+ alpha = dd>1 ? (1 - 1.0/dd) : 0;
+ alpha = alpha / 0.75;
+ } else {
+ alpha = 4/3.0;
+ }
+ curve->alpha0[j] = alpha; /* remember "original" value of alpha */
+
+ if (alpha >= alphamax) { /* pointed corner */
+ curve->tag[j] = POTRACE_CORNER;
+ curve->c[j][1] = curve->vertex[j];
+ curve->c[j][2] = p4;
+ } else {
+ if (alpha < 0.55) {
+ alpha = 0.55;
+ } else if (alpha > 1) {
+ alpha = 1;
+ }
+ p2 = interval(.5+.5*alpha, curve->vertex[i], curve->vertex[j]);
+ p3 = interval(.5+.5*alpha, curve->vertex[k], curve->vertex[j]);
+ curve->tag[j] = POTRACE_CURVETO;
+ curve->c[j][0] = p2;
+ curve->c[j][1] = p3;
+ curve->c[j][2] = p4;
+ }
+ curve->alpha[j] = alpha; /* store the "cropped" value of alpha */
+ curve->beta[j] = 0.5;
+ }
+ curve->alphacurve = 1;
+
+ return;
+}
+
+/* ---------------------------------------------------------------------- */
+/* Stage 5: Curve optimization (Sec. 2.4) */
+
+/* a private type for the result of opti_penalty */
+struct opti_s {
+ double pen; /* penalty */
+ dpoint_t c[2]; /* curve parameters */
+ double t, s; /* curve parameters */
+ double alpha; /* curve parameter */
+};
+typedef struct opti_s opti_t;
+
+/* calculate best fit from i+.5 to j+.5. Assume i<j (cyclically).
+ Return 0 and set badness and parameters (alpha, beta), if
+ possible. Return 1 if impossible. */
+static int opti_penalty(privpath_t *pp, int i, int j, opti_t *res, double opttolerance, int *convc, double *areac) {
+ int m = pp->curve.n;
+ int k, k1, k2, conv, i1;
+ double area, alpha, d, d1, d2;
+ dpoint_t p0, p1, p2, p3, pt;
+ double A, R, A1, A2, A3, A4;
+ double s, t;
+
+ /* check convexity, corner-freeness, and maximum bend < 179 degrees */
+
+ if (i==j) { /* sanity - a full loop can never be an opticurve */
+ return 1;
+ }
+
+ k = i;
+ i1 = mod(i+1, m);
+ k1 = mod(k+1, m);
+ conv = convc[k1];
+ if (conv == 0) {
+ return 1;
+ }
+ d = ddist(pp->curve.vertex[i], pp->curve.vertex[i1]);
+ for (k=k1; k!=j; k=k1) {
+ k1 = mod(k+1, m);
+ k2 = mod(k+2, m);
+ if (convc[k1] != conv) {
+ return 1;
+ }
+ if (sign(cprod(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2])) != conv) {
+ return 1;
+ }
+ if (iprod1(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2]) < d * ddist(pp->curve.vertex[k1], pp->curve.vertex[k2]) * COS179) {
+ return 1;
+ }
+ }
+
+ /* the curve we're working in: */
+ p0 = pp->curve.c[mod(i,m)][2];
+ p1 = pp->curve.vertex[mod(i+1,m)];
+ p2 = pp->curve.vertex[mod(j,m)];
+ p3 = pp->curve.c[mod(j,m)][2];
+
+ /* determine its area */
+ area = areac[j] - areac[i];
+ area -= dpara(pp->curve.vertex[0], pp->curve.c[i][2], pp->curve.c[j][2])/2;
+ if (i>=j) {
+ area += areac[m];
+ }
+
+ /* find intersection o of p0p1 and p2p3. Let t,s such that o =
+ interval(t,p0,p1) = interval(s,p3,p2). Let A be the area of the
+ triangle (p0,o,p3). */
+
+ A1 = dpara(p0, p1, p2);
+ A2 = dpara(p0, p1, p3);
+ A3 = dpara(p0, p2, p3);
+ /* A4 = dpara(p1, p2, p3); */
+ A4 = A1+A3-A2;
+
+ if (A2 == A1) { /* this should never happen */
+ return 1;
+ }
+
+ t = A3/(A3-A4);
+ s = A2/(A2-A1);
+ A = A2 * t / 2.0;
+
+ if (A == 0.0) { /* this should never happen */
+ return 1;
+ }
+
+ R = area / A; /* relative area */
+ alpha = 2 - sqrt(4 - R / 0.3); /* overall alpha for p0-o-p3 curve */
+
+ res->c[0] = interval(t * alpha, p0, p1);
+ res->c[1] = interval(s * alpha, p3, p2);
+ res->alpha = alpha;
+ res->t = t;
+ res->s = s;
+
+ p1 = res->c[0];
+ p2 = res->c[1]; /* the proposed curve is now (p0,p1,p2,p3) */
+
+ res->pen = 0;
+
+ /* calculate penalty */
+ /* check tangency with edges */
+ for (k=mod(i+1,m); k!=j; k=k1) {
+ k1 = mod(k+1,m);
+ t = tangent(p0, p1, p2, p3, pp->curve.vertex[k], pp->curve.vertex[k1]);
+ if (t<-.5) {
+ return 1;
+ }
+ pt = bezier(t, p0, p1, p2, p3);
+ d = ddist(pp->curve.vertex[k], pp->curve.vertex[k1]);
+ if (d == 0.0) { /* this should never happen */
+ return 1;
+ }
+ d1 = dpara(pp->curve.vertex[k], pp->curve.vertex[k1], pt) / d;
+ if (fabs(d1) > opttolerance) {
+ return 1;
+ }
+ if (iprod(pp->curve.vertex[k], pp->curve.vertex[k1], pt) < 0 || iprod(pp->curve.vertex[k1], pp->curve.vertex[k], pt) < 0) {
+ return 1;
+ }
+ res->pen += sq(d1);
+ }
+
+ /* check corners */
+ for (k=i; k!=j; k=k1) {
+ k1 = mod(k+1,m);
+ t = tangent(p0, p1, p2, p3, pp->curve.c[k][2], pp->curve.c[k1][2]);
+ if (t<-.5) {
+ return 1;
+ }
+ pt = bezier(t, p0, p1, p2, p3);
+ d = ddist(pp->curve.c[k][2], pp->curve.c[k1][2]);
+ if (d == 0.0) { /* this should never happen */
+ return 1;
+ }
+ d1 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pt) / d;
+ d2 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pp->curve.vertex[k1]) / d;
+ d2 *= 0.75 * pp->curve.alpha[k1];
+ if (d2 < 0) {
+ d1 = -d1;
+ d2 = -d2;
+ }
+ if (d1 < d2 - opttolerance) {
+ return 1;
+ }
+ if (d1 < d2) {
+ res->pen += sq(d1 - d2);
+ }
+ }
+
+ return 0;
+}
+
+/* optimize the path p, replacing sequences of Bezier segments by a
+ single segment when possible. Return 0 on success, 1 with errno set
+ on failure. */
+static int opticurve(privpath_t *pp, double opttolerance) {
+ int m = pp->curve.n;
+ int *pt = NULL; /* pt[m+1] */
+ double *pen = NULL; /* pen[m+1] */
+ int *len = NULL; /* len[m+1] */
+ opti_t *opt = NULL; /* opt[m+1] */
+ int om;
+ int i,j,r;
+ opti_t o;
+ dpoint_t p0;
+ int i1;
+ double area;
+ double alpha;
+ double *s = NULL;
+ double *t = NULL;
+
+ int *convc = NULL; /* conv[m]: pre-computed convexities */
+ double *areac = NULL; /* cumarea[m+1]: cache for fast area computation */
+
+ SAFE_CALLOC(pt, m+1, int);
+ SAFE_CALLOC(pen, m+1, double);
+ SAFE_CALLOC(len, m+1, int);
+ SAFE_CALLOC(opt, m+1, opti_t);
+ SAFE_CALLOC(convc, m, int);
+ SAFE_CALLOC(areac, m+1, double);
+
+ /* pre-calculate convexity: +1 = right turn, -1 = left turn, 0 = corner */
+ for (i=0; i<m; i++) {
+ if (pp->curve.tag[i] == POTRACE_CURVETO) {
+ convc[i] = sign(dpara(pp->curve.vertex[mod(i-1,m)], pp->curve.vertex[i], pp->curve.vertex[mod(i+1,m)]));
+ } else {
+ convc[i] = 0;
+ }
+ }
+
+ /* pre-calculate areas */
+ area = 0.0;
+ areac[0] = 0.0;
+ p0 = pp->curve.vertex[0];
+ for (i=0; i<m; i++) {
+ i1 = mod(i+1, m);
+ if (pp->curve.tag[i1] == POTRACE_CURVETO) {
+ alpha = pp->curve.alpha[i1];
+ area += 0.3*alpha*(4-alpha)*dpara(pp->curve.c[i][2], pp->curve.vertex[i1], pp->curve.c[i1][2])/2;
+ area += dpara(p0, pp->curve.c[i][2], pp->curve.c[i1][2])/2;
+ }
+ areac[i+1] = area;
+ }
+
+ pt[0] = -1;
+ pen[0] = 0;
+ len[0] = 0;
+
+ /* Fixme: we always start from a fixed point -- should find the best
+ curve cyclically */
+
+ for (j=1; j<=m; j++) {
+ /* calculate best path from 0 to j */
+ pt[j] = j-1;
+ pen[j] = pen[j-1];
+ len[j] = len[j-1]+1;
+
+ for (i=j-2; i>=0; i--) {
+ r = opti_penalty(pp, i, mod(j,m), &o, opttolerance, convc, areac);
+ if (r) {
+ break;
+ }
+ if (len[j] > len[i]+1 || (len[j] == len[i]+1 && pen[j] > pen[i] + o.pen)) {
+ pt[j] = i;
+ pen[j] = pen[i] + o.pen;
+ len[j] = len[i] + 1;
+ opt[j] = o;
+ }
+ }
+ }
+ om = len[m];
+ r = privcurve_init(&pp->ocurve, om);
+ if (r) {
+ goto calloc_error;
+ }
+ SAFE_CALLOC(s, om, double);
+ SAFE_CALLOC(t, om, double);
+
+ j = m;
+ for (i=om-1; i>=0; i--) {
+ if (pt[j]==j-1) {
+ pp->ocurve.tag[i] = pp->curve.tag[mod(j,m)];
+ pp->ocurve.c[i][0] = pp->curve.c[mod(j,m)][0];
+ pp->ocurve.c[i][1] = pp->curve.c[mod(j,m)][1];
+ pp->ocurve.c[i][2] = pp->curve.c[mod(j,m)][2];
+ pp->ocurve.vertex[i] = pp->curve.vertex[mod(j,m)];
+ pp->ocurve.alpha[i] = pp->curve.alpha[mod(j,m)];
+ pp->ocurve.alpha0[i] = pp->curve.alpha0[mod(j,m)];
+ pp->ocurve.beta[i] = pp->curve.beta[mod(j,m)];
+ s[i] = t[i] = 1.0;
+ } else {
+ pp->ocurve.tag[i] = POTRACE_CURVETO;
+ pp->ocurve.c[i][0] = opt[j].c[0];
+ pp->ocurve.c[i][1] = opt[j].c[1];
+ pp->ocurve.c[i][2] = pp->curve.c[mod(j,m)][2];
+ pp->ocurve.vertex[i] = interval(opt[j].s, pp->curve.c[mod(j,m)][2], pp->curve.vertex[mod(j,m)]);
+ pp->ocurve.alpha[i] = opt[j].alpha;
+ pp->ocurve.alpha0[i] = opt[j].alpha;
+ s[i] = opt[j].s;
+ t[i] = opt[j].t;
+ }
+ j = pt[j];
+ }
+
+ /* calculate beta parameters */
+ for (i=0; i<om; i++) {
+ i1 = mod(i+1,om);
+ pp->ocurve.beta[i] = s[i] / (s[i] + t[i1]);
+ }
+ pp->ocurve.alphacurve = 1;
+
+ free(pt);
+ free(pen);
+ free(len);
+ free(opt);
+ free(s);
+ free(t);
+ free(convc);
+ free(areac);
+ return 0;
+
+ calloc_error:
+ free(pt);
+ free(pen);
+ free(len);
+ free(opt);
+ free(s);
+ free(t);
+ free(convc);
+ free(areac);
+ return 1;
+}
+
+/* ---------------------------------------------------------------------- */
+
+#define TRY(x) if (x) goto try_error
+
+/* return 0 on success, 1 on error with errno set. */
+int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress) {
+ path_t *p;
+ double nn = 0, cn = 0;
+
+ if (progress->callback) {
+ /* precompute task size for progress estimates */
+ nn = 0;
+ list_forall (p, plist) {
+ nn += p->priv->len;
+ }
+ cn = 0;
+ }
+
+ /* call downstream function with each path */
+ list_forall (p, plist) {
+ TRY(calc_sums(p->priv));
+ TRY(calc_lon(p->priv));
+ TRY(bestpolygon(p->priv));
+ TRY(adjust_vertices(p->priv));
+ if (p->sign == '-') { /* reverse orientation of negative paths */
+ reverse(&p->priv->curve);
+ }
+ smooth(&p->priv->curve, param->alphamax);
+ if (param->opticurve) {
+ TRY(opticurve(p->priv, param->opttolerance));
+ p->priv->fcurve = &p->priv->ocurve;
+ } else {
+ p->priv->fcurve = &p->priv->curve;
+ }
+ privcurve_to_curve(p->priv->fcurve, &p->curve);
+
+ if (progress->callback) {
+ cn += p->priv->len;
+ progress_update(cn/nn, progress);
+ }
+ }
+
+ progress_update(1.0, progress);
+
+ return 0;
+
+ try_error:
+ return 1;
+}
diff --git a/dviware/dvisvgm/libs/potrace/trace.h b/dviware/dvisvgm/libs/potrace/trace.h
new file mode 100644
index 0000000000..5976453353
--- /dev/null
+++ b/dviware/dvisvgm/libs/potrace/trace.h
@@ -0,0 +1,15 @@
+/* Copyright (C) 2001-2017 Peter Selinger.
+ This file is part of Potrace. It is free software and it is covered
+ by the GNU General Public License. See the file COPYING for details. */
+
+
+#ifndef TRACE_H
+#define TRACE_H
+
+#include "potracelib.h"
+#include "progress.h"
+#include "curve.h"
+
+int process_path(path_t *plist, const potrace_param_t *param, progress_t *progress);
+
+#endif /* TRACE_H */
diff --git a/dviware/dvisvgm/libs/variant/LICENSE.md b/dviware/dvisvgm/libs/variant/LICENSE.md
new file mode 100644
index 0000000000..36b7cd93cd
--- /dev/null
+++ b/dviware/dvisvgm/libs/variant/LICENSE.md
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/dviware/dvisvgm/libs/variant/Makefile.am b/dviware/dvisvgm/libs/variant/Makefile.am
new file mode 100644
index 0000000000..259818b960
--- /dev/null
+++ b/dviware/dvisvgm/libs/variant/Makefile.am
@@ -0,0 +1,4 @@
+noinst_HEADERS = \
+ include/mpark/variant.hpp
+
+EXTRA_DIST = LICENSE.md
diff --git a/dviware/dvisvgm/libs/variant/Makefile.in b/dviware/dvisvgm/libs/variant/Makefile.in
new file mode 100644
index 0000000000..525c922b51
--- /dev/null
+++ b/dviware/dvisvgm/libs/variant/Makefile.in
@@ -0,0 +1,555 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/variant
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+ $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = \
+ include/mpark/variant.hpp
+
+EXTRA_DIST = LICENSE.md
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/variant/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/variant/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+ clean-libtool cscopelist-am ctags ctags-am distclean \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/variant/include/mpark/variant.hpp b/dviware/dvisvgm/libs/variant/include/mpark/variant.hpp
new file mode 100644
index 0000000000..990a44cbab
--- /dev/null
+++ b/dviware/dvisvgm/libs/variant/include/mpark/variant.hpp
@@ -0,0 +1,2813 @@
+// MPark.Variant
+//
+// Copyright Michael Park, 2015-2017
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef MPARK_VARIANT_HPP
+#define MPARK_VARIANT_HPP
+
+/*
+ variant synopsis
+
+namespace std {
+
+ // 20.7.2, class template variant
+ template <class... Types>
+ class variant {
+ public:
+
+ // 20.7.2.1, constructors
+ constexpr variant() noexcept(see below);
+ variant(const variant&);
+ variant(variant&&) noexcept(see below);
+
+ template <class T> constexpr variant(T&&) noexcept(see below);
+
+ template <class T, class... Args>
+ constexpr explicit variant(in_place_type_t<T>, Args&&...);
+
+ template <class T, class U, class... Args>
+ constexpr explicit variant(
+ in_place_type_t<T>, initializer_list<U>, Args&&...);
+
+ template <size_t I, class... Args>
+ constexpr explicit variant(in_place_index_t<I>, Args&&...);
+
+ template <size_t I, class U, class... Args>
+ constexpr explicit variant(
+ in_place_index_t<I>, initializer_list<U>, Args&&...);
+
+ // 20.7.2.2, destructor
+ ~variant();
+
+ // 20.7.2.3, assignment
+ variant& operator=(const variant&);
+ variant& operator=(variant&&) noexcept(see below);
+
+ template <class T> variant& operator=(T&&) noexcept(see below);
+
+ // 20.7.2.4, modifiers
+ template <class T, class... Args>
+ T& emplace(Args&&...);
+
+ template <class T, class U, class... Args>
+ T& emplace(initializer_list<U>, Args&&...);
+
+ template <size_t I, class... Args>
+ variant_alternative<I, variant>& emplace(Args&&...);
+
+ template <size_t I, class U, class... Args>
+ variant_alternative<I, variant>& emplace(initializer_list<U>, Args&&...);
+
+ // 20.7.2.5, value status
+ constexpr bool valueless_by_exception() const noexcept;
+ constexpr size_t index() const noexcept;
+
+ // 20.7.2.6, swap
+ void swap(variant&) noexcept(see below);
+ };
+
+ // 20.7.3, variant helper classes
+ template <class T> struct variant_size; // undefined
+
+ template <class T>
+ constexpr size_t variant_size_v = variant_size<T>::value;
+
+ template <class T> struct variant_size<const T>;
+ template <class T> struct variant_size<volatile T>;
+ template <class T> struct variant_size<const volatile T>;
+
+ template <class... Types>
+ struct variant_size<variant<Types...>>;
+
+ template <size_t I, class T> struct variant_alternative; // undefined
+
+ template <size_t I, class T>
+ using variant_alternative_t = typename variant_alternative<I, T>::type;
+
+ template <size_t I, class T> struct variant_alternative<I, const T>;
+ template <size_t I, class T> struct variant_alternative<I, volatile T>;
+ template <size_t I, class T> struct variant_alternative<I, const volatile T>;
+
+ template <size_t I, class... Types>
+ struct variant_alternative<I, variant<Types...>>;
+
+ constexpr size_t variant_npos = -1;
+
+ // 20.7.4, value access
+ template <class T, class... Types>
+ constexpr bool holds_alternative(const variant<Types...>&) noexcept;
+
+ template <size_t I, class... Types>
+ constexpr variant_alternative_t<I, variant<Types...>>&
+ get(variant<Types...>&);
+
+ template <size_t I, class... Types>
+ constexpr variant_alternative_t<I, variant<Types...>>&&
+ get(variant<Types...>&&);
+
+ template <size_t I, class... Types>
+ constexpr variant_alternative_t<I, variant<Types...>> const&
+ get(const variant<Types...>&);
+
+ template <size_t I, class... Types>
+ constexpr variant_alternative_t<I, variant<Types...>> const&&
+ get(const variant<Types...>&&);
+
+ template <class T, class... Types>
+ constexpr T& get(variant<Types...>&);
+
+ template <class T, class... Types>
+ constexpr T&& get(variant<Types...>&&);
+
+ template <class T, class... Types>
+ constexpr const T& get(const variant<Types...>&);
+
+ template <class T, class... Types>
+ constexpr const T&& get(const variant<Types...>&&);
+
+ template <size_t I, class... Types>
+ constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>
+ get_if(variant<Types...>*) noexcept;
+
+ template <size_t I, class... Types>
+ constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>
+ get_if(const variant<Types...>*) noexcept;
+
+ template <class T, class... Types>
+ constexpr add_pointer_t<T>
+ get_if(variant<Types...>*) noexcept;
+
+ template <class T, class... Types>
+ constexpr add_pointer_t<const T>
+ get_if(const variant<Types...>*) noexcept;
+
+ // 20.7.5, relational operators
+ template <class... Types>
+ constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);
+
+ template <class... Types>
+ constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);
+
+ template <class... Types>
+ constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);
+
+ template <class... Types>
+ constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);
+
+ template <class... Types>
+ constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);
+
+ template <class... Types>
+ constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);
+
+ // 20.7.6, visitation
+ template <class Visitor, class... Variants>
+ constexpr see below visit(Visitor&&, Variants&&...);
+
+ // 20.7.7, class monostate
+ struct monostate;
+
+ // 20.7.8, monostate relational operators
+ constexpr bool operator<(monostate, monostate) noexcept;
+ constexpr bool operator>(monostate, monostate) noexcept;
+ constexpr bool operator<=(monostate, monostate) noexcept;
+ constexpr bool operator>=(monostate, monostate) noexcept;
+ constexpr bool operator==(monostate, monostate) noexcept;
+ constexpr bool operator!=(monostate, monostate) noexcept;
+
+ // 20.7.9, specialized algorithms
+ template <class... Types>
+ void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);
+
+ // 20.7.10, class bad_variant_access
+ class bad_variant_access;
+
+ // 20.7.11, hash support
+ template <class T> struct hash;
+ template <class... Types> struct hash<variant<Types...>>;
+ template <> struct hash<monostate>;
+
+} // namespace std
+
+*/
+
+#include <cstddef>
+#include <exception>
+#include <functional>
+#include <initializer_list>
+#include <new>
+#include <type_traits>
+#include <utility>
+
+// MPark.Variant
+//
+// Copyright Michael Park, 2015-2017
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef MPARK_CONFIG_HPP
+#define MPARK_CONFIG_HPP
+
+// MSVC 2015 Update 3.
+#if __cplusplus < 201103L && (!defined(_MSC_VER) || _MSC_FULL_VER < 190024210)
+#error "MPark.Variant requires C++11 support."
+#endif
+
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
+#ifndef __has_include
+#define __has_include(x) 0
+#endif
+
+#ifndef __has_feature
+#define __has_feature(x) 0
+#endif
+
+#if __has_attribute(always_inline) || defined(__GNUC__)
+#define MPARK_ALWAYS_INLINE __attribute__((__always_inline__)) inline
+#elif defined(_MSC_VER)
+#define MPARK_ALWAYS_INLINE __forceinline
+#else
+#define MPARK_ALWAYS_INLINE inline
+#endif
+
+#if __has_builtin(__builtin_addressof) || \
+ (defined(__GNUC__) && __GNUC__ >= 7) || defined(_MSC_VER)
+#define MPARK_BUILTIN_ADDRESSOF
+#endif
+
+#if __has_builtin(__builtin_unreachable) || defined(__GNUC__)
+#define MPARK_BUILTIN_UNREACHABLE __builtin_unreachable()
+#elif defined(_MSC_VER)
+#define MPARK_BUILTIN_UNREACHABLE __assume(false)
+#else
+#define MPARK_BUILTIN_UNREACHABLE
+#endif
+
+#if __has_builtin(__type_pack_element)
+#define MPARK_TYPE_PACK_ELEMENT
+#endif
+
+#if defined(__cpp_constexpr) && __cpp_constexpr >= 200704 && \
+ !(defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 9)
+#define MPARK_CPP11_CONSTEXPR
+#endif
+
+#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304
+#define MPARK_CPP14_CONSTEXPR
+#endif
+
+#if __has_feature(cxx_exceptions) || defined(__cpp_exceptions) || \
+ (defined(_MSC_VER) && defined(_CPPUNWIND))
+#define MPARK_EXCEPTIONS
+#endif
+
+#if defined(__cpp_generic_lambdas) || defined(_MSC_VER)
+#define MPARK_GENERIC_LAMBDAS
+#endif
+
+#if defined(__cpp_lib_integer_sequence)
+#define MPARK_INTEGER_SEQUENCE
+#endif
+
+#if defined(__cpp_return_type_deduction) || defined(_MSC_VER)
+#define MPARK_RETURN_TYPE_DEDUCTION
+#endif
+
+#if defined(__cpp_lib_transparent_operators) || defined(_MSC_VER)
+#define MPARK_TRANSPARENT_OPERATORS
+#endif
+
+#if defined(__cpp_variable_templates) || defined(_MSC_VER)
+#define MPARK_VARIABLE_TEMPLATES
+#endif
+
+#if !defined(__GLIBCXX__) || __has_include(<codecvt>) // >= libstdc++-5
+#define MPARK_TRIVIALITY_TYPE_TRAITS
+#define MPARK_INCOMPLETE_TYPE_TRAITS
+#endif
+
+#endif // MPARK_CONFIG_HPP
+
+// MPark.Variant
+//
+// Copyright Michael Park, 2015-2017
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef MPARK_IN_PLACE_HPP
+#define MPARK_IN_PLACE_HPP
+
+#include <cstddef>
+
+
+namespace mpark {
+
+ struct in_place_t { explicit in_place_t() = default; };
+
+ template <std::size_t I>
+ struct in_place_index_t { explicit in_place_index_t() = default; };
+
+ template <typename T>
+ struct in_place_type_t { explicit in_place_type_t() = default; };
+
+#ifdef MPARK_VARIABLE_TEMPLATES
+ constexpr in_place_t in_place{};
+
+ template <std::size_t I> constexpr in_place_index_t<I> in_place_index{};
+
+ template <typename T> constexpr in_place_type_t<T> in_place_type{};
+#endif
+
+} // namespace mpark
+
+#endif // MPARK_IN_PLACE_HPP
+
+// MPark.Variant
+//
+// Copyright Michael Park, 2015-2017
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef MPARK_LIB_HPP
+#define MPARK_LIB_HPP
+
+#include <memory>
+#include <functional>
+#include <type_traits>
+#include <utility>
+
+
+#define MPARK_RETURN(...) \
+ noexcept(noexcept(__VA_ARGS__)) -> decltype(__VA_ARGS__) { return __VA_ARGS__; }
+
+namespace mpark {
+ namespace lib {
+ template <typename T>
+ struct identity { using type = T; };
+
+ inline namespace cpp14 {
+ template <typename T, std::size_t N>
+ struct array {
+ constexpr const T &operator[](std::size_t index) const {
+ return data[index];
+ }
+
+ T data[N == 0 ? 1 : N];
+ };
+
+ template <typename T>
+ using add_pointer_t = typename std::add_pointer<T>::type;
+
+ template <typename... Ts>
+ using common_type_t = typename std::common_type<Ts...>::type;
+
+ template <typename T>
+ using decay_t = typename std::decay<T>::type;
+
+ template <bool B, typename T = void>
+ using enable_if_t = typename std::enable_if<B, T>::type;
+
+ template <typename T>
+ using remove_const_t = typename std::remove_const<T>::type;
+
+ template <typename T>
+ using remove_reference_t = typename std::remove_reference<T>::type;
+
+ template <typename T>
+ inline constexpr T &&forward(remove_reference_t<T> &t) noexcept {
+ return static_cast<T &&>(t);
+ }
+
+ template <typename T>
+ inline constexpr T &&forward(remove_reference_t<T> &&t) noexcept {
+ static_assert(!std::is_lvalue_reference<T>::value,
+ "can not forward an rvalue as an lvalue");
+ return static_cast<T &&>(t);
+ }
+
+ template <typename T>
+ inline constexpr remove_reference_t<T> &&move(T &&t) noexcept {
+ return static_cast<remove_reference_t<T> &&>(t);
+ }
+
+#ifdef MPARK_INTEGER_SEQUENCE
+ using std::integer_sequence;
+ using std::index_sequence;
+ using std::make_index_sequence;
+ using std::index_sequence_for;
+#else
+ template <typename T, T... Is>
+ struct integer_sequence {
+ using value_type = T;
+ static constexpr std::size_t size() noexcept { return sizeof...(Is); }
+ };
+
+ template <std::size_t... Is>
+ using index_sequence = integer_sequence<std::size_t, Is...>;
+
+ template <typename Lhs, typename Rhs>
+ struct make_index_sequence_concat;
+
+ template <std::size_t... Lhs, std::size_t... Rhs>
+ struct make_index_sequence_concat<index_sequence<Lhs...>,
+ index_sequence<Rhs...>>
+ : identity<index_sequence<Lhs..., (sizeof...(Lhs) + Rhs)...>> {};
+
+ template <std::size_t N>
+ struct make_index_sequence_impl;
+
+ template <std::size_t N>
+ using make_index_sequence = typename make_index_sequence_impl<N>::type;
+
+ template <std::size_t N>
+ struct make_index_sequence_impl
+ : make_index_sequence_concat<make_index_sequence<N / 2>,
+ make_index_sequence<N - (N / 2)>> {};
+
+ template <>
+ struct make_index_sequence_impl<0> : identity<index_sequence<>> {};
+
+ template <>
+ struct make_index_sequence_impl<1> : identity<index_sequence<0>> {};
+
+ template <typename... Ts>
+ using index_sequence_for = make_index_sequence<sizeof...(Ts)>;
+#endif
+
+ // <functional>
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using equal_to = std::equal_to<>;
+#else
+ struct equal_to {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) == lib::forward<Rhs>(rhs))
+ };
+#endif
+
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using not_equal_to = std::not_equal_to<>;
+#else
+ struct not_equal_to {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) != lib::forward<Rhs>(rhs))
+ };
+#endif
+
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using less = std::less<>;
+#else
+ struct less {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) < lib::forward<Rhs>(rhs))
+ };
+#endif
+
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using greater = std::greater<>;
+#else
+ struct greater {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) > lib::forward<Rhs>(rhs))
+ };
+#endif
+
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using less_equal = std::less_equal<>;
+#else
+ struct less_equal {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) <= lib::forward<Rhs>(rhs))
+ };
+#endif
+
+#ifdef MPARK_TRANSPARENT_OPERATORS
+ using greater_equal = std::greater_equal<>;
+#else
+ struct greater_equal {
+ template <typename Lhs, typename Rhs>
+ inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const
+ MPARK_RETURN(lib::forward<Lhs>(lhs) >= lib::forward<Rhs>(rhs))
+ };
+#endif
+ } // namespace cpp14
+
+ inline namespace cpp17 {
+
+ // <type_traits>
+ template <bool B>
+ using bool_constant = std::integral_constant<bool, B>;
+
+ template <typename...>
+ struct voider : identity<void> {};
+
+ template <typename... Ts>
+ using void_t = typename voider<Ts...>::type;
+
+ namespace detail {
+ namespace swappable {
+
+ using std::swap;
+
+ template <typename T>
+ struct is_swappable {
+ private:
+ template <typename U,
+ typename = decltype(swap(std::declval<U &>(),
+ std::declval<U &>()))>
+ inline static std::true_type test(int);
+
+ template <typename U>
+ inline static std::false_type test(...);
+
+ public:
+ static constexpr bool value = decltype(test<T>(0))::value;
+ };
+
+ template <bool IsSwappable, typename T>
+ struct is_nothrow_swappable {
+ static constexpr bool value =
+ noexcept(swap(std::declval<T &>(), std::declval<T &>()));
+ };
+
+ template <typename T>
+ struct is_nothrow_swappable<false, T> : std::false_type {};
+
+ } // namespace swappable
+ } // namespace detail
+
+ using detail::swappable::is_swappable;
+
+ template <typename T>
+ using is_nothrow_swappable =
+ detail::swappable::is_nothrow_swappable<is_swappable<T>::value, T>;
+
+ // <functional>
+ namespace detail {
+
+ template <typename T>
+ struct is_reference_wrapper : std::false_type {};
+
+ template <typename T>
+ struct is_reference_wrapper<std::reference_wrapper<T>>
+ : std::true_type {};
+
+ template <bool, int>
+ struct Invoke;
+
+ template <>
+ struct Invoke<true /* pmf */, 0 /* is_base_of */> {
+ template <typename R, typename T, typename Arg, typename... Args>
+ inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)
+ MPARK_RETURN((lib::forward<Arg>(arg).*pmf)(lib::forward<Args>(args)...))
+ };
+
+ template <>
+ struct Invoke<true /* pmf */, 1 /* is_reference_wrapper */> {
+ template <typename R, typename T, typename Arg, typename... Args>
+ inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)
+ MPARK_RETURN((lib::forward<Arg>(arg).get().*pmf)(lib::forward<Args>(args)...))
+ };
+
+ template <>
+ struct Invoke<true /* pmf */, 2 /* otherwise */> {
+ template <typename R, typename T, typename Arg, typename... Args>
+ inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)
+ MPARK_RETURN(((*lib::forward<Arg>(arg)).*pmf)(lib::forward<Args>(args)...))
+ };
+
+ template <>
+ struct Invoke<false /* pmo */, 0 /* is_base_of */> {
+ template <typename R, typename T, typename Arg>
+ inline static constexpr auto invoke(R T::*pmo, Arg &&arg)
+ MPARK_RETURN(lib::forward<Arg>(arg).*pmo)
+ };
+
+ template <>
+ struct Invoke<false /* pmo */, 1 /* is_reference_wrapper */> {
+ template <typename R, typename T, typename Arg>
+ inline static constexpr auto invoke(R T::*pmo, Arg &&arg)
+ MPARK_RETURN(lib::forward<Arg>(arg).get().*pmo)
+ };
+
+ template <>
+ struct Invoke<false /* pmo */, 2 /* otherwise */> {
+ template <typename R, typename T, typename Arg>
+ inline static constexpr auto invoke(R T::*pmo, Arg &&arg)
+ MPARK_RETURN((*lib::forward<Arg>(arg)).*pmo)
+ };
+
+ template <typename R, typename T, typename Arg, typename... Args>
+ inline constexpr auto invoke(R T::*f, Arg &&arg, Args &&... args)
+ MPARK_RETURN(
+ Invoke<std::is_function<R>::value,
+ (std::is_base_of<T, lib::decay_t<Arg>>::value
+ ? 0
+ : is_reference_wrapper<lib::decay_t<Arg>>::value
+ ? 1
+ : 2)>::invoke(f,
+ lib::forward<Arg>(arg),
+ lib::forward<Args>(args)...))
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4100)
+#endif
+ template <typename F, typename... Args>
+ inline constexpr auto invoke(F &&f, Args &&... args)
+ MPARK_RETURN(lib::forward<F>(f)(lib::forward<Args>(args)...))
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+ } // namespace detail
+
+ template <typename F, typename... Args>
+ inline constexpr auto invoke(F &&f, Args &&... args)
+ MPARK_RETURN(detail::invoke(lib::forward<F>(f),
+ lib::forward<Args>(args)...))
+
+ namespace detail {
+
+ template <typename Void, typename, typename...>
+ struct invoke_result {};
+
+ template <typename F, typename... Args>
+ struct invoke_result<void_t<decltype(lib::invoke(
+ std::declval<F>(), std::declval<Args>()...))>,
+ F,
+ Args...>
+ : identity<decltype(
+ lib::invoke(std::declval<F>(), std::declval<Args>()...))> {};
+
+ } // namespace detail
+
+ template <typename F, typename... Args>
+ using invoke_result = detail::invoke_result<void, F, Args...>;
+
+ template <typename F, typename... Args>
+ using invoke_result_t = typename invoke_result<F, Args...>::type;
+
+ namespace detail {
+
+ template <typename Void, typename, typename...>
+ struct is_invocable : std::false_type {};
+
+ template <typename F, typename... Args>
+ struct is_invocable<void_t<invoke_result_t<F, Args...>>, F, Args...>
+ : std::true_type {};
+
+ template <typename Void, typename, typename, typename...>
+ struct is_invocable_r : std::false_type {};
+
+ template <typename R, typename F, typename... Args>
+ struct is_invocable_r<void_t<invoke_result_t<F, Args...>>,
+ R,
+ F,
+ Args...>
+ : std::is_convertible<invoke_result_t<F, Args...>, R> {};
+
+ } // namespace detail
+
+ template <typename F, typename... Args>
+ using is_invocable = detail::is_invocable<void, F, Args...>;
+
+ template <typename R, typename F, typename... Args>
+ using is_invocable_r = detail::is_invocable_r<void, R, F, Args...>;
+
+ namespace detail {
+
+ template <bool Invocable, typename F, typename... Args>
+ struct is_nothrow_invocable {
+ static constexpr bool value =
+ noexcept(lib::invoke(std::declval<F>(), std::declval<Args>()...));
+ };
+
+ template <typename F, typename... Args>
+ struct is_nothrow_invocable<false, F, Args...> : std::false_type {};
+
+ template <bool Invocable, typename R, typename F, typename... Args>
+ struct is_nothrow_invocable_r {
+ private:
+ inline static R impl() {
+ return lib::invoke(std::declval<F>(), std::declval<Args>()...);
+ }
+
+ public:
+ static constexpr bool value = noexcept(impl());
+ };
+
+ template <typename R, typename F, typename... Args>
+ struct is_nothrow_invocable_r<false, R, F, Args...> : std::false_type {};
+
+ } // namespace detail
+
+ template <typename F, typename... Args>
+ using is_nothrow_invocable = detail::
+ is_nothrow_invocable<is_invocable<F, Args...>::value, F, Args...>;
+
+ template <typename R, typename F, typename... Args>
+ using is_nothrow_invocable_r =
+ detail::is_nothrow_invocable_r<is_invocable_r<R, F, Args...>::value,
+ R,
+ F,
+ Args...>;
+
+ // <memory>
+#ifdef MPARK_BUILTIN_ADDRESSOF
+ template <typename T>
+ inline constexpr T *addressof(T &arg) noexcept {
+ return __builtin_addressof(arg);
+ }
+#else
+ namespace detail {
+
+ namespace has_addressof_impl {
+
+ struct fail;
+
+ template <typename T>
+ inline fail operator&(T &&);
+
+ template <typename T>
+ inline static constexpr bool impl() {
+ return (std::is_class<T>::value || std::is_union<T>::value) &&
+ !std::is_same<decltype(&std::declval<T &>()), fail>::value;
+ }
+
+ } // namespace has_addressof_impl
+
+ template <typename T>
+ using has_addressof = bool_constant<has_addressof_impl::impl<T>()>;
+
+ template <typename T>
+ inline constexpr T *addressof(T &arg, std::true_type) noexcept {
+ return std::addressof(arg);
+ }
+
+ template <typename T>
+ inline constexpr T *addressof(T &arg, std::false_type) noexcept {
+ return &arg;
+ }
+
+ } // namespace detail
+
+ template <typename T>
+ inline constexpr T *addressof(T &arg) noexcept {
+ return detail::addressof(arg, detail::has_addressof<T>{});
+ }
+#endif
+
+ template <typename T>
+ inline constexpr T *addressof(const T &&) = delete;
+
+ } // namespace cpp17
+
+ template <typename T>
+ struct remove_all_extents : identity<T> {};
+
+ template <typename T, std::size_t N>
+ struct remove_all_extents<array<T, N>> : remove_all_extents<T> {};
+
+ template <typename T>
+ using remove_all_extents_t = typename remove_all_extents<T>::type;
+
+ template <std::size_t N>
+ using size_constant = std::integral_constant<std::size_t, N>;
+
+ template <std::size_t I, typename T>
+ struct indexed_type : size_constant<I> { using type = T; };
+
+ template <bool... Bs>
+ using all = std::is_same<integer_sequence<bool, true, Bs...>,
+ integer_sequence<bool, Bs..., true>>;
+
+#ifdef MPARK_TYPE_PACK_ELEMENT
+ template <std::size_t I, typename... Ts>
+ using type_pack_element_t = __type_pack_element<I, Ts...>;
+#else
+ template <std::size_t I, typename... Ts>
+ struct type_pack_element_impl {
+ private:
+ template <typename>
+ struct set;
+
+ template <std::size_t... Is>
+ struct set<index_sequence<Is...>> : indexed_type<Is, Ts>... {};
+
+ template <typename T>
+ inline static std::enable_if<true, T> impl(indexed_type<I, T>);
+
+ inline static std::enable_if<false> impl(...);
+
+ public:
+ using type = decltype(impl(set<index_sequence_for<Ts...>>{}));
+ };
+
+ template <std::size_t I, typename... Ts>
+ using type_pack_element = typename type_pack_element_impl<I, Ts...>::type;
+
+ template <std::size_t I, typename... Ts>
+ using type_pack_element_t = typename type_pack_element<I, Ts...>::type;
+#endif
+
+#ifdef MPARK_TRIVIALITY_TYPE_TRAITS
+ using std::is_trivially_copy_constructible;
+ using std::is_trivially_move_constructible;
+ using std::is_trivially_copy_assignable;
+ using std::is_trivially_move_assignable;
+#else
+ template <typename T>
+ struct is_trivially_copy_constructible
+ : bool_constant<
+ std::is_copy_constructible<T>::value && __has_trivial_copy(T)> {};
+
+ template <typename T>
+ struct is_trivially_move_constructible : bool_constant<__is_trivial(T)> {};
+
+ template <typename T>
+ struct is_trivially_copy_assignable
+ : bool_constant<
+ std::is_copy_assignable<T>::value && __has_trivial_assign(T)> {};
+
+ template <typename T>
+ struct is_trivially_move_assignable : bool_constant<__is_trivial(T)> {};
+#endif
+
+ template <typename T, bool>
+ struct dependent_type : T {};
+
+ template <typename Is, std::size_t J>
+ struct push_back;
+
+ template <typename Is, std::size_t J>
+ using push_back_t = typename push_back<Is, J>::type;
+
+ template <std::size_t... Is, std::size_t J>
+ struct push_back<index_sequence<Is...>, J> {
+ using type = index_sequence<Is..., J>;
+ };
+
+ } // namespace lib
+} // namespace mpark
+
+#undef MPARK_RETURN
+
+#endif // MPARK_LIB_HPP
+
+
+namespace mpark {
+
+#ifdef MPARK_RETURN_TYPE_DEDUCTION
+
+#define AUTO auto
+#define AUTO_RETURN(...) { return __VA_ARGS__; }
+
+#define AUTO_REFREF auto &&
+#define AUTO_REFREF_RETURN(...) { return __VA_ARGS__; }
+
+#define DECLTYPE_AUTO decltype(auto)
+#define DECLTYPE_AUTO_RETURN(...) { return __VA_ARGS__; }
+
+#else
+
+#define AUTO auto
+#define AUTO_RETURN(...) \
+ -> lib::decay_t<decltype(__VA_ARGS__)> { return __VA_ARGS__; }
+
+#define AUTO_REFREF auto
+#define AUTO_REFREF_RETURN(...) \
+ -> decltype((__VA_ARGS__)) { \
+ static_assert(std::is_reference<decltype((__VA_ARGS__))>::value, ""); \
+ return __VA_ARGS__; \
+ }
+
+#define DECLTYPE_AUTO auto
+#define DECLTYPE_AUTO_RETURN(...) \
+ -> decltype(__VA_ARGS__) { return __VA_ARGS__; }
+
+#endif
+
+ class bad_variant_access : public std::exception {
+ public:
+ virtual const char *what() const noexcept override { return "bad_variant_access"; }
+ };
+
+ [[noreturn]] inline void throw_bad_variant_access() {
+#ifdef MPARK_EXCEPTIONS
+ throw bad_variant_access{};
+#else
+ std::terminate();
+ MPARK_BUILTIN_UNREACHABLE;
+#endif
+ }
+
+ template <typename... Ts>
+ class variant;
+
+ template <typename T>
+ struct variant_size;
+
+#ifdef MPARK_VARIABLE_TEMPLATES
+ template <typename T>
+ constexpr std::size_t variant_size_v = variant_size<T>::value;
+#endif
+
+ template <typename T>
+ struct variant_size<const T> : variant_size<T> {};
+
+ template <typename T>
+ struct variant_size<volatile T> : variant_size<T> {};
+
+ template <typename T>
+ struct variant_size<const volatile T> : variant_size<T> {};
+
+ template <typename... Ts>
+ struct variant_size<variant<Ts...>> : lib::size_constant<sizeof...(Ts)> {};
+
+ template <std::size_t I, typename T>
+ struct variant_alternative;
+
+ template <std::size_t I, typename T>
+ using variant_alternative_t = typename variant_alternative<I, T>::type;
+
+ template <std::size_t I, typename T>
+ struct variant_alternative<I, const T>
+ : std::add_const<variant_alternative_t<I, T>> {};
+
+ template <std::size_t I, typename T>
+ struct variant_alternative<I, volatile T>
+ : std::add_volatile<variant_alternative_t<I, T>> {};
+
+ template <std::size_t I, typename T>
+ struct variant_alternative<I, const volatile T>
+ : std::add_cv<variant_alternative_t<I, T>> {};
+
+ template <std::size_t I, typename... Ts>
+ struct variant_alternative<I, variant<Ts...>> {
+ static_assert(I < sizeof...(Ts),
+ "index out of bounds in `std::variant_alternative<>`");
+ using type = lib::type_pack_element_t<I, Ts...>;
+ };
+
+ constexpr std::size_t variant_npos = static_cast<std::size_t>(-1);
+
+ namespace detail {
+
+ constexpr std::size_t not_found = static_cast<std::size_t>(-1);
+ constexpr std::size_t ambiguous = static_cast<std::size_t>(-2);
+
+#ifdef MPARK_CPP14_CONSTEXPR
+ template <typename T, typename... Ts>
+ inline constexpr std::size_t find_index() {
+ constexpr lib::array<bool, sizeof...(Ts)> matches = {
+ {std::is_same<T, Ts>::value...}
+ };
+ std::size_t result = not_found;
+ for (std::size_t i = 0; i < sizeof...(Ts); ++i) {
+ if (matches[i]) {
+ if (result != not_found) {
+ return ambiguous;
+ }
+ result = i;
+ }
+ }
+ return result;
+ }
+#else
+ inline constexpr std::size_t find_index_impl(std::size_t result,
+ std::size_t) {
+ return result;
+ }
+
+ template <typename... Bs>
+ inline constexpr std::size_t find_index_impl(std::size_t result,
+ std::size_t idx,
+ bool b,
+ Bs... bs) {
+ return b ? (result != not_found ? ambiguous
+ : find_index_impl(idx, idx + 1, bs...))
+ : find_index_impl(result, idx + 1, bs...);
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr std::size_t find_index() {
+ return find_index_impl(not_found, 0, std::is_same<T, Ts>::value...);
+ }
+#endif
+
+ template <std::size_t I>
+ using find_index_sfinae_impl =
+ lib::enable_if_t<I != not_found && I != ambiguous,
+ lib::size_constant<I>>;
+
+ template <typename T, typename... Ts>
+ using find_index_sfinae = find_index_sfinae_impl<find_index<T, Ts...>()>;
+
+ template <std::size_t I>
+ struct find_index_checked_impl : lib::size_constant<I> {
+ static_assert(I != not_found, "the specified type is not found.");
+ static_assert(I != ambiguous, "the specified type is ambiguous.");
+ };
+
+ template <typename T, typename... Ts>
+ using find_index_checked = find_index_checked_impl<find_index<T, Ts...>()>;
+
+ struct valueless_t {};
+
+ enum class Trait { TriviallyAvailable, Available, Unavailable };
+
+ template <typename T,
+ template <typename> class IsTriviallyAvailable,
+ template <typename> class IsAvailable>
+ inline constexpr Trait trait() {
+ return IsTriviallyAvailable<T>::value
+ ? Trait::TriviallyAvailable
+ : IsAvailable<T>::value ? Trait::Available
+ : Trait::Unavailable;
+ }
+
+#ifdef MPARK_CPP14_CONSTEXPR
+ template <typename... Traits>
+ inline constexpr Trait common_trait(Traits... traits_) {
+ Trait result = Trait::TriviallyAvailable;
+ lib::array<Trait, sizeof...(Traits)> traits = {{traits_...}};
+ for (std::size_t i = 0; i < sizeof...(Traits); ++i) {
+ Trait t = traits[i];
+ if (static_cast<int>(t) > static_cast<int>(result)) {
+ result = t;
+ }
+ }
+ return result;
+ }
+#else
+ inline constexpr Trait common_trait_impl(Trait result) { return result; }
+
+ template <typename... Traits>
+ inline constexpr Trait common_trait_impl(Trait result,
+ Trait t,
+ Traits... ts) {
+ return static_cast<int>(t) > static_cast<int>(result)
+ ? common_trait_impl(t, ts...)
+ : common_trait_impl(result, ts...);
+ }
+
+ template <typename... Traits>
+ inline constexpr Trait common_trait(Traits... ts) {
+ return common_trait_impl(Trait::TriviallyAvailable, ts...);
+ }
+#endif
+
+ template <typename... Ts>
+ struct traits {
+ static constexpr Trait copy_constructible_trait =
+ common_trait(trait<Ts,
+ lib::is_trivially_copy_constructible,
+ std::is_copy_constructible>()...);
+
+ static constexpr Trait move_constructible_trait =
+ common_trait(trait<Ts,
+ lib::is_trivially_move_constructible,
+ std::is_move_constructible>()...);
+
+ static constexpr Trait copy_assignable_trait =
+ common_trait(copy_constructible_trait,
+ trait<Ts,
+ lib::is_trivially_copy_assignable,
+ std::is_copy_assignable>()...);
+
+ static constexpr Trait move_assignable_trait =
+ common_trait(move_constructible_trait,
+ trait<Ts,
+ lib::is_trivially_move_assignable,
+ std::is_move_assignable>()...);
+
+ static constexpr Trait destructible_trait =
+ common_trait(trait<Ts,
+ std::is_trivially_destructible,
+ std::is_destructible>()...);
+ };
+
+ namespace access {
+
+ struct recursive_union {
+#ifdef MPARK_RETURN_TYPE_DEDUCTION
+ template <typename V>
+ inline static constexpr auto &&get_alt(V &&v, in_place_index_t<0>) {
+ return lib::forward<V>(v).head_;
+ }
+
+ template <typename V, std::size_t I>
+ inline static constexpr auto &&get_alt(V &&v, in_place_index_t<I>) {
+ return get_alt(lib::forward<V>(v).tail_, in_place_index_t<I - 1>{});
+ }
+#else
+ template <std::size_t I, bool Dummy = true>
+ struct get_alt_impl {
+ template <typename V>
+ inline constexpr AUTO_REFREF operator()(V &&v) const
+ AUTO_REFREF_RETURN(get_alt_impl<I - 1>{}(lib::forward<V>(v).tail_))
+ };
+
+ template <bool Dummy>
+ struct get_alt_impl<0, Dummy> {
+ template <typename V>
+ inline constexpr AUTO_REFREF operator()(V &&v) const
+ AUTO_REFREF_RETURN(lib::forward<V>(v).head_)
+ };
+
+ template <typename V, std::size_t I>
+ inline static constexpr AUTO_REFREF get_alt(V &&v, in_place_index_t<I>)
+ AUTO_REFREF_RETURN(get_alt_impl<I>{}(lib::forward<V>(v)))
+#endif
+ };
+
+ struct base {
+ template <std::size_t I, typename V>
+ inline static constexpr AUTO_REFREF get_alt(V &&v)
+#ifdef _MSC_VER
+ AUTO_REFREF_RETURN(recursive_union::get_alt(
+ lib::forward<V>(v).data_, in_place_index_t<I>{}))
+#else
+ AUTO_REFREF_RETURN(recursive_union::get_alt(
+ data(lib::forward<V>(v)), in_place_index_t<I>{}))
+#endif
+ };
+
+ struct variant {
+ template <std::size_t I, typename V>
+ inline static constexpr AUTO_REFREF get_alt(V &&v)
+ AUTO_REFREF_RETURN(base::get_alt<I>(lib::forward<V>(v).impl_))
+ };
+
+ } // namespace access
+
+ namespace visitation {
+
+#if defined(MPARK_CPP14_CONSTEXPR) && !defined(_MSC_VER)
+#define MPARK_VARIANT_SWITCH_VISIT
+#endif
+
+ struct base {
+ template <typename Visitor, typename... Vs>
+ using dispatch_result_t = decltype(
+ lib::invoke(std::declval<Visitor>(),
+ access::base::get_alt<0>(std::declval<Vs>())...));
+
+ template <typename Expected>
+ struct expected {
+ template <typename Actual>
+ inline static constexpr bool but_got() {
+ return std::is_same<Expected, Actual>::value;
+ }
+ };
+
+ template <typename Expected, typename Actual>
+ struct visit_return_type_check {
+ static_assert(
+ expected<Expected>::template but_got<Actual>(),
+ "`visit` requires the visitor to have a single return type");
+
+ template <typename Visitor, typename... Alts>
+ inline static constexpr DECLTYPE_AUTO invoke(Visitor &&visitor,
+ Alts &&... alts)
+ DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor),
+ lib::forward<Alts>(alts)...))
+ };
+
+#ifdef MPARK_VARIANT_SWITCH_VISIT
+ template <bool B, typename R, typename... ITs>
+ struct dispatcher;
+
+ template <typename R, typename... ITs>
+ struct dispatcher<false, R, ITs...> {
+ template <std::size_t B, typename F, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch(
+ F &&, typename ITs::type &&..., Vs &&...) {
+ MPARK_BUILTIN_UNREACHABLE;
+ }
+
+ template <std::size_t I, typename F, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch_case(F &&, Vs &&...) {
+ MPARK_BUILTIN_UNREACHABLE;
+ }
+
+ template <std::size_t B, typename F, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch_at(std::size_t,
+ F &&,
+ Vs &&...) {
+ MPARK_BUILTIN_UNREACHABLE;
+ }
+ };
+
+ template <typename R, typename... ITs>
+ struct dispatcher<true, R, ITs...> {
+ template <std::size_t B, typename F>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch(
+ F &&f, typename ITs::type &&... visited_vs) {
+ using Expected = R;
+ using Actual = decltype(lib::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<ITs::value>(
+ lib::forward<typename ITs::type>(visited_vs))...));
+ return visit_return_type_check<Expected, Actual>::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<ITs::value>(
+ lib::forward<typename ITs::type>(visited_vs))...);
+ }
+
+ template <std::size_t B, typename F, typename V, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch(
+ F &&f, typename ITs::type &&... visited_vs, V &&v, Vs &&... vs) {
+#define MPARK_DISPATCH(I) \
+ dispatcher<(I < lib::decay_t<V>::size()), \
+ R, \
+ ITs..., \
+ lib::indexed_type<I, V>>:: \
+ template dispatch<0>(lib::forward<F>(f), \
+ lib::forward<typename ITs::type>(visited_vs)..., \
+ lib::forward<V>(v), \
+ lib::forward<Vs>(vs)...)
+
+#define MPARK_DEFAULT(I) \
+ dispatcher<(I < lib::decay_t<V>::size()), R, ITs...>::template dispatch<I>( \
+ lib::forward<F>(f), \
+ lib::forward<typename ITs::type>(visited_vs)..., \
+ lib::forward<V>(v), \
+ lib::forward<Vs>(vs)...)
+
+ switch (v.index()) {
+ case B + 0: return MPARK_DISPATCH(B + 0);
+ case B + 1: return MPARK_DISPATCH(B + 1);
+ case B + 2: return MPARK_DISPATCH(B + 2);
+ case B + 3: return MPARK_DISPATCH(B + 3);
+ case B + 4: return MPARK_DISPATCH(B + 4);
+ case B + 5: return MPARK_DISPATCH(B + 5);
+ case B + 6: return MPARK_DISPATCH(B + 6);
+ case B + 7: return MPARK_DISPATCH(B + 7);
+ case B + 8: return MPARK_DISPATCH(B + 8);
+ case B + 9: return MPARK_DISPATCH(B + 9);
+ case B + 10: return MPARK_DISPATCH(B + 10);
+ case B + 11: return MPARK_DISPATCH(B + 11);
+ case B + 12: return MPARK_DISPATCH(B + 12);
+ case B + 13: return MPARK_DISPATCH(B + 13);
+ case B + 14: return MPARK_DISPATCH(B + 14);
+ case B + 15: return MPARK_DISPATCH(B + 15);
+ case B + 16: return MPARK_DISPATCH(B + 16);
+ case B + 17: return MPARK_DISPATCH(B + 17);
+ case B + 18: return MPARK_DISPATCH(B + 18);
+ case B + 19: return MPARK_DISPATCH(B + 19);
+ case B + 20: return MPARK_DISPATCH(B + 20);
+ case B + 21: return MPARK_DISPATCH(B + 21);
+ case B + 22: return MPARK_DISPATCH(B + 22);
+ case B + 23: return MPARK_DISPATCH(B + 23);
+ case B + 24: return MPARK_DISPATCH(B + 24);
+ case B + 25: return MPARK_DISPATCH(B + 25);
+ case B + 26: return MPARK_DISPATCH(B + 26);
+ case B + 27: return MPARK_DISPATCH(B + 27);
+ case B + 28: return MPARK_DISPATCH(B + 28);
+ case B + 29: return MPARK_DISPATCH(B + 29);
+ case B + 30: return MPARK_DISPATCH(B + 30);
+ case B + 31: return MPARK_DISPATCH(B + 31);
+ default: return MPARK_DEFAULT(B + 32);
+ }
+
+#undef MPARK_DEFAULT
+#undef MPARK_DISPATCH
+ }
+
+ template <std::size_t I, typename F, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch_case(F &&f,
+ Vs &&... vs) {
+ using Expected = R;
+ using Actual = decltype(
+ lib::invoke(lib::forward<F>(f),
+ access::base::get_alt<I>(lib::forward<Vs>(vs))...));
+ return visit_return_type_check<Expected, Actual>::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<I>(lib::forward<Vs>(vs))...);
+ }
+
+ template <std::size_t B, typename F, typename V, typename... Vs>
+ MPARK_ALWAYS_INLINE static constexpr R dispatch_at(std::size_t index,
+ F &&f,
+ V &&v,
+ Vs &&... vs) {
+ static_assert(lib::all<(lib::decay_t<V>::size() ==
+ lib::decay_t<Vs>::size())...>::value,
+ "all of the variants must be the same size.");
+#define MPARK_DISPATCH_AT(I) \
+ dispatcher<(I < lib::decay_t<V>::size()), R>::template dispatch_case<I>( \
+ lib::forward<F>(f), lib::forward<V>(v), lib::forward<Vs>(vs)...)
+
+#define MPARK_DEFAULT(I) \
+ dispatcher<(I < lib::decay_t<V>::size()), R>::template dispatch_at<I>( \
+ index, lib::forward<F>(f), lib::forward<V>(v), lib::forward<Vs>(vs)...)
+
+ switch (index) {
+ case B + 0: return MPARK_DISPATCH_AT(B + 0);
+ case B + 1: return MPARK_DISPATCH_AT(B + 1);
+ case B + 2: return MPARK_DISPATCH_AT(B + 2);
+ case B + 3: return MPARK_DISPATCH_AT(B + 3);
+ case B + 4: return MPARK_DISPATCH_AT(B + 4);
+ case B + 5: return MPARK_DISPATCH_AT(B + 5);
+ case B + 6: return MPARK_DISPATCH_AT(B + 6);
+ case B + 7: return MPARK_DISPATCH_AT(B + 7);
+ case B + 8: return MPARK_DISPATCH_AT(B + 8);
+ case B + 9: return MPARK_DISPATCH_AT(B + 9);
+ case B + 10: return MPARK_DISPATCH_AT(B + 10);
+ case B + 11: return MPARK_DISPATCH_AT(B + 11);
+ case B + 12: return MPARK_DISPATCH_AT(B + 12);
+ case B + 13: return MPARK_DISPATCH_AT(B + 13);
+ case B + 14: return MPARK_DISPATCH_AT(B + 14);
+ case B + 15: return MPARK_DISPATCH_AT(B + 15);
+ case B + 16: return MPARK_DISPATCH_AT(B + 16);
+ case B + 17: return MPARK_DISPATCH_AT(B + 17);
+ case B + 18: return MPARK_DISPATCH_AT(B + 18);
+ case B + 19: return MPARK_DISPATCH_AT(B + 19);
+ case B + 20: return MPARK_DISPATCH_AT(B + 20);
+ case B + 21: return MPARK_DISPATCH_AT(B + 21);
+ case B + 22: return MPARK_DISPATCH_AT(B + 22);
+ case B + 23: return MPARK_DISPATCH_AT(B + 23);
+ case B + 24: return MPARK_DISPATCH_AT(B + 24);
+ case B + 25: return MPARK_DISPATCH_AT(B + 25);
+ case B + 26: return MPARK_DISPATCH_AT(B + 26);
+ case B + 27: return MPARK_DISPATCH_AT(B + 27);
+ case B + 28: return MPARK_DISPATCH_AT(B + 28);
+ case B + 29: return MPARK_DISPATCH_AT(B + 29);
+ case B + 30: return MPARK_DISPATCH_AT(B + 30);
+ case B + 31: return MPARK_DISPATCH_AT(B + 31);
+ default: return MPARK_DEFAULT(B + 32);
+ }
+
+#undef MPARK_DEFAULT
+#undef MPARK_DISPATCH_AT
+ }
+ };
+#else
+ template <typename T>
+ inline static constexpr const T &at(const T &elem) noexcept {
+ return elem;
+ }
+
+ template <typename T, std::size_t N, typename... Is>
+ inline static constexpr const lib::remove_all_extents_t<T> &at(
+ const lib::array<T, N> &elems, std::size_t i, Is... is) noexcept {
+ return at(elems[i], is...);
+ }
+
+ template <typename F, typename... Fs>
+ inline static constexpr lib::array<lib::decay_t<F>, sizeof...(Fs) + 1>
+ make_farray(F &&f, Fs &&... fs) {
+ return {{lib::forward<F>(f), lib::forward<Fs>(fs)...}};
+ }
+
+ template <typename F, typename... Vs>
+ struct make_fmatrix_impl {
+
+ template <std::size_t... Is>
+ inline static constexpr dispatch_result_t<F, Vs...> dispatch(
+ F &&f, Vs &&... vs) {
+ using Expected = dispatch_result_t<F, Vs...>;
+ using Actual = decltype(lib::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<Is>(lib::forward<Vs>(vs))...));
+ return visit_return_type_check<Expected, Actual>::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<Is>(lib::forward<Vs>(vs))...);
+ }
+
+#ifdef MPARK_RETURN_TYPE_DEDUCTION
+ template <std::size_t... Is>
+ inline static constexpr auto impl(lib::index_sequence<Is...>) {
+ return &dispatch<Is...>;
+ }
+
+ template <typename Is, std::size_t... Js, typename... Ls>
+ inline static constexpr auto impl(Is,
+ lib::index_sequence<Js...>,
+ Ls... ls) {
+ return make_farray(impl(lib::push_back_t<Is, Js>{}, ls...)...);
+ }
+#else
+ template <typename...>
+ struct impl;
+
+ template <std::size_t... Is>
+ struct impl<lib::index_sequence<Is...>> {
+ inline constexpr AUTO operator()() const
+ AUTO_RETURN(&dispatch<Is...>)
+ };
+
+ template <typename Is, std::size_t... Js, typename... Ls>
+ struct impl<Is, lib::index_sequence<Js...>, Ls...> {
+ inline constexpr AUTO operator()() const
+ AUTO_RETURN(
+ make_farray(impl<lib::push_back_t<Is, Js>, Ls...>{}()...))
+ };
+#endif
+ };
+
+#ifdef MPARK_RETURN_TYPE_DEDUCTION
+ template <typename F, typename... Vs>
+ inline static constexpr auto make_fmatrix() {
+ return make_fmatrix_impl<F, Vs...>::impl(
+ lib::index_sequence<>{},
+ lib::make_index_sequence<lib::decay_t<Vs>::size()>{}...);
+ }
+#else
+ template <typename F, typename... Vs>
+ inline static constexpr AUTO make_fmatrix()
+ AUTO_RETURN(
+ typename make_fmatrix_impl<F, Vs...>::template impl<
+ lib::index_sequence<>,
+ lib::make_index_sequence<lib::decay_t<Vs>::size()>...>{}())
+#endif
+
+ template <typename F, typename... Vs>
+ struct make_fdiagonal_impl {
+ template <std::size_t I>
+ inline static constexpr dispatch_result_t<F, Vs...> dispatch(
+ F &&f, Vs &&... vs) {
+ using Expected = dispatch_result_t<F, Vs...>;
+ using Actual = decltype(
+ lib::invoke(lib::forward<F>(f),
+ access::base::get_alt<I>(lib::forward<Vs>(vs))...));
+ return visit_return_type_check<Expected, Actual>::invoke(
+ lib::forward<F>(f),
+ access::base::get_alt<I>(lib::forward<Vs>(vs))...);
+ }
+
+ template <std::size_t... Is>
+ inline static constexpr AUTO impl(lib::index_sequence<Is...>)
+ AUTO_RETURN(make_farray(&dispatch<Is>...))
+ };
+
+ template <typename F, typename V, typename... Vs>
+ inline static constexpr auto make_fdiagonal()
+ -> decltype(make_fdiagonal_impl<F, V, Vs...>::impl(
+ lib::make_index_sequence<lib::decay_t<V>::size()>{})) {
+ static_assert(lib::all<(lib::decay_t<V>::size() ==
+ lib::decay_t<Vs>::size())...>::value,
+ "all of the variants must be the same size.");
+ return make_fdiagonal_impl<F, V, Vs...>::impl(
+ lib::make_index_sequence<lib::decay_t<V>::size()>{});
+ }
+#endif
+ };
+
+#if !defined(MPARK_VARIANT_SWITCH_VISIT) && \
+ (!defined(_MSC_VER) || _MSC_VER >= 1910)
+ template <typename F, typename... Vs>
+ using fmatrix_t = decltype(base::make_fmatrix<F, Vs...>());
+
+ template <typename F, typename... Vs>
+ struct fmatrix {
+ static constexpr fmatrix_t<F, Vs...> value =
+ base::make_fmatrix<F, Vs...>();
+ };
+
+ template <typename F, typename... Vs>
+ constexpr fmatrix_t<F, Vs...> fmatrix<F, Vs...>::value;
+
+ template <typename F, typename... Vs>
+ using fdiagonal_t = decltype(base::make_fdiagonal<F, Vs...>());
+
+ template <typename F, typename... Vs>
+ struct fdiagonal {
+ static constexpr fdiagonal_t<F, Vs...> value =
+ base::make_fdiagonal<F, Vs...>();
+ };
+
+ template <typename F, typename... Vs>
+ constexpr fdiagonal_t<F, Vs...> fdiagonal<F, Vs...>::value;
+#endif
+
+ struct alt {
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,
+ Vs &&... vs)
+#ifdef MPARK_VARIANT_SWITCH_VISIT
+ DECLTYPE_AUTO_RETURN(
+ base::dispatcher<
+ true,
+ base::dispatch_result_t<Visitor,
+ decltype(as_base(
+ lib::forward<Vs>(vs)))...>>::
+ template dispatch<0>(lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#elif !defined(_MSC_VER) || _MSC_VER >= 1910
+ DECLTYPE_AUTO_RETURN(base::at(
+ fmatrix<Visitor &&,
+ decltype(as_base(lib::forward<Vs>(vs)))...>::value,
+ vs.index()...)(lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#else
+ DECLTYPE_AUTO_RETURN(base::at(
+ base::make_fmatrix<Visitor &&,
+ decltype(as_base(lib::forward<Vs>(vs)))...>(),
+ vs.index()...)(lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#endif
+
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,
+ Visitor &&visitor,
+ Vs &&... vs)
+#ifdef MPARK_VARIANT_SWITCH_VISIT
+ DECLTYPE_AUTO_RETURN(
+ base::dispatcher<
+ true,
+ base::dispatch_result_t<Visitor,
+ decltype(as_base(
+ lib::forward<Vs>(vs)))...>>::
+ template dispatch_at<0>(index,
+ lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#elif !defined(_MSC_VER) || _MSC_VER >= 1910
+ DECLTYPE_AUTO_RETURN(base::at(
+ fdiagonal<Visitor &&,
+ decltype(as_base(lib::forward<Vs>(vs)))...>::value,
+ index)(lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#else
+ DECLTYPE_AUTO_RETURN(base::at(
+ base::make_fdiagonal<Visitor &&,
+ decltype(as_base(lib::forward<Vs>(vs)))...>(),
+ index)(lib::forward<Visitor>(visitor),
+ as_base(lib::forward<Vs>(vs))...))
+#endif
+ };
+
+ struct variant {
+ private:
+ template <typename Visitor>
+ struct visitor {
+ template <typename... Values>
+ inline static constexpr bool does_not_handle() {
+ return lib::is_invocable<Visitor, Values...>::value;
+ }
+ };
+
+ template <typename Visitor, typename... Values>
+ struct visit_exhaustiveness_check {
+ static_assert(visitor<Visitor>::template does_not_handle<Values...>(),
+ "`visit` requires the visitor to be exhaustive.");
+
+ inline static constexpr DECLTYPE_AUTO invoke(Visitor &&visitor,
+ Values &&... values)
+ DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor),
+ lib::forward<Values>(values)...))
+ };
+
+ template <typename Visitor>
+ struct value_visitor {
+ Visitor &&visitor_;
+
+ template <typename... Alts>
+ inline constexpr DECLTYPE_AUTO operator()(Alts &&... alts) const
+ DECLTYPE_AUTO_RETURN(
+ visit_exhaustiveness_check<
+ Visitor,
+ decltype((lib::forward<Alts>(alts).value))...>::
+ invoke(lib::forward<Visitor>(visitor_),
+ lib::forward<Alts>(alts).value...))
+ };
+
+ template <typename Visitor>
+ inline static constexpr AUTO make_value_visitor(Visitor &&visitor)
+ AUTO_RETURN(value_visitor<Visitor>{lib::forward<Visitor>(visitor)})
+
+ public:
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,
+ Vs &&... vs)
+ DECLTYPE_AUTO_RETURN(alt::visit_alt(lib::forward<Visitor>(visitor),
+ lib::forward<Vs>(vs).impl_...))
+
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,
+ Visitor &&visitor,
+ Vs &&... vs)
+ DECLTYPE_AUTO_RETURN(
+ alt::visit_alt_at(index,
+ lib::forward<Visitor>(visitor),
+ lib::forward<Vs>(vs).impl_...))
+
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_value(Visitor &&visitor,
+ Vs &&... vs)
+ DECLTYPE_AUTO_RETURN(
+ visit_alt(make_value_visitor(lib::forward<Visitor>(visitor)),
+ lib::forward<Vs>(vs)...))
+
+ template <typename Visitor, typename... Vs>
+ inline static constexpr DECLTYPE_AUTO visit_value_at(std::size_t index,
+ Visitor &&visitor,
+ Vs &&... vs)
+ DECLTYPE_AUTO_RETURN(
+ visit_alt_at(index,
+ make_value_visitor(lib::forward<Visitor>(visitor)),
+ lib::forward<Vs>(vs)...))
+ };
+
+ } // namespace visitation
+
+ template <std::size_t Index, typename T>
+ struct alt {
+ using value_type = T;
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4244)
+#endif
+ template <typename... Args>
+ inline explicit constexpr alt(in_place_t, Args &&... args)
+ : value(lib::forward<Args>(args)...) {}
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+ T value;
+ };
+
+ template <Trait DestructibleTrait, std::size_t Index, typename... Ts>
+ union recursive_union;
+
+ template <Trait DestructibleTrait, std::size_t Index>
+ union recursive_union<DestructibleTrait, Index> {};
+
+#define MPARK_VARIANT_RECURSIVE_UNION(destructible_trait, destructor) \
+ template <std::size_t Index, typename T, typename... Ts> \
+ union recursive_union<destructible_trait, Index, T, Ts...> { \
+ public: \
+ inline explicit constexpr recursive_union(valueless_t) noexcept \
+ : dummy_{} {} \
+ \
+ template <typename... Args> \
+ inline explicit constexpr recursive_union(in_place_index_t<0>, \
+ Args &&... args) \
+ : head_(in_place_t{}, lib::forward<Args>(args)...) {} \
+ \
+ template <std::size_t I, typename... Args> \
+ inline explicit constexpr recursive_union(in_place_index_t<I>, \
+ Args &&... args) \
+ : tail_(in_place_index_t<I - 1>{}, lib::forward<Args>(args)...) {} \
+ \
+ recursive_union(const recursive_union &) = default; \
+ recursive_union(recursive_union &&) = default; \
+ \
+ destructor \
+ \
+ recursive_union &operator=(const recursive_union &) = default; \
+ recursive_union &operator=(recursive_union &&) = default; \
+ \
+ private: \
+ char dummy_; \
+ alt<Index, T> head_; \
+ recursive_union<destructible_trait, Index + 1, Ts...> tail_; \
+ \
+ friend struct access::recursive_union; \
+ }
+
+ MPARK_VARIANT_RECURSIVE_UNION(Trait::TriviallyAvailable,
+ ~recursive_union() = default;);
+ MPARK_VARIANT_RECURSIVE_UNION(Trait::Available,
+ ~recursive_union() {});
+ MPARK_VARIANT_RECURSIVE_UNION(Trait::Unavailable,
+ ~recursive_union() = delete;);
+
+#undef MPARK_VARIANT_RECURSIVE_UNION
+
+ using index_t = unsigned int;
+
+ template <Trait DestructibleTrait, typename... Ts>
+ class base {
+ public:
+ inline explicit constexpr base(valueless_t tag) noexcept
+ : data_(tag), index_(static_cast<index_t>(-1)) {}
+
+ template <std::size_t I, typename... Args>
+ inline explicit constexpr base(in_place_index_t<I>, Args &&... args)
+ : data_(in_place_index_t<I>{}, lib::forward<Args>(args)...),
+ index_(I) {}
+
+ inline constexpr bool valueless_by_exception() const noexcept {
+ return index_ == static_cast<index_t>(-1);
+ }
+
+ inline constexpr std::size_t index() const noexcept {
+ return valueless_by_exception() ? variant_npos : index_;
+ }
+
+ protected:
+ using data_t = recursive_union<DestructibleTrait, 0, Ts...>;
+
+ friend inline constexpr base &as_base(base &b) { return b; }
+ friend inline constexpr const base &as_base(const base &b) { return b; }
+ friend inline constexpr base &&as_base(base &&b) { return lib::move(b); }
+ friend inline constexpr const base &&as_base(const base &&b) { return lib::move(b); }
+
+ friend inline constexpr data_t &data(base &b) { return b.data_; }
+ friend inline constexpr const data_t &data(const base &b) { return b.data_; }
+ friend inline constexpr data_t &&data(base &&b) { return lib::move(b).data_; }
+ friend inline constexpr const data_t &&data(const base &&b) { return lib::move(b).data_; }
+
+ inline static constexpr std::size_t size() { return sizeof...(Ts); }
+
+ data_t data_;
+ index_t index_;
+
+ friend struct access::base;
+ friend struct visitation::base;
+ };
+
+ struct dtor {
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4100)
+#endif
+ template <typename Alt>
+ inline void operator()(Alt &alt) const noexcept { alt.~Alt(); }
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+ };
+
+#if !defined(_MSC_VER) || _MSC_VER >= 1910
+#define MPARK_INHERITING_CTOR(type, base) using base::base;
+#else
+#define MPARK_INHERITING_CTOR(type, base) \
+ template <typename... Args> \
+ inline explicit constexpr type(Args &&... args) \
+ : base(lib::forward<Args>(args)...) {}
+#endif
+
+ template <typename Traits, Trait = Traits::destructible_trait>
+ class destructor;
+
+#define MPARK_VARIANT_DESTRUCTOR(destructible_trait, definition, destroy) \
+ template <typename... Ts> \
+ class destructor<traits<Ts...>, destructible_trait> \
+ : public base<destructible_trait, Ts...> { \
+ using super = base<destructible_trait, Ts...>; \
+ \
+ public: \
+ MPARK_INHERITING_CTOR(destructor, super) \
+ using super::operator=; \
+ \
+ destructor(const destructor &) = default; \
+ destructor(destructor &&) = default; \
+ definition \
+ destructor &operator=(const destructor &) = default; \
+ destructor &operator=(destructor &&) = default; \
+ \
+ protected: \
+ destroy \
+ }
+
+ MPARK_VARIANT_DESTRUCTOR(
+ Trait::TriviallyAvailable,
+ ~destructor() = default;,
+ inline void destroy() noexcept {
+ this->index_ = static_cast<index_t>(-1);
+ });
+
+ MPARK_VARIANT_DESTRUCTOR(
+ Trait::Available,
+ ~destructor() { destroy(); },
+ inline void destroy() noexcept {
+ if (!this->valueless_by_exception()) {
+ visitation::alt::visit_alt(dtor{}, *this);
+ }
+ this->index_ = static_cast<index_t>(-1);
+ });
+
+ MPARK_VARIANT_DESTRUCTOR(
+ Trait::Unavailable,
+ ~destructor() = delete;,
+ inline void destroy() noexcept = delete;);
+
+#undef MPARK_VARIANT_DESTRUCTOR
+
+ template <typename Traits>
+ class constructor : public destructor<Traits> {
+ using super = destructor<Traits>;
+
+ public:
+ MPARK_INHERITING_CTOR(constructor, super)
+ using super::operator=;
+
+ protected:
+#ifndef MPARK_GENERIC_LAMBDAS
+ struct ctor {
+ template <typename LhsAlt, typename RhsAlt>
+ inline void operator()(LhsAlt &lhs_alt, RhsAlt &&rhs_alt) const {
+ constructor::construct_alt(lhs_alt,
+ lib::forward<RhsAlt>(rhs_alt).value);
+ }
+ };
+#endif
+
+ template <std::size_t I, typename T, typename... Args>
+ inline static T &construct_alt(alt<I, T> &a, Args &&... args) {
+ auto *result = ::new (static_cast<void *>(lib::addressof(a)))
+ alt<I, T>(in_place_t{}, lib::forward<Args>(args)...);
+ return result->value;
+ }
+
+ template <typename Rhs>
+ inline static void generic_construct(constructor &lhs, Rhs &&rhs) {
+ lhs.destroy();
+ if (!rhs.valueless_by_exception()) {
+ visitation::alt::visit_alt_at(
+ rhs.index(),
+#ifdef MPARK_GENERIC_LAMBDAS
+ [](auto &lhs_alt, auto &&rhs_alt) {
+ constructor::construct_alt(
+ lhs_alt, lib::forward<decltype(rhs_alt)>(rhs_alt).value);
+ }
+#else
+ ctor{}
+#endif
+ ,
+ lhs,
+ lib::forward<Rhs>(rhs));
+ lhs.index_ = rhs.index_;
+ }
+ }
+ };
+
+ template <typename Traits, Trait = Traits::move_constructible_trait>
+ class move_constructor;
+
+#define MPARK_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, definition) \
+ template <typename... Ts> \
+ class move_constructor<traits<Ts...>, move_constructible_trait> \
+ : public constructor<traits<Ts...>> { \
+ using super = constructor<traits<Ts...>>; \
+ \
+ public: \
+ MPARK_INHERITING_CTOR(move_constructor, super) \
+ using super::operator=; \
+ \
+ move_constructor(const move_constructor &) = default; \
+ definition \
+ ~move_constructor() = default; \
+ move_constructor &operator=(const move_constructor &) = default; \
+ move_constructor &operator=(move_constructor &&) = default; \
+ }
+
+ MPARK_VARIANT_MOVE_CONSTRUCTOR(
+ Trait::TriviallyAvailable,
+ move_constructor(move_constructor &&that) = default;);
+
+ MPARK_VARIANT_MOVE_CONSTRUCTOR(
+ Trait::Available,
+ move_constructor(move_constructor &&that) noexcept(
+ lib::all<std::is_nothrow_move_constructible<Ts>::value...>::value)
+ : move_constructor(valueless_t{}) {
+ this->generic_construct(*this, lib::move(that));
+ });
+
+ MPARK_VARIANT_MOVE_CONSTRUCTOR(
+ Trait::Unavailable,
+ move_constructor(move_constructor &&) = delete;);
+
+#undef MPARK_VARIANT_MOVE_CONSTRUCTOR
+
+ template <typename Traits, Trait = Traits::copy_constructible_trait>
+ class copy_constructor;
+
+#define MPARK_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, definition) \
+ template <typename... Ts> \
+ class copy_constructor<traits<Ts...>, copy_constructible_trait> \
+ : public move_constructor<traits<Ts...>> { \
+ using super = move_constructor<traits<Ts...>>; \
+ \
+ public: \
+ MPARK_INHERITING_CTOR(copy_constructor, super) \
+ using super::operator=; \
+ \
+ definition \
+ copy_constructor(copy_constructor &&) = default; \
+ ~copy_constructor() = default; \
+ copy_constructor &operator=(const copy_constructor &) = default; \
+ copy_constructor &operator=(copy_constructor &&) = default; \
+ }
+
+ MPARK_VARIANT_COPY_CONSTRUCTOR(
+ Trait::TriviallyAvailable,
+ copy_constructor(const copy_constructor &that) = default;);
+
+ MPARK_VARIANT_COPY_CONSTRUCTOR(
+ Trait::Available,
+ copy_constructor(const copy_constructor &that)
+ : copy_constructor(valueless_t{}) {
+ this->generic_construct(*this, that);
+ });
+
+ MPARK_VARIANT_COPY_CONSTRUCTOR(
+ Trait::Unavailable,
+ copy_constructor(const copy_constructor &) = delete;);
+
+#undef MPARK_VARIANT_COPY_CONSTRUCTOR
+
+ template <typename Traits>
+ class assignment : public copy_constructor<Traits> {
+ using super = copy_constructor<Traits>;
+
+ public:
+ MPARK_INHERITING_CTOR(assignment, super)
+ using super::operator=;
+
+ template <std::size_t I, typename... Args>
+ inline /* auto & */ auto emplace(Args &&... args)
+ -> decltype(this->construct_alt(access::base::get_alt<I>(*this),
+ lib::forward<Args>(args)...)) {
+ this->destroy();
+ auto &result = this->construct_alt(access::base::get_alt<I>(*this),
+ lib::forward<Args>(args)...);
+ this->index_ = I;
+ return result;
+ }
+
+ protected:
+#ifndef MPARK_GENERIC_LAMBDAS
+ template <typename That>
+ struct assigner {
+ template <typename ThisAlt, typename ThatAlt>
+ inline void operator()(ThisAlt &this_alt, ThatAlt &&that_alt) const {
+ self->assign_alt(this_alt, lib::forward<ThatAlt>(that_alt).value);
+ }
+ assignment *self;
+ };
+#endif
+
+ template <std::size_t I, typename T, typename Arg>
+ inline void assign_alt(alt<I, T> &a, Arg &&arg) {
+ if (this->index() == I) {
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable : 4244)
+#endif
+ a.value = lib::forward<Arg>(arg);
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+ } else {
+ struct {
+ void operator()(std::true_type) const {
+ this_->emplace<I>(lib::forward<Arg>(arg_));
+ }
+ void operator()(std::false_type) const {
+ this_->emplace<I>(T(lib::forward<Arg>(arg_)));
+ }
+ assignment *this_;
+ Arg &&arg_;
+ } impl{this, lib::forward<Arg>(arg)};
+ impl(lib::bool_constant<
+ std::is_nothrow_constructible<T, Arg>::value ||
+ !std::is_nothrow_move_constructible<T>::value>{});
+ }
+ }
+
+ template <typename That>
+ inline void generic_assign(That &&that) {
+ if (this->valueless_by_exception() && that.valueless_by_exception()) {
+ // do nothing.
+ } else if (that.valueless_by_exception()) {
+ this->destroy();
+ } else {
+ visitation::alt::visit_alt_at(
+ that.index(),
+#ifdef MPARK_GENERIC_LAMBDAS
+ [this](auto &this_alt, auto &&that_alt) {
+ this->assign_alt(
+ this_alt, lib::forward<decltype(that_alt)>(that_alt).value);
+ }
+#else
+ assigner<That>{this}
+#endif
+ ,
+ *this,
+ lib::forward<That>(that));
+ }
+ }
+ };
+
+ template <typename Traits, Trait = Traits::move_assignable_trait>
+ class move_assignment;
+
+#define MPARK_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, definition) \
+ template <typename... Ts> \
+ class move_assignment<traits<Ts...>, move_assignable_trait> \
+ : public assignment<traits<Ts...>> { \
+ using super = assignment<traits<Ts...>>; \
+ \
+ public: \
+ MPARK_INHERITING_CTOR(move_assignment, super) \
+ using super::operator=; \
+ \
+ move_assignment(const move_assignment &) = default; \
+ move_assignment(move_assignment &&) = default; \
+ ~move_assignment() = default; \
+ move_assignment &operator=(const move_assignment &) = default; \
+ definition \
+ }
+
+ MPARK_VARIANT_MOVE_ASSIGNMENT(
+ Trait::TriviallyAvailable,
+ move_assignment &operator=(move_assignment &&that) = default;);
+
+ MPARK_VARIANT_MOVE_ASSIGNMENT(
+ Trait::Available,
+ move_assignment &
+ operator=(move_assignment &&that) noexcept(
+ lib::all<(std::is_nothrow_move_constructible<Ts>::value &&
+ std::is_nothrow_move_assignable<Ts>::value)...>::value) {
+ this->generic_assign(lib::move(that));
+ return *this;
+ });
+
+ MPARK_VARIANT_MOVE_ASSIGNMENT(
+ Trait::Unavailable,
+ move_assignment &operator=(move_assignment &&) = delete;);
+
+#undef MPARK_VARIANT_MOVE_ASSIGNMENT
+
+ template <typename Traits, Trait = Traits::copy_assignable_trait>
+ class copy_assignment;
+
+#define MPARK_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, definition) \
+ template <typename... Ts> \
+ class copy_assignment<traits<Ts...>, copy_assignable_trait> \
+ : public move_assignment<traits<Ts...>> { \
+ using super = move_assignment<traits<Ts...>>; \
+ \
+ public: \
+ MPARK_INHERITING_CTOR(copy_assignment, super) \
+ using super::operator=; \
+ \
+ copy_assignment(const copy_assignment &) = default; \
+ copy_assignment(copy_assignment &&) = default; \
+ ~copy_assignment() = default; \
+ definition \
+ copy_assignment &operator=(copy_assignment &&) = default; \
+ }
+
+ MPARK_VARIANT_COPY_ASSIGNMENT(
+ Trait::TriviallyAvailable,
+ copy_assignment &operator=(const copy_assignment &that) = default;);
+
+ MPARK_VARIANT_COPY_ASSIGNMENT(
+ Trait::Available,
+ copy_assignment &operator=(const copy_assignment &that) {
+ this->generic_assign(that);
+ return *this;
+ });
+
+ MPARK_VARIANT_COPY_ASSIGNMENT(
+ Trait::Unavailable,
+ copy_assignment &operator=(const copy_assignment &) = delete;);
+
+#undef MPARK_VARIANT_COPY_ASSIGNMENT
+
+ template <typename... Ts>
+ class impl : public copy_assignment<traits<Ts...>> {
+ using super = copy_assignment<traits<Ts...>>;
+
+ public:
+ MPARK_INHERITING_CTOR(impl, super)
+ using super::operator=;
+
+ template <std::size_t I, typename Arg>
+ inline void assign(Arg &&arg) {
+ this->assign_alt(access::base::get_alt<I>(*this),
+ lib::forward<Arg>(arg));
+ }
+
+ inline void swap(impl &that) {
+ if (this->valueless_by_exception() && that.valueless_by_exception()) {
+ // do nothing.
+ } else if (this->index() == that.index()) {
+ visitation::alt::visit_alt_at(this->index(),
+#ifdef MPARK_GENERIC_LAMBDAS
+ [](auto &this_alt, auto &that_alt) {
+ using std::swap;
+ swap(this_alt.value,
+ that_alt.value);
+ }
+#else
+ swapper{}
+#endif
+ ,
+ *this,
+ that);
+ } else {
+ impl *lhs = this;
+ impl *rhs = lib::addressof(that);
+ if (lhs->move_nothrow() && !rhs->move_nothrow()) {
+ std::swap(lhs, rhs);
+ }
+ impl tmp(lib::move(*rhs));
+#ifdef MPARK_EXCEPTIONS
+ // EXTENSION: When the move construction of `lhs` into `rhs` throws
+ // and `tmp` is nothrow move constructible then we move `tmp` back
+ // into `rhs` and provide the strong exception safety guarantee.
+ try {
+ this->generic_construct(*rhs, lib::move(*lhs));
+ } catch (...) {
+ if (tmp.move_nothrow()) {
+ this->generic_construct(*rhs, lib::move(tmp));
+ }
+ throw;
+ }
+#else
+ this->generic_construct(*rhs, lib::move(*lhs));
+#endif
+ this->generic_construct(*lhs, lib::move(tmp));
+ }
+ }
+
+ private:
+#ifndef MPARK_GENERIC_LAMBDAS
+ struct swapper {
+ template <typename ThisAlt, typename ThatAlt>
+ inline void operator()(ThisAlt &this_alt, ThatAlt &that_alt) const {
+ using std::swap;
+ swap(this_alt.value, that_alt.value);
+ }
+ };
+#endif
+
+ inline constexpr bool move_nothrow() const {
+ return this->valueless_by_exception() ||
+ lib::array<bool, sizeof...(Ts)>{
+ {std::is_nothrow_move_constructible<Ts>::value...}
+ }[this->index()];
+ }
+ };
+
+#undef MPARK_INHERITING_CTOR
+
+ template <std::size_t I, typename T>
+ struct overload_leaf {
+ using F = lib::size_constant<I> (*)(T);
+ operator F() const { return nullptr; }
+ };
+
+ template <typename... Ts>
+ struct overload_impl {
+ private:
+ template <typename>
+ struct impl;
+
+ template <std::size_t... Is>
+ struct impl<lib::index_sequence<Is...>> : overload_leaf<Is, Ts>... {};
+
+ public:
+ using type = impl<lib::index_sequence_for<Ts...>>;
+ };
+
+ template <typename... Ts>
+ using overload = typename overload_impl<Ts...>::type;
+
+ template <typename T, typename... Ts>
+ using best_match = lib::invoke_result_t<overload<Ts...>, T &&>;
+
+ template <typename T>
+ struct is_in_place_index : std::false_type {};
+
+ template <std::size_t I>
+ struct is_in_place_index<in_place_index_t<I>> : std::true_type {};
+
+ template <typename T>
+ struct is_in_place_type : std::false_type {};
+
+ template <typename T>
+ struct is_in_place_type<in_place_type_t<T>> : std::true_type {};
+
+ } // detail
+
+ template <typename... Ts>
+ class variant {
+ static_assert(0 < sizeof...(Ts),
+ "variant must consist of at least one alternative.");
+
+ static_assert(lib::all<!std::is_array<Ts>::value...>::value,
+ "variant can not have an array type as an alternative.");
+
+ static_assert(lib::all<!std::is_reference<Ts>::value...>::value,
+ "variant can not have a reference type as an alternative.");
+
+ static_assert(lib::all<!std::is_void<Ts>::value...>::value,
+ "variant can not have a void type as an alternative.");
+
+ public:
+ template <
+ typename Front = lib::type_pack_element_t<0, Ts...>,
+ lib::enable_if_t<std::is_default_constructible<Front>::value, int> = 0>
+ inline constexpr variant() noexcept(
+ std::is_nothrow_default_constructible<Front>::value)
+ : impl_(in_place_index_t<0>{}) {}
+
+ variant(const variant &) = default;
+ variant(variant &&) = default;
+
+ template <
+ typename Arg,
+ typename Decayed = lib::decay_t<Arg>,
+ lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0,
+ lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0,
+ lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0,
+ std::size_t I = detail::best_match<Arg, Ts...>::value,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0>
+ inline constexpr variant(Arg &&arg) noexcept(
+ std::is_nothrow_constructible<T, Arg>::value)
+ : impl_(in_place_index_t<I>{}, lib::forward<Arg>(arg)) {}
+
+ template <
+ std::size_t I,
+ typename... Args,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
+ inline explicit constexpr variant(
+ in_place_index_t<I>,
+ Args &&... args) noexcept(std::is_nothrow_constructible<T,
+ Args...>::value)
+ : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}
+
+ template <
+ std::size_t I,
+ typename Up,
+ typename... Args,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<std::is_constructible<T,
+ std::initializer_list<Up> &,
+ Args...>::value,
+ int> = 0>
+ inline explicit constexpr variant(
+ in_place_index_t<I>,
+ std::initializer_list<Up> il,
+ Args &&... args) noexcept(std::
+ is_nothrow_constructible<
+ T,
+ std::initializer_list<Up> &,
+ Args...>::value)
+ : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}
+
+ template <
+ typename T,
+ typename... Args,
+ std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
+ lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
+ inline explicit constexpr variant(
+ in_place_type_t<T>,
+ Args &&... args) noexcept(std::is_nothrow_constructible<T,
+ Args...>::value)
+ : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}
+
+ template <
+ typename T,
+ typename Up,
+ typename... Args,
+ std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
+ lib::enable_if_t<std::is_constructible<T,
+ std::initializer_list<Up> &,
+ Args...>::value,
+ int> = 0>
+ inline explicit constexpr variant(
+ in_place_type_t<T>,
+ std::initializer_list<Up> il,
+ Args &&... args) noexcept(std::
+ is_nothrow_constructible<
+ T,
+ std::initializer_list<Up> &,
+ Args...>::value)
+ : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}
+
+ ~variant() = default;
+
+ variant &operator=(const variant &) = default;
+ variant &operator=(variant &&) = default;
+
+ template <typename Arg,
+ lib::enable_if_t<!std::is_same<lib::decay_t<Arg>, variant>::value,
+ int> = 0,
+ std::size_t I = detail::best_match<Arg, Ts...>::value,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<(std::is_assignable<T &, Arg>::value &&
+ std::is_constructible<T, Arg>::value),
+ int> = 0>
+ inline variant &operator=(Arg &&arg) noexcept(
+ (std::is_nothrow_assignable<T &, Arg>::value &&
+ std::is_nothrow_constructible<T, Arg>::value)) {
+ impl_.template assign<I>(lib::forward<Arg>(arg));
+ return *this;
+ }
+
+ template <
+ std::size_t I,
+ typename... Args,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
+ inline T &emplace(Args &&... args) {
+ return impl_.template emplace<I>(lib::forward<Args>(args)...);
+ }
+
+ template <
+ std::size_t I,
+ typename Up,
+ typename... Args,
+ typename T = lib::type_pack_element_t<I, Ts...>,
+ lib::enable_if_t<std::is_constructible<T,
+ std::initializer_list<Up> &,
+ Args...>::value,
+ int> = 0>
+ inline T &emplace(std::initializer_list<Up> il, Args &&... args) {
+ return impl_.template emplace<I>(il, lib::forward<Args>(args)...);
+ }
+
+ template <
+ typename T,
+ typename... Args,
+ std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
+ lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
+ inline T &emplace(Args &&... args) {
+ return impl_.template emplace<I>(lib::forward<Args>(args)...);
+ }
+
+ template <
+ typename T,
+ typename Up,
+ typename... Args,
+ std::size_t I = detail::find_index_sfinae<T, Ts...>::value,
+ lib::enable_if_t<std::is_constructible<T,
+ std::initializer_list<Up> &,
+ Args...>::value,
+ int> = 0>
+ inline T &emplace(std::initializer_list<Up> il, Args &&... args) {
+ return impl_.template emplace<I>(il, lib::forward<Args>(args)...);
+ }
+
+ inline constexpr bool valueless_by_exception() const noexcept {
+ return impl_.valueless_by_exception();
+ }
+
+ inline constexpr std::size_t index() const noexcept {
+ return impl_.index();
+ }
+
+ template <bool Dummy = true,
+ lib::enable_if_t<
+ lib::all<Dummy,
+ (lib::dependent_type<std::is_move_constructible<Ts>,
+ Dummy>::value &&
+ lib::dependent_type<lib::is_swappable<Ts>,
+ Dummy>::value)...>::value,
+ int> = 0>
+ inline void swap(variant &that) noexcept(
+ lib::all<(std::is_nothrow_move_constructible<Ts>::value &&
+ lib::is_nothrow_swappable<Ts>::value)...>::value) {
+ impl_.swap(that.impl_);
+ }
+
+ private:
+ detail::impl<Ts...> impl_;
+
+ friend struct detail::access::variant;
+ friend struct detail::visitation::variant;
+ };
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {
+ return v.index() == I;
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {
+ return holds_alternative<detail::find_index_checked<T, Ts...>::value>(v);
+ }
+
+ namespace detail {
+ template <std::size_t I, typename V>
+ struct generic_get_impl {
+ constexpr generic_get_impl(int) noexcept {}
+
+ constexpr AUTO_REFREF operator()(V &&v) const
+ AUTO_REFREF_RETURN(
+ access::variant::get_alt<I>(lib::forward<V>(v)).value)
+ };
+
+ template <std::size_t I, typename V>
+ inline constexpr AUTO_REFREF generic_get(V &&v)
+ AUTO_REFREF_RETURN(generic_get_impl<I, V>(
+ holds_alternative<I>(v) ? 0 : (throw_bad_variant_access(), 0))(
+ lib::forward<V>(v)))
+ } // namespace detail
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr variant_alternative_t<I, variant<Ts...>> &get(
+ variant<Ts...> &v) {
+ return detail::generic_get<I>(v);
+ }
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr variant_alternative_t<I, variant<Ts...>> &&get(
+ variant<Ts...> &&v) {
+ return detail::generic_get<I>(lib::move(v));
+ }
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr const variant_alternative_t<I, variant<Ts...>> &get(
+ const variant<Ts...> &v) {
+ return detail::generic_get<I>(v);
+ }
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr const variant_alternative_t<I, variant<Ts...>> &&get(
+ const variant<Ts...> &&v) {
+ return detail::generic_get<I>(lib::move(v));
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr T &get(variant<Ts...> &v) {
+ return get<detail::find_index_checked<T, Ts...>::value>(v);
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr T &&get(variant<Ts...> &&v) {
+ return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr const T &get(const variant<Ts...> &v) {
+ return get<detail::find_index_checked<T, Ts...>::value>(v);
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr const T &&get(const variant<Ts...> &&v) {
+ return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));
+ }
+
+ namespace detail {
+
+ template <std::size_t I, typename V>
+ inline constexpr /* auto * */ AUTO generic_get_if(V *v) noexcept
+ AUTO_RETURN(v && holds_alternative<I>(*v)
+ ? lib::addressof(access::variant::get_alt<I>(*v).value)
+ : nullptr)
+
+ } // namespace detail
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr lib::add_pointer_t<variant_alternative_t<I, variant<Ts...>>>
+ get_if(variant<Ts...> *v) noexcept {
+ return detail::generic_get_if<I>(v);
+ }
+
+ template <std::size_t I, typename... Ts>
+ inline constexpr lib::add_pointer_t<
+ const variant_alternative_t<I, variant<Ts...>>>
+ get_if(const variant<Ts...> *v) noexcept {
+ return detail::generic_get_if<I>(v);
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr lib::add_pointer_t<T>
+ get_if(variant<Ts...> *v) noexcept {
+ return get_if<detail::find_index_checked<T, Ts...>::value>(v);
+ }
+
+ template <typename T, typename... Ts>
+ inline constexpr lib::add_pointer_t<const T>
+ get_if(const variant<Ts...> *v) noexcept {
+ return get_if<detail::find_index_checked<T, Ts...>::value>(v);
+ }
+
+ namespace detail {
+ template <typename RelOp>
+ struct convert_to_bool {
+ template <typename Lhs, typename Rhs>
+ inline constexpr bool operator()(Lhs &&lhs, Rhs &&rhs) const {
+ static_assert(std::is_convertible<lib::invoke_result_t<RelOp, Lhs, Rhs>,
+ bool>::value,
+ "relational operators must return a type"
+ " implicitly convertible to bool");
+ return lib::invoke(
+ RelOp{}, lib::forward<Lhs>(lhs), lib::forward<Rhs>(rhs));
+ }
+ };
+ } // namespace detail
+
+ template <typename... Ts>
+ inline constexpr bool operator==(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using equal_to = detail::convert_to_bool<lib::equal_to>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (lhs.index() != rhs.index()) return false;
+ if (lhs.valueless_by_exception()) return true;
+ return variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs);
+#else
+ return lhs.index() == rhs.index() &&
+ (lhs.valueless_by_exception() ||
+ variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs));
+#endif
+ }
+
+ template <typename... Ts>
+ inline constexpr bool operator!=(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using not_equal_to = detail::convert_to_bool<lib::not_equal_to>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (lhs.index() != rhs.index()) return true;
+ if (lhs.valueless_by_exception()) return false;
+ return variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs);
+#else
+ return lhs.index() != rhs.index() ||
+ (!lhs.valueless_by_exception() &&
+ variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs));
+#endif
+ }
+
+ template <typename... Ts>
+ inline constexpr bool operator<(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using less = detail::convert_to_bool<lib::less>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (rhs.valueless_by_exception()) return false;
+ if (lhs.valueless_by_exception()) return true;
+ if (lhs.index() < rhs.index()) return true;
+ if (lhs.index() > rhs.index()) return false;
+ return variant::visit_value_at(lhs.index(), less{}, lhs, rhs);
+#else
+ return !rhs.valueless_by_exception() &&
+ (lhs.valueless_by_exception() || lhs.index() < rhs.index() ||
+ (lhs.index() == rhs.index() &&
+ variant::visit_value_at(lhs.index(), less{}, lhs, rhs)));
+#endif
+ }
+
+ template <typename... Ts>
+ inline constexpr bool operator>(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using greater = detail::convert_to_bool<lib::greater>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (lhs.valueless_by_exception()) return false;
+ if (rhs.valueless_by_exception()) return true;
+ if (lhs.index() > rhs.index()) return true;
+ if (lhs.index() < rhs.index()) return false;
+ return variant::visit_value_at(lhs.index(), greater{}, lhs, rhs);
+#else
+ return !lhs.valueless_by_exception() &&
+ (rhs.valueless_by_exception() || lhs.index() > rhs.index() ||
+ (lhs.index() == rhs.index() &&
+ variant::visit_value_at(lhs.index(), greater{}, lhs, rhs)));
+#endif
+ }
+
+ template <typename... Ts>
+ inline constexpr bool operator<=(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using less_equal = detail::convert_to_bool<lib::less_equal>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (lhs.valueless_by_exception()) return true;
+ if (rhs.valueless_by_exception()) return false;
+ if (lhs.index() < rhs.index()) return true;
+ if (lhs.index() > rhs.index()) return false;
+ return variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs);
+#else
+ return lhs.valueless_by_exception() ||
+ (!rhs.valueless_by_exception() &&
+ (lhs.index() < rhs.index() ||
+ (lhs.index() == rhs.index() &&
+ variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs))));
+#endif
+ }
+
+ template <typename... Ts>
+ inline constexpr bool operator>=(const variant<Ts...> &lhs,
+ const variant<Ts...> &rhs) {
+ using detail::visitation::variant;
+ using greater_equal = detail::convert_to_bool<lib::greater_equal>;
+#ifdef MPARK_CPP14_CONSTEXPR
+ if (rhs.valueless_by_exception()) return true;
+ if (lhs.valueless_by_exception()) return false;
+ if (lhs.index() > rhs.index()) return true;
+ if (lhs.index() < rhs.index()) return false;
+ return variant::visit_value_at(lhs.index(), greater_equal{}, lhs, rhs);
+#else
+ return rhs.valueless_by_exception() ||
+ (!lhs.valueless_by_exception() &&
+ (lhs.index() > rhs.index() ||
+ (lhs.index() == rhs.index() &&
+ variant::visit_value_at(
+ lhs.index(), greater_equal{}, lhs, rhs))));
+#endif
+ }
+
+ struct monostate {};
+
+ inline constexpr bool operator<(monostate, monostate) noexcept {
+ return false;
+ }
+
+ inline constexpr bool operator>(monostate, monostate) noexcept {
+ return false;
+ }
+
+ inline constexpr bool operator<=(monostate, monostate) noexcept {
+ return true;
+ }
+
+ inline constexpr bool operator>=(monostate, monostate) noexcept {
+ return true;
+ }
+
+ inline constexpr bool operator==(monostate, monostate) noexcept {
+ return true;
+ }
+
+ inline constexpr bool operator!=(monostate, monostate) noexcept {
+ return false;
+ }
+
+#ifdef MPARK_CPP14_CONSTEXPR
+ namespace detail {
+
+ inline constexpr bool all(std::initializer_list<bool> bs) {
+ for (bool b : bs) {
+ if (!b) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ } // namespace detail
+
+ template <typename Visitor, typename... Vs>
+ inline constexpr decltype(auto) visit(Visitor &&visitor, Vs &&... vs) {
+ return (detail::all({!vs.valueless_by_exception()...})
+ ? (void)0
+ : throw_bad_variant_access()),
+ detail::visitation::variant::visit_value(
+ lib::forward<Visitor>(visitor), lib::forward<Vs>(vs)...);
+ }
+#else
+ namespace detail {
+
+ template <std::size_t N>
+ inline constexpr bool all_impl(const lib::array<bool, N> &bs,
+ std::size_t idx) {
+ return idx >= N || (bs[idx] && all_impl(bs, idx + 1));
+ }
+
+ template <std::size_t N>
+ inline constexpr bool all(const lib::array<bool, N> &bs) {
+ return all_impl(bs, 0);
+ }
+
+ } // namespace detail
+
+ template <typename Visitor, typename... Vs>
+ inline constexpr DECLTYPE_AUTO visit(Visitor &&visitor, Vs &&... vs)
+ DECLTYPE_AUTO_RETURN(
+ (detail::all(
+ lib::array<bool, sizeof...(Vs)>{{!vs.valueless_by_exception()...}})
+ ? (void)0
+ : throw_bad_variant_access()),
+ detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),
+ lib::forward<Vs>(vs)...))
+#endif
+
+ template <typename... Ts>
+ inline auto swap(variant<Ts...> &lhs,
+ variant<Ts...> &rhs) noexcept(noexcept(lhs.swap(rhs)))
+ -> decltype(lhs.swap(rhs)) {
+ lhs.swap(rhs);
+ }
+
+ namespace detail {
+
+ template <typename T, typename...>
+ using enabled_type = T;
+
+ namespace hash {
+
+ template <typename H, typename K>
+ constexpr bool meets_requirements() noexcept {
+ return std::is_copy_constructible<H>::value &&
+ std::is_move_constructible<H>::value &&
+ lib::is_invocable_r<std::size_t, H, const K &>::value;
+ }
+
+ template <typename K>
+ constexpr bool is_enabled() noexcept {
+ using H = std::hash<K>;
+ return meets_requirements<H, K>() &&
+ std::is_default_constructible<H>::value &&
+ std::is_copy_assignable<H>::value &&
+ std::is_move_assignable<H>::value;
+ }
+
+ } // namespace hash
+
+ } // namespace detail
+
+#undef AUTO
+#undef AUTO_RETURN
+
+#undef AUTO_REFREF
+#undef AUTO_REFREF_RETURN
+
+#undef DECLTYPE_AUTO
+#undef DECLTYPE_AUTO_RETURN
+
+} // namespace mpark
+
+namespace std {
+
+ template <typename... Ts>
+ struct hash<mpark::detail::enabled_type<
+ mpark::variant<Ts...>,
+ mpark::lib::enable_if_t<mpark::lib::all<mpark::detail::hash::is_enabled<
+ mpark::lib::remove_const_t<Ts>>()...>::value>>> {
+ using argument_type = mpark::variant<Ts...>;
+ using result_type = std::size_t;
+
+ inline result_type operator()(const argument_type &v) const {
+ using mpark::detail::visitation::variant;
+ std::size_t result =
+ v.valueless_by_exception()
+ ? 299792458 // Random value chosen by the universe upon creation
+ : variant::visit_alt(
+#ifdef MPARK_GENERIC_LAMBDAS
+ [](const auto &alt) {
+ using alt_type = mpark::lib::decay_t<decltype(alt)>;
+ using value_type = mpark::lib::remove_const_t<
+ typename alt_type::value_type>;
+ return hash<value_type>{}(alt.value);
+ }
+#else
+ hasher{}
+#endif
+ ,
+ v);
+ return hash_combine(result, hash<std::size_t>{}(v.index()));
+ }
+
+ private:
+#ifndef MPARK_GENERIC_LAMBDAS
+ struct hasher {
+ template <typename Alt>
+ inline std::size_t operator()(const Alt &alt) const {
+ using alt_type = mpark::lib::decay_t<Alt>;
+ using value_type =
+ mpark::lib::remove_const_t<typename alt_type::value_type>;
+ return hash<value_type>{}(alt.value);
+ }
+ };
+#endif
+
+ static std::size_t hash_combine(std::size_t lhs, std::size_t rhs) {
+ return lhs ^= rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2);
+ }
+ };
+
+ template <>
+ struct hash<mpark::monostate> {
+ using argument_type = mpark::monostate;
+ using result_type = std::size_t;
+
+ inline result_type operator()(const argument_type &) const noexcept {
+ return 66740831; // return a fundamentally attractive random value.
+ }
+ };
+
+} // namespace std
+
+#endif // MPARK_VARIANT_HPP
diff --git a/dviware/dvisvgm/libs/woff2/LICENSE b/dviware/dvisvgm/libs/woff2/LICENSE
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/dviware/dvisvgm/libs/woff2/Makefile.am b/dviware/dvisvgm/libs/woff2/Makefile.am
new file mode 100644
index 0000000000..aecb72ec36
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/Makefile.am
@@ -0,0 +1,35 @@
+if !HAVE_WOFF2
+noinst_LIBRARIES = libwoff2.a
+libwoff2_a_SOURCES = \
+ include/woff2/decode.h \
+ include/woff2/encode.h \
+ include/woff2/output.h \
+ include/woff2/version.h \
+ src/buffer.h \
+ src/font.cc \
+ src/font.h \
+ src/glyph.cc \
+ src/glyph.h \
+ src/normalize.cc \
+ src/normalize.h \
+ src/port.h \
+ src/round.h \
+ src/store_bytes.h \
+ src/table_tags.cc \
+ src/table_tags.h \
+ src/transform.cc \
+ src/transform.h \
+ src/variable_length.cc \
+ src/variable_length.h \
+ src/woff2_common.cc \
+ src/woff2_common.h \
+ src/woff2_enc.cc \
+ src/woff2_out.cc
+
+AM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include
+
+@CODE_COVERAGE_RULES@
+endif
+
+EXTRA_DIST = LICENSE
+CLEANFILES = *.gcda *.gcno
diff --git a/dviware/dvisvgm/libs/woff2/Makefile.in b/dviware/dvisvgm/libs/woff2/Makefile.in
new file mode 100644
index 0000000000..94ccda1ece
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/Makefile.in
@@ -0,0 +1,760 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/woff2
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libwoff2_a_AR = $(AR) $(ARFLAGS)
+libwoff2_a_LIBADD =
+am__libwoff2_a_SOURCES_DIST = include/woff2/decode.h \
+ include/woff2/encode.h include/woff2/output.h \
+ include/woff2/version.h src/buffer.h src/font.cc src/font.h \
+ src/glyph.cc src/glyph.h src/normalize.cc src/normalize.h \
+ src/port.h src/round.h src/store_bytes.h src/table_tags.cc \
+ src/table_tags.h src/transform.cc src/transform.h \
+ src/variable_length.cc src/variable_length.h \
+ src/woff2_common.cc src/woff2_common.h src/woff2_enc.cc \
+ src/woff2_out.cc
+am__dirstamp = $(am__leading_dot)dirstamp
+@HAVE_WOFF2_FALSE@am_libwoff2_a_OBJECTS = src/font.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/glyph.$(OBJEXT) src/normalize.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/table_tags.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/transform.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/variable_length.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/woff2_common.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/woff2_enc.$(OBJEXT) \
+@HAVE_WOFF2_FALSE@ src/woff2_out.$(OBJEXT)
+libwoff2_a_OBJECTS = $(am_libwoff2_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = src/$(DEPDIR)/font.Po src/$(DEPDIR)/glyph.Po \
+ src/$(DEPDIR)/normalize.Po src/$(DEPDIR)/table_tags.Po \
+ src/$(DEPDIR)/transform.Po src/$(DEPDIR)/variable_length.Po \
+ src/$(DEPDIR)/woff2_common.Po src/$(DEPDIR)/woff2_enc.Po \
+ src/$(DEPDIR)/woff2_out.Po
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo " CXX " $@;
+am__v_CXX_1 =
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo " CXXLD " $@;
+am__v_CXXLD_1 =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libwoff2_a_SOURCES)
+DIST_SOURCES = $(am__libwoff2_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_WOFF2_FALSE@noinst_LIBRARIES = libwoff2.a
+@HAVE_WOFF2_FALSE@libwoff2_a_SOURCES = \
+@HAVE_WOFF2_FALSE@ include/woff2/decode.h \
+@HAVE_WOFF2_FALSE@ include/woff2/encode.h \
+@HAVE_WOFF2_FALSE@ include/woff2/output.h \
+@HAVE_WOFF2_FALSE@ include/woff2/version.h \
+@HAVE_WOFF2_FALSE@ src/buffer.h \
+@HAVE_WOFF2_FALSE@ src/font.cc \
+@HAVE_WOFF2_FALSE@ src/font.h \
+@HAVE_WOFF2_FALSE@ src/glyph.cc \
+@HAVE_WOFF2_FALSE@ src/glyph.h \
+@HAVE_WOFF2_FALSE@ src/normalize.cc \
+@HAVE_WOFF2_FALSE@ src/normalize.h \
+@HAVE_WOFF2_FALSE@ src/port.h \
+@HAVE_WOFF2_FALSE@ src/round.h \
+@HAVE_WOFF2_FALSE@ src/store_bytes.h \
+@HAVE_WOFF2_FALSE@ src/table_tags.cc \
+@HAVE_WOFF2_FALSE@ src/table_tags.h \
+@HAVE_WOFF2_FALSE@ src/transform.cc \
+@HAVE_WOFF2_FALSE@ src/transform.h \
+@HAVE_WOFF2_FALSE@ src/variable_length.cc \
+@HAVE_WOFF2_FALSE@ src/variable_length.h \
+@HAVE_WOFF2_FALSE@ src/woff2_common.cc \
+@HAVE_WOFF2_FALSE@ src/woff2_common.h \
+@HAVE_WOFF2_FALSE@ src/woff2_enc.cc \
+@HAVE_WOFF2_FALSE@ src/woff2_out.cc
+
+@HAVE_WOFF2_FALSE@AM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include
+EXTRA_DIST = LICENSE
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/woff2/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/woff2/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+src/$(am__dirstamp):
+ @$(MKDIR_P) src
+ @: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) src/$(DEPDIR)
+ @: > src/$(DEPDIR)/$(am__dirstamp)
+src/font.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/glyph.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/normalize.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/table_tags.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/transform.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/variable_length.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/woff2_common.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/woff2_enc.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/woff2_out.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+
+libwoff2.a: $(libwoff2_a_OBJECTS) $(libwoff2_a_DEPENDENCIES) $(EXTRA_libwoff2_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libwoff2.a
+ $(AM_V_AR)$(libwoff2_a_AR) libwoff2.a $(libwoff2_a_OBJECTS) $(libwoff2_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libwoff2.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f src/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/font.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/glyph.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/normalize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/table_tags.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/transform.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/variable_length.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/woff2_common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/woff2_enc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/woff2_out.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.cc.o:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cc.lo:
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f src/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f src/$(DEPDIR)/font.Po
+ -rm -f src/$(DEPDIR)/glyph.Po
+ -rm -f src/$(DEPDIR)/normalize.Po
+ -rm -f src/$(DEPDIR)/table_tags.Po
+ -rm -f src/$(DEPDIR)/transform.Po
+ -rm -f src/$(DEPDIR)/variable_length.Po
+ -rm -f src/$(DEPDIR)/woff2_common.Po
+ -rm -f src/$(DEPDIR)/woff2_enc.Po
+ -rm -f src/$(DEPDIR)/woff2_out.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f src/$(DEPDIR)/font.Po
+ -rm -f src/$(DEPDIR)/glyph.Po
+ -rm -f src/$(DEPDIR)/normalize.Po
+ -rm -f src/$(DEPDIR)/table_tags.Po
+ -rm -f src/$(DEPDIR)/transform.Po
+ -rm -f src/$(DEPDIR)/variable_length.Po
+ -rm -f src/$(DEPDIR)/woff2_common.Po
+ -rm -f src/$(DEPDIR)/woff2_enc.Po
+ -rm -f src/$(DEPDIR)/woff2_out.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@HAVE_WOFF2_FALSE@@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/woff2/include/woff2/decode.h b/dviware/dvisvgm/libs/woff2/include/woff2/decode.h
new file mode 100644
index 0000000000..6ef3b8e76c
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/include/woff2/decode.h
@@ -0,0 +1,36 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Library for converting WOFF2 format font files to their TTF versions. */
+
+#ifndef WOFF2_WOFF2_DEC_H_
+#define WOFF2_WOFF2_DEC_H_
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <woff2/output.h>
+
+namespace woff2 {
+
+// Compute the size of the final uncompressed font, or 0 on error.
+size_t ComputeWOFF2FinalSize(const uint8_t *data, size_t length);
+
+// Decompresses the font into the target buffer. The result_length should
+// be the same as determined by ComputeFinalSize(). Returns true on successful
+// decompression.
+// DEPRECATED; please prefer the version that takes a WOFF2Out*
+bool ConvertWOFF2ToTTF(uint8_t *result, size_t result_length,
+ const uint8_t *data, size_t length);
+
+// Decompresses the font into out. Returns true on success.
+// Works even if WOFF2Header totalSfntSize is wrong.
+// Please prefer this API.
+bool ConvertWOFF2ToTTF(const uint8_t *data, size_t length,
+ WOFF2Out* out);
+
+} // namespace woff2
+
+#endif // WOFF2_WOFF2_DEC_H_
diff --git a/dviware/dvisvgm/libs/woff2/include/woff2/encode.h b/dviware/dvisvgm/libs/woff2/include/woff2/encode.h
new file mode 100644
index 0000000000..34b7722974
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/include/woff2/encode.h
@@ -0,0 +1,43 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Library for converting WOFF2 format font files to their TTF versions. */
+
+#ifndef WOFF2_WOFF2_ENC_H_
+#define WOFF2_WOFF2_ENC_H_
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <string>
+
+namespace woff2 {
+
+struct WOFF2Params {
+ WOFF2Params() : extended_metadata(""), brotli_quality(11),
+ allow_transforms(true) {}
+
+ std::string extended_metadata;
+ int brotli_quality;
+ bool allow_transforms;
+};
+
+// Returns an upper bound on the size of the compressed file.
+size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length);
+size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length,
+ const std::string& extended_metadata);
+
+// Compresses the font into the target buffer. *result_length should be at least
+// the value returned by MaxWOFF2CompressedSize(), upon return, it is set to the
+// actual compressed size. Returns true on successful compression.
+bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+ uint8_t *result, size_t *result_length);
+bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+ uint8_t *result, size_t *result_length,
+ const WOFF2Params& params);
+
+} // namespace woff2
+
+#endif // WOFF2_WOFF2_ENC_H_
diff --git a/dviware/dvisvgm/libs/woff2/include/woff2/output.h b/dviware/dvisvgm/libs/woff2/include/woff2/output.h
new file mode 100644
index 0000000000..c325f67be7
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/include/woff2/output.h
@@ -0,0 +1,86 @@
+/* Copyright 2016 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Output buffer for WOFF2 decompression. */
+
+#ifndef WOFF2_WOFF2_OUT_H_
+#define WOFF2_WOFF2_OUT_H_
+
+#include <algorithm>
+#include <cstring>
+#include <memory>
+#include <string>
+
+namespace woff2 {
+
+// Suggested max size for output.
+const size_t kDefaultMaxSize = 30 * 1024 * 1024;
+
+/**
+ * Output interface for the woff2 decoding.
+ *
+ * Writes to arbitrary offsets are supported to facilitate updating offset
+ * table and checksums after tables are ready. Reading the current size is
+ * supported so a 'loca' table can be built up while writing glyphs.
+ *
+ * By default limits size to kDefaultMaxSize.
+ */
+class WOFF2Out {
+ public:
+ virtual ~WOFF2Out(void) {}
+
+ // Append n bytes of data from buf.
+ // Return true if all written, false otherwise.
+ virtual bool Write(const void *buf, size_t n) = 0;
+
+ // Write n bytes of data from buf at offset.
+ // Return true if all written, false otherwise.
+ virtual bool Write(const void *buf, size_t offset, size_t n) = 0;
+
+ virtual size_t Size() = 0;
+};
+
+/**
+ * Expanding memory block for woff2 out. By default limited to kDefaultMaxSize.
+ */
+class WOFF2StringOut : public WOFF2Out {
+ public:
+ // Create a writer that writes its data to buf.
+ // buf->size() will grow to at most max_size
+ // buf may be sized (e.g. using EstimateWOFF2FinalSize) or empty.
+ explicit WOFF2StringOut(std::string* buf);
+
+ bool Write(const void *buf, size_t n) override;
+ bool Write(const void *buf, size_t offset, size_t n) override;
+ size_t Size() override { return offset_; }
+ size_t MaxSize() { return max_size_; }
+ void SetMaxSize(size_t max_size);
+ private:
+ std::string* buf_;
+ size_t max_size_;
+ size_t offset_;
+};
+
+/**
+ * Fixed memory block for woff2 out.
+ */
+class WOFF2MemoryOut : public WOFF2Out {
+ public:
+ // Create a writer that writes its data to buf.
+ WOFF2MemoryOut(uint8_t* buf, size_t buf_size);
+
+ bool Write(const void *buf, size_t n) override;
+ bool Write(const void *buf, size_t offset, size_t n) override;
+ size_t Size() override { return offset_; }
+ private:
+ uint8_t* buf_;
+ size_t buf_size_;
+ size_t offset_;
+};
+
+} // namespace woff2
+
+#endif // WOFF2_WOFF2_OUT_H_
diff --git a/dviware/dvisvgm/libs/woff2/include/woff2/version.h b/dviware/dvisvgm/libs/woff2/include/woff2/version.h
new file mode 100644
index 0000000000..dfcc0b3599
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/include/woff2/version.h
@@ -0,0 +1,8 @@
+#ifndef WOFF2_WOFF2_VERSION_H_
+#define WOFF2_WOFF2_VERSION_H_
+
+namespace woff2 {
+constexpr const int version = 0x010002;
+}
+
+#endif
diff --git a/dviware/dvisvgm/libs/woff2/src/buffer.h b/dviware/dvisvgm/libs/woff2/src/buffer.h
new file mode 100644
index 0000000000..7240e5181c
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/buffer.h
@@ -0,0 +1,164 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* The parts of ots.h & opentype-sanitiser.h that we need, taken from the
+ https://code.google.com/p/ots/ project. */
+
+#ifndef WOFF2_BUFFER_H_
+#define WOFF2_BUFFER_H_
+
+#if defined(_WIN32)
+#include <stdlib.h>
+typedef signed char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#define ntohl(x) _byteswap_ulong (x)
+#define ntohs(x) _byteswap_ushort (x)
+#define htonl(x) _byteswap_ulong (x)
+#define htons(x) _byteswap_ushort (x)
+#else
+#include <arpa/inet.h>
+#include <stdint.h>
+#endif
+
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <limits>
+
+namespace woff2 {
+
+#if defined(_MSC_VER) || !defined(FONT_COMPRESSION_DEBUG)
+#define FONT_COMPRESSION_FAILURE() false
+#else
+#define FONT_COMPRESSION_FAILURE() \
+ woff2::Failure(__FILE__, __LINE__, __PRETTY_FUNCTION__)
+inline bool Failure(const char *f, int l, const char *fn) {
+ fprintf(stderr, "ERROR at %s:%d (%s)\n", f, l, fn);
+ fflush(stderr);
+ return false;
+}
+#endif
+
+// -----------------------------------------------------------------------------
+// Buffer helper class
+//
+// This class perform some trival buffer operations while checking for
+// out-of-bounds errors. As a family they return false if anything is amiss,
+// updating the current offset otherwise.
+// -----------------------------------------------------------------------------
+class Buffer {
+ public:
+ Buffer(const uint8_t *data, size_t len)
+ : buffer_(data),
+ length_(len),
+ offset_(0) { }
+
+ bool Skip(size_t n_bytes) {
+ return Read(NULL, n_bytes);
+ }
+
+ bool Read(uint8_t *data, size_t n_bytes) {
+ if (n_bytes > 1024 * 1024 * 1024) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if ((offset_ + n_bytes > length_) ||
+ (offset_ > length_ - n_bytes)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (data) {
+ std::memcpy(data, buffer_ + offset_, n_bytes);
+ }
+ offset_ += n_bytes;
+ return true;
+ }
+
+ inline bool ReadU8(uint8_t *value) {
+ if (offset_ + 1 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *value = buffer_[offset_];
+ ++offset_;
+ return true;
+ }
+
+ bool ReadU16(uint16_t *value) {
+ if (offset_ + 2 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ std::memcpy(value, buffer_ + offset_, sizeof(uint16_t));
+ *value = ntohs(*value);
+ offset_ += 2;
+ return true;
+ }
+
+ bool ReadS16(int16_t *value) {
+ return ReadU16(reinterpret_cast<uint16_t*>(value));
+ }
+
+ bool ReadU24(uint32_t *value) {
+ if (offset_ + 3 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *value = static_cast<uint32_t>(buffer_[offset_]) << 16 |
+ static_cast<uint32_t>(buffer_[offset_ + 1]) << 8 |
+ static_cast<uint32_t>(buffer_[offset_ + 2]);
+ offset_ += 3;
+ return true;
+ }
+
+ bool ReadU32(uint32_t *value) {
+ if (offset_ + 4 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ std::memcpy(value, buffer_ + offset_, sizeof(uint32_t));
+ *value = ntohl(*value);
+ offset_ += 4;
+ return true;
+ }
+
+ bool ReadS32(int32_t *value) {
+ return ReadU32(reinterpret_cast<uint32_t*>(value));
+ }
+
+ bool ReadTag(uint32_t *value) {
+ if (offset_ + 4 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ std::memcpy(value, buffer_ + offset_, sizeof(uint32_t));
+ offset_ += 4;
+ return true;
+ }
+
+ bool ReadR64(uint64_t *value) {
+ if (offset_ + 8 > length_) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ std::memcpy(value, buffer_ + offset_, sizeof(uint64_t));
+ offset_ += 8;
+ return true;
+ }
+
+ const uint8_t *buffer() const { return buffer_; }
+ size_t offset() const { return offset_; }
+ size_t length() const { return length_; }
+
+ void set_offset(size_t newoffset) { offset_ = newoffset; }
+
+ private:
+ const uint8_t * const buffer_;
+ const size_t length_;
+ size_t offset_;
+};
+
+} // namespace woff2
+
+#endif // WOFF2_BUFFER_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/font.cc b/dviware/dvisvgm/libs/woff2/src/font.cc
new file mode 100644
index 0000000000..1361f8c5dc
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/font.cc
@@ -0,0 +1,400 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Font management utilities */
+
+#include "./font.h"
+
+#include <algorithm>
+
+#include "./buffer.h"
+#include "./port.h"
+#include "./store_bytes.h"
+#include "./table_tags.h"
+#include "./woff2_common.h"
+
+namespace woff2 {
+
+Font::Table* Font::FindTable(uint32_t tag) {
+ std::map<uint32_t, Font::Table>::iterator it = tables.find(tag);
+ return it == tables.end() ? 0 : &it->second;
+}
+
+const Font::Table* Font::FindTable(uint32_t tag) const {
+ std::map<uint32_t, Font::Table>::const_iterator it = tables.find(tag);
+ return it == tables.end() ? 0 : &it->second;
+}
+
+std::vector<uint32_t> Font::OutputOrderedTags() const {
+ std::vector<uint32_t> output_order;
+
+ for (const auto& i : tables) {
+ const Font::Table& table = i.second;
+ // This is a transformed table, we will write it together with the
+ // original version.
+ if (table.tag & 0x80808080) {
+ continue;
+ }
+ output_order.push_back(table.tag);
+ }
+
+ // Alphabetize then put loca immediately after glyf
+ auto glyf_loc = std::find(output_order.begin(), output_order.end(),
+ kGlyfTableTag);
+ auto loca_loc = std::find(output_order.begin(), output_order.end(),
+ kLocaTableTag);
+ if (glyf_loc != output_order.end() && loca_loc != output_order.end()) {
+ output_order.erase(loca_loc);
+ output_order.insert(std::find(output_order.begin(), output_order.end(),
+ kGlyfTableTag) + 1, kLocaTableTag);
+ }
+
+ return output_order;
+}
+
+bool ReadTrueTypeFont(Buffer* file, const uint8_t* data, size_t len,
+ Font* font) {
+ // We don't care about the search_range, entry_selector and range_shift
+ // fields, they will always be computed upon writing the font.
+ if (!file->ReadU16(&font->num_tables) ||
+ !file->Skip(6)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ std::map<uint32_t, uint32_t> intervals;
+ for (uint16_t i = 0; i < font->num_tables; ++i) {
+ Font::Table table;
+ table.flag_byte = 0;
+ table.reuse_of = NULL;
+ if (!file->ReadU32(&table.tag) ||
+ !file->ReadU32(&table.checksum) ||
+ !file->ReadU32(&table.offset) ||
+ !file->ReadU32(&table.length)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if ((table.offset & 3) != 0 ||
+ table.length > len ||
+ len - table.length < table.offset) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ intervals[table.offset] = table.length;
+ table.data = data + table.offset;
+ if (font->tables.find(table.tag) != font->tables.end()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ font->tables[table.tag] = table;
+ }
+
+ // Check that tables are non-overlapping.
+ uint32_t last_offset = 12UL + 16UL * font->num_tables;
+ for (const auto& i : intervals) {
+ if (i.first < last_offset || i.first + i.second < i.first) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ last_offset = i.first + i.second;
+ }
+
+ // Sanity check key tables
+ const Font::Table* head_table = font->FindTable(kHeadTableTag);
+ if (head_table != NULL && head_table->length < 52) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ return true;
+}
+
+bool ReadCollectionFont(Buffer* file, const uint8_t* data, size_t len,
+ Font* font,
+ std::map<uint32_t, Font::Table*>* all_tables) {
+ if (!file->ReadU32(&font->flavor)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (!ReadTrueTypeFont(file, data, len, font)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ for (auto& entry : font->tables) {
+ Font::Table& table = entry.second;
+
+ if (all_tables->find(table.offset) == all_tables->end()) {
+ (*all_tables)[table.offset] = font->FindTable(table.tag);
+ } else {
+ table.reuse_of = (*all_tables)[table.offset];
+ if (table.tag != table.reuse_of->tag) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+
+ }
+ return true;
+}
+
+bool ReadTrueTypeCollection(Buffer* file, const uint8_t* data, size_t len,
+ FontCollection* font_collection) {
+ uint32_t num_fonts;
+
+ if (!file->ReadU32(&font_collection->header_version) ||
+ !file->ReadU32(&num_fonts)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ std::vector<uint32_t> offsets;
+ for (size_t i = 0; i < num_fonts; i++) {
+ uint32_t offset;
+ if (!file->ReadU32(&offset)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ offsets.push_back(offset);
+ }
+
+ font_collection->fonts.resize(offsets.size());
+ std::vector<Font>::iterator font_it = font_collection->fonts.begin();
+
+ std::map<uint32_t, Font::Table*> all_tables;
+ for (const auto offset : offsets) {
+ file->set_offset(offset);
+ Font& font = *font_it++;
+ if (!ReadCollectionFont(file, data, len, &font, &all_tables)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+
+ return true;
+}
+
+bool ReadFont(const uint8_t* data, size_t len, Font* font) {
+ Buffer file(data, len);
+
+ if (!file.ReadU32(&font->flavor)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (font->flavor == kTtcFontFlavor) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ return ReadTrueTypeFont(&file, data, len, font);
+}
+
+bool ReadFontCollection(const uint8_t* data, size_t len,
+ FontCollection* font_collection) {
+ Buffer file(data, len);
+
+ if (!file.ReadU32(&font_collection->flavor)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (font_collection->flavor != kTtcFontFlavor) {
+ font_collection->fonts.resize(1);
+ Font& font = font_collection->fonts[0];
+ font.flavor = font_collection->flavor;
+ return ReadTrueTypeFont(&file, data, len, &font);
+ }
+ return ReadTrueTypeCollection(&file, data, len, font_collection);
+}
+
+size_t FontFileSize(const Font& font) {
+ size_t max_offset = 12ULL + 16ULL * font.num_tables;
+ for (const auto& i : font.tables) {
+ const Font::Table& table = i.second;
+ size_t padding_size = (4 - (table.length & 3)) & 3;
+ size_t end_offset = (padding_size + table.offset) + table.length;
+ max_offset = std::max(max_offset, end_offset);
+ }
+ return max_offset;
+}
+
+size_t FontCollectionFileSize(const FontCollection& font_collection) {
+ size_t max_offset = 0;
+ for (auto& font : font_collection.fonts) {
+ // font file size actually just finds max offset
+ max_offset = std::max(max_offset, FontFileSize(font));
+ }
+ return max_offset;
+}
+
+bool WriteFont(const Font& font, uint8_t* dst, size_t dst_size) {
+ size_t offset = 0;
+ return WriteFont(font, &offset, dst, dst_size);
+}
+
+bool WriteTableRecord(const Font::Table* table, size_t* offset, uint8_t* dst,
+ size_t dst_size) {
+ if (dst_size < *offset + kSfntEntrySize) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (table->IsReused()) {
+ table = table->reuse_of;
+ }
+ StoreU32(table->tag, offset, dst);
+ StoreU32(table->checksum, offset, dst);
+ StoreU32(table->offset, offset, dst);
+ StoreU32(table->length, offset, dst);
+ return true;
+}
+
+bool WriteTable(const Font::Table& table, size_t* offset, uint8_t* dst,
+ size_t dst_size) {
+ if (!WriteTableRecord(&table, offset, dst, dst_size)) {
+ return false;
+ }
+
+ // Write the actual table data if it's the first time we've seen it
+ if (!table.IsReused()) {
+ if (table.offset + table.length < table.offset ||
+ dst_size < table.offset + table.length) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ memcpy(dst + table.offset, table.data, table.length);
+ size_t padding_size = (4 - (table.length & 3)) & 3;
+ if (table.offset + table.length + padding_size < padding_size ||
+ dst_size < table.offset + table.length + padding_size) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ memset(dst + table.offset + table.length, 0, padding_size);
+ }
+ return true;
+}
+
+bool WriteFont(const Font& font, size_t* offset, uint8_t* dst,
+ size_t dst_size) {
+ if (dst_size < 12ULL + 16ULL * font.num_tables) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ StoreU32(font.flavor, offset, dst);
+ Store16(font.num_tables, offset, dst);
+ uint16_t max_pow2 = font.num_tables ? Log2Floor(font.num_tables) : 0;
+ uint16_t search_range = max_pow2 ? 1 << (max_pow2 + 4) : 0;
+ uint16_t range_shift = (font.num_tables << 4) - search_range;
+ Store16(search_range, offset, dst);
+ Store16(max_pow2, offset, dst);
+ Store16(range_shift, offset, dst);
+
+ for (const auto& i : font.tables) {
+ if (!WriteTable(i.second, offset, dst, dst_size)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst,
+ size_t dst_size) {
+ size_t offset = 0;
+
+ // It's simpler if this just a simple sfnt
+ if (font_collection.flavor != kTtcFontFlavor) {
+ return WriteFont(font_collection.fonts[0], &offset, dst, dst_size);
+ }
+
+ // Write TTC header
+ StoreU32(kTtcFontFlavor, &offset, dst);
+ StoreU32(font_collection.header_version, &offset, dst);
+ StoreU32(font_collection.fonts.size(), &offset, dst);
+
+ // Offset Table, zeroed for now
+ size_t offset_table = offset; // where to write offsets later
+ for (size_t i = 0; i < font_collection.fonts.size(); i++) {
+ StoreU32(0, &offset, dst);
+ }
+
+ if (font_collection.header_version == 0x00020000) {
+ StoreU32(0, &offset, dst); // ulDsigTag
+ StoreU32(0, &offset, dst); // ulDsigLength
+ StoreU32(0, &offset, dst); // ulDsigOffset
+ }
+
+ // Write fonts and their offsets.
+ for (size_t i = 0; i < font_collection.fonts.size(); i++) {
+ const auto& font = font_collection.fonts[i];
+ StoreU32(offset, &offset_table, dst);
+ if (!WriteFont(font, &offset, dst, dst_size)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+int NumGlyphs(const Font& font) {
+ const Font::Table* head_table = font.FindTable(kHeadTableTag);
+ const Font::Table* loca_table = font.FindTable(kLocaTableTag);
+ if (head_table == NULL || loca_table == NULL || head_table->length < 52) {
+ return 0;
+ }
+ int index_fmt = IndexFormat(font);
+ uint32_t loca_record_size = (index_fmt == 0 ? 2 : 4);
+ if (loca_table->length < loca_record_size) {
+ return 0;
+ }
+ return (loca_table->length / loca_record_size) - 1;
+}
+
+int IndexFormat(const Font& font) {
+ const Font::Table* head_table = font.FindTable(kHeadTableTag);
+ if (head_table == NULL) {
+ return 0;
+ }
+ return head_table->data[51];
+}
+
+bool Font::Table::IsReused() const {
+ return this->reuse_of != NULL;
+}
+
+bool GetGlyphData(const Font& font, int glyph_index,
+ const uint8_t** glyph_data, size_t* glyph_size) {
+ if (glyph_index < 0) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ const Font::Table* head_table = font.FindTable(kHeadTableTag);
+ const Font::Table* loca_table = font.FindTable(kLocaTableTag);
+ const Font::Table* glyf_table = font.FindTable(kGlyfTableTag);
+ if (head_table == NULL || loca_table == NULL || glyf_table == NULL ||
+ head_table->length < 52) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ int index_fmt = IndexFormat(font);
+
+ Buffer loca_buf(loca_table->data, loca_table->length);
+ if (index_fmt == 0) {
+ uint16_t offset1, offset2;
+ if (!loca_buf.Skip(2 * glyph_index) ||
+ !loca_buf.ReadU16(&offset1) ||
+ !loca_buf.ReadU16(&offset2) ||
+ offset2 < offset1 ||
+ 2 * offset2 > glyf_table->length) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *glyph_data = glyf_table->data + 2 * offset1;
+ *glyph_size = 2 * (offset2 - offset1);
+ } else {
+ uint32_t offset1, offset2;
+ if (!loca_buf.Skip(4 * glyph_index) ||
+ !loca_buf.ReadU32(&offset1) ||
+ !loca_buf.ReadU32(&offset2) ||
+ offset2 < offset1 ||
+ offset2 > glyf_table->length) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *glyph_data = glyf_table->data + offset1;
+ *glyph_size = offset2 - offset1;
+ }
+ return true;
+}
+
+bool RemoveDigitalSignature(Font* font) {
+ std::map<uint32_t, Font::Table>::iterator it =
+ font->tables.find(kDsigTableTag);
+ if (it != font->tables.end()) {
+ font->tables.erase(it);
+ font->num_tables = font->tables.size();
+ }
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/font.h b/dviware/dvisvgm/libs/woff2/src/font.h
new file mode 100644
index 0000000000..7b8ddddc5a
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/font.h
@@ -0,0 +1,105 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Data model for a font file in sfnt format, reading and writing functions and
+ accessors for the glyph data. */
+
+#ifndef WOFF2_FONT_H_
+#define WOFF2_FONT_H_
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <map>
+#include <vector>
+
+namespace woff2 {
+
+// Represents an sfnt font file. Only the table directory is parsed, for the
+// table data we only store a raw pointer, therefore a font object is valid only
+// as long the data from which it was parsed is around.
+struct Font {
+ uint32_t flavor;
+ uint16_t num_tables;
+
+ struct Table {
+ uint32_t tag;
+ uint32_t checksum;
+ uint32_t offset;
+ uint32_t length;
+ const uint8_t* data;
+
+ // Buffer used to mutate the data before writing out.
+ std::vector<uint8_t> buffer;
+
+ // If we've seen this tag/offset before, pointer to the first time we saw it
+ // If this is the first time we've seen this table, NULL
+ // Intended use is to bypass re-processing tables
+ Font::Table* reuse_of;
+
+ uint8_t flag_byte;
+
+ // Is this table reused by a TTC
+ bool IsReused() const;
+ };
+ std::map<uint32_t, Table> tables;
+ std::vector<uint32_t> OutputOrderedTags() const;
+
+ Table* FindTable(uint32_t tag);
+ const Table* FindTable(uint32_t tag) const;
+};
+
+// Accomodates both singular (OTF, TTF) and collection (TTC) fonts
+struct FontCollection {
+ uint32_t flavor;
+ uint32_t header_version;
+ // (offset, first use of table*) pairs
+ std::map<uint32_t, Font::Table*> tables;
+ std::vector<Font> fonts;
+};
+
+// Parses the font from the given data. Returns false on parsing failure or
+// buffer overflow. The font is valid only so long the input data pointer is
+// valid. Does NOT support collections.
+bool ReadFont(const uint8_t* data, size_t len, Font* font);
+
+// Parses the font from the given data. Returns false on parsing failure or
+// buffer overflow. The font is valid only so long the input data pointer is
+// valid. Supports collections.
+bool ReadFontCollection(const uint8_t* data, size_t len, FontCollection* fonts);
+
+// Returns the file size of the font.
+size_t FontFileSize(const Font& font);
+size_t FontCollectionFileSize(const FontCollection& font);
+
+// Writes the font into the specified dst buffer. The dst_size should be the
+// same as returned by FontFileSize(). Returns false upon buffer overflow (which
+// should not happen if dst_size was computed by FontFileSize()).
+bool WriteFont(const Font& font, uint8_t* dst, size_t dst_size);
+// Write the font at a specific offset
+bool WriteFont(const Font& font, size_t* offset, uint8_t* dst, size_t dst_size);
+
+bool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst,
+ size_t dst_size);
+
+// Returns the number of glyphs in the font.
+// NOTE: Currently this works only for TrueType-flavored fonts, will return
+// zero for CFF-flavored fonts.
+int NumGlyphs(const Font& font);
+
+// Returns the index format of the font
+int IndexFormat(const Font& font);
+
+// Sets *glyph_data and *glyph_size to point to the location of the glyph data
+// with the given index. Returns false if the glyph is not found.
+bool GetGlyphData(const Font& font, int glyph_index,
+ const uint8_t** glyph_data, size_t* glyph_size);
+
+// Removes the digital signature (DSIG) table
+bool RemoveDigitalSignature(Font* font);
+
+} // namespace woff2
+
+#endif // WOFF2_FONT_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/glyph.cc b/dviware/dvisvgm/libs/woff2/src/glyph.cc
new file mode 100644
index 0000000000..057174de21
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/glyph.cc
@@ -0,0 +1,374 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Glyph manipulation */
+
+#include "./glyph.h"
+
+#include <stdlib.h>
+#include <limits>
+#include "./buffer.h"
+#include "./store_bytes.h"
+
+namespace woff2 {
+
+static const int32_t kFLAG_ONCURVE = 1;
+static const int32_t kFLAG_XSHORT = 1 << 1;
+static const int32_t kFLAG_YSHORT = 1 << 2;
+static const int32_t kFLAG_REPEAT = 1 << 3;
+static const int32_t kFLAG_XREPEATSIGN = 1 << 4;
+static const int32_t kFLAG_YREPEATSIGN = 1 << 5;
+static const int32_t kFLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;
+static const int32_t kFLAG_WE_HAVE_A_SCALE = 1 << 3;
+static const int32_t kFLAG_MORE_COMPONENTS = 1 << 5;
+static const int32_t kFLAG_WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
+static const int32_t kFLAG_WE_HAVE_A_TWO_BY_TWO = 1 << 7;
+static const int32_t kFLAG_WE_HAVE_INSTRUCTIONS = 1 << 8;
+
+bool ReadCompositeGlyphData(Buffer* buffer, Glyph* glyph) {
+ glyph->have_instructions = false;
+ glyph->composite_data = buffer->buffer() + buffer->offset();
+ size_t start_offset = buffer->offset();
+ uint16_t flags = kFLAG_MORE_COMPONENTS;
+ while (flags & kFLAG_MORE_COMPONENTS) {
+ if (!buffer->ReadU16(&flags)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyph->have_instructions |= (flags & kFLAG_WE_HAVE_INSTRUCTIONS) != 0;
+ size_t arg_size = 2; // glyph index
+ if (flags & kFLAG_ARG_1_AND_2_ARE_WORDS) {
+ arg_size += 4;
+ } else {
+ arg_size += 2;
+ }
+ if (flags & kFLAG_WE_HAVE_A_SCALE) {
+ arg_size += 2;
+ } else if (flags & kFLAG_WE_HAVE_AN_X_AND_Y_SCALE) {
+ arg_size += 4;
+ } else if (flags & kFLAG_WE_HAVE_A_TWO_BY_TWO) {
+ arg_size += 8;
+ }
+ if (!buffer->Skip(arg_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+ if (buffer->offset() - start_offset > std::numeric_limits<uint32_t>::max()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyph->composite_data_size = buffer->offset() - start_offset;
+ return true;
+}
+
+bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) {
+ Buffer buffer(data, len);
+
+ int16_t num_contours;
+ if (!buffer.ReadS16(&num_contours)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Read the bounding box.
+ if (!buffer.ReadS16(&glyph->x_min) ||
+ !buffer.ReadS16(&glyph->y_min) ||
+ !buffer.ReadS16(&glyph->x_max) ||
+ !buffer.ReadS16(&glyph->y_max)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (num_contours == 0) {
+ // Empty glyph.
+ return true;
+ }
+
+ if (num_contours > 0) {
+ // Simple glyph.
+ glyph->contours.resize(num_contours);
+
+ // Read the number of points per contour.
+ uint16_t last_point_index = 0;
+ for (int i = 0; i < num_contours; ++i) {
+ uint16_t point_index;
+ if (!buffer.ReadU16(&point_index)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ uint16_t num_points = point_index - last_point_index + (i == 0 ? 1 : 0);
+ glyph->contours[i].resize(num_points);
+ last_point_index = point_index;
+ }
+
+ // Read the instructions.
+ if (!buffer.ReadU16(&glyph->instructions_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyph->instructions_data = data + buffer.offset();
+ if (!buffer.Skip(glyph->instructions_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Read the run-length coded flags.
+ std::vector<std::vector<uint8_t> > flags(num_contours);
+ {
+ uint8_t flag = 0;
+ uint8_t flag_repeat = 0;
+ for (int i = 0; i < num_contours; ++i) {
+ flags[i].resize(glyph->contours[i].size());
+ for (size_t j = 0; j < glyph->contours[i].size(); ++j) {
+ if (flag_repeat == 0) {
+ if (!buffer.ReadU8(&flag)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (flag & kFLAG_REPEAT) {
+ if (!buffer.ReadU8(&flag_repeat)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+ } else {
+ flag_repeat--;
+ }
+ flags[i][j] = flag;
+ glyph->contours[i][j].on_curve = flag & kFLAG_ONCURVE;
+ }
+ }
+ }
+
+ // Read the x coordinates.
+ int prev_x = 0;
+ for (int i = 0; i < num_contours; ++i) {
+ for (size_t j = 0; j < glyph->contours[i].size(); ++j) {
+ uint8_t flag = flags[i][j];
+ if (flag & kFLAG_XSHORT) {
+ // single byte x-delta coord value
+ uint8_t x_delta;
+ if (!buffer.ReadU8(&x_delta)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ int sign = (flag & kFLAG_XREPEATSIGN) ? 1 : -1;
+ glyph->contours[i][j].x = prev_x + sign * x_delta;
+ } else {
+ // double byte x-delta coord value
+ int16_t x_delta = 0;
+ if (!(flag & kFLAG_XREPEATSIGN)) {
+ if (!buffer.ReadS16(&x_delta)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+ glyph->contours[i][j].x = prev_x + x_delta;
+ }
+ prev_x = glyph->contours[i][j].x;
+ }
+ }
+
+ // Read the y coordinates.
+ int prev_y = 0;
+ for (int i = 0; i < num_contours; ++i) {
+ for (size_t j = 0; j < glyph->contours[i].size(); ++j) {
+ uint8_t flag = flags[i][j];
+ if (flag & kFLAG_YSHORT) {
+ // single byte y-delta coord value
+ uint8_t y_delta;
+ if (!buffer.ReadU8(&y_delta)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ int sign = (flag & kFLAG_YREPEATSIGN) ? 1 : -1;
+ glyph->contours[i][j].y = prev_y + sign * y_delta;
+ } else {
+ // double byte y-delta coord value
+ int16_t y_delta = 0;
+ if (!(flag & kFLAG_YREPEATSIGN)) {
+ if (!buffer.ReadS16(&y_delta)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+ glyph->contours[i][j].y = prev_y + y_delta;
+ }
+ prev_y = glyph->contours[i][j].y;
+ }
+ }
+ } else if (num_contours == -1) {
+ // Composite glyph.
+ if (!ReadCompositeGlyphData(&buffer, glyph)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // Read the instructions.
+ if (glyph->have_instructions) {
+ if (!buffer.ReadU16(&glyph->instructions_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyph->instructions_data = data + buffer.offset();
+ if (!buffer.Skip(glyph->instructions_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ } else {
+ glyph->instructions_size = 0;
+ }
+ } else {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ return true;
+}
+
+namespace {
+
+void StoreBbox(const Glyph& glyph, size_t* offset, uint8_t* dst) {
+ Store16(glyph.x_min, offset, dst);
+ Store16(glyph.y_min, offset, dst);
+ Store16(glyph.x_max, offset, dst);
+ Store16(glyph.y_max, offset, dst);
+}
+
+void StoreInstructions(const Glyph& glyph, size_t* offset, uint8_t* dst) {
+ Store16(glyph.instructions_size, offset, dst);
+ StoreBytes(glyph.instructions_data, glyph.instructions_size, offset, dst);
+}
+
+bool StoreEndPtsOfContours(const Glyph& glyph, size_t* offset, uint8_t* dst) {
+ int end_point = -1;
+ for (const auto& contour : glyph.contours) {
+ end_point += contour.size();
+ if (contour.size() > std::numeric_limits<uint16_t>::max() ||
+ end_point > std::numeric_limits<uint16_t>::max()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ Store16(end_point, offset, dst);
+ }
+ return true;
+}
+
+bool StorePoints(const Glyph& glyph, size_t* offset,
+ uint8_t* dst, size_t dst_size) {
+ int last_flag = -1;
+ int repeat_count = 0;
+ int last_x = 0;
+ int last_y = 0;
+ size_t x_bytes = 0;
+ size_t y_bytes = 0;
+
+ // Store the flags and calculate the total size of the x and y coordinates.
+ for (const auto& contour : glyph.contours) {
+ for (const auto& point : contour) {
+ int flag = point.on_curve ? kFLAG_ONCURVE : 0;
+ int dx = point.x - last_x;
+ int dy = point.y - last_y;
+ if (dx == 0) {
+ flag |= kFLAG_XREPEATSIGN;
+ } else if (dx > -256 && dx < 256) {
+ flag |= kFLAG_XSHORT | (dx > 0 ? kFLAG_XREPEATSIGN : 0);
+ x_bytes += 1;
+ } else {
+ x_bytes += 2;
+ }
+ if (dy == 0) {
+ flag |= kFLAG_YREPEATSIGN;
+ } else if (dy > -256 && dy < 256) {
+ flag |= kFLAG_YSHORT | (dy > 0 ? kFLAG_YREPEATSIGN : 0);
+ y_bytes += 1;
+ } else {
+ y_bytes += 2;
+ }
+ if (flag == last_flag && repeat_count != 255) {
+ dst[*offset - 1] |= kFLAG_REPEAT;
+ repeat_count++;
+ } else {
+ if (repeat_count != 0) {
+ if (*offset >= dst_size) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ dst[(*offset)++] = repeat_count;
+ }
+ if (*offset >= dst_size) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ dst[(*offset)++] = flag;
+ repeat_count = 0;
+ }
+ last_x = point.x;
+ last_y = point.y;
+ last_flag = flag;
+ }
+ }
+ if (repeat_count != 0) {
+ if (*offset >= dst_size) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ dst[(*offset)++] = repeat_count;
+ }
+
+ if (*offset + x_bytes + y_bytes > dst_size) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Store the x and y coordinates.
+ size_t x_offset = *offset;
+ size_t y_offset = *offset + x_bytes;
+ last_x = 0;
+ last_y = 0;
+ for (const auto& contour : glyph.contours) {
+ for (const auto& point : contour) {
+ int dx = point.x - last_x;
+ int dy = point.y - last_y;
+ if (dx == 0) {
+ // pass
+ } else if (dx > -256 && dx < 256) {
+ dst[x_offset++] = std::abs(dx);
+ } else {
+ Store16(dx, &x_offset, dst);
+ }
+ if (dy == 0) {
+ // pass
+ } else if (dy > -256 && dy < 256) {
+ dst[y_offset++] = std::abs(dy);
+ } else {
+ Store16(dy, &y_offset, dst);
+ }
+ last_x += dx;
+ last_y += dy;
+ }
+ }
+ *offset = y_offset;
+ return true;
+}
+
+} // namespace
+
+bool StoreGlyph(const Glyph& glyph, uint8_t* dst, size_t* dst_size) {
+ size_t offset = 0;
+ if (glyph.composite_data_size > 0) {
+ // Composite glyph.
+ if (*dst_size < ((10ULL + glyph.composite_data_size) +
+ ((glyph.have_instructions ? 2ULL : 0) +
+ glyph.instructions_size))) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ Store16(-1, &offset, dst);
+ StoreBbox(glyph, &offset, dst);
+ StoreBytes(glyph.composite_data, glyph.composite_data_size, &offset, dst);
+ if (glyph.have_instructions) {
+ StoreInstructions(glyph, &offset, dst);
+ }
+ } else if (glyph.contours.size() > 0) {
+ // Simple glyph.
+ if (glyph.contours.size() > std::numeric_limits<int16_t>::max()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (*dst_size < ((12ULL + 2 * glyph.contours.size()) +
+ glyph.instructions_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ Store16(glyph.contours.size(), &offset, dst);
+ StoreBbox(glyph, &offset, dst);
+ if (!StoreEndPtsOfContours(glyph, &offset, dst)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ StoreInstructions(glyph, &offset, dst);
+ if (!StorePoints(glyph, &offset, dst, *dst_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+ *dst_size = offset;
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/glyph.h b/dviware/dvisvgm/libs/woff2/src/glyph.h
new file mode 100644
index 0000000000..f24056f4c8
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/glyph.h
@@ -0,0 +1,63 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Data model and I/O for glyph data within sfnt format files for the purpose of
+ performing the preprocessing step of the WOFF 2.0 conversion. */
+
+#ifndef WOFF2_GLYPH_H_
+#define WOFF2_GLYPH_H_
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <vector>
+
+namespace woff2 {
+
+// Represents a parsed simple or composite glyph. The composite glyph data and
+// instructions are un-parsed and we keep only pointers to the raw data,
+// therefore the glyph is valid only so long the data from which it was parsed
+// is around.
+class Glyph {
+ public:
+ Glyph() : instructions_size(0), composite_data_size(0) {}
+
+ // Bounding box.
+ int16_t x_min;
+ int16_t x_max;
+ int16_t y_min;
+ int16_t y_max;
+
+ // Instructions.
+ uint16_t instructions_size;
+ const uint8_t* instructions_data;
+
+ // Data model for simple glyphs.
+ struct Point {
+ int x;
+ int y;
+ bool on_curve;
+ };
+ std::vector<std::vector<Point> > contours;
+
+ // Data for composite glyphs.
+ const uint8_t* composite_data;
+ uint32_t composite_data_size;
+ bool have_instructions;
+};
+
+// Parses the glyph from the given data. Returns false on parsing failure or
+// buffer overflow. The glyph is valid only so long the input data pointer is
+// valid.
+bool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph);
+
+// Stores the glyph into the specified dst buffer. The *dst_size is the buffer
+// size on entry and is set to the actual (unpadded) stored size on exit.
+// Returns false on buffer overflow.
+bool StoreGlyph(const Glyph& glyph, uint8_t* dst, size_t* dst_size);
+
+} // namespace woff2
+
+#endif // WOFF2_GLYPH_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/normalize.cc b/dviware/dvisvgm/libs/woff2/src/normalize.cc
new file mode 100644
index 0000000000..32a065975f
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/normalize.cc
@@ -0,0 +1,309 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Glyph normalization */
+
+#include "./normalize.h"
+
+#include <inttypes.h>
+#include <stddef.h>
+
+#include "./buffer.h"
+#include "./port.h"
+#include "./font.h"
+#include "./glyph.h"
+#include "./round.h"
+#include "./store_bytes.h"
+#include "./table_tags.h"
+#include "./woff2_common.h"
+
+namespace woff2 {
+
+namespace {
+
+void StoreLoca(int index_fmt, uint32_t value, size_t* offset, uint8_t* dst) {
+ if (index_fmt == 0) {
+ Store16(value >> 1, offset, dst);
+ } else {
+ StoreU32(value, offset, dst);
+ }
+}
+
+} // namespace
+
+namespace {
+
+bool WriteNormalizedLoca(int index_fmt, int num_glyphs, Font* font) {
+ Font::Table* glyf_table = font->FindTable(kGlyfTableTag);
+ Font::Table* loca_table = font->FindTable(kLocaTableTag);
+
+ int glyph_sz = index_fmt == 0 ? 2 : 4;
+ loca_table->buffer.resize(Round4(num_glyphs + 1) * glyph_sz);
+ loca_table->length = (num_glyphs + 1) * glyph_sz;
+
+ uint8_t* glyf_dst = num_glyphs ? &glyf_table->buffer[0] : NULL;
+ uint8_t* loca_dst = &loca_table->buffer[0];
+ uint32_t glyf_offset = 0;
+ size_t loca_offset = 0;
+
+ for (int i = 0; i < num_glyphs; ++i) {
+ StoreLoca(index_fmt, glyf_offset, &loca_offset, loca_dst);
+ Glyph glyph;
+ const uint8_t* glyph_data;
+ size_t glyph_size;
+ if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||
+ (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ size_t glyf_dst_size = glyf_table->buffer.size() - glyf_offset;
+ if (!StoreGlyph(glyph, glyf_dst + glyf_offset, &glyf_dst_size)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyf_dst_size = Round4(glyf_dst_size);
+ if (glyf_dst_size > std::numeric_limits<uint32_t>::max() ||
+ glyf_offset + static_cast<uint32_t>(glyf_dst_size) < glyf_offset ||
+ (index_fmt == 0 && glyf_offset + glyf_dst_size >= (1UL << 17))) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ glyf_offset += glyf_dst_size;
+ }
+
+ StoreLoca(index_fmt, glyf_offset, &loca_offset, loca_dst);
+
+ glyf_table->buffer.resize(glyf_offset);
+ glyf_table->data = glyf_offset ? &glyf_table->buffer[0] : NULL;
+ glyf_table->length = glyf_offset;
+ loca_table->data = loca_offset ? &loca_table->buffer[0] : NULL;
+
+ return true;
+}
+
+} // namespace
+
+namespace {
+
+bool MakeEditableBuffer(Font* font, int tableTag) {
+ Font::Table* table = font->FindTable(tableTag);
+ if (table == NULL) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (table->IsReused()) {
+ return true;
+ }
+ int sz = Round4(table->length);
+ table->buffer.resize(sz);
+ uint8_t* buf = &table->buffer[0];
+ memcpy(buf, table->data, table->length);
+ if (PREDICT_FALSE(sz > table->length)) {
+ memset(buf + table->length, 0, sz - table->length);
+ }
+ table->data = buf;
+ return true;
+}
+
+} // namespace
+
+bool NormalizeGlyphs(Font* font) {
+ Font::Table* head_table = font->FindTable(kHeadTableTag);
+ Font::Table* glyf_table = font->FindTable(kGlyfTableTag);
+ Font::Table* loca_table = font->FindTable(kLocaTableTag);
+ if (head_table == NULL) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // If you don't have glyf/loca this transform isn't very interesting
+ if (loca_table == NULL && glyf_table == NULL) {
+ return true;
+ }
+ // It would be best if you didn't have just one of glyf/loca
+ if ((glyf_table == NULL) != (loca_table == NULL)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // Must share neither or both loca & glyf
+ if (loca_table->IsReused() != glyf_table->IsReused()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (loca_table->IsReused()) {
+ return true;
+ }
+
+ int index_fmt = head_table->data[51];
+ int num_glyphs = NumGlyphs(*font);
+
+ // We need to allocate a bit more than its original length for the normalized
+ // glyf table, since it can happen that the glyphs in the original table are
+ // 2-byte aligned, while in the normalized table they are 4-byte aligned.
+ // That gives a maximum of 2 bytes increase per glyph. However, there is no
+ // theoretical guarantee that the total size of the flags plus the coordinates
+ // is the smallest possible in the normalized version, so we have to allow
+ // some general overhead.
+ // TODO(user) Figure out some more precise upper bound on the size of
+ // the overhead.
+ size_t max_normalized_glyf_size = 1.1 * glyf_table->length + 2 * num_glyphs;
+
+ glyf_table->buffer.resize(max_normalized_glyf_size);
+
+ // if we can't write a loca using short's (index_fmt 0)
+ // try again using longs (index_fmt 1)
+ if (!WriteNormalizedLoca(index_fmt, num_glyphs, font)) {
+ if (index_fmt != 0) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Rewrite loca with 4-byte entries & update head to match
+ index_fmt = 1;
+ if (!WriteNormalizedLoca(index_fmt, num_glyphs, font)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ head_table->buffer[51] = 1;
+ }
+
+ return true;
+}
+
+bool NormalizeOffsets(Font* font) {
+ uint32_t offset = 12 + 16 * font->num_tables;
+ for (auto tag : font->OutputOrderedTags()) {
+ auto& table = font->tables[tag];
+ table.offset = offset;
+ offset += Round4(table.length);
+ }
+ return true;
+}
+
+namespace {
+
+uint32_t ComputeHeaderChecksum(const Font& font) {
+ uint32_t checksum = font.flavor;
+ uint16_t max_pow2 = font.num_tables ? Log2Floor(font.num_tables) : 0;
+ uint16_t search_range = max_pow2 ? 1 << (max_pow2 + 4) : 0;
+ uint16_t range_shift = (font.num_tables << 4) - search_range;
+ checksum += (font.num_tables << 16 | search_range);
+ checksum += (max_pow2 << 16 | range_shift);
+ for (const auto& i : font.tables) {
+ const Font::Table* table = &i.second;
+ if (table->IsReused()) {
+ table = table->reuse_of;
+ }
+ checksum += table->tag;
+ checksum += table->checksum;
+ checksum += table->offset;
+ checksum += table->length;
+ }
+ return checksum;
+}
+
+} // namespace
+
+bool FixChecksums(Font* font) {
+ Font::Table* head_table = font->FindTable(kHeadTableTag);
+ if (head_table == NULL) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (head_table->reuse_of != NULL) {
+ head_table = head_table->reuse_of;
+ }
+ if (head_table->length < 12) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ uint8_t* head_buf = &head_table->buffer[0];
+ size_t offset = 8;
+ StoreU32(0, &offset, head_buf);
+ uint32_t file_checksum = 0;
+ for (auto& i : font->tables) {
+ Font::Table* table = &i.second;
+ if (table->IsReused()) {
+ table = table->reuse_of;
+ }
+ table->checksum = ComputeULongSum(table->data, table->length);
+ file_checksum += table->checksum;
+ }
+
+ file_checksum += ComputeHeaderChecksum(*font);
+ offset = 8;
+ StoreU32(0xb1b0afba - file_checksum, &offset, head_buf);
+
+ return true;
+}
+
+namespace {
+bool MarkTransformed(Font* font) {
+ Font::Table* head_table = font->FindTable(kHeadTableTag);
+ if (head_table == NULL) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (head_table->reuse_of != NULL) {
+ head_table = head_table->reuse_of;
+ }
+ if (head_table->length < 17) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // set bit 11 of head table 'flags' to indicate that font has undergone
+ // lossless modifying transform
+ int head_flags = head_table->data[16];
+ head_table->buffer[16] = head_flags | 0x08;
+ return true;
+}
+} // namespace
+
+
+bool NormalizeWithoutFixingChecksums(Font* font) {
+ return (MakeEditableBuffer(font, kHeadTableTag) &&
+ RemoveDigitalSignature(font) &&
+ MarkTransformed(font) &&
+ NormalizeGlyphs(font) &&
+ NormalizeOffsets(font));
+}
+
+bool NormalizeFont(Font* font) {
+ return (NormalizeWithoutFixingChecksums(font) &&
+ FixChecksums(font));
+}
+
+bool NormalizeFontCollection(FontCollection* font_collection) {
+ if (font_collection->fonts.size() == 1) {
+ return NormalizeFont(&font_collection->fonts[0]);
+ }
+
+ uint32_t offset = CollectionHeaderSize(font_collection->header_version,
+ font_collection->fonts.size());
+ for (auto& font : font_collection->fonts) {
+ if (!NormalizeWithoutFixingChecksums(&font)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Font normalization failed.\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ offset += kSfntHeaderSize + kSfntEntrySize * font.num_tables;
+ }
+
+ // Start table offsets after TTC Header and Sfnt Headers
+ for (auto& font : font_collection->fonts) {
+ for (auto tag : font.OutputOrderedTags()) {
+ Font::Table& table = font.tables[tag];
+ if (table.IsReused()) {
+ table.offset = table.reuse_of->offset;
+ } else {
+ table.offset = offset;
+ offset += Round4(table.length);
+ }
+ }
+ }
+
+ // Now we can fix the checksums
+ for (auto& font : font_collection->fonts) {
+ if (!FixChecksums(&font)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Failed to fix checksums\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/normalize.h b/dviware/dvisvgm/libs/woff2/src/normalize.h
new file mode 100644
index 0000000000..c6fee74db6
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/normalize.h
@@ -0,0 +1,39 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Functions for normalizing fonts. Since the WOFF 2.0 decoder creates font
+ files in normalized form, the WOFF 2.0 conversion is guaranteed to be
+ lossless (in a bitwise sense) only for normalized font files. */
+
+#ifndef WOFF2_NORMALIZE_H_
+#define WOFF2_NORMALIZE_H_
+
+namespace woff2 {
+
+struct Font;
+struct FontCollection;
+
+// Changes the offset fields of the table headers so that the data for the
+// tables will be written in order of increasing tag values, without any gaps
+// other than the 4-byte padding.
+bool NormalizeOffsets(Font* font);
+
+// Changes the checksum fields of the table headers and the checksum field of
+// the head table so that it matches the current data.
+bool FixChecksums(Font* font);
+
+// Parses each of the glyphs in the font and writes them again to the glyf
+// table in normalized form, as defined by the StoreGlyph() function. Changes
+// the loca table accordigly.
+bool NormalizeGlyphs(Font* font);
+
+// Performs all of the normalization steps above.
+bool NormalizeFont(Font* font);
+bool NormalizeFontCollection(FontCollection* font_collection);
+
+} // namespace woff2
+
+#endif // WOFF2_NORMALIZE_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/port.h b/dviware/dvisvgm/libs/woff2/src/port.h
new file mode 100644
index 0000000000..8b60fee8bc
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/port.h
@@ -0,0 +1,66 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helper function for bit twiddling and macros for branch prediction. */
+
+#ifndef WOFF2_PORT_H_
+#define WOFF2_PORT_H_
+
+#include <assert.h>
+
+namespace woff2 {
+
+typedef unsigned int uint32;
+
+inline int Log2Floor(uint32 n) {
+#if defined(__GNUC__)
+ return n == 0 ? -1 : 31 ^ __builtin_clz(n);
+#else
+ if (n == 0)
+ return -1;
+ int log = 0;
+ uint32 value = n;
+ for (int i = 4; i >= 0; --i) {
+ int shift = (1 << i);
+ uint32 x = value >> shift;
+ if (x != 0) {
+ value = x;
+ log += shift;
+ }
+ }
+ assert(value == 1);
+ return log;
+#endif
+}
+
+} // namespace woff2
+
+/* Compatibility with non-clang compilers. */
+#ifndef __has_builtin
+#define __has_builtin(x) 0
+#endif
+
+#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || \
+ (defined(__llvm__) && __has_builtin(__builtin_expect))
+#define PREDICT_FALSE(x) (__builtin_expect(x, 0))
+#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
+#else
+#define PREDICT_FALSE(x) (x)
+#define PREDICT_TRUE(x) (x)
+#endif
+
+#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
+ (defined(M_ARM) && (M_ARM == 7)) || \
+ defined(__aarch64__) || defined(__ARM64_ARCH_8__) || defined(__i386) || \
+ defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
+#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+#define WOFF_LITTLE_ENDIAN
+#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#define WOFF_BIG_ENDIAN
+#endif /* endianness */
+#endif /* CPU whitelist */
+
+#endif // WOFF2_PORT_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/round.h b/dviware/dvisvgm/libs/woff2/src/round.h
new file mode 100644
index 0000000000..e5b2cb1220
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/round.h
@@ -0,0 +1,27 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helper for rounding */
+
+#ifndef WOFF2_ROUND_H_
+#define WOFF2_ROUND_H_
+
+#include <limits>
+
+namespace woff2 {
+
+// Round a value up to the nearest multiple of 4. Don't round the value in the
+// case that rounding up overflows.
+template<typename T> T Round4(T value) {
+ if (std::numeric_limits<T>::max() - value < 3) {
+ return value;
+ }
+ return (value + 3) & ~3;
+}
+
+} // namespace woff2
+
+#endif // WOFF2_ROUND_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/store_bytes.h b/dviware/dvisvgm/libs/woff2/src/store_bytes.h
new file mode 100644
index 0000000000..fff3c62f84
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/store_bytes.h
@@ -0,0 +1,71 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helper functions for storing integer values into byte streams.
+ No bounds checking is performed, that is the responsibility of the caller. */
+
+#ifndef WOFF2_STORE_BYTES_H_
+#define WOFF2_STORE_BYTES_H_
+
+#include <inttypes.h>
+#include <stddef.h>
+#include <string.h>
+
+#include "./port.h"
+
+namespace woff2 {
+
+inline size_t StoreU32(uint8_t* dst, size_t offset, uint32_t x) {
+ dst[offset] = x >> 24;
+ dst[offset + 1] = x >> 16;
+ dst[offset + 2] = x >> 8;
+ dst[offset + 3] = x;
+ return offset + 4;
+}
+
+inline size_t Store16(uint8_t* dst, size_t offset, int x) {
+#if defined(WOFF_LITTLE_ENDIAN)
+ *reinterpret_cast<uint16_t*>(dst + offset) =
+ ((x & 0xFF) << 8) | ((x & 0xFF00) >> 8);
+#elif defined(WOFF_BIG_ENDIAN)
+ *reinterpret_cast<uint16_t*>(dst + offset) = static_cast<uint16_t>(x);
+#else
+ dst[offset] = x >> 8;
+ dst[offset + 1] = x;
+#endif
+ return offset + 2;
+}
+
+inline void StoreU32(uint32_t val, size_t* offset, uint8_t* dst) {
+ dst[(*offset)++] = val >> 24;
+ dst[(*offset)++] = val >> 16;
+ dst[(*offset)++] = val >> 8;
+ dst[(*offset)++] = val;
+}
+
+inline void Store16(int val, size_t* offset, uint8_t* dst) {
+#if defined(WOFF_LITTLE_ENDIAN)
+ *reinterpret_cast<uint16_t*>(dst + *offset) =
+ ((val & 0xFF) << 8) | ((val & 0xFF00) >> 8);
+ *offset += 2;
+#elif defined(WOFF_BIG_ENDIAN)
+ *reinterpret_cast<uint16_t*>(dst + *offset) = static_cast<uint16_t>(val);
+ *offset += 2;
+#else
+ dst[(*offset)++] = val >> 8;
+ dst[(*offset)++] = val;
+#endif
+}
+
+inline void StoreBytes(const uint8_t* data, size_t len,
+ size_t* offset, uint8_t* dst) {
+ memcpy(&dst[*offset], data, len);
+ *offset += len;
+}
+
+} // namespace woff2
+
+#endif // WOFF2_STORE_BYTES_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/table_tags.cc b/dviware/dvisvgm/libs/woff2/src/table_tags.cc
new file mode 100644
index 0000000000..dca3ec8d28
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/table_tags.cc
@@ -0,0 +1,82 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Font table tags */
+
+#include "./table_tags.h"
+
+namespace woff2 {
+
+// Note that the byte order is big-endian, not the same as ots.cc
+#define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d)
+
+const uint32_t kKnownTags[63] = {
+ TAG('c', 'm', 'a', 'p'), // 0
+ TAG('h', 'e', 'a', 'd'), // 1
+ TAG('h', 'h', 'e', 'a'), // 2
+ TAG('h', 'm', 't', 'x'), // 3
+ TAG('m', 'a', 'x', 'p'), // 4
+ TAG('n', 'a', 'm', 'e'), // 5
+ TAG('O', 'S', '/', '2'), // 6
+ TAG('p', 'o', 's', 't'), // 7
+ TAG('c', 'v', 't', ' '), // 8
+ TAG('f', 'p', 'g', 'm'), // 9
+ TAG('g', 'l', 'y', 'f'), // 10
+ TAG('l', 'o', 'c', 'a'), // 11
+ TAG('p', 'r', 'e', 'p'), // 12
+ TAG('C', 'F', 'F', ' '), // 13
+ TAG('V', 'O', 'R', 'G'), // 14
+ TAG('E', 'B', 'D', 'T'), // 15
+ TAG('E', 'B', 'L', 'C'), // 16
+ TAG('g', 'a', 's', 'p'), // 17
+ TAG('h', 'd', 'm', 'x'), // 18
+ TAG('k', 'e', 'r', 'n'), // 19
+ TAG('L', 'T', 'S', 'H'), // 20
+ TAG('P', 'C', 'L', 'T'), // 21
+ TAG('V', 'D', 'M', 'X'), // 22
+ TAG('v', 'h', 'e', 'a'), // 23
+ TAG('v', 'm', 't', 'x'), // 24
+ TAG('B', 'A', 'S', 'E'), // 25
+ TAG('G', 'D', 'E', 'F'), // 26
+ TAG('G', 'P', 'O', 'S'), // 27
+ TAG('G', 'S', 'U', 'B'), // 28
+ TAG('E', 'B', 'S', 'C'), // 29
+ TAG('J', 'S', 'T', 'F'), // 30
+ TAG('M', 'A', 'T', 'H'), // 31
+ TAG('C', 'B', 'D', 'T'), // 32
+ TAG('C', 'B', 'L', 'C'), // 33
+ TAG('C', 'O', 'L', 'R'), // 34
+ TAG('C', 'P', 'A', 'L'), // 35
+ TAG('S', 'V', 'G', ' '), // 36
+ TAG('s', 'b', 'i', 'x'), // 37
+ TAG('a', 'c', 'n', 't'), // 38
+ TAG('a', 'v', 'a', 'r'), // 39
+ TAG('b', 'd', 'a', 't'), // 40
+ TAG('b', 'l', 'o', 'c'), // 41
+ TAG('b', 's', 'l', 'n'), // 42
+ TAG('c', 'v', 'a', 'r'), // 43
+ TAG('f', 'd', 's', 'c'), // 44
+ TAG('f', 'e', 'a', 't'), // 45
+ TAG('f', 'm', 't', 'x'), // 46
+ TAG('f', 'v', 'a', 'r'), // 47
+ TAG('g', 'v', 'a', 'r'), // 48
+ TAG('h', 's', 't', 'y'), // 49
+ TAG('j', 'u', 's', 't'), // 50
+ TAG('l', 'c', 'a', 'r'), // 51
+ TAG('m', 'o', 'r', 't'), // 52
+ TAG('m', 'o', 'r', 'x'), // 53
+ TAG('o', 'p', 'b', 'd'), // 54
+ TAG('p', 'r', 'o', 'p'), // 55
+ TAG('t', 'r', 'a', 'k'), // 56
+ TAG('Z', 'a', 'p', 'f'), // 57
+ TAG('S', 'i', 'l', 'f'), // 58
+ TAG('G', 'l', 'a', 't'), // 59
+ TAG('G', 'l', 'o', 'c'), // 60
+ TAG('F', 'e', 'a', 't'), // 61
+ TAG('S', 'i', 'l', 'l'), // 62
+};
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/table_tags.h b/dviware/dvisvgm/libs/woff2/src/table_tags.h
new file mode 100644
index 0000000000..42dc0ae1c4
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/table_tags.h
@@ -0,0 +1,30 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Font table tags */
+
+#ifndef WOFF2_TABLE_TAGS_H_
+#define WOFF2_TABLE_TAGS_H_
+
+#include <inttypes.h>
+
+namespace woff2 {
+
+// Tags of popular tables.
+static const uint32_t kGlyfTableTag = 0x676c7966;
+static const uint32_t kHeadTableTag = 0x68656164;
+static const uint32_t kLocaTableTag = 0x6c6f6361;
+static const uint32_t kDsigTableTag = 0x44534947;
+static const uint32_t kCffTableTag = 0x43464620;
+static const uint32_t kHmtxTableTag = 0x686d7478;
+static const uint32_t kHheaTableTag = 0x68686561;
+static const uint32_t kMaxpTableTag = 0x6d617870;
+
+extern const uint32_t kKnownTags[];
+
+} // namespace woff2
+
+#endif // WOFF2_TABLE_TAGS_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/transform.cc b/dviware/dvisvgm/libs/woff2/src/transform.cc
new file mode 100644
index 0000000000..999bef3745
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/transform.cc
@@ -0,0 +1,412 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */
+
+#include "./transform.h"
+
+#include <complex> // for std::abs
+
+#include "./buffer.h"
+#include "./font.h"
+#include "./glyph.h"
+#include "./table_tags.h"
+#include "./variable_length.h"
+
+namespace woff2 {
+
+namespace {
+
+const int FLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;
+const int FLAG_WE_HAVE_INSTRUCTIONS = 1 << 8;
+
+void WriteBytes(std::vector<uint8_t>* out, const uint8_t* data, size_t len) {
+ if (len == 0) return;
+ size_t offset = out->size();
+ out->resize(offset + len);
+ memcpy(&(*out)[offset], data, len);
+}
+
+void WriteBytes(std::vector<uint8_t>* out, const std::vector<uint8_t>& in) {
+ for (size_t i = 0; i < in.size(); ++i) {
+ out->push_back(in[i]);
+ }
+}
+
+void WriteUShort(std::vector<uint8_t>* out, int value) {
+ out->push_back(value >> 8);
+ out->push_back(value & 255);
+}
+
+void WriteLong(std::vector<uint8_t>* out, int value) {
+ out->push_back((value >> 24) & 255);
+ out->push_back((value >> 16) & 255);
+ out->push_back((value >> 8) & 255);
+ out->push_back(value & 255);
+}
+
+// Glyf table preprocessing, based on
+// GlyfEncoder.java
+class GlyfEncoder {
+ public:
+ explicit GlyfEncoder(int num_glyphs)
+ : n_glyphs_(num_glyphs) {
+ bbox_bitmap_.resize(((num_glyphs + 31) >> 5) << 2);
+ }
+
+ bool Encode(int glyph_id, const Glyph& glyph) {
+ if (glyph.composite_data_size > 0) {
+ WriteCompositeGlyph(glyph_id, glyph);
+ } else if (glyph.contours.size() > 0) {
+ WriteSimpleGlyph(glyph_id, glyph);
+ } else {
+ WriteUShort(&n_contour_stream_, 0);
+ }
+ return true;
+ }
+
+ void GetTransformedGlyfBytes(std::vector<uint8_t>* result) {
+ WriteLong(result, 0); // version
+ WriteUShort(result, n_glyphs_);
+ WriteUShort(result, 0); // index_format, will be set later
+ WriteLong(result, n_contour_stream_.size());
+ WriteLong(result, n_points_stream_.size());
+ WriteLong(result, flag_byte_stream_.size());
+ WriteLong(result, glyph_stream_.size());
+ WriteLong(result, composite_stream_.size());
+ WriteLong(result, bbox_bitmap_.size() + bbox_stream_.size());
+ WriteLong(result, instruction_stream_.size());
+ WriteBytes(result, n_contour_stream_);
+ WriteBytes(result, n_points_stream_);
+ WriteBytes(result, flag_byte_stream_);
+ WriteBytes(result, glyph_stream_);
+ WriteBytes(result, composite_stream_);
+ WriteBytes(result, bbox_bitmap_);
+ WriteBytes(result, bbox_stream_);
+ WriteBytes(result, instruction_stream_);
+ }
+
+ private:
+ void WriteInstructions(const Glyph& glyph) {
+ Write255UShort(&glyph_stream_, glyph.instructions_size);
+ WriteBytes(&instruction_stream_,
+ glyph.instructions_data, glyph.instructions_size);
+ }
+
+ bool ShouldWriteSimpleGlyphBbox(const Glyph& glyph) {
+ if (glyph.contours.empty() || glyph.contours[0].empty()) {
+ return glyph.x_min || glyph.y_min || glyph.x_max || glyph.y_max;
+ }
+
+ int16_t x_min = glyph.contours[0][0].x;
+ int16_t y_min = glyph.contours[0][0].y;
+ int16_t x_max = x_min;
+ int16_t y_max = y_min;
+ for (const auto& contour : glyph.contours) {
+ for (const auto& point : contour) {
+ if (point.x < x_min) x_min = point.x;
+ if (point.x > x_max) x_max = point.x;
+ if (point.y < y_min) y_min = point.y;
+ if (point.y > y_max) y_max = point.y;
+ }
+ }
+
+ if (glyph.x_min != x_min)
+ return true;
+ if (glyph.y_min != y_min)
+ return true;
+ if (glyph.x_max != x_max)
+ return true;
+ if (glyph.y_max != y_max)
+ return true;
+
+ return false;
+ }
+
+ void WriteSimpleGlyph(int glyph_id, const Glyph& glyph) {
+ int num_contours = glyph.contours.size();
+ WriteUShort(&n_contour_stream_, num_contours);
+ if (ShouldWriteSimpleGlyphBbox(glyph)) {
+ WriteBbox(glyph_id, glyph);
+ }
+ for (int i = 0; i < num_contours; i++) {
+ Write255UShort(&n_points_stream_, glyph.contours[i].size());
+ }
+ int lastX = 0;
+ int lastY = 0;
+ for (int i = 0; i < num_contours; i++) {
+ int num_points = glyph.contours[i].size();
+ for (int j = 0; j < num_points; j++) {
+ int x = glyph.contours[i][j].x;
+ int y = glyph.contours[i][j].y;
+ int dx = x - lastX;
+ int dy = y - lastY;
+ WriteTriplet(glyph.contours[i][j].on_curve, dx, dy);
+ lastX = x;
+ lastY = y;
+ }
+ }
+ if (num_contours > 0) {
+ WriteInstructions(glyph);
+ }
+ }
+
+ void WriteCompositeGlyph(int glyph_id, const Glyph& glyph) {
+ WriteUShort(&n_contour_stream_, -1);
+ WriteBbox(glyph_id, glyph);
+ WriteBytes(&composite_stream_,
+ glyph.composite_data,
+ glyph.composite_data_size);
+ if (glyph.have_instructions) {
+ WriteInstructions(glyph);
+ }
+ }
+
+ void WriteBbox(int glyph_id, const Glyph& glyph) {
+ bbox_bitmap_[glyph_id >> 3] |= 0x80 >> (glyph_id & 7);
+ WriteUShort(&bbox_stream_, glyph.x_min);
+ WriteUShort(&bbox_stream_, glyph.y_min);
+ WriteUShort(&bbox_stream_, glyph.x_max);
+ WriteUShort(&bbox_stream_, glyph.y_max);
+ }
+
+ void WriteTriplet(bool on_curve, int x, int y) {
+ int abs_x = std::abs(x);
+ int abs_y = std::abs(y);
+ int on_curve_bit = on_curve ? 0 : 128;
+ int x_sign_bit = (x < 0) ? 0 : 1;
+ int y_sign_bit = (y < 0) ? 0 : 1;
+ int xy_sign_bits = x_sign_bit + 2 * y_sign_bit;
+ if (x == 0 && abs_y < 1280) {
+ flag_byte_stream_.push_back(on_curve_bit +
+ ((abs_y & 0xf00) >> 7) + y_sign_bit);
+ glyph_stream_.push_back(abs_y & 0xff);
+ } else if (y == 0 && abs_x < 1280) {
+ flag_byte_stream_.push_back(on_curve_bit + 10 +
+ ((abs_x & 0xf00) >> 7) + x_sign_bit);
+ glyph_stream_.push_back(abs_x & 0xff);
+ } else if (abs_x < 65 && abs_y < 65) {
+ flag_byte_stream_.push_back(on_curve_bit + 20 +
+ ((abs_x - 1) & 0x30) +
+ (((abs_y - 1) & 0x30) >> 2) +
+ xy_sign_bits);
+ glyph_stream_.push_back((((abs_x - 1) & 0xf) << 4) | ((abs_y - 1) & 0xf));
+ } else if (abs_x < 769 && abs_y < 769) {
+ flag_byte_stream_.push_back(on_curve_bit + 84 +
+ 12 * (((abs_x - 1) & 0x300) >> 8) +
+ (((abs_y - 1) & 0x300) >> 6) + xy_sign_bits);
+ glyph_stream_.push_back((abs_x - 1) & 0xff);
+ glyph_stream_.push_back((abs_y - 1) & 0xff);
+ } else if (abs_x < 4096 && abs_y < 4096) {
+ flag_byte_stream_.push_back(on_curve_bit + 120 + xy_sign_bits);
+ glyph_stream_.push_back(abs_x >> 4);
+ glyph_stream_.push_back(((abs_x & 0xf) << 4) | (abs_y >> 8));
+ glyph_stream_.push_back(abs_y & 0xff);
+ } else {
+ flag_byte_stream_.push_back(on_curve_bit + 124 + xy_sign_bits);
+ glyph_stream_.push_back(abs_x >> 8);
+ glyph_stream_.push_back(abs_x & 0xff);
+ glyph_stream_.push_back(abs_y >> 8);
+ glyph_stream_.push_back(abs_y & 0xff);
+ }
+ }
+
+ std::vector<uint8_t> n_contour_stream_;
+ std::vector<uint8_t> n_points_stream_;
+ std::vector<uint8_t> flag_byte_stream_;
+ std::vector<uint8_t> composite_stream_;
+ std::vector<uint8_t> bbox_bitmap_;
+ std::vector<uint8_t> bbox_stream_;
+ std::vector<uint8_t> glyph_stream_;
+ std::vector<uint8_t> instruction_stream_;
+ int n_glyphs_;
+};
+
+} // namespace
+
+bool TransformGlyfAndLocaTables(Font* font) {
+ // no transform for CFF
+ const Font::Table* glyf_table = font->FindTable(kGlyfTableTag);
+ const Font::Table* loca_table = font->FindTable(kLocaTableTag);
+
+ // If you don't have glyf/loca this transform isn't very interesting
+ if (loca_table == NULL && glyf_table == NULL) {
+ return true;
+ }
+ // It would be best if you didn't have just one of glyf/loca
+ if ((glyf_table == NULL) != (loca_table == NULL)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // Must share neither or both loca & glyf
+ if (loca_table->IsReused() != glyf_table->IsReused()) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (loca_table->IsReused()) {
+ return true;
+ }
+
+ Font::Table* transformed_glyf = &font->tables[kGlyfTableTag ^ 0x80808080];
+ Font::Table* transformed_loca = &font->tables[kLocaTableTag ^ 0x80808080];
+
+ int num_glyphs = NumGlyphs(*font);
+ GlyfEncoder encoder(num_glyphs);
+ for (int i = 0; i < num_glyphs; ++i) {
+ Glyph glyph;
+ const uint8_t* glyph_data;
+ size_t glyph_size;
+ if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||
+ (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ encoder.Encode(i, glyph);
+ }
+ encoder.GetTransformedGlyfBytes(&transformed_glyf->buffer);
+
+ const Font::Table* head_table = font->FindTable(kHeadTableTag);
+ if (head_table == NULL || head_table->length < 52) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ transformed_glyf->buffer[7] = head_table->data[51]; // index_format
+
+ transformed_glyf->tag = kGlyfTableTag ^ 0x80808080;
+ transformed_glyf->length = transformed_glyf->buffer.size();
+ transformed_glyf->data = transformed_glyf->buffer.data();
+
+ transformed_loca->tag = kLocaTableTag ^ 0x80808080;
+ transformed_loca->length = 0;
+ transformed_loca->data = NULL;
+
+ return true;
+}
+
+// See https://www.microsoft.com/typography/otspec/hmtx.htm
+// See WOFF2 spec, 5.4. Transformed hmtx table format
+bool TransformHmtxTable(Font* font) {
+ const Font::Table* glyf_table = font->FindTable(kGlyfTableTag);
+ const Font::Table* hmtx_table = font->FindTable(kHmtxTableTag);
+ const Font::Table* hhea_table = font->FindTable(kHheaTableTag);
+
+ // If you don't have hmtx or a glyf not much is going to happen here
+ if (hmtx_table == NULL || glyf_table == NULL) {
+ return true;
+ }
+
+ // hmtx without hhea doesn't make sense
+ if (hhea_table == NULL) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Skip 34 to reach 'hhea' numberOfHMetrics
+ Buffer hhea_buf(hhea_table->data, hhea_table->length);
+ uint16_t num_hmetrics;
+ if (!hhea_buf.Skip(34) || !hhea_buf.ReadU16(&num_hmetrics)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ // Must have at least one hMetric
+ if (num_hmetrics < 1) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ int num_glyphs = NumGlyphs(*font);
+
+ // Most fonts can be transformed; assume it's a go until proven otherwise
+ std::vector<uint16_t> advance_widths;
+ std::vector<int16_t> proportional_lsbs;
+ std::vector<int16_t> monospace_lsbs;
+
+ bool remove_proportional_lsb = true;
+ bool remove_monospace_lsb = (num_glyphs - num_hmetrics) > 0;
+
+ Buffer hmtx_buf(hmtx_table->data, hmtx_table->length);
+ for (int i = 0; i < num_glyphs; i++) {
+ Glyph glyph;
+ const uint8_t* glyph_data;
+ size_t glyph_size;
+ if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||
+ (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ uint16_t advance_width = 0;
+ int16_t lsb = 0;
+
+ if (i < num_hmetrics) {
+ // [0, num_hmetrics) are proportional hMetrics
+ if (!hmtx_buf.ReadU16(&advance_width)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (!hmtx_buf.ReadS16(&lsb)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (glyph_size > 0 && glyph.x_min != lsb) {
+ remove_proportional_lsb = false;
+ }
+
+ advance_widths.push_back(advance_width);
+ proportional_lsbs.push_back(lsb);
+ } else {
+ // [num_hmetrics, num_glyphs) are monospace leftSideBearing's
+ if (!hmtx_buf.ReadS16(&lsb)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (glyph_size > 0 && glyph.x_min != lsb) {
+ remove_monospace_lsb = false;
+ }
+ monospace_lsbs.push_back(lsb);
+ }
+
+ // If we know we can't optimize, bail out completely
+ if (!remove_proportional_lsb && !remove_monospace_lsb) {
+ return true;
+ }
+ }
+
+ Font::Table* transformed_hmtx = &font->tables[kHmtxTableTag ^ 0x80808080];
+
+ uint8_t flags = 0;
+ size_t transformed_size = 1 + 2 * advance_widths.size();
+ if (remove_proportional_lsb) {
+ flags |= 1;
+ } else {
+ transformed_size += 2 * proportional_lsbs.size();
+ }
+ if (remove_monospace_lsb) {
+ flags |= 1 << 1;
+ } else {
+ transformed_size += 2 * monospace_lsbs.size();
+ }
+
+ transformed_hmtx->buffer.reserve(transformed_size);
+ std::vector<uint8_t>* out = &transformed_hmtx->buffer;
+ WriteBytes(out, &flags, 1);
+ for (uint16_t advance_width : advance_widths) {
+ WriteUShort(out, advance_width);
+ }
+
+ if (!remove_proportional_lsb) {
+ for (int16_t lsb : proportional_lsbs) {
+ WriteUShort(out, lsb);
+ }
+ }
+ if (!remove_monospace_lsb) {
+ for (int16_t lsb : monospace_lsbs) {
+ WriteUShort(out, lsb);
+ }
+ }
+
+ transformed_hmtx->tag = kHmtxTableTag ^ 0x80808080;
+ transformed_hmtx->flag_byte = 1 << 6;
+ transformed_hmtx->length = transformed_hmtx->buffer.size();
+ transformed_hmtx->data = transformed_hmtx->buffer.data();
+
+
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/transform.h b/dviware/dvisvgm/libs/woff2/src/transform.h
new file mode 100644
index 0000000000..a4583d16cb
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/transform.h
@@ -0,0 +1,26 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */
+
+#ifndef WOFF2_TRANSFORM_H_
+#define WOFF2_TRANSFORM_H_
+
+#include "./font.h"
+
+namespace woff2 {
+
+// Adds the transformed versions of the glyf and loca tables to the font. The
+// transformed loca table has zero length. The tag of the transformed tables is
+// derived from the original tag by flipping the MSBs of every byte.
+bool TransformGlyfAndLocaTables(Font* font);
+
+// Apply transformation to hmtx table if applicable for this font.
+bool TransformHmtxTable(Font* font);
+
+} // namespace woff2
+
+#endif // WOFF2_TRANSFORM_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/variable_length.cc b/dviware/dvisvgm/libs/woff2/src/variable_length.cc
new file mode 100644
index 0000000000..4f348d5e50
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/variable_length.cc
@@ -0,0 +1,129 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */
+
+#include "./variable_length.h"
+
+namespace woff2 {
+
+size_t Size255UShort(uint16_t value) {
+ size_t result = 3;
+ if (value < 253) {
+ result = 1;
+ } else if (value < 762) {
+ result = 2;
+ } else {
+ result = 3;
+ }
+ return result;
+}
+
+void Write255UShort(std::vector<uint8_t>* out, int value) {
+ if (value < 253) {
+ out->push_back(value);
+ } else if (value < 506) {
+ out->push_back(255);
+ out->push_back(value - 253);
+ } else if (value < 762) {
+ out->push_back(254);
+ out->push_back(value - 506);
+ } else {
+ out->push_back(253);
+ out->push_back(value >> 8);
+ out->push_back(value & 0xff);
+ }
+}
+
+void Store255UShort(int val, size_t* offset, uint8_t* dst) {
+ std::vector<uint8_t> packed;
+ Write255UShort(&packed, val);
+ for (uint8_t packed_byte : packed) {
+ dst[(*offset)++] = packed_byte;
+ }
+}
+
+// Based on section 6.1.1 of MicroType Express draft spec
+bool Read255UShort(Buffer* buf, unsigned int* value) {
+ static const int kWordCode = 253;
+ static const int kOneMoreByteCode2 = 254;
+ static const int kOneMoreByteCode1 = 255;
+ static const int kLowestUCode = 253;
+ uint8_t code = 0;
+ if (!buf->ReadU8(&code)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ if (code == kWordCode) {
+ uint16_t result = 0;
+ if (!buf->ReadU16(&result)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *value = result;
+ return true;
+ } else if (code == kOneMoreByteCode1) {
+ uint8_t result = 0;
+ if (!buf->ReadU8(&result)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *value = result + kLowestUCode;
+ return true;
+ } else if (code == kOneMoreByteCode2) {
+ uint8_t result = 0;
+ if (!buf->ReadU8(&result)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *value = result + kLowestUCode * 2;
+ return true;
+ } else {
+ *value = code;
+ return true;
+ }
+}
+
+bool ReadBase128(Buffer* buf, uint32_t* value) {
+ uint32_t result = 0;
+ for (size_t i = 0; i < 5; ++i) {
+ uint8_t code = 0;
+ if (!buf->ReadU8(&code)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // Leading zeros are invalid.
+ if (i == 0 && code == 0x80) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ // If any of the top seven bits are set then we're about to overflow.
+ if (result & 0xfe000000) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+ result = (result << 7) | (code & 0x7f);
+ if ((code & 0x80) == 0) {
+ *value = result;
+ return true;
+ }
+ }
+ // Make sure not to exceed the size bound
+ return FONT_COMPRESSION_FAILURE();
+}
+
+size_t Base128Size(size_t n) {
+ size_t size = 1;
+ for (; n >= 128; n >>= 7) ++size;
+ return size;
+}
+
+void StoreBase128(size_t len, size_t* offset, uint8_t* dst) {
+ size_t size = Base128Size(len);
+ for (size_t i = 0; i < size; ++i) {
+ int b = static_cast<int>((len >> (7 * (size - i - 1))) & 0x7f);
+ if (i < size - 1) {
+ b |= 0x80;
+ }
+ dst[(*offset)++] = b;
+ }
+}
+
+} // namespace woff2
+
diff --git a/dviware/dvisvgm/libs/woff2/src/variable_length.h b/dviware/dvisvgm/libs/woff2/src/variable_length.h
new file mode 100644
index 0000000000..2080106535
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/variable_length.h
@@ -0,0 +1,30 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */
+
+#ifndef WOFF2_VARIABLE_LENGTH_H_
+#define WOFF2_VARIABLE_LENGTH_H_
+
+#include <inttypes.h>
+#include <vector>
+#include "./buffer.h"
+
+namespace woff2 {
+
+size_t Size255UShort(uint16_t value);
+bool Read255UShort(Buffer* buf, unsigned int* value);
+void Write255UShort(std::vector<uint8_t>* out, int value);
+void Store255UShort(int val, size_t* offset, uint8_t* dst);
+
+size_t Base128Size(size_t n);
+bool ReadBase128(Buffer* buf, uint32_t* value);
+void StoreBase128(size_t len, size_t* offset, uint8_t* dst);
+
+} // namespace woff2
+
+#endif // WOFF2_VARIABLE_LENGTH_H_
+
diff --git a/dviware/dvisvgm/libs/woff2/src/woff2_common.cc b/dviware/dvisvgm/libs/woff2/src/woff2_common.cc
new file mode 100644
index 0000000000..fe0a3beda7
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/woff2_common.cc
@@ -0,0 +1,58 @@
+/* Copyright 2013 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Helpers common across multiple parts of woff2 */
+
+#include <algorithm>
+
+#include "./woff2_common.h"
+
+#include "./port.h"
+
+namespace woff2 {
+
+
+uint32_t ComputeULongSum(const uint8_t* buf, size_t size) {
+ uint32_t checksum = 0;
+ size_t aligned_size = size & ~3;
+ for (size_t i = 0; i < aligned_size; i += 4) {
+#if defined(WOFF_LITTLE_ENDIAN)
+ uint32_t v = *reinterpret_cast<const uint32_t*>(buf + i);
+ checksum += (((v & 0xFF) << 24) | ((v & 0xFF00) << 8) |
+ ((v & 0xFF0000) >> 8) | ((v & 0xFF000000) >> 24));
+#elif defined(WOFF_BIG_ENDIAN)
+ checksum += *reinterpret_cast<const uint32_t*>(buf + i);
+#else
+ checksum += (buf[i] << 24) | (buf[i + 1] << 16) |
+ (buf[i + 2] << 8) | buf[i + 3];
+#endif
+ }
+
+ // treat size not aligned on 4 as if it were padded to 4 with 0's
+ if (size != aligned_size) {
+ uint32_t v = 0;
+ for (size_t i = aligned_size; i < size; ++i) {
+ v |= buf[i] << (24 - 8 * (i & 3));
+ }
+ checksum += v;
+ }
+
+ return checksum;
+}
+
+size_t CollectionHeaderSize(uint32_t header_version, uint32_t num_fonts) {
+ size_t size = 0;
+ if (header_version == 0x00020000) {
+ size += 12; // ulDsig{Tag,Length,Offset}
+ }
+ if (header_version == 0x00010000 || header_version == 0x00020000) {
+ size += 12 // TTCTag, Version, numFonts
+ + 4 * num_fonts; // OffsetTable[numFonts]
+ }
+ return size;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/woff2_common.h b/dviware/dvisvgm/libs/woff2/src/woff2_common.h
new file mode 100644
index 0000000000..51fd4a7bf8
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/woff2_common.h
@@ -0,0 +1,64 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Common definition for WOFF2 encoding/decoding */
+
+#ifndef WOFF2_WOFF2_COMMON_H_
+#define WOFF2_WOFF2_COMMON_H_
+
+#include <stddef.h>
+#include <inttypes.h>
+
+#include <string>
+
+namespace woff2 {
+
+static const uint32_t kWoff2Signature = 0x774f4632; // "wOF2"
+
+// Leave the first byte open to store flag_byte
+const unsigned int kWoff2FlagsTransform = 1 << 8;
+
+// TrueType Collection ID string: 'ttcf'
+static const uint32_t kTtcFontFlavor = 0x74746366;
+
+static const size_t kSfntHeaderSize = 12;
+static const size_t kSfntEntrySize = 16;
+
+struct Point {
+ int x;
+ int y;
+ bool on_curve;
+};
+
+struct Table {
+ uint32_t tag;
+ uint32_t flags;
+ uint32_t src_offset;
+ uint32_t src_length;
+
+ uint32_t transform_length;
+
+ uint32_t dst_offset;
+ uint32_t dst_length;
+ const uint8_t* dst_data;
+
+ bool operator<(const Table& other) const {
+ return tag < other.tag;
+ }
+};
+
+
+// Size of the collection header. 0 if version indicates this isn't a
+// collection. Ref http://www.microsoft.com/typography/otspec/otff.htm,
+// True Type Collections
+size_t CollectionHeaderSize(uint32_t header_version, uint32_t num_fonts);
+
+// Compute checksum over size bytes of buf
+uint32_t ComputeULongSum(const uint8_t* buf, size_t size);
+
+} // namespace woff2
+
+#endif // WOFF2_WOFF2_COMMON_H_
diff --git a/dviware/dvisvgm/libs/woff2/src/woff2_enc.cc b/dviware/dvisvgm/libs/woff2/src/woff2_enc.cc
new file mode 100644
index 0000000000..9f32df90ee
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/woff2_enc.cc
@@ -0,0 +1,457 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Library for converting TTF format font files to their WOFF2 versions. */
+
+#include <woff2/encode.h>
+
+#include <stdlib.h>
+#include <complex>
+#include <cstring>
+#include <limits>
+#include <string>
+#include <vector>
+
+#include <brotli/encode.h>
+#include "./buffer.h"
+#include "./font.h"
+#include "./normalize.h"
+#include "./round.h"
+#include "./store_bytes.h"
+#include "./table_tags.h"
+#include "./transform.h"
+#include "./variable_length.h"
+#include "./woff2_common.h"
+
+namespace woff2 {
+
+namespace {
+
+
+using std::string;
+using std::vector;
+
+
+const size_t kWoff2HeaderSize = 48;
+const size_t kWoff2EntrySize = 20;
+
+bool Compress(const uint8_t* data, const size_t len, uint8_t* result,
+ uint32_t* result_len, BrotliEncoderMode mode, int quality) {
+ size_t compressed_len = *result_len;
+ if (BrotliEncoderCompress(quality, BROTLI_DEFAULT_WINDOW, mode, len, data,
+ &compressed_len, result) == 0) {
+ return false;
+ }
+ *result_len = compressed_len;
+ return true;
+}
+
+bool Woff2Compress(const uint8_t* data, const size_t len,
+ uint8_t* result, uint32_t* result_len,
+ int quality) {
+ return Compress(data, len, result, result_len,
+ BROTLI_MODE_FONT, quality);
+}
+
+bool TextCompress(const uint8_t* data, const size_t len,
+ uint8_t* result, uint32_t* result_len,
+ int quality) {
+ return Compress(data, len, result, result_len,
+ BROTLI_MODE_TEXT, quality);
+}
+
+int KnownTableIndex(uint32_t tag) {
+ for (int i = 0; i < 63; ++i) {
+ if (tag == kKnownTags[i]) return i;
+ }
+ return 63;
+}
+
+void StoreTableEntry(const Table& table, size_t* offset, uint8_t* dst) {
+ uint8_t flag_byte = (table.flags & 0xC0) | KnownTableIndex(table.tag);
+ dst[(*offset)++] = flag_byte;
+ // The index here is treated as a set of flag bytes because
+ // bits 6 and 7 of the byte are reserved for future use as flags.
+ // 0x3f or 63 means an arbitrary table tag.
+ if ((flag_byte & 0x3f) == 0x3f) {
+ StoreU32(table.tag, offset, dst);
+ }
+ StoreBase128(table.src_length, offset, dst);
+ if ((table.flags & kWoff2FlagsTransform) != 0) {
+ StoreBase128(table.transform_length, offset, dst);
+ }
+}
+
+size_t TableEntrySize(const Table& table) {
+ uint8_t flag_byte = KnownTableIndex(table.tag);
+ size_t size = ((flag_byte & 0x3f) != 0x3f) ? 1 : 5;
+ size += Base128Size(table.src_length);
+ if ((table.flags & kWoff2FlagsTransform) != 0) {
+ size += Base128Size(table.transform_length);
+ }
+ return size;
+}
+
+size_t ComputeWoff2Length(const FontCollection& font_collection,
+ const std::vector<Table>& tables,
+ std::map<std::pair<uint32_t, uint32_t>, uint16_t>
+ index_by_tag_offset,
+ size_t compressed_data_length,
+ size_t extended_metadata_length) {
+ size_t size = kWoff2HeaderSize;
+
+ for (const auto& table : tables) {
+ size += TableEntrySize(table);
+ }
+
+ // for collections only, collection tables
+ if (font_collection.flavor == kTtcFontFlavor) {
+ size += 4; // UInt32 Version of TTC Header
+ size += Size255UShort(font_collection.fonts.size()); // 255UInt16 numFonts
+
+ size += 4 * font_collection.fonts.size(); // UInt32 flavor for each
+
+ for (const auto& font : font_collection.fonts) {
+ size += Size255UShort(font.tables.size()); // 255UInt16 numTables
+ for (const auto& entry : font.tables) {
+ const Font::Table& table = entry.second;
+ // no collection entry for xform table
+ if (table.tag & 0x80808080) continue;
+
+ std::pair<uint32_t, uint32_t> tag_offset(table.tag, table.offset);
+ uint16_t table_index = index_by_tag_offset[tag_offset];
+ size += Size255UShort(table_index); // 255UInt16 index entry
+ }
+ }
+ }
+
+ // compressed data
+ size += compressed_data_length;
+ size = Round4(size);
+
+ size += extended_metadata_length;
+ return size;
+}
+
+size_t ComputeUncompressedLength(const Font& font) {
+ // sfnt header + offset table
+ size_t size = 12 + 16 * font.num_tables;
+ for (const auto& entry : font.tables) {
+ const Font::Table& table = entry.second;
+ if (table.tag & 0x80808080) continue; // xform tables don't stay
+ if (table.IsReused()) continue; // don't have to pay twice
+ size += Round4(table.length);
+ }
+ return size;
+}
+
+size_t ComputeUncompressedLength(const FontCollection& font_collection) {
+ if (font_collection.flavor != kTtcFontFlavor) {
+ return ComputeUncompressedLength(font_collection.fonts[0]);
+ }
+ size_t size = CollectionHeaderSize(font_collection.header_version,
+ font_collection.fonts.size());
+ for (const auto& font : font_collection.fonts) {
+ size += ComputeUncompressedLength(font);
+ }
+ return size;
+}
+
+size_t ComputeTotalTransformLength(const Font& font) {
+ size_t total = 0;
+ for (const auto& i : font.tables) {
+ const Font::Table& table = i.second;
+ if (table.IsReused()) {
+ continue;
+ }
+ if (table.tag & 0x80808080 || !font.FindTable(table.tag ^ 0x80808080)) {
+ // Count transformed tables and non-transformed tables that do not have
+ // transformed versions.
+ total += table.length;
+ }
+ }
+ return total;
+}
+
+} // namespace
+
+size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length) {
+ return MaxWOFF2CompressedSize(data, length, "");
+}
+
+size_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length,
+ const string& extended_metadata) {
+ // Except for the header size, which is 32 bytes larger in woff2 format,
+ // all other parts should be smaller (table header in short format,
+ // transformations and compression). Just to be sure, we will give some
+ // headroom anyway.
+ return length + 1024 + extended_metadata.length();
+}
+
+uint32_t CompressedBufferSize(uint32_t original_size) {
+ return 1.2 * original_size + 10240;
+}
+
+bool TransformFontCollection(FontCollection* font_collection) {
+ for (auto& font : font_collection->fonts) {
+ if (!TransformGlyfAndLocaTables(&font)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "glyf/loca transformation failed.\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ }
+
+ return true;
+}
+
+bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+ uint8_t *result, size_t *result_length) {
+ WOFF2Params params;
+ return ConvertTTFToWOFF2(data, length, result, result_length,
+ params);
+}
+
+bool ConvertTTFToWOFF2(const uint8_t *data, size_t length,
+ uint8_t *result, size_t *result_length,
+ const WOFF2Params& params) {
+ FontCollection font_collection;
+ if (!ReadFontCollection(data, length, &font_collection)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Parsing of the input font failed.\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (!NormalizeFontCollection(&font_collection)) {
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+ if (params.allow_transforms && !TransformFontCollection(&font_collection)) {
+ return FONT_COMPRESSION_FAILURE();
+ } else {
+ // glyf/loca use 11 to flag "not transformed"
+ for (auto& font : font_collection.fonts) {
+ Font::Table* glyf_table = font.FindTable(kGlyfTableTag);
+ Font::Table* loca_table = font.FindTable(kLocaTableTag);
+ if (glyf_table) {
+ glyf_table->flag_byte |= 0xc0;
+ }
+ if (loca_table) {
+ loca_table->flag_byte |= 0xc0;
+ }
+ }
+ }
+
+ // Although the compressed size of each table in the final woff2 file won't
+ // be larger than its transform_length, we have to allocate a large enough
+ // buffer for the compressor, since the compressor can potentially increase
+ // the size. If the compressor overflows this, it should return false and
+ // then this function will also return false.
+
+ size_t total_transform_length = 0;
+ for (const auto& font : font_collection.fonts) {
+ total_transform_length += ComputeTotalTransformLength(font);
+ }
+ size_t compression_buffer_size = CompressedBufferSize(total_transform_length);
+ std::vector<uint8_t> compression_buf(compression_buffer_size);
+ uint32_t total_compressed_length = compression_buffer_size;
+
+ // Collect all transformed data into one place in output order.
+ std::vector<uint8_t> transform_buf(total_transform_length);
+ size_t transform_offset = 0;
+ for (const auto& font : font_collection.fonts) {
+ for (const auto tag : font.OutputOrderedTags()) {
+ const Font::Table& original = font.tables.at(tag);
+ if (original.IsReused()) continue;
+ if (tag & 0x80808080) continue;
+ const Font::Table* table_to_store = font.FindTable(tag ^ 0x80808080);
+ if (table_to_store == NULL) table_to_store = &original;
+
+ StoreBytes(table_to_store->data, table_to_store->length,
+ &transform_offset, &transform_buf[0]);
+ }
+ }
+
+ // Compress all transformed data in one stream.
+ if (!Woff2Compress(transform_buf.data(), total_transform_length,
+ &compression_buf[0],
+ &total_compressed_length,
+ params.brotli_quality)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Compression of combined table failed.\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Compressed %zu to %u.\n", total_transform_length,
+ total_compressed_length);
+#endif
+
+ // Compress the extended metadata
+ // TODO(user): how does this apply to collections
+ uint32_t compressed_metadata_buf_length =
+ CompressedBufferSize(params.extended_metadata.length());
+ std::vector<uint8_t> compressed_metadata_buf(compressed_metadata_buf_length);
+
+ if (params.extended_metadata.length() > 0) {
+ if (!TextCompress((const uint8_t*)params.extended_metadata.data(),
+ params.extended_metadata.length(),
+ compressed_metadata_buf.data(),
+ &compressed_metadata_buf_length,
+ params.brotli_quality)) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Compression of extended metadata failed.\n");
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ } else {
+ compressed_metadata_buf_length = 0;
+ }
+
+ std::vector<Table> tables;
+ std::map<std::pair<uint32_t, uint32_t>, uint16_t> index_by_tag_offset;
+
+ for (const auto& font : font_collection.fonts) {
+
+ for (const auto tag : font.OutputOrderedTags()) {
+ const Font::Table& src_table = font.tables.at(tag);
+ if (src_table.IsReused()) {
+ continue;
+ }
+
+ std::pair<uint32_t, uint32_t> tag_offset(src_table.tag, src_table.offset);
+ if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) {
+ index_by_tag_offset[tag_offset] = tables.size();
+ } else {
+ return false;
+ }
+
+ Table table;
+ table.tag = src_table.tag;
+ table.flags = src_table.flag_byte;
+ table.src_length = src_table.length;
+ table.transform_length = src_table.length;
+ const Font::Table* transformed_table =
+ font.FindTable(src_table.tag ^ 0x80808080);
+ if (transformed_table != NULL) {
+ table.flags = transformed_table->flag_byte;
+ table.flags |= kWoff2FlagsTransform;
+ table.transform_length = transformed_table->length;
+ }
+ tables.push_back(table);
+ }
+ }
+
+ size_t woff2_length = ComputeWoff2Length(font_collection, tables,
+ index_by_tag_offset, total_compressed_length,
+ compressed_metadata_buf_length);
+ if (woff2_length > *result_length) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Result allocation was too small (%zd vs %zd bytes).\n",
+ *result_length, woff2_length);
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ *result_length = woff2_length;
+
+ size_t offset = 0;
+
+ // start of woff2 header (http://www.w3.org/TR/WOFF2/#woff20Header)
+ StoreU32(kWoff2Signature, &offset, result);
+ if (font_collection.flavor != kTtcFontFlavor) {
+ StoreU32(font_collection.fonts[0].flavor, &offset, result);
+ } else {
+ StoreU32(kTtcFontFlavor, &offset, result);
+ }
+ StoreU32(woff2_length, &offset, result);
+ Store16(tables.size(), &offset, result);
+ Store16(0, &offset, result); // reserved
+ // totalSfntSize
+ StoreU32(ComputeUncompressedLength(font_collection), &offset, result);
+ StoreU32(total_compressed_length, &offset, result); // totalCompressedSize
+
+ // Let's just all be v1.0
+ Store16(1, &offset, result); // majorVersion
+ Store16(0, &offset, result); // minorVersion
+ if (compressed_metadata_buf_length > 0) {
+ StoreU32(woff2_length - compressed_metadata_buf_length,
+ &offset, result); // metaOffset
+ StoreU32(compressed_metadata_buf_length, &offset, result); // metaLength
+ StoreU32(params.extended_metadata.length(),
+ &offset, result); // metaOrigLength
+ } else {
+ StoreU32(0, &offset, result); // metaOffset
+ StoreU32(0, &offset, result); // metaLength
+ StoreU32(0, &offset, result); // metaOrigLength
+ }
+ StoreU32(0, &offset, result); // privOffset
+ StoreU32(0, &offset, result); // privLength
+ // end of woff2 header
+
+ // table directory (http://www.w3.org/TR/WOFF2/#table_dir_format)
+ for (const auto& table : tables) {
+ StoreTableEntry(table, &offset, result);
+ }
+
+ // for collections only, collection table directory
+ if (font_collection.flavor == kTtcFontFlavor) {
+ StoreU32(font_collection.header_version, &offset, result);
+ Store255UShort(font_collection.fonts.size(), &offset, result);
+ for (const Font& font : font_collection.fonts) {
+
+ uint16_t num_tables = 0;
+ for (const auto& entry : font.tables) {
+ const Font::Table& table = entry.second;
+ if (table.tag & 0x80808080) continue; // don't write xform tables
+ num_tables++;
+ }
+ Store255UShort(num_tables, &offset, result);
+
+ StoreU32(font.flavor, &offset, result);
+ for (const auto& entry : font.tables) {
+ const Font::Table& table = entry.second;
+ if (table.tag & 0x80808080) continue; // don't write xform tables
+
+ // for reused tables, only the original has an updated offset
+ uint32_t table_offset =
+ table.IsReused() ? table.reuse_of->offset : table.offset;
+ std::pair<uint32_t, uint32_t> tag_offset(table.tag, table_offset);
+ if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) {
+#ifdef FONT_COMPRESSION_BIN
+fprintf(stderr, "Missing table index for offset 0x%08x\n",
+ table_offset);
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ uint16_t index = index_by_tag_offset[tag_offset];
+ Store255UShort(index, &offset, result);
+
+ }
+
+ }
+ }
+
+ // compressed data format (http://www.w3.org/TR/WOFF2/#table_format)
+
+ StoreBytes(&compression_buf[0], total_compressed_length, &offset, result);
+ offset = Round4(offset);
+
+ StoreBytes(compressed_metadata_buf.data(), compressed_metadata_buf_length,
+ &offset, result);
+
+ if (*result_length != offset) {
+#ifdef FONT_COMPRESSION_BIN
+ fprintf(stderr, "Mismatch between computed and actual length "
+ "(%zd vs %zd)\n", *result_length, offset);
+#endif
+ return FONT_COMPRESSION_FAILURE();
+ }
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/woff2/src/woff2_out.cc b/dviware/dvisvgm/libs/woff2/src/woff2_out.cc
new file mode 100644
index 0000000000..8ab32681f1
--- /dev/null
+++ b/dviware/dvisvgm/libs/woff2/src/woff2_out.cc
@@ -0,0 +1,67 @@
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* Output buffer for WOFF2 decompression. */
+
+#include <woff2/output.h>
+
+using std::string;
+
+namespace woff2 {
+
+WOFF2StringOut::WOFF2StringOut(string* buf)
+ : buf_(buf),
+ max_size_(kDefaultMaxSize),
+ offset_(0) {}
+
+bool WOFF2StringOut::Write(const void *buf, size_t n) {
+ return Write(buf, offset_, n);
+}
+
+bool WOFF2StringOut::Write(const void *buf, size_t offset, size_t n) {
+ if (offset > max_size_ || n > max_size_ - offset) {
+ return false;
+ }
+ if (offset == buf_->size()) {
+ buf_->append(static_cast<const char*>(buf), n);
+ } else {
+ if (offset + n > buf_->size()) {
+ buf_->append(offset + n - buf_->size(), 0);
+ }
+ buf_->replace(offset, n, static_cast<const char*>(buf), n);
+ }
+ offset_ = std::max(offset_, offset + n);
+
+ return true;
+}
+
+void WOFF2StringOut::SetMaxSize(size_t max_size) {
+ max_size_ = max_size;
+ if (offset_ > max_size_) {
+ offset_ = max_size_;
+ }
+}
+
+WOFF2MemoryOut::WOFF2MemoryOut(uint8_t* buf, size_t buf_size)
+ : buf_(buf),
+ buf_size_(buf_size),
+ offset_(0) {}
+
+bool WOFF2MemoryOut::Write(const void *buf, size_t n) {
+ return Write(buf, offset_, n);
+}
+
+bool WOFF2MemoryOut::Write(const void *buf, size_t offset, size_t n) {
+ if (offset > buf_size_ || n > buf_size_ - offset) {
+ return false;
+ }
+ std::memcpy(buf_ + offset, buf, n);
+ offset_ = std::max(offset_, offset + n);
+
+ return true;
+}
+
+} // namespace woff2
diff --git a/dviware/dvisvgm/libs/xxHash/Makefile.am b/dviware/dvisvgm/libs/xxHash/Makefile.am
new file mode 100644
index 0000000000..e40f8a066e
--- /dev/null
+++ b/dviware/dvisvgm/libs/xxHash/Makefile.am
@@ -0,0 +1,13 @@
+if !HAVE_XXHASH
+noinst_LIBRARIES = libxxhash.a
+
+libxxhash_a_SOURCES = xxhash.c xxhash.h
+AM_CXXFLAGS = -Wall
+
+xxhash.c: xxhash.h
+
+@CODE_COVERAGE_RULES@
+endif
+
+CLEANFILES = *.gcda *.gcno
+
diff --git a/dviware/dvisvgm/libs/xxHash/Makefile.in b/dviware/dvisvgm/libs/xxHash/Makefile.in
new file mode 100644
index 0000000000..27c6541529
--- /dev/null
+++ b/dviware/dvisvgm/libs/xxHash/Makefile.in
@@ -0,0 +1,649 @@
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = libs/xxHash
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+ $(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libxxhash_a_AR = $(AR) $(ARFLAGS)
+libxxhash_a_LIBADD =
+am__libxxhash_a_SOURCES_DIST = xxhash.c xxhash.h
+@HAVE_XXHASH_FALSE@am_libxxhash_a_OBJECTS = xxhash.$(OBJEXT)
+libxxhash_a_OBJECTS = $(am_libxxhash_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/xxhash.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libxxhash_a_SOURCES)
+DIST_SOURCES = $(am__libxxhash_a_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_CPPFLAGS = @AM_CPPFLAGS@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AM_LDFLAGS = @AM_LDFLAGS@
+AR = @AR@
+ASCIIDOC = @ASCIIDOC@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BROTLI_CFLAGS = @BROTLI_CFLAGS@
+BROTLI_LIBS = @BROTLI_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATE = @DATE@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
+FREETYPE_LIBS = @FREETYPE_LIBS@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+HAVE_CXX11 = @HAVE_CXX11@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSE_CFLAGS = @KPSE_CFLAGS@
+KPSE_LIBS = @KPSE_LIBS@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCRYPTO_CFLAGS = @LIBCRYPTO_CFLAGS@
+LIBCRYPTO_LIBS = @LIBCRYPTO_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TTFAUTOHINT_CFLAGS = @TTFAUTOHINT_CFLAGS@
+TTFAUTOHINT_LIBS = @TTFAUTOHINT_LIBS@
+VERSION = @VERSION@
+WOFF2_CFLAGS = @WOFF2_CFLAGS@
+WOFF2_LIBS = @WOFF2_LIBS@
+XMLTO = @XMLTO@
+XSLTPROC = @XSLTPROC@
+ZLIB_CFLAGS = @ZLIB_CFLAGS@
+ZLIB_LIBS = @ZLIB_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+dvisvgm_srcdir = @dvisvgm_srcdir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@HAVE_XXHASH_FALSE@noinst_LIBRARIES = libxxhash.a
+@HAVE_XXHASH_FALSE@libxxhash_a_SOURCES = xxhash.c xxhash.h
+@HAVE_XXHASH_FALSE@AM_CXXFLAGS = -Wall
+CLEANFILES = *.gcda *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libs/xxHash/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign libs/xxHash/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libxxhash.a: $(libxxhash_a_OBJECTS) $(libxxhash_a_DEPENDENCIES) $(EXTRA_libxxhash_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libxxhash.a
+ $(AM_V_AR)$(libxxhash_a_AR) libxxhash.a $(libxxhash_a_OBJECTS) $(libxxhash_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libxxhash.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xxhash.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/xxhash.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/xxhash.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+@HAVE_XXHASH_FALSE@xxhash.c: xxhash.h
+
+@HAVE_XXHASH_FALSE@@CODE_COVERAGE_RULES@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/dviware/dvisvgm/libs/xxHash/xxhash.c b/dviware/dvisvgm/libs/xxHash/xxhash.c
new file mode 100644
index 0000000000..eb881ff3b1
--- /dev/null
+++ b/dviware/dvisvgm/libs/xxHash/xxhash.c
@@ -0,0 +1,1010 @@
+/*
+* xxHash - Fast Hash algorithm
+* Copyright (C) 2012-2016, Yann Collet
+*
+* BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following disclaimer
+* in the documentation and/or other materials provided with the
+* distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* You can contact the author at :
+* - xxHash homepage: http://www.xxhash.com
+* - xxHash source repository : https://github.com/Cyan4973/xxHash
+*/
+
+
+/* *************************************
+* Tuning parameters
+***************************************/
+/*!XXH_FORCE_MEMORY_ACCESS :
+ * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
+ * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal.
+ * The below switch allow to select different access method for improved performance.
+ * Method 0 (default) : use `memcpy()`. Safe and portable.
+ * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable).
+ * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`.
+ * Method 2 : direct access. This method doesn't depend on compiler but violate C standard.
+ * It can generate buggy code on targets which do not support unaligned memory accesses.
+ * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6)
+ * See http://stackoverflow.com/a/32095106/646947 for details.
+ * Prefer these methods in priority order (0 > 1 > 2)
+ */
+#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
+# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
+# define XXH_FORCE_MEMORY_ACCESS 2
+# elif (defined(__INTEL_COMPILER) && !defined(_WIN32)) || \
+ (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
+ || defined(__ARM_ARCH_7S__) ))
+# define XXH_FORCE_MEMORY_ACCESS 1
+# endif
+#endif
+
+/*!XXH_ACCEPT_NULL_INPUT_POINTER :
+ * If input pointer is NULL, xxHash default behavior is to dereference it, triggering a segfault.
+ * When this macro is enabled, xxHash actively checks input for null pointer.
+ * It it is, result for null input pointers is the same as a null-length input.
+ */
+#ifndef XXH_ACCEPT_NULL_INPUT_POINTER /* can be defined externally */
+# define XXH_ACCEPT_NULL_INPUT_POINTER 0
+#endif
+
+/*!XXH_FORCE_ALIGN_CHECK :
+ * This is a minor performance trick, only useful with lots of very small keys.
+ * It means : check for aligned/unaligned input.
+ * The check costs one initial branch per hash;
+ * set it to 0 when the input is guaranteed to be aligned,
+ * or when alignment doesn't matter for performance.
+ */
+#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
+# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
+# define XXH_FORCE_ALIGN_CHECK 0
+# else
+# define XXH_FORCE_ALIGN_CHECK 1
+# endif
+#endif
+
+
+/* *************************************
+* Includes & Memory related functions
+***************************************/
+/*! Modify the local functions below should you wish to use some other memory routines
+* for malloc(), free() */
+#include <stdlib.h>
+static void* XXH_malloc(size_t s) { return malloc(s); }
+static void XXH_free (void* p) { free(p); }
+/*! and for memcpy() */
+#include <string.h>
+static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); }
+
+#include <assert.h> /* assert */
+
+#define XXH_STATIC_LINKING_ONLY
+#include "xxhash.h"
+
+
+/* *************************************
+* Compiler Specific Options
+***************************************/
+#ifdef _MSC_VER /* Visual Studio */
+# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
+# define XXH_FORCE_INLINE static __forceinline
+#else
+# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
+# ifdef __GNUC__
+# define XXH_FORCE_INLINE static inline __attribute__((always_inline))
+# else
+# define XXH_FORCE_INLINE static inline
+# endif
+# else
+# define XXH_FORCE_INLINE static
+# endif /* __STDC_VERSION__ */
+#endif
+
+
+/* *************************************
+* Basic Types
+***************************************/
+#ifndef MEM_MODULE
+# if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+ typedef uint8_t BYTE;
+ typedef uint16_t U16;
+ typedef uint32_t U32;
+# else
+ typedef unsigned char BYTE;
+ typedef unsigned short U16;
+ typedef unsigned int U32;
+# endif
+#endif
+
+
+/* === Memory access === */
+
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
+
+/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
+static U32 XXH_read32(const void* memPtr) { return *(const U32*) memPtr; }
+
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
+
+/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
+/* currently only defined for gcc and icc */
+typedef union { U32 u32; } __attribute__((packed)) unalign;
+static U32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
+
+#else
+
+/* portable and safe solution. Generally efficient.
+ * see : http://stackoverflow.com/a/32095106/646947
+ */
+static U32 XXH_read32(const void* memPtr)
+{
+ U32 val;
+ memcpy(&val, memPtr, sizeof(val));
+ return val;
+}
+
+#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
+
+
+/* === Endianess === */
+typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
+
+/* XXH_CPU_LITTLE_ENDIAN can be defined externally, for example on the compiler command line */
+#ifndef XXH_CPU_LITTLE_ENDIAN
+static int XXH_isLittleEndian(void)
+{
+ const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */
+ return one.c[0];
+}
+# define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian()
+#endif
+
+
+
+
+/* ****************************************
+* Compiler-specific Functions and Macros
+******************************************/
+#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+
+/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */
+#if defined(_MSC_VER)
+# define XXH_rotl32(x,r) _rotl(x,r)
+# define XXH_rotl64(x,r) _rotl64(x,r)
+#else
+# define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+# define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))
+#endif
+
+#if defined(_MSC_VER) /* Visual Studio */
+# define XXH_swap32 _byteswap_ulong
+#elif XXH_GCC_VERSION >= 403
+# define XXH_swap32 __builtin_bswap32
+#else
+static U32 XXH_swap32 (U32 x)
+{
+ return ((x << 24) & 0xff000000 ) |
+ ((x << 8) & 0x00ff0000 ) |
+ ((x >> 8) & 0x0000ff00 ) |
+ ((x >> 24) & 0x000000ff );
+}
+#endif
+
+
+/* ***************************
+* Memory reads
+*****************************/
+typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
+
+XXH_FORCE_INLINE U32 XXH_readLE32(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
+}
+
+static U32 XXH_readBE32(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
+}
+
+XXH_FORCE_INLINE U32
+XXH_readLE32_align(const void* ptr, XXH_alignment align)
+{
+ if (align==XXH_unaligned) {
+ return XXH_readLE32(ptr);
+ } else {
+ return XXH_CPU_LITTLE_ENDIAN ? *(const U32*)ptr : XXH_swap32(*(const U32*)ptr);
+ }
+}
+
+
+/* *************************************
+* Macros
+***************************************/
+#define XXH_STATIC_ASSERT(c) { enum { XXH_sa = 1/(int)(!!(c)) }; } /* use after variable declarations */
+XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }
+
+
+/* *******************************************************************
+* 32-bit hash functions
+*********************************************************************/
+static const U32 PRIME32_1 = 2654435761U; /* 0b10011110001101110111100110110001 */
+static const U32 PRIME32_2 = 2246822519U; /* 0b10000101111010111100101001110111 */
+static const U32 PRIME32_3 = 3266489917U; /* 0b11000010101100101010111000111101 */
+static const U32 PRIME32_4 = 668265263U; /* 0b00100111110101001110101100101111 */
+static const U32 PRIME32_5 = 374761393U; /* 0b00010110010101100110011110110001 */
+
+static U32 XXH32_round(U32 acc, U32 input)
+{
+ acc += input * PRIME32_2;
+ acc = XXH_rotl32(acc, 13);
+ acc *= PRIME32_1;
+#if defined(__GNUC__) && defined(__SSE4_1__) && !defined(XXH_ENABLE_AUTOVECTORIZE)
+ /* UGLY HACK:
+ * This inline assembly hack forces acc into a normal register. This is the
+ * only thing that prevents GCC and Clang from autovectorizing the XXH32 loop
+ * (pragmas and attributes don't work for some resason) without globally
+ * disabling SSE4.1.
+ *
+ * The reason we want to avoid vectorization is because despite working on
+ * 4 integers at a time, there are multiple factors slowing XXH32 down on
+ * SSE4:
+ * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on newer chips!)
+ * making it slightly slower to multiply four integers at once compared to four
+ * integers independently. Even when pmulld was fastest, Sandy/Ivy Bridge, it is
+ * still not worth it to go into SSE just to multiply unless doing a long operation.
+ *
+ * - Four instructions are required to rotate,
+ * movqda tmp, v // not required with VEX encoding
+ * pslld tmp, 13 // tmp <<= 13
+ * psrld v, 19 // x >>= 19
+ * por v, tmp // x |= tmp
+ * compared to one for scalar:
+ * roll v, 13 // reliably fast across the board
+ * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason
+ *
+ * - Instruction level parallelism is actually more beneficial here because the
+ * SIMD actually serializes this operation: While v1 is rotating, v2 can load data,
+ * while v3 can multiply. SSE forces them to operate together.
+ *
+ * How this hack works:
+ * __asm__("" // Declare an assembly block but don't declare any instructions
+ * : // However, as an Input/Output Operand,
+ * "+r" // constrain a read/write operand (+) as a general purpose register (r).
+ * (acc) // and set acc as the operand
+ * );
+ *
+ * Because of the 'r', the compiler has promised that seed will be in a
+ * general purpose register and the '+' says that it will be 'read/write',
+ * so it has to assume it has changed. It is like volatile without all the
+ * loads and stores.
+ *
+ * Since the argument has to be in a normal register (not an SSE register),
+ * each time XXH32_round is called, it is impossible to vectorize. */
+ __asm__("" : "+r" (acc));
+#endif
+ return acc;
+}
+
+/* mix all bits */
+static U32 XXH32_avalanche(U32 h32)
+{
+ h32 ^= h32 >> 15;
+ h32 *= PRIME32_2;
+ h32 ^= h32 >> 13;
+ h32 *= PRIME32_3;
+ h32 ^= h32 >> 16;
+ return(h32);
+}
+
+#define XXH_get32bits(p) XXH_readLE32_align(p, align)
+
+static U32
+XXH32_finalize(U32 h32, const void* ptr, size_t len, XXH_alignment align)
+
+{
+ const BYTE* p = (const BYTE*)ptr;
+
+#define PROCESS1 \
+ h32 += (*p++) * PRIME32_5; \
+ h32 = XXH_rotl32(h32, 11) * PRIME32_1 ;
+
+#define PROCESS4 \
+ h32 += XXH_get32bits(p) * PRIME32_3; \
+ p+=4; \
+ h32 = XXH_rotl32(h32, 17) * PRIME32_4 ;
+
+ switch(len&15) /* or switch(bEnd - p) */
+ {
+ case 12: PROCESS4;
+ /* fallthrough */
+ case 8: PROCESS4;
+ /* fallthrough */
+ case 4: PROCESS4;
+ return XXH32_avalanche(h32);
+
+ case 13: PROCESS4;
+ /* fallthrough */
+ case 9: PROCESS4;
+ /* fallthrough */
+ case 5: PROCESS4;
+ PROCESS1;
+ return XXH32_avalanche(h32);
+
+ case 14: PROCESS4;
+ /* fallthrough */
+ case 10: PROCESS4;
+ /* fallthrough */
+ case 6: PROCESS4;
+ PROCESS1;
+ PROCESS1;
+ return XXH32_avalanche(h32);
+
+ case 15: PROCESS4;
+ /* fallthrough */
+ case 11: PROCESS4;
+ /* fallthrough */
+ case 7: PROCESS4;
+ /* fallthrough */
+ case 3: PROCESS1;
+ /* fallthrough */
+ case 2: PROCESS1;
+ /* fallthrough */
+ case 1: PROCESS1;
+ /* fallthrough */
+ case 0: return XXH32_avalanche(h32);
+ }
+ assert(0);
+ return h32; /* reaching this point is deemed impossible */
+}
+
+XXH_FORCE_INLINE U32
+XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_alignment align)
+{
+ const BYTE* p = (const BYTE*)input;
+ const BYTE* bEnd = p + len;
+ U32 h32;
+
+#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
+ if (p==NULL) {
+ len=0;
+ bEnd=p=(const BYTE*)(size_t)16;
+ }
+#endif
+
+ if (len>=16) {
+ const BYTE* const limit = bEnd - 15;
+ U32 v1 = seed + PRIME32_1 + PRIME32_2;
+ U32 v2 = seed + PRIME32_2;
+ U32 v3 = seed + 0;
+ U32 v4 = seed - PRIME32_1;
+
+ do {
+ v1 = XXH32_round(v1, XXH_get32bits(p)); p+=4;
+ v2 = XXH32_round(v2, XXH_get32bits(p)); p+=4;
+ v3 = XXH32_round(v3, XXH_get32bits(p)); p+=4;
+ v4 = XXH32_round(v4, XXH_get32bits(p)); p+=4;
+ } while (p < limit);
+
+ h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7)
+ + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
+ } else {
+ h32 = seed + PRIME32_5;
+ }
+
+ h32 += (U32)len;
+
+ return XXH32_finalize(h32, p, len&15, align);
+}
+
+
+XXH_PUBLIC_API unsigned int XXH32 (const void* input, size_t len, unsigned int seed)
+{
+#if 0
+ /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
+ XXH32_state_t state;
+ XXH32_reset(&state, seed);
+ XXH32_update(&state, input, len);
+ return XXH32_digest(&state);
+
+#else
+
+ if (XXH_FORCE_ALIGN_CHECK) {
+ if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */
+ return XXH32_endian_align(input, len, seed, XXH_aligned);
+ } }
+
+ return XXH32_endian_align(input, len, seed, XXH_unaligned);
+#endif
+}
+
+
+
+/*====== Hash streaming ======*/
+
+XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
+{
+ return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));
+}
+XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState)
+{
+ memcpy(dstState, srcState, sizeof(*dstState));
+}
+
+XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed)
+{
+ XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
+ memset(&state, 0, sizeof(state));
+ state.v1 = seed + PRIME32_1 + PRIME32_2;
+ state.v2 = seed + PRIME32_2;
+ state.v3 = seed + 0;
+ state.v4 = seed - PRIME32_1;
+ /* do not write into reserved, planned to be removed in a future version */
+ memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved));
+ return XXH_OK;
+}
+
+
+XXH_PUBLIC_API XXH_errorcode
+XXH32_update(XXH32_state_t* state, const void* input, size_t len)
+{
+ if (input==NULL)
+#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
+ return XXH_OK;
+#else
+ return XXH_ERROR;
+#endif
+
+ { const BYTE* p = (const BYTE*)input;
+ const BYTE* const bEnd = p + len;
+
+ state->total_len_32 += (XXH32_hash_t)len;
+ state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16));
+
+ if (state->memsize + len < 16) { /* fill in tmp buffer */
+ XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len);
+ state->memsize += (XXH32_hash_t)len;
+ return XXH_OK;
+ }
+
+ if (state->memsize) { /* some data left from previous update */
+ XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize);
+ { const U32* p32 = state->mem32;
+ state->v1 = XXH32_round(state->v1, XXH_readLE32(p32)); p32++;
+ state->v2 = XXH32_round(state->v2, XXH_readLE32(p32)); p32++;
+ state->v3 = XXH32_round(state->v3, XXH_readLE32(p32)); p32++;
+ state->v4 = XXH32_round(state->v4, XXH_readLE32(p32));
+ }
+ p += 16-state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p <= bEnd-16) {
+ const BYTE* const limit = bEnd - 16;
+ U32 v1 = state->v1;
+ U32 v2 = state->v2;
+ U32 v3 = state->v3;
+ U32 v4 = state->v4;
+
+ do {
+ v1 = XXH32_round(v1, XXH_readLE32(p)); p+=4;
+ v2 = XXH32_round(v2, XXH_readLE32(p)); p+=4;
+ v3 = XXH32_round(v3, XXH_readLE32(p)); p+=4;
+ v4 = XXH32_round(v4, XXH_readLE32(p)); p+=4;
+ } while (p<=limit);
+
+ state->v1 = v1;
+ state->v2 = v2;
+ state->v3 = v3;
+ state->v4 = v4;
+ }
+
+ if (p < bEnd) {
+ XXH_memcpy(state->mem32, p, (size_t)(bEnd-p));
+ state->memsize = (unsigned)(bEnd-p);
+ }
+ }
+
+ return XXH_OK;
+}
+
+
+XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state)
+{
+ U32 h32;
+
+ if (state->large_len) {
+ h32 = XXH_rotl32(state->v1, 1)
+ + XXH_rotl32(state->v2, 7)
+ + XXH_rotl32(state->v3, 12)
+ + XXH_rotl32(state->v4, 18);
+ } else {
+ h32 = state->v3 /* == seed */ + PRIME32_5;
+ }
+
+ h32 += state->total_len_32;
+
+ return XXH32_finalize(h32, state->mem32, state->memsize, XXH_aligned);
+}
+
+
+/*====== Canonical representation ======*/
+
+/*! Default XXH result types are basic unsigned 32 and 64 bits.
+* The canonical representation follows human-readable write convention, aka big-endian (large digits first).
+* These functions allow transformation of hash result into and from its canonical format.
+* This way, hash values can be written into a file or buffer, remaining comparable across different systems.
+*/
+
+XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t));
+ if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
+ memcpy(dst, &hash, sizeof(*dst));
+}
+
+XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)
+{
+ return XXH_readBE32(src);
+}
+
+
+#ifndef XXH_NO_LONG_LONG
+
+/* *******************************************************************
+* 64-bit hash functions
+*********************************************************************/
+
+/*====== Memory access ======*/
+
+#ifndef MEM_MODULE
+# define MEM_MODULE
+# if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+ typedef uint64_t U64;
+# else
+ /* if compiler doesn't support unsigned long long, replace by another 64-bit type */
+ typedef unsigned long long U64;
+# endif
+#endif
+
+
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
+
+/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
+static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; }
+
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
+
+/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
+/* currently only defined for gcc and icc */
+typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign64;
+static U64 XXH_read64(const void* ptr) { return ((const unalign64*)ptr)->u64; }
+
+#else
+
+/* portable and safe solution. Generally efficient.
+ * see : http://stackoverflow.com/a/32095106/646947
+ */
+
+static U64 XXH_read64(const void* memPtr)
+{
+ U64 val;
+ memcpy(&val, memPtr, sizeof(val));
+ return val;
+}
+
+#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
+
+#if defined(_MSC_VER) /* Visual Studio */
+# define XXH_swap64 _byteswap_uint64
+#elif XXH_GCC_VERSION >= 403
+# define XXH_swap64 __builtin_bswap64
+#else
+static U64 XXH_swap64 (U64 x)
+{
+ return ((x << 56) & 0xff00000000000000ULL) |
+ ((x << 40) & 0x00ff000000000000ULL) |
+ ((x << 24) & 0x0000ff0000000000ULL) |
+ ((x << 8) & 0x000000ff00000000ULL) |
+ ((x >> 8) & 0x00000000ff000000ULL) |
+ ((x >> 24) & 0x0000000000ff0000ULL) |
+ ((x >> 40) & 0x000000000000ff00ULL) |
+ ((x >> 56) & 0x00000000000000ffULL);
+}
+#endif
+
+XXH_FORCE_INLINE U64 XXH_readLE64(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
+}
+
+static U64 XXH_readBE64(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);
+}
+
+XXH_FORCE_INLINE U64
+XXH_readLE64_align(const void* ptr, XXH_alignment align)
+{
+ if (align==XXH_unaligned)
+ return XXH_readLE64(ptr);
+ else
+ return XXH_CPU_LITTLE_ENDIAN ? *(const U64*)ptr : XXH_swap64(*(const U64*)ptr);
+}
+
+
+/*====== xxh64 ======*/
+
+static const U64 PRIME64_1 = 11400714785074694791ULL; /* 0b1001111000110111011110011011000110000101111010111100101010000111 */
+static const U64 PRIME64_2 = 14029467366897019727ULL; /* 0b1100001010110010101011100011110100100111110101001110101101001111 */
+static const U64 PRIME64_3 = 1609587929392839161ULL; /* 0b0001011001010110011001111011000110011110001101110111100111111001 */
+static const U64 PRIME64_4 = 9650029242287828579ULL; /* 0b1000010111101011110010100111011111000010101100101010111001100011 */
+static const U64 PRIME64_5 = 2870177450012600261ULL; /* 0b0010011111010100111010110010111100010110010101100110011111000101 */
+
+static U64 XXH64_round(U64 acc, U64 input)
+{
+ acc += input * PRIME64_2;
+ acc = XXH_rotl64(acc, 31);
+ acc *= PRIME64_1;
+ return acc;
+}
+
+static U64 XXH64_mergeRound(U64 acc, U64 val)
+{
+ val = XXH64_round(0, val);
+ acc ^= val;
+ acc = acc * PRIME64_1 + PRIME64_4;
+ return acc;
+}
+
+static U64 XXH64_avalanche(U64 h64)
+{
+ h64 ^= h64 >> 33;
+ h64 *= PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= PRIME64_3;
+ h64 ^= h64 >> 32;
+ return h64;
+}
+
+
+#define XXH_get64bits(p) XXH_readLE64_align(p, align)
+
+static U64
+XXH64_finalize(U64 h64, const void* ptr, size_t len, XXH_alignment align)
+{
+ const BYTE* p = (const BYTE*)ptr;
+
+#define PROCESS1_64 \
+ h64 ^= (*p++) * PRIME64_5; \
+ h64 = XXH_rotl64(h64, 11) * PRIME64_1;
+
+#define PROCESS4_64 \
+ h64 ^= (U64)(XXH_get32bits(p)) * PRIME64_1; \
+ p+=4; \
+ h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
+
+#define PROCESS8_64 { \
+ U64 const k1 = XXH64_round(0, XXH_get64bits(p)); \
+ p+=8; \
+ h64 ^= k1; \
+ h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4; \
+}
+
+ switch(len&31) {
+ case 24: PROCESS8_64;
+ /* fallthrough */
+ case 16: PROCESS8_64;
+ /* fallthrough */
+ case 8: PROCESS8_64;
+ return XXH64_avalanche(h64);
+
+ case 28: PROCESS8_64;
+ /* fallthrough */
+ case 20: PROCESS8_64;
+ /* fallthrough */
+ case 12: PROCESS8_64;
+ /* fallthrough */
+ case 4: PROCESS4_64;
+ return XXH64_avalanche(h64);
+
+ case 25: PROCESS8_64;
+ /* fallthrough */
+ case 17: PROCESS8_64;
+ /* fallthrough */
+ case 9: PROCESS8_64;
+ PROCESS1_64;
+ return XXH64_avalanche(h64);
+
+ case 29: PROCESS8_64;
+ /* fallthrough */
+ case 21: PROCESS8_64;
+ /* fallthrough */
+ case 13: PROCESS8_64;
+ /* fallthrough */
+ case 5: PROCESS4_64;
+ PROCESS1_64;
+ return XXH64_avalanche(h64);
+
+ case 26: PROCESS8_64;
+ /* fallthrough */
+ case 18: PROCESS8_64;
+ /* fallthrough */
+ case 10: PROCESS8_64;
+ PROCESS1_64;
+ PROCESS1_64;
+ return XXH64_avalanche(h64);
+
+ case 30: PROCESS8_64;
+ /* fallthrough */
+ case 22: PROCESS8_64;
+ /* fallthrough */
+ case 14: PROCESS8_64;
+ /* fallthrough */
+ case 6: PROCESS4_64;
+ PROCESS1_64;
+ PROCESS1_64;
+ return XXH64_avalanche(h64);
+
+ case 27: PROCESS8_64;
+ /* fallthrough */
+ case 19: PROCESS8_64;
+ /* fallthrough */
+ case 11: PROCESS8_64;
+ PROCESS1_64;
+ PROCESS1_64;
+ PROCESS1_64;
+ return XXH64_avalanche(h64);
+
+ case 31: PROCESS8_64;
+ /* fallthrough */
+ case 23: PROCESS8_64;
+ /* fallthrough */
+ case 15: PROCESS8_64;
+ /* fallthrough */
+ case 7: PROCESS4_64;
+ /* fallthrough */
+ case 3: PROCESS1_64;
+ /* fallthrough */
+ case 2: PROCESS1_64;
+ /* fallthrough */
+ case 1: PROCESS1_64;
+ /* fallthrough */
+ case 0: return XXH64_avalanche(h64);
+ }
+
+ /* impossible to reach */
+ assert(0);
+ return 0; /* unreachable, but some compilers complain without it */
+}
+
+XXH_FORCE_INLINE U64
+XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_alignment align)
+{
+ const BYTE* p = (const BYTE*)input;
+ const BYTE* bEnd = p + len;
+ U64 h64;
+
+#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
+ if (p==NULL) {
+ len=0;
+ bEnd=p=(const BYTE*)(size_t)32;
+ }
+#endif
+
+ if (len>=32) {
+ const BYTE* const limit = bEnd - 32;
+ U64 v1 = seed + PRIME64_1 + PRIME64_2;
+ U64 v2 = seed + PRIME64_2;
+ U64 v3 = seed + 0;
+ U64 v4 = seed - PRIME64_1;
+
+ do {
+ v1 = XXH64_round(v1, XXH_get64bits(p)); p+=8;
+ v2 = XXH64_round(v2, XXH_get64bits(p)); p+=8;
+ v3 = XXH64_round(v3, XXH_get64bits(p)); p+=8;
+ v4 = XXH64_round(v4, XXH_get64bits(p)); p+=8;
+ } while (p<=limit);
+
+ h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
+ h64 = XXH64_mergeRound(h64, v1);
+ h64 = XXH64_mergeRound(h64, v2);
+ h64 = XXH64_mergeRound(h64, v3);
+ h64 = XXH64_mergeRound(h64, v4);
+
+ } else {
+ h64 = seed + PRIME64_5;
+ }
+
+ h64 += (U64) len;
+
+ return XXH64_finalize(h64, p, len, align);
+}
+
+
+XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed)
+{
+#if 0
+ /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
+ XXH64_state_t state;
+ XXH64_reset(&state, seed);
+ XXH64_update(&state, input, len);
+ return XXH64_digest(&state);
+
+#else
+
+ if (XXH_FORCE_ALIGN_CHECK) {
+ if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */
+ return XXH64_endian_align(input, len, seed, XXH_aligned);
+ } }
+
+ return XXH64_endian_align(input, len, seed, XXH_unaligned);
+
+#endif
+}
+
+/*====== Hash Streaming ======*/
+
+XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
+{
+ return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));
+}
+XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState)
+{
+ memcpy(dstState, srcState, sizeof(*dstState));
+}
+
+XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long long seed)
+{
+ XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
+ memset(&state, 0, sizeof(state));
+ state.v1 = seed + PRIME64_1 + PRIME64_2;
+ state.v2 = seed + PRIME64_2;
+ state.v3 = seed + 0;
+ state.v4 = seed - PRIME64_1;
+ /* do not write into reserved, planned to be removed in a future version */
+ memcpy(statePtr, &state, sizeof(state) - sizeof(state.reserved));
+ return XXH_OK;
+}
+
+XXH_PUBLIC_API XXH_errorcode
+XXH64_update (XXH64_state_t* state, const void* input, size_t len)
+{
+ if (input==NULL)
+#if defined(XXH_ACCEPT_NULL_INPUT_POINTER) && (XXH_ACCEPT_NULL_INPUT_POINTER>=1)
+ return XXH_OK;
+#else
+ return XXH_ERROR;
+#endif
+
+ { const BYTE* p = (const BYTE*)input;
+ const BYTE* const bEnd = p + len;
+
+ state->total_len += len;
+
+ if (state->memsize + len < 32) { /* fill in tmp buffer */
+ XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len);
+ state->memsize += (U32)len;
+ return XXH_OK;
+ }
+
+ if (state->memsize) { /* tmp buffer is full */
+ XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, 32-state->memsize);
+ state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0));
+ state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1));
+ state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2));
+ state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3));
+ p += 32-state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p+32 <= bEnd) {
+ const BYTE* const limit = bEnd - 32;
+ U64 v1 = state->v1;
+ U64 v2 = state->v2;
+ U64 v3 = state->v3;
+ U64 v4 = state->v4;
+
+ do {
+ v1 = XXH64_round(v1, XXH_readLE64(p)); p+=8;
+ v2 = XXH64_round(v2, XXH_readLE64(p)); p+=8;
+ v3 = XXH64_round(v3, XXH_readLE64(p)); p+=8;
+ v4 = XXH64_round(v4, XXH_readLE64(p)); p+=8;
+ } while (p<=limit);
+
+ state->v1 = v1;
+ state->v2 = v2;
+ state->v3 = v3;
+ state->v4 = v4;
+ }
+
+ if (p < bEnd) {
+ XXH_memcpy(state->mem64, p, (size_t)(bEnd-p));
+ state->memsize = (unsigned)(bEnd-p);
+ }
+ }
+
+ return XXH_OK;
+}
+
+
+XXH_PUBLIC_API unsigned long long XXH64_digest (const XXH64_state_t* state)
+{
+ U64 h64;
+
+ if (state->total_len >= 32) {
+ U64 const v1 = state->v1;
+ U64 const v2 = state->v2;
+ U64 const v3 = state->v3;
+ U64 const v4 = state->v4;
+
+ h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
+ h64 = XXH64_mergeRound(h64, v1);
+ h64 = XXH64_mergeRound(h64, v2);
+ h64 = XXH64_mergeRound(h64, v3);
+ h64 = XXH64_mergeRound(h64, v4);
+ } else {
+ h64 = state->v3 /*seed*/ + PRIME64_5;
+ }
+
+ h64 += (U64) state->total_len;
+
+ return XXH64_finalize(h64, state->mem64, (size_t)state->total_len, XXH_aligned);
+}
+
+
+/*====== Canonical representation ======*/
+
+XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t));
+ if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
+ memcpy(dst, &hash, sizeof(*dst));
+}
+
+XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src)
+{
+ return XXH_readBE64(src);
+}
+
+#endif /* XXH_NO_LONG_LONG */
diff --git a/dviware/dvisvgm/libs/xxHash/xxhash.h b/dviware/dvisvgm/libs/xxHash/xxhash.h
new file mode 100644
index 0000000000..7f3d660347
--- /dev/null
+++ b/dviware/dvisvgm/libs/xxHash/xxhash.h
@@ -0,0 +1,445 @@
+/*
+ xxHash - Extremely Fast Hash algorithm
+ Header File
+ Copyright (C) 2012-2016, Yann Collet.
+
+ BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ You can contact the author at :
+ - xxHash source repository : https://github.com/Cyan4973/xxHash
+*/
+
+/* Notice extracted from xxHash homepage :
+
+xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
+It also successfully passes all tests from the SMHasher suite.
+
+Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)
+
+Name Speed Q.Score Author
+xxHash 5.4 GB/s 10
+CrapWow 3.2 GB/s 2 Andrew
+MumurHash 3a 2.7 GB/s 10 Austin Appleby
+SpookyHash 2.0 GB/s 10 Bob Jenkins
+SBox 1.4 GB/s 9 Bret Mulvey
+Lookup3 1.2 GB/s 9 Bob Jenkins
+SuperFastHash 1.2 GB/s 1 Paul Hsieh
+CityHash64 1.05 GB/s 10 Pike & Alakuijala
+FNV 0.55 GB/s 5 Fowler, Noll, Vo
+CRC32 0.43 GB/s 9
+MD5-32 0.33 GB/s 10 Ronald L. Rivest
+SHA1-32 0.28 GB/s 10
+
+Q.Score is a measure of quality of the hash function.
+It depends on successfully passing SMHasher test set.
+10 is a perfect score.
+
+A 64-bit version, named XXH64, is available since r35.
+It offers much better speed, but for 64-bit applications only.
+Name Speed on 64 bits Speed on 32 bits
+XXH64 13.8 GB/s 1.9 GB/s
+XXH32 6.8 GB/s 6.0 GB/s
+*/
+
+#ifndef XXHASH_H_5627135585666179
+#define XXHASH_H_5627135585666179 1
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+
+/* ****************************
+* Definitions
+******************************/
+#include <stddef.h> /* size_t */
+typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
+
+
+/* ****************************
+ * API modifier
+ ******************************/
+/** XXH_INLINE_ALL (and XXH_PRIVATE_API)
+ * This is useful to include xxhash functions in `static` mode
+ * in order to inline them, and remove their symbol from the public list.
+ * Inlining can offer dramatic performance improvement on small keys.
+ * Methodology :
+ * #define XXH_INLINE_ALL
+ * #include "xxhash.h"
+ * `xxhash.c` is automatically included.
+ * It's not useful to compile and link it as a separate module.
+ */
+#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
+# ifndef XXH_STATIC_LINKING_ONLY
+# define XXH_STATIC_LINKING_ONLY
+# endif
+# if defined(__GNUC__)
+# define XXH_PUBLIC_API static __inline __attribute__((unused))
+# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
+# define XXH_PUBLIC_API static inline
+# elif defined(_MSC_VER)
+# define XXH_PUBLIC_API static __inline
+# else
+ /* this version may generate warnings for unused static functions */
+# define XXH_PUBLIC_API static
+# endif
+#else
+# if defined(WIN32) && !defined(__GNUC__)
+# ifdef XXH_EXPORT
+# define XXH_PUBLIC_API __declspec(dllexport)
+# else
+# define XXH_PUBLIC_API __declspec(dllimport)
+# endif
+# else
+# define XXH_PUBLIC_API /* do nothing */
+# endif
+#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */
+
+/*! XXH_NAMESPACE, aka Namespace Emulation :
+ *
+ * If you want to include _and expose_ xxHash functions from within your own library,
+ * but also want to avoid symbol collisions with other libraries which may also include xxHash,
+ *
+ * you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library
+ * with the value of XXH_NAMESPACE (therefore, avoid NULL and numeric values).
+ *
+ * Note that no change is required within the calling program as long as it includes `xxhash.h` :
+ * regular symbol name will be automatically translated by this header.
+ */
+#ifdef XXH_NAMESPACE
+# define XXH_CAT(A,B) A##B
+# define XXH_NAME2(A,B) XXH_CAT(A,B)
+# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
+# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
+# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
+# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
+# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)
+# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)
+# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)
+# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
+# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
+# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
+# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
+# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
+# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
+# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
+# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
+# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
+# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
+# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
+# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
+#endif
+
+
+/* *************************************
+* Version
+***************************************/
+#define XXH_VERSION_MAJOR 0
+#define XXH_VERSION_MINOR 7
+#define XXH_VERSION_RELEASE 0
+#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)
+XXH_PUBLIC_API unsigned XXH_versionNumber (void);
+
+
+/*-**********************************************************************
+* 32-bit hash
+************************************************************************/
+typedef unsigned int XXH32_hash_t;
+
+/*! XXH32() :
+ Calculate the 32-bit hash of sequence "length" bytes stored at memory address "input".
+ The memory between input & input+length must be valid (allocated and read-accessible).
+ "seed" can be used to alter the result predictably.
+ Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s */
+XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, unsigned int seed);
+
+/*====== Streaming ======*/
+typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */
+XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void);
+XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr);
+XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state);
+
+XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned int seed);
+XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);
+XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr);
+
+/*
+ * Streaming functions generate the xxHash of an input provided in multiple segments.
+ * Note that, for small input, they are slower than single-call functions, due to state management.
+ * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized.
+ *
+ * XXH state must first be allocated, using XXH*_createState() .
+ *
+ * Start a new hash by initializing state with a seed, using XXH*_reset().
+ *
+ * Then, feed the hash state by calling XXH*_update() as many times as necessary.
+ * The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
+ *
+ * Finally, a hash value can be produced anytime, by using XXH*_digest().
+ * This function returns the nn-bits hash as an int or long long.
+ *
+ * It's still possible to continue inserting input into the hash state after a digest,
+ * and generate some new hashes later on, by calling again XXH*_digest().
+ *
+ * When done, free XXH state space if it was allocated dynamically.
+ */
+
+/*====== Canonical representation ======*/
+
+typedef struct { unsigned char digest[4]; } XXH32_canonical_t;
+XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);
+XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);
+
+/* Default result type for XXH functions are primitive unsigned 32 and 64 bits.
+ * The canonical representation uses human-readable write convention, aka big-endian (large digits first).
+ * These functions allow transformation of hash result into and from its canonical format.
+ * This way, hash values can be written into a file / memory, and remain comparable on different systems and programs.
+ */
+
+
+#ifndef XXH_NO_LONG_LONG
+/*-**********************************************************************
+* 64-bit hash
+************************************************************************/
+typedef unsigned long long XXH64_hash_t;
+
+/*! XXH64() :
+ Calculate the 64-bit hash of sequence of length "len" stored at memory address "input".
+ "seed" can be used to alter the result predictably.
+ This function runs faster on 64-bit systems, but slower on 32-bit systems (see benchmark).
+*/
+XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, unsigned long long seed);
+
+/*====== Streaming ======*/
+typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */
+XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void);
+XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr);
+XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state);
+
+XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, unsigned long long seed);
+XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
+XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr);
+
+/*====== Canonical representation ======*/
+typedef struct { unsigned char digest[8]; } XXH64_canonical_t;
+XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
+XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src);
+
+
+#endif /* XXH_NO_LONG_LONG */
+
+
+
+#ifdef XXH_STATIC_LINKING_ONLY
+
+/* ================================================================================================
+ This section contains declarations which are not guaranteed to remain stable.
+ They may change in future versions, becoming incompatible with a different version of the library.
+ These declarations should only be used with static linking.
+ Never use them in association with dynamic linking !
+=================================================================================================== */
+
+/* These definitions are only present to allow
+ * static allocation of XXH state, on stack or in a struct for example.
+ * Never **ever** use members directly. */
+
+#if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+
+struct XXH32_state_s {
+ uint32_t total_len_32;
+ uint32_t large_len;
+ uint32_t v1;
+ uint32_t v2;
+ uint32_t v3;
+ uint32_t v4;
+ uint32_t mem32[4];
+ uint32_t memsize;
+ uint32_t reserved; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH32_state_t */
+
+struct XXH64_state_s {
+ uint64_t total_len;
+ uint64_t v1;
+ uint64_t v2;
+ uint64_t v3;
+ uint64_t v4;
+ uint64_t mem64[4];
+ uint32_t memsize;
+ uint32_t reserved[2]; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH64_state_t */
+
+# else
+
+struct XXH32_state_s {
+ XXH32_hash_t total_len_32;
+ XXH32_hash_t large_len;
+ XXH32_hash_t v1;
+ XXH32_hash_t v2;
+ XXH32_hash_t v3;
+ XXH32_hash_t v4;
+ XXH32_hash_t mem32[4];
+ XXH32_hash_t memsize;
+ XXH32_hash_t reserved; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH32_state_t */
+
+# ifndef XXH_NO_LONG_LONG /* remove 64-bit support */
+struct XXH64_state_s {
+ XXH64_hash_t total_len;
+ XXH64_hash_t v1;
+ XXH64_hash_t v2;
+ XXH64_hash_t v3;
+ XXH64_hash_t v4;
+ XXH64_hash_t mem64[4];
+ XXH32_hash_t memsize;
+ XXH32_hash_t reserved[2]; /* never read nor write, might be removed in a future version */
+}; /* typedef'd to XXH64_state_t */
+# endif
+
+# endif
+
+
+/*-**********************************************************************
+* XXH3
+* New experimental hash
+************************************************************************/
+#ifndef XXH_NO_LONG_LONG
+
+
+/* ============================================
+ * XXH3 is a new hash algorithm,
+ * featuring vastly improved speed performance
+ * for both small and large inputs.
+ * A full speed analysis will be published,
+ * it requires a lot more space than this comment can handle.
+ * In general, expect XXH3 to run about ~2x faster on large inputs,
+ * and >3x faster on small ones, though exact difference depend on platform.
+ *
+ * The algorithm is portable, will generate the same hash on all platforms.
+ * It benefits greatly from vectorization units, but does not require it.
+ *
+ * XXH3 offers 2 variants, _64bits and _128bits.
+ * When only 64 bits are needed, prefer calling the _64bits variant :
+ * it reduces the amount of mixing, resulting in faster speed on small inputs.
+ * It's also generally simpler to manipulate a scalar type than a struct.
+ * Note : the low 64-bit field of the _128bits variant is the same as _64bits result.
+ *
+ * The XXH3 algorithm is still considered experimental.
+ * It's possible to use it for ephemeral data, but avoid storing long-term values for later re-use.
+ * While labelled experimental, the produced result can still change between versions.
+ *
+ * The API currently supports one-shot hashing only.
+ * The full version will include streaming capability, and canonical representation
+ * Long term optional feature may include custom secret keys, and secret key generation.
+ *
+ * There are still a number of opened questions that community can influence during the experimental period.
+ * I'm trying to list a few of them below, though don't consider this list as complete.
+ *
+ * - 128-bits output type : currently defined as a structure of 2 64-bits fields.
+ * That's because 128-bit values do not exist in C standard.
+ * Note that it means that, at byte level, result is not identical depending on endianess.
+ * However, at field level, they are identical on all platforms.
+ * The canonical representation will solve the issue of identical byte-level representation across platforms,
+ * which is necessary for serialization.
+ * Would there be a better representation for a 128-bit hash result ?
+ * Are the names of the inner 64-bit fields important ? Should they be changed ?
+ *
+ * - Canonical representation : for the 64-bit variant, canonical representation is the same as XXH64() (aka big-endian).
+ * What should it be for the 128-bit variant ?
+ * Since it's no longer a scalar value, big-endian representation is no longer an obvious choice.
+ * One possibility : represent it as the concatenation of two 64-bits canonical representation (aka 2x big-endian)
+ * Another one : represent it in the same order as natural order in the struct for little-endian platforms.
+ * Less consistent with existing convention for XXH32/XXH64, but may be more natural for little-endian platforms.
+ *
+ * - Associated functions for 128-bit hash : simple things, such as checking if 2 hashes are equal, become more difficult with struct.
+ * Granted, it's not terribly difficult to create a comparator, but it's still a workload.
+ * Would it be beneficial to declare and define a comparator function for XXH128_hash_t ?
+ * Are there other operations on XXH128_hash_t which would be desirable ?
+ *
+ * - Variant compatibility : The low 64-bit field of the _128bits variant is the same as the result of _64bits.
+ * This is not a compulsory behavior. It just felt that it "wouldn't hurt", and might even help in some (unidentified) cases.
+ * But it might influence the design of XXH128_hash_t, in ways which may block other possibilities.
+ * Good idea, bad idea ?
+ *
+ * - Seed type for 128-bits variant : currently, it's a single 64-bit value, like the 64-bit variant.
+ * It could be argued that it's more logical to offer a 128-bit seed input parameter for a 128-bit hash.
+ * Although it's also more difficult to use, since it requires to declare and pass a structure instead of a value.
+ * It would either replace current choice, or add a new one.
+ * Farmhash, for example, offers both variants (the 128-bits seed variant is called `doubleSeed`).
+ * If both 64-bit and 128-bit seeds are possible, which variant should be called XXH128 ?
+ *
+ * - Result for len==0 : Currently, the result of hashing a zero-length input is the seed.
+ * This mimics the behavior of a crc : in which case, a seed is effectively an accumulator, so it's not updated if input is empty.
+ * Consequently, by default, when no seed specified, it returns zero. That part seems okay (it used to be a request for XXH32/XXH64).
+ * But is it still fine to return the seed when the seed is non-zero ?
+ * Are there use case which would depend on this behavior, or would prefer a mixing of the seed ?
+ */
+
+#ifdef XXH_NAMESPACE
+# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)
+# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)
+# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)
+# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)
+# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)
+#endif
+
+
+typedef struct {
+ XXH64_hash_t low64;
+ XXH64_hash_t high64;
+} XXH128_hash_t;
+
+XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, unsigned long long seed);
+
+/* note : variants without seed produce same result as variant with seed == 0 */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len);
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, unsigned long long seed);
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len);
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, unsigned long long seed); /* == XXH128() */
+
+
+#endif /* XXH_NO_LONG_LONG */
+
+
+/*-**********************************************************************
+* XXH_INLINE_ALL
+************************************************************************/
+#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
+# include "xxhash.c" /* include xxhash function bodies as `static`, for inlining */
+#endif
+
+
+
+#endif /* XXH_STATIC_LINKING_ONLY */
+
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif /* XXHASH_H_5627135585666179 */