diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index 5dae6b2da6d..4713fd46342 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -62,3 +62,4 @@ e1176f86805fe07fd9fb9da065dc51b47712ce76 jdk7-b82
cf26288a114be67c39f2758959ce50b60f5ae330 jdk7-b85
433a60a9c0bf1b26ee7e65cebaa89c541f497aed jdk7-b86
6b1069f53fbc30663ccef49d78c31bb7d6967bde jdk7-b87
+82135c848d5fcddb065e98ae77b81077c858f593 jdk7-b88
diff --git a/corba/.hgtags b/corba/.hgtags
index 1fa1c41ad29..dc6713f7452 100644
--- a/corba/.hgtags
+++ b/corba/.hgtags
@@ -62,3 +62,4 @@ fde0df7a2384f7fe33204a79678989807d9c2b98 jdk7-b83
c67a9df7bc0ca291f08f9a9cc05cb78ea15d25e6 jdk7-b85
6253e28826d16cf1aecc39ce04c8de1f6bf2df5f jdk7-b86
09a41111a401d327f65e453384d976a10154d9ea jdk7-b87
+39e14d2da687c7e592142137517aaf689544820f jdk7-b88
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index df06313deca..76dc8e725d3 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -86,3 +86,4 @@ ffc8d176b84bcfb5ac21302b4feb3b0c0d69b97c jdk7-b84
bf823ef06b4f211e66988d76a2e2669be5c0820e jdk7-b86
07226e9eab8f74b37346b32715f829a2ef2c3188 hs18-b01
e7e7e36ccdb5d56edd47e5744351202d38f3b7ad jdk7-b87
+4b60f23c42231f7ecd62ad1fcb6a9ca26fa57d1b jdk7-b88
diff --git a/hotspot/src/share/vm/ci/ciEnv.cpp b/hotspot/src/share/vm/ci/ciEnv.cpp
index 90b8b0c760b..5e3eee4f405 100644
--- a/hotspot/src/share/vm/ci/ciEnv.cpp
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp
@@ -385,11 +385,6 @@ ciKlass* ciEnv::get_klass_by_name_impl(ciKlass* accessing_klass,
KILL_COMPILE_ON_FATAL_(fail_type));
}
- if (found_klass != NULL) {
- // Found it. Build a CI handle.
- return get_object(found_klass)->as_klass();
- }
-
// If we fail to find an array klass, look again for its element type.
// The element type may be available either locally or via constraints.
// In either case, if we can find the element type in the system dictionary,
@@ -414,6 +409,11 @@ ciKlass* ciEnv::get_klass_by_name_impl(ciKlass* accessing_klass,
}
}
+ if (found_klass != NULL) {
+ // Found it. Build a CI handle.
+ return get_object(found_klass)->as_klass();
+ }
+
if (require_local) return NULL;
// Not yet loaded into the VM, or not governed by loader constraints.
// Make a CI representative for it.
diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.cpp b/hotspot/src/share/vm/classfile/loaderConstraints.cpp
index 0a8693403d1..d4df39e4034 100644
--- a/hotspot/src/share/vm/classfile/loaderConstraints.cpp
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.cpp
@@ -334,33 +334,6 @@ klassOop LoaderConstraintTable::find_constrained_klass(symbolHandle name,
return NULL;
}
-
-klassOop LoaderConstraintTable::find_constrained_elem_klass(symbolHandle name,
- symbolHandle elem_name,
- Handle loader,
- TRAPS) {
- LoaderConstraintEntry *p = *(find_loader_constraint(name, loader));
- if (p != NULL) {
- assert(p->klass() == NULL, "Expecting null array klass");
-
- // The array name has a constraint, but it will not have a class. Check
- // each loader for an associated elem
- for (int i = 0; i < p->num_loaders(); i++) {
- Handle no_protection_domain;
-
- klassOop k = SystemDictionary::find(elem_name, p->loader(i), no_protection_domain, THREAD);
- if (k != NULL) {
- // Return the first elem klass found.
- return k;
- }
- }
- }
-
- // No constraints, or else no klass loaded yet.
- return NULL;
-}
-
-
void LoaderConstraintTable::ensure_loader_constraint_capacity(
LoaderConstraintEntry *p,
int nfree) {
diff --git a/hotspot/src/share/vm/classfile/loaderConstraints.hpp b/hotspot/src/share/vm/classfile/loaderConstraints.hpp
index 53ce146b168..2ea19ebdaa3 100644
--- a/hotspot/src/share/vm/classfile/loaderConstraints.hpp
+++ b/hotspot/src/share/vm/classfile/loaderConstraints.hpp
@@ -66,9 +66,6 @@ public:
// bool is_method, TRAPS)
klassOop find_constrained_klass(symbolHandle name, Handle loader);
- klassOop find_constrained_elem_klass(symbolHandle name, symbolHandle elem_name,
- Handle loader, TRAPS);
-
// Class loader constraints
diff --git a/hotspot/src/share/vm/classfile/systemDictionary.cpp b/hotspot/src/share/vm/classfile/systemDictionary.cpp
index 1db0a5cfb15..83f8717cf65 100644
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp
@@ -2178,9 +2178,8 @@ klassOop SystemDictionary::find_constrained_instance_or_array_klass(
// a loader constraint that would require this loader to return the
// klass that is already loaded.
if (FieldType::is_array(class_name())) {
- // Array classes are hard because their klassOops are not kept in the
- // constraint table. The array klass may be constrained, but the elem class
- // may not be.
+ // For array classes, their klassOops are not kept in the
+ // constraint table. The element klassOops are.
jint dimension;
symbolOop object_key;
BasicType t = FieldType::get_array_info(class_name(), &dimension,
@@ -2190,8 +2189,9 @@ klassOop SystemDictionary::find_constrained_instance_or_array_klass(
} else {
symbolHandle elem_name(THREAD, object_key);
MutexLocker mu(SystemDictionary_lock, THREAD);
- klass = constraints()->find_constrained_elem_klass(class_name, elem_name, class_loader, THREAD);
+ klass = constraints()->find_constrained_klass(elem_name, class_loader);
}
+ // If element class already loaded, allocate array klass
if (klass != NULL) {
klass = Klass::cast(klass)->array_klass_or_null(dimension);
}
@@ -2209,22 +2209,38 @@ bool SystemDictionary::add_loader_constraint(symbolHandle class_name,
Handle class_loader1,
Handle class_loader2,
Thread* THREAD) {
- unsigned int d_hash1 = dictionary()->compute_hash(class_name, class_loader1);
+ symbolHandle constraint_name;
+ if (!FieldType::is_array(class_name())) {
+ constraint_name = class_name;
+ } else {
+ // For array classes, their klassOops are not kept in the
+ // constraint table. The element classes are.
+ jint dimension;
+ symbolOop object_key;
+ BasicType t = FieldType::get_array_info(class_name(), &dimension,
+ &object_key, CHECK_(false));
+ // primitive types always pass
+ if (t != T_OBJECT) {
+ return true;
+ } else {
+ constraint_name = symbolHandle(THREAD, object_key);
+ }
+ }
+ unsigned int d_hash1 = dictionary()->compute_hash(constraint_name, class_loader1);
int d_index1 = dictionary()->hash_to_index(d_hash1);
- unsigned int d_hash2 = dictionary()->compute_hash(class_name, class_loader2);
+ unsigned int d_hash2 = dictionary()->compute_hash(constraint_name, class_loader2);
int d_index2 = dictionary()->hash_to_index(d_hash2);
-
{
- MutexLocker mu_s(SystemDictionary_lock, THREAD);
+ MutexLocker mu_s(SystemDictionary_lock, THREAD);
- // Better never do a GC while we're holding these oops
- No_Safepoint_Verifier nosafepoint;
+ // Better never do a GC while we're holding these oops
+ No_Safepoint_Verifier nosafepoint;
- klassOop klass1 = find_class(d_index1, d_hash1, class_name, class_loader1);
- klassOop klass2 = find_class(d_index2, d_hash2, class_name, class_loader2);
- return constraints()->add_entry(class_name, klass1, class_loader1,
- klass2, class_loader2);
+ klassOop klass1 = find_class(d_index1, d_hash1, constraint_name, class_loader1);
+ klassOop klass2 = find_class(d_index2, d_hash2, constraint_name, class_loader2);
+ return constraints()->add_entry(constraint_name, klass1, class_loader1,
+ klass2, class_loader2);
}
}
@@ -2301,6 +2317,7 @@ symbolOop SystemDictionary::find_resolution_error(constantPoolHandle pool, int w
// Returns the name of the type that failed a loader constraint check, or
// NULL if no constraint failed. The returned C string needs cleaning up
// with a ResourceMark in the caller. No exception except OOME is thrown.
+// Arrays are not added to the loader constraint table, their elements are.
char* SystemDictionary::check_signature_loaders(symbolHandle signature,
Handle loader1, Handle loader2,
bool is_method, TRAPS) {
diff --git a/hotspot/src/share/vm/oops/typeArrayKlass.cpp b/hotspot/src/share/vm/oops/typeArrayKlass.cpp
index 68d67f1ccf6..b9ccd0cbc29 100644
--- a/hotspot/src/share/vm/oops/typeArrayKlass.cpp
+++ b/hotspot/src/share/vm/oops/typeArrayKlass.cpp
@@ -123,16 +123,16 @@ void typeArrayKlass::copy_array(arrayOop s, int src_pos, arrayOop d, int dst_pos
|| (((unsigned int) length + (unsigned int) dst_pos) > (unsigned int) d->length()) ) {
THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException());
}
+ // Check zero copy
+ if (length == 0)
+ return;
// This is an attempt to make the copy_array fast.
- // NB: memmove takes care of overlapping memory segments.
- // Potential problem: memmove is not guaranteed to be word atomic
- // Revisit in Merlin
int l2es = log2_element_size();
int ihs = array_header_in_bytes() / wordSize;
- char* src = (char*) ((oop*)s + ihs) + (src_pos << l2es);
- char* dst = (char*) ((oop*)d + ihs) + (dst_pos << l2es);
- memmove(dst, src, length << l2es);
+ char* src = (char*) ((oop*)s + ihs) + ((size_t)src_pos << l2es);
+ char* dst = (char*) ((oop*)d + ihs) + ((size_t)dst_pos << l2es);
+ Copy::conjoint_memory_atomic(src, dst, (size_t)length << l2es);
}
diff --git a/hotspot/src/share/vm/opto/cfgnode.cpp b/hotspot/src/share/vm/opto/cfgnode.cpp
index b1da1c716d9..383f4f8c989 100644
--- a/hotspot/src/share/vm/opto/cfgnode.cpp
+++ b/hotspot/src/share/vm/opto/cfgnode.cpp
@@ -956,6 +956,7 @@ const Type *PhiNode::Value( PhaseTransform *phase ) const {
}
if( jtkp && ttkp ) {
if( jtkp->is_loaded() && jtkp->klass()->is_interface() &&
+ !jtkp->klass_is_exact() && // Keep exact interface klass (6894807)
ttkp->is_loaded() && !ttkp->klass()->is_interface() ) {
assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) ||
ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), "");
diff --git a/hotspot/src/share/vm/opto/type.cpp b/hotspot/src/share/vm/opto/type.cpp
index ba1cf3aa12b..53ed304db56 100644
--- a/hotspot/src/share/vm/opto/type.cpp
+++ b/hotspot/src/share/vm/opto/type.cpp
@@ -2545,12 +2545,15 @@ const Type *TypeOopPtr::filter( const Type *kills ) const {
ftip->is_loaded() && ftip->klass()->is_interface() &&
ktip->is_loaded() && !ktip->klass()->is_interface()) {
// Happens in a CTW of rt.jar, 320-341, no extra flags
+ assert(!ftip->klass_is_exact(), "interface could not be exact");
return ktip->cast_to_ptr_type(ftip->ptr());
}
+ // Interface klass type could be exact in opposite to interface type,
+ // return it here instead of incorrect Constant ptr J/L/Object (6894807).
if (ftkp != NULL && ktkp != NULL &&
ftkp->is_loaded() && ftkp->klass()->is_interface() &&
+ !ftkp->klass_is_exact() && // Keep exact interface klass
ktkp->is_loaded() && !ktkp->klass()->is_interface()) {
- // Happens in a CTW of rt.jar, 320-341, no extra flags
return ktkp->cast_to_ptr_type(ftkp->ptr());
}
diff --git a/hotspot/test/compiler/6892265/Test.java b/hotspot/test/compiler/6892265/Test.java
new file mode 100644
index 00000000000..1b5d6daa9e1
--- /dev/null
+++ b/hotspot/test/compiler/6892265/Test.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ */
+
+/**
+ * @test
+ * @bug 6892265
+ * @summary System.arraycopy unable to reference elements beyond Integer.MAX_VALUE bytes
+ *
+ * @run main/othervm Test
+ */
+
+public class Test {
+ static final int NCOPY = 1;
+ static final int OVERFLOW = 1;
+ static int[] src2 = new int[NCOPY];
+ static int[] dst2;
+
+ static void test() {
+ int N;
+ int SIZE;
+
+ N = Integer.MAX_VALUE/4 + OVERFLOW;
+ System.arraycopy(src2, 0, dst2, N, NCOPY);
+ System.arraycopy(dst2, N, src2, 0, NCOPY);
+ }
+
+ public static void main(String[] args) {
+ try {
+ dst2 = new int[NCOPY + Integer.MAX_VALUE/4 + OVERFLOW];
+ } catch (OutOfMemoryError e) {
+ System.exit(95); // Not enough memory
+ }
+ System.out.println("warmup");
+ for (int i=0; i <11000; i++) {
+ test();
+ }
+ System.out.println("start");
+ for (int i=0; i <1000; i++) {
+ test();
+ }
+ System.out.println("finish");
+ }
+
+}
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index 0fd55e3ec9d..18d60966945 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -62,3 +62,4 @@ c876ad22e4bf9d3c6460080db7ace478e29a3ff9 jdk7-b82
6c0ccabb430dacdcd4479f8b197980d5da4eeb66 jdk7-b85
81c0f115bbe5d3bcf59864465b5eca5538567c79 jdk7-b86
8b493f1aa136d86de0885fcba15262c4fa2b1412 jdk7-b87
+d8ebd15910034f2ba50b2f129f959f86cca01419 jdk7-b88
diff --git a/jdk/.hgtags b/jdk/.hgtags
index f0e1ec72514..a6b4e850e5d 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -62,3 +62,4 @@ e6a5d095c356a547cf5b3c8885885aca5e91e09b jdk7-b77
b396584a3e64988839cca21ea1f7fbdcc9248783 jdk7-b85
eae6e9ab26064d9ba0e7665dd646a1fd2506fcc1 jdk7-b86
2cafbbe9825e911a6ca6c17d9a18eb1f0bf0873c jdk7-b87
+b3c69282f6d3c90ec21056cd1ab70dc0c895b069 jdk7-b88
diff --git a/jdk/make/sun/javazic/tzdata/VERSION b/jdk/make/sun/javazic/tzdata/VERSION
index 07595249769..5575f59019b 100644
--- a/jdk/make/sun/javazic/tzdata/VERSION
+++ b/jdk/make/sun/javazic/tzdata/VERSION
@@ -21,4 +21,4 @@
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#
-tzdata2010b
+tzdata2010g
diff --git a/jdk/make/sun/javazic/tzdata/antarctica b/jdk/make/sun/javazic/tzdata/antarctica
index bd5cd134765..4192486fa42 100644
--- a/jdk/make/sun/javazic/tzdata/antarctica
+++ b/jdk/make/sun/javazic/tzdata/antarctica
@@ -79,6 +79,33 @@ Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
+# These rules are stolen from the `australasia' file.
+Rule AusAQ 1917 only - Jan 1 0:01 1:00 -
+Rule AusAQ 1917 only - Mar 25 2:00 0 -
+Rule AusAQ 1942 only - Jan 1 2:00 1:00 -
+Rule AusAQ 1942 only - Mar 29 2:00 0 -
+Rule AusAQ 1942 only - Sep 27 2:00 1:00 -
+Rule AusAQ 1943 1944 - Mar lastSun 2:00 0 -
+Rule AusAQ 1943 only - Oct 3 2:00 1:00 -
+Rule ATAQ 1967 only - Oct Sun>=1 2:00s 1:00 -
+Rule ATAQ 1968 only - Mar lastSun 2:00s 0 -
+Rule ATAQ 1968 1985 - Oct lastSun 2:00s 1:00 -
+Rule ATAQ 1969 1971 - Mar Sun>=8 2:00s 0 -
+Rule ATAQ 1972 only - Feb lastSun 2:00s 0 -
+Rule ATAQ 1973 1981 - Mar Sun>=1 2:00s 0 -
+Rule ATAQ 1982 1983 - Mar lastSun 2:00s 0 -
+Rule ATAQ 1984 1986 - Mar Sun>=1 2:00s 0 -
+Rule ATAQ 1986 only - Oct Sun>=15 2:00s 1:00 -
+Rule ATAQ 1987 1990 - Mar Sun>=15 2:00s 0 -
+Rule ATAQ 1987 only - Oct Sun>=22 2:00s 1:00 -
+Rule ATAQ 1988 1990 - Oct lastSun 2:00s 1:00 -
+Rule ATAQ 1991 1999 - Oct Sun>=1 2:00s 1:00 -
+Rule ATAQ 1991 2005 - Mar lastSun 2:00s 0 -
+Rule ATAQ 2000 only - Aug lastSun 2:00s 1:00 -
+Rule ATAQ 2001 max - Oct Sun>=1 2:00s 1:00 -
+Rule ATAQ 2006 only - Apr Sun>=1 2:00s 0 -
+Rule ATAQ 2007 only - Mar lastSun 2:00s 0 -
+Rule ATAQ 2008 max - Apr Sun>=1 2:00s 0 -
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
@@ -120,20 +147,52 @@ Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
# http://www.timeanddate.com/news/time/antarctica-new-times.html
#
+# From Steffen Thorsen (2010-03-10):
+# We got these changes from the Australian Antarctic Division:
+# - Macquarie Island will stay on UTC+11 for winter and therefore not
+# switch back from daylight savings time when other parts of Australia do
+# on 4 April.
+#
+# - Casey station reverted to its normal time of UTC+8 on 5 March 2010.
+# The change to UTC+11 is being considered as a regular summer thing but
+# has not been decided yet.
+#
+# - Davis station will revert to its normal time of UTC+7 at 10 March 2010
+# 20:00 UTC.
+#
+# - Mawson station stays on UTC+5.
+#
+# In addition to the Rule changes for Casey/Davis, it means that Macquarie
+# will no longer be like Hobart and will have to have its own Zone created.
+#
+# Background:
+#
+# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
+#
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - zzz 1969
8:00 - WST 2009 Oct 18 2:00
# Western (Aus) Standard Time
- 11:00 - CAST # Casey Time
+ 11:00 - CAST 2010 Mar 5 2:00
+ # Casey Time
+ 8:00 - WST
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
7:00 - DAVT 2009 Oct 18 2:00
- 5:00 - DAVT
+ 5:00 - DAVT 2010 Mar 10 20:00u
+ 7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
6:00 - MAWT 2009 Oct 18 2:00
# Mawson Time
5:00 - MAWT
+Zone Antarctica/Macquarie 0 - zzz 1911
+ 10:00 - EST 1916 Oct 1 2:00
+ 10:00 1:00 EST 1917 Feb
+ 10:00 AusAQ EST 1967
+ 10:00 ATAQ EST 2010 Apr 4 3:00
+ 11:00 - MIST # Macquarie Island Time
# References:
#
# Casey Weather (1998-02-26)
diff --git a/jdk/make/sun/javazic/tzdata/asia b/jdk/make/sun/javazic/tzdata/asia
index a8e6746fb30..54051000939 100644
--- a/jdk/make/sun/javazic/tzdata/asia
+++ b/jdk/make/sun/javazic/tzdata/asia
@@ -236,22 +236,20 @@ Zone Asia/Bahrain 3:22:20 - LMT 1920 # Al Manamah
# 2010 midnight. The decision came at a cabinet meeting at the Prime
# Minister's Office last night..."
-# From Danvin Ruangchan (2009-12-24):
-# ...the news mentions DST will be turned off again 7 months after March
-# 31st on Oct 31, 2010.
-
-# From Arthur David Olson (2009-12-26):
-# Indeed, "The government will advance again the Banglasdesh Standard
-# Time by one one hour on March 31 next year by enforcing the Daylight
-# Saving Time (DST) for seven months. It will continue till October 31
-# until further notice." I take that last sentence as the
-# establishment of a rule.
+# From Alexander Krivenyshev (2010-03-22):
+# According to Bangladesh newspaper "The Daily Star,"
+# Cabinet cancels Daylight Saving Time
+#
+# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817
+#
+# or
+#
+# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Dhaka 2009 only - Jun 19 23:00 1:00 S
-Rule Dhaka 2010 only - Jan 1 0:00 0 -
-Rule Dhaka 2010 max - Mar 31 23:00 1:00 S
-Rule Dhaka 2010 max - Nov 1 0:00 0 -
+Rule Dhaka 2009 only - Dec 31 23:59 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dhaka 6:01:40 - LMT 1890
@@ -2131,6 +2129,32 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html
#
+# From Alexander Krivenyshev (2010-03-19):
+# According to Voice of Palestine DST will last for 191 days, from March
+# 26, 2010 till "the last Sunday before the tenth day of Tishri
+# (October), each year" (October 03, 2010?)
+#
+#
+# http://palvoice.org/forums/showthread.php?t=245697
+#
+# (in Arabic)
+# or
+#
+# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html
+#
+
+# From Steffen Thorsen (2010-03-24):
+# ...Ma'an News Agency reports that Hamas cabinet has decided it will
+# start one day later, at 12:01am. Not sure if they really mean 12:01am or
+# noon though:
+#
+#
+# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178
+#
+# (Ma'an News Agency)
+# "At 12:01am Friday, clocks in Israel and the West Bank will change to
+# 1:01am, while Gaza clocks will change at 12:01am Saturday morning."
+
# The rules for Egypt are stolen from the `africa' file.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
@@ -2148,7 +2172,8 @@ Rule Palestine 2006 2008 - Apr 1 0:00 1:00 S
Rule Palestine 2006 only - Sep 22 0:00 0 -
Rule Palestine 2007 only - Sep Thu>=8 2:00 0 -
Rule Palestine 2008 only - Aug lastFri 2:00 0 -
-Rule Palestine 2009 max - Mar lastFri 0:00 1:00 S
+Rule Palestine 2009 only - Mar lastFri 0:00 1:00 S
+Rule Palestine 2010 max - Mar lastSat 0:01 1:00 S
Rule Palestine 2009 max - Sep Fri>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2440,9 +2465,18 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# Thursday of the month or the start of the last Friday of the month or
# something else. For now, use the start of the last Friday.
+# From Steffen Thorsen (2010-03-17):
+# The "Syrian News Station" reported on 2010-03-16 that the Council of
+# Ministers has decided that Syria will start DST on midnight Thursday
+# 2010-04-01: (midnight between Thursday and Friday):
+#
+# http://sns.sy/sns/?path=news/read/11421 (Arabic)
+#
+
Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
Rule Syria 2008 only - Nov 1 0:00 0 -
-Rule Syria 2009 max - Mar lastFri 0:00 1:00 S
+Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
+Rule Syria 2010 max - Apr Fri>=1 0:00 1:00 S
Rule Syria 2009 max - Oct lastFri 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/jdk/make/sun/javazic/tzdata/australasia b/jdk/make/sun/javazic/tzdata/australasia
index 940d4e16614..9165c4aedec 100644
--- a/jdk/make/sun/javazic/tzdata/australasia
+++ b/jdk/make/sun/javazic/tzdata/australasia
@@ -289,11 +289,30 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
#
# http://www.fiji.gov.fj/publish/page_16198.shtml
#
+
+# From Steffen Thorsen (2010-03-03):
+# The Cabinet in Fiji has decided to end DST about a month early, on
+# 2010-03-28 at 03:00.
+# The plan is to observe DST again, from 2010-10-24 to sometime in March
+# 2011 (last Sunday a good guess?).
+#
+# Official source:
+#
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166
+#
+#
+# A bit more background info here:
+#
+# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html
+#
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
Rule Fiji 2009 only - Nov 29 2:00 1:00 S
-Rule Fiji 2010 only - Apr 25 3:00 0 -
+Rule Fiji 2010 only - Mar lastSun 3:00 0 -
+Rule Fiji 2010 only - Oct 24 2:00 1:00 S
+Rule Fiji 2011 only - Mar lastSun 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
12:00 Fiji FJ%sT # Fiji Time
@@ -471,70 +490,30 @@ Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
# Samoa
-# From Alexander Krivenyshev (2008-12-06):
-# The Samoa government (Western Samoa) may implement DST on the first Sunday of
-# October 2009 (October 4, 2009) until the last Sunday of March 2010 (March 28,
-# 2010).
-#
-# "Selected Committee reports to Cabinet on Daylight Saving Time",
-# Government of Samoa:
-#
-# http://www.govt.ws/pr_article.cfm?pr_id=560
-#
-# or
-#
-# http://www.worldtimezone.com/dst_news/dst_news_samoa01.html
-#
-
-# From Steffen Thorsen (2009-08-27):
-# Samoa's parliament passed the Daylight Saving Bill 2009, and will start
-# daylight saving time on the first Sunday of October 2009 and end on the
-# last Sunday of March 2010. We hope that the full text will be published
-# soon, but we believe that the bill is only valid for 2009-2010. Samoa's
-# Daylight Saving Act 2009 will be enforced as soon as the Head of State
-# executes a proclamation publicizing this Act.
+# From Steffen Thorsen (2009-10-16):
+# We have been in contact with the government of Samoa again, and received
+# the following info:
#
-# Some background information here, which will be updated once we have
-# more details:
+# "Cabinet has now approved Daylight Saving to be effected next year
+# commencing from the last Sunday of September 2010 and conclude first
+# Sunday of April 2011."
+#
+# Background info:
#
# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html
#
-
-# From Alexander Krivenyshev (2009-10-03):
-# First, my deepest condolences to people of Samoa islands and all families and
-# loved ones around the world who lost their lives in the earthquake and tsunami.
#
-# Considering the recent devastation on Samoa by earthquake and tsunami and that
-# many government offices/ ministers are closed- not sure if "Daylight Saving
-# Bill 2009" will be implemented in next few days- on October 4, 2009.
-#
-# Here is reply from Consulate-General of Samoa in New Zealand
-# ---------------------------
-# Consul General
-# consulgeneral@samoaconsulate.org.nz
-#
-# Talofa Alexander,
-#
-# Thank you for your sympathy for our country but at this time we have not
-# been informed about the Daylight Savings Time Change. Most Ministries in
-# Apia are closed or relocating due to weather concerns.
-#
-# When we do find out if they are still proceeding with the time change we
-# will advise you soonest.
-#
-# Kind Regards,
-# Lana
-# for: Consul General
-
-# From Steffen Thorsen (2009-10-05):
-# We have called a hotel in Samoa and asked about local time there - they
-# are still on standard time.
+# Samoa's Daylight Saving Time Act 2009 is available here, but does not
+# contain any dates:
+#
+# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf
+#
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
-11:30 - SAMT 1950 # Samoa Time
- -11:00 - WST 2009 Oct 4
- -11:00 1:00 WSDT 2010 Mar 28
+ -11:00 - WST 2010 Sep 26
+ -11:00 1:00 WSDT 2011 Apr 3
-11:00 - WST
# Solomon Is
diff --git a/jdk/make/sun/javazic/tzdata/europe b/jdk/make/sun/javazic/tzdata/europe
index 9235c7e1697..6404369bf61 100644
--- a/jdk/make/sun/javazic/tzdata/europe
+++ b/jdk/make/sun/javazic/tzdata/europe
@@ -2063,7 +2063,9 @@ Zone Europe/Samara 3:20:36 - LMT 1919 Jul 1 2:00
3:00 Russia KUY%sT 1991 Mar 31 2:00s
2:00 Russia KUY%sT 1991 Sep 29 2:00s
3:00 - KUYT 1991 Oct 20 3:00
- 4:00 Russia SAM%sT # Samara Time
+ 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
+ 3:00 Russia SAM%sT
+
#
# From Oscar van Vlijmen (2001-08-25): [This region consists of]
# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,
@@ -2216,7 +2218,8 @@ Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
11:00 - PETT 1930 Jun 21 # P-K Time
12:00 Russia PET%sT 1991 Mar 31 2:00s
11:00 Russia PET%sT 1992 Jan 19 2:00s
- 12:00 Russia PET%sT
+ 12:00 Russia PET%sT 2010 Mar 28 2:00s
+ 11:00 Russia PET%sT
#
# Chukotskij avtonomnyj okrug
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
@@ -2224,7 +2227,8 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
13:00 Russia ANA%sT 1982 Apr 1 0:00s
12:00 Russia ANA%sT 1991 Mar 31 2:00s
11:00 Russia ANA%sT 1992 Jan 19 2:00s
- 12:00 Russia ANA%sT
+ 12:00 Russia ANA%sT 2010 Mar 28 2:00s
+ 11:00 Russia ANA%sT
# Serbia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/jdk/make/sun/javazic/tzdata/southamerica b/jdk/make/sun/javazic/tzdata/southamerica
index 693fec63423..76f1acaf005 100644
--- a/jdk/make/sun/javazic/tzdata/southamerica
+++ b/jdk/make/sun/javazic/tzdata/southamerica
@@ -1143,6 +1143,18 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# http://www.shoa.cl/noticias/2008/04hora/hora.htm
# .
+# From Angel Chiang (2010-03-04):
+# Subject: DST in Chile exceptionally extended to 3 April due to earthquake
+#
+# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098
+#
+# (in Spanish, last paragraph).
+#
+# This is breaking news. There should be more information available later.
+
+# From Arthur Daivd Olson (2010-03-06):
+# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
@@ -1177,7 +1189,9 @@ Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
# which is used below in specifying the transition.
Rule Chile 2008 only - Mar 30 3:00u 0 -
-Rule Chile 2009 max - Mar Sun>=9 3:00u 0 -
+Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
+Rule Chile 2010 only - Apr 4 3:00u 0 -
+Rule Chile 2011 max - Mar Sun>=9 3:00u 0 -
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1386,8 +1400,24 @@ Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S
# Decree 1,867 (2004-03-05)
# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
#
-Rule Para 2004 max - Oct Sun>=15 0:00 1:00 S
-Rule Para 2005 max - Mar Sun>=8 0:00 0 -
+Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S
+Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
+# From Carlos Raul Perasso (2010-02-18):
+# By decree number 3958 issued yesterday (
+#
+# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf
+#
+# )
+# Paraguay changes its DST schedule, postponing the March rule to April and
+# modifying the October date. The decree reads:
+# ...
+# Art. 1. It is hereby established that from the second Sunday of the month of
+# April of this year (2010), the official time is to be set back 60 minutes,
+# and that on the first Sunday of the month of October, it is to be set
+# forward 60 minutes, in all the territory of the Paraguayan Republic.
+# ...
+Rule Para 2010 max - Oct Sun>=1 0:00 1:00 S
+Rule Para 2010 max - Apr Sun>=8 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Asuncion -3:50:40 - LMT 1890
diff --git a/jdk/make/sun/javazic/tzdata/zone.tab b/jdk/make/sun/javazic/tzdata/zone.tab
index e4bc3450c76..abbdbaa8e70 100644
--- a/jdk/make/sun/javazic/tzdata/zone.tab
+++ b/jdk/make/sun/javazic/tzdata/zone.tab
@@ -66,6 +66,7 @@ AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
AQ -7824+10654 Antarctica/Vostok Vostok Station, S Magnetic Pole
AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie
AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
+AQ -5430+15857 Antarctica/Macquarie Macquarie Island Station, Macquarie Island
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
@@ -351,7 +352,7 @@ RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow+01 - Samara, Udmurtia
+RU +5312+05009 Europe/Samara Moscow - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
@@ -362,8 +363,8 @@ RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
RU +5934+15048 Asia/Magadan Moscow+08 - Magadan
-RU +5301+15839 Asia/Kamchatka Moscow+09 - Kamchatka
-RU +6445+17729 Asia/Anadyr Moscow+10 - Bering Sea
+RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka
+RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea
RW -0157+03004 Africa/Kigali
SA +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
diff --git a/jdk/make/sun/nio/cs/FILES_java.gmk b/jdk/make/sun/nio/cs/FILES_java.gmk
index 7fdcd2736da..534b89ad111 100644
--- a/jdk/make/sun/nio/cs/FILES_java.gmk
+++ b/jdk/make/sun/nio/cs/FILES_java.gmk
@@ -42,8 +42,6 @@ FILES_src = \
sun/io/ByteToCharBig5_Solaris.java \
sun/io/ByteToCharBig5_HKSCS.java \
sun/io/ByteToCharMS950_HKSCS.java \
- sun/io/ByteToCharHKSCS.java \
- sun/io/ByteToCharHKSCS_2001.java \
sun/io/ByteToCharGB18030.java \
sun/io/ByteToCharGB18030DB.java \
sun/io/ByteToCharCp037.java \
@@ -173,8 +171,6 @@ FILES_src = \
sun/io/CharToByteBig5.java \
sun/io/CharToByteBig5_Solaris.java \
sun/io/CharToByteBig5_HKSCS.java \
- sun/io/CharToByteHKSCS.java \
- sun/io/CharToByteHKSCS_2001.java \
sun/io/CharToByteMS950_HKSCS.java \
sun/io/CharToByteGB18030.java \
sun/io/CharToByteCp037.java \
@@ -374,6 +370,9 @@ FILES_gen_extcs = \
sun/nio/cs/ext/MacUkraine.java \
sun/nio/cs/ext/TIS_620.java \
sun/nio/cs/ext/EUC_TWMapping.java \
+ sun/nio/cs/ext/HKSCSMapping.java \
+ sun/nio/cs/ext/HKSCS2001Mapping.java \
+ sun/nio/cs/ext/HKSCS_XPMapping.java \
sun/nio/cs/ext/IBM1381.java \
sun/nio/cs/ext/IBM1383.java \
sun/nio/cs/ext/IBM930.java \
@@ -394,7 +393,8 @@ FILES_gen_extcs = \
sun/nio/cs/ext/MS936.java \
sun/nio/cs/ext/MS949.java \
sun/nio/cs/ext/MS950.java \
- sun/nio/cs/ext/GBK.java
+ sun/nio/cs/ext/GBK.java \
+ sun/nio/cs/ext/Big5.java
FILES_java = $(FILES_src) $(FILES_gen_extcs)
diff --git a/jdk/make/sun/nio/cs/Makefile b/jdk/make/sun/nio/cs/Makefile
index c2e9c0b8ef2..23b738beda5 100644
--- a/jdk/make/sun/nio/cs/Makefile
+++ b/jdk/make/sun/nio/cs/Makefile
@@ -93,7 +93,9 @@ $(FILES_genout_extcs): \
$(MKDIR) -p $(GENCSEXT)
$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) extsbcs
$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) euctw \
- $(GENCSSRCDIR)/GenerateEUC_TW.java
+ $(GENCSSRCDIR)/EUC_TW.java
+ $(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) hkscs \
+ $(GENCSSRCDIR)/HKSCS.java
$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) dbcs
$(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \
diff --git a/jdk/make/tools/CharsetMapping/Big5.c2b b/jdk/make/tools/CharsetMapping/Big5.c2b
new file mode 100644
index 00000000000..a4ed3176312
--- /dev/null
+++ b/jdk/make/tools/CharsetMapping/Big5.c2b
@@ -0,0 +1,8 @@
+#Add the following 5 characters which are duplicated
+#or have conflicts with other characters.
+0xA1C4 0xFF3F #REGWARN Fallback 0xA1C4 SPACING UNDERSCORE
+0xA2AC 0x2571 #REGWARN Fallback 0xA2AC LT DIAG UP RIGHT TO LOW LEFT
+0xA2AD 0x2572 #REGWARN Fallback 0xA2AD LT DIAG UP LEFT TO LOW RIGHT
+0xA451 0x5341 #REGWARN Fallback 0xA451 HANGZHOU NUMERAL TEN
+0xA4CA 0x5345 #REGWARN Fallback 0xA4CA HANGZHOU NUMERAL THIRTY
+#
diff --git a/jdk/make/tools/CharsetMapping/Big5.map b/jdk/make/tools/CharsetMapping/Big5.map
new file mode 100644
index 00000000000..dcfa244c310
--- /dev/null
+++ b/jdk/make/tools/CharsetMapping/Big5.map
@@ -0,0 +1,13837 @@
+# From Big5.b2c
+# Added sb
+# Added Big5.b2c-irreversible
+#
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x0004
+0x05 0x0005
+0x06 0x0006
+0x07 0x0007
+0x08 0x0008
+0x09 0x0009
+0x0a 0x000a
+0x0b 0x000b
+0x0c 0x000c
+0x0d 0x000d
+0x0e 0x000e
+0x0f 0x000f
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x0014
+0x15 0x0015
+0x16 0x0016
+0x17 0x0017
+0x18 0x0018
+0x19 0x0019
+0x1a 0x001a
+0x1b 0x001b
+0x1c 0x001c
+0x1d 0x001d
+0x1e 0x001e
+0x1f 0x001f
+0x20 0x0020 # SPACE
+0x21 0x0021 # EXCLAMATION MARK
+0x22 0x0022 # QUOTATION MARK
+0x23 0x0023 # NUMBER SIGN
+0x24 0x0024 # DOLLAR SIGN
+0x25 0x0025 # PERCENT SIGN
+0x26 0x0026 # AMPERSAND
+0x27 0x0027 # APOSTROPHE
+0x28 0x0028 # LEFT PARENTHESIS
+0x29 0x0029 # RIGHT PARENTHESIS
+0x2A 0x002A # ASTERISK
+0x2B 0x002B # PLUS SIGN
+0x2C 0x002C # COMMA
+0x2D 0x002D # HYPHEN-MINUS
+0x2E 0x002E # FULL STOP
+0x2F 0x002F # SOLIDUS
+0x30 0x0030 # DIGIT ZERO
+0x31 0x0031 # DIGIT ONE
+0x32 0x0032 # DIGIT TWO
+0x33 0x0033 # DIGIT THREE
+0x34 0x0034 # DIGIT FOUR
+0x35 0x0035 # DIGIT FIVE
+0x36 0x0036 # DIGIT SIX
+0x37 0x0037 # DIGIT SEVEN
+0x38 0x0038 # DIGIT EIGHT
+0x39 0x0039 # DIGIT NINE
+0x3A 0x003A # COLON
+0x3B 0x003B # SEMICOLON
+0x3C 0x003C # LESS-THAN SIGN
+0x3D 0x003D # EQUALS SIGN
+0x3E 0x003E # GREATER-THAN SIGN
+0x3F 0x003F # QUESTION MARK
+0x40 0x0040 # COMMERCIAL AT
+0x41 0x0041 # LATIN CAPITAL LETTER A
+0x42 0x0042 # LATIN CAPITAL LETTER B
+0x43 0x0043 # LATIN CAPITAL LETTER C
+0x44 0x0044 # LATIN CAPITAL LETTER D
+0x45 0x0045 # LATIN CAPITAL LETTER E
+0x46 0x0046 # LATIN CAPITAL LETTER F
+0x47 0x0047 # LATIN CAPITAL LETTER G
+0x48 0x0048 # LATIN CAPITAL LETTER H
+0x49 0x0049 # LATIN CAPITAL LETTER I
+0x4A 0x004A # LATIN CAPITAL LETTER J
+0x4B 0x004B # LATIN CAPITAL LETTER K
+0x4C 0x004C # LATIN CAPITAL LETTER L
+0x4D 0x004D # LATIN CAPITAL LETTER M
+0x4E 0x004E # LATIN CAPITAL LETTER N
+0x4F 0x004F # LATIN CAPITAL LETTER O
+0x50 0x0050 # LATIN CAPITAL LETTER P
+0x51 0x0051 # LATIN CAPITAL LETTER Q
+0x52 0x0052 # LATIN CAPITAL LETTER R
+0x53 0x0053 # LATIN CAPITAL LETTER S
+0x54 0x0054 # LATIN CAPITAL LETTER T
+0x55 0x0055 # LATIN CAPITAL LETTER U
+0x56 0x0056 # LATIN CAPITAL LETTER V
+0x57 0x0057 # LATIN CAPITAL LETTER W
+0x58 0x0058 # LATIN CAPITAL LETTER X
+0x59 0x0059 # LATIN CAPITAL LETTER Y
+0x5A 0x005A # LATIN CAPITAL LETTER Z
+0x5B 0x005B # LEFT SQUARE BRACKET
+0x5C 0x005C # WON SIGN
+0x5D 0x005D # RIGHT SQUARE BRACKET
+0x5E 0x005E # CIRCUMFLEX ACCENT
+0x5F 0x005F # LOW LINE
+0x60 0x0060 # GRAVE ACCENT
+0x61 0x0061 # LATIN SMALL LETTER A
+0x62 0x0062 # LATIN SMALL LETTER B
+0x63 0x0063 # LATIN SMALL LETTER C
+0x64 0x0064 # LATIN SMALL LETTER D
+0x65 0x0065 # LATIN SMALL LETTER E
+0x66 0x0066 # LATIN SMALL LETTER F
+0x67 0x0067 # LATIN SMALL LETTER G
+0x68 0x0068 # LATIN SMALL LETTER H
+0x69 0x0069 # LATIN SMALL LETTER I
+0x6A 0x006A # LATIN SMALL LETTER J
+0x6B 0x006B # LATIN SMALL LETTER K
+0x6C 0x006C # LATIN SMALL LETTER L
+0x6D 0x006D # LATIN SMALL LETTER M
+0x6E 0x006E # LATIN SMALL LETTER N
+0x6F 0x006F # LATIN SMALL LETTER O
+0x70 0x0070 # LATIN SMALL LETTER P
+0x71 0x0071 # LATIN SMALL LETTER Q
+0x72 0x0072 # LATIN SMALL LETTER R
+0x73 0x0073 # LATIN SMALL LETTER S
+0x74 0x0074 # LATIN SMALL LETTER T
+0x75 0x0075 # LATIN SMALL LETTER U
+0x76 0x0076 # LATIN SMALL LETTER V
+0x77 0x0077 # LATIN SMALL LETTER W
+0x78 0x0078 # LATIN SMALL LETTER X
+0x79 0x0079 # LATIN SMALL LETTER Y
+0x7A 0x007A # LATIN SMALL LETTER Z
+0x7B 0x007B # LEFT CURLY BRACKET
+0x7C 0x007C # VERTICAL LINE
+0x7D 0x007D # RIGHT CURLY BRACKET
+0x7E 0x007E # TILDE
+0x7F 0x007F
+#
+0xA140 0x3000 # IDEOGRAPHIC SPACE
+0xA141 0xFF0C # FULLWIDTH COMMA
+0xA142 0x3001 # IDEOGRAPHIC COMMA
+0xA143 0x3002 # IDEOGRAPHIC FULL STOP
+0xA144 0xFF0E # FULLWIDTH FULL STOP
+0xA145 0x2022 # BULLET
+0xA146 0xFF1B # FULLWIDTH SEMICOLON
+0xA147 0xFF1A # FULLWIDTH COLON
+0xA148 0xFF1F # FULLWIDTH QUESTION MARK
+0xA149 0xFF01 # FULLWIDTH EXCLAMATION MARK
+0xA14A 0xFE30 # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+0xA14B 0x2026 # HORIZONTAL ELLIPSIS
+0xA14C 0x2025 # TWO DOT LEADER
+0xA14D 0xFE50 # SMALL COMMA
+0xA14E 0xFF64 # HALFWIDTH IDEOGRAPHIC COMMA
+0xA14F 0xFE52 # SMALL FULL STOP
+0xA150 0x00B7 # MIDDLE DOT
+0xA151 0xFE54 # SMALL SEMICOLON
+0xA152 0xFE55 # SMALL COLON
+0xA153 0xFE56 # SMALL QUESTION MARK
+0xA154 0xFE57 # SMALL EXCLAMATION MARK
+0xA155 0xFF5C # FULLWIDTH VERTICAL BAR
+0xA156 0x2013 # EN DASH
+0xA157 0xFE31 # PRESENTATION FORM FOR VERTICAL EM DASH
+0xA158 0x2014 # EM DASH
+0xA159 0xFE33 # PRESENTATION FORM FOR VERTICAL LOW LINE
+0xA15B 0xFE34 # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
+0xA15C 0xFE4F # WAVY LOW LINE
+0xA15D 0xFF08 # FULLWIDTH LEFT PARENTHESIS
+0xA15E 0xFF09 # FULLWIDTH RIGHT PARENTHESIS
+0xA15F 0xFE35 # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+0xA160 0xFE36 # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+0xA161 0xFF5B # FULLWIDTH LEFT CURLY BRACKET
+0xA162 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET
+0xA163 0xFE37 # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+0xA164 0xFE38 # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+0xA165 0x3014 # LEFT TORTOISE SHELL BRACKET
+0xA166 0x3015 # RIGHT TORTOISE SHELL BRACKET
+0xA167 0xFE39 # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+0xA168 0xFE3A # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+0xA169 0x3010 # LEFT BLACK LENTICULAR BRACKET
+0xA16A 0x3011 # RIGHT BLACK LENTICULAR BRACKET
+0xA16B 0xFE3B # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+0xA16C 0xFE3C # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+0xA16D 0x300A # LEFT DOUBLE ANGLE BRACKET
+0xA16E 0x300B # RIGHT DOUBLE ANGLE BRACKET
+0xA16F 0xFE3D # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+0xA170 0xFE3E # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+0xA171 0x3008 # LEFT ANGLE BRACKET
+0xA172 0x3009 # RIGHT ANGLE BRACKET
+0xA173 0xFE3F # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+0xA174 0xFE40 # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+0xA175 0x300C # LEFT CORNER BRACKET
+0xA176 0x300D # RIGHT CORNER BRACKET
+0xA177 0xFE41 # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+0xA178 0xFE42 # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+0xA179 0x300E # LEFT WHITE CORNER BRACKET
+0xA17A 0x300F # RIGHT WHITE CORNER BRACKET
+0xA17B 0xFE43 # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+0xA17C 0xFE44 # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+0xA17D 0xFE59 # SMALL LEFT PARENTHESIS
+0xA17E 0xFE5A # SMALL RIGHT PARENTHESIS
+0xA1A1 0xFE5B # SMALL LEFT CURLY BRACKET
+0xA1A2 0xFE5C # SMALL RIGHT CURLY BRACKET
+0xA1A3 0xFE5D # SMALL LEFT TORTOISE SHELL BRACKET
+0xA1A4 0xFE5E # SMALL RIGHT TORTOISE SHELL BRACKET
+0xA1A5 0x2018 # LEFT SINGLE QUOTATION MARK
+0xA1A6 0x2019 # RIGHT SINGLE QUOTATION MARK
+0xA1A7 0x201C # LEFT DOUBLE QUOTATION MARK
+0xA1A8 0x201D # RIGHT DOUBLE QUOTATION MARK
+0xA1A9 0x301D # REVERSED DOUBLE PRIME QUOTATION MARK
+0xA1AA 0x301E # DOUBLE PRIME QUOTATION MARK
+0xA1AB 0x2035 # REVERSED PRIME
+0xA1AC 0x2032 # PRIME
+0xA1AD 0xFF03 # FULLWIDTH NUMBER SIGN
+0xA1AE 0xFF06 # FULLWIDTH AMPERSAND
+0xA1AF 0xFF0A # FULLWIDTH ASTERISK
+0xA1B0 0x203B # REFERENCE MARK
+0xA1B1 0x00A7 # SECTION SIGN
+0xA1B2 0x3003 # DITTO MARK
+0xA1B3 0x25CB # WHITE CIRCLE
+0xA1B4 0x25CF # BLACK CIRCLE
+0xA1B5 0x25B3 # WHITE UP-POINTING TRIANGLE
+0xA1B6 0x25B2 # BLACK UP-POINTING TRIANGLE
+0xA1B7 0x25CE # BULLSEYE
+0xA1B8 0x2606 # WHITE STAR
+0xA1B9 0x2605 # BLACK STAR
+0xA1BA 0x25C7 # WHITE DIAMOND
+0xA1BB 0x25C6 # BLACK DIAMOND
+0xA1BC 0x25A1 # WHITE SQUARE
+0xA1BD 0x25A0 # BLACK SQUARE
+0xA1BE 0x25BD # WHITE DOWN-POINTING TRIANGLE
+0xA1BF 0x25BC # BLACK DOWN-POINTING TRIANGLE
+0xA1C0 0x32A3 # CIRCLED IDEOGRAPH CORRECT
+0xA1C1 0x2105 # CARE OF
+0xA1C2 0x203E # OVERLINE
+0xA1C6 0xFE49 # DASHED OVERLINE
+0xA1C7 0xFE4A # CENTRELINE OVERLINE
+0xA1C8 0xFE4D # DASHED LOW LINE
+0xA1C9 0xFE4E # CENTRELINE LOW LINE
+0xA1CA 0xFE4B # WAVY OVERLINE
+0xA1CB 0xFE4C # DOUBLE WAVY OVERLINE
+0xA1CC 0xFE5F # SMALL NUMBER SIGN
+0xA1CD 0xFE60 # SMALL AMPERSAND
+0xA1CE 0xFE61 # SMALL ASTERISK
+0xA1CF 0xFF0B # FULLWIDTH PLUS SIGN
+0xA1D0 0xFF0D # FULLWIDTH HYPHEN-MINUS
+0xA1D1 0x00D7 # MULTIPLICATION SIGN
+0xA1D2 0x00F7 # DIVISION SIGN
+0xA1D3 0x00B1 # PLUS-MINUS SIGN
+0xA1D4 0x221A # SQUARE ROOT
+0xA1D5 0xFF1C # FULLWIDTH LESS-THAN SIGN
+0xA1D6 0xFF1E # FULLWIDTH GREATER-THAN SIGN
+0xA1D7 0xFF1D # FULLWIDTH EQUALS SIGN
+0xA1D8 0x2266 # LESS THAN OVER EQUAL TO
+0xA1D9 0x2267 # GREATER THAN OVER EQUAL TO
+0xA1DA 0x2260 # NOT EQUAL TO
+0xA1DB 0x221E # INFINITY
+0xA1DC 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
+0xA1DD 0x2261 # IDENTICAL TO
+0xA1DE 0xFE62 # SMALL PLUS SIGN
+0xA1DF 0xFE63 # SMALL HYPHEN-MINUS
+0xA1E0 0xFE64 # SMALL LESS-THAN SIGN
+0xA1E1 0xFE65 # SMALL GREATER-THAN SIGN
+0xA1E2 0xFE66 # SMALL EQUALS SIGN
+0xA1E3 0x223C # TILDE OPERATOR
+0xA1E4 0x2229 # INTERSECTION
+0xA1E5 0x222A # UNION
+0xA1E6 0x22A5 # UP TACK
+0xA1E7 0x2220 # ANGLE
+0xA1E8 0x221F # RIGHT ANGLE
+0xA1E9 0x22BF # RIGHT TRIANGLE
+0xA1EA 0x33D2 # SQUARE LOG
+0xA1EB 0x33D1 # SQUARE LN
+0xA1EC 0x222B # INTEGRAL
+0xA1ED 0x222E # CONTOUR INTEGRAL
+0xA1EE 0x2235 # BECAUSE
+0xA1EF 0x2234 # THEREFORE
+0xA1F0 0x2640 # FEMALE SIGN
+0xA1F1 0x2642 # MALE SIGN
+0xA1F2 0x2641 # EARTH
+0xA1F3 0x2609 # SUN
+0xA1F4 0x2191 # UPWARDS ARROW
+0xA1F5 0x2193 # DOWNWARDS ARROW
+0xA1F6 0x2190 # LEFTWARDS ARROW
+0xA1F7 0x2192 # RIGHTWARDS ARROW
+0xA1F8 0x2196 # NORTH WEST ARROW
+0xA1F9 0x2197 # NORTH EAST ARROW
+0xA1FA 0x2199 # SOUTH WEST ARROW
+0xA1FB 0x2198 # SOUTH EAST ARROW
+0xA1FC 0x2225 # PARALLEL TO
+0xA1FD 0x2223 # DIVIDES
+0xA241 0xFF0F # FULLWIDTH SOLIDUS
+0xA242 0xFF3C # FULLWIDTH REVERSE SOLIDUS
+0xA243 0xFF04 # FULLWIDTH DOLLAR SIGN
+0xA244 0x00A5 # YEN SIGN
+0xA245 0x3012 # POSTAL MARK
+0xA246 0x00A2 # CENT SIGN
+0xA247 0x00A3 # POUND SIGN
+0xA248 0xFF05 # FULLWIDTH PERCENT SIGN
+0xA249 0xFF20 # FULLWIDTH COMMERCIAL AT
+0xA24A 0x2103 # DEGREE CELSIUS
+0xA24B 0x2109 # DEGREE FAHRENHEIT
+0xA24C 0xFE69 # SMALL DOLLAR SIGN
+0xA24D 0xFE6A # SMALL PERCENT SIGN
+0xA24E 0xFE6B # SMALL COMMERCIAL AT
+0xA24F 0x33D5 # SQUARE MIL
+0xA250 0x339C # SQUARE MM
+0xA251 0x339D # SQUARE CM
+0xA252 0x339E # SQUARE KM
+0xA253 0x33CE # SQUARE KM CAPITAL
+0xA254 0x33A1 # SQUARE M SQUARED
+0xA255 0x338E # SQUARE MG
+0xA256 0x338F # SQUARE KG
+0xA257 0x33C4 # SQUARE CC
+0xA258 0x00B0 # DEGREE SIGN
+0xA259 0x5159 #
+0xA25A 0x515B #
+0xA25B 0x515E #
+0xA25C 0x515D #
+0xA25D 0x5161 #
+0xA25E 0x5163 #
+0xA25F 0x55E7 #
+0xA260 0x74E9 #
+0xA261 0x7CCE #
+0xA262 0x2581 # LOWER ONE EIGHTH BLOCK
+0xA263 0x2582 # LOWER ONE QUARTER BLOCK
+0xA264 0x2583 # LOWER THREE EIGHTHS BLOCK
+0xA265 0x2584 # LOWER HALF BLOCK
+0xA266 0x2585 # LOWER FIVE EIGHTHS BLOCK
+0xA267 0x2586 # LOWER THREE QUARTERS BLOCK
+0xA268 0x2587 # LOWER SEVEN EIGHTHS BLOCK
+0xA269 0x2588 # FULL BLOCK
+0xA26A 0x258F # LEFT ONE EIGHTH BLOCK
+0xA26B 0x258E # LEFT ONE QUARTER BLOCK
+0xA26C 0x258D # LEFT THREE EIGHTHS BLOCK
+0xA26D 0x258C # LEFT HALF BLOCK
+0xA26E 0x258B # LEFT FIVE EIGHTHS BLOCK
+0xA26F 0x258A # LEFT THREE QUARTERS BLOCK
+0xA270 0x2589 # LEFT SEVEN EIGHTHS BLOCK
+0xA271 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xA272 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xA273 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xA274 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xA275 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xA276 0x2594 # UPPER ONE EIGHTH BLOCK
+0xA277 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
+0xA278 0x2502 # BOX DRAWINGS LIGHT VERTICAL
+0xA279 0x2595 # RIGHT ONE EIGHTH BLOCK
+0xA27A 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xA27B 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
+0xA27C 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
+0xA27D 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
+0xA27E 0x256D # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT
+0xA2A1 0x256E # BOX DRAWINGS LIGHT ARC DOWN AND LEFT
+0xA2A2 0x2570 # BOX DRAWINGS LIGHT ARC UP AND RIGHT
+0xA2A3 0x256F # BOX DRAWINGS LIGHT ARC UP AND LEFT
+0xA2A4 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
+0xA2A5 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xA2A6 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xA2A7 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xA2A8 0x25E2 # BLACK LOWER RIGHT TRIANGLE
+0xA2A9 0x25E3 # BLACK LOWER LEFT TRIANGLE
+0xA2AA 0x25E5 # BLACK UPPER RIGHT TRIANGLE
+0xA2AB 0x25E4 # BLACK UPPER LEFT TRIANGLE
+0xA2AE 0x2573 # BOX DRAWINGS LIGHT DIAGONAL CROSS
+0xA2AF 0xFF10 # FULLWIDTH DIGIT ZERO
+0xA2B0 0xFF11 # FULLWIDTH DIGIT ONE
+0xA2B1 0xFF12 # FULLWIDTH DIGIT TWO
+0xA2B2 0xFF13 # FULLWIDTH DIGIT THREE
+0xA2B3 0xFF14 # FULLWIDTH DIGIT FOUR
+0xA2B4 0xFF15 # FULLWIDTH DIGIT FIVE
+0xA2B5 0xFF16 # FULLWIDTH DIGIT SIX
+0xA2B6 0xFF17 # FULLWIDTH DIGIT SEVEN
+0xA2B7 0xFF18 # FULLWIDTH DIGIT EIGHT
+0xA2B8 0xFF19 # FULLWIDTH DIGIT NINE
+0xA2B9 0x2160 # ROMAN NUMERAL ONE
+0xA2BA 0x2161 # ROMAN NUMERAL TWO
+0xA2BB 0x2162 # ROMAN NUMERAL THREE
+0xA2BC 0x2163 # ROMAN NUMERAL FOUR
+0xA2BD 0x2164 # ROMAN NUMERAL FIVE
+0xA2BE 0x2165 # ROMAN NUMERAL SIX
+0xA2BF 0x2166 # ROMAN NUMERAL SEVEN
+0xA2C0 0x2167 # ROMAN NUMERAL EIGHT
+0xA2C1 0x2168 # ROMAN NUMERAL NINE
+0xA2C2 0x2169 # ROMAN NUMERAL TEN
+0xA2C3 0x3021 # HANGZHOU NUMERAL ONE
+0xA2C4 0x3022 # HANGZHOU NUMERAL TWO
+0xA2C5 0x3023 # HANGZHOU NUMERAL THREE
+0xA2C6 0x3024 # HANGZHOU NUMERAL FOUR
+0xA2C7 0x3025 # HANGZHOU NUMERAL FIVE
+0xA2C8 0x3026 # HANGZHOU NUMERAL SIX
+0xA2C9 0x3027 # HANGZHOU NUMERAL SEVEN
+0xA2CA 0x3028 # HANGZHOU NUMERAL EIGHT
+0xA2CB 0x3029 # HANGZHOU NUMERAL NINE
+0xA2CD 0x5344 #
+0xA2CF 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A
+0xA2D0 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B
+0xA2D1 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C
+0xA2D2 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D
+0xA2D3 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E
+0xA2D4 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F
+0xA2D5 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G
+0xA2D6 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H
+0xA2D7 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I
+0xA2D8 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J
+0xA2D9 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K
+0xA2DA 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L
+0xA2DB 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M
+0xA2DC 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N
+0xA2DD 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O
+0xA2DE 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P
+0xA2DF 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q
+0xA2E0 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R
+0xA2E1 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S
+0xA2E2 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T
+0xA2E3 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U
+0xA2E4 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V
+0xA2E5 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W
+0xA2E6 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X
+0xA2E7 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y
+0xA2E8 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z
+0xA2E9 0xFF41 # FULLWIDTH LATIN SMALL LETTER A
+0xA2EA 0xFF42 # FULLWIDTH LATIN SMALL LETTER B
+0xA2EB 0xFF43 # FULLWIDTH LATIN SMALL LETTER C
+0xA2EC 0xFF44 # FULLWIDTH LATIN SMALL LETTER D
+0xA2ED 0xFF45 # FULLWIDTH LATIN SMALL LETTER E
+0xA2EE 0xFF46 # FULLWIDTH LATIN SMALL LETTER F
+0xA2EF 0xFF47 # FULLWIDTH LATIN SMALL LETTER G
+0xA2F0 0xFF48 # FULLWIDTH LATIN SMALL LETTER H
+0xA2F1 0xFF49 # FULLWIDTH LATIN SMALL LETTER I
+0xA2F2 0xFF4A # FULLWIDTH LATIN SMALL LETTER J
+0xA2F3 0xFF4B # FULLWIDTH LATIN SMALL LETTER K
+0xA2F4 0xFF4C # FULLWIDTH LATIN SMALL LETTER L
+0xA2F5 0xFF4D # FULLWIDTH LATIN SMALL LETTER M
+0xA2F6 0xFF4E # FULLWIDTH LATIN SMALL LETTER N
+0xA2F7 0xFF4F # FULLWIDTH LATIN SMALL LETTER O
+0xA2F8 0xFF50 # FULLWIDTH LATIN SMALL LETTER P
+0xA2F9 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q
+0xA2FA 0xFF52 # FULLWIDTH LATIN SMALL LETTER R
+0xA2FB 0xFF53 # FULLWIDTH LATIN SMALL LETTER S
+0xA2FC 0xFF54 # FULLWIDTH LATIN SMALL LETTER T
+0xA2FD 0xFF55 # FULLWIDTH LATIN SMALL LETTER U
+0xA2FE 0xFF56 # FULLWIDTH LATIN SMALL LETTER V
+0xA340 0xFF57 # FULLWIDTH LATIN SMALL LETTER W
+0xA341 0xFF58 # FULLWIDTH LATIN SMALL LETTER X
+0xA342 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y
+0xA343 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z
+0xA344 0x0391 # GREEK CAPITAL LETTER ALPHA
+0xA345 0x0392 # GREEK CAPITAL LETTER BETA
+0xA346 0x0393 # GREEK CAPITAL LETTER GAMMA
+0xA347 0x0394 # GREEK CAPITAL LETTER DELTA
+0xA348 0x0395 # GREEK CAPITAL LETTER EPSILON
+0xA349 0x0396 # GREEK CAPITAL LETTER ZETA
+0xA34A 0x0397 # GREEK CAPITAL LETTER ETA
+0xA34B 0x0398 # GREEK CAPITAL LETTER THETA
+0xA34C 0x0399 # GREEK CAPITAL LETTER IOTA
+0xA34D 0x039A # GREEK CAPITAL LETTER KAPPA
+0xA34E 0x039B # GREEK CAPITAL LETTER LAMDA
+0xA34F 0x039C # GREEK CAPITAL LETTER MU
+0xA350 0x039D # GREEK CAPITAL LETTER NU
+0xA351 0x039E # GREEK CAPITAL LETTER XI
+0xA352 0x039F # GREEK CAPITAL LETTER OMICRON
+0xA353 0x03A0 # GREEK CAPITAL LETTER PI
+0xA354 0x03A1 # GREEK CAPITAL LETTER RHO
+0xA355 0x03A3 # GREEK CAPITAL LETTER SIGMA
+0xA356 0x03A4 # GREEK CAPITAL LETTER TAU
+0xA357 0x03A5 # GREEK CAPITAL LETTER UPSILON
+0xA358 0x03A6 # GREEK CAPITAL LETTER PHI
+0xA359 0x03A7 # GREEK CAPITAL LETTER CHI
+0xA35A 0x03A8 # GREEK CAPITAL LETTER PSI
+0xA35B 0x03A9 # GREEK CAPITAL LETTER OMEGA
+0xA35C 0x03B1 # GREEK SMALL LETTER ALPHA
+0xA35D 0x03B2 # GREEK SMALL LETTER BETA
+0xA35E 0x03B3 # GREEK SMALL LETTER GAMMA
+0xA35F 0x03B4 # GREEK SMALL LETTER DELTA
+0xA360 0x03B5 # GREEK SMALL LETTER EPSILON
+0xA361 0x03B6 # GREEK SMALL LETTER ZETA
+0xA362 0x03B7 # GREEK SMALL LETTER ETA
+0xA363 0x03B8 # GREEK SMALL LETTER THETA
+0xA364 0x03B9 # GREEK SMALL LETTER IOTA
+0xA365 0x03BA # GREEK SMALL LETTER KAPPA
+0xA366 0x03BB # GREEK SMALL LETTER LAMDA
+0xA367 0x03BC # GREEK SMALL LETTER MU
+0xA368 0x03BD # GREEK SMALL LETTER NU
+0xA369 0x03BE # GREEK SMALL LETTER XI
+0xA36A 0x03BF # GREEK SMALL LETTER OMICRON
+0xA36B 0x03C0 # GREEK SMALL LETTER PI
+0xA36C 0x03C1 # GREEK SMALL LETTER RHO
+0xA36D 0x03C3 # GREEK SMALL LETTER SIGMA
+0xA36E 0x03C4 # GREEK SMALL LETTER TAU
+0xA36F 0x03C5 # GREEK SMALL LETTER UPSILON
+0xA370 0x03C6 # GREEK SMALL LETTER PHI
+0xA371 0x03C7 # GREEK SMALL LETTER CHI
+0xA372 0x03C8 # GREEK SMALL LETTER PSI
+0xA373 0x03C9 # GREEK SMALL LETTER OMEGA
+0xA374 0x3105 # BOPOMOFO LETTER B
+0xA375 0x3106 # BOPOMOFO LETTER P
+0xA376 0x3107 # BOPOMOFO LETTER M
+0xA377 0x3108 # BOPOMOFO LETTER F
+0xA378 0x3109 # BOPOMOFO LETTER D
+0xA379 0x310A # BOPOMOFO LETTER T
+0xA37A 0x310B # BOPOMOFO LETTER N
+0xA37B 0x310C # BOPOMOFO LETTER L
+0xA37C 0x310D # BOPOMOFO LETTER G
+0xA37D 0x310E # BOPOMOFO LETTER K
+0xA37E 0x310F # BOPOMOFO LETTER H
+0xA3A1 0x3110 # BOPOMOFO LETTER J
+0xA3A2 0x3111 # BOPOMOFO LETTER Q
+0xA3A3 0x3112 # BOPOMOFO LETTER X
+0xA3A4 0x3113 # BOPOMOFO LETTER ZH
+0xA3A5 0x3114 # BOPOMOFO LETTER CH
+0xA3A6 0x3115 # BOPOMOFO LETTER SH
+0xA3A7 0x3116 # BOPOMOFO LETTER R
+0xA3A8 0x3117 # BOPOMOFO LETTER Z
+0xA3A9 0x3118 # BOPOMOFO LETTER C
+0xA3AA 0x3119 # BOPOMOFO LETTER S
+0xA3AB 0x311A # BOPOMOFO LETTER A
+0xA3AC 0x311B # BOPOMOFO LETTER O
+0xA3AD 0x311C # BOPOMOFO LETTER E
+0xA3AE 0x311D # BOPOMOFO LETTER EH
+0xA3AF 0x311E # BOPOMOFO LETTER AI
+0xA3B0 0x311F # BOPOMOFO LETTER EI
+0xA3B1 0x3120 # BOPOMOFO LETTER AU
+0xA3B2 0x3121 # BOPOMOFO LETTER OU
+0xA3B3 0x3122 # BOPOMOFO LETTER AN
+0xA3B4 0x3123 # BOPOMOFO LETTER EN
+0xA3B5 0x3124 # BOPOMOFO LETTER ANG
+0xA3B6 0x3125 # BOPOMOFO LETTER ENG
+0xA3B7 0x3126 # BOPOMOFO LETTER ER
+0xA3B8 0x3127 # BOPOMOFO LETTER I
+0xA3B9 0x3128 # BOPOMOFO LETTER U
+0xA3BA 0x3129 # BOPOMOFO LETTER IU
+0xA3BB 0x02D9 # DOT ABOVE (Mandarin Chinese light tone)
+0xA3BC 0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
+0xA3BD 0x02CA # MODIFIER LETTER ACUTE ACCENT (Mandarin Chinese second tone)
+0xA3BE 0x02C7 # CARON (Mandarin Chinese third tone)
+0xA3BF 0x02CB # MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone)
+0xA440 0x4E00 #
+0xA441 0x4E59 #
+0xA442 0x4E01 #
+0xA443 0x4E03 #
+0xA444 0x4E43 #
+0xA445 0x4E5D #
+0xA446 0x4E86 #
+0xA447 0x4E8C #
+0xA448 0x4EBA #
+0xA449 0x513F #
+0xA44A 0x5165 #
+0xA44B 0x516B #
+0xA44C 0x51E0 #
+0xA44D 0x5200 #
+0xA44E 0x5201 #
+0xA44F 0x529B #
+0xA450 0x5315 #
+0xA452 0x535C #
+0xA453 0x53C8 #
+0xA454 0x4E09 #
+0xA455 0x4E0B #
+0xA456 0x4E08 #
+0xA457 0x4E0A #
+0xA458 0x4E2B #
+0xA459 0x4E38 #
+0xA45A 0x51E1 #
+0xA45B 0x4E45 #
+0xA45C 0x4E48 #
+0xA45D 0x4E5F #
+0xA45E 0x4E5E #
+0xA45F 0x4E8E #
+0xA460 0x4EA1 #
+0xA461 0x5140 #
+0xA462 0x5203 #
+0xA463 0x52FA #
+0xA464 0x5343 #
+0xA465 0x53C9 #
+0xA466 0x53E3 #
+0xA467 0x571F #
+0xA468 0x58EB #
+0xA469 0x5915 #
+0xA46A 0x5927 #
+0xA46B 0x5973 #
+0xA46C 0x5B50 #
+0xA46D 0x5B51 #
+0xA46E 0x5B53 #
+0xA46F 0x5BF8 #
+0xA470 0x5C0F #
+0xA471 0x5C22 #
+0xA472 0x5C38 #
+0xA473 0x5C71 #
+0xA474 0x5DDD #
+0xA475 0x5DE5 #
+0xA476 0x5DF1 #
+0xA477 0x5DF2 #
+0xA478 0x5DF3 #
+0xA479 0x5DFE #
+0xA47A 0x5E72 #
+0xA47B 0x5EFE #
+0xA47C 0x5F0B #
+0xA47D 0x5F13 #
+0xA47E 0x624D #
+0xA4A1 0x4E11 #
+0xA4A2 0x4E10 #
+0xA4A3 0x4E0D #
+0xA4A4 0x4E2D #
+0xA4A5 0x4E30 #
+0xA4A6 0x4E39 #
+0xA4A7 0x4E4B #
+0xA4A8 0x5C39 #
+0xA4A9 0x4E88 #
+0xA4AA 0x4E91 #
+0xA4AB 0x4E95 #
+0xA4AC 0x4E92 #
+0xA4AD 0x4E94 #
+0xA4AE 0x4EA2 #
+0xA4AF 0x4EC1 #
+0xA4B0 0x4EC0 #
+0xA4B1 0x4EC3 #
+0xA4B2 0x4EC6 #
+0xA4B3 0x4EC7 #
+0xA4B4 0x4ECD #
+0xA4B5 0x4ECA #
+0xA4B6 0x4ECB #
+0xA4B7 0x4EC4 #
+0xA4B8 0x5143 #
+0xA4B9 0x5141 #
+0xA4BA 0x5167 #
+0xA4BB 0x516D #
+0xA4BC 0x516E #
+0xA4BD 0x516C #
+0xA4BE 0x5197 #
+0xA4BF 0x51F6 #
+0xA4C0 0x5206 #
+0xA4C1 0x5207 #
+0xA4C2 0x5208 #
+0xA4C3 0x52FB #
+0xA4C4 0x52FE #
+0xA4C5 0x52FF #
+0xA4C6 0x5316 #
+0xA4C7 0x5339 #
+0xA4C8 0x5348 #
+0xA4C9 0x5347 #
+0xA4CB 0x535E #
+0xA4CC 0x5384 #
+0xA4CD 0x53CB #
+0xA4CE 0x53CA #
+0xA4CF 0x53CD #
+0xA4D0 0x58EC #
+0xA4D1 0x5929 #
+0xA4D2 0x592B #
+0xA4D3 0x592A #
+0xA4D4 0x592D #
+0xA4D5 0x5B54 #
+0xA4D6 0x5C11 #
+0xA4D7 0x5C24 #
+0xA4D8 0x5C3A #
+0xA4D9 0x5C6F #
+0xA4DA 0x5DF4 #
+0xA4DB 0x5E7B #
+0xA4DC 0x5EFF #
+0xA4DD 0x5F14 #
+0xA4DE 0x5F15 #
+0xA4DF 0x5FC3 #
+0xA4E0 0x6208 #
+0xA4E1 0x6236 #
+0xA4E2 0x624B #
+0xA4E3 0x624E #
+0xA4E4 0x652F #
+0xA4E5 0x6587 #
+0xA4E6 0x6597 #
+0xA4E7 0x65A4 #
+0xA4E8 0x65B9 #
+0xA4E9 0x65E5 #
+0xA4EA 0x66F0 #
+0xA4EB 0x6708 #
+0xA4EC 0x6728 #
+0xA4ED 0x6B20 #
+0xA4EE 0x6B62 #
+0xA4EF 0x6B79 #
+0xA4F0 0x6BCB #
+0xA4F1 0x6BD4 #
+0xA4F2 0x6BDB #
+0xA4F3 0x6C0F #
+0xA4F4 0x6C34 #
+0xA4F5 0x706B #
+0xA4F6 0x722A #
+0xA4F7 0x7236 #
+0xA4F8 0x723B #
+0xA4F9 0x7247 #
+0xA4FA 0x7259 #
+0xA4FB 0x725B #
+0xA4FC 0x72AC #
+0xA4FD 0x738B #
+0xA4FE 0x4E19 #
+0xA540 0x4E16 #
+0xA541 0x4E15 #
+0xA542 0x4E14 #
+0xA543 0x4E18 #
+0xA544 0x4E3B #
+0xA545 0x4E4D #
+0xA546 0x4E4F #
+0xA547 0x4E4E #
+0xA548 0x4EE5 #
+0xA549 0x4ED8 #
+0xA54A 0x4ED4 #
+0xA54B 0x4ED5 #
+0xA54C 0x4ED6 #
+0xA54D 0x4ED7 #
+0xA54E 0x4EE3 #
+0xA54F 0x4EE4 #
+0xA550 0x4ED9 #
+0xA551 0x4EDE #
+0xA552 0x5145 #
+0xA553 0x5144 #
+0xA554 0x5189 #
+0xA555 0x518A #
+0xA556 0x51AC #
+0xA557 0x51F9 #
+0xA558 0x51FA #
+0xA559 0x51F8 #
+0xA55A 0x520A #
+0xA55B 0x52A0 #
+0xA55C 0x529F #
+0xA55D 0x5305 #
+0xA55E 0x5306 #
+0xA55F 0x5317 #
+0xA560 0x531D #
+0xA561 0x4EDF #
+0xA562 0x534A #
+0xA563 0x5349 #
+0xA564 0x5361 #
+0xA565 0x5360 #
+0xA566 0x536F #
+0xA567 0x536E #
+0xA568 0x53BB #
+0xA569 0x53EF #
+0xA56A 0x53E4 #
+0xA56B 0x53F3 #
+0xA56C 0x53EC #
+0xA56D 0x53EE #
+0xA56E 0x53E9 #
+0xA56F 0x53E8 #
+0xA570 0x53FC #
+0xA571 0x53F8 #
+0xA572 0x53F5 #
+0xA573 0x53EB #
+0xA574 0x53E6 #
+0xA575 0x53EA #
+0xA576 0x53F2 #
+0xA577 0x53F1 #
+0xA578 0x53F0 #
+0xA579 0x53E5 #
+0xA57A 0x53ED #
+0xA57B 0x53FB #
+0xA57C 0x56DB #
+0xA57D 0x56DA #
+0xA57E 0x5916 #
+0xA5A1 0x592E #
+0xA5A2 0x5931 #
+0xA5A3 0x5974 #
+0xA5A4 0x5976 #
+0xA5A5 0x5B55 #
+0xA5A6 0x5B83 #
+0xA5A7 0x5C3C #
+0xA5A8 0x5DE8 #
+0xA5A9 0x5DE7 #
+0xA5AA 0x5DE6 #
+0xA5AB 0x5E02 #
+0xA5AC 0x5E03 #
+0xA5AD 0x5E73 #
+0xA5AE 0x5E7C #
+0xA5AF 0x5F01 #
+0xA5B0 0x5F18 #
+0xA5B1 0x5F17 #
+0xA5B2 0x5FC5 #
+0xA5B3 0x620A #
+0xA5B4 0x6253 #
+0xA5B5 0x6254 #
+0xA5B6 0x6252 #
+0xA5B7 0x6251 #
+0xA5B8 0x65A5 #
+0xA5B9 0x65E6 #
+0xA5BA 0x672E #