diff options
Diffstat (limited to 'libjava/include/java-chartables.h')
-rw-r--r-- | libjava/include/java-chartables.h | 1617 |
1 files changed, 1617 insertions, 0 deletions
diff --git a/libjava/include/java-chartables.h b/libjava/include/java-chartables.h new file mode 100644 index 000000000..d882c675e --- /dev/null +++ b/libjava/include/java-chartables.h @@ -0,0 +1,1617 @@ +/* java-chartables.h -- Character tables for java.lang.Character -*- c++ -*- + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + *** This file is generated by scripts/unicode_to_chartables.pl *** + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +#ifndef __JAVA_CHARTABLES_H__ +#define __JAVA_CHARTABLES_H__ + +// These tables are automatically generated by scripts/unicode_to_chartables.pl. +// The Unicode data comes from www.unicode.org; this header is based on +// UnicodeData-4.0.0.txt. JDK 1.5 uses Unicode version 4.0.0. +// DO NOT EDIT the tables. Instead, fix the upstream scripts and run +// them again. + +// The data is stored in C style arrays of the appropriate CNI types, to +// guarantee that the data is constant and non-relocatable. The field +// <code>blocks</code> stores the offset of a block of 2<sup>SHIFT</sup> +// characters within <code>data</code>. The data field, in turn, stores +// information about each character in the low order bits, and an offset +// into the attribute tables <code>upper</code>, <code>lower</code>, +// <code>numValue</code>, and <code>direction</code>. Notice that the +// attribute tables are much smaller than 0xffff entries; as many characters +// in Unicode share common attributes. Finally, there is a listing for +// <code>title</code> exceptions (most characters just have the same title +// case as upper case). + +// This file should only be included by natCharacter.cc + +/** + * The array containing the numeric values that are too large to be stored as + * chars in NUM_VALUE. NUM_VALUE in this case will contain a negative integer + * N such that LARGENUMS[-N - 3] contains the correct numeric value. + */ +static const jint largenums[] = { + 40000, 50000, 60000, 70000, 80000, 90000, }; + +/** + * The character shift amount to look up the block offset. In other words, + * <code>(char) (blocks[p][off >> SHIFT[p]] + off)</code> is the index where + * <code>ch</code> is described in <code>data</code>, where <code>off</code> + * is ch & 0xffff and <code>p</code> is the plane the character belongs to. + */ +static const int shift[] = { + 4, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, }; + +/** + * The mapping of character blocks to their location in <code>data</code>. + * Each entry has been adjusted so that a modulo 16 sum with the desired + * character gives the actual index into <code>data</code>. + */ +static const jchar blocks0[] = { + 15, 23, 53, 7, 52, 52, 90, 65424, 65437, 65427, + 11, 65461, 11, 4, 28, 21, 23, 7, 65527, 173, + 269, 65479, 65463, 65403, 273, 273, 183, 257, 65500, 65354, + 65335, 65267, 65303, 65287, 65269, 65401, 220, 50, 321, 5, + 65511, 317, 304, 311, 355, 355, 274, 325, 358, 342, + 326, 310, 65409, 401, 262, 65156, 458, 64826, 442, 64843, + 426, 65140, 64823, 334, 435, 64699, 64683, 64716, 64700, 371, + 64695, 64679, 64680, 64647, 64631, 64615, 275, 64583, 64567, 64578, + 64535, 65036, 65020, 64723, 64708, 64701, 65034, 65019, 65012, 65237, + 65219, 64791, 64789, 138, 127, 181, 64945, 220, 64878, 249, + 203, 65507, 107, 249, 64783, 64767, 64751, 64735, 64719, 9, + 171, 105, 65531, 88, 64623, 64822, 65494, 64460, 64444, 64428, + 64527, 64511, 65392, 65529, 64348, 64332, 64316, 64300, 64284, 64268, + 64252, 64236, 64220, 64204, 64188, 64172, 64156, 64140, 64124, 64108, + 64092, 64076, 64060, 64044, 65249, 64259, 64243, 65267, 64724, 65291, + 65299, 63915, 64394, 63482, 64105, 64485, 64366, 63758, 65193, 65199, + 64377, 63354, 63977, 63687, 65020, 63328, 64386, 65087, 63204, 63872, + 63849, 63246, 64454, 63332, 64937, 64989, 64010, 63098, 63721, 64328, + 63117, 62956, 64913, 63171, 63428, 63323, 63407, 63323, 63803, 64222, + 64347, 64791, 63236, 63489, 63465, 64420, 64727, 63279, 64657, 63148, + 64331, 63361, 63337, 64631, 64369, 63898, 64529, 63020, 64203, 63233, + 63209, 64143, 64503, 63838, 64401, 62892, 64468, 62443, 63091, 63450, + 64391, 63538, 62780, 62759, 62994, 62979, 62963, 64143, 64157, 64041, + 62652, 62636, 62151, 63220, 63096, 64185, 64185, 63935, 62524, 62508, + 64137, 62218, 63176, 63172, 62666, 62659, 63643, 62845, 63847, 62669, + 62662, 62649, 62052, 62284, 62268, 62252, 62483, 62467, 62722, 63849, + 63671, 63833, 62140, 62124, 62108, 62092, 63783, 63767, 63761, 62275, + 62259, 63347, 62227, 62211, 62195, 62179, 62163, 63148, 62131, 62115, + 62099, 62083, 63075, 62051, 62035, 62019, 62003, 63473, 61963, 61955, + 61939, 61923, 61227, 61211, 61875, 61859, 61163, 61827, 61795, 61123, + 61107, 61755, 61731, 61731, 61699, 61027, 61683, 61667, 61643, 62635, + 62147, 62425, 61340, 61324, 61555, 61539, 61523, 61507, 61491, 62966, + 61458, 61443, 61427, 61411, 61395, 61379, 61363, 61347, 61331, 61315, + 61299, 61283, 61267, 61251, 61235, 61219, 61203, 61187, 61171, 61155, + 61139, 61123, 61107, 61091, 61075, 61059, 61043, 61027, 61011, 60995, + 60979, 60963, 60947, 60931, 60915, 60899, 60883, 60867, 60205, 62324, + 61814, 61782, 60787, 60771, 60755, 60739, 62073, 62215, 60677, 62199, + 60659, 62183, 60627, 62167, 60581, 62151, 60563, 60547, 60531, 62103, + 61004, 62098, 60246, 62097, 62097, 60198, 60403, 60387, 61402, 60355, + 60339, 61811, 60307, 60291, 61953, 60012, 59996, 59980, 59964, 59948, + 60179, 61161, 61746, 60531, 59888, 60099, 61080, 61558, 59804, 59788, + 59772, 59756, 59740, 59724, 61668, 61652, 59676, 59660, 59644, 59628, + 59612, 59596, 59580, 59564, 59548, 59532, 59516, 59500, 59484, 59468, + 59452, 59436, 59420, 59404, 59388, 59372, 59356, 59340, 59324, 59308, + 59292, 59276, 59260, 59244, 59228, 59212, 59196, 59180, 59164, 59148, + 59132, 59116, 59100, 59084, 59068, 59052, 59036, 59020, 59004, 58988, + 58972, 58956, 58940, 58924, 59088, 59072, 59060, 59056, 59040, 59024, + 61022, 58796, 58780, 58764, 58748, 58732, 58716, 58700, 58684, 58668, + 58135, 58119, 58103, 58087, 58071, 58055, 58039, 58023, 58007, 58200, + 57975, 57959, 57943, 57927, 57911, 59112, 60622, 60622, 60590, 60574, + 60574, 60574, 60526, 60558, 60558, 60542, 60526, 60526, 58499, 60510, + 60510, 57701, 60494, 60494, 57467, 60493, 57427, 57334, 59163, 60445, + 60445, 57996, 60429, 60427, 57948, 60411, 58887, 57900, 58047, 59809, + 60046, 59529, 60439, 58731, 60423, 60423, 60423, 59922, 60407, 59668, + 59654, 59631, 59620, 59616, 59751, 60187, 60182, 59602, 60111, 60058, + 59577, 60060, 59602, 59637, 60006, 60003, 59952, 59516, 59950, 59932, + 60070, 59316, 60048, 60043, 60033, 60017, 60001, 57613, 59204, 57620, + 59188, 57600, 59140, 59945, 57148, 57132, 59076, 59060, 59859, 57068, + 59823, 57036, 59825, 59805, 59785, 59785, 59681, 59818, 59808, 59808, + 59798, 58754, 58820, 58804, 58788, 58772, 58756, 58740, 58724, 58708, + 58692, 58676, 58660, 59374, 58626, 58612, 58596, 58588, 58564, 57001, + 58532, 58516, 58500, 58484, 58469, 59260, 58436, 59240, 59224, 56428, + 56412, 56396, 56380, 56364, 56728, 58292, 56729, 58260, 56650, 59204, + 56673, 56667, 56657, 58964, 58148, 58939, 56156, 58635, 59076, 58084, + 58052, 58036, 58020, 58004, 57988, 57972, 57956, 57940, 57924, 57908, + 57892, 57876, 57860, 57844, 57828, 57812, 57812, 57796, 57780, 57764, + 57748, 57732, 57716, 57700, 57710, 57702, 58220, 57822, 57775, 58235, + 57679, 57584, 57562, 58161, 57661, 57673, 57492, 57671, 58045, 57561, + 57996, 57980, 57473, 57948, 57932, 57405, 57879, 57420, 58092, 55308, + 55292, 55276, 55260, 55244, 55228, 55212, 55196, 55180, 55164, 55148, + 55132, 55116, 55100, 55084, 55068, 55052, 55036, 55020, 55004, 54988, + 54972, 54956, 54940, 54924, 54908, 54892, 54876, 54860, 54844, 54828, + 54812, 54796, 54780, 54764, 54748, 54732, 54716, 54700, 54684, 54668, + 54652, 54636, 54620, 54604, 54588, 54572, 54556, 54540, 54524, 54508, + 54492, 54476, 54460, 54444, 56388, 54823, 56356, 56340, 56324, 56308, + 56292, 57094, 56260, 56244, 56228, 56212, 56196, 56180, 56164, 56148, + 56132, 56116, 56100, 56084, 56068, 56868, 54076, 56830, 57012, 57010, + 54323, 56918, 54226, 54211, 54195, 54179, 54163, 55228, 54114, 54115, + 54099, 54083, 54067, 55067, 55046, 54019, 55001, 53986, 53971, 53955, + 53939, 53923, 53891, 53991, 53875, 55347, 53596, 53580, 53564, 53795, + 56257, 56244, 56368, 56209, 56320, 56450, 56161, 56149, 56272, 56113, + 56097, 56100, 56165, 56049, 56033, 56133, 56001, 55985, 55969, 55953, + 55937, 55921, 55905, 55994, 55873, 55857, 55841, 55825, 55809, 55795, + 55777, 55762, 53267, 53251, 53235, 53219, 53203, 53187, 53171, 53155, + 53139, 53123, 53107, 53091, 53075, 53059, 53043, 53027, 53011, 52995, + 52979, 52963, 52947, 52931, 52915, 52899, 52883, 52867, 52851, 52835, + 52819, 52803, 52787, 52771, 52755, 52739, 52723, 52707, 52691, 52675, + 52659, 52643, 52627, 52611, 52595, 52579, 52563, 52547, 52531, 52515, + 52499, 52483, 52467, 52451, 52435, 52419, 52403, 52387, 52371, 52355, + 52339, 52323, 52307, 52291, 52275, 52259, 52243, 52227, 52211, 52195, + 52179, 52163, 52147, 52131, 52115, 52099, 52083, 52067, 52051, 52035, + 52019, 52003, 51987, 51971, 51955, 51939, 51923, 51907, 51891, 51875, + 51859, 51843, 51827, 51811, 51795, 51779, 51763, 51747, 51731, 51715, + 51699, 51683, 51667, 51651, 51635, 51619, 51603, 51587, 51571, 51555, + 51539, 51523, 51507, 51491, 51475, 51459, 51443, 51427, 51411, 51395, + 51379, 51363, 51347, 51331, 51315, 51299, 51283, 51267, 51251, 51235, + 51219, 51203, 51187, 51171, 51155, 51139, 51123, 51107, 51091, 51075, + 51059, 51043, 51027, 51011, 50995, 50979, 50963, 50947, 50931, 50915, + 50899, 50883, 50867, 50851, 50835, 50819, 50803, 50787, 50771, 50755, + 50739, 50723, 50707, 50691, 50675, 50659, 50643, 50627, 50611, 50595, + 50579, 50563, 50547, 50531, 50515, 50499, 50483, 50467, 50451, 50435, + 50419, 50403, 50387, 50371, 50355, 50339, 50323, 50307, 50291, 50275, + 50259, 50243, 50227, 50211, 50195, 50179, 50163, 50147, 50131, 50115, + 50099, 50083, 50067, 50051, 50035, 50019, 50003, 49987, 49971, 49955, + 49939, 49923, 49907, 49891, 49875, 49859, 49843, 49827, 49811, 49795, + 49779, 49763, 49747, 49731, 49715, 49699, 49683, 49667, 49651, 49635, + 49619, 49603, 49587, 49571, 49555, 49539, 49523, 49507, 49491, 49475, + 49459, 49443, 49427, 49411, 49395, 49379, 49363, 49347, 49331, 49315, + 49299, 49283, 49267, 49251, 49235, 49219, 49203, 49187, 49171, 49155, + 49139, 49123, 49107, 49091, 49075, 49059, 49043, 49027, 49011, 48995, + 48979, 48963, 48947, 48931, 48915, 48899, 48883, 48867, 48851, 48835, + 48819, 48803, 48787, 48771, 48755, 48739, 48723, 48707, 48691, 48675, + 48659, 48643, 48627, 48611, 48595, 48579, 48563, 48547, 48531, 48515, + 48499, 48483, 48467, 48451, 48435, 48419, 48403, 48387, 48371, 48355, + 48339, 48323, 48307, 48291, 48275, 48259, 48243, 48227, 48211, 48195, + 48179, 48163, 48147, 48131, 48115, 48099, 48083, 48067, 48051, 48035, + 48019, 48003, 47987, 47971, 47955, 47939, 47923, 47907, 47891, 47875, + 47859, 47843, 47827, 47811, 47795, 47779, 47763, 47747, 47731, 47715, + 47699, 47683, 47667, 47651, 47635, 47619, 47603, 47587, 47571, 47555, + 47539, 47523, 47507, 47491, 47475, 47459, 47443, 47427, 47411, 47395, + 47379, 47363, 47347, 47331, 47315, 47299, 47283, 47267, 47251, 47235, + 47219, 47203, 47187, 47171, 47155, 47139, 47123, 47107, 47091, 47075, + 47059, 47043, 47027, 47011, 46995, 46979, 46963, 46947, 46931, 46915, + 46899, 46883, 46867, 46851, 46835, 46819, 46803, 46787, 46771, 46755, + 46739, 46723, 46707, 48181, 48388, 48372, 48356, 48340, 46611, 46595, + 46579, 46563, 46547, 46531, 46515, 46499, 46483, 46467, 46451, 46435, + 46419, 46403, 46387, 46371, 46355, 46339, 46323, 46307, 46291, 46275, + 46259, 46243, 46227, 46211, 46195, 46179, 46163, 46147, 46131, 46115, + 46099, 46083, 46067, 46051, 46035, 46019, 46003, 45987, 45971, 45955, + 45939, 45923, 45907, 45891, 45875, 45859, 45843, 45827, 45811, 45795, + 45779, 45763, 45747, 45731, 45715, 45699, 45683, 45667, 45651, 45635, + 45619, 45603, 45587, 45571, 45555, 45539, 45523, 45507, 45491, 45475, + 45459, 45443, 45427, 45411, 45395, 45379, 45363, 45347, 45331, 45315, + 45299, 45283, 45267, 45251, 45235, 45219, 45203, 45187, 45171, 45155, + 45139, 45123, 45107, 45091, 45075, 45059, 45043, 45027, 45011, 44995, + 44979, 44963, 44947, 44931, 44915, 44899, 44883, 44867, 44851, 44835, + 44819, 44803, 44787, 44771, 44755, 44739, 44723, 44707, 44691, 44675, + 44659, 44643, 44627, 44611, 44595, 44579, 44563, 44547, 44531, 44515, + 44499, 44483, 44467, 44451, 44435, 44419, 44403, 44387, 44371, 44355, + 44339, 44323, 44307, 44291, 44275, 44259, 44243, 44227, 44211, 44195, + 44179, 44163, 44147, 44131, 44115, 44099, 44083, 44067, 44051, 44035, + 44019, 44003, 43987, 43971, 43955, 43939, 43923, 43907, 43891, 43875, + 43859, 43843, 43827, 43811, 43795, 43779, 43763, 43747, 43731, 43715, + 43699, 43683, 43667, 43651, 43635, 43619, 43603, 43587, 43571, 43555, + 43539, 43523, 43507, 43491, 43475, 43459, 43443, 43427, 43411, 43395, + 43379, 43363, 43347, 43331, 43315, 43299, 43283, 43267, 43251, 43235, + 43219, 43203, 43187, 43171, 43155, 43139, 43123, 43107, 43091, 43075, + 43059, 43043, 43027, 43011, 42995, 42979, 42963, 42947, 42931, 42915, + 42899, 42883, 42867, 42851, 42835, 42819, 42803, 42787, 42771, 42755, + 42739, 42723, 42707, 42691, 42675, 42659, 42643, 42627, 42611, 42595, + 42579, 42563, 42547, 42531, 42515, 42499, 42483, 42467, 42451, 42435, + 42419, 42403, 42387, 42371, 42355, 42339, 42323, 42307, 42291, 42275, + 42259, 42243, 42227, 42211, 42195, 42179, 42163, 42147, 42131, 42115, + 42099, 42083, 42067, 42051, 42035, 42019, 42003, 41987, 41971, 41955, + 41939, 41923, 41907, 41891, 41875, 41859, 41843, 41827, 41811, 41795, + 41779, 41763, 41747, 41731, 41715, 41699, 41683, 41667, 41651, 41635, + 41619, 41603, 41587, 41571, 41555, 41539, 41523, 41507, 41491, 41475, + 41459, 41443, 41427, 41411, 41395, 41379, 41363, 41347, 41331, 41315, + 41299, 41283, 41267, 41251, 41235, 41219, 41203, 41187, 41171, 41155, + 41139, 41123, 41107, 41091, 41075, 41059, 41043, 41027, 41011, 40995, + 40979, 40963, 40947, 40931, 40915, 40899, 40883, 40867, 40851, 40835, + 40819, 40803, 40787, 40771, 40755, 40739, 40723, 40707, 40691, 40675, + 40659, 40643, 40627, 40611, 40595, 40579, 40563, 40547, 40531, 40515, + 40499, 40483, 40467, 40451, 40435, 40419, 40403, 40387, 40371, 40355, + 40339, 40323, 40307, 40291, 40275, 40259, 40243, 40227, 40211, 40195, + 40179, 40163, 40147, 40131, 40115, 40099, 40083, 40067, 40051, 40035, + 40019, 40003, 39987, 39971, 39955, 39939, 39923, 39907, 39891, 39875, + 39859, 39843, 39827, 39811, 39795, 39779, 39763, 39747, 39731, 39715, + 39699, 39683, 39667, 39651, 39635, 39619, 39603, 39587, 39571, 39555, + 39539, 39523, 39507, 39491, 39475, 39459, 39443, 39427, 39411, 39395, + 39379, 39363, 39347, 39331, 39315, 39299, 39283, 39267, 39251, 39235, + 39219, 39203, 39187, 39171, 39155, 39139, 39123, 39107, 39091, 39075, + 39059, 39043, 39027, 39011, 38995, 38979, 38963, 38947, 38931, 38915, + 38899, 38883, 38867, 38851, 38835, 38819, 38803, 38787, 38771, 38755, + 38739, 38723, 38707, 38691, 38675, 38659, 38643, 38627, 38611, 38595, + 38579, 38563, 38547, 38531, 38515, 38499, 38483, 38467, 38451, 38435, + 38419, 38403, 38387, 38371, 38355, 38339, 38323, 38307, 38291, 38275, + 38259, 38243, 38227, 38211, 38195, 38179, 38163, 38147, 38131, 38115, + 38099, 38083, 38067, 38051, 38035, 38019, 38003, 37987, 37971, 37955, + 37939, 37923, 37907, 37891, 37875, 37859, 37843, 37827, 37811, 37795, + 37779, 37763, 37747, 37731, 37715, 37699, 37683, 37667, 37651, 37635, + 37619, 37603, 37587, 37571, 37555, 37539, 37523, 37507, 37491, 37475, + 37459, 37443, 37427, 37411, 37395, 37379, 37363, 37347, 37331, 37315, + 37299, 37283, 37267, 37251, 37235, 37219, 37203, 37187, 37171, 37155, + 37139, 37123, 37107, 37091, 37075, 37059, 37043, 37027, 37011, 36995, + 36979, 36963, 36947, 36931, 36915, 36899, 36883, 36867, 36851, 36835, + 36819, 36803, 36787, 36771, 36755, 36739, 36723, 36707, 36691, 36675, + 36659, 36643, 36627, 36611, 36595, 36579, 36563, 36547, 36531, 36515, + 36499, 36483, 36467, 36451, 36435, 36419, 36403, 36387, 36371, 36355, + 36339, 36323, 36307, 36291, 36275, 36259, 36243, 36227, 36211, 36195, + 36179, 36163, 36147, 36131, 36115, 36099, 36083, 36067, 36051, 36035, + 36019, 36003, 35987, 35971, 35955, 35939, 35923, 35907, 35891, 35875, + 35859, 35843, 35827, 35811, 35795, 35779, 35763, 35747, 35731, 35715, + 35699, 35683, 35667, 35651, 35635, 35619, 35603, 35587, 35571, 35555, + 35539, 35523, 35507, 35491, 35475, 35459, 35443, 35427, 35411, 35395, + 35379, 35363, 35347, 35331, 35315, 35299, 35283, 35267, 35251, 35235, + 35219, 35203, 35187, 35171, 35155, 35139, 35123, 35107, 35091, 35075, + 35059, 35043, 35027, 35011, 34995, 34979, 34963, 34947, 34931, 34915, + 34899, 34883, 34867, 34851, 34835, 34819, 34803, 34787, 34771, 34755, + 34739, 34723, 34707, 34691, 34675, 34659, 34643, 34627, 34611, 34595, + 34579, 34563, 34547, 34531, 34515, 34499, 34483, 34467, 34451, 34435, + 34419, 34403, 34387, 34371, 34355, 34339, 34323, 34307, 34291, 34275, + 34259, 34243, 34227, 34211, 34195, 34179, 34163, 34147, 34131, 34115, + 34099, 34083, 34067, 34051, 34035, 34019, 34003, 33987, 33971, 33955, + 33939, 33923, 33907, 33891, 33875, 33859, 33843, 33827, 33811, 33795, + 33779, 33763, 33747, 33731, 33715, 33699, 33683, 33667, 33651, 33635, + 33619, 33603, 33587, 33571, 33555, 33539, 33523, 33507, 33491, 33475, + 33459, 33443, 33427, 33411, 33395, 33379, 33363, 33347, 33331, 33315, + 33299, 33283, 33267, 33251, 33235, 33219, 33203, 33187, 33171, 33155, + 33139, 33123, 33107, 33091, 33075, 33059, 33043, 33027, 33011, 32995, + 32979, 32963, 32947, 32931, 32915, 32899, 32883, 32867, 32851, 32835, + 32819, 32803, 32787, 32771, 32755, 32739, 32723, 32707, 32691, 32675, + 32659, 32643, 32627, 32611, 32595, 32579, 32563, 32547, 32531, 32515, + 32499, 32483, 32467, 32451, 32435, 32419, 32403, 32387, 32371, 32355, + 32339, 32323, 32307, 32291, 32275, 32259, 32243, 32227, 32211, 32195, + 32179, 32163, 32147, 32131, 32115, 32099, 32083, 32067, 32051, 32035, + 32019, 32003, 31987, 31971, 31955, 31939, 31923, 31907, 31891, 31875, + 31859, 31843, 31827, 31811, 31795, 31779, 31763, 31747, 31731, 31715, + 31699, 31683, 31667, 31651, 31635, 31619, 31603, 31587, 31571, 31555, + 31539, 31523, 31507, 31491, 31475, 31459, 31443, 31427, 31411, 31395, + 31379, 31363, 31347, 31331, 31315, 31299, 31283, 31267, 31251, 31235, + 31219, 31203, 31187, 31171, 31155, 31139, 31123, 31107, 31091, 31075, + 31059, 31043, 31027, 31011, 30995, 30979, 30963, 30947, 30931, 30915, + 30899, 30883, 30867, 30851, 30835, 30819, 30803, 30787, 30771, 30755, + 30739, 30723, 30707, 30691, 30675, 30659, 30643, 30627, 30611, 30595, + 30579, 30563, 30547, 30531, 30515, 30499, 30483, 30467, 30451, 30435, + 30419, 30403, 30387, 30371, 30355, 30339, 30323, 30307, 30291, 30275, + 30259, 30243, 30227, 30211, 30195, 30179, 30163, 30147, 30131, 30115, + 30099, 30083, 30067, 30051, 30035, 30019, 30003, 29987, 29971, 29955, + 29939, 29923, 29907, 29891, 29875, 29859, 29843, 29827, 29811, 29795, + 29779, 29763, 29747, 29731, 29715, 29699, 29683, 29667, 29651, 29635, + 29619, 29603, 29587, 29571, 29555, 29539, 29523, 29507, 29491, 29475, + 29459, 29443, 29427, 29411, 29395, 29379, 29363, 29347, 29331, 29315, + 29299, 29283, 29267, 29251, 29235, 29219, 29203, 29187, 29171, 29155, + 29139, 29123, 29107, 29091, 29075, 29059, 29043, 29027, 29011, 28995, + 28979, 28963, 28947, 28931, 28915, 28899, 28883, 28867, 28851, 28835, + 28819, 28803, 28787, 28771, 28755, 28739, 28723, 28707, 28691, 28675, + 28659, 28643, 28627, 28611, 28595, 28579, 28563, 28547, 28531, 28515, + 28499, 28483, 28467, 28451, 28435, 28419, 28403, 28387, 28371, 28355, + 28339, 28323, 28307, 28291, 28275, 28259, 28243, 28227, 28211, 28195, + 28179, 28163, 28147, 28131, 28115, 28099, 28083, 28067, 28051, 28035, + 28019, 28003, 27987, 27971, 27955, 27939, 27923, 27907, 27891, 27875, + 27859, 27843, 27827, 27811, 27795, 27779, 27763, 27747, 27731, 27715, + 27699, 27683, 27667, 27651, 27635, 27619, 27603, 27587, 27571, 27555, + 27539, 27523, 27507, 27491, 27475, 27459, 27443, 27427, 27411, 27395, + 27379, 27363, 27347, 27331, 27315, 27299, 27283, 27267, 27251, 27235, + 27219, 27203, 27187, 27171, 27155, 27139, 27123, 27107, 27091, 27075, + 27059, 27043, 27027, 27011, 26995, 26979, 26963, 26947, 26931, 26915, + 26899, 26883, 26867, 26851, 26835, 26819, 26803, 26787, 26771, 26755, + 26739, 26723, 26707, 26691, 26675, 26659, 26643, 26627, 26611, 26595, + 26579, 26563, 26547, 26531, 26515, 26499, 26483, 26467, 26451, 26435, + 26419, 26403, 26387, 26371, 26355, 26339, 26323, 26307, 26291, 26275, + 26259, 26243, 26227, 26211, 26195, 26179, 26163, 26147, 26131, 26115, + 26099, 26083, 26067, 26051, 26035, 26019, 26003, 25987, 25971, 25955, + 25939, 25923, 25907, 25891, 25875, 25859, 25843, 25827, 25811, 25795, + 25779, 25763, 25747, 25731, 27205, 25452, 25436, 25420, 25404, 25388, + 25619, 25603, 25587, 25571, 25555, 25539, 25523, 25507, 25491, 25475, + 25459, 25443, 25427, 25411, 25395, 25379, 25363, 25347, 25331, 25315, + 25299, 25283, 25267, 25251, 25235, 25219, 25203, 25187, 25171, 25155, + 25139, 25123, 25107, 25091, 25075, 25059, 25043, 25027, 25011, 24995, + 24979, 24963, 24947, 24931, 24915, 24899, 24883, 24867, 24851, 24835, + 24819, 24803, 24787, 24771, 24755, 24739, 24723, 24707, 24691, 24675, + 24659, 24643, 24627, 24611, 24595, 24579, 24563, 24547, 24531, 24515, + 24499, 24483, 25465, 26164, 26148, 26132, 26931, 24140, 24124, 24108, + 24092, 24076, 24060, 24044, 24028, 24012, 23996, 23980, 23964, 23948, + 23932, 23916, 23900, 23884, 23868, 23852, 23836, 23820, 23804, 23788, + 23772, 23756, 23740, 23724, 23708, 23692, 23676, 23660, 23644, 23628, + 23612, 23596, 23580, 23564, 23548, 23532, 23516, 23500, 23484, 23468, + 23452, 23436, 23420, 23404, 23388, 23372, 23356, 23340, 23324, 23308, + 23292, 23276, 23260, 23244, 23228, 23212, 23196, 23180, 23164, 23148, + 23132, 23116, 23100, 23084, 23068, 23052, 23036, 23020, 23004, 22988, + 22972, 22956, 22940, 22924, 22908, 22892, 22876, 22860, 22844, 22828, + 22812, 22796, 22780, 22764, 22748, 22732, 22716, 22700, 22684, 22668, + 22652, 22636, 22620, 22604, 22588, 22572, 22556, 22540, 22524, 22508, + 22492, 22476, 22460, 22444, 22428, 22412, 22396, 22380, 22364, 22348, + 22332, 22316, 22547, 22531, 22515, 22499, 22483, 22467, 22451, 22435, + 22419, 22403, 22387, 22371, 22355, 22339, 22323, 22307, 22291, 22275, + 22259, 22243, 22227, 22211, 22195, 22179, 22163, 22147, 22131, 22115, + 22099, 22083, 22067, 22051, 22035, 22019, 22003, 21987, 21971, 21955, + 21939, 21923, 21907, 21891, 21875, 21859, 21843, 21827, 21811, 21795, + 21779, 21763, 21747, 21731, 21715, 21699, 21683, 21667, 21651, 21635, + 21619, 21603, 21587, 21571, 21555, 21539, 21523, 21507, 21491, 21475, + 21459, 21443, 21427, 21411, 21395, 21379, 21363, 21347, 21331, 21315, + 21299, 21283, 21267, 21251, 21235, 21219, 21203, 21187, 21171, 21155, + 21139, 21123, 21107, 21091, 21075, 21059, 21043, 21027, 21011, 20995, + 20979, 20963, 20947, 20931, 20915, 20899, 20883, 20867, 20851, 20835, + 20819, 20803, 20787, 20771, 20755, 20739, 20723, 20707, 20691, 20675, + 20659, 20643, 20627, 20611, 20595, 20579, 20563, 20547, 20531, 20515, + 20499, 20483, 20467, 20451, 20435, 20419, 20403, 20387, 20371, 20355, + 20339, 20323, 20307, 20291, 20275, 20259, 20243, 20227, 20211, 20195, + 20179, 20163, 20147, 20131, 20115, 20099, 20083, 20067, 20051, 20035, + 20019, 20003, 19987, 19971, 19955, 19939, 19923, 19907, 19891, 19875, + 19859, 19843, 19827, 19811, 19795, 19779, 19763, 19747, 19731, 19715, + 19699, 19683, 19667, 19651, 19635, 19619, 19603, 19587, 19571, 19555, + 19539, 19523, 19507, 19491, 19475, 19459, 19443, 19427, 19411, 19395, + 19379, 19363, 19347, 19331, 19315, 19299, 19283, 19267, 19251, 19235, + 19219, 19203, 19187, 19171, 19155, 19139, 19123, 19107, 19091, 19075, + 19059, 19043, 19027, 19011, 18995, 18979, 18963, 18947, 18931, 18915, + 18899, 18883, 18867, 18851, 18835, 18819, 18803, 18787, 18771, 18755, + 18739, 18723, 18707, 18691, 18675, 18659, 18643, 18627, 18611, 18595, + 18579, 18563, 18547, 18531, 18515, 18499, 18483, 18467, 18451, 18435, + 18419, 18403, 18387, 18371, 18355, 18339, 18323, 18307, 18291, 18275, + 18259, 18243, 18227, 18211, 18195, 18179, 18163, 18147, 18131, 18115, + 18099, 18083, 18067, 18051, 18035, 18019, 18003, 17987, 17971, 17955, + 17939, 17923, 17907, 17891, 17875, 17859, 17843, 17827, 17811, 17795, + 17779, 17763, 17747, 17731, 17715, 17699, 17683, 17667, 17651, 17635, + 17619, 17603, 17587, 17571, 17555, 17539, 17523, 17507, 17491, 17475, + 17459, 17443, 17427, 17411, 17395, 17379, 17363, 17347, 17331, 17315, + 17299, 17283, 17267, 17251, 17235, 17219, 17203, 17187, 17171, 17155, + 17139, 17123, 17107, 17091, 17075, 17059, 17043, 17027, 17011, 16995, + 16979, 16963, 16947, 16931, 16915, 16899, 16883, 16867, 16851, 16835, + 16819, 16803, 16787, 16771, 16755, 16739, 16723, 16707, 16691, 16675, + 16659, 16643, 16627, 16611, 16595, 16579, 16563, 16547, 16531, 16515, + 16499, 16483, 16467, 16451, 16435, 16419, 16403, 16387, 16371, 16355, + 16339, 16323, 16307, 16291, 16275, 16259, 16243, 16227, 16211, 16195, + 16179, 16163, 16147, 16131, 16115, 16099, 16083, 16067, 16051, 16035, + 16019, 16003, 15987, 15971, 15955, 15939, 15923, 15907, 15891, 15875, + 15859, 15843, 15827, 15811, 15795, 15779, 15763, 15747, 15731, 15715, + 15699, 15683, 15667, 15651, 15635, 15619, 15603, 15587, 15571, 15555, + 15539, 15523, 15507, 15491, 15475, 15459, 15443, 15427, 15411, 15395, + 15379, 15363, 15347, 15331, 15315, 15299, 15283, 15267, 15251, 15235, + 15219, 15203, 15187, 15171, 15155, 15139, 15123, 15107, 15091, 15075, + 15059, 15043, 15027, 15011, 14995, 14979, 14963, 14947, 14931, 14915, + 14899, 14883, 14867, 14851, 14835, 14819, 14803, 14787, 14771, 14755, + 14739, 14723, 14707, 14691, 14675, 14659, 14643, 14627, 14611, 14595, + 14579, 14563, 14547, 14531, 14515, 14499, 14483, 14467, 14451, 14435, + 14419, 14403, 14387, 14371, 14355, 14339, 14323, 14307, 14291, 14275, + 14259, 14243, 14227, 14211, 14195, 14179, 14163, 14147, 14131, 14115, + 14099, 14083, 14067, 14051, 14035, 14019, 14003, 13987, 13971, 13955, + 13939, 13923, 13907, 13891, 13875, 13859, 13843, 13827, 13811, 13795, + 13779, 13763, 13747, 13731, 13715, 13699, 13683, 13667, 13651, 13635, + 13619, 13603, 13587, 13571, 13555, 13539, 13523, 13507, 13491, 13475, + 13459, 13443, 13427, 13411, 13395, 13379, 13363, 13347, 13331, 13315, + 13299, 13283, 13267, 13251, 13235, 13219, 13203, 13187, 13171, 13155, + 13139, 13123, 13107, 13091, 13075, 13059, 13043, 13027, 13011, 12995, + 12979, 12963, 12947, 12931, 12915, 12899, 12883, 12867, 12851, 12835, + 12819, 12803, 12787, 12771, 12755, 12739, 12723, 12707, 12691, 12675, + 12659, 12643, 12627, 12611, 12595, 12579, 12563, 12547, 12531, 12515, + 12499, 12483, 12467, 12451, 12435, 12419, 12403, 12387, 12371, 12355, + 12339, 12323, 12307, 12291, 12275, 12259, 12243, 12227, 12211, 12195, + 12179, 12163, 12147, 12131, 12115, 12099, 12083, 12067, 12051, 12035, + 12019, 12003, 11987, 11971, 11955, 11939, 11923, 11907, 11891, 11875, + 11859, 11843, 11827, 11811, 11795, 11779, 11763, 11747, 11731, 11715, + 11699, 11683, 11667, 11651, 11635, 11619, 11603, 11587, 11571, 11555, + 11539, 11523, 11507, 11491, 11475, 11459, 11443, 11427, 11411, 11395, + 12871, 11116, 11100, 11084, 11068, 11052, 14050, 14034, 14018, 14002, + 13986, 13970, 13954, 13938, 13922, 13906, 13890, 13874, 13858, 13842, + 13826, 13810, 13794, 13778, 13762, 13746, 13730, 13714, 13698, 13682, + 13666, 13650, 13634, 13618, 13602, 13586, 13570, 13554, 13538, 13522, + 13506, 13490, 13474, 13458, 13442, 13426, 13410, 13394, 13378, 13362, + 13346, 13330, 13314, 13298, 13282, 13266, 13250, 13234, 13218, 13202, + 13186, 13170, 13154, 13138, 13122, 13106, 13090, 13074, 13058, 13042, + 13026, 13010, 12994, 12978, 12962, 12946, 12930, 12914, 12898, 12882, + 12866, 12850, 12834, 12818, 12802, 12786, 12770, 12754, 12738, 12722, + 12706, 12690, 12674, 12658, 12642, 12626, 12610, 12594, 12578, 12562, + 12546, 12530, 12514, 12498, 12482, 12466, 12450, 12434, 12418, 12402, + 12386, 12370, 12354, 12338, 12322, 12306, 12290, 12274, 12258, 12242, + 12226, 12210, 12194, 12178, 12162, 12146, 12130, 12114, 12098, 12082, + 12066, 12050, 12034, 12018, 12018, 12002, 11986, 11970, 11954, 11938, + 11922, 11906, 11890, 11874, 11858, 11842, 11826, 11810, 11794, 11778, + 11762, 11746, 11730, 11714, 11698, 11682, 11666, 11650, 11634, 11618, + 11602, 11586, 11570, 11554, 11538, 11522, 11506, 11490, 11474, 11458, + 11442, 11426, 11410, 11394, 11378, 11362, 11346, 11330, 11314, 11298, + 11282, 11266, 11250, 11234, 11218, 11202, 11186, 11170, 11154, 11138, + 11122, 11106, 11090, 11074, 11058, 11042, 11026, 11010, 10994, 10978, + 10962, 10946, 10930, 10914, 10898, 10882, 10866, 10850, 10834, 10818, + 10802, 10786, 10770, 10754, 10738, 10722, 10706, 10690, 10674, 10658, + 10642, 10626, 10610, 10594, 10578, 10562, 10546, 10530, 10514, 10498, + 10482, 10466, 10450, 10434, 10418, 10402, 10386, 10370, 10354, 10338, + 10322, 10306, 10290, 10274, 10258, 10242, 10226, 10210, 10194, 10178, + 10162, 10146, 10130, 10114, 10098, 10082, 10066, 10050, 10034, 10018, + 10002, 9986, 9970, 9954, 9938, 9922, 9906, 9890, 9874, 9858, + 9842, 9826, 9810, 9794, 9778, 9762, 9746, 9730, 9714, 9698, + 9682, 9666, 9650, 9634, 9618, 9602, 9586, 9570, 9554, 9538, + 9522, 9506, 9490, 9474, 9458, 9442, 9426, 9410, 9394, 9378, + 9362, 9346, 9330, 9314, 9298, 9282, 9266, 9250, 9234, 9218, + 9202, 9186, 9170, 9154, 9138, 9122, 9106, 9090, 9074, 9058, + 9042, 9026, 9010, 8994, 8978, 8962, 8946, 8930, 8914, 8898, + 8882, 8866, 8850, 8834, 8818, 8802, 8786, 8770, 8754, 8738, + 8722, 8706, 8690, 8674, 8658, 8642, 8626, 8610, 8594, 8578, + 8562, 8546, 8530, 8514, 8498, 8482, 8466, 8450, 8434, 8418, + 8402, 8386, 8370, 8354, 8338, 8322, 8306, 8290, 8274, 8258, + 8242, 8226, 8210, 8194, 8178, 8162, 8146, 8130, 8114, 8098, + 8082, 8066, 8050, 8034, 8018, 8002, 7986, 7970, 7954, 7938, + 7922, 7906, 7890, 7874, 7858, 7842, 7826, 7810, 7794, 7778, + 7762, 7746, 7730, 7714, 7698, 7682, 7666, 7650, 7634, 7618, + 7602, 7586, 7570, 7554, 7538, 7522, 7506, 7490, 7474, 7458, + 7442, 7426, 7410, 7394, 7378, 7362, 7346, 7330, 7314, 7298, + 7282, 7266, 7250, 7234, 7218, 7202, 7186, 7170, 7154, 7138, + 7122, 7106, 7090, 7074, 7058, 7042, 7026, 7010, 6994, 6978, + 6962, 6946, 6930, 6914, 6898, 6882, 6866, 6850, 6834, 6818, + 6802, 6786, 6770, 6754, 6738, 6722, 6706, 6690, 6674, 6658, + 6642, 6626, 6610, 6594, 6578, 6562, 6546, 6530, 6514, 6498, + 6482, 6466, 6450, 6434, 6418, 6402, 6386, 6370, 6354, 6338, + 6322, 6306, 6290, 6274, 6258, 6242, 6226, 6210, 6194, 6178, + 6162, 6146, 6130, 6114, 6098, 6082, 6066, 6050, 6034, 6018, + 6002, 5986, 5970, 5954, 5938, 5922, 5906, 5890, 5874, 5858, + 5842, 5826, 5810, 5794, 5778, 5762, 5746, 5730, 5714, 5698, + 5682, 5666, 5650, 5634, 2835, 2819, 2803, 2787, 2771, 2755, + 2739, 2723, 2707, 2691, 2675, 2659, 2643, 2627, 2611, 2595, + 2579, 2563, 3544, 2531, 2515, 2499, 3483, 2220, 2204, 2188, + 2172, 2156, 2140, 2124, 2108, 2092, 5122, 2869, 5106, 5100, + 2836, 2111, 2095, 2079, 2063, 2047, 2031, 2946, 1884, 1980, + 1967, 1951, 1935, 1919, 1903, 1887, 1871, 1855, 1839, 1823, + 1807, 1791, 1775, 1759, 1743, 1727, 1711, 1695, 1679, 1663, + 1647, 1633, 1500, 1599, 1583, 1567, 1551, 1533, 1519, 1503, + 2412, 1356, 1340, 2473, 1638, 1292, 2072, 4348, 4344, 3614, + 4328, 2227, 1295, 1279, 1263, 1247, 1231, 1215, 1199, 2172, + 1941, 295, 340, 340, 378, 4104, 2137, 2221, 1171, 1157, + 1139, 1107, 451, 907, 3976, 819, +}; + +static const jchar blocks1[] = { + 0, 65535, 63, 4, 4, 253, 189, 125, 61, 65533, + 65469, 65405, 65405, 65266, 65325, 65149, 64639, 64623, 65133, 64893, + 64829, 64765, 64701, 64637, 64573, 64509, 64445, 64381, 64317, 64253, + 64189, 64125, 64301, 63997, 63933, 63869, 63805, 63741, 63677, 63613, + 63549, 63485, 63421, 63357, 63293, 63229, 63165, 63101, 63037, 62973, + 62909, 62845, 62781, 62717, 62653, 62589, 62525, 62461, 62397, 62333, + 62269, 62205, 62141, 62077, 62013, 61949, 61885, 61821, 61757, 61693, + 61629, 61565, 61501, 61437, 61373, 61309, 61245, 61181, 61117, 61053, + 60989, 60925, 60861, 60797, 60733, 60669, 60605, 60541, 60477, 60413, + 60349, 60285, 60221, 60157, 60093, 60029, 59965, 59901, 59837, 59773, + 59709, 59645, 59581, 59517, 59453, 59389, 59325, 59261, 59197, 59133, + 59069, 59005, 58941, 58877, 58813, 58749, 58685, 58621, 58557, 58493, + 58429, 58365, 58301, 58237, 58173, 58109, 58045, 57981, 57917, 57853, + 57789, 57725, 57661, 57597, 57533, 57469, 57405, 57341, 57277, 57213, + 57149, 57085, 57021, 56957, 56893, 56829, 56765, 56701, 56637, 56573, + 56509, 56445, 56381, 56317, 56253, 56189, 56125, 56061, 55997, 55933, + 55869, 55805, 55741, 55677, 55613, 55549, 55485, 55421, 55357, 55293, + 55229, 55165, 55101, 55037, 54973, 54909, 54845, 54781, 54717, 54653, + 54589, 54525, 54461, 54397, 54333, 54269, 54205, 54141, 54077, 54013, + 53949, 53885, 53821, 53757, 53693, 53629, 53565, 53501, 53437, 53373, + 53309, 53245, 53181, 53117, 53053, 52989, 52925, 52861, 52797, 52733, + 52669, 52605, 52541, 52477, 52413, 52349, 52285, 52221, 52157, 52093, + 52029, 51965, 51901, 51837, 51773, 51709, 51645, 51581, 51517, 51453, + 51389, 51325, 51261, 51197, 51133, 51069, 51005, 50941, 50877, 50813, + 50749, 50685, 50621, 50557, 50493, 50429, 50365, 50301, 50237, 50173, + 50109, 50045, 49981, 49917, 49853, 49789, 49725, 49661, 49597, 49533, + 49469, 49405, 49341, 49277, 49213, 49149, 49085, 49021, 48957, 48893, + 48829, 48765, 48701, 48637, 48573, 48509, 48445, 48381, 48317, 48253, + 48189, 48125, 48061, 47997, 47933, 47869, 47805, 47741, 47677, 47613, + 47549, 47485, 47421, 47357, 47293, 47229, 47165, 47101, 47037, 46973, + 46909, 46845, 46781, 46717, 46653, 46589, 46525, 46461, 46397, 46333, + 46269, 46205, 46141, 46077, 46013, 45949, 45885, 45821, 45757, 45693, + 45629, 45565, 45501, 45437, 45373, 45309, 45245, 45181, 45117, 45053, + 44989, 44925, 44861, 44797, 44733, 44669, 44605, 44541, 44477, 44413, + 44349, 44285, 44221, 44157, 44093, 44029, 43965, 43901, 43837, 43773, + 43709, 43645, 43581, 43517, 43453, 43389, 43325, 43261, 43197, 43133, + 43069, 43005, 42941, 42877, 42813, 42749, 42685, 42621, 42557, 42493, + 42429, 42365, 42301, 42237, 42173, 42109, 42045, 41981, 41917, 41853, + 41789, 41725, 41661, 41597, 41533, 41469, 41405, 41341, 41277, 41213, + 41149, 41085, 41021, 40957, 40893, 40829, 40765, 40701, 40637, 40573, + 40509, 40445, 40381, 40317, 40253, 40189, 40125, 40061, 39997, 39933, + 39869, 39805, 39741, 39677, 39613, 39549, 39485, 39421, 39357, 39293, + 39229, 39165, 39101, 39037, 38973, 38909, 38845, 38781, 38717, 38653, + 38589, 38525, 38461, 38397, 38333, 38269, 38205, 38141, 38077, 38013, + 37949, 37885, 37821, 37757, 37693, 37629, 37565, 37501, 37437, 37373, + 37309, 37245, 37181, 37117, 37053, 36989, 36925, 36861, 36797, 36733, + 36669, 36605, 36541, 36477, 36413, 36349, 36285, 36221, 36157, 36093, + 36029, 35965, 35901, 35837, 35773, 35709, 35645, 35581, 35517, 35453, + 35389, 35325, 35261, 35197, 35133, 35069, 35005, 34941, 34877, 34813, + 34749, 34685, 34621, 34557, 34493, 34429, 34365, 34301, 34237, 34173, + 34109, 34045, 33981, 33917, 33853, 33789, 33725, 33661, 33597, 33533, + 33469, 33405, 33341, 33277, 33213, 33149, 33085, 33021, 32957, 32893, + 32829, 32765, 32701, 32637, 32573, 32509, 32445, 32381, 32317, 32253, + 32189, 32125, 32061, 31997, 31933, 31869, 31805, 31741, 31677, 31613, + 31549, 31485, 31421, 31357, 31293, 31229, 31165, 31101, 31037, 30973, + 30909, 30845, 30781, 30717, 30653, 30589, 30525, 30461, 30397, 30333, + 30269, 30205, 30141, 30077, 30013, 29949, 29885, 29821, 29757, 29693, + 29629, 29565, 29501, 29437, 29373, 29309, 29245, 29181, 29117, 29053, + 28989, 28925, 28861, 28797, 28733, 28669, 28605, 28541, 28477, 28413, + 28349, 28285, 28221, 28157, 28093, 28029, 27965, 27901, 27837, 27773, + 27709, 27645, 27581, 27517, 27453, 27389, 27325, 27261, 27197, 27133, + 27069, 27005, 26941, 26877, 26813, 26749, 26685, 26621, 26557, 26493, + 26429, 26365, 26301, 26237, 26173, 26109, 26045, 25981, 25917, 25853, + 25789, 25725, 25661, 25597, 25533, 25469, 25405, 25341, 25277, 25213, + 25149, 25085, 25021, 24957, 24893, 24829, 24765, 24701, 24637, 24573, + 24509, 24445, 24381, 24317, 24253, 24189, 24125, 24061, 23997, 23933, + 23869, 23805, 23741, 23677, 23613, 23549, 23485, 23421, 23357, 23293, + 23229, 23165, 23101, 23037, 22973, 22909, 22845, 22781, 22717, 22653, + 22589, 22525, 22461, 22397, 22333, 22269, 22205, 22141, 22077, 22013, + 21949, 21885, 21821, 21757, 21693, 21629, 21565, 21501, 21437, 21373, + 21309, 21245, 21181, 21117, 21053, 20989, 20925, 20861, 20797, 20733, + 20669, 20605, 20541, 20477, 20413, 20349, 20285, 20221, 20157, 20093, + 20029, 19965, 19901, 19837, 19773, 19709, 19645, 19581, 19517, 19453, + 19389, 19325, 19261, 19197, 19133, 19069, 19005, 18941, 18877, 18813, + 18749, 18685, 18621, 18557, 18493, 18429, 18365, 18301, 18237, 18173, + 18109, 18045, 17981, 17917, 17853, 17789, 17725, 17661, 17597, 17533, + 17469, 17405, 17341, 17277, 17213, 17149, 17085, 17021, 16957, 16893, + 16829, 16765, 16701, 16637, 16573, 16509, 16445, 16381, 16317, 16253, + 16189, 16125, 16061, 15997, 15933, 15869, 15805, 15741, 15677, 15613, + 15549, 15485, 15421, 15357, 15293, 15229, 15165, 15101, 15037, 14973, + 14909, 14845, 14781, 14717, 14653, 14589, 14525, 14461, 14397, 14333, + 14269, 14205, 14141, 14077, 14013, 13949, 13885, 13821, 13757, 13693, + 13629, 13565, 13501, 13437, 13373, 13309, 13245, 13181, 13117, 13053, + 12989, 12925, 12752, 12688, 12624, 12570, 12454, 12283, 12280, 12338, + 12349, 12285, 12221, 12157, 12397, 12374, 11965, 11901, 12340, 12394, + 12451, 12132, 12384, 12197, 11976, 11924, 11820, 11768, 11768, 11542, + 11484, 11426, 11368, 11744, 10813, 10749, 10685, 10621, 10557, 10493, + 10429, 10365, 10301, 10237, 10173, 10109, 10045, 9981, 9917, 9853, + 9789, 9725, 9661, 9597, 9533, 9469, 9405, 9341, 9277, 9213, + 9149, 9085, 9021, 8957, 8893, 8829, 8765, 8701, 8637, 8573, + 8509, 8445, 8381, 8317, 8253, 8189, 8125, 8061, 7997, 7933, + 7869, 7805, 7741, 7677, 7613, 7549, 7485, 7421, 7357, 7293, + 7229, 7165, 7101, 7037, 6973, 6909, 6845, 6781, 6717, 6653, + 6589, 6525, 6461, 6397, 6333, 6269, 6205, 6141, 6077, 6013, + 5949, 5885, 5821, 5757, 5693, 5629, 5565, 5501, 5437, 5373, + 5309, 5245, 5181, 5117, 5053, 4989, 4925, 4861, 4797, 4733, + 4669, 4605, 4541, 4477, 4413, 4349, 4285, 4221, 4157, 4093, + 4029, 3965, 3901, 3837, 3773, 3709, 3645, 3581, 3517, 3453, + 3389, 3325, 3261, 3197, 3133, 3069, 3005, 2941, 2877, 2813, + 2749, 2685, 2621, 2557, 2493, 2429, 2365, 2301, 2237, 2173, + 2109, 2045, 1981, 1917, 1853, 1789, 1725, 1661, 1597, 1533, + 1469, 1405, 1341, 1277, 1213, 1149, 1085, 1021, 957, 893, + 829, 765, 701, 637, +}; + +static const jchar blocks2[] = { + 0, 65408, 65280, 65152, 65024, 64896, 64768, 64640, 64512, 64384, + 64256, 64128, 64000, 63872, 63744, 63616, 63488, 63360, 63232, 63104, + 62976, 62848, 62720, 62592, 62464, 62336, 62208, 62080, 61952, 61824, + 61696, 61568, 61440, 61312, 61184, 61056, 60928, 60800, 60672, 60544, + 60416, 60288, 60160, 60032, 59904, 59776, 59648, 59520, 59392, 59264, + 59136, 59008, 58880, 58752, 58624, 58496, 58368, 58240, 58112, 57984, + 57856, 57728, 57600, 57472, 57344, 57216, 57088, 56960, 56832, 56704, + 56576, 56448, 56320, 56192, 56064, 55936, 55808, 55680, 55552, 55424, + 55296, 55168, 55040, 54912, 54784, 54656, 54528, 54400, 54272, 54144, + 54016, 53888, 53760, 53632, 53504, 53376, 53248, 53120, 52992, 52864, + 52736, 52608, 52480, 52352, 52224, 52096, 51968, 51840, 51712, 51584, + 51456, 51328, 51200, 51072, 50944, 50816, 50688, 50560, 50432, 50304, + 50176, 50048, 49920, 49792, 49664, 49536, 49408, 49280, 49152, 49024, + 48896, 48768, 48640, 48512, 48384, 48256, 48128, 48000, 47872, 47744, + 47616, 47488, 47360, 47232, 47104, 46976, 46848, 46720, 46592, 46464, + 46336, 46208, 46080, 45952, 45824, 45696, 45568, 45440, 45312, 45184, + 45056, 44928, 44800, 44672, 44544, 44416, 44288, 44160, 44032, 43904, + 43776, 43648, 43520, 43392, 43264, 43136, 43008, 42880, 42752, 42624, + 42496, 42368, 42240, 42112, 41984, 41856, 41728, 41600, 41472, 41344, + 41216, 41088, 40960, 40832, 40704, 40576, 40448, 40320, 40192, 40064, + 39936, 39808, 39680, 39552, 39424, 39296, 39168, 39040, 38912, 38784, + 38656, 38528, 38400, 38272, 38144, 38016, 37888, 37760, 37632, 37504, + 37376, 37248, 37120, 36992, 36864, 36736, 36608, 36480, 36352, 36224, + 36096, 35968, 35840, 35712, 35584, 35456, 35328, 35200, 35072, 34944, + 34816, 34688, 34560, 34432, 34304, 34176, 34048, 33920, 33792, 33664, + 33536, 33408, 33280, 33152, 33024, 32896, 32768, 32640, 32512, 32384, + 32256, 32128, 32000, 31872, 31744, 31616, 31488, 31360, 31232, 31104, + 30976, 30848, 30720, 30592, 30464, 30336, 30208, 30080, 29952, 29824, + 29696, 29568, 29440, 29312, 29184, 29056, 28928, 28800, 28672, 28544, + 28416, 28288, 28160, 28032, 27904, 27776, 27648, 27520, 27392, 27264, + 27136, 27008, 26880, 26752, 26624, 26496, 26368, 26240, 26112, 25984, + 25856, 25728, 25600, 25472, 25344, 25216, 25088, 24960, 24832, 24704, + 24576, 24448, 24320, 24192, 24064, 23936, 23808, 23680, 23552, 23424, + 23296, 23168, 23040, 22953, 22912, 22784, 22656, 22528, 22400, 22272, + 22144, 22016, 21888, 21760, 21632, 21504, 21376, 21248, 21120, 20992, + 20864, 20736, 20608, 20480, 20352, 20224, 20096, 19968, 19840, 19712, + 19584, 19456, 19328, 19200, 19072, 18944, 18816, 18688, 18560, 18432, + 18304, 18176, 18048, 17920, 17792, 17664, 17536, 17408, 17280, 17152, + 17024, 16896, 16768, 16640, 16512, 16384, 16256, 16128, 16000, 15872, + 15744, 15616, 15488, 15360, 15232, 15104, 14976, 14848, 14720, 14592, + 14464, 14336, 14208, 14080, 13952, 13824, 13696, 13568, 13440, 13312, + 13184, 13056, 12928, 12800, 12672, 12544, 12416, 12288, 12160, 12032, + 11904, 11776, 11648, 11520, 11392, 11264, 11136, 11008, 10880, 10752, + 10624, 10496, 10368, 10240, 10112, 9984, 9856, 9728, 9600, 9472, + 9344, 9216, 9088, 8960, 8832, 8704, 8576, 8448, 8320, 8192, + 8064, 7936, 7808, 7680, 7552, 7424, 7296, 7168, 7040, 6912, + 6784, 6656, 6528, 6400, 6272, 6144, 6016, 5888, 5760, 5632, + 5504, 5376, 5248, 5120, 4992, 4864, 4736, 4608, 4480, 4352, + 4224, 4096, 3968, 3840, 3712, 3584, 3456, 3328, 3200, 3072, + 2944, 2816, 2688, 2560, 2432, 2304, 2048, 1920, 1792, 1664, + 1634, 1536, 1408, 1280, 1152, 1024, 896, 768, 640, 512, + 384, 256, +}; + +static const jchar blocks14[] = { + 255, 0, 65280, 65168, 65152, 65024, 64896, 64768, 64640, 64512, + 64384, 64256, 64128, 64000, 63872, 63744, 63616, 63488, 63360, 63232, + 63104, 62976, 62848, 62720, 62592, 62464, 62336, 62208, 62080, 61952, + 61824, 61696, 61568, 61440, 61312, 61184, 61056, 60928, 60800, 60672, + 60544, 60416, 60288, 60160, 60032, 59904, 59776, 59648, 59520, 59392, + 59264, 59136, 59008, 58880, 58752, 58624, 58496, 58368, 58240, 58112, + 57984, 57856, 57728, 57600, 57472, 57344, 57216, 57088, 56960, 56832, + 56704, 56576, 56448, 56320, 56192, 56064, 55936, 55808, 55680, 55552, + 55424, 55296, 55168, 55040, 54912, 54784, 54656, 54528, 54400, 54272, + 54144, 54016, 53888, 53760, 53632, 53504, 53376, 53248, 53120, 52992, + 52864, 52736, 52608, 52480, 52352, 52224, 52096, 51968, 51840, 51712, + 51584, 51456, 51328, 51200, 51072, 50944, 50816, 50688, 50560, 50432, + 50304, 50176, 50048, 49920, 49792, 49664, 49536, 49408, 49280, 49152, + 49024, 48896, 48768, 48640, 48512, 48384, 48256, 48128, 48000, 47872, + 47744, 47616, 47488, 47360, 47232, 47104, 46976, 46848, 46720, 46592, + 46464, 46336, 46208, 46080, 45952, 45824, 45696, 45568, 45440, 45312, + 45184, 45056, 44928, 44800, 44672, 44544, 44416, 44288, 44160, 44032, + 43904, 43776, 43648, 43520, 43392, 43264, 43136, 43008, 42880, 42752, + 42624, 42496, 42368, 42240, 42112, 41984, 41856, 41728, 41600, 41472, + 41344, 41216, 41088, 40960, 40832, 40704, 40576, 40448, 40320, 40192, + 40064, 39936, 39808, 39680, 39552, 39424, 39296, 39168, 39040, 38912, + 38784, 38656, 38528, 38400, 38272, 38144, 38016, 37888, 37760, 37632, + 37504, 37376, 37248, 37120, 36992, 36864, 36736, 36608, 36480, 36352, + 36224, 36096, 35968, 35840, 35712, 35584, 35456, 35328, 35200, 35072, + 34944, 34816, 34688, 34560, 34432, 34304, 34176, 34048, 33920, 33792, + 33664, 33536, 33408, 33280, 33152, 33024, 32896, 32768, 32640, 32512, + 32384, 32256, 32128, 32000, 31872, 31744, 31616, 31488, 31360, 31232, + 31104, 30976, 30848, 30720, 30592, 30464, 30336, 30208, 30080, 29952, + 29824, 29696, 29568, 29440, 29312, 29184, 29056, 28928, 28800, 28672, + 28544, 28416, 28288, 28160, 28032, 27904, 27776, 27648, 27520, 27392, + 27264, 27136, 27008, 26880, 26752, 26624, 26496, 26368, 26240, 26112, + 25984, 25856, 25728, 25600, 25472, 25344, 25216, 25088, 24960, 24832, + 24704, 24576, 24448, 24320, 24192, 24064, 23936, 23808, 23680, 23552, + 23424, 23296, 23168, 23040, 22912, 22784, 22656, 22528, 22400, 22272, + 22144, 22016, 21888, 21760, 21632, 21504, 21376, 21248, 21120, 20992, + 20864, 20736, 20608, 20480, 20352, 20224, 20096, 19968, 19840, 19712, + 19584, 19456, 19328, 19200, 19072, 18944, 18816, 18688, 18560, 18432, + 18304, 18176, 18048, 17920, 17792, 17664, 17536, 17408, 17280, 17152, + 17024, 16896, 16768, 16640, 16512, 16384, 16256, 16128, 16000, 15872, + 15744, 15616, 15488, 15360, 15232, 15104, 14976, 14848, 14720, 14592, + 14464, 14336, 14208, 14080, 13952, 13824, 13696, 13568, 13440, 13312, + 13184, 13056, 12928, 12800, 12672, 12544, 12416, 12288, 12160, 12032, + 11904, 11776, 11648, 11520, 11392, 11264, 11136, 11008, 10880, 10752, + 10624, 10496, 10368, 10240, 10112, 9984, 9856, 9728, 9600, 9472, + 9344, 9216, 9088, 8960, 8832, 8704, 8576, 8448, 8320, 8192, + 8064, 7936, 7808, 7680, 7552, 7424, 7296, 7168, 7040, 6912, + 6784, 6656, 6528, 6400, 6272, 6144, 6016, 5888, 5760, 5632, + 5504, 5376, 5248, 5120, 4992, 4864, 4736, 4608, 4480, 4352, + 4224, 4096, 3968, 3840, 3712, 3584, 3456, 3328, 3200, 3072, + 2944, 2816, 2688, 2560, 2432, 2304, 2176, 2048, 1920, 1792, + 1664, 1536, 1408, 1280, 1152, 1024, 896, 768, 640, 512, + 384, 256, +}; + +static const int blocks_length[] = { + 4096, 1024, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, -1, -1, }; +static const jchar* blocks[] = { + blocks0, blocks1, blocks2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, blocks14, NULL, NULL}; + +/** + * Information about each character. The low order 5 bits form the + * character type, the next bit is a flag for non-breaking spaces, and the + * next bit is a flag for mirrored directionality. The high order 9 bits + * form the offset into the attribute tables. Note that this limits the + * number of unique character attributes per plane to 512, which is not a + * problem as of Unicode version 4.0.0, but may soon become one. + */ +static const jchar data0[] = { + 8834, 8962, 9090, 9218, 9346, 9474, 9602, 9730, 9858, 9986, + 10114, 1109, 3225, 1238, 3225, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 143, 271, 143, 399, 271, 15, + 15, 15, 15, 15, 271, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 271, 271, 271, 143, 1801, 1929, 2057, 2185, 2313, + 2441, 2569, 2697, 2825, 2953, 1432, 664, 3161, 3225, 3161, + 664, 664, 3225, 664, 6807, 16256, 16256, 664, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 524, 664, 664, 792, 922, + 792, 664, 664, 1109, 1238, 664, 1305, 1432, 1556, 1432, + 1688, 10908, 1305, 11019, 11147, 6683, 11266, 10396, 664, 6683, + 11403, 10498, 11614, 11659, 11659, 11659, 664, 3329, 3457, 3585, + 3713, 3841, 3969, 4097, 4225, 4353, 4481, 4609, 4737, 4865, + 4993, 5121, 5249, 5377, 5505, 5633, 5761, 5889, 6017, 6145, + 6273, 6401, 6529, 1109, 664, 1238, 6683, 6807, 664, 664, + 664, 3225, 1109, 1238, 664, 664, 664, 664, 664, 664, + 664, 664, 664, 34189, 34318, 34448, 34576, 34704, 34832, 34960, + 33452, 10284, 664, 922, 922, 922, 922, 10396, 10396, 6683, + 10396, 10498, 10717, 3225, 10768, 10396, 6683, 6914, 7042, 7170, + 7298, 7426, 7554, 7682, 7810, 7938, 8066, 8194, 8322, 8450, + 8578, 8706, 19074, 11777, 11777, 11777, 11777, 11777, 11777, 11777, + 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 3225, + 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11906, 15361, 15491, + 15618, 12289, 12418, 15873, 16001, 12289, 12418, 12289, 12418, 12289, + 12418, 12289, 12418, 12801, 12289, 12418, 12289, 12418, 12289, 12418, + 12930, 19074, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 3225, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12162, 16129, 10498, 12289, + 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, + 12418, 12289, 12418, 12289, 12418, 15746, 12289, 12418, 21404, 18310, + 18310, 18310, 18310, 16256, 21511, 21511, 12289, 12418, 12289, 12418, + 12289, 12418, 16256, 16256, 12289, 12418, 16256, 16256, 16256, 16256, + 16256, 16256, 18310, 24584, 16256, 16256, 16256, 16256, 15109, 15109, + 16256, 15109, 16256, 16256, 15109, 15109, 16256, 15109, 16256, 16256, + 15109, 16256, 16256, 11906, 32258, 11906, 16256, 11906, 19074, 33153, + 33153, 33281, 33281, 32515, 6683, 6683, 16256, 18310, 18310, 24584, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 16256, 15109, 16256, 15109, 15109, 15109, 15109, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 16256, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 21784, 21784, 15109, 15109, 15109, 15109, 15361, 15491, 15618, 15361, + 15491, 15618, 15361, 15491, 15618, 12289, 12418, 12289, 12418, 10498, + 10498, 10498, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 16256, 15109, 16256, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 18310, 15109, + 24584, 24584, 18310, 18310, 18310, 16256, 16256, 16256, 24584, 24584, + 16256, 16256, 24584, 24584, 18310, 16256, 16256, 12545, 12674, 12289, + 12418, 12289, 12418, 12289, 12418, 10498, 12289, 12418, 12289, 12418, + 12289, 12418, 12289, 12418, 11906, 11906, 11906, 11906, 11906, 30850, + 16256, 16256, 16256, 16256, 6683, 6683, 16256, 16256, 16256, 16256, + 18052, 16256, 16256, 16256, 664, 16256, 21633, 21633, 21633, 21633, + 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, + 21633, 21633, 16256, 16256, 18052, 21784, 21784, 21784, 21784, 21784, + 21784, 21404, 21404, 21404, 21404, 21404, 18310, 18310, 21404, 21404, + 21404, 21404, 21404, 21404, 18310, 21404, 21404, 21404, 21404, 21404, + 21404, 16256, 16256, 21404, 15109, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 19842, 19970, 20097, 20097, 20097, 20226, 20354, 10498, 12289, 12418, + 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 11906, 12289, + 12418, 12289, 12418, 12289, 12418, 14721, 12289, 12418, 14721, 10498, + 10498, 12289, 12418, 14721, 12289, 17666, 10498, 10498, 17666, 10498, + 10498, 10498, 10498, 17666, 10498, 17794, 17794, 10498, 10498, 10498, + 10498, 17410, 10498, 10498, 17538, 10498, 10498, 10498, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 16386, 16514, 10498, 16642, 16642, + 10498, 16770, 10498, 16898, 10498, 10498, 10498, 10498, 13057, 12289, + 12418, 12289, 12418, 13185, 12289, 12418, 13313, 13313, 12289, 12418, + 10498, 13441, 13569, 13697, 12289, 12418, 13313, 13825, 13954, 14081, + 14209, 12289, 12418, 10498, 10498, 14081, 14337, 14466, 14593, 12418, + 14849, 14849, 12289, 12418, 12289, 12418, 14977, 12289, 12418, 10498, + 15109, 12289, 12418, 10498, 15234, 18310, 18310, 18310, 18310, 18310, + 18438, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 16256, 18310, 18310, 18310, 22168, 18310, 18310, 22168, 18310, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 24584, 16256, 16256, 16256, 16256, 15109, 15109, 16256, 15109, + 15109, 15109, 15109, 16256, 16256, 16256, 15109, 15109, 16256, 15109, + 16256, 15109, 15109, 16256, 15109, 15109, 16256, 15109, 15109, 16256, + 16256, 18310, 16256, 24584, 24584, 24584, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 16256, 15109, 15109, 15109, 16256, + 16256, 16256, 16256, 24584, 24584, 21784, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 24464, 24464, 24464, 10396, 10396, 16256, 16256, 16256, + 664, 664, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, + 25737, 25865, 16256, 16256, 16256, 16256, 16256, 16256, 18310, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 16256, + 15109, 15109, 16256, 16256, 16256, 15109, 15109, 15109, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 15109, + 15109, 15109, 16256, 16256, 16256, 21890, 21890, 21890, 21890, 21890, + 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, + 21890, 11906, 16256, 21784, 22036, 16256, 16256, 16256, 16256, 16256, + 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 27541, 27670, 16642, + 10498, 10498, 17026, 10498, 10498, 10498, 10498, 17154, 17282, 10498, + 10498, 10498, 10498, 10498, 17282, 22416, 22416, 22416, 22416, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 1432, 22552, 10396, + 10396, 20097, 10396, 10396, 10396, 10396, 20097, 10396, 10396, 10498, + 20097, 20097, 20097, 10498, 10498, 17922, 10498, 10498, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, + 10498, 10498, 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18052, + 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18180, 18180, + 18052, 18052, 18052, 18052, 18052, 6683, 6683, 6683, 6683, 6683, + 6683, 6683, 6683, 6683, 18052, 6683, 22036, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 18052, + 18052, 6683, 6683, 6683, 6683, 18180, 18180, 18180, 18180, 18180, + 18180, 18180, 18180, 18180, 18180, 18052, 18052, 6683, 6683, 6683, + 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, + 6683, 6683, 6683, 11906, 32258, 11906, 16256, 11906, 19074, 32769, + 32769, 32769, 32769, 32515, 6683, 6683, 6683, 10396, 44170, 44298, + 44426, 44554, 44682, 44810, 44938, 45066, 45194, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 16256, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 16256, 21404, 21404, 25995, 26123, 26251, 26379, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 16256, 10396, 16256, 10396, 10396, 10396, + 10396, 16256, 10396, 10396, 10396, 10396, 16256, 16256, 10396, 10396, + 10396, 10396, 10396, 21404, 10396, 10396, 10396, 10396, 10396, 3225, + 3225, 3225, 3225, 3225, 27541, 27670, 664, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 1109, 1238, 1109, 1238, 1109, + 1238, 1109, 1238, 29579, 29707, 29835, 29963, 30091, 30219, 30347, + 30475, 30603, 43915, 29579, 29707, 29835, 29963, 30091, 30219, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, 16256, + 16256, 16256, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 24584, 24584, 16256, 16256, + 16256, 24584, 24584, 24584, 16256, 24584, 24584, 24584, 18310, 16256, + 16256, 18310, 24584, 24584, 16256, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 15109, 15109, 15109, 16256, 15109, + 16256, 15109, 16256, 16256, 15109, 15109, 16256, 15109, 15109, 15109, + 15109, 15109, 16256, 15109, 15109, 16256, 24584, 18310, 18310, 18310, + 18310, 16256, 16256, 24584, 24584, 16256, 16256, 24584, 24584, 18310, + 16256, 16256, 20482, 20610, 20738, 10498, 20865, 20994, 3225, 12289, + 12418, 21121, 12289, 12418, 16256, 16256, 16256, 16256, 6683, 6683, + 18561, 664, 18689, 18689, 18689, 16256, 18817, 16256, 18945, 18945, + 11777, 11777, 16256, 11777, 11777, 11777, 11777, 11777, 11777, 11777, + 11777, 11777, 19202, 19330, 19330, 19330, 12034, 12034, 19458, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 19586, 19714, + 19714, 16256, 18310, 18310, 24584, 16256, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 16256, 16256, 16256, 15109, 15109, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 16256, 15109, 16256, 16256, 16256, 15109, 15109, 15109, 15109, 16256, + 16256, 18310, 15109, 24584, 24584, 18310, 24584, 24584, 24584, 24584, + 24584, 24584, 18310, 18310, 18310, 16256, 16256, 16256, 16256, 21249, + 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, + 21249, 21249, 21249, 21249, 21249, 20610, 20610, 20610, 20610, 20610, + 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, + 20610, 20097, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, + 12289, 12418, 12289, 12418, 12289, 12418, 16256, 16256, 16256, 16256, + 16256, 16256, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, + 25737, 25865, 27403, 27403, 27403, 27403, 27403, 27403, 21404, 18310, + 21404, 18310, 21404, 18310, 27541, 27670, 27541, 27670, 24584, 24584, + 18310, 18310, 18310, 16256, 18310, 16256, 24584, 24584, 24584, 24584, + 24584, 24584, 24584, 24584, 18310, 24584, 24584, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 24584, 24584, 24584, 24584, 18310, + 16256, 16256, 21784, 21784, 21784, 21784, 21784, 21784, 21784, 21784, + 24841, 24969, 25097, 25225, 25353, 25481, 25609, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 11906, 11906, + 11906, 11906, 11906, 16256, 16256, 16256, 16256, 16256, 22277, 18310, + 22277, 22277, 16256, 22277, 22277, 16256, 22277, 22277, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, + 22277, 22277, 16256, 16256, 16256, 16256, 16256, 24584, 24584, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 15109, 16256, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 18310, 15109, + 24584, 18310, 18310, 18310, 18310, 18310, 16256, 18310, 18310, 24584, + 16256, 24584, 24584, 18310, 16256, 16256, 664, 664, 792, 922, + 792, 664, 664, 1109, 1238, 664, 1305, 1432, 1556, 1432, + 1688, 22277, 22277, 22277, 22168, 22168, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 24584, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 11659, 11659, 11659, 11659, + 11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 29579, 22921, + 23049, 23177, 23305, 23433, 23561, 23689, 23817, 23945, 24073, 792, + 24216, 24216, 22552, 22661, 22661, 22661, 22661, 22552, 22661, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 22416, 21511, 18310, 21511, + 21511, 21511, 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, + 16256, 16256, 16256, 22552, 16256, 16256, 16256, 22552, 22552, 22552, + 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, + 22552, 16256, 24464, 22788, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 16256, 16256, 22661, 22661, 22661, + 22661, 22661, 16256, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 24841, 24969, + 25097, 25225, 25353, 25481, 25609, 25737, 25865, 26763, 27787, 27915, + 28043, 28171, 28299, 28427, 28555, 28683, 26891, 28811, 16256, 16256, + 16256, 1801, 1929, 2057, 2185, 2313, 2441, 2569, 2697, 2825, + 2953, 22661, 22661, 22661, 24348, 24348, 22661, 18310, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 16256, 16256, 24464, 24464, 24464, 24464, 16256, + 16256, 16256, 16256, 16256, 16256, 24464, 24464, 24464, 24464, 24464, + 24464, 18310, 18310, 18310, 18310, 18310, 22788, 22788, 18310, 18310, + 10396, 18310, 18310, 18310, 18310, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 50458, 10396, 16256, + 16256, 18310, 22661, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 1238, 664, 1109, + 1238, 664, 6807, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 16256, 16256, 24584, 24584, 16256, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 15109, + 15109, 15109, 15109, 15109, 16256, 16256, 16256, 16256, 18310, 18310, + 24584, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 27541, 27670, 16256, 16256, 16256, 524, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 6807, 18052, 18052, 18052, 15109, 15109, 15109, 18052, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 18310, 15109, 24584, 24584, 24584, + 24584, 24584, 16256, 27142, 24584, 24584, 16256, 24584, 24584, 18310, + 18310, 16256, 16256, 16256, 16256, 18310, 18310, 16256, 16256, 18310, + 18310, 18310, 16256, 16256, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 16256, 16256, 18310, 18310, 6683, 6683, 18052, 18052, 15109, + 18310, 18310, 18310, 18310, 16256, 16256, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 21784, 16256, + 16256, 16256, 16256, 15109, 15109, 18310, 18310, 21784, 21784, 24713, + 24841, 24969, 25097, 25225, 25353, 25481, 25609, 25737, 25865, 21784, + 21784, 16256, 16256, 16256, 16256, 15109, 15109, 18310, 18310, 16256, + 16256, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, 25737, + 25865, 16256, 16256, 15109, 15109, 16256, 16256, 15109, 15109, 922, + 922, 25995, 26123, 26251, 26379, 26507, 26635, 21404, 16256, 16256, + 16256, 16256, 16256, 18310, 18310, 15109, 15109, 15109, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 18310, 15109, 15109, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 16256, 16256, 16256, 16256, 922, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 18052, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 21784, 18310, 18310, 15109, 15109, 15109, + 15109, 16256, 16256, 16256, 16256, 24713, 24841, 24969, 25097, 25225, + 25353, 25481, 25609, 25737, 25865, 21784, 21784, 21784, 21784, 21784, + 21784, 26763, 26891, 27019, 10396, 10396, 10396, 10396, 10396, 10396, + 922, 10396, 16256, 16256, 16256, 16256, 16256, 18310, 24584, 24584, + 24584, 24584, 16256, 18310, 18310, 18310, 16256, 18310, 18310, 18310, + 18310, 16256, 16256, 15109, 15109, 15109, 15109, 16256, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 18310, 15109, 24584, 27142, 24584, + 18310, 18310, 18310, 16256, 16256, 24584, 24584, 24584, 16256, 24584, + 24584, 24584, 18310, 16256, 16256, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 16256, 16256, 18310, 16256, 16256, 16256, 16256, + 24584, 24584, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 21784, 21784, 21784, 28938, 29066, 15109, + 18310, 15109, 15109, 18310, 18310, 18310, 18310, 18310, 18310, 16256, + 18310, 18310, 15109, 16256, 16256, 15109, 15109, 15109, 15109, 15109, + 16256, 18052, 16256, 18310, 18310, 18310, 18310, 18310, 18310, 16256, + 16256, 15109, 21404, 21404, 21404, 21784, 21784, 21784, 21784, 21784, + 21784, 21784, 21784, 27320, 21784, 21784, 21784, 18310, 24584, 18310, + 16256, 16256, 16256, 18310, 18310, 24584, 18310, 16256, 16256, 16256, + 16256, 16256, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 24584, + 24584, 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 20097, + 20097, 10396, 20097, 10498, 15109, 15109, 15109, 15109, 10498, 10396, + 10396, 16256, 10498, 20097, 20097, 20097, 20097, 20097, 20097, 20097, + 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 29194, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, 15109, 18310, + 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 15109, 15109, 18310, 18310, 18310, 21784, 21784, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 15109, 16256, 18310, 18310, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 29328, 29328, 24584, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 24584, 24584, 24584, 24584, 18310, + 18310, 30728, 30728, 30728, 16256, 16256, 16256, 16256, 18310, 18310, + 18310, 18310, 21784, 21784, 21784, 18052, 21784, 21784, 21784, 922, + 15109, 18310, 16256, 16256, 43275, 43403, 43531, 43659, 43787, 29579, + 29707, 29835, 29963, 30091, 30219, 30347, 30475, 30603, 43915, 29451, + 29579, 29707, 29835, 29963, 30091, 30219, 30347, 30475, 30603, 16256, + 16256, 16256, 16256, 16256, 16256, 664, 664, 664, 664, 664, + 664, 22036, 664, 664, 664, 664, 18310, 18310, 18310, 524, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 18310, 16256, 16256, 16256, 16256, 16256, 16256, 20097, 20097, 20097, + 10498, 10396, 20097, 10396, 10396, 10396, 20097, 20097, 20097, 20097, + 20097, 10396, 10396, 3225, 10396, 3225, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, + 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3161, 3161, + 3161, 3161, 3161, 3161, 3225, 3225, 1109, 1238, 3225, 3225, + 3225, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, 1109, + 1238, 1109, 1238, 1109, 1238, 3225, 3225, 3161, 3161, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3225, 3161, 3225, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3161, 3225, 3161, 3161, 3161, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3161, + 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3225, 3161, + 3225, 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3225, 3225, 3161, 3225, 3161, 3225, 3225, 3161, 3225, + 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3225, 3225, 3161, 3225, 3225, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3225, + 3225, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3225, 3225, + 3225, 3225, 3225, 3225, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3225, 3225, 10396, 10396, 10396, 10396, 10396, 3225, 3225, + 10396, 10396, 10396, 10396, 20097, 10396, 35969, 10396, 20097, 10396, + 36097, 36225, 20097, 20097, 10908, 10498, 18052, 18052, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 16256, 16256, + 16256, 16256, 30978, 30978, 30978, 30978, 30978, 30978, 30978, 30978, + 31105, 31105, 31105, 31105, 31105, 31105, 31105, 31105, 30978, 30978, + 30978, 30978, 30978, 30978, 16256, 16256, 31105, 31105, 31105, 31105, + 31105, 31105, 16256, 16256, 11906, 30978, 19074, 30978, 19074, 30978, + 19074, 30978, 16256, 31105, 16256, 31105, 16256, 31105, 16256, 31105, + 31234, 31234, 31362, 31362, 31362, 31362, 31490, 31490, 31618, 31618, + 31746, 31746, 31874, 31874, 16256, 16256, 32002, 32002, 32002, 32002, + 32002, 32002, 32002, 32002, 32131, 32131, 32131, 32131, 32131, 32131, + 32131, 32131, 30978, 30978, 11906, 32258, 11906, 16256, 11906, 19074, + 31105, 31105, 32385, 32385, 32515, 6683, 32642, 6683, 30978, 30978, + 19074, 19074, 16256, 16256, 11906, 19074, 31105, 31105, 32897, 32897, + 16256, 6683, 6683, 6683, 30978, 30978, 19074, 19074, 11906, 20738, + 11906, 19074, 31105, 31105, 33025, 33025, 21121, 6683, 6683, 6683, + 524, 524, 524, 524, 524, 524, 524, 33452, 524, 524, + 524, 33548, 24464, 24464, 29328, 33680, 22036, 33844, 22036, 22036, + 22036, 22036, 664, 664, 33949, 34078, 27541, 33949, 33949, 34078, + 27541, 33949, 1432, 664, 1432, 16256, 664, 1432, 664, 664, + 22036, 27541, 27670, 27541, 27670, 27541, 27670, 792, 792, 792, + 792, 792, 664, 664, 664, 664, 10717, 11614, 664, 664, + 664, 664, 6807, 35083, 10498, 16256, 16256, 35211, 35339, 35467, + 35595, 35723, 35851, 1305, 1305, 3225, 1109, 1238, 10498, 35083, + 11403, 11019, 11147, 35211, 35339, 35467, 35595, 35723, 35851, 1305, + 1305, 3225, 1109, 1238, 16256, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 21511, 21511, + 21511, 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3225, 3225, + 3225, 3225, 3225, 3161, 3161, 3161, 3225, 3225, 3161, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3225, 3225, + 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3161, 3161, 3161, + 3161, 3225, 3161, 1305, 1305, 3225, 3161, 3161, 3225, 3225, + 3225, 3161, 3161, 3161, 3161, 3225, 3161, 3225, 3161, 3225, + 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3161, 3161, 3225, + 3225, 1109, 1238, 1109, 1238, 3161, 3225, 3225, 3225, 3225, + 20097, 10498, 10498, 10498, 10498, 10396, 3225, 16256, 16256, 16256, + 16256, 36362, 36490, 36618, 36746, 36874, 37002, 37130, 37258, 37386, + 37514, 37642, 37770, 37898, 38026, 38154, 38282, 38410, 38538, 38666, + 38794, 38922, 39050, 39178, 39306, 39434, 39562, 39690, 39818, 39946, + 40074, 40202, 40330, 40458, 40586, 40714, 40842, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 3225, + 10396, 10396, 3225, 10396, 10396, 3225, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 3161, 3161, 3161, 3161, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 1109, 1238, 10396, 10396, 10396, 10396, 10396, + 10396, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 10396, 10396, 16256, + 21404, 48267, 48395, 48523, 48651, 48779, 48907, 49035, 49163, 49291, + 49419, 49547, 49675, 49803, 49931, 50059, 30347, 30475, 30603, 43915, + 10396, 16256, 16256, 16256, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 41355, 41483, 41611, 41739, 41867, 41995, 42123, + 42251, 11403, 11019, 11147, 35211, 35339, 35467, 35595, 35723, 35851, + 40971, 41099, 41227, 41355, 41483, 41611, 41739, 41867, 41995, 42123, + 42251, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 21404, 10396, 10396, 10396, 10396, 21404, 21404, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 25995, 26123, 26251, 26379, 45707, 45835, + 45963, 46091, 46219, 26763, 21404, 21404, 21404, 21404, 21404, 21404, + 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, + 42396, 42396, 42396, 42396, 42396, 42396, 42524, 42524, 42524, 42524, + 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, + 42524, 42524, 35083, 42635, 42763, 42891, 43019, 43147, 22036, 18052, + 18052, 18052, 18052, 18052, 10396, 10396, 45322, 45450, 45578, 18052, + 15109, 664, 10396, 10396, 10396, 16256, 16256, 16256, 10396, 16256, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 3225, 3225, + 3161, 3161, 3161, 3161, 1109, 1238, 1109, 1238, 1109, 1238, + 16256, 16256, 16256, 16256, 524, 664, 664, 664, 10396, 18052, + 15109, 44042, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, + 10396, 10396, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, + 22036, 27541, 27670, 27670, 10396, 46347, 46475, 46603, 46731, 46859, + 46987, 47115, 47243, 47371, 47499, 47627, 47755, 47883, 48011, 48139, + 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, + 50195, 50195, 50195, 50195, 50195, 50195, 50322, 50322, 50322, 50322, + 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, + 50322, 50322, 11906, 11906, 11906, 19074, 19074, 11906, 11906, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 22277, 22277, 1305, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 16256, 22277, 22277, 22277, 22277, + 22277, 16256, 22277, 16256, 664, 22036, 22036, 6807, 6807, 27541, + 27670, 27541, 27670, 27541, 27670, 27541, 27670, 27541, 27670, 27541, + 27670, 664, 664, 27541, 27670, 664, 664, 664, 664, 6807, + 6807, 6807, 664, 664, 1305, 1556, 3225, 3225, 3225, 16256, + 664, 922, 792, 664, 16256, 16256, 16256, 16256, 8834, 8962, + 9090, 9218, 9346, 9474, 9602, 9730, 9858, 9986, 10114, 1109, + 3225, 1238, 3225, 1109, 922, 922, 3225, 6683, 10396, 922, + 922, 16256, 10396, 3225, 3225, 3225, 3225, 10396, 10396, 16256, +}; + +static const jchar data1[] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 128, 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, 128, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 128, + 5, 5, 128, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 128, 128, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6658, 6658, 6658, + 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, + 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, + 6658, 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, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 128, 128, 128, 128, 128, + 280, 408, 540, 128, 128, 128, 128, 651, 779, 907, + 1035, 1163, 1291, 1419, 1547, 1675, 1803, 1931, 2059, 2187, + 2315, 2443, 2571, 2699, 2827, 2955, 3083, 3211, 3339, 3467, + 3595, 3723, 3851, 3979, 4107, 4235, 4363, 4491, 4619, 4747, + 4875, 5003, 5131, 5259, 5387, 5515, 5643, 5771, 5899, 6027, + 6155, 6283, 128, 128, 128, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 8200, 8200, 8326, 8326, 8326, 540, 540, 540, + 8200, 8200, 8200, 8200, 8200, 8200, 8464, 8464, 8464, 8464, + 8464, 8464, 8464, 8464, 8326, 8326, 8326, 8326, 8326, 540, + 540, 8326, 8326, 8326, 8326, 8326, 8326, 8326, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 8326, 8326, + 8326, 8326, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 128, 128, 128, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 6410, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 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, 128, 651, + 1163, 1803, 2315, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 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, 128, 280, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 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, 128, + 128, 6793, 6921, 7049, 7177, 7305, 7433, 7561, 7689, 7817, + 7945, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 8069, 8069, 8069, 8069, 8069, 8069, 128, + 128, 8069, 128, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 128, 8069, 8069, + 128, 128, 128, 8069, 128, 128, 8069, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 8705, 8985, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8985, + 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8985, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 128, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 128, 128, 128, 128, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 128, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 128, 8705, + 128, 128, 128, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 128, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8705, 128, 8705, 8705, 128, 128, 8705, + 128, 128, 8705, 8705, 128, 128, 8705, 8705, 8705, 8705, + 128, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, + 8834, 8834, 8834, 128, 8834, 128, 8834, 8834, 8834, 8834, + 8705, 8705, 128, 8705, 8705, 8705, 8705, 128, 128, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 128, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 128, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8705, 8705, 128, 8705, 8705, 8705, 8705, 128, + 8834, 8834, 8834, 8985, 8834, 8834, 8834, 8834, 8834, 8834, + 128, 128, 128, 128, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, +}; + +static const jchar data2[] = { + 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, 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, 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, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, +}; + +static const jchar data14[] = { + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, +}; + +static const int data_length[] = { + 3960, 1504, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 383, -1, -1, }; +static const jchar* data[] = { + data0, data1, data2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, data14, NULL, NULL}; + + +/** + * This is the attribute table for computing the numeric value of a + * character. The value is -1 if Unicode does not define a value, -2 + * if the value is not a positive integer, otherwise it is the value. + */ +static const jshort numValue0[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, + 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, + -1, -1, 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, -1, -1, -1, -1, -1, -1, 2, 3, -1, 1, -1, + -2, -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, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, -1, + 16, 10, 100, 1000, -1, -1, -2, -1, -1, 20, 30, 40, 50, + 60, 70, 80, 90, 10000, 17, 18, 19, -1, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 9, -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, 4, 5, 6, 7, 8, 9, -1, -1, -1, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 50, 100, 500, + 1000, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 50, 100, 500, 1000, 1000, 5000, 10000, -1, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, -1, -1, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 10, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 20, 30, 5, 6, 7, 8, 9, 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, -1, -1, -1, +}; + +static const jshort numValue1[] = { + -1, -1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, + 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000, 5000, 6000, 7000, + 8000, 9000, 10000, 20000, 30000, -3, -4, -5, -6, -7, -8, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, + -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, +}; + +static const jshort numValue2[] = { + -1, -1, +}; + +static const jshort numValue14[] = { + -1, -1, -1, +}; + +static const int numValue_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* numValue[] = { + numValue0, numValue1, numValue2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, numValue14, NULL, NULL}; + + + +/** + * This is the attribute table for computing the uppercase representation + * of a character. The value is the difference between the character and + * its uppercase version. + */ +static const jshort upper0[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -32, -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, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, -32, 121, 0, -1, 0, -232, 0, -300, 0, 0, + 0, 0, 0, 0, 0, 97, 0, 0, 0, 130, 0, 0, 0, + 0, 0, 56, 0, -1, -2, -79, 0, 0, 0, 0, -210, -206, + -205, -202, -203, -207, -209, -211, -213, -214, -218, -217, -219, 0, 0, + 0, 84, 0, 0, 0, 0, 0, -38, -37, -31, -64, -63, -62, + -57, 0, -47, -54, -86, -80, 7, 0, -96, 0, 0, 0, 0, + 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -59, 8, 0, 74, 86, 100, + 128, 112, 126, 8, 0, 9, 0, 0, -7205, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -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, +}; + +static const jshort upper1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -40, 0, 0, 0, 0, 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 jshort upper2[] = { + 0, 0, +}; + +static const jshort upper14[] = { + 0, 0, 0, +}; + +static const int upper_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* upper[] = { + upper0, upper1, upper2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, upper14, NULL, NULL}; + + +/** + * This is the attribute table for computing the lowercase representation + * of a character. The value is the difference between the character and + * its lowercase version. + */ +static const jshort lower0[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 1, 0, -199, 0, -121, 0, 210, 206, + 205, 79, 202, 203, 207, 0, 211, 209, 213, 0, 214, 218, 217, + 219, 0, 0, 2, 1, 0, 0, -97, -56, -130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 38, 37, 64, 63, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -60, 0, -7, 80, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, + 0, 0, 0, 0, -8, 0, -74, -9, 0, -86, -100, -112, -128, + -126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -7517, -8383, -8262, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 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, +}; + +static const jshort lower1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, + 0, 0, 0, 0, 0, 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 jshort lower2[] = { + 0, 0, +}; + +static const jshort lower14[] = { + 0, 0, 0, +}; + +static const int lower_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* lower[] = { + lower0, lower1, lower2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, lower14, NULL, NULL}; + + +/** + * This is the attribute table for computing the directionality class + * of a character. At present, the value is in the range 0 - 18 if the + * character has a direction, otherwise it is -1. + */ +static const jbyte direction0[] = { + 9, 11, 10, 12, 12, 13, 5, 5, 13, 13, 5, 7, 5, 4, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 13, 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, 13, 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, 7, 13, 0, 13, 13, 5, 3, 3, 0, 3, 13, 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, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 8, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, + 0, 13, 1, 1, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 9, 1, 13, 13, + 13, 12, 10, 14, 16, 18, 15, 17, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 2, +}; + +static const jbyte direction1[] = { + 0, -1, 0, 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, 1, 0, 8, 9, 13, 0, 0, 0, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, +}; + +static const jbyte direction2[] = { + 0, -1, +}; + +static const jbyte direction14[] = { + -1, 9, 8, +}; + +static const int direction_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jbyte* direction[] = { + direction0, direction1, direction2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, direction14, NULL, NULL}; + + +/** + * This is the listing of titlecase special cases (all other character + * can use <code>upper</code> to determine their titlecase). The listing + * is a sequence of character pairs; converting the first character of the + * pair to titlecase produces the second character. + */ +static const jchar title[] = { + 452, 453, 453, 453, 454, 453, 455, 456, 456, 456, + 457, 456, 458, 459, 459, 459, 460, 459, 497, 498, + 498, 498, 499, 498, + }; +/** Length of title. */ +static const int title_length = 24; + +#endif /* __JAVA_CHARTABLES_H__ */ |